lapeh 2.2.7 → 2.2.9

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 (149) hide show
  1. package/{api-testing-sepuluh → api-testing-enambelas}/package-lock.json +22 -34
  2. package/{api-testing-sepuluh → api-testing-enambelas}/package.json +12 -9
  3. package/{api-testing-sepuluh → api-testing-enambelas}/tsconfig.json +5 -1
  4. package/api-testing-tujuhbelas/.env.example +19 -0
  5. package/api-testing-tujuhbelas/api-testing-enambelas/.env.example +19 -0
  6. package/api-testing-tujuhbelas/api-testing-enambelas/doc/ARCHITECTURE_GUIDE.md +73 -0
  7. package/api-testing-tujuhbelas/api-testing-enambelas/doc/CHANGELOG.md +77 -0
  8. package/api-testing-tujuhbelas/api-testing-enambelas/doc/CHEATSHEET.md +94 -0
  9. package/api-testing-tujuhbelas/api-testing-enambelas/doc/CLI.md +106 -0
  10. package/api-testing-tujuhbelas/api-testing-enambelas/doc/CONTRIBUTING.md +105 -0
  11. package/api-testing-tujuhbelas/api-testing-enambelas/doc/DEPLOYMENT.md +122 -0
  12. package/api-testing-tujuhbelas/api-testing-enambelas/doc/FAQ.md +81 -0
  13. package/api-testing-tujuhbelas/api-testing-enambelas/doc/FEATURES.md +165 -0
  14. package/api-testing-tujuhbelas/api-testing-enambelas/doc/GETTING_STARTED.md +108 -0
  15. package/api-testing-tujuhbelas/api-testing-enambelas/doc/INTRODUCTION.md +60 -0
  16. package/api-testing-tujuhbelas/api-testing-enambelas/doc/PACKAGES.md +66 -0
  17. package/api-testing-tujuhbelas/api-testing-enambelas/doc/PERFORMANCE.md +91 -0
  18. package/api-testing-tujuhbelas/api-testing-enambelas/doc/ROADMAP.md +93 -0
  19. package/api-testing-tujuhbelas/api-testing-enambelas/doc/SECURITY.md +93 -0
  20. package/api-testing-tujuhbelas/api-testing-enambelas/doc/STRUCTURE.md +90 -0
  21. package/api-testing-tujuhbelas/api-testing-enambelas/doc/TUTORIAL.md +192 -0
  22. package/api-testing-tujuhbelas/api-testing-enambelas/docker-compose.yml +24 -0
  23. package/api-testing-tujuhbelas/api-testing-enambelas/eslint.config.mjs +26 -0
  24. package/api-testing-tujuhbelas/api-testing-enambelas/framework.md +168 -0
  25. package/api-testing-tujuhbelas/api-testing-enambelas/nodemon.json +6 -0
  26. package/api-testing-tujuhbelas/api-testing-enambelas/package.json +106 -0
  27. package/api-testing-tujuhbelas/api-testing-enambelas/prisma/base.prisma.template +7 -0
  28. package/api-testing-tujuhbelas/api-testing-enambelas/prisma/schema.prisma +183 -0
  29. package/api-testing-tujuhbelas/api-testing-enambelas/prisma/seed.ts +411 -0
  30. package/api-testing-tujuhbelas/api-testing-enambelas/prisma.config.ts +15 -0
  31. package/api-testing-tujuhbelas/api-testing-enambelas/readme.md +414 -0
  32. package/api-testing-tujuhbelas/api-testing-enambelas/scripts/check-update.js +92 -0
  33. package/api-testing-tujuhbelas/api-testing-enambelas/scripts/compile-schema.js +29 -0
  34. package/api-testing-tujuhbelas/api-testing-enambelas/scripts/config-clear.js +45 -0
  35. package/api-testing-tujuhbelas/api-testing-enambelas/scripts/generate-jwt-secret.js +38 -0
  36. package/api-testing-tujuhbelas/api-testing-enambelas/scripts/init-project.js +178 -0
  37. package/api-testing-tujuhbelas/api-testing-enambelas/scripts/make-controller.js +205 -0
  38. package/api-testing-tujuhbelas/api-testing-enambelas/scripts/make-model.js +42 -0
  39. package/api-testing-tujuhbelas/api-testing-enambelas/scripts/make-module.js +158 -0
  40. package/api-testing-tujuhbelas/api-testing-enambelas/scripts/verify-rbac-functional.js +187 -0
  41. package/api-testing-tujuhbelas/api-testing-enambelas/src/controllers/authController.ts +469 -0
  42. package/api-testing-tujuhbelas/api-testing-enambelas/src/controllers/petController.ts +194 -0
  43. package/api-testing-tujuhbelas/api-testing-enambelas/src/controllers/rbacController.ts +478 -0
  44. package/api-testing-tujuhbelas/api-testing-enambelas/src/models/core.prisma +163 -0
  45. package/api-testing-tujuhbelas/api-testing-enambelas/src/models/pets.prisma +9 -0
  46. package/api-testing-tujuhbelas/api-testing-enambelas/src/routes/auth.ts +74 -0
  47. package/api-testing-tujuhbelas/api-testing-enambelas/src/routes/index.ts +10 -0
  48. package/api-testing-tujuhbelas/api-testing-enambelas/src/routes/pets.ts +13 -0
  49. package/api-testing-tujuhbelas/api-testing-enambelas/src/routes/rbac.ts +42 -0
  50. package/api-testing-tujuhbelas/api-testing-enambelas/storage/logs/.gitkeep +0 -0
  51. package/api-testing-tujuhbelas/api-testing-enambelas/tsconfig.json +43 -0
  52. package/api-testing-tujuhbelas/doc/ARCHITECTURE_GUIDE.md +73 -0
  53. package/api-testing-tujuhbelas/doc/CHANGELOG.md +77 -0
  54. package/api-testing-tujuhbelas/doc/CHEATSHEET.md +94 -0
  55. package/api-testing-tujuhbelas/doc/CLI.md +106 -0
  56. package/api-testing-tujuhbelas/doc/CONTRIBUTING.md +105 -0
  57. package/api-testing-tujuhbelas/doc/DEPLOYMENT.md +122 -0
  58. package/api-testing-tujuhbelas/doc/FAQ.md +81 -0
  59. package/api-testing-tujuhbelas/doc/FEATURES.md +165 -0
  60. package/api-testing-tujuhbelas/doc/GETTING_STARTED.md +108 -0
  61. package/api-testing-tujuhbelas/doc/INTRODUCTION.md +60 -0
  62. package/api-testing-tujuhbelas/doc/PACKAGES.md +66 -0
  63. package/api-testing-tujuhbelas/doc/PERFORMANCE.md +91 -0
  64. package/api-testing-tujuhbelas/doc/ROADMAP.md +93 -0
  65. package/api-testing-tujuhbelas/doc/SECURITY.md +93 -0
  66. package/api-testing-tujuhbelas/doc/STRUCTURE.md +90 -0
  67. package/api-testing-tujuhbelas/doc/TUTORIAL.md +192 -0
  68. package/api-testing-tujuhbelas/docker-compose.yml +24 -0
  69. package/api-testing-tujuhbelas/eslint.config.mjs +26 -0
  70. package/api-testing-tujuhbelas/framework.md +168 -0
  71. package/api-testing-tujuhbelas/nodemon.json +6 -0
  72. package/api-testing-tujuhbelas/package-lock.json +5527 -0
  73. package/api-testing-tujuhbelas/package.json +106 -0
  74. package/api-testing-tujuhbelas/prisma/base.prisma.template +7 -0
  75. package/api-testing-tujuhbelas/prisma/migrations/20251227043210_init_setup/migration.sql +248 -0
  76. package/api-testing-tujuhbelas/prisma/migrations/migration_lock.toml +3 -0
  77. package/api-testing-tujuhbelas/prisma/schema.prisma +183 -0
  78. package/api-testing-tujuhbelas/prisma/seed.ts +411 -0
  79. package/api-testing-tujuhbelas/prisma.config.ts +15 -0
  80. package/api-testing-tujuhbelas/readme.md +414 -0
  81. package/api-testing-tujuhbelas/scripts/check-update.js +92 -0
  82. package/api-testing-tujuhbelas/scripts/compile-schema.js +29 -0
  83. package/api-testing-tujuhbelas/scripts/config-clear.js +45 -0
  84. package/api-testing-tujuhbelas/scripts/generate-jwt-secret.js +38 -0
  85. package/api-testing-tujuhbelas/scripts/init-project.js +178 -0
  86. package/api-testing-tujuhbelas/scripts/make-controller.js +205 -0
  87. package/api-testing-tujuhbelas/scripts/make-model.js +42 -0
  88. package/api-testing-tujuhbelas/scripts/make-module.js +158 -0
  89. package/api-testing-tujuhbelas/scripts/verify-rbac-functional.js +187 -0
  90. package/api-testing-tujuhbelas/src/controllers/authController.ts +469 -0
  91. package/api-testing-tujuhbelas/src/controllers/petController.ts +194 -0
  92. package/api-testing-tujuhbelas/src/controllers/rbacController.ts +478 -0
  93. package/api-testing-tujuhbelas/src/models/core.prisma +163 -0
  94. package/api-testing-tujuhbelas/src/models/pets.prisma +9 -0
  95. package/api-testing-tujuhbelas/src/routes/auth.ts +74 -0
  96. package/api-testing-tujuhbelas/src/routes/index.ts +10 -0
  97. package/api-testing-tujuhbelas/src/routes/pets.ts +13 -0
  98. package/api-testing-tujuhbelas/src/routes/rbac.ts +42 -0
  99. package/api-testing-tujuhbelas/storage/logs/.gitkeep +0 -0
  100. package/api-testing-tujuhbelas/tsconfig.json +43 -0
  101. package/bin/index.js +182 -13
  102. package/package.json +6 -6
  103. /package/{api-testing-sepuluh → api-testing-enambelas}/.env.example +0 -0
  104. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/ARCHITECTURE_GUIDE.md +0 -0
  105. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/CHANGELOG.md +0 -0
  106. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/CHEATSHEET.md +0 -0
  107. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/CLI.md +0 -0
  108. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/CONTRIBUTING.md +0 -0
  109. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/DEPLOYMENT.md +0 -0
  110. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/FAQ.md +0 -0
  111. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/FEATURES.md +0 -0
  112. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/GETTING_STARTED.md +0 -0
  113. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/INTRODUCTION.md +0 -0
  114. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/PACKAGES.md +0 -0
  115. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/PERFORMANCE.md +0 -0
  116. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/ROADMAP.md +0 -0
  117. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/SECURITY.md +0 -0
  118. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/STRUCTURE.md +0 -0
  119. /package/{api-testing-sepuluh → api-testing-enambelas}/doc/TUTORIAL.md +0 -0
  120. /package/{api-testing-sepuluh → api-testing-enambelas}/docker-compose.yml +0 -0
  121. /package/{api-testing-sepuluh → api-testing-enambelas}/eslint.config.mjs +0 -0
  122. /package/{api-testing-sepuluh → api-testing-enambelas}/framework.md +0 -0
  123. /package/{api-testing-sepuluh → api-testing-enambelas}/nodemon.json +0 -0
  124. /package/{api-testing-sepuluh → api-testing-enambelas}/prisma/base.prisma.template +0 -0
  125. /package/{api-testing-sepuluh/prisma/migrations/20251227034737_init_setup → api-testing-enambelas/prisma/migrations/20251227042956_init_setup}/migration.sql +0 -0
  126. /package/{api-testing-sepuluh → api-testing-enambelas}/prisma/migrations/migration_lock.toml +0 -0
  127. /package/{api-testing-sepuluh → api-testing-enambelas}/prisma/schema.prisma +0 -0
  128. /package/{api-testing-sepuluh → api-testing-enambelas}/prisma/seed.ts +0 -0
  129. /package/{api-testing-sepuluh → api-testing-enambelas}/prisma.config.ts +0 -0
  130. /package/{api-testing-sepuluh → api-testing-enambelas}/readme.md +0 -0
  131. /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/check-update.js +0 -0
  132. /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/compile-schema.js +0 -0
  133. /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/config-clear.js +0 -0
  134. /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/generate-jwt-secret.js +0 -0
  135. /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/init-project.js +0 -0
  136. /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/make-controller.js +0 -0
  137. /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/make-model.js +0 -0
  138. /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/make-module.js +0 -0
  139. /package/{api-testing-sepuluh → api-testing-enambelas}/scripts/verify-rbac-functional.js +0 -0
  140. /package/{api-testing-sepuluh → api-testing-enambelas}/src/controllers/authController.ts +0 -0
  141. /package/{api-testing-sepuluh → api-testing-enambelas}/src/controllers/petController.ts +0 -0
  142. /package/{api-testing-sepuluh → api-testing-enambelas}/src/controllers/rbacController.ts +0 -0
  143. /package/{api-testing-sepuluh → api-testing-enambelas}/src/models/core.prisma +0 -0
  144. /package/{api-testing-sepuluh → api-testing-enambelas}/src/models/pets.prisma +0 -0
  145. /package/{api-testing-sepuluh → api-testing-enambelas}/src/routes/auth.ts +0 -0
  146. /package/{api-testing-sepuluh → api-testing-enambelas}/src/routes/index.ts +0 -0
  147. /package/{api-testing-sepuluh → api-testing-enambelas}/src/routes/pets.ts +0 -0
  148. /package/{api-testing-sepuluh → api-testing-enambelas}/src/routes/rbac.ts +0 -0
  149. /package/{api-testing-sepuluh → api-testing-enambelas}/storage/logs/.gitkeep +0 -0
@@ -1,17 +1,27 @@
1
1
  {
2
- "name": "api-testing-sepuluh",
2
+ "name": "api-testing-enambelas",
3
3
  "version": "1.0.0",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
- "name": "api-testing-sepuluh",
8
+ "name": "api-testing-enambelas",
9
9
  "version": "1.0.0",
10
+ "hasInstallScript": true,
10
11
  "license": "MIT",
11
12
  "dependencies": {
12
13
  "@prisma/adapter-mariadb": "7.2.0",
13
14
  "@prisma/adapter-pg": "7.2.0",
14
15
  "@prisma/client": "7.2.0",
16
+ "@types/bcryptjs": "2.4.6",
17
+ "@types/compression": "^1.8.1",
18
+ "@types/cors": "2.8.19",
19
+ "@types/express": "5.0.6",
20
+ "@types/jsonwebtoken": "9.0.10",
21
+ "@types/multer": "^2.0.0",
22
+ "@types/node": "25.0.3",
23
+ "@types/pg": "8.16.0",
24
+ "@types/uuid": "10.0.0",
15
25
  "bcryptjs": "3.0.3",
16
26
  "compression": "^1.8.1",
17
27
  "cors": "2.8.5",
@@ -39,15 +49,8 @@
39
49
  },
40
50
  "devDependencies": {
41
51
  "@eslint/js": "^9.39.2",
42
- "@types/bcryptjs": "2.4.6",
43
52
  "@types/compression": "^1.7.5",
44
- "@types/cors": "2.8.19",
45
53
  "@types/express": "^5.0.0",
46
- "@types/jsonwebtoken": "9.0.10",
47
- "@types/multer": "^2.0.0",
48
- "@types/node": "25.0.3",
49
- "@types/pg": "8.16.0",
50
- "@types/uuid": "10.0.0",
51
54
  "eslint": "^9.39.2",
52
55
  "globals": "^16.5.0",
53
56
  "prisma": "7.2.0",
@@ -55,12 +58,21 @@
55
58
  }
56
59
  },
57
60
  "..": {
58
- "version": "2.2.6",
61
+ "version": "2.2.8",
59
62
  "license": "MIT",
60
63
  "dependencies": {
61
64
  "@prisma/adapter-mariadb": "7.2.0",
62
65
  "@prisma/adapter-pg": "7.2.0",
63
66
  "@prisma/client": "7.2.0",
67
+ "@types/bcryptjs": "2.4.6",
68
+ "@types/compression": "^1.8.1",
69
+ "@types/cors": "2.8.19",
70
+ "@types/express": "5.0.6",
71
+ "@types/jsonwebtoken": "9.0.10",
72
+ "@types/multer": "^2.0.0",
73
+ "@types/node": "25.0.3",
74
+ "@types/pg": "8.16.0",
75
+ "@types/uuid": "10.0.0",
64
76
  "bcryptjs": "3.0.3",
65
77
  "compression": "^1.8.1",
66
78
  "cors": "2.8.5",
@@ -90,15 +102,6 @@
90
102
  },
91
103
  "devDependencies": {
92
104
  "@eslint/js": "^9.39.2",
93
- "@types/bcryptjs": "2.4.6",
94
- "@types/compression": "^1.8.1",
95
- "@types/cors": "2.8.19",
96
- "@types/express": "5.0.6",
97
- "@types/jsonwebtoken": "9.0.10",
98
- "@types/multer": "^2.0.0",
99
- "@types/node": "25.0.3",
100
- "@types/pg": "8.16.0",
101
- "@types/uuid": "10.0.0",
102
105
  "eslint": "^9.39.2",
103
106
  "globals": "^16.5.0",
104
107
  "typescript-eslint": "^8.50.1"
@@ -790,14 +793,12 @@
790
793
  "version": "2.4.6",
791
794
  "resolved": "https://registry.npmjs.org/@types/bcryptjs/-/bcryptjs-2.4.6.tgz",
792
795
  "integrity": "sha512-9xlo6R2qDs5uixm0bcIqCeMCE6HiQsIyel9KQySStiyqNl2tnj2mP3DX1Nf56MD6KMenNNlBBsy3LJ7gUEQPXQ==",
793
- "dev": true,
794
796
  "license": "MIT"
795
797
  },
796
798
  "node_modules/@types/body-parser": {
797
799
  "version": "1.19.6",
798
800
  "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz",
799
801
  "integrity": "sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==",
800
- "dev": true,
801
802
  "license": "MIT",
802
803
  "dependencies": {
803
804
  "@types/connect": "*",
@@ -819,7 +820,6 @@
819
820
  "version": "3.4.38",
820
821
  "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz",
821
822
  "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==",
822
- "dev": true,
823
823
  "license": "MIT",
824
824
  "dependencies": {
825
825
  "@types/node": "*"
@@ -845,7 +845,6 @@
845
845
  "version": "5.0.6",
846
846
  "resolved": "https://registry.npmjs.org/@types/express/-/express-5.0.6.tgz",
847
847
  "integrity": "sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==",
848
- "dev": true,
849
848
  "license": "MIT",
850
849
  "dependencies": {
851
850
  "@types/body-parser": "*",
@@ -857,7 +856,6 @@
857
856
  "version": "5.1.0",
858
857
  "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz",
859
858
  "integrity": "sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==",
860
- "dev": true,
861
859
  "license": "MIT",
862
860
  "dependencies": {
863
861
  "@types/node": "*",
@@ -876,7 +874,6 @@
876
874
  "version": "2.0.5",
877
875
  "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.5.tgz",
878
876
  "integrity": "sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==",
879
- "dev": true,
880
877
  "license": "MIT"
881
878
  },
882
879
  "node_modules/@types/ioredis-mock": {
@@ -900,7 +897,6 @@
900
897
  "version": "9.0.10",
901
898
  "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz",
902
899
  "integrity": "sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA==",
903
- "dev": true,
904
900
  "license": "MIT",
905
901
  "dependencies": {
906
902
  "@types/ms": "*",
@@ -911,14 +907,12 @@
911
907
  "version": "2.1.0",
912
908
  "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz",
913
909
  "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==",
914
- "dev": true,
915
910
  "license": "MIT"
916
911
  },
917
912
  "node_modules/@types/multer": {
918
913
  "version": "2.0.0",
919
914
  "resolved": "https://registry.npmjs.org/@types/multer/-/multer-2.0.0.tgz",
920
915
  "integrity": "sha512-C3Z9v9Evij2yST3RSBktxP9STm6OdMc5uR1xF1SGr98uv8dUlAL2hqwrZ3GVB3uyMyiegnscEK6PGtYvNrjTjw==",
921
- "dev": true,
922
916
  "license": "MIT",
923
917
  "dependencies": {
924
918
  "@types/express": "*"
@@ -937,7 +931,6 @@
937
931
  "version": "8.16.0",
938
932
  "resolved": "https://registry.npmjs.org/@types/pg/-/pg-8.16.0.tgz",
939
933
  "integrity": "sha512-RmhMd/wD+CF8Dfo+cVIy3RR5cl8CyfXQ0tGgW6XBL8L4LM/UTEbNXYRbLwU6w+CgrKBNbrQWt4FUtTfaU5jSYQ==",
940
- "dev": true,
941
934
  "license": "MIT",
942
935
  "dependencies": {
943
936
  "@types/node": "*",
@@ -949,14 +942,12 @@
949
942
  "version": "6.14.0",
950
943
  "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz",
951
944
  "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==",
952
- "dev": true,
953
945
  "license": "MIT"
954
946
  },
955
947
  "node_modules/@types/range-parser": {
956
948
  "version": "1.2.7",
957
949
  "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz",
958
950
  "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==",
959
- "dev": true,
960
951
  "license": "MIT"
961
952
  },
962
953
  "node_modules/@types/react": {
@@ -974,7 +965,6 @@
974
965
  "version": "1.2.1",
975
966
  "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz",
976
967
  "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==",
977
- "dev": true,
978
968
  "license": "MIT",
979
969
  "dependencies": {
980
970
  "@types/node": "*"
@@ -984,7 +974,6 @@
984
974
  "version": "2.2.0",
985
975
  "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-2.2.0.tgz",
986
976
  "integrity": "sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==",
987
- "dev": true,
988
977
  "license": "MIT",
989
978
  "dependencies": {
990
979
  "@types/http-errors": "*",
@@ -1001,7 +990,6 @@
1001
990
  "version": "10.0.0",
1002
991
  "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-10.0.0.tgz",
1003
992
  "integrity": "sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==",
1004
- "dev": true,
1005
993
  "license": "MIT"
1006
994
  },
1007
995
  "node_modules/@typescript-eslint/eslint-plugin": {
@@ -1,5 +1,5 @@
1
1
  {
2
- "name": "api-testing-sepuluh",
2
+ "name": "api-testing-enambelas",
3
3
  "version": "1.0.0",
4
4
  "description": "Generated by lapeh",
5
5
  "main": "index.js",
@@ -31,7 +31,8 @@
31
31
  "make:module": "node scripts/make-module.js",
32
32
  "make:model": "node scripts/make-model.js",
33
33
  "make:controller": "node scripts/make-controller.js",
34
- "config:clear": "node scripts/config-clear.js"
34
+ "config:clear": "node scripts/config-clear.js",
35
+ "postinstall": "node scripts/compile-schema.js && prisma generate"
35
36
  },
36
37
  "keywords": [
37
38
  "nodejs-framework",
@@ -82,22 +83,24 @@
82
83
  "winston-daily-rotate-file": "^5.0.0",
83
84
  "zod": "3.23.8",
84
85
  "prisma": "7.2.0",
85
- "lapeh": "file:../"
86
- },
87
- "devDependencies": {
88
- "@eslint/js": "^9.39.2",
89
86
  "@types/bcryptjs": "2.4.6",
90
- "@types/compression": "^1.7.5",
87
+ "@types/compression": "^1.8.1",
91
88
  "@types/cors": "2.8.19",
92
- "@types/express": "^5.0.0",
89
+ "@types/express": "5.0.6",
93
90
  "@types/jsonwebtoken": "9.0.10",
94
91
  "@types/multer": "^2.0.0",
95
92
  "@types/node": "25.0.3",
96
93
  "@types/pg": "8.16.0",
97
94
  "@types/uuid": "10.0.0",
95
+ "lapeh": "file:../"
96
+ },
97
+ "devDependencies": {
98
+ "@eslint/js": "^9.39.2",
98
99
  "eslint": "^9.39.2",
99
100
  "globals": "^16.5.0",
100
101
  "typescript-eslint": "^8.50.1",
101
- "prisma": "7.2.0"
102
+ "prisma": "7.2.0",
103
+ "@types/express": "^5.0.0",
104
+ "@types/compression": "^1.7.5"
102
105
  }
103
106
  }
@@ -18,8 +18,12 @@
18
18
  ],
19
19
  "@/*": [
20
20
  "./src/*"
21
+ ],
22
+ "@lapeh/core/database": [
23
+ "./node_modules/lapeh/lib/prisma.ts"
21
24
  ]
22
- }
25
+ },
26
+ "baseUrl": "."
23
27
  },
24
28
  "include": [
25
29
  "lib",
@@ -0,0 +1,19 @@
1
+ PORT=8000
2
+ DATABASE_PROVIDER="postgresql"
3
+ DATABASE_URL="postgresql://sianu:12341234@localhost:5432/db_example_test?schema=public"
4
+
5
+ # Used for all encryption-related tasks in the framework (JWT, etc.)
6
+ JWT_SECRET="replace_this_with_a_secure_random_string"
7
+
8
+ # Framework Timezone
9
+ TZ="Asia/Jakarta"
10
+
11
+ # Redis Configuration (Optional)
12
+ # If REDIS_URL is not set or connection fails, the framework will automatically
13
+ # switch to an in-memory Redis mock (bundled). No installation required for development.
14
+ # REDIS_URL="redis://lapeh:12341234@localhost:6379"
15
+ # NO_REDIS="true"
16
+
17
+ # To force disable Redis and use in-memory mock even if Redis is available:
18
+ # NO_REDIS="true"
19
+
@@ -0,0 +1,19 @@
1
+ PORT=8000
2
+ DATABASE_PROVIDER="postgresql"
3
+ DATABASE_URL="postgresql://sianu:12341234@localhost:5432/db_example_test?schema=public"
4
+
5
+ # Used for all encryption-related tasks in the framework (JWT, etc.)
6
+ JWT_SECRET="replace_this_with_a_secure_random_string"
7
+
8
+ # Framework Timezone
9
+ TZ="Asia/Jakarta"
10
+
11
+ # Redis Configuration (Optional)
12
+ # If REDIS_URL is not set or connection fails, the framework will automatically
13
+ # switch to an in-memory Redis mock (bundled). No installation required for development.
14
+ # REDIS_URL="redis://lapeh:12341234@localhost:6379"
15
+ # NO_REDIS="true"
16
+
17
+ # To force disable Redis and use in-memory mock even if Redis is available:
18
+ # NO_REDIS="true"
19
+
@@ -0,0 +1,73 @@
1
+ # Panduan Arsitektur: Menuju "Framework as a Dependency" (Next.js Style)
2
+
3
+ Saat ini, Lapeh menggunakan pendekatan **Boilerplate** (seperti Laravel), di mana pengguna mendapatkan seluruh kode sumber (`src/`) dan bertanggung jawab atas `express`, `prisma`, dll.
4
+
5
+ Untuk mengubahnya menjadi seperti **Next.js** (di mana pengguna hanya menginstall `lapeh` dan `package.json` mereka bersih), kita perlu mengubah arsitektur menjadi **Library**.
6
+
7
+ ## 1. Perbedaan Utama
8
+
9
+ | Fitur | Boilerplate (Lapeh Saat Ini) | Library (Next.js Style) |
10
+ | :--- | :--- | :--- |
11
+ | **Instalasi** | `git clone` / `npx create-lapeh` | `npm install lapeh` |
12
+ | **package.json** | Banyak dependency (`express`, `cors`, dll) | Sedikit (`lapeh`, `react`) |
13
+ | **Scripts** | Panjang (`nodemon src/index.ts`) | Pendek (`lapeh dev`) |
14
+ | **Core Code** | Terbuka di `src/core/` | Tersembunyi di `node_modules/lapeh` |
15
+ | **Update** | Susah (harus merge manual) | Mudah (`npm update lapeh`) |
16
+
17
+ ## 2. Langkah Implementasi
18
+
19
+ Saya telah memulai langkah pertama dengan menambahkan **CLI Runner** di `bin/index.js`.
20
+
21
+ ### A. Update CLI (`bin/index.js`) ✅ (Sudah Dilakukan)
22
+ Saya sudah menambahkan command `dev`, `start`, dan `build` ke dalam CLI Lapeh. Ini memungkinkan pengguna menjalankan server tanpa tahu perintah aslinya.
23
+
24
+ ```javascript
25
+ // Contoh penggunaan nanti:
26
+ "scripts": {
27
+ "dev": "lapeh dev",
28
+ "build": "lapeh build",
29
+ "start": "lapeh start"
30
+ }
31
+ ```
32
+
33
+ ### B. Struktur Project Pengguna (Target)
34
+ Nantinya, project pengguna Lapeh hanya akan berisi file bisnis mereka:
35
+
36
+ ```text
37
+ my-app/
38
+ ├── src/
39
+ │ ├── controllers/
40
+ │ ├── routes/
41
+ │ └── models/
42
+ ├── lapeh.config.ts <-- Konfigurasi framework (pengganti edit core)
43
+ └── package.json
44
+ ```
45
+
46
+ Dan `package.json` mereka akan terlihat seperti ini:
47
+
48
+ ```json
49
+ {
50
+ "name": "my-app",
51
+ "dependencies": {
52
+ "lapeh": "^2.0.0"
53
+ },
54
+ "scripts": {
55
+ "dev": "lapeh dev",
56
+ "build": "lapeh build",
57
+ "start": "lapeh start"
58
+ }
59
+ }
60
+ ```
61
+
62
+ ### C. Apa yang Harus Dilakukan Selanjutnya?
63
+
64
+ 1. **Publish Package**: Anda perlu mempublish folder framework ini ke NPM (atau private registry).
65
+ * Pastikan `express`, `cors`, `helmet`, dll ada di `dependencies` (bukan `devDependencies`).
66
+ 2. **Abstraksi `src/index.ts`**:
67
+ * Saat ini `src/index.ts` adalah entry point yang diedit user.
68
+ * Ubah agar `lapeh dev` menjalankan server internal yang **mengimpor** routes/controller user secara dinamis (seperti Next.js pages router).
69
+ 3. **Config Loader**:
70
+ * Buat sistem pembacaan `lapeh.config.ts` untuk mengatur Port, Database URL, dll tanpa mengedit kode core.
71
+
72
+ ## 3. Kesimpulan
73
+ Perubahan yang saya lakukan di `bin/index.js` adalah fondasi untuk CLI style. Untuk mencapai "Clean package.json" sepenuhnya, Anda harus memisahkan **Framework Core** (repo ini) dengan **User Project** (repo baru yang menginstall framework ini).
@@ -0,0 +1,77 @@
1
+ # Dokumentasi Perubahan Lapeh Framework
2
+
3
+ File ini mencatat semua perubahan, pembaruan, dan perbaikan yang dilakukan pada framework Lapeh, diurutkan berdasarkan tanggal.
4
+
5
+ ## [2025-12-27] - Code Quality & Standardization Update
6
+
7
+ ### 🚀 Fitur & Standarisasi
8
+
9
+ - **Standardized Import Paths**:
10
+ - Implementasi path alias `@/` untuk import yang lebih bersih (e.g., `import { prisma } from "@/core/database"`).
11
+ - Penghapusan penggunaan relative paths yang dalam (`../../../`).
12
+ - Konfigurasi `tsconfig.json` tanpa `baseUrl` (mengikuti standar TypeScript 6.0+).
13
+ - **Strict Linting & Code Quality**:
14
+ - Implementasi aturan **ESLint** ketat untuk mencegah "Dead Code".
15
+ - Error otomatis untuk variabel, parameter, dan import yang tidak digunakan (`no-unused-vars`).
16
+ - Script `npm run lint` dan `npm run lint:fix` untuk pembersihan kode otomatis.
17
+ - **Fastify-Style Standardization**:
18
+ - Penerapan standar respon cepat (`sendFastSuccess`) di seluruh controller (`AuthController`, `RbacController`, `PetController`).
19
+ - Penggunaan **Schema-based Serialization** untuk performa JSON maksimal.
20
+ - Konversi otomatis `BigInt` ke `string` dalam respon JSON.
21
+
22
+ ## [2025-12-27] - High Performance & Scalability Update
23
+
24
+ ### 🚀 Fitur Baru
25
+
26
+ - **High Performance Serialization (Fastify-Style)**:
27
+ - Implementasi `fast-json-stringify` untuk serialisasi JSON super cepat (2x-3x lebih cepat dari `JSON.stringify`).
28
+ - Helper `sendFastSuccess` di `src/utils/response.ts` untuk mem-bypass overhead Express.
29
+ - Caching schema serializer otomatis di `src/core/serializer.ts`.
30
+ - **Scalability & Clustering**:
31
+ - Dukungan **Load Balancing** dengan Nginx.
32
+ - Dukungan **Redis Clustering** untuk Rate Limiter (`rate-limit-redis`).
33
+ - File konfigurasi `docker-compose.cluster.yml` untuk simulasi cluster lokal (1 Nginx + 2 App Instances + 1 Redis).
34
+ - **Smart Error Handling**:
35
+ - Deteksi otomatis port bentrok (`EADDRINUSE`) saat startup.
36
+ - Memberikan saran command _copy-paste_ untuk mematikan process yang memblokir port (support Windows, Mac, Linux).
37
+ - **SEO Optimization**:
38
+ - Update metadata `package.json` dan `README.md` agar framework lebih mudah ditemukan di Google/NPM.
39
+
40
+ ## [2025-12-27] - Pembaruan Struktur & Validasi
41
+
42
+ ### 🚀 Fitur Baru
43
+
44
+ - **Laravel-style Validator**:
45
+ - Implementasi utility `Validator` baru di `src/utils/validator.ts` yang meniru gaya validasi Laravel.
46
+ - Mendukung rule string seperti `required|string|min:3|email`.
47
+ - Penambahan rule `unique` untuk pengecekan database otomatis (Prisma).
48
+ - Penambahan rule `mimes`, `image`, `max` (file size) untuk validasi upload file.
49
+ - Penambahan rule `sometimes` untuk field opsional.
50
+ - **Framework Hardening (Keamanan & Stabilitas)**:
51
+ - **Rate Limiting**: Middleware anti-spam/brute-force di `src/middleware/rateLimit.ts`.
52
+ - **Request Logger**: Pencatatan log request masuk di `src/middleware/requestLogger.ts`.
53
+ - **Health Check**: Endpoint `/` kini mengembalikan status kesehatan server.
54
+ - **Graceful Shutdown**: Penanganan penutupan koneksi Database dan Redis yang aman saat server berhenti (`SIGTERM`/`SIGINT`).
55
+ - **Environment Validation**: Validasi variabel `.env` wajib (seperti `DATABASE_URL`, `JWT_SECRET`) saat startup.
56
+ - **Struktur Folder Baru**:
57
+ - Pemisahan konfigurasi inti ke `src/core/` (`server.ts`, `database.ts`, `redis.ts`, `realtime.ts`) agar folder `src` lebih bersih.
58
+ - Sentralisasi route di `src/routes/index.ts` (WIP).
59
+ - **CLI Improvements**:
60
+ - `npx lapeh <project-name> --full` kini otomatis menjalankan server dev setelah instalasi selesai, sehingga user bisa langsung melihat hasil tanpa mengetik perintah tambahan.
61
+
62
+ ### 🛠️ Perbaikan & Refactoring
63
+
64
+ - **Controller Refactoring**:
65
+ - `AuthController`: Migrasi ke `Validator` baru, termasuk validasi upload avatar.
66
+ - `PetController`: Migrasi ke `Validator` baru.
67
+ - `RbacController`: Migrasi sebagian ke `Validator` baru.
68
+ - **Pembersihan**:
69
+ - Penghapusan folder `src/schema/` (Zod schema lama) karena sudah digantikan oleh `Validator` utility.
70
+ - Penghapusan file duplikat/lama di root `src/` setelah migrasi ke `src/core/`.
71
+
72
+ ### 📝 Catatan Teknis
73
+
74
+ - **Validator Async**: Method `fails()`, `passes()`, dan `validated()` kini bersifat `async` untuk mendukung pengecekan database (`unique`).
75
+ - **Type Safety**: Semua perubahan telah diverifikasi dengan `npm run typecheck`.
76
+
77
+ ---
@@ -0,0 +1,94 @@
1
+ # Lapeh Framework Cheatsheet
2
+
3
+ Referensi cepat untuk perintah dan kode yang sering digunakan.
4
+
5
+ ## 💻 CLI Commands
6
+
7
+ | Perintah | Fungsi |
8
+ | :----------------------------------- | :------------------------------------------- |
9
+ | **`npm run dev`** | Menjalankan server development (hot-reload). |
10
+ | **`npm run typecheck`** | Cek error TypeScript (tanpa compile). |
11
+ | **`npm run lint`** | Cek kode kotor/variabel tidak terpakai. |
12
+ | **`npm run lint:fix`** | Perbaiki kode kotor otomatis. |
13
+ | **`npm run make:module <Name>`** | Buat Controller, Route, & Model sekaligus. |
14
+ | **`npm run make:controller <Name>`** | Buat Controller saja. |
15
+ | **`npm run make:model <Name>`** | Buat Model Prisma saja. |
16
+ | **`npm run prisma:migrate`** | Apply perubahan schema ke DB lokal. |
17
+ | **`npm run db:studio`** | Buka GUI Database. |
18
+ | **`npm run db:seed`** | Isi data dummy. |
19
+ | **`npm run db:reset`** | Hapus DB & mulai dari nol. |
20
+
21
+ ## 🛡️ Validator Rules (Laravel-Style)
22
+
23
+ Gunakan di `Validator.make(data, rules)`.
24
+
25
+ | Rule | Deskripsi | Contoh |
26
+ | :----------------- | :---------------------- | :---------------------------------- | -------- |
27
+ | `required` | Wajib ada & tidak null. | `"required"` |
28
+ | `string` | Harus text. | `"required | string"` |
29
+ | `number` | Harus angka. | `"required | number"` |
30
+ | `email` | Format email valid. | `"required | email"` |
31
+ | `min:X` | Min panjang/nilai. | `"min:8"` (pass), `"min:18"` (umur) |
32
+ | `max:X` | Max panjang/nilai. | `"max:255"` |
33
+ | `unique:table,col` | Cek unik di DB. | `"unique:users,email"` |
34
+ | `exists:table,col` | Cek exist di DB. | `"exists:roles,id"` |
35
+ | `image` | File harus gambar. | `"required | image"` |
36
+ | `mimes:types` | File extension. | `"mimes:pdf,docx"` |
37
+
38
+ ## 🔑 Authentication
39
+
40
+ **Middleware di Route:**
41
+
42
+ ```typescript
43
+ import { requireAuth, requireAdmin } from "@/middleware/auth";
44
+
45
+ router.get("/profile", requireAuth, getProfile); // Login User
46
+ router.delete("/user", requireAuth, requireAdmin, del); // Admin Only
47
+ ```
48
+
49
+ **Akses User di Controller:**
50
+
51
+ ```typescript
52
+ // (req as any).user tersedia setelah requireAuth
53
+ const userId = (req as any).user.userId;
54
+ const role = (req as any).user.role;
55
+ ```
56
+
57
+ ## ⚡ Fast Response (Serializer)
58
+
59
+ **1. Schema:**
60
+
61
+ ```typescript
62
+ const schema = {
63
+ type: "object",
64
+ properties: {
65
+ id: { type: "string" },
66
+ name: { type: "string" },
67
+ },
68
+ };
69
+ ```
70
+
71
+ **2. Serializer:**
72
+
73
+ ```typescript
74
+ const serializer = getSerializer("key-name", createResponseSchema(schema));
75
+ ```
76
+
77
+ **3. Send:**
78
+
79
+ ```typescript
80
+ sendFastSuccess(res, 200, serializer, { ...data });
81
+ ```
82
+
83
+ ## 📦 Redis (Cache)
84
+
85
+ ```typescript
86
+ import { redis } from "@lapeh/core/redis";
87
+
88
+ // Set Cache (Key, Value, Mode, Detik)
89
+ await redis.set("profile:1", JSON.stringify(data), "EX", 3600);
90
+
91
+ // Get Cache
92
+ const cached = await redis.get("profile:1");
93
+ if (cached) return JSON.parse(cached);
94
+ ```
@@ -0,0 +1,106 @@
1
+ # CLI Tools & Scripts
2
+
3
+ Lapeh Framework dilengkapi dengan berbagai script CLI untuk mempercepat proses development, mulai dari generate code hingga manajemen database.
4
+
5
+ Semua perintah dijalankan menggunakan `npm run <command>`.
6
+
7
+ ## Code Generators
8
+
9
+ Gunakan perintah ini untuk membuat file boilerplate secara otomatis.
10
+
11
+ ### 1. Membuat Module Lengkap (`make:module`)
12
+ Membuat Controller, Route, dan Model (Schema) sekaligus.
13
+
14
+ ```bash
15
+ npm run make:module <nama-module>
16
+ ```
17
+ **Contoh:** `npm run make:module Product`
18
+
19
+ Output:
20
+ - `src/controllers/productController.ts`
21
+ - `src/routes/product.ts`
22
+ - `src/models/product.prisma`
23
+
24
+ ### 2. Membuat Controller (`make:controller`)
25
+ Hanya membuat file controller dengan method CRUD dasar.
26
+
27
+ ```bash
28
+ npm run make:controller <nama-controller>
29
+ ```
30
+ **Contoh:** `npm run make:controller Order` (Akan membuat `src/controllers/orderController.ts`)
31
+
32
+ ### 3. Membuat Model Database (`make:model`)
33
+ Hanya membuat file schema Prisma baru.
34
+
35
+ ```bash
36
+ npm run make:model <nama-model>
37
+ ```
38
+ **Contoh:** `npm run make:model Transaction` (Akan membuat `src/models/transaction.prisma`)
39
+
40
+ ## Database Management (Prisma)
41
+
42
+ Framework ini menggunakan sistem **Multi-File Schema**. Anda tidak mengedit `schema.prisma` secara langsung, melainkan mengedit file kecil di `src/models/*.prisma`.
43
+
44
+ ### 1. Migrasi Database (`prisma:migrate`)
45
+ Jalankan setiap kali Anda mengubah definisi model di `src/models/*.prisma`.
46
+
47
+ ```bash
48
+ npm run prisma:migrate
49
+ ```
50
+ Perintah ini akan:
51
+ 1. Menggabungkan semua file `.prisma` di `src/models/` menjadi satu `prisma/schema.prisma`.
52
+ 2. Membuat file migrasi SQL.
53
+ 3. Menerapkan perubahan ke database lokal.
54
+ 4. Men-generate ulang Prisma Client (Type Definitions).
55
+
56
+ ### 2. Deploy ke Production (`prisma:deploy`)
57
+ Gunakan di server production. Hanya menerapkan migrasi yang sudah ada tanpa reset data.
58
+
59
+ ```bash
60
+ npm run prisma:deploy
61
+ ```
62
+
63
+ ### 3. Database Studio (`db:studio`)
64
+ Membuka GUI di browser untuk melihat dan mengedit data database.
65
+
66
+ ```bash
67
+ npm run db:studio
68
+ ```
69
+
70
+ ### 4. Seeding Data (`db:seed`)
71
+ Mengisi database dengan data awal yang didefinisikan di `prisma/seed.ts`.
72
+
73
+ ```bash
74
+ npm run db:seed
75
+ ```
76
+
77
+ ### 5. Reset Database (`db:reset`)
78
+ **PERINGATAN:** Menghapus semua data dan tabel, lalu menjalankan migrasi dari awal.
79
+
80
+ ```bash
81
+ npm run db:reset
82
+ ```
83
+
84
+ ## Code Quality & Utilities
85
+
86
+ ### 1. Linting (`lint`)
87
+ Memeriksa kode dari error, variabel tidak terpakai, dan gaya penulisan.
88
+
89
+ ```bash
90
+ npm run lint
91
+ ```
92
+ Gunakan `npm run lint:fix` untuk memperbaiki error otomatis.
93
+
94
+ ### 2. Type Check (`typecheck`)
95
+ Memeriksa error tipe data TypeScript tanpa melakukan compile.
96
+
97
+ ```bash
98
+ npm run typecheck
99
+ ```
100
+
101
+ ### 3. Generate JWT Secret (`generate:jwt`)
102
+ Membuat random string aman untuk `JWT_SECRET` di file `.env`.
103
+
104
+ ```bash
105
+ npm run generate:jwt
106
+ ```