generator-pninja 1.3.0 → 1.5.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.
Files changed (244) hide show
  1. package/README.md +3 -0
  2. package/generators/app/index.js +41 -5
  3. package/generators/app/templates/package.json.ejs +23 -22
  4. package/generators/auth/index.js +9 -0
  5. package/generators/client/index.js +37 -3
  6. package/generators/client/react.inc.js +20 -6
  7. package/generators/client/templates/react/.env.ejs +2 -1
  8. package/generators/client/templates/react/package-lock.json.ejs +7 -6
  9. package/generators/client/templates/react/package.json.ejs +1 -1
  10. package/generators/client/templates/react/public/locales/migrations/am.json +43 -0
  11. package/generators/client/templates/react/public/locales/migrations/ar.json +43 -0
  12. package/generators/client/templates/react/public/locales/migrations/az.json +43 -0
  13. package/generators/client/templates/react/public/locales/migrations/bg.json +43 -0
  14. package/generators/client/templates/react/public/locales/migrations/bn.json +43 -0
  15. package/generators/client/templates/react/public/locales/migrations/ca.json +43 -0
  16. package/generators/client/templates/react/public/locales/migrations/cs.json +43 -0
  17. package/generators/client/templates/react/public/locales/migrations/cy.json +43 -0
  18. package/generators/client/templates/react/public/locales/migrations/da.json +43 -0
  19. package/generators/client/templates/react/public/locales/migrations/de.json +43 -0
  20. package/generators/client/templates/react/public/locales/migrations/el.json +43 -0
  21. package/generators/client/templates/react/public/locales/migrations/en.json +43 -0
  22. package/generators/client/templates/react/public/locales/migrations/es.json +43 -0
  23. package/generators/client/templates/react/public/locales/migrations/et.json +43 -0
  24. package/generators/client/templates/react/public/locales/migrations/eu.json +43 -0
  25. package/generators/client/templates/react/public/locales/migrations/fa.json +43 -0
  26. package/generators/client/templates/react/public/locales/migrations/fi.json +43 -0
  27. package/generators/client/templates/react/public/locales/migrations/fr.json +43 -0
  28. package/generators/client/templates/react/public/locales/migrations/fy.json +43 -0
  29. package/generators/client/templates/react/public/locales/migrations/ga.json +43 -0
  30. package/generators/client/templates/react/public/locales/migrations/gl.json +43 -0
  31. package/generators/client/templates/react/public/locales/migrations/gu.json +43 -0
  32. package/generators/client/templates/react/public/locales/migrations/ha.json +43 -0
  33. package/generators/client/templates/react/public/locales/migrations/he.json +43 -0
  34. package/generators/client/templates/react/public/locales/migrations/hi.json +43 -0
  35. package/generators/client/templates/react/public/locales/migrations/hr.json +43 -0
  36. package/generators/client/templates/react/public/locales/migrations/ht.json +43 -0
  37. package/generators/client/templates/react/public/locales/migrations/hu.json +43 -0
  38. package/generators/client/templates/react/public/locales/migrations/hy.json +43 -0
  39. package/generators/client/templates/react/public/locales/migrations/id.json +43 -0
  40. package/generators/client/templates/react/public/locales/migrations/is.json +43 -0
  41. package/generators/client/templates/react/public/locales/migrations/it.json +43 -0
  42. package/generators/client/templates/react/public/locales/migrations/ja.json +43 -0
  43. package/generators/client/templates/react/public/locales/migrations/kk.json +43 -0
  44. package/generators/client/templates/react/public/locales/migrations/ko.json +43 -0
  45. package/generators/client/templates/react/public/locales/migrations/lt.json +43 -0
  46. package/generators/client/templates/react/public/locales/migrations/lv.json +43 -0
  47. package/generators/client/templates/react/public/locales/migrations/mi.json +43 -0
  48. package/generators/client/templates/react/public/locales/migrations/ms.json +43 -0
  49. package/generators/client/templates/react/public/locales/migrations/mt.json +43 -0
  50. package/generators/client/templates/react/public/locales/migrations/nl.json +43 -0
  51. package/generators/client/templates/react/public/locales/migrations/no.json +43 -0
  52. package/generators/client/templates/react/public/locales/migrations/om.json +43 -0
  53. package/generators/client/templates/react/public/locales/migrations/pl.json +43 -0
  54. package/generators/client/templates/react/public/locales/migrations/pt.json +43 -0
  55. package/generators/client/templates/react/public/locales/migrations/ro.json +43 -0
  56. package/generators/client/templates/react/public/locales/migrations/ru.json +43 -0
  57. package/generators/client/templates/react/public/locales/migrations/rw.json +43 -0
  58. package/generators/client/templates/react/public/locales/migrations/sk.json +43 -0
  59. package/generators/client/templates/react/public/locales/migrations/sl.json +43 -0
  60. package/generators/client/templates/react/public/locales/migrations/sq.json +43 -0
  61. package/generators/client/templates/react/public/locales/migrations/sr.json +43 -0
  62. package/generators/client/templates/react/public/locales/migrations/sv.json +43 -0
  63. package/generators/client/templates/react/public/locales/migrations/sw.json +43 -0
  64. package/generators/client/templates/react/public/locales/migrations/ta.json +43 -0
  65. package/generators/client/templates/react/public/locales/migrations/tr.json +43 -0
  66. package/generators/client/templates/react/public/locales/migrations/uk.json +43 -0
  67. package/generators/client/templates/react/public/locales/migrations/ur.json +43 -0
  68. package/generators/client/templates/react/public/locales/migrations/uz.json +43 -0
  69. package/generators/client/templates/react/public/locales/migrations/vi.json +43 -0
  70. package/generators/client/templates/react/public/locales/migrations/yo.json +43 -0
  71. package/generators/client/templates/react/public/locales/migrations/zh.json +43 -0
  72. package/generators/client/templates/react/public/locales/migrations/zu.json +43 -0
  73. package/generators/client/templates/react/public/locales/searchReindex/am.json +60 -0
  74. package/generators/client/templates/react/public/locales/searchReindex/ar.json +60 -0
  75. package/generators/client/templates/react/public/locales/searchReindex/az.json +60 -0
  76. package/generators/client/templates/react/public/locales/searchReindex/bg.json +60 -0
  77. package/generators/client/templates/react/public/locales/searchReindex/bn.json +60 -0
  78. package/generators/client/templates/react/public/locales/searchReindex/ca.json +60 -0
  79. package/generators/client/templates/react/public/locales/searchReindex/cs.json +60 -0
  80. package/generators/client/templates/react/public/locales/searchReindex/cy.json +60 -0
  81. package/generators/client/templates/react/public/locales/searchReindex/da.json +60 -0
  82. package/generators/client/templates/react/public/locales/searchReindex/de.json +60 -0
  83. package/generators/client/templates/react/public/locales/searchReindex/el.json +60 -0
  84. package/generators/client/templates/react/public/locales/searchReindex/en.json +60 -0
  85. package/generators/client/templates/react/public/locales/searchReindex/es.json +60 -0
  86. package/generators/client/templates/react/public/locales/searchReindex/et.json +60 -0
  87. package/generators/client/templates/react/public/locales/searchReindex/eu.json +60 -0
  88. package/generators/client/templates/react/public/locales/searchReindex/fa.json +60 -0
  89. package/generators/client/templates/react/public/locales/searchReindex/fi.json +60 -0
  90. package/generators/client/templates/react/public/locales/searchReindex/fr.json +60 -0
  91. package/generators/client/templates/react/public/locales/searchReindex/fy.json +60 -0
  92. package/generators/client/templates/react/public/locales/searchReindex/ga.json +60 -0
  93. package/generators/client/templates/react/public/locales/searchReindex/gl.json +60 -0
  94. package/generators/client/templates/react/public/locales/searchReindex/gu.json +60 -0
  95. package/generators/client/templates/react/public/locales/searchReindex/ha.json +60 -0
  96. package/generators/client/templates/react/public/locales/searchReindex/he.json +60 -0
  97. package/generators/client/templates/react/public/locales/searchReindex/hi.json +60 -0
  98. package/generators/client/templates/react/public/locales/searchReindex/hr.json +60 -0
  99. package/generators/client/templates/react/public/locales/searchReindex/ht.json +60 -0
  100. package/generators/client/templates/react/public/locales/searchReindex/hu.json +60 -0
  101. package/generators/client/templates/react/public/locales/searchReindex/hy.json +60 -0
  102. package/generators/client/templates/react/public/locales/searchReindex/id.json +60 -0
  103. package/generators/client/templates/react/public/locales/searchReindex/is.json +60 -0
  104. package/generators/client/templates/react/public/locales/searchReindex/it.json +60 -0
  105. package/generators/client/templates/react/public/locales/searchReindex/ja.json +60 -0
  106. package/generators/client/templates/react/public/locales/searchReindex/kk.json +60 -0
  107. package/generators/client/templates/react/public/locales/searchReindex/ko.json +60 -0
  108. package/generators/client/templates/react/public/locales/searchReindex/lt.json +60 -0
  109. package/generators/client/templates/react/public/locales/searchReindex/lv.json +60 -0
  110. package/generators/client/templates/react/public/locales/searchReindex/mi.json +60 -0
  111. package/generators/client/templates/react/public/locales/searchReindex/ms.json +60 -0
  112. package/generators/client/templates/react/public/locales/searchReindex/mt.json +60 -0
  113. package/generators/client/templates/react/public/locales/searchReindex/nl.json +60 -0
  114. package/generators/client/templates/react/public/locales/searchReindex/no.json +60 -0
  115. package/generators/client/templates/react/public/locales/searchReindex/om.json +60 -0
  116. package/generators/client/templates/react/public/locales/searchReindex/pl.json +60 -0
  117. package/generators/client/templates/react/public/locales/searchReindex/pt.json +60 -0
  118. package/generators/client/templates/react/public/locales/searchReindex/ro.json +60 -0
  119. package/generators/client/templates/react/public/locales/searchReindex/ru.json +60 -0
  120. package/generators/client/templates/react/public/locales/searchReindex/rw.json +60 -0
  121. package/generators/client/templates/react/public/locales/searchReindex/sk.json +60 -0
  122. package/generators/client/templates/react/public/locales/searchReindex/sl.json +60 -0
  123. package/generators/client/templates/react/public/locales/searchReindex/sq.json +60 -0
  124. package/generators/client/templates/react/public/locales/searchReindex/sr.json +60 -0
  125. package/generators/client/templates/react/public/locales/searchReindex/sv.json +60 -0
  126. package/generators/client/templates/react/public/locales/searchReindex/sw.json +60 -0
  127. package/generators/client/templates/react/public/locales/searchReindex/ta.json +60 -0
  128. package/generators/client/templates/react/public/locales/searchReindex/tr.json +60 -0
  129. package/generators/client/templates/react/public/locales/searchReindex/uk.json +60 -0
  130. package/generators/client/templates/react/public/locales/searchReindex/ur.json +60 -0
  131. package/generators/client/templates/react/public/locales/searchReindex/uz.json +60 -0
  132. package/generators/client/templates/react/public/locales/searchReindex/vi.json +60 -0
  133. package/generators/client/templates/react/public/locales/searchReindex/yo.json +60 -0
  134. package/generators/client/templates/react/public/locales/searchReindex/zh.json +60 -0
  135. package/generators/client/templates/react/public/locales/searchReindex/zu.json +60 -0
  136. package/generators/client/templates/react/public/locales/seeder/am.json +32 -0
  137. package/generators/client/templates/react/public/locales/seeder/ar.json +32 -0
  138. package/generators/client/templates/react/public/locales/seeder/az.json +32 -0
  139. package/generators/client/templates/react/public/locales/seeder/bg.json +32 -0
  140. package/generators/client/templates/react/public/locales/seeder/bn.json +32 -0
  141. package/generators/client/templates/react/public/locales/seeder/ca.json +32 -0
  142. package/generators/client/templates/react/public/locales/seeder/cs.json +32 -0
  143. package/generators/client/templates/react/public/locales/seeder/cy.json +32 -0
  144. package/generators/client/templates/react/public/locales/seeder/da.json +32 -0
  145. package/generators/client/templates/react/public/locales/seeder/de.json +32 -0
  146. package/generators/client/templates/react/public/locales/seeder/el.json +32 -0
  147. package/generators/client/templates/react/public/locales/seeder/en.json +32 -0
  148. package/generators/client/templates/react/public/locales/seeder/es.json +32 -0
  149. package/generators/client/templates/react/public/locales/seeder/et.json +32 -0
  150. package/generators/client/templates/react/public/locales/seeder/eu.json +32 -0
  151. package/generators/client/templates/react/public/locales/seeder/fa.json +32 -0
  152. package/generators/client/templates/react/public/locales/seeder/fi.json +32 -0
  153. package/generators/client/templates/react/public/locales/seeder/fr.json +32 -0
  154. package/generators/client/templates/react/public/locales/seeder/fy.json +32 -0
  155. package/generators/client/templates/react/public/locales/seeder/ga.json +32 -0
  156. package/generators/client/templates/react/public/locales/seeder/gl.json +32 -0
  157. package/generators/client/templates/react/public/locales/seeder/gu.json +32 -0
  158. package/generators/client/templates/react/public/locales/seeder/ha.json +32 -0
  159. package/generators/client/templates/react/public/locales/seeder/he.json +32 -0
  160. package/generators/client/templates/react/public/locales/seeder/hi.json +32 -0
  161. package/generators/client/templates/react/public/locales/seeder/hr.json +32 -0
  162. package/generators/client/templates/react/public/locales/seeder/ht.json +32 -0
  163. package/generators/client/templates/react/public/locales/seeder/hu.json +32 -0
  164. package/generators/client/templates/react/public/locales/seeder/hy.json +32 -0
  165. package/generators/client/templates/react/public/locales/seeder/id.json +32 -0
  166. package/generators/client/templates/react/public/locales/seeder/is.json +32 -0
  167. package/generators/client/templates/react/public/locales/seeder/it.json +32 -0
  168. package/generators/client/templates/react/public/locales/seeder/ja.json +32 -0
  169. package/generators/client/templates/react/public/locales/seeder/kk.json +32 -0
  170. package/generators/client/templates/react/public/locales/seeder/ko.json +32 -0
  171. package/generators/client/templates/react/public/locales/seeder/lt.json +32 -0
  172. package/generators/client/templates/react/public/locales/seeder/lv.json +32 -0
  173. package/generators/client/templates/react/public/locales/seeder/mi.json +32 -0
  174. package/generators/client/templates/react/public/locales/seeder/ms.json +32 -0
  175. package/generators/client/templates/react/public/locales/seeder/mt.json +32 -0
  176. package/generators/client/templates/react/public/locales/seeder/nl.json +32 -0
  177. package/generators/client/templates/react/public/locales/seeder/no.json +32 -0
  178. package/generators/client/templates/react/public/locales/seeder/om.json +32 -0
  179. package/generators/client/templates/react/public/locales/seeder/pl.json +32 -0
  180. package/generators/client/templates/react/public/locales/seeder/pt.json +32 -0
  181. package/generators/client/templates/react/public/locales/seeder/ro.json +32 -0
  182. package/generators/client/templates/react/public/locales/seeder/ru.json +32 -0
  183. package/generators/client/templates/react/public/locales/seeder/rw.json +32 -0
  184. package/generators/client/templates/react/public/locales/seeder/sk.json +32 -0
  185. package/generators/client/templates/react/public/locales/seeder/sl.json +32 -0
  186. package/generators/client/templates/react/public/locales/seeder/sq.json +32 -0
  187. package/generators/client/templates/react/public/locales/seeder/sr.json +32 -0
  188. package/generators/client/templates/react/public/locales/seeder/sv.json +32 -0
  189. package/generators/client/templates/react/public/locales/seeder/sw.json +32 -0
  190. package/generators/client/templates/react/public/locales/seeder/ta.json +32 -0
  191. package/generators/client/templates/react/public/locales/seeder/tr.json +32 -0
  192. package/generators/client/templates/react/public/locales/seeder/uk.json +32 -0
  193. package/generators/client/templates/react/public/locales/seeder/ur.json +32 -0
  194. package/generators/client/templates/react/public/locales/seeder/uz.json +32 -0
  195. package/generators/client/templates/react/public/locales/seeder/vi.json +32 -0
  196. package/generators/client/templates/react/public/locales/seeder/yo.json +32 -0
  197. package/generators/client/templates/react/public/locales/seeder/zh.json +32 -0
  198. package/generators/client/templates/react/public/locales/seeder/zu.json +32 -0
  199. package/generators/client/templates/react/src/App.tsx.ejs +39 -0
  200. package/generators/client/templates/react/src/components/LangSelect.tsx.ejs +1 -1
  201. package/generators/client/templates/react/src/components/Menu.tsx.ejs +35 -0
  202. package/generators/client/templates/react/src/components/Toast.tsx.ejs +3 -3
  203. package/generators/client/templates/react/src/i18n.js.ejs +1 -1
  204. package/generators/client/templates/react/src/index.css.ejs +1 -5
  205. package/generators/client/templates/react/src/pages/admin/Migrations.tsx.ejs +427 -0
  206. package/generators/client/templates/react/src/pages/search-reindex/SearchReindexList.tsx.ejs +716 -0
  207. package/generators/client/templates/react/src/pages/seeder/SeederList.tsx.ejs +478 -0
  208. package/generators/entities/index.js +2 -2
  209. package/generators/entities/templates/EntityFactory.php.ejs +0 -11
  210. package/generators/entities/templates/database/seeders/AcRuleSeeder.php.ejs +83 -0
  211. package/generators/entities/templates/database/seeders/DatabaseSeeder.php.ejs +28 -0
  212. package/generators/entities/templates/database/seeders/EntitySeeder.php.ejs +30 -0
  213. package/generators/entities/templates/database/seeders/ManyToManySeeder.php.ejs +20 -0
  214. package/generators/entities/templates/database/seeders/csv/.gitkeep +0 -0
  215. package/generators/entities/utils/factories-generator.js +29 -32
  216. package/generators/entities/utils/routers-generator.js +8 -1
  217. package/generators/entity/index.js +21 -6
  218. package/generators/final/templates/README.md.ejs +108 -0
  219. package/generators/search/index.js +23 -15
  220. package/generators/server/index.js +26 -10
  221. package/generators/server/templates/app/Http/Controllers/MigrationsController.php.ejs +56 -0
  222. package/generators/server/templates/app/Http/Controllers/SearchReindexController.php.ejs +133 -0
  223. package/generators/server/templates/app/Http/Controllers/SeederController.php.ejs +75 -0
  224. package/generators/server/templates/app/Http/Middleware/AccessControl.php.ejs +3 -0
  225. package/generators/server/templates/app/Http/Requests/ReindexRequest.php.ejs +32 -0
  226. package/generators/server/templates/app/Http/Requests/SeedCsvRequest.php.ejs +13 -0
  227. package/generators/server/templates/app/Http/Requests/SeedRequest.php.ejs +34 -0
  228. package/generators/server/templates/app/Jobs/ReindexEntityJob.php.ejs +63 -0
  229. package/generators/server/templates/app/Jobs/RunMigrationsJob.php.ejs +46 -0
  230. package/generators/server/templates/app/Jobs/RunSeederJob.php.ejs +43 -0
  231. package/generators/server/templates/app/Traits/SeederHelpers.php.ejs +56 -0
  232. package/generators/server/templates/routes/api.php.ejs +39 -2
  233. package/generators/server/templates/routes/console.php.ejs +1 -1
  234. package/generators/utils/reserved-words.js +1 -1
  235. package/package.json +1 -1
  236. package/generators/entities/templates/DatabaseSeeder.php.ejs +0 -183
  237. package/generators/entities/templates/app/Http/Middleware/AccessControl.php.ejs +0 -31
  238. package/generators/entities/templates/app/Http/Middleware/SessionAuth.php.ejs +0 -162
  239. package/generators/entities/templates/database/seeders/csv/AcRule.csv.ejs +0 -7
  240. package/generators/entities/templates/routes/api.php.ejs +0 -72
  241. package/generators/entities/templates/routes/console.php.ejs +0 -15
  242. package/generators/router/index.js +0 -12
  243. /package/generators/server/templates/{HandlesApiErrors.php.ejs → app/Traits/HandlesApiErrors.php.ejs} +0 -0
  244. /package/generators/server/templates/{HandlesUserRoles.php.ejs → app/Traits/HandlesUserRoles.php.ejs} +0 -0
package/README.md CHANGED
@@ -124,6 +124,8 @@ Fully wired together: auth, routing, forms, CRUD, migrations.
124
124
  ```
125
125
 
126
126
  - **CSV Database Seeding** - Populate your database from CSV files
127
+ - **Seeding Administration** - Web interface to run seeders individually or in bulk, with direct CSV upload from the browser
128
+ - **Migration Administration** - Web interface to run `migrate`, `rollback`, `migrate:fresh` and check `migrate:status` without the command line
127
129
  - **Audit Logging** - Complete change tracking for all entity modifications
128
130
  - **Interactive Entity Generator** - Create and modify entities through CLI prompts
129
131
  - **Incremental Migrations** - Automatic database migrations for entity changes
@@ -132,6 +134,7 @@ Fully wired together: auth, routing, forms, CRUD, migrations.
132
134
 
133
135
  - **Multiple Search Engines** - Choose from Database, Algolia, Elasticsearch, Meilisearch, Typesense, or Solr
134
136
  - **Laravel Scout Integration** - Seamless search engine configuration
137
+ - **Search Index Management** - Web interface to reindex, flush, and delete indexes per entity, with engine-specific actions for Elasticsearch (`elastic:migrate`, `migrate:reset`, `migrate:refresh`) and Meilisearch (`scout:sync-index-settings`)
135
138
 
136
139
  ### Accessibility & UX
137
140
 
@@ -12,10 +12,34 @@ const __dirname = path.dirname(__filename);
12
12
  export default class extends Generator {
13
13
  constructor(args, opts) {
14
14
  super(args, opts);
15
- this.option('fromMain', {
16
- type: Boolean,
17
- default: false
15
+ this.option('name', {
16
+ type: String,
17
+ description: 'Your project name'
18
18
  });
19
+ this.option('dmbs', {
20
+ type: String,
21
+ description: 'Your DBMS'
22
+ });
23
+ this.option('authentication', {
24
+ type: String,
25
+ description: 'The type of authentication to use',
26
+ });
27
+ this.option('clientType', {
28
+ type: String,
29
+ description: 'The type of client to use',
30
+ });
31
+ this.option('nativeLanguage', {
32
+ type: String,
33
+ description: 'The native language of the application',
34
+ });
35
+ this.option('languages', {
36
+ type: String,
37
+ description: 'Additional languages to install (comma separated)',
38
+ });
39
+ this.option('searchEngine', {
40
+ type: String,
41
+ description: 'The search engine to use (database, algolia, elastic, meilisearch, typesense, solr, null)',
42
+ })
19
43
  }
20
44
  async initializing() {
21
45
  hello(this.log, true);
@@ -31,6 +55,7 @@ export default class extends Generator {
31
55
  }, {
32
56
  fromMain: true,
33
57
  env: this.env,
58
+ authentication: this.options.authentication,
34
59
  resolved: authGeneratorPath,
35
60
  namespace: 'pninja:auth'
36
61
  });
@@ -58,6 +83,9 @@ export default class extends Generator {
58
83
  }, {
59
84
  fromMain: true,
60
85
  env: this.env,
86
+ clientType: this.options.clientType,
87
+ nativeLanguage: this.options.nativeLanguage,
88
+ languages: this.options.languages,
61
89
  resolved: clientGeneratorPath,
62
90
  namespace: 'pninja:client'
63
91
  });
@@ -73,6 +101,7 @@ export default class extends Generator {
73
101
  fromMain: true,
74
102
  env: this.env,
75
103
  resolved: searchGeneratorPath,
104
+ searchEngine: this.options.searchEngine,
76
105
  namespace: 'pninja:search'
77
106
  });
78
107
 
@@ -105,18 +134,25 @@ export default class extends Generator {
105
134
  });
106
135
  }
107
136
  async prompting() {
137
+ if (this.options.name && this.options.dbms) {
138
+ this.answers = {
139
+ name: this.options.name,
140
+ dbms: this.options.dbms
141
+ };
142
+ return;
143
+ }
108
144
  this.answers = await this.prompt([
109
145
  {
110
146
  type: "input",
111
147
  name: "name",
112
148
  message: "Your project name",
113
- default: this.config.get('name') || this.appname // Default to current folder name
149
+ default: this.options.name || this.config.get('name') || this.appname // Default to current folder name
114
150
  }, {
115
151
  store: true,
116
152
  type: "list",
117
153
  name: "dbms",
118
154
  message: "Your DBMS",
119
- default: this.config.get('dbms') || 'sqlite',
155
+ default: this.options.dbms || this.config.get('dbms') || 'sqlite',
120
156
  choices: [
121
157
  {
122
158
  name: `SQLite ${colors.dim('(Lightweight, serverless, file-based)')}`,
@@ -1,30 +1,31 @@
1
1
  {
2
- "name": "<%= packageName %>",
3
- "description": "<%= projectDescription %>",
4
- "version": "<%= projectVersion %>",
5
- "author": "<%= authorName %>",
6
- "license": "ISC",
7
- "dependencies": {
8
- },
9
- "scripts": {
10
- "dev": "concurrently \"npm run server\" \"npm run client\"",
11
- "client": "cd client && npm i --loglevel=error && npm run dev",
12
- "dump-server": "cd server && php artisan dump-server",
13
- "migrate": "cd server && php artisan migrate",
14
- "migrate:fresh": "cd server && php artisan migrate:fresh",
15
- "migrate:fresh:seed": "cd server && php artisan migrate:fresh --seed",
16
- "migrate:seed": "cd server && php artisan migrate --seed",
17
- "db:seed": "cd server && php artisan db:seed",
2
+ "name": "<%= packageName %>",
3
+ "description": "<%= projectDescription %>",
4
+ "version": "<%= projectVersion %>",
5
+ "author": "<%= authorName %>",
6
+ "license": "ISC",
7
+ "dependencies": {},
8
+ "scripts": {
9
+ "dev": "concurrently \"npm run server\" \"npm run queue:listen\" \"npm run client\"",
10
+ "client": "cd client && npm i --loglevel=error && npm run dev",
11
+ "dump-server": "cd server && php artisan dump-server",
12
+ "migrate": "cd server && php artisan migrate",
13
+ "migrate:fresh": "cd server && php artisan migrate:fresh",
14
+ "migrate:fresh:seed": "cd server && php artisan migrate:fresh --seed",
15
+ "migrate:seed": "cd server && php artisan migrate --seed",
16
+ "db:seed": "cd server && php artisan db:seed",
18
17
  <% if (searchEngine === 'elastic') { -%>
19
- "elastic:migrate": "cd server && php artisan elastic:migrate",
20
- "elastic:migrate:reset": "cd server && php artisan elastic:migrate:reset",
21
- "elastic:migrate:refresh": "cd server && php artisan elastic:migrate:refresh",
18
+ "elastic:migrate": "cd server && php artisan elastic:migrate",
19
+ "elastic:migrate:reset": "cd server && php artisan elastic:migrate:reset",
20
+ "elastic:migrate:refresh": "cd server && php artisan elastic:migrate:refresh",
22
21
  <% } -%>
23
22
  <% if (searchEngine === 'meilisearch') { -%>
24
- "scout:sync-index-settings": "cd server && php artisan scout:sync-index-settings",
23
+ "scout:sync-index-settings": "cd server && php artisan scout:sync-index-settings",
25
24
  <% } -%>
26
- "seed": "cd server && php artisan db:seed",
27
- "server": "cd server && php artisan serve"
25
+ "seed": "cd server && php artisan db:seed",
26
+ "server": "cd server && php artisan serve",
27
+ "queue:listen": "cd server && php artisan queue:listen",
28
+ "queue:work": "cd server && php artisan queue:work"
28
29
  },
29
30
  "devDependencies": {
30
31
  "concurrently": "^9.2.1"
@@ -14,9 +14,17 @@ export default class AuthGenerator extends Generator {
14
14
  type: Boolean,
15
15
  default: false
16
16
  });
17
+ this.option('authentication', {
18
+ type: String,
19
+ description: 'The type of authentication to use',
20
+ });
17
21
  }
18
22
 
19
23
  async prompting() {
24
+ if (this.options.authentication) {
25
+ this.answers = { authentication: this.options.authentication };
26
+ return;
27
+ }
20
28
  let prompts = [];
21
29
  if (this.options["fromMain"]) {
22
30
  prompts = [...prompts, ...[{
@@ -24,6 +32,7 @@ export default class AuthGenerator extends Generator {
24
32
  type: "list",
25
33
  name: "authentication",
26
34
  message: `Which ${colors.yellow('*type*')} of authentication would you like to use?`,
35
+ default: this.options.authentication || this.config.get('authentication') || 'keycloak',
27
36
  choices: [
28
37
  { name: 'Keycloak', value: 'keycloak' },
29
38
  { name: 'Sanctum', value: 'sanctum', disabled: "Not implemented yet" },
@@ -12,9 +12,39 @@ export default class AuthGenerator extends Generator {
12
12
  type: Boolean,
13
13
  default: false
14
14
  });
15
+ this.option('clientType', {
16
+ type: String,
17
+ description: 'The type of client to use',
18
+ });
19
+ this.option('nativeLanguage', {
20
+ type: String,
21
+ description: 'The native language of the application',
22
+ });
23
+ this.option('languages', {
24
+ type: String,
25
+ description: 'Additional languages to install (comma separated)',
26
+ });
15
27
  if (!this.options.fromMain) throw new Error("This generator should not be run directly. Please use the main generator to run this.");
16
28
  }
17
29
  async prompting() {
30
+ if (this.options.clientType && this.options.nativeLanguage && this.options.languages !== undefined) {
31
+ let languages = [];
32
+ if (this.options.languages === "false") {
33
+ languages = [];
34
+ }
35
+ else {
36
+ languages = this.options.languages
37
+ .split(',')
38
+ .map(l => l.trim())
39
+ .filter(Boolean);
40
+ }
41
+ this.answers = {
42
+ clientType: this.options.clientType,
43
+ nativeLanguage: this.options.nativeLanguage,
44
+ languages
45
+ };
46
+ return;
47
+ }
18
48
  let prompts = [];
19
49
  if (this.options["fromMain"] || true) {
20
50
  prompts = [...prompts, ...[{
@@ -22,7 +52,7 @@ export default class AuthGenerator extends Generator {
22
52
  type: "list",
23
53
  name: "clientType",
24
54
  message: `Which ${colors.yellow('*Framework*')} would you like to use for the client?`,
25
- default: this.config.get('clientType') || 'vue',
55
+ default: this.options.clientType || this.config.get('clientType') || 'react',
26
56
  choices: [
27
57
  { name: 'React', value: 'react' },
28
58
  { name: 'Vue', value: 'vue', disabled: "Not implemented yet" },
@@ -34,14 +64,18 @@ export default class AuthGenerator extends Generator {
34
64
  type: "list",
35
65
  name: "nativeLanguage",
36
66
  message: `Please choose the ${colors.yellow('*native language*')} of the application`,
37
- default: this.config.get('nativeLanguage') || DEFAULT_LANGUAGE,
67
+ default: this.options.nativeLanguage || this.config.get('nativeLanguage') || DEFAULT_LANGUAGE,
38
68
  choices: LANGUAGES
39
69
  }, {
40
70
  store: true,
41
71
  type: 'checkbox',
42
72
  name: 'languages',
43
73
  message: 'Please choose additional languages to install',
44
- default: this.config.get('languages') || [],
74
+ default: this.options['no-languages']
75
+ ? []
76
+ : this.options.languages
77
+ ? this.options.languages.split(',').map(lang => lang.trim())
78
+ : (this.config.get('languages') || []),
45
79
  choices: (answers) => {
46
80
  return getAvailableLanguages(answers.nativeLanguage);
47
81
  },
@@ -138,7 +138,7 @@ export async function createReactClient(that) {
138
138
 
139
139
  await that.spawn('npm', ['create', 'vite@6.1.1', 'client', '--', '--template', 'react-ts', '--no-install']);
140
140
 
141
- that.fs.copyTpl(that.templatePath('react/.env.ejs'), that.destinationPath('client/.env'), {});
141
+ that.fs.copyTpl(that.templatePath('react/.env.ejs'), that.destinationPath('client/.env'), { searchEngine });
142
142
  that.fs.copyTpl(that.templatePath('react/.gitignore.ejs'), that.destinationPath('client/.gitignore'), {});
143
143
  that.fs.copyTpl(that.templatePath('react/eslint.config.js.ejs'), that.destinationPath('client/eslint.config.js'), {});
144
144
  that.fs.copyTpl(that.templatePath('react/index.html.ejs'), that.destinationPath('client/index.html'), { appName });
@@ -150,9 +150,14 @@ export async function createReactClient(that) {
150
150
  that.fs.copyTpl(that.templatePath('react/vite.config.ts.ejs'), that.destinationPath('client/vite.config.ts'), {});
151
151
 
152
152
  for (const lang of languages) {
153
- that.fs.copyTpl(that.templatePath(`react/public/locales/log/${lang}.json`), that.destinationPath(`client/public/locales/${lang}/log.json`), { appName });
154
- that.fs.copyTpl(that.templatePath(`react/public/locales/audit/${lang}.json`), that.destinationPath(`client/public/locales/${lang}/audit.json`), { appName });
153
+ that.fs.copyTpl(that.templatePath(`react/public/locales/log/${lang}.json`), that.destinationPath(`client/public/locales/${lang}/log.json`));
154
+ that.fs.copyTpl(that.templatePath(`react/public/locales/audit/${lang}.json`), that.destinationPath(`client/public/locales/${lang}/audit.json`));
155
+ that.fs.copyTpl(that.templatePath(`react/public/locales/seeder/${lang}.json`), that.destinationPath(`client/public/locales/${lang}/seeder.json`));
156
+ that.fs.copyTpl(that.templatePath(`react/public/locales/migrations/${lang}.json`), that.destinationPath(`client/public/locales/${lang}/migrations.json`));
155
157
  that.fs.copyTpl(that.templatePath(`react/public/locales/common/${lang}.json.ejs`), that.destinationPath(`client/public/locales/${lang}/common.json`), { appName });
158
+ if (!['null', 'database'].includes(searchEngine)) {
159
+ that.fs.copyTpl(that.templatePath(`react/public/locales/searchReindex/${lang}.json`), that.destinationPath(`client/public/locales/${lang}/searchReindex.json`));
160
+ }
156
161
  that.fs.copyTpl(that.templatePath(`react/public/locales/entities/entities.json.ejs`), that.destinationPath(`client/public/locales/${lang}/entities.json`), {
157
162
  entities: [AcRule],
158
163
  relationships: [],
@@ -170,10 +175,11 @@ export async function createReactClient(that) {
170
175
  that.fs.copyTpl(that.templatePath("react/public/fonts/InterVariable.woff2"), that.destinationPath(`client/public/fonts/InterVariable.woff2`));
171
176
 
172
177
  that.fs.copyTpl(that.templatePath("react/src/App.css.ejs"), that.destinationPath(`client/src/App.css`), {});
173
- that.fs.copyTpl(that.templatePath("react/src/App.tsx.ejs"), that.destinationPath(`client/src/App.tsx`), { entities: [AcRule], to, pluralize });
178
+ that.fs.copyTpl(that.templatePath("react/src/App.tsx.ejs"), that.destinationPath(`client/src/App.tsx`), { entities: [AcRule], to, pluralize, searchEngine });
174
179
  that.fs.copyTpl(that.templatePath("react/src/i18n.js.ejs"), that.destinationPath(`client/src/i18n.js`), {
175
180
  supportedLngs: JSON.stringify(languages).replaceAll(`"`, `'`),
176
- fallbackLng: nativeLanguage
181
+ fallbackLng: nativeLanguage,
182
+ searchEngine
177
183
  });
178
184
  that.fs.copyTpl(that.templatePath("react/src/index.css.ejs"), that.destinationPath(`client/src/index.css`), { navbarStartcolor });
179
185
  that.fs.copyTpl(that.templatePath("react/src/main.tsx.ejs"), that.destinationPath(`client/src/main.tsx`), {});
@@ -232,7 +238,7 @@ export async function createReactClient(that) {
232
238
  that.fs.copyTpl(that.templatePath("react/src/components/LangSelect.tsx.ejs"), that.destinationPath(`client/src/components/LangSelect.tsx`), { to });
233
239
  that.fs.copyTpl(that.templatePath("react/src/components/LoginButton.tsx.ejs"), that.destinationPath(`client/src/components/LoginButton.tsx`), {});
234
240
  that.fs.copyTpl(that.templatePath("react/src/components/LogoutButton.tsx.ejs"), that.destinationPath(`client/src/components/LogoutButton.tsx`), {});
235
- that.fs.copyTpl(that.templatePath("react/src/components/Menu.tsx.ejs"), that.destinationPath(`client/src/components/Menu.tsx`), { appName, entities, to, pluralize, withLangSelect: languages.length > 1 });
241
+ that.fs.copyTpl(that.templatePath("react/src/components/Menu.tsx.ejs"), that.destinationPath(`client/src/components/Menu.tsx`), { appName, entities, to, pluralize, withLangSelect: languages.length > 1, searchEngine });
236
242
  that.fs.copyTpl(that.templatePath("react/src/components/LoginRedirector.tsx.ejs"), that.destinationPath(`client/src/components/LoginRedirector.tsx`));
237
243
  that.fs.copyTpl(that.templatePath("react/src/components/SearchInput.css"), that.destinationPath(`client/src/components/SearchInput.css`), {});
238
244
  that.fs.copyTpl(that.templatePath("react/src/components/SearchInput.tsx.ejs"), that.destinationPath(`client/src/components/SearchInput.tsx`), {});
@@ -260,6 +266,14 @@ export async function createReactClient(that) {
260
266
  that.fs.copyTpl(that.templatePath("react/src/pages/errors/Err403.tsx.ejs"), that.destinationPath(`client/src/pages/errors/Err403.tsx`), {});
261
267
  that.fs.copyTpl(that.templatePath("react/src/pages/errors/Err404.tsx.ejs"), that.destinationPath(`client/src/pages/errors/Err404.tsx`), {});
262
268
 
269
+ that.fs.copyTpl(that.templatePath("react/src/pages/seeder/SeederList.tsx.ejs"), that.destinationPath(`client/src/pages/seeder/SeederList.tsx`));
270
+
271
+ that.fs.copyTpl(that.templatePath("react/src/pages/admin/Migrations.tsx.ejs"), that.destinationPath(`client/src/pages/admin/Migrations.tsx`));
272
+
273
+ if (!['null', 'database'].includes(searchEngine)) {
274
+ that.fs.copyTpl(that.templatePath("react/src/pages/search-reindex/SearchReindexList.tsx.ejs"), that.destinationPath(`client/src/pages/search-reindex/SearchReindexList.tsx`), { searchEngine });
275
+ }
276
+
263
277
  that.fs.copyTpl(that.templatePath("react/src/pages/server-logs/LogViewer.tsx.ejs"), that.destinationPath(`client/src/pages/server-logs/LogViewer.tsx`), {});
264
278
 
265
279
  that.fs.copyTpl(that.templatePath("react/src/hooks/useAuthState.ts.ejs"), that.destinationPath(`client/src/hooks/useAuthState.ts`), {});
@@ -1 +1,2 @@
1
- VITE_PORT=5173
1
+ VITE_PORT=5173
2
+ VITE_SCOUT_DRIVER=<%- searchEngine %>
@@ -10,7 +10,7 @@
10
10
  "dependencies": {
11
11
  "@hookform/resolvers": "^4.1.0",
12
12
  "@react-keycloak/web": "^3.4.0",
13
- "axios": "^1.13.2",
13
+ "axios": "^1.13.5",
14
14
  "dayjs": "^1.11.13",
15
15
  "detect-browser": "^5.3.0",
16
16
  "dotenv": "^16.4.7",
@@ -3971,12 +3971,13 @@
3971
3971
  }
3972
3972
  },
3973
3973
  "node_modules/axios": {
3974
- "version": "1.13.2",
3975
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz",
3976
- "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==",
3974
+ "version": "1.13.5",
3975
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.5.tgz",
3976
+ "integrity": "sha512-cz4ur7Vb0xS4/KUN0tPWe44eqxrIu31me+fbang3ijiNscE129POzipJJA6zniq2C/Z6sJCjMimjS8Lc/GAs8Q==",
3977
+ "license": "MIT",
3977
3978
  "dependencies": {
3978
- "follow-redirects": "^1.15.6",
3979
- "form-data": "^4.0.4",
3979
+ "follow-redirects": "^1.15.11",
3980
+ "form-data": "^4.0.5",
3980
3981
  "proxy-from-env": "^1.1.0"
3981
3982
  }
3982
3983
  },
@@ -14,7 +14,7 @@
14
14
  "dependencies": {
15
15
  "@hookform/resolvers": "^4.1.0",
16
16
  "@react-keycloak/web": "^3.4.0",
17
- "axios": "^1.13.2",
17
+ "axios": "^1.13.5",
18
18
  "dayjs": "^1.11.13",
19
19
  "detect-browser": "^5.3.0",
20
20
  "dotenv": "^16.4.7",
@@ -0,0 +1,43 @@
1
+ {
2
+ "title": "የዳበይስ ማዋል",
3
+ "status": {
4
+ "pending": "እንቆቅልሽ።..",
5
+ "running": "ሂደት",
6
+ "completed": "ተጠናቅቆ",
7
+ "failed": "አልቆይ ከፍ ይዞረ",
8
+ "title": "የማዋል ሁኔታ",
9
+ "description": "የሁሉም ማዋል ሁኔታ አሳይ.",
10
+ "action": "ሁኔታን አሳይ",
11
+ "error": "የማዋል ሁኔታን ማግኘት በስንቀት",
12
+ "refresh": "ምርጥ ሁኔታ ይዘጋጅ"
13
+ },
14
+ "migrate": {
15
+ "title": "የማዋል ማንበብ",
16
+ "description": "ሁሉንም የቆረጥ ዳበይስ ማዋል ያንቀሳቅሱ.",
17
+ "action": "ማዋል",
18
+ "confirm": "እቅፍ በግብአት"
19
+ },
20
+ "rollback": {
21
+ "title": "ተወው",
22
+ "description": "የማዋል መስመር እንደተዘዋወር እንደገና ይደርግ.",
23
+ "action": "ተወው",
24
+ "confirm": "ተመልስ",
25
+ "step": "የአንደኛው ማዋል ባበሬ ይመልስ.",
26
+ "stepPlaceholder": "ግምገማ ያድርግ",
27
+ "stepHint": "የአንደኛው ባበሬ ኑሮ አሳይ."
28
+ },
29
+ "fresh": {
30
+ "title": "አይታል ይህ እንደ ቆርጦ ገድበዋል.",
31
+ "description": "የማዋል ሂደት ተጠናቋል",
32
+ "action": "የማዋል ሂደት ሞተ",
33
+ "confirm": "ማዋል መጀመር ውስጥ እንቀሴ"
34
+ },
35
+ "migrateCompleted": "የአዲስ ማዋል ሂደት ተጠናቋል",
36
+ "migrateFailed": "የአዲስ ማዋል ሂደት ሞተ",
37
+ "migrateError": "የአዲስ ማዋል መጀመር ውስጥ እንቀሴ",
38
+ "freshCompleted": "ተወው ተጠናቀቀ",
39
+ "freshFailed": "በየመጀመር ላይ ችግኝ",
40
+ "freshError": "Error starting fresh migration",
41
+ "rollbackCompleted": "Rollback completed",
42
+ "rollbackError": "Error during rollback"
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "title": "نقل قاعدة البيانات",
3
+ "status": {
4
+ "pending": "قيد الانتظار...",
5
+ "running": "يتم التشغيل",
6
+ "completed": "اكتمل",
7
+ "failed": "فشل",
8
+ "title": "حالة النقل",
9
+ "description": "عرض حالة جميع النقلات.",
10
+ "action": "عرض الحالة",
11
+ "error": "خطأ في استرجاع حالة النقل",
12
+ "refresh": "تحديث الحالة"
13
+ },
14
+ "migrate": {
15
+ "title": "تشغيل النقلات",
16
+ "description": "تشغيل جميع النقلات المعلقة في قاعدة البيانات.",
17
+ "action": "نقل",
18
+ "confirm": "تأكيد الترحيل"
19
+ },
20
+ "rollback": {
21
+ "title": "تراجع",
22
+ "description": "تراجع عن آخر دفعة من النقلات.",
23
+ "action": "تراجع",
24
+ "confirm": "تأكيد التراجع",
25
+ "step": "خطوة",
26
+ "stepPlaceholder": "مثل 1",
27
+ "stepHint": "اترك فارغًا للتراجع عن آخر دفعة"
28
+ },
29
+ "fresh": {
30
+ "title": "نقل جديد",
31
+ "description": "⚠️ حذف جميع الجداول وإعادة تشغيل جميع النقلات. ستفقد جميع البيانات.",
32
+ "action": "نقل جديد",
33
+ "confirm": "تأكيد - ستفقد جميع البيانات"
34
+ },
35
+ "migrateCompleted": "النقل مكتمل",
36
+ "migrateFailed": "النقل فشل",
37
+ "migrateError": "خطأ في بدء النقل",
38
+ "freshCompleted": "النقل الجديد مكتمل",
39
+ "freshFailed": "النقل الجديد فشل",
40
+ "freshError": "خطأ في بدء النقل الجديد",
41
+ "rollbackCompleted": "التراجع مكتمل",
42
+ "rollbackError": "خطأ أثناء التراجع"
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "title": "Verilənlər bazası köçürmələri",
3
+ "status": {
4
+ "pending": "Gözləyir...",
5
+ "running": "İşləyir",
6
+ "completed": "Tamamlandı",
7
+ "failed": "Uğursuz",
8
+ "title": "Köçürmə statusu",
9
+ "description": "Bütün köçürmələrin statusunu göstərin.",
10
+ "action": "Statusu göstərin",
11
+ "error": "Köçürmə statusunu əldə edərkən xətası",
12
+ "refresh": "Statusu yenilə"
13
+ },
14
+ "migrate": {
15
+ "title": "Köçürmələri icra edin",
16
+ "description": "Bütün gözləyən verilənlər bazası köçürmələrini icra edin.",
17
+ "action": "Köçür",
18
+ "confirm": "Köçürməni təsdiqlə"
19
+ },
20
+ "rollback": {
21
+ "title": "Geri çevirmək",
22
+ "description": "Son dəstə köçürmələrini geri çevirin.",
23
+ "action": "Geri çevirmək",
24
+ "confirm": "Geri çevirməni təsdiq edin",
25
+ "step": "Addım",
26
+ "stepPlaceholder": "məsələn. 1",
27
+ "stepHint": "Son dəstə geri çevirmək üçün boş buraxın"
28
+ },
29
+ "fresh": {
30
+ "title": "Təzə köçürmə",
31
+ "description": "⚠️ Bütün cədvəlləri silin və bütün köçürmələri yenidən icra edin. Bütün məlumatlar itəcək.",
32
+ "action": "Təzə köçürməni icra edin",
33
+ "confirm": "Təsdiqləyin — bütün məlumatlar itəcək"
34
+ },
35
+ "migrateCompleted": "Köçürmə tamamlandı",
36
+ "migrateFailed": "Köçürmə uğursuz oldu",
37
+ "migrateError": "Köçürməni başlamaqda xətası",
38
+ "freshCompleted": "Təzə köçürmə tamamlandı",
39
+ "freshFailed": "Təzə köçürmə uğursuz oldu",
40
+ "freshError": "Təzə köçürməni başlamaqda xətası",
41
+ "rollbackCompleted": "Geri çevirmə tamamlandı",
42
+ "rollbackError": "Geri çevirmə zamanı xətası"
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "title": "Миграции на база данни",
3
+ "status": {
4
+ "pending": "В очакване...",
5
+ "running": "В процес на изпълнение",
6
+ "completed": "Завършено",
7
+ "failed": "Неуспешно",
8
+ "title": "Статус на миграцията",
9
+ "description": "Покажи статуса на всички миграции.",
10
+ "action": "Покажи статус",
11
+ "error": "Грешка при получаване на статус на миграция",
12
+ "refresh": "Обнови статус"
13
+ },
14
+ "migrate": {
15
+ "title": "Изпълни миграции",
16
+ "description": "Изпълни всички изчакващи миграции на база данни.",
17
+ "action": "Мигрирай",
18
+ "confirm": "Потвърдете миграцията"
19
+ },
20
+ "rollback": {
21
+ "title": "Връщане назад",
22
+ "description": "Върни последната партида миграции.",
23
+ "action": "Връщане назад",
24
+ "confirm": "Потвърдете връщането назад",
25
+ "step": "Стъпка",
26
+ "stepPlaceholder": "напр. 1",
27
+ "stepHint": "Оставете празно, за да върнете последната партида"
28
+ },
29
+ "fresh": {
30
+ "title": "Свежа миграция",
31
+ "description": "⚠️ Изтрийте всички таблици и повторно стартирайте всички миграции. Всички данни ще бъдат загубени.",
32
+ "action": "Мигрирайте свежо",
33
+ "confirm": "Потвърдете — всички данни ще бъдат загубени"
34
+ },
35
+ "migrateCompleted": "Миграцията е завършена",
36
+ "migrateFailed": "Миграцията не успя",
37
+ "migrateError": "Грешка при стартиране на миграцията",
38
+ "freshCompleted": "Свежата миграция е завършена",
39
+ "freshFailed": "Свежата миграция не успя",
40
+ "freshError": "Грешка при стартиране на свежата миграция",
41
+ "rollbackCompleted": "Връщането назад е завършено",
42
+ "rollbackError": "Грешка по време на връщането назад"
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "title": "ডেটাবেস মাইগ্রেশন",
3
+ "status": {
4
+ "pending": "অপেক্ষমাণ...",
5
+ "running": "চলছে",
6
+ "completed": "সম্পন্ন",
7
+ "failed": "ব্যর্থ",
8
+ "title": "মাইগ্রেশন অবস্থান",
9
+ "description": "সমস্ত মাইগ্রেশনের অবস্থা দেখান।",
10
+ "action": "অবস্থান দেখান",
11
+ "error": "মাইগ্রেশন অবস্থান পাওয়ার সময় ত্রুটি",
12
+ "refresh": "রিফ্রেশ অবস্থা"
13
+ },
14
+ "migrate": {
15
+ "title": "মাইগ্রেশন চালান",
16
+ "description": "মুলতুবি সমস্ত ডেটাবেস মাইগ্রেশন চালান।",
17
+ "action": "মাইগ্রেট",
18
+ "confirm": "স্থানান্তর নিশ্চিত করুন"
19
+ },
20
+ "rollback": {
21
+ "title": "রোলব্যাক",
22
+ "description": "শেষ ব্যাচের মাইগ্রেশন ফিরিয়ে নিন।",
23
+ "action": "রোলব্যাক",
24
+ "confirm": "রোলব্যাক নিশ্চিত করুন",
25
+ "step": "ধাপ",
26
+ "stepPlaceholder": "যেমন 1",
27
+ "stepHint": "শেষ ব্যাচ ফিরিয়ে নিতে খালি রাখুন"
28
+ },
29
+ "fresh": {
30
+ "title": "ফ্রেশ মাইগ্রেশন",
31
+ "description": "⚠️ সমস্ত টেবিল মুছে ফেলুন এবং সমস্ত মাইগ্রেশন পুনরায় চালান। সমস্ত ডেটা হারিয়ে যাবে।",
32
+ "action": "ফ্রেশ মাইগ্রেট",
33
+ "confirm": "নিশ্চিত করুন — সমস্ত ডেটা হারিয়ে যাবে"
34
+ },
35
+ "migrateCompleted": "মাইগ্রেশন সম্পন্ন",
36
+ "migrateFailed": "মাইগ্রেশন ব্যর্থ হয়েছে",
37
+ "migrateError": "মাইগ্রেশন শুরু করতে ত্রুটি",
38
+ "freshCompleted": "ফ্রেশ মাইগ্রেশন সম্পন্ন",
39
+ "freshFailed": "ফ্রেশ মাইগ্রেশন ব্যর্থ হয়েছে",
40
+ "freshError": "ফ্রেশ মাইগ্রেশন শুরু করতে ত্রুটি",
41
+ "rollbackCompleted": "রোলব্যাক সম্পন্ন",
42
+ "rollbackError": "রোলব্যাক করার সময় ত্রুটি"
43
+ }
@@ -0,0 +1,43 @@
1
+ {
2
+ "title": "Migrations de la base de dades",
3
+ "status": {
4
+ "pending": "Pendent...",
5
+ "running": "S'executa",
6
+ "completed": "Completat",
7
+ "failed": "Fallat",
8
+ "title": "Estat de la migració",
9
+ "description": "Mostra l'estat de totes les migracions.",
10
+ "action": "Mostra estat",
11
+ "error": "Error en recuperar l'estat de la migració",
12
+ "refresh": "Actualitzar l'estat"
13
+ },
14
+ "migrate": {
15
+ "title": "Executar migracions",
16
+ "description": "Executar totes les migracions pendents de la base de dades.",
17
+ "action": "Migrar",
18
+ "confirm": "Confirmar migració"
19
+ },
20
+ "rollback": {
21
+ "title": "Revertir",
22
+ "description": "Revertir el darrer lot de migracions.",
23
+ "action": "Revertir",
24
+ "confirm": "Confirmar la reversió",
25
+ "step": "Pas",
26
+ "stepPlaceholder": "p.ex. 1",
27
+ "stepHint": "Deixa buit per revertir l'últim lot"
28
+ },
29
+ "fresh": {
30
+ "title": "Migració nova",
31
+ "description": "⚠️ Eliminem totes les taules i tornem a executar totes les migracions. Totes les dades es perdran.",
32
+ "action": "Migrar novament",
33
+ "confirm": "Confirmar — totes les dades es perdran"
34
+ },
35
+ "migrateCompleted": "Migració completada",
36
+ "migrateFailed": "Migració fallida",
37
+ "migrateError": "Error en iniciar la migració",
38
+ "freshCompleted": "Migració nova completada",
39
+ "freshFailed": "Migració nova fallida",
40
+ "freshError": "Error en iniciar la migració nova",
41
+ "rollbackCompleted": "Reversió completada",
42
+ "rollbackError": "Error durant la reversió"
43
+ }