@nextsparkjs/core 0.1.0-beta.1 → 0.1.0-beta.3

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 (972) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +8 -2
  3. package/bin/dist/doctor/checks/config.d.ts +11 -0
  4. package/bin/dist/doctor/checks/config.d.ts.map +1 -0
  5. package/bin/dist/doctor/checks/config.js +111 -0
  6. package/bin/dist/doctor/checks/config.js.map +1 -0
  7. package/bin/dist/doctor/checks/database.d.ts +11 -0
  8. package/bin/dist/doctor/checks/database.d.ts.map +1 -0
  9. package/bin/dist/doctor/checks/database.js +115 -0
  10. package/bin/dist/doctor/checks/database.js.map +1 -0
  11. package/bin/dist/doctor/checks/dependencies.d.ts +11 -0
  12. package/bin/dist/doctor/checks/dependencies.d.ts.map +1 -0
  13. package/bin/dist/doctor/checks/dependencies.js +88 -0
  14. package/bin/dist/doctor/checks/dependencies.js.map +1 -0
  15. package/bin/dist/doctor/checks/imports.d.ts +11 -0
  16. package/bin/dist/doctor/checks/imports.d.ts.map +1 -0
  17. package/bin/dist/doctor/checks/imports.js +176 -0
  18. package/bin/dist/doctor/checks/imports.js.map +1 -0
  19. package/bin/dist/doctor/index.d.ts +32 -0
  20. package/bin/dist/doctor/index.d.ts.map +1 -0
  21. package/bin/dist/doctor/index.js +117 -0
  22. package/bin/dist/doctor/index.js.map +1 -0
  23. package/bin/dist/init.d.ts +19 -0
  24. package/bin/dist/init.d.ts.map +1 -0
  25. package/bin/dist/init.js +95 -308
  26. package/bin/dist/init.js.map +1 -0
  27. package/bin/dist/test-wizard.d.ts +18 -0
  28. package/bin/dist/test-wizard.d.ts.map +1 -0
  29. package/bin/dist/test-wizard.js +724 -0
  30. package/bin/dist/test-wizard.js.map +1 -0
  31. package/bin/dist/tsup.config.d.ts +3 -0
  32. package/bin/dist/tsup.config.d.ts.map +1 -0
  33. package/bin/dist/tsup.config.js +13 -0
  34. package/bin/dist/tsup.config.js.map +1 -0
  35. package/bin/dist/wizard/banner.d.ts +30 -0
  36. package/bin/dist/wizard/banner.d.ts.map +1 -0
  37. package/bin/dist/wizard/banner.js +60 -0
  38. package/bin/dist/wizard/banner.js.map +1 -0
  39. package/bin/dist/wizard/generators/config-generator.d.ts +36 -0
  40. package/bin/dist/wizard/generators/config-generator.d.ts.map +1 -0
  41. package/bin/dist/wizard/generators/config-generator.js +210 -0
  42. package/bin/dist/wizard/generators/config-generator.js.map +1 -0
  43. package/bin/dist/wizard/generators/content-features-generator.d.ts +19 -0
  44. package/bin/dist/wizard/generators/content-features-generator.d.ts.map +1 -0
  45. package/bin/dist/wizard/generators/content-features-generator.js +96 -0
  46. package/bin/dist/wizard/generators/content-features-generator.js.map +1 -0
  47. package/bin/dist/wizard/generators/demo-installer.d.ts +13 -0
  48. package/bin/dist/wizard/generators/demo-installer.d.ts.map +1 -0
  49. package/bin/dist/wizard/generators/demo-installer.js +164 -0
  50. package/bin/dist/wizard/generators/demo-installer.js.map +1 -0
  51. package/bin/dist/wizard/generators/env-setup.d.ts +16 -0
  52. package/bin/dist/wizard/generators/env-setup.d.ts.map +1 -0
  53. package/bin/dist/wizard/generators/env-setup.js +163 -0
  54. package/bin/dist/wizard/generators/env-setup.js.map +1 -0
  55. package/bin/dist/wizard/generators/git-init.d.ts +16 -0
  56. package/bin/dist/wizard/generators/git-init.d.ts.map +1 -0
  57. package/bin/dist/wizard/generators/git-init.js +174 -0
  58. package/bin/dist/wizard/generators/git-init.js.map +1 -0
  59. package/bin/dist/wizard/generators/index.d.ts +19 -0
  60. package/bin/dist/wizard/generators/index.d.ts.map +1 -0
  61. package/bin/dist/wizard/generators/index.js +203 -0
  62. package/bin/dist/wizard/generators/index.js.map +1 -0
  63. package/bin/dist/wizard/generators/messages-generator.d.ts +28 -0
  64. package/bin/dist/wizard/generators/messages-generator.d.ts.map +1 -0
  65. package/bin/dist/wizard/generators/messages-generator.js +131 -0
  66. package/bin/dist/wizard/generators/messages-generator.js.map +1 -0
  67. package/bin/dist/wizard/generators/theme-renamer.d.ts +35 -0
  68. package/bin/dist/wizard/generators/theme-renamer.d.ts.map +1 -0
  69. package/bin/dist/wizard/generators/theme-renamer.js +323 -0
  70. package/bin/dist/wizard/generators/theme-renamer.js.map +1 -0
  71. package/bin/dist/wizard/index.d.ts +12 -0
  72. package/bin/dist/wizard/index.d.ts.map +1 -0
  73. package/bin/dist/wizard/index.js +254 -0
  74. package/bin/dist/wizard/index.js.map +1 -0
  75. package/bin/dist/wizard/presets.d.ts +55 -0
  76. package/bin/dist/wizard/presets.d.ts.map +1 -0
  77. package/bin/dist/wizard/presets.js +232 -0
  78. package/bin/dist/wizard/presets.js.map +1 -0
  79. package/bin/dist/wizard/preview.d.ts +15 -0
  80. package/bin/dist/wizard/preview.d.ts.map +1 -0
  81. package/bin/dist/wizard/preview.js +192 -0
  82. package/bin/dist/wizard/preview.js.map +1 -0
  83. package/bin/dist/wizard/prompts/auth-config.d.ts +16 -0
  84. package/bin/dist/wizard/prompts/auth-config.d.ts.map +1 -0
  85. package/bin/dist/wizard/prompts/auth-config.js +78 -0
  86. package/bin/dist/wizard/prompts/auth-config.js.map +1 -0
  87. package/bin/dist/wizard/prompts/billing-config.d.ts +11 -0
  88. package/bin/dist/wizard/prompts/billing-config.d.ts.map +1 -0
  89. package/bin/dist/wizard/prompts/billing-config.js +66 -0
  90. package/bin/dist/wizard/prompts/billing-config.js.map +1 -0
  91. package/bin/dist/wizard/prompts/content-features-config.d.ts +15 -0
  92. package/bin/dist/wizard/prompts/content-features-config.d.ts.map +1 -0
  93. package/bin/dist/wizard/prompts/content-features-config.js +58 -0
  94. package/bin/dist/wizard/prompts/content-features-config.js.map +1 -0
  95. package/bin/dist/wizard/prompts/dashboard-config.d.ts +15 -0
  96. package/bin/dist/wizard/prompts/dashboard-config.d.ts.map +1 -0
  97. package/bin/dist/wizard/prompts/dashboard-config.js +104 -0
  98. package/bin/dist/wizard/prompts/dashboard-config.js.map +1 -0
  99. package/bin/dist/wizard/prompts/demo-install.d.ts +14 -0
  100. package/bin/dist/wizard/prompts/demo-install.d.ts.map +1 -0
  101. package/bin/dist/wizard/prompts/demo-install.js +42 -0
  102. package/bin/dist/wizard/prompts/demo-install.js.map +1 -0
  103. package/bin/dist/wizard/prompts/dev-config.d.ts +15 -0
  104. package/bin/dist/wizard/prompts/dev-config.d.ts.map +1 -0
  105. package/bin/dist/wizard/prompts/dev-config.js +66 -0
  106. package/bin/dist/wizard/prompts/dev-config.js.map +1 -0
  107. package/bin/dist/wizard/prompts/env-config.d.ts +22 -0
  108. package/bin/dist/wizard/prompts/env-config.d.ts.map +1 -0
  109. package/bin/dist/wizard/prompts/env-config.js +65 -0
  110. package/bin/dist/wizard/prompts/env-config.js.map +1 -0
  111. package/bin/dist/wizard/prompts/features-config.d.ts +11 -0
  112. package/bin/dist/wizard/prompts/features-config.d.ts.map +1 -0
  113. package/bin/dist/wizard/prompts/features-config.js +68 -0
  114. package/bin/dist/wizard/prompts/features-config.js.map +1 -0
  115. package/bin/dist/wizard/prompts/git-config.d.ts +22 -0
  116. package/bin/dist/wizard/prompts/git-config.d.ts.map +1 -0
  117. package/bin/dist/wizard/prompts/git-config.js +72 -0
  118. package/bin/dist/wizard/prompts/git-config.js.map +1 -0
  119. package/bin/dist/wizard/prompts/i18n-config.d.ts +11 -0
  120. package/bin/dist/wizard/prompts/i18n-config.d.ts.map +1 -0
  121. package/bin/dist/wizard/prompts/i18n-config.js +55 -0
  122. package/bin/dist/wizard/prompts/i18n-config.js.map +1 -0
  123. package/bin/dist/wizard/prompts/index.d.ts +34 -0
  124. package/bin/dist/wizard/prompts/index.d.ts.map +1 -0
  125. package/bin/dist/wizard/prompts/index.js +126 -0
  126. package/bin/dist/wizard/prompts/index.js.map +1 -0
  127. package/bin/dist/wizard/prompts/project-info.d.ts +11 -0
  128. package/bin/dist/wizard/prompts/project-info.d.ts.map +1 -0
  129. package/bin/dist/wizard/prompts/project-info.js +80 -0
  130. package/bin/dist/wizard/prompts/project-info.js.map +1 -0
  131. package/bin/dist/wizard/prompts/team-config.d.ts +11 -0
  132. package/bin/dist/wizard/prompts/team-config.d.ts.map +1 -0
  133. package/bin/dist/wizard/prompts/team-config.js +77 -0
  134. package/bin/dist/wizard/prompts/team-config.js.map +1 -0
  135. package/bin/dist/wizard/types.d.ts +110 -0
  136. package/bin/dist/wizard/types.d.ts.map +1 -0
  137. package/bin/dist/wizard/types.js +31 -0
  138. package/bin/dist/wizard/types.js.map +1 -0
  139. package/bin/dist/wizard/validators/files.d.ts +26 -0
  140. package/bin/dist/wizard/validators/files.d.ts.map +1 -0
  141. package/bin/dist/wizard/validators/files.js +202 -0
  142. package/bin/dist/wizard/validators/files.js.map +1 -0
  143. package/bin/dist/wizard/validators/i18n.d.ts +24 -0
  144. package/bin/dist/wizard/validators/i18n.d.ts.map +1 -0
  145. package/bin/dist/wizard/validators/i18n.js +318 -0
  146. package/bin/dist/wizard/validators/i18n.js.map +1 -0
  147. package/bin/dist/wizard/validators/index.d.ts +67 -0
  148. package/bin/dist/wizard/validators/index.d.ts.map +1 -0
  149. package/bin/dist/wizard/validators/index.js +64 -0
  150. package/bin/dist/wizard/validators/index.js.map +1 -0
  151. package/bin/dist/wizard/validators/typescript.d.ts +19 -0
  152. package/bin/dist/wizard/validators/typescript.d.ts.map +1 -0
  153. package/bin/dist/wizard/validators/typescript.js +120 -0
  154. package/bin/dist/wizard/validators/typescript.js.map +1 -0
  155. package/dist/bin/dist/doctor/checks/config.d.ts +11 -0
  156. package/dist/bin/dist/doctor/checks/config.d.ts.map +1 -0
  157. package/dist/bin/dist/doctor/checks/config.js +111 -0
  158. package/dist/bin/dist/doctor/checks/config.js.map +1 -0
  159. package/dist/bin/dist/doctor/checks/database.d.ts +11 -0
  160. package/dist/bin/dist/doctor/checks/database.d.ts.map +1 -0
  161. package/dist/bin/dist/doctor/checks/database.js +115 -0
  162. package/dist/bin/dist/doctor/checks/database.js.map +1 -0
  163. package/dist/bin/dist/doctor/checks/dependencies.d.ts +11 -0
  164. package/dist/bin/dist/doctor/checks/dependencies.d.ts.map +1 -0
  165. package/dist/bin/dist/doctor/checks/dependencies.js +88 -0
  166. package/dist/bin/dist/doctor/checks/dependencies.js.map +1 -0
  167. package/dist/bin/dist/doctor/checks/imports.d.ts +11 -0
  168. package/dist/bin/dist/doctor/checks/imports.d.ts.map +1 -0
  169. package/dist/bin/dist/doctor/checks/imports.js +176 -0
  170. package/dist/bin/dist/doctor/checks/imports.js.map +1 -0
  171. package/dist/bin/dist/doctor/index.d.ts +32 -0
  172. package/dist/bin/dist/doctor/index.d.ts.map +1 -0
  173. package/dist/bin/dist/doctor/index.js +117 -0
  174. package/dist/bin/dist/doctor/index.js.map +1 -0
  175. package/dist/bin/dist/init.d.ts +19 -0
  176. package/dist/bin/dist/init.d.ts.map +1 -0
  177. package/dist/bin/dist/init.js +95 -308
  178. package/dist/bin/dist/init.js.map +1 -0
  179. package/dist/bin/dist/test-wizard.d.ts +18 -0
  180. package/dist/bin/dist/test-wizard.d.ts.map +1 -0
  181. package/dist/bin/dist/test-wizard.js +724 -0
  182. package/dist/bin/dist/test-wizard.js.map +1 -0
  183. package/dist/bin/dist/tsup.config.d.ts +3 -0
  184. package/dist/bin/dist/tsup.config.d.ts.map +1 -0
  185. package/dist/bin/dist/tsup.config.js +13 -0
  186. package/dist/bin/dist/tsup.config.js.map +1 -0
  187. package/dist/bin/dist/wizard/banner.d.ts +30 -0
  188. package/dist/bin/dist/wizard/banner.d.ts.map +1 -0
  189. package/dist/bin/dist/wizard/banner.js +60 -0
  190. package/dist/bin/dist/wizard/banner.js.map +1 -0
  191. package/dist/bin/dist/wizard/generators/config-generator.d.ts +36 -0
  192. package/dist/bin/dist/wizard/generators/config-generator.d.ts.map +1 -0
  193. package/dist/bin/dist/wizard/generators/config-generator.js +210 -0
  194. package/dist/bin/dist/wizard/generators/config-generator.js.map +1 -0
  195. package/dist/bin/dist/wizard/generators/content-features-generator.d.ts +19 -0
  196. package/dist/bin/dist/wizard/generators/content-features-generator.d.ts.map +1 -0
  197. package/dist/bin/dist/wizard/generators/content-features-generator.js +96 -0
  198. package/dist/bin/dist/wizard/generators/content-features-generator.js.map +1 -0
  199. package/dist/bin/dist/wizard/generators/demo-installer.d.ts +13 -0
  200. package/dist/bin/dist/wizard/generators/demo-installer.d.ts.map +1 -0
  201. package/dist/bin/dist/wizard/generators/demo-installer.js +128 -0
  202. package/dist/bin/dist/wizard/generators/demo-installer.js.map +1 -0
  203. package/dist/bin/dist/wizard/generators/env-setup.d.ts +16 -0
  204. package/dist/bin/dist/wizard/generators/env-setup.d.ts.map +1 -0
  205. package/dist/bin/dist/wizard/generators/env-setup.js +163 -0
  206. package/dist/bin/dist/wizard/generators/env-setup.js.map +1 -0
  207. package/dist/bin/dist/wizard/generators/git-init.d.ts +16 -0
  208. package/dist/bin/dist/wizard/generators/git-init.d.ts.map +1 -0
  209. package/dist/bin/dist/wizard/generators/git-init.js +174 -0
  210. package/dist/bin/dist/wizard/generators/git-init.js.map +1 -0
  211. package/dist/bin/dist/wizard/generators/index.d.ts +19 -0
  212. package/dist/bin/dist/wizard/generators/index.d.ts.map +1 -0
  213. package/dist/bin/dist/wizard/generators/index.js +199 -0
  214. package/dist/bin/dist/wizard/generators/index.js.map +1 -0
  215. package/dist/bin/dist/wizard/generators/messages-generator.d.ts +28 -0
  216. package/dist/bin/dist/wizard/generators/messages-generator.d.ts.map +1 -0
  217. package/dist/bin/dist/wizard/generators/messages-generator.js +131 -0
  218. package/dist/bin/dist/wizard/generators/messages-generator.js.map +1 -0
  219. package/dist/bin/dist/wizard/generators/theme-renamer.d.ts +35 -0
  220. package/dist/bin/dist/wizard/generators/theme-renamer.d.ts.map +1 -0
  221. package/dist/bin/dist/wizard/generators/theme-renamer.js +323 -0
  222. package/dist/bin/dist/wizard/generators/theme-renamer.js.map +1 -0
  223. package/dist/bin/dist/wizard/index.d.ts +12 -0
  224. package/dist/bin/dist/wizard/index.d.ts.map +1 -0
  225. package/dist/bin/dist/wizard/index.js +254 -0
  226. package/dist/bin/dist/wizard/index.js.map +1 -0
  227. package/dist/bin/dist/wizard/presets.d.ts +55 -0
  228. package/dist/bin/dist/wizard/presets.d.ts.map +1 -0
  229. package/dist/bin/dist/wizard/presets.js +232 -0
  230. package/dist/bin/dist/wizard/presets.js.map +1 -0
  231. package/dist/bin/dist/wizard/preview.d.ts +15 -0
  232. package/dist/bin/dist/wizard/preview.d.ts.map +1 -0
  233. package/dist/bin/dist/wizard/preview.js +192 -0
  234. package/dist/bin/dist/wizard/preview.js.map +1 -0
  235. package/dist/bin/dist/wizard/prompts/auth-config.d.ts +16 -0
  236. package/dist/bin/dist/wizard/prompts/auth-config.d.ts.map +1 -0
  237. package/dist/bin/dist/wizard/prompts/auth-config.js +78 -0
  238. package/dist/bin/dist/wizard/prompts/auth-config.js.map +1 -0
  239. package/dist/bin/dist/wizard/prompts/billing-config.d.ts +11 -0
  240. package/dist/bin/dist/wizard/prompts/billing-config.d.ts.map +1 -0
  241. package/dist/bin/dist/wizard/prompts/billing-config.js +66 -0
  242. package/dist/bin/dist/wizard/prompts/billing-config.js.map +1 -0
  243. package/dist/bin/dist/wizard/prompts/content-features-config.d.ts +15 -0
  244. package/dist/bin/dist/wizard/prompts/content-features-config.d.ts.map +1 -0
  245. package/dist/bin/dist/wizard/prompts/content-features-config.js +58 -0
  246. package/dist/bin/dist/wizard/prompts/content-features-config.js.map +1 -0
  247. package/dist/bin/dist/wizard/prompts/dashboard-config.d.ts +15 -0
  248. package/dist/bin/dist/wizard/prompts/dashboard-config.d.ts.map +1 -0
  249. package/dist/bin/dist/wizard/prompts/dashboard-config.js +104 -0
  250. package/dist/bin/dist/wizard/prompts/dashboard-config.js.map +1 -0
  251. package/dist/bin/dist/wizard/prompts/demo-install.d.ts +14 -0
  252. package/dist/bin/dist/wizard/prompts/demo-install.d.ts.map +1 -0
  253. package/dist/bin/dist/wizard/prompts/demo-install.js +42 -0
  254. package/dist/bin/dist/wizard/prompts/demo-install.js.map +1 -0
  255. package/dist/bin/dist/wizard/prompts/dev-config.d.ts +15 -0
  256. package/dist/bin/dist/wizard/prompts/dev-config.d.ts.map +1 -0
  257. package/dist/bin/dist/wizard/prompts/dev-config.js +66 -0
  258. package/dist/bin/dist/wizard/prompts/dev-config.js.map +1 -0
  259. package/dist/bin/dist/wizard/prompts/env-config.d.ts +22 -0
  260. package/dist/bin/dist/wizard/prompts/env-config.d.ts.map +1 -0
  261. package/dist/bin/dist/wizard/prompts/env-config.js +65 -0
  262. package/dist/bin/dist/wizard/prompts/env-config.js.map +1 -0
  263. package/dist/bin/dist/wizard/prompts/features-config.d.ts +11 -0
  264. package/dist/bin/dist/wizard/prompts/features-config.d.ts.map +1 -0
  265. package/dist/bin/dist/wizard/prompts/features-config.js +68 -0
  266. package/dist/bin/dist/wizard/prompts/features-config.js.map +1 -0
  267. package/dist/bin/dist/wizard/prompts/git-config.d.ts +22 -0
  268. package/dist/bin/dist/wizard/prompts/git-config.d.ts.map +1 -0
  269. package/dist/bin/dist/wizard/prompts/git-config.js +72 -0
  270. package/dist/bin/dist/wizard/prompts/git-config.js.map +1 -0
  271. package/dist/bin/dist/wizard/prompts/i18n-config.d.ts +11 -0
  272. package/dist/bin/dist/wizard/prompts/i18n-config.d.ts.map +1 -0
  273. package/dist/bin/dist/wizard/prompts/i18n-config.js +55 -0
  274. package/dist/bin/dist/wizard/prompts/i18n-config.js.map +1 -0
  275. package/dist/bin/dist/wizard/prompts/index.d.ts +34 -0
  276. package/dist/bin/dist/wizard/prompts/index.d.ts.map +1 -0
  277. package/dist/bin/dist/wizard/prompts/index.js +126 -0
  278. package/dist/bin/dist/wizard/prompts/index.js.map +1 -0
  279. package/dist/bin/dist/wizard/prompts/project-info.d.ts +11 -0
  280. package/dist/bin/dist/wizard/prompts/project-info.d.ts.map +1 -0
  281. package/dist/bin/dist/wizard/prompts/project-info.js +80 -0
  282. package/dist/bin/dist/wizard/prompts/project-info.js.map +1 -0
  283. package/dist/bin/dist/wizard/prompts/team-config.d.ts +11 -0
  284. package/dist/bin/dist/wizard/prompts/team-config.d.ts.map +1 -0
  285. package/dist/bin/dist/wizard/prompts/team-config.js +77 -0
  286. package/dist/bin/dist/wizard/prompts/team-config.js.map +1 -0
  287. package/dist/bin/dist/wizard/types.d.ts +110 -0
  288. package/dist/bin/dist/wizard/types.d.ts.map +1 -0
  289. package/dist/bin/dist/wizard/types.js +31 -0
  290. package/dist/bin/dist/wizard/types.js.map +1 -0
  291. package/dist/bin/dist/wizard/validators/files.d.ts +26 -0
  292. package/dist/bin/dist/wizard/validators/files.d.ts.map +1 -0
  293. package/dist/bin/dist/wizard/validators/files.js +202 -0
  294. package/dist/bin/dist/wizard/validators/files.js.map +1 -0
  295. package/dist/bin/dist/wizard/validators/i18n.d.ts +24 -0
  296. package/dist/bin/dist/wizard/validators/i18n.d.ts.map +1 -0
  297. package/dist/bin/dist/wizard/validators/i18n.js +318 -0
  298. package/dist/bin/dist/wizard/validators/i18n.js.map +1 -0
  299. package/dist/bin/dist/wizard/validators/index.d.ts +67 -0
  300. package/dist/bin/dist/wizard/validators/index.d.ts.map +1 -0
  301. package/dist/bin/dist/wizard/validators/index.js +64 -0
  302. package/dist/bin/dist/wizard/validators/index.js.map +1 -0
  303. package/dist/bin/dist/wizard/validators/typescript.d.ts +19 -0
  304. package/dist/bin/dist/wizard/validators/typescript.d.ts.map +1 -0
  305. package/dist/bin/dist/wizard/validators/typescript.js +120 -0
  306. package/dist/bin/dist/wizard/validators/typescript.js.map +1 -0
  307. package/dist/bin/doctor/checks/config.ts +123 -0
  308. package/dist/bin/doctor/checks/database.ts +133 -0
  309. package/dist/bin/doctor/checks/dependencies.ts +99 -0
  310. package/dist/bin/doctor/checks/imports.ts +203 -0
  311. package/dist/bin/doctor/index.ts +151 -0
  312. package/dist/bin/init.ts +99 -406
  313. package/dist/bin/test-local.sh +3 -1
  314. package/dist/bin/test-wizard.ts +879 -0
  315. package/dist/bin/tsconfig.json +26 -0
  316. package/dist/bin/wizard/banner.ts +67 -0
  317. package/dist/bin/wizard/generators/config-generator.ts +341 -0
  318. package/dist/bin/wizard/generators/content-features-generator.ts +111 -0
  319. package/dist/bin/wizard/generators/demo-installer.ts +200 -0
  320. package/dist/bin/wizard/generators/env-setup.ts +208 -0
  321. package/dist/bin/wizard/generators/git-init.ts +187 -0
  322. package/dist/bin/wizard/generators/index.ts +271 -0
  323. package/dist/bin/wizard/generators/messages-generator.ts +159 -0
  324. package/dist/bin/wizard/generators/theme-renamer.ts +419 -0
  325. package/dist/bin/wizard/index.ts +288 -0
  326. package/dist/bin/wizard/presets.ts +274 -0
  327. package/dist/bin/wizard/preview.ts +220 -0
  328. package/dist/bin/wizard/prompts/auth-config.ts +93 -0
  329. package/dist/bin/wizard/prompts/billing-config.ts +75 -0
  330. package/dist/bin/wizard/prompts/content-features-config.ts +70 -0
  331. package/dist/bin/wizard/prompts/dashboard-config.ts +117 -0
  332. package/dist/bin/wizard/prompts/demo-install.ts +45 -0
  333. package/dist/bin/wizard/prompts/dev-config.ts +78 -0
  334. package/dist/bin/wizard/prompts/env-config.ts +83 -0
  335. package/dist/bin/wizard/prompts/features-config.ts +75 -0
  336. package/dist/bin/wizard/prompts/git-config.ts +90 -0
  337. package/dist/bin/wizard/prompts/i18n-config.ts +62 -0
  338. package/dist/bin/wizard/prompts/index.ts +173 -0
  339. package/dist/bin/wizard/prompts/project-info.ts +89 -0
  340. package/dist/bin/wizard/prompts/team-config.ts +88 -0
  341. package/dist/bin/wizard/types.ts +150 -0
  342. package/dist/bin/wizard/validators/files.ts +227 -0
  343. package/dist/bin/wizard/validators/i18n.ts +394 -0
  344. package/dist/bin/wizard/validators/index.ts +111 -0
  345. package/dist/bin/wizard/validators/typescript.ts +133 -0
  346. package/dist/components/devtools/scheduled-actions/actions-table.js +1 -1
  347. package/dist/components/devtools/scheduled-actions/filters.js +1 -1
  348. package/dist/hooks/useContentTranslation.d.ts.map +1 -1
  349. package/dist/hooks/useContentTranslation.js +1 -5
  350. package/dist/hooks/useEnsureUserMetadata.d.ts.map +1 -1
  351. package/dist/hooks/useEnsureUserMetadata.js +0 -1
  352. package/dist/hooks/useEntityTranslations.d.ts.map +1 -1
  353. package/dist/hooks/useEntityTranslations.js +10 -12
  354. package/dist/i18n.d.ts.map +1 -1
  355. package/dist/i18n.js +7 -37
  356. package/dist/lib/config/app.config.js +1 -1
  357. package/dist/lib/config/dashboard.config.d.ts +0 -1
  358. package/dist/lib/config/dashboard.config.d.ts.map +1 -1
  359. package/dist/lib/config/dashboard.config.js +0 -1
  360. package/dist/lib/config/nextspark-types.d.ts +1 -1
  361. package/dist/lib/config/nextspark-types.d.ts.map +1 -1
  362. package/dist/lib/i18n-utils.d.ts +1 -5
  363. package/dist/lib/i18n-utils.d.ts.map +1 -1
  364. package/dist/lib/i18n-utils.js +0 -19
  365. package/dist/lib/namespace-loader.d.ts +1 -0
  366. package/dist/lib/namespace-loader.d.ts.map +1 -1
  367. package/dist/lib/namespace-loader.js +14 -18
  368. package/dist/lib/services/translation.service.d.ts +92 -0
  369. package/dist/lib/services/translation.service.d.ts.map +1 -1
  370. package/dist/lib/services/translation.service.js +135 -1
  371. package/dist/lib/test/index.d.ts +4 -4
  372. package/dist/lib/test/index.d.ts.map +1 -1
  373. package/dist/lib/test/index.js +4 -4
  374. package/dist/lib/test/selectors.d.ts +12 -12
  375. package/dist/lib/test/selectors.d.ts.map +1 -1
  376. package/dist/lib/test/selectors.js +2 -2
  377. package/dist/lib/translations/i18n-integration.d.ts +3 -1
  378. package/dist/lib/translations/i18n-integration.d.ts.map +1 -1
  379. package/dist/lib/translations/i18n-integration.js +19 -38
  380. package/dist/lib/translations/registry.d.ts +7 -61
  381. package/dist/lib/translations/registry.d.ts.map +1 -1
  382. package/dist/lib/translations/registry.js +21 -163
  383. package/dist/messages/de/admin.json +219 -0
  384. package/dist/messages/de/auth.json +103 -0
  385. package/dist/messages/de/billing.json +167 -0
  386. package/dist/messages/de/buttons.json +19 -0
  387. package/dist/messages/de/common.json +172 -0
  388. package/dist/messages/de/dashboard.json +41 -0
  389. package/dist/messages/de/devtools.json +285 -0
  390. package/dist/messages/de/docs.json +24 -0
  391. package/dist/messages/de/entities.json +52 -0
  392. package/dist/messages/de/footer.json +23 -0
  393. package/dist/messages/de/home.json +13 -0
  394. package/dist/messages/de/index.d.ts +1934 -0
  395. package/dist/messages/de/index.d.ts.map +1 -0
  396. package/dist/messages/de/index.js +41 -0
  397. package/dist/messages/de/index.ts +39 -0
  398. package/dist/messages/de/navigation.json +11 -0
  399. package/dist/messages/de/permissions.json +27 -0
  400. package/dist/messages/de/public.json +14 -0
  401. package/dist/messages/de/settings.json +404 -0
  402. package/dist/messages/de/superadmin.json +194 -0
  403. package/dist/messages/de/teams.json +140 -0
  404. package/dist/messages/de/validation.json +48 -0
  405. package/dist/messages/en/admin.json +219 -0
  406. package/dist/messages/en/buttons.json +19 -0
  407. package/dist/messages/en/devtools.json +35 -0
  408. package/dist/messages/en/entities.json +52 -0
  409. package/dist/messages/en/index.d.ts +1292 -954
  410. package/dist/messages/en/index.d.ts.map +1 -1
  411. package/dist/messages/en/index.js +22 -16
  412. package/dist/messages/en/index.ts +22 -16
  413. package/dist/messages/en/public.json +14 -1
  414. package/dist/messages/es/admin.json +219 -0
  415. package/dist/messages/es/buttons.json +19 -0
  416. package/dist/messages/es/devtools.json +35 -0
  417. package/dist/messages/es/entities.json +52 -0
  418. package/dist/messages/es/index.d.ts +1292 -954
  419. package/dist/messages/es/index.d.ts.map +1 -1
  420. package/dist/messages/es/index.js +22 -16
  421. package/dist/messages/es/index.ts +22 -16
  422. package/dist/messages/es/public.json +14 -1
  423. package/dist/messages/fr/admin.json +219 -0
  424. package/dist/messages/fr/auth.json +103 -0
  425. package/dist/messages/fr/billing.json +167 -0
  426. package/dist/messages/fr/buttons.json +19 -0
  427. package/dist/messages/fr/common.json +172 -0
  428. package/dist/messages/fr/dashboard.json +41 -0
  429. package/dist/messages/fr/devtools.json +285 -0
  430. package/dist/messages/fr/docs.json +24 -0
  431. package/dist/messages/fr/entities.json +52 -0
  432. package/dist/messages/fr/footer.json +23 -0
  433. package/dist/messages/fr/home.json +13 -0
  434. package/dist/messages/fr/index.d.ts +1934 -0
  435. package/dist/messages/fr/index.d.ts.map +1 -0
  436. package/dist/messages/fr/index.js +41 -0
  437. package/dist/messages/fr/index.ts +39 -0
  438. package/dist/messages/fr/navigation.json +11 -0
  439. package/dist/messages/fr/permissions.json +27 -0
  440. package/dist/messages/fr/public.json +14 -0
  441. package/dist/messages/fr/settings.json +404 -0
  442. package/dist/messages/fr/superadmin.json +194 -0
  443. package/dist/messages/fr/teams.json +140 -0
  444. package/dist/messages/fr/validation.json +48 -0
  445. package/dist/messages/index.d.ts +4 -0
  446. package/dist/messages/index.d.ts.map +1 -1
  447. package/dist/messages/index.js +9 -1
  448. package/dist/messages/index.ts +4 -0
  449. package/dist/messages/it/admin.json +219 -0
  450. package/dist/messages/it/auth.json +103 -0
  451. package/dist/messages/it/billing.json +167 -0
  452. package/dist/messages/it/buttons.json +19 -0
  453. package/dist/messages/it/common.json +172 -0
  454. package/dist/messages/it/dashboard.json +41 -0
  455. package/dist/messages/it/devtools.json +285 -0
  456. package/dist/messages/it/docs.json +24 -0
  457. package/dist/messages/it/entities.json +52 -0
  458. package/dist/messages/it/footer.json +23 -0
  459. package/dist/messages/it/home.json +13 -0
  460. package/dist/messages/it/index.d.ts +1934 -0
  461. package/dist/messages/it/index.d.ts.map +1 -0
  462. package/dist/messages/it/index.js +41 -0
  463. package/dist/messages/it/index.ts +39 -0
  464. package/dist/messages/it/navigation.json +11 -0
  465. package/dist/messages/it/permissions.json +27 -0
  466. package/dist/messages/it/public.json +14 -0
  467. package/dist/messages/it/settings.json +404 -0
  468. package/dist/messages/it/superadmin.json +194 -0
  469. package/dist/messages/it/teams.json +140 -0
  470. package/dist/messages/it/validation.json +48 -0
  471. package/dist/messages/pt/admin.json +219 -0
  472. package/dist/messages/pt/auth.json +103 -0
  473. package/dist/messages/pt/billing.json +167 -0
  474. package/dist/messages/pt/buttons.json +19 -0
  475. package/dist/messages/pt/common.json +172 -0
  476. package/dist/messages/pt/dashboard.json +41 -0
  477. package/dist/messages/pt/devtools.json +285 -0
  478. package/dist/messages/pt/docs.json +24 -0
  479. package/dist/messages/pt/entities.json +52 -0
  480. package/dist/messages/pt/footer.json +23 -0
  481. package/dist/messages/pt/home.json +13 -0
  482. package/dist/messages/pt/index.d.ts +1934 -0
  483. package/dist/messages/pt/index.d.ts.map +1 -0
  484. package/dist/messages/pt/index.js +41 -0
  485. package/dist/messages/pt/index.ts +39 -0
  486. package/dist/messages/pt/navigation.json +11 -0
  487. package/dist/messages/pt/permissions.json +27 -0
  488. package/dist/messages/pt/public.json +14 -0
  489. package/dist/messages/pt/settings.json +404 -0
  490. package/dist/messages/pt/superadmin.json +194 -0
  491. package/dist/messages/pt/teams.json +140 -0
  492. package/dist/messages/pt/validation.json +48 -0
  493. package/dist/presets/plugin/messages/de.json +20 -0
  494. package/dist/presets/plugin/messages/fr.json +20 -0
  495. package/dist/presets/plugin/messages/it.json +20 -0
  496. package/dist/presets/plugin/messages/pt.json +20 -0
  497. package/dist/presets/theme/entities/tasks/messages/de.json +204 -0
  498. package/dist/presets/theme/entities/tasks/messages/fr.json +204 -0
  499. package/dist/presets/theme/entities/tasks/messages/it.json +204 -0
  500. package/dist/presets/theme/entities/tasks/messages/pt.json +204 -0
  501. package/dist/presets/theme/messages/de.json +96 -0
  502. package/dist/presets/theme/messages/fr.json +96 -0
  503. package/dist/presets/theme/messages/it.json +96 -0
  504. package/dist/presets/theme/messages/pt.json +96 -0
  505. package/dist/styles/classes.json +1 -1
  506. package/dist/styles/ui.css +1 -1
  507. package/dist/templates/contents/themes/default/entities/customers/messages/de.json +66 -0
  508. package/dist/templates/contents/themes/default/entities/customers/messages/fr.json +66 -0
  509. package/dist/templates/contents/themes/default/entities/customers/messages/it.json +66 -0
  510. package/dist/templates/contents/themes/default/entities/customers/messages/pt.json +66 -0
  511. package/dist/templates/contents/themes/default/entities/pages/messages/de.json +41 -0
  512. package/dist/templates/contents/themes/default/entities/pages/messages/fr.json +41 -0
  513. package/dist/templates/contents/themes/default/entities/pages/messages/it.json +41 -0
  514. package/dist/templates/contents/themes/default/entities/pages/messages/pt.json +41 -0
  515. package/dist/templates/contents/themes/default/entities/posts/messages/de.json +55 -0
  516. package/dist/templates/contents/themes/default/entities/posts/messages/fr.json +55 -0
  517. package/dist/templates/contents/themes/default/entities/posts/messages/it.json +55 -0
  518. package/dist/templates/contents/themes/default/entities/posts/messages/pt.json +55 -0
  519. package/dist/templates/contents/themes/default/entities/tasks/messages/de.json +204 -0
  520. package/dist/templates/contents/themes/default/entities/tasks/messages/fr.json +204 -0
  521. package/dist/templates/contents/themes/default/entities/tasks/messages/it.json +204 -0
  522. package/dist/templates/contents/themes/default/entities/tasks/messages/pt.json +204 -0
  523. package/dist/templates/contents/themes/default/messages/de/admin.json +219 -0
  524. package/dist/templates/contents/themes/default/messages/de/aiUsage.json +36 -0
  525. package/dist/templates/contents/themes/default/messages/de/buttons.json +19 -0
  526. package/dist/templates/contents/themes/default/messages/de/categories.json +35 -0
  527. package/dist/templates/contents/themes/default/messages/de/common.json +16 -0
  528. package/dist/templates/contents/themes/default/messages/de/dev.json +106 -0
  529. package/dist/templates/contents/themes/default/messages/de/docs.json +27 -0
  530. package/dist/templates/contents/themes/default/messages/de/entities.json +7 -0
  531. package/dist/templates/contents/themes/default/messages/de/features.json +119 -0
  532. package/dist/templates/contents/themes/default/messages/de/footer.json +22 -0
  533. package/dist/templates/contents/themes/default/messages/de/home.json +57 -0
  534. package/dist/templates/contents/themes/default/messages/de/index.ts +39 -0
  535. package/dist/templates/contents/themes/default/messages/de/mobileNav.json +13 -0
  536. package/dist/templates/contents/themes/default/messages/de/navigation.json +8 -0
  537. package/dist/templates/contents/themes/default/messages/de/observability.json +74 -0
  538. package/dist/templates/contents/themes/default/messages/de/posts.json +54 -0
  539. package/dist/templates/contents/themes/default/messages/de/pricing.json +102 -0
  540. package/dist/templates/contents/themes/default/messages/de/support.json +9 -0
  541. package/dist/templates/contents/themes/default/messages/de/teams.json +8 -0
  542. package/dist/templates/contents/themes/default/messages/es/admin.json +219 -0
  543. package/dist/templates/contents/themes/default/messages/es/aiUsage.json +36 -0
  544. package/dist/templates/contents/themes/default/messages/es/buttons.json +19 -0
  545. package/dist/templates/contents/themes/default/messages/es/categories.json +35 -0
  546. package/dist/templates/contents/themes/default/messages/es/common.json +16 -0
  547. package/dist/templates/contents/themes/default/messages/es/dev.json +101 -0
  548. package/dist/templates/contents/themes/default/messages/es/docs.json +27 -0
  549. package/dist/templates/contents/themes/default/messages/es/entities.json +7 -0
  550. package/dist/templates/contents/themes/default/messages/es/features.json +119 -0
  551. package/dist/templates/contents/themes/default/messages/es/footer.json +22 -0
  552. package/dist/templates/contents/themes/default/messages/es/home.json +57 -0
  553. package/dist/templates/contents/themes/default/messages/es/index.ts +39 -0
  554. package/dist/templates/contents/themes/default/messages/es/mobileNav.json +13 -0
  555. package/dist/templates/contents/themes/default/messages/es/navigation.json +8 -0
  556. package/dist/templates/contents/themes/default/messages/es/observability.json +74 -0
  557. package/dist/templates/contents/themes/default/messages/es/posts.json +54 -0
  558. package/dist/templates/contents/themes/default/messages/es/pricing.json +102 -0
  559. package/dist/templates/contents/themes/default/messages/es/support.json +9 -0
  560. package/dist/templates/contents/themes/default/messages/es/teams.json +8 -0
  561. package/dist/templates/contents/themes/default/messages/fr/admin.json +219 -0
  562. package/dist/templates/contents/themes/default/messages/fr/aiUsage.json +36 -0
  563. package/dist/templates/contents/themes/default/messages/fr/buttons.json +19 -0
  564. package/dist/templates/contents/themes/default/messages/fr/categories.json +35 -0
  565. package/dist/templates/contents/themes/default/messages/fr/common.json +16 -0
  566. package/dist/templates/contents/themes/default/messages/fr/dev.json +106 -0
  567. package/dist/templates/contents/themes/default/messages/fr/docs.json +27 -0
  568. package/dist/templates/contents/themes/default/messages/fr/entities.json +7 -0
  569. package/dist/templates/contents/themes/default/messages/fr/features.json +119 -0
  570. package/dist/templates/contents/themes/default/messages/fr/footer.json +22 -0
  571. package/dist/templates/contents/themes/default/messages/fr/home.json +57 -0
  572. package/dist/templates/contents/themes/default/messages/fr/index.ts +39 -0
  573. package/dist/templates/contents/themes/default/messages/fr/mobileNav.json +13 -0
  574. package/dist/templates/contents/themes/default/messages/fr/navigation.json +8 -0
  575. package/dist/templates/contents/themes/default/messages/fr/observability.json +74 -0
  576. package/dist/templates/contents/themes/default/messages/fr/posts.json +54 -0
  577. package/dist/templates/contents/themes/default/messages/fr/pricing.json +102 -0
  578. package/dist/templates/contents/themes/default/messages/fr/support.json +9 -0
  579. package/dist/templates/contents/themes/default/messages/fr/teams.json +8 -0
  580. package/dist/templates/contents/themes/default/messages/it/admin.json +219 -0
  581. package/dist/templates/contents/themes/default/messages/it/aiUsage.json +36 -0
  582. package/dist/templates/contents/themes/default/messages/it/buttons.json +19 -0
  583. package/dist/templates/contents/themes/default/messages/it/categories.json +35 -0
  584. package/dist/templates/contents/themes/default/messages/it/common.json +16 -0
  585. package/dist/templates/contents/themes/default/messages/it/dev.json +106 -0
  586. package/dist/templates/contents/themes/default/messages/it/docs.json +27 -0
  587. package/dist/templates/contents/themes/default/messages/it/entities.json +7 -0
  588. package/dist/templates/contents/themes/default/messages/it/features.json +119 -0
  589. package/dist/templates/contents/themes/default/messages/it/footer.json +22 -0
  590. package/dist/templates/contents/themes/default/messages/it/home.json +57 -0
  591. package/dist/templates/contents/themes/default/messages/it/index.ts +39 -0
  592. package/dist/templates/contents/themes/default/messages/it/mobileNav.json +13 -0
  593. package/dist/templates/contents/themes/default/messages/it/navigation.json +8 -0
  594. package/dist/templates/contents/themes/default/messages/it/observability.json +74 -0
  595. package/dist/templates/contents/themes/default/messages/it/posts.json +54 -0
  596. package/dist/templates/contents/themes/default/messages/it/pricing.json +102 -0
  597. package/dist/templates/contents/themes/default/messages/it/support.json +9 -0
  598. package/dist/templates/contents/themes/default/messages/it/teams.json +8 -0
  599. package/dist/templates/contents/themes/default/messages/pt/admin.json +219 -0
  600. package/dist/templates/contents/themes/default/messages/pt/aiUsage.json +36 -0
  601. package/dist/templates/contents/themes/default/messages/pt/buttons.json +19 -0
  602. package/dist/templates/contents/themes/default/messages/pt/categories.json +35 -0
  603. package/dist/templates/contents/themes/default/messages/pt/common.json +16 -0
  604. package/dist/templates/contents/themes/default/messages/pt/dev.json +106 -0
  605. package/dist/templates/contents/themes/default/messages/pt/docs.json +27 -0
  606. package/dist/templates/contents/themes/default/messages/pt/entities.json +7 -0
  607. package/dist/templates/contents/themes/default/messages/pt/features.json +119 -0
  608. package/dist/templates/contents/themes/default/messages/pt/footer.json +22 -0
  609. package/dist/templates/contents/themes/default/messages/pt/home.json +57 -0
  610. package/dist/templates/contents/themes/default/messages/pt/index.ts +39 -0
  611. package/dist/templates/contents/themes/default/messages/pt/mobileNav.json +13 -0
  612. package/dist/templates/contents/themes/default/messages/pt/navigation.json +8 -0
  613. package/dist/templates/contents/themes/default/messages/pt/observability.json +74 -0
  614. package/dist/templates/contents/themes/default/messages/pt/posts.json +54 -0
  615. package/dist/templates/contents/themes/default/messages/pt/pricing.json +102 -0
  616. package/dist/templates/contents/themes/default/messages/pt/support.json +9 -0
  617. package/dist/templates/contents/themes/default/messages/pt/teams.json +8 -0
  618. package/dist/templates/contents/themes/starter/README.md +35 -0
  619. package/dist/templates/contents/themes/starter/about/business.md +16 -0
  620. package/dist/templates/contents/themes/starter/about/features.json +28 -0
  621. package/dist/templates/contents/themes/starter/blocks/hero/component.tsx +112 -0
  622. package/dist/templates/contents/themes/starter/blocks/hero/config.ts +11 -0
  623. package/dist/templates/contents/themes/starter/blocks/hero/fields.ts +74 -0
  624. package/dist/templates/contents/themes/starter/blocks/hero/index.ts +6 -0
  625. package/dist/templates/contents/themes/starter/blocks/hero/schema.ts +34 -0
  626. package/dist/templates/contents/themes/starter/config/app.config.ts +193 -0
  627. package/dist/templates/contents/themes/starter/config/billing.config.ts +93 -0
  628. package/dist/templates/contents/themes/starter/config/dashboard.config.ts +419 -0
  629. package/dist/templates/contents/themes/starter/config/dev.config.ts +74 -0
  630. package/dist/templates/contents/themes/starter/config/permissions.config.ts +64 -0
  631. package/dist/templates/contents/themes/starter/config/theme.config.ts +83 -0
  632. package/dist/templates/contents/themes/starter/docs/01-overview/01-introduction.md +33 -0
  633. package/dist/templates/contents/themes/starter/docs/01-overview/02-customization.md +46 -0
  634. package/dist/templates/contents/themes/starter/entities/tasks/messages/de.json +263 -0
  635. package/dist/templates/contents/themes/starter/entities/tasks/messages/en.json +263 -0
  636. package/dist/templates/contents/themes/starter/entities/tasks/messages/es.json +263 -0
  637. package/dist/templates/contents/themes/starter/entities/tasks/messages/fr.json +263 -0
  638. package/dist/templates/contents/themes/starter/entities/tasks/messages/it.json +263 -0
  639. package/dist/templates/contents/themes/starter/entities/tasks/messages/pt.json +263 -0
  640. package/dist/templates/contents/themes/starter/entities/tasks/migrations/001_tasks_table.sql +104 -0
  641. package/dist/templates/contents/themes/starter/entities/tasks/migrations/002_task_metas.sql +84 -0
  642. package/dist/templates/contents/themes/starter/entities/tasks/migrations/003_tasks_sample_data.sql +172 -0
  643. package/dist/templates/contents/themes/starter/entities/tasks/tasks.config.ts +131 -0
  644. package/dist/templates/contents/themes/starter/entities/tasks/tasks.fields.ts +188 -0
  645. package/dist/templates/contents/themes/starter/entities/tasks/tasks.service.ts +390 -0
  646. package/dist/templates/contents/themes/starter/entities/tasks/tasks.types.ts +82 -0
  647. package/dist/templates/contents/themes/starter/lib/hooks/index.ts +1 -0
  648. package/dist/templates/contents/themes/starter/lib/hooks/useTaskStats.ts +57 -0
  649. package/dist/templates/contents/themes/starter/lib/index.ts +8 -0
  650. package/dist/templates/contents/themes/starter/lib/selectors.ts +94 -0
  651. package/dist/templates/contents/themes/starter/lib/utils.ts +154 -0
  652. package/dist/templates/contents/themes/starter/messages/de/analytics.json +39 -0
  653. package/dist/templates/contents/themes/starter/messages/de/common.json +33 -0
  654. package/dist/templates/contents/themes/starter/messages/de/home.json +30 -0
  655. package/dist/templates/contents/themes/starter/messages/de/navigation.json +16 -0
  656. package/dist/templates/contents/themes/starter/messages/en/analytics.json +39 -0
  657. package/dist/templates/contents/themes/starter/messages/en/common.json +33 -0
  658. package/dist/templates/contents/themes/starter/messages/en/home.json +30 -0
  659. package/dist/templates/contents/themes/starter/messages/en/navigation.json +16 -0
  660. package/dist/templates/contents/themes/starter/messages/es/analytics.json +39 -0
  661. package/dist/templates/contents/themes/starter/messages/es/common.json +33 -0
  662. package/dist/templates/contents/themes/starter/messages/es/home.json +30 -0
  663. package/dist/templates/contents/themes/starter/messages/es/navigation.json +16 -0
  664. package/dist/templates/contents/themes/starter/messages/fr/analytics.json +39 -0
  665. package/dist/templates/contents/themes/starter/messages/fr/common.json +33 -0
  666. package/dist/templates/contents/themes/starter/messages/fr/home.json +30 -0
  667. package/dist/templates/contents/themes/starter/messages/fr/navigation.json +16 -0
  668. package/dist/templates/contents/themes/starter/messages/it/analytics.json +39 -0
  669. package/dist/templates/contents/themes/starter/messages/it/common.json +33 -0
  670. package/dist/templates/contents/themes/starter/messages/it/home.json +30 -0
  671. package/dist/templates/contents/themes/starter/messages/it/navigation.json +16 -0
  672. package/dist/templates/contents/themes/starter/messages/pt/analytics.json +39 -0
  673. package/dist/templates/contents/themes/starter/messages/pt/common.json +33 -0
  674. package/dist/templates/contents/themes/starter/messages/pt/home.json +30 -0
  675. package/dist/templates/contents/themes/starter/messages/pt/navigation.json +16 -0
  676. package/dist/templates/contents/themes/starter/migrations/001_starter_users.sql +17 -0
  677. package/dist/templates/contents/themes/starter/migrations/README.md +19 -0
  678. package/dist/templates/contents/themes/starter/public/brand/.gitkeep +0 -0
  679. package/dist/templates/contents/themes/starter/public/theme/blocks/hero/thumbnail.png +1 -0
  680. package/dist/templates/contents/themes/starter/styles/components.css +16 -0
  681. package/dist/templates/contents/themes/starter/styles/globals.css +20 -0
  682. package/dist/templates/contents/themes/starter/templates/(dashboard)/analytics/_hooks/useAnalyticsData.ts +41 -0
  683. package/dist/templates/contents/themes/starter/templates/(dashboard)/analytics/components/RecentActivity.tsx +78 -0
  684. package/dist/templates/contents/themes/starter/templates/(dashboard)/analytics/components/StatsCard.tsx +58 -0
  685. package/dist/templates/contents/themes/starter/templates/(dashboard)/analytics/components/TasksChart.tsx +80 -0
  686. package/dist/templates/contents/themes/starter/templates/(dashboard)/analytics/page.tsx +45 -0
  687. package/dist/templates/contents/themes/starter/templates/(public)/layout.tsx +15 -0
  688. package/dist/templates/contents/themes/starter/templates/(public)/page.tsx +37 -0
  689. package/dist/templates/contents/themes/starter/templates/(public)/support/page.tsx +14 -0
  690. package/dist/templates/contents/themes/starter/tests/cypress/e2e/tasks/TaskAPIController.js +240 -0
  691. package/dist/templates/contents/themes/starter/tests/cypress/e2e/tasks/TasksPOM.ts +246 -0
  692. package/dist/templates/contents/themes/starter/tests/cypress/e2e/tasks/tasks-crud.cy.ts +423 -0
  693. package/dist/templates/contents/themes/starter/tests/cypress/fixtures/entities.json +63 -0
  694. package/dist/templates/contents/themes/starter/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  695. package/dist/templates/contents/themes/starter/tests/cypress/src/controllers/index.js +12 -0
  696. package/dist/templates/contents/themes/starter/tests/cypress/src/core/AuthPOM.ts +464 -0
  697. package/dist/templates/contents/themes/starter/tests/cypress/src/core/BasePOM.ts +130 -0
  698. package/dist/templates/contents/themes/starter/tests/cypress/src/core/DashboardEntityPOM.ts +761 -0
  699. package/dist/templates/contents/themes/starter/tests/cypress/src/core/index.ts +12 -0
  700. package/dist/templates/contents/themes/starter/tests/cypress/src/helpers/ApiInterceptor.ts +170 -0
  701. package/dist/templates/contents/themes/starter/tests/cypress/src/selectors.ts +155 -0
  702. package/dist/templates/contents/themes/starter/tests/cypress/src/session-helpers.ts +255 -0
  703. package/dist/templates/contents/themes/starter/tests/cypress/support/commands.ts +192 -0
  704. package/dist/templates/contents/themes/starter/tests/cypress/support/doc-commands.ts +260 -0
  705. package/dist/templates/contents/themes/starter/tests/cypress/support/e2e.ts +21 -0
  706. package/dist/templates/contents/themes/starter/tests/cypress.config.ts +155 -0
  707. package/dist/templates/contents/themes/starter/tests/tsconfig.json +15 -0
  708. package/dist/templates/eslint.config.mjs +16 -0
  709. package/dist/templates/features/blog/blocks/post-content/component.tsx +197 -0
  710. package/dist/templates/features/blog/blocks/post-content/config.ts +11 -0
  711. package/dist/templates/features/blog/blocks/post-content/examples.ts +33 -0
  712. package/dist/templates/features/blog/blocks/post-content/fields.ts +165 -0
  713. package/dist/templates/features/blog/blocks/post-content/index.ts +4 -0
  714. package/dist/templates/features/blog/blocks/post-content/schema.ts +46 -0
  715. package/dist/templates/features/blog/entities/posts/components/post-header.tsx +97 -0
  716. package/dist/templates/features/blog/entities/posts/messages/en.json +55 -0
  717. package/dist/templates/features/blog/entities/posts/messages/es.json +55 -0
  718. package/dist/templates/features/blog/entities/posts/migrations/001_posts_table.sql +115 -0
  719. package/dist/templates/features/blog/entities/posts/migrations/003_add_status.sql +44 -0
  720. package/dist/templates/features/blog/entities/posts/migrations/004_entity_taxonomy_relations.sql +129 -0
  721. package/dist/templates/features/blog/entities/posts/migrations/006_posts_metas.sql +56 -0
  722. package/dist/templates/features/blog/entities/posts/posts.config.ts +112 -0
  723. package/dist/templates/features/blog/entities/posts/posts.fields.ts +116 -0
  724. package/dist/templates/features/blog/entities/posts/posts.service.ts +376 -0
  725. package/dist/templates/features/blog/entities/posts/posts.types.ts +74 -0
  726. package/dist/templates/features/pages/entities/pages/messages/en.json +41 -0
  727. package/dist/templates/features/pages/entities/pages/messages/es.json +41 -0
  728. package/dist/templates/features/pages/entities/pages/migrations/001_pages_table.sql +112 -0
  729. package/dist/templates/features/pages/entities/pages/migrations/002_pages_metas.sql +56 -0
  730. package/dist/templates/features/pages/entities/pages/migrations/003_add_status.sql +50 -0
  731. package/dist/templates/features/pages/entities/pages/pages-management.service.ts +610 -0
  732. package/dist/templates/features/pages/entities/pages/pages.config.ts +105 -0
  733. package/dist/templates/features/pages/entities/pages/pages.fields.ts +101 -0
  734. package/dist/templates/features/pages/entities/pages/pages.service.ts +290 -0
  735. package/dist/templates/features/pages/entities/pages/pages.types.ts +124 -0
  736. package/package.json +33 -2
  737. package/scripts/build/registry/generators/translation-registry.mjs +135 -18
  738. package/templates/contents/themes/default/entities/customers/messages/de.json +66 -0
  739. package/templates/contents/themes/default/entities/customers/messages/fr.json +66 -0
  740. package/templates/contents/themes/default/entities/customers/messages/it.json +66 -0
  741. package/templates/contents/themes/default/entities/customers/messages/pt.json +66 -0
  742. package/templates/contents/themes/default/entities/pages/messages/de.json +41 -0
  743. package/templates/contents/themes/default/entities/pages/messages/fr.json +41 -0
  744. package/templates/contents/themes/default/entities/pages/messages/it.json +41 -0
  745. package/templates/contents/themes/default/entities/pages/messages/pt.json +41 -0
  746. package/templates/contents/themes/default/entities/posts/messages/de.json +55 -0
  747. package/templates/contents/themes/default/entities/posts/messages/fr.json +55 -0
  748. package/templates/contents/themes/default/entities/posts/messages/it.json +55 -0
  749. package/templates/contents/themes/default/entities/posts/messages/pt.json +55 -0
  750. package/templates/contents/themes/default/entities/tasks/messages/de.json +204 -0
  751. package/templates/contents/themes/default/entities/tasks/messages/fr.json +204 -0
  752. package/templates/contents/themes/default/entities/tasks/messages/it.json +204 -0
  753. package/templates/contents/themes/default/entities/tasks/messages/pt.json +204 -0
  754. package/templates/contents/themes/default/messages/de/admin.json +219 -0
  755. package/templates/contents/themes/default/messages/de/aiUsage.json +36 -0
  756. package/templates/contents/themes/default/messages/de/buttons.json +19 -0
  757. package/templates/contents/themes/default/messages/de/categories.json +35 -0
  758. package/templates/contents/themes/default/messages/de/common.json +16 -0
  759. package/templates/contents/themes/default/messages/de/dev.json +106 -0
  760. package/templates/contents/themes/default/messages/de/docs.json +27 -0
  761. package/templates/contents/themes/default/messages/de/entities.json +7 -0
  762. package/templates/contents/themes/default/messages/de/features.json +119 -0
  763. package/templates/contents/themes/default/messages/de/footer.json +22 -0
  764. package/templates/contents/themes/default/messages/de/home.json +57 -0
  765. package/templates/contents/themes/default/messages/de/index.ts +39 -0
  766. package/templates/contents/themes/default/messages/de/mobileNav.json +13 -0
  767. package/templates/contents/themes/default/messages/de/navigation.json +8 -0
  768. package/templates/contents/themes/default/messages/de/observability.json +74 -0
  769. package/templates/contents/themes/default/messages/de/posts.json +54 -0
  770. package/templates/contents/themes/default/messages/de/pricing.json +102 -0
  771. package/templates/contents/themes/default/messages/de/support.json +9 -0
  772. package/templates/contents/themes/default/messages/de/teams.json +8 -0
  773. package/templates/contents/themes/default/messages/es/admin.json +219 -0
  774. package/templates/contents/themes/default/messages/es/aiUsage.json +36 -0
  775. package/templates/contents/themes/default/messages/es/buttons.json +19 -0
  776. package/templates/contents/themes/default/messages/es/categories.json +35 -0
  777. package/templates/contents/themes/default/messages/es/common.json +16 -0
  778. package/templates/contents/themes/default/messages/es/dev.json +101 -0
  779. package/templates/contents/themes/default/messages/es/docs.json +27 -0
  780. package/templates/contents/themes/default/messages/es/entities.json +7 -0
  781. package/templates/contents/themes/default/messages/es/features.json +119 -0
  782. package/templates/contents/themes/default/messages/es/footer.json +22 -0
  783. package/templates/contents/themes/default/messages/es/home.json +57 -0
  784. package/templates/contents/themes/default/messages/es/index.ts +39 -0
  785. package/templates/contents/themes/default/messages/es/mobileNav.json +13 -0
  786. package/templates/contents/themes/default/messages/es/navigation.json +8 -0
  787. package/templates/contents/themes/default/messages/es/observability.json +74 -0
  788. package/templates/contents/themes/default/messages/es/posts.json +54 -0
  789. package/templates/contents/themes/default/messages/es/pricing.json +102 -0
  790. package/templates/contents/themes/default/messages/es/support.json +9 -0
  791. package/templates/contents/themes/default/messages/es/teams.json +8 -0
  792. package/templates/contents/themes/default/messages/fr/admin.json +219 -0
  793. package/templates/contents/themes/default/messages/fr/aiUsage.json +36 -0
  794. package/templates/contents/themes/default/messages/fr/buttons.json +19 -0
  795. package/templates/contents/themes/default/messages/fr/categories.json +35 -0
  796. package/templates/contents/themes/default/messages/fr/common.json +16 -0
  797. package/templates/contents/themes/default/messages/fr/dev.json +106 -0
  798. package/templates/contents/themes/default/messages/fr/docs.json +27 -0
  799. package/templates/contents/themes/default/messages/fr/entities.json +7 -0
  800. package/templates/contents/themes/default/messages/fr/features.json +119 -0
  801. package/templates/contents/themes/default/messages/fr/footer.json +22 -0
  802. package/templates/contents/themes/default/messages/fr/home.json +57 -0
  803. package/templates/contents/themes/default/messages/fr/index.ts +39 -0
  804. package/templates/contents/themes/default/messages/fr/mobileNav.json +13 -0
  805. package/templates/contents/themes/default/messages/fr/navigation.json +8 -0
  806. package/templates/contents/themes/default/messages/fr/observability.json +74 -0
  807. package/templates/contents/themes/default/messages/fr/posts.json +54 -0
  808. package/templates/contents/themes/default/messages/fr/pricing.json +102 -0
  809. package/templates/contents/themes/default/messages/fr/support.json +9 -0
  810. package/templates/contents/themes/default/messages/fr/teams.json +8 -0
  811. package/templates/contents/themes/default/messages/it/admin.json +219 -0
  812. package/templates/contents/themes/default/messages/it/aiUsage.json +36 -0
  813. package/templates/contents/themes/default/messages/it/buttons.json +19 -0
  814. package/templates/contents/themes/default/messages/it/categories.json +35 -0
  815. package/templates/contents/themes/default/messages/it/common.json +16 -0
  816. package/templates/contents/themes/default/messages/it/dev.json +106 -0
  817. package/templates/contents/themes/default/messages/it/docs.json +27 -0
  818. package/templates/contents/themes/default/messages/it/entities.json +7 -0
  819. package/templates/contents/themes/default/messages/it/features.json +119 -0
  820. package/templates/contents/themes/default/messages/it/footer.json +22 -0
  821. package/templates/contents/themes/default/messages/it/home.json +57 -0
  822. package/templates/contents/themes/default/messages/it/index.ts +39 -0
  823. package/templates/contents/themes/default/messages/it/mobileNav.json +13 -0
  824. package/templates/contents/themes/default/messages/it/navigation.json +8 -0
  825. package/templates/contents/themes/default/messages/it/observability.json +74 -0
  826. package/templates/contents/themes/default/messages/it/posts.json +54 -0
  827. package/templates/contents/themes/default/messages/it/pricing.json +102 -0
  828. package/templates/contents/themes/default/messages/it/support.json +9 -0
  829. package/templates/contents/themes/default/messages/it/teams.json +8 -0
  830. package/templates/contents/themes/default/messages/pt/admin.json +219 -0
  831. package/templates/contents/themes/default/messages/pt/aiUsage.json +36 -0
  832. package/templates/contents/themes/default/messages/pt/buttons.json +19 -0
  833. package/templates/contents/themes/default/messages/pt/categories.json +35 -0
  834. package/templates/contents/themes/default/messages/pt/common.json +16 -0
  835. package/templates/contents/themes/default/messages/pt/dev.json +106 -0
  836. package/templates/contents/themes/default/messages/pt/docs.json +27 -0
  837. package/templates/contents/themes/default/messages/pt/entities.json +7 -0
  838. package/templates/contents/themes/default/messages/pt/features.json +119 -0
  839. package/templates/contents/themes/default/messages/pt/footer.json +22 -0
  840. package/templates/contents/themes/default/messages/pt/home.json +57 -0
  841. package/templates/contents/themes/default/messages/pt/index.ts +39 -0
  842. package/templates/contents/themes/default/messages/pt/mobileNav.json +13 -0
  843. package/templates/contents/themes/default/messages/pt/navigation.json +8 -0
  844. package/templates/contents/themes/default/messages/pt/observability.json +74 -0
  845. package/templates/contents/themes/default/messages/pt/posts.json +54 -0
  846. package/templates/contents/themes/default/messages/pt/pricing.json +102 -0
  847. package/templates/contents/themes/default/messages/pt/support.json +9 -0
  848. package/templates/contents/themes/default/messages/pt/teams.json +8 -0
  849. package/templates/contents/themes/starter/README.md +35 -0
  850. package/templates/contents/themes/starter/about/business.md +16 -0
  851. package/templates/contents/themes/starter/about/features.json +28 -0
  852. package/templates/contents/themes/starter/blocks/hero/component.tsx +112 -0
  853. package/templates/contents/themes/starter/blocks/hero/config.ts +11 -0
  854. package/templates/contents/themes/starter/blocks/hero/fields.ts +74 -0
  855. package/templates/contents/themes/starter/blocks/hero/index.ts +6 -0
  856. package/templates/contents/themes/starter/blocks/hero/schema.ts +34 -0
  857. package/templates/contents/themes/starter/config/app.config.ts +193 -0
  858. package/templates/contents/themes/starter/config/billing.config.ts +93 -0
  859. package/templates/contents/themes/starter/config/dashboard.config.ts +419 -0
  860. package/templates/contents/themes/starter/config/dev.config.ts +74 -0
  861. package/templates/contents/themes/starter/config/permissions.config.ts +64 -0
  862. package/templates/contents/themes/starter/config/theme.config.ts +83 -0
  863. package/templates/contents/themes/starter/docs/01-overview/01-introduction.md +33 -0
  864. package/templates/contents/themes/starter/docs/01-overview/02-customization.md +46 -0
  865. package/templates/contents/themes/starter/entities/tasks/messages/de.json +263 -0
  866. package/templates/contents/themes/starter/entities/tasks/messages/en.json +263 -0
  867. package/templates/contents/themes/starter/entities/tasks/messages/es.json +263 -0
  868. package/templates/contents/themes/starter/entities/tasks/messages/fr.json +263 -0
  869. package/templates/contents/themes/starter/entities/tasks/messages/it.json +263 -0
  870. package/templates/contents/themes/starter/entities/tasks/messages/pt.json +263 -0
  871. package/templates/contents/themes/starter/entities/tasks/migrations/001_tasks_table.sql +104 -0
  872. package/templates/contents/themes/starter/entities/tasks/migrations/002_task_metas.sql +84 -0
  873. package/templates/contents/themes/starter/entities/tasks/migrations/003_tasks_sample_data.sql +172 -0
  874. package/templates/contents/themes/starter/entities/tasks/tasks.config.ts +131 -0
  875. package/templates/contents/themes/starter/entities/tasks/tasks.fields.ts +188 -0
  876. package/templates/contents/themes/starter/entities/tasks/tasks.service.ts +390 -0
  877. package/templates/contents/themes/starter/entities/tasks/tasks.types.ts +82 -0
  878. package/templates/contents/themes/starter/lib/hooks/index.ts +1 -0
  879. package/templates/contents/themes/starter/lib/hooks/useTaskStats.ts +57 -0
  880. package/templates/contents/themes/starter/lib/index.ts +8 -0
  881. package/templates/contents/themes/starter/lib/selectors.ts +94 -0
  882. package/templates/contents/themes/starter/lib/utils.ts +154 -0
  883. package/templates/contents/themes/starter/messages/de/analytics.json +39 -0
  884. package/templates/contents/themes/starter/messages/de/common.json +33 -0
  885. package/templates/contents/themes/starter/messages/de/home.json +30 -0
  886. package/templates/contents/themes/starter/messages/de/navigation.json +16 -0
  887. package/templates/contents/themes/starter/messages/en/analytics.json +39 -0
  888. package/templates/contents/themes/starter/messages/en/common.json +33 -0
  889. package/templates/contents/themes/starter/messages/en/home.json +30 -0
  890. package/templates/contents/themes/starter/messages/en/navigation.json +16 -0
  891. package/templates/contents/themes/starter/messages/es/analytics.json +39 -0
  892. package/templates/contents/themes/starter/messages/es/common.json +33 -0
  893. package/templates/contents/themes/starter/messages/es/home.json +30 -0
  894. package/templates/contents/themes/starter/messages/es/navigation.json +16 -0
  895. package/templates/contents/themes/starter/messages/fr/analytics.json +39 -0
  896. package/templates/contents/themes/starter/messages/fr/common.json +33 -0
  897. package/templates/contents/themes/starter/messages/fr/home.json +30 -0
  898. package/templates/contents/themes/starter/messages/fr/navigation.json +16 -0
  899. package/templates/contents/themes/starter/messages/it/analytics.json +39 -0
  900. package/templates/contents/themes/starter/messages/it/common.json +33 -0
  901. package/templates/contents/themes/starter/messages/it/home.json +30 -0
  902. package/templates/contents/themes/starter/messages/it/navigation.json +16 -0
  903. package/templates/contents/themes/starter/messages/pt/analytics.json +39 -0
  904. package/templates/contents/themes/starter/messages/pt/common.json +33 -0
  905. package/templates/contents/themes/starter/messages/pt/home.json +30 -0
  906. package/templates/contents/themes/starter/messages/pt/navigation.json +16 -0
  907. package/templates/contents/themes/starter/migrations/001_starter_users.sql +17 -0
  908. package/templates/contents/themes/starter/migrations/README.md +19 -0
  909. package/templates/contents/themes/starter/public/brand/.gitkeep +0 -0
  910. package/templates/contents/themes/starter/public/theme/blocks/hero/thumbnail.png +1 -0
  911. package/templates/contents/themes/starter/styles/components.css +16 -0
  912. package/templates/contents/themes/starter/styles/globals.css +20 -0
  913. package/templates/contents/themes/starter/templates/(dashboard)/analytics/_hooks/useAnalyticsData.ts +41 -0
  914. package/templates/contents/themes/starter/templates/(dashboard)/analytics/components/RecentActivity.tsx +78 -0
  915. package/templates/contents/themes/starter/templates/(dashboard)/analytics/components/StatsCard.tsx +58 -0
  916. package/templates/contents/themes/starter/templates/(dashboard)/analytics/components/TasksChart.tsx +80 -0
  917. package/templates/contents/themes/starter/templates/(dashboard)/analytics/page.tsx +45 -0
  918. package/templates/contents/themes/starter/templates/(public)/layout.tsx +15 -0
  919. package/templates/contents/themes/starter/templates/(public)/page.tsx +37 -0
  920. package/templates/contents/themes/starter/templates/(public)/support/page.tsx +14 -0
  921. package/templates/contents/themes/starter/tests/cypress/e2e/tasks/TaskAPIController.js +240 -0
  922. package/templates/contents/themes/starter/tests/cypress/e2e/tasks/TasksPOM.ts +246 -0
  923. package/templates/contents/themes/starter/tests/cypress/e2e/tasks/tasks-crud.cy.ts +423 -0
  924. package/templates/contents/themes/starter/tests/cypress/fixtures/entities.json +63 -0
  925. package/templates/contents/themes/starter/tests/cypress/src/controllers/BaseAPIController.js +317 -0
  926. package/templates/contents/themes/starter/tests/cypress/src/controllers/index.js +12 -0
  927. package/templates/contents/themes/starter/tests/cypress/src/core/AuthPOM.ts +464 -0
  928. package/templates/contents/themes/starter/tests/cypress/src/core/BasePOM.ts +130 -0
  929. package/templates/contents/themes/starter/tests/cypress/src/core/DashboardEntityPOM.ts +761 -0
  930. package/templates/contents/themes/starter/tests/cypress/src/core/index.ts +12 -0
  931. package/templates/contents/themes/starter/tests/cypress/src/helpers/ApiInterceptor.ts +170 -0
  932. package/templates/contents/themes/starter/tests/cypress/src/selectors.ts +155 -0
  933. package/templates/contents/themes/starter/tests/cypress/src/session-helpers.ts +255 -0
  934. package/templates/contents/themes/starter/tests/cypress/support/commands.ts +192 -0
  935. package/templates/contents/themes/starter/tests/cypress/support/doc-commands.ts +260 -0
  936. package/templates/contents/themes/starter/tests/cypress/support/e2e.ts +21 -0
  937. package/templates/contents/themes/starter/tests/cypress.config.ts +155 -0
  938. package/templates/contents/themes/starter/tests/tsconfig.json +15 -0
  939. package/templates/eslint.config.mjs +16 -0
  940. package/templates/features/blog/blocks/post-content/component.tsx +197 -0
  941. package/templates/features/blog/blocks/post-content/config.ts +11 -0
  942. package/templates/features/blog/blocks/post-content/examples.ts +33 -0
  943. package/templates/features/blog/blocks/post-content/fields.ts +165 -0
  944. package/templates/features/blog/blocks/post-content/index.ts +4 -0
  945. package/templates/features/blog/blocks/post-content/schema.ts +46 -0
  946. package/templates/features/blog/entities/posts/components/post-header.tsx +97 -0
  947. package/templates/features/blog/entities/posts/messages/en.json +55 -0
  948. package/templates/features/blog/entities/posts/messages/es.json +55 -0
  949. package/templates/features/blog/entities/posts/migrations/001_posts_table.sql +115 -0
  950. package/templates/features/blog/entities/posts/migrations/003_add_status.sql +44 -0
  951. package/templates/features/blog/entities/posts/migrations/004_entity_taxonomy_relations.sql +129 -0
  952. package/templates/features/blog/entities/posts/migrations/006_posts_metas.sql +56 -0
  953. package/templates/features/blog/entities/posts/posts.config.ts +112 -0
  954. package/templates/features/blog/entities/posts/posts.fields.ts +116 -0
  955. package/templates/features/blog/entities/posts/posts.service.ts +376 -0
  956. package/templates/features/blog/entities/posts/posts.types.ts +74 -0
  957. package/templates/features/pages/entities/pages/messages/en.json +41 -0
  958. package/templates/features/pages/entities/pages/messages/es.json +41 -0
  959. package/templates/features/pages/entities/pages/migrations/001_pages_table.sql +112 -0
  960. package/templates/features/pages/entities/pages/migrations/002_pages_metas.sql +56 -0
  961. package/templates/features/pages/entities/pages/migrations/003_add_status.sql +50 -0
  962. package/templates/features/pages/entities/pages/pages-management.service.ts +610 -0
  963. package/templates/features/pages/entities/pages/pages.config.ts +105 -0
  964. package/templates/features/pages/entities/pages/pages.fields.ts +101 -0
  965. package/templates/features/pages/entities/pages/pages.service.ts +290 -0
  966. package/templates/features/pages/entities/pages/pages.types.ts +124 -0
  967. package/dist/templates/contents/themes/default/messages/en.json +0 -934
  968. package/dist/templates/contents/themes/default/messages/en.json.backup +0 -934
  969. package/dist/templates/contents/themes/default/messages/es.json +0 -929
  970. package/templates/contents/themes/default/messages/en.json +0 -934
  971. package/templates/contents/themes/default/messages/en.json.backup +0 -934
  972. package/templates/contents/themes/default/messages/es.json +0 -929
@@ -0,0 +1,376 @@
1
+ /**
2
+ * Posts Service
3
+ *
4
+ * Provides data access methods for posts, separating public queries
5
+ * (without RLS) from authenticated queries (with RLS).
6
+ *
7
+ * @module PostsService
8
+ */
9
+
10
+ import { query, queryOne, queryOneWithRLS } from '@nextsparkjs/core/lib/db'
11
+ import type {
12
+ PostPublic,
13
+ PostMetadata,
14
+ PostListOptions,
15
+ PostListResult,
16
+ Block,
17
+ PostCategory,
18
+ } from './posts.types'
19
+
20
+ // Database row type for post with categories
21
+ interface DbPostWithCategories {
22
+ id: string
23
+ slug: string
24
+ title: string
25
+ excerpt: string | null
26
+ featuredImage: string | null
27
+ blocks: Block[]
28
+ status: string
29
+ createdAt: string
30
+ categories: PostCategory[]
31
+ }
32
+
33
+ // Database row type for metadata query
34
+ interface DbPostMetadata {
35
+ title: string
36
+ excerpt: string | null
37
+ seoTitle: string | null
38
+ seoDescription: string | null
39
+ ogImage: string | null
40
+ featuredImage: string | null
41
+ }
42
+
43
+ export class PostsService {
44
+ // ============================================
45
+ // PUBLIC METHODS (sin RLS)
46
+ // ============================================
47
+
48
+ /**
49
+ * Get a published post by slug with categories
50
+ *
51
+ * Fetches the full post data including blocks and taxonomy relations.
52
+ * Only returns published posts.
53
+ *
54
+ * @param slug - Post slug
55
+ * @returns Post data or null if not found/not published
56
+ *
57
+ * @example
58
+ * const post = await PostsService.getPublishedBySlug('my-post-slug')
59
+ * if (!post) notFound()
60
+ */
61
+ static async getPublishedBySlug(slug: string): Promise<PostPublic | null> {
62
+ try {
63
+ if (!slug || slug.trim() === '') {
64
+ throw new Error('Post slug is required')
65
+ }
66
+
67
+ const post = await queryOne<DbPostWithCategories>(
68
+ `
69
+ SELECT
70
+ p.id,
71
+ p.slug,
72
+ p.title,
73
+ p.excerpt,
74
+ p."featuredImage",
75
+ p.blocks,
76
+ p.status,
77
+ p."createdAt",
78
+ COALESCE(
79
+ json_agg(
80
+ json_build_object(
81
+ 'id', t.id,
82
+ 'name', t.name,
83
+ 'slug', t.slug,
84
+ 'color', t.color
85
+ )
86
+ ) FILTER (WHERE t.id IS NOT NULL),
87
+ '[]'::json
88
+ ) as categories
89
+ FROM posts p
90
+ LEFT JOIN entity_taxonomy_relations etr ON p.id::text = etr."entityId" AND etr."entityType" = 'posts'
91
+ LEFT JOIN taxonomies t ON etr."taxonomyId" = t.id AND t."isActive" = true AND t."deletedAt" IS NULL
92
+ WHERE p.slug = $1 AND p.status = 'published'
93
+ GROUP BY p.id, p.slug, p.title, p.excerpt, p."featuredImage", p.blocks, p.status, p."createdAt"
94
+ `,
95
+ [slug]
96
+ )
97
+
98
+ if (!post) {
99
+ return null
100
+ }
101
+
102
+ return {
103
+ id: post.id,
104
+ slug: post.slug,
105
+ title: post.title,
106
+ excerpt: post.excerpt ?? undefined,
107
+ featuredImage: post.featuredImage ?? undefined,
108
+ blocks: post.blocks,
109
+ createdAt: post.createdAt,
110
+ categories: post.categories,
111
+ }
112
+ } catch (error) {
113
+ console.error('PostsService.getPublishedBySlug error:', error)
114
+ throw new Error(
115
+ error instanceof Error ? error.message : 'Failed to fetch post'
116
+ )
117
+ }
118
+ }
119
+
120
+ /**
121
+ * Get post metadata for SEO/head tags
122
+ *
123
+ * Lightweight query that only fetches SEO-related fields.
124
+ * Used in generateMetadata for better performance.
125
+ *
126
+ * @param slug - Post slug
127
+ * @returns Metadata or null if not found/not published
128
+ *
129
+ * @example
130
+ * const metadata = await PostsService.getPublishedMetadata('my-post')
131
+ * return { title: metadata?.seoTitle || metadata?.title }
132
+ */
133
+ static async getPublishedMetadata(slug: string): Promise<PostMetadata | null> {
134
+ try {
135
+ if (!slug || slug.trim() === '') {
136
+ throw new Error('Post slug is required')
137
+ }
138
+
139
+ const result = await query<DbPostMetadata>(
140
+ `
141
+ SELECT
142
+ title,
143
+ excerpt,
144
+ "seoTitle",
145
+ "seoDescription",
146
+ "ogImage",
147
+ "featuredImage"
148
+ FROM posts
149
+ WHERE slug = $1 AND status = 'published'
150
+ `,
151
+ [slug]
152
+ )
153
+
154
+ if (result.rows.length === 0) {
155
+ return null
156
+ }
157
+
158
+ const post = result.rows[0]
159
+
160
+ return {
161
+ title: post.title,
162
+ excerpt: post.excerpt ?? undefined,
163
+ seoTitle: post.seoTitle ?? undefined,
164
+ seoDescription: post.seoDescription ?? undefined,
165
+ ogImage: post.ogImage ?? undefined,
166
+ featuredImage: post.featuredImage ?? undefined,
167
+ }
168
+ } catch (error) {
169
+ console.error('PostsService.getPublishedMetadata error:', error)
170
+ throw new Error(
171
+ error instanceof Error ? error.message : 'Failed to fetch post metadata'
172
+ )
173
+ }
174
+ }
175
+
176
+ /**
177
+ * List published posts with pagination and filtering
178
+ *
179
+ * Used for archive pages like /blog.
180
+ *
181
+ * @param options - List options (limit, offset, categorySlug, orderBy, orderDir)
182
+ * @returns Object with posts array and total count
183
+ *
184
+ * @example
185
+ * const { posts, total } = await PostsService.listPublished({
186
+ * limit: 10,
187
+ * offset: 0,
188
+ * categorySlug: 'news'
189
+ * })
190
+ */
191
+ static async listPublished(
192
+ options: PostListOptions = {}
193
+ ): Promise<PostListResult> {
194
+ try {
195
+ const {
196
+ limit = 10,
197
+ offset = 0,
198
+ categorySlug,
199
+ orderBy = 'createdAt',
200
+ orderDir = 'desc',
201
+ } = options
202
+
203
+ // Build WHERE clause
204
+ const conditions = ['p.status = $1']
205
+ const params: unknown[] = ['published']
206
+ let paramIndex = 2
207
+
208
+ // Category filter with subquery
209
+ if (categorySlug) {
210
+ conditions.push(`
211
+ EXISTS (
212
+ SELECT 1 FROM entity_taxonomy_relations etr
213
+ JOIN taxonomies t ON etr."taxonomyId" = t.id
214
+ WHERE etr."entityId" = p.id::text
215
+ AND etr."entityType" = 'posts'
216
+ AND t.slug = $${paramIndex}
217
+ AND t."isActive" = true
218
+ AND t."deletedAt" IS NULL
219
+ )
220
+ `)
221
+ params.push(categorySlug)
222
+ paramIndex++
223
+ }
224
+
225
+ const whereClause = conditions.join(' AND ')
226
+
227
+ // Validate orderBy to prevent SQL injection
228
+ const validOrderBy = ['createdAt', 'title'].includes(orderBy) ? orderBy : 'createdAt'
229
+ const validOrderDir = orderDir === 'asc' ? 'ASC' : 'DESC'
230
+ const orderColumn = validOrderBy === 'createdAt' ? '"createdAt"' : 'title'
231
+
232
+ // Get total count
233
+ const countResult = await query<{ count: string }>(
234
+ `SELECT COUNT(*)::text as count FROM posts p WHERE ${whereClause}`,
235
+ params
236
+ )
237
+ const total = parseInt(countResult.rows[0]?.count || '0', 10)
238
+
239
+ // Get posts with categories
240
+ params.push(limit, offset)
241
+ const postsResult = await query<DbPostWithCategories>(
242
+ `
243
+ SELECT
244
+ p.id,
245
+ p.slug,
246
+ p.title,
247
+ p.excerpt,
248
+ p."featuredImage",
249
+ p.blocks,
250
+ p.status,
251
+ p."createdAt",
252
+ COALESCE(
253
+ json_agg(
254
+ json_build_object(
255
+ 'id', t.id,
256
+ 'name', t.name,
257
+ 'slug', t.slug,
258
+ 'color', t.color
259
+ )
260
+ ) FILTER (WHERE t.id IS NOT NULL),
261
+ '[]'::json
262
+ ) as categories
263
+ FROM posts p
264
+ LEFT JOIN entity_taxonomy_relations etr ON p.id::text = etr."entityId" AND etr."entityType" = 'posts'
265
+ LEFT JOIN taxonomies t ON etr."taxonomyId" = t.id AND t."isActive" = true AND t."deletedAt" IS NULL
266
+ WHERE ${whereClause}
267
+ GROUP BY p.id, p.slug, p.title, p.excerpt, p."featuredImage", p.blocks, p.status, p."createdAt"
268
+ ORDER BY p.${orderColumn} ${validOrderDir}
269
+ LIMIT $${paramIndex} OFFSET $${paramIndex + 1}
270
+ `,
271
+ params
272
+ )
273
+
274
+ const posts: PostPublic[] = postsResult.rows.map((post) => ({
275
+ id: post.id,
276
+ slug: post.slug,
277
+ title: post.title,
278
+ excerpt: post.excerpt ?? undefined,
279
+ featuredImage: post.featuredImage ?? undefined,
280
+ blocks: post.blocks,
281
+ createdAt: post.createdAt,
282
+ categories: post.categories,
283
+ }))
284
+
285
+ return { posts, total }
286
+ } catch (error) {
287
+ console.error('PostsService.listPublished error:', error)
288
+ throw new Error(
289
+ error instanceof Error ? error.message : 'Failed to list posts'
290
+ )
291
+ }
292
+ }
293
+
294
+ // ============================================
295
+ // AUTHENTICATED METHODS (con RLS)
296
+ // ============================================
297
+
298
+ /**
299
+ * Get a post by ID (authenticated)
300
+ *
301
+ * For dashboard/admin views. Respects RLS policies.
302
+ *
303
+ * @param id - Post ID
304
+ * @param userId - Current user ID for RLS
305
+ * @returns Post data or null if not found/not authorized
306
+ *
307
+ * @example
308
+ * const post = await PostsService.getById('post-uuid', currentUserId)
309
+ */
310
+ static async getById(
311
+ id: string,
312
+ userId: string
313
+ ): Promise<PostPublic | null> {
314
+ try {
315
+ if (!id || id.trim() === '') {
316
+ throw new Error('Post ID is required')
317
+ }
318
+
319
+ if (!userId || userId.trim() === '') {
320
+ throw new Error('User ID is required for authentication')
321
+ }
322
+
323
+ const post = await queryOneWithRLS<DbPostWithCategories>(
324
+ `
325
+ SELECT
326
+ p.id,
327
+ p.slug,
328
+ p.title,
329
+ p.excerpt,
330
+ p."featuredImage",
331
+ p.blocks,
332
+ p.status,
333
+ p."createdAt",
334
+ COALESCE(
335
+ json_agg(
336
+ json_build_object(
337
+ 'id', t.id,
338
+ 'name', t.name,
339
+ 'slug', t.slug,
340
+ 'color', t.color
341
+ )
342
+ ) FILTER (WHERE t.id IS NOT NULL),
343
+ '[]'::json
344
+ ) as categories
345
+ FROM posts p
346
+ LEFT JOIN entity_taxonomy_relations etr ON p.id::text = etr."entityId" AND etr."entityType" = 'posts'
347
+ LEFT JOIN taxonomies t ON etr."taxonomyId" = t.id AND t."isActive" = true AND t."deletedAt" IS NULL
348
+ WHERE p.id = $1
349
+ GROUP BY p.id, p.slug, p.title, p.excerpt, p."featuredImage", p.blocks, p.status, p."createdAt"
350
+ `,
351
+ [id],
352
+ userId
353
+ )
354
+
355
+ if (!post) {
356
+ return null
357
+ }
358
+
359
+ return {
360
+ id: post.id,
361
+ slug: post.slug,
362
+ title: post.title,
363
+ excerpt: post.excerpt ?? undefined,
364
+ featuredImage: post.featuredImage ?? undefined,
365
+ blocks: post.blocks,
366
+ createdAt: post.createdAt,
367
+ categories: post.categories,
368
+ }
369
+ } catch (error) {
370
+ console.error('PostsService.getById error:', error)
371
+ throw new Error(
372
+ error instanceof Error ? error.message : 'Failed to fetch post'
373
+ )
374
+ }
375
+ }
376
+ }
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Posts Service Types
3
+ *
4
+ * Type definitions for the PostsService.
5
+ * Separates public types (for rendering) from internal types.
6
+ *
7
+ * @module PostsTypes
8
+ */
9
+
10
+ /**
11
+ * Block structure for page builder content
12
+ */
13
+ export interface Block {
14
+ id: string
15
+ blockSlug: string
16
+ props: Record<string, unknown>
17
+ }
18
+
19
+ /**
20
+ * Category attached to a post (from taxonomy relations)
21
+ */
22
+ export interface PostCategory {
23
+ id: string
24
+ name: string
25
+ slug: string
26
+ color?: string
27
+ }
28
+
29
+ /**
30
+ * Post data for public rendering
31
+ * Includes blocks and categories for full page display
32
+ */
33
+ export interface PostPublic {
34
+ id: string
35
+ slug: string
36
+ title: string
37
+ excerpt?: string
38
+ featuredImage?: string
39
+ blocks: Block[]
40
+ createdAt: string
41
+ categories?: PostCategory[]
42
+ }
43
+
44
+ /**
45
+ * Lightweight post metadata for SEO/head tags
46
+ * Does not include blocks or categories
47
+ */
48
+ export interface PostMetadata {
49
+ title: string
50
+ excerpt?: string
51
+ seoTitle?: string
52
+ seoDescription?: string
53
+ ogImage?: string
54
+ featuredImage?: string
55
+ }
56
+
57
+ /**
58
+ * Options for listing published posts
59
+ */
60
+ export interface PostListOptions {
61
+ limit?: number
62
+ offset?: number
63
+ categorySlug?: string
64
+ orderBy?: 'createdAt' | 'title'
65
+ orderDir?: 'asc' | 'desc'
66
+ }
67
+
68
+ /**
69
+ * Result of listing posts with pagination
70
+ */
71
+ export interface PostListResult {
72
+ posts: PostPublic[]
73
+ total: number
74
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "entity": {
3
+ "singular": "Page",
4
+ "plural": "Pages"
5
+ },
6
+ "fields": {
7
+ "title": {
8
+ "label": "Title",
9
+ "placeholder": "Enter page title...",
10
+ "description": "Page title displayed in browser and navigation"
11
+ },
12
+ "slug": {
13
+ "label": "Slug",
14
+ "placeholder": "page-slug",
15
+ "description": "URL-friendly identifier (e.g., 'about' for /about)"
16
+ },
17
+ "status": {
18
+ "label": "Status",
19
+ "description": "Publication status",
20
+ "options": {
21
+ "draft": "Draft",
22
+ "published": "Published",
23
+ "scheduled": "Scheduled",
24
+ "archived": "Archived"
25
+ }
26
+ }
27
+ },
28
+ "actions": {
29
+ "create": "Create Page",
30
+ "edit": "Edit Page",
31
+ "delete": "Delete Page",
32
+ "publish": "Publish",
33
+ "unpublish": "Unpublish"
34
+ },
35
+ "messages": {
36
+ "created": "Page created successfully",
37
+ "updated": "Page updated successfully",
38
+ "deleted": "Page deleted successfully",
39
+ "published": "Page published successfully"
40
+ }
41
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "entity": {
3
+ "singular": "Pagina",
4
+ "plural": "Paginas"
5
+ },
6
+ "fields": {
7
+ "title": {
8
+ "label": "Titulo",
9
+ "placeholder": "Ingresa el titulo de la pagina...",
10
+ "description": "Titulo de la pagina mostrado en el navegador y navegacion"
11
+ },
12
+ "slug": {
13
+ "label": "Slug",
14
+ "placeholder": "slug-pagina",
15
+ "description": "Identificador amigable para URL (ej: 'acerca' para /acerca)"
16
+ },
17
+ "status": {
18
+ "label": "Estado",
19
+ "description": "Estado de publicacion",
20
+ "options": {
21
+ "draft": "Borrador",
22
+ "published": "Publicado",
23
+ "scheduled": "Programado",
24
+ "archived": "Archivado"
25
+ }
26
+ }
27
+ },
28
+ "actions": {
29
+ "create": "Crear Pagina",
30
+ "edit": "Editar Pagina",
31
+ "delete": "Eliminar Pagina",
32
+ "publish": "Publicar",
33
+ "unpublish": "Despublicar"
34
+ },
35
+ "messages": {
36
+ "created": "Pagina creada exitosamente",
37
+ "updated": "Pagina actualizada exitosamente",
38
+ "deleted": "Pagina eliminada exitosamente",
39
+ "published": "Pagina publicada exitosamente"
40
+ }
41
+ }
@@ -0,0 +1,112 @@
1
+ -- Migration: 008_pages_table.sql
2
+ -- Description: Create pages table for dynamic page builder system with blocks
3
+ -- Date: 2025-01-21
4
+ -- Updated: 2025-12-17 (Add userId, teamId system fields + team isolation RLS)
5
+
6
+ -- ============================================
7
+ -- TABLE: pages
8
+ -- ============================================
9
+ DROP TABLE IF EXISTS public.pages CASCADE;
10
+
11
+ CREATE TABLE IF NOT EXISTS public.pages (
12
+ id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
13
+
14
+ -- Relational Fields (at the beginning)
15
+ "userId" TEXT NOT NULL REFERENCES public."users"(id) ON DELETE CASCADE,
16
+ "teamId" TEXT NOT NULL REFERENCES public."teams"(id) ON DELETE CASCADE,
17
+
18
+ slug VARCHAR(255) NOT NULL,
19
+ title VARCHAR(255) NOT NULL,
20
+ blocks JSONB NOT NULL DEFAULT '[]'::JSONB,
21
+ locale VARCHAR(10) NOT NULL DEFAULT 'en',
22
+
23
+ -- SEO fields
24
+ "seoTitle" VARCHAR(255),
25
+ "seoDescription" TEXT,
26
+ "seoKeywords" TEXT,
27
+ "ogImage" TEXT,
28
+ noindex BOOLEAN DEFAULT FALSE,
29
+ nofollow BOOLEAN DEFAULT FALSE,
30
+
31
+ -- Meta fields
32
+ published BOOLEAN DEFAULT FALSE,
33
+ "authorId" TEXT REFERENCES public."users"(id) ON DELETE SET NULL,
34
+ "createdAt" TIMESTAMPTZ NOT NULL DEFAULT now(),
35
+ "updatedAt" TIMESTAMPTZ NOT NULL DEFAULT now(),
36
+
37
+ -- Constraints
38
+ CONSTRAINT unique_slug_locale UNIQUE(slug, locale),
39
+ CONSTRAINT valid_slug CHECK (slug ~ '^[a-z0-9\-]+$'),
40
+ CONSTRAINT valid_locale CHECK (locale ~ '^[a-z]{2}(-[A-Z]{2})?$'),
41
+ CONSTRAINT slug_length CHECK (LENGTH(slug) >= 2 AND LENGTH(slug) <= 100),
42
+ CONSTRAINT title_not_empty CHECK (LENGTH(TRIM(title)) > 0)
43
+ );
44
+
45
+ -- ============================================
46
+ -- COMMENTS
47
+ -- ============================================
48
+ COMMENT ON TABLE public.pages IS 'Dynamic pages created via block editor system';
49
+ COMMENT ON COLUMN public.pages."userId" IS 'User who created this page';
50
+ COMMENT ON COLUMN public.pages."teamId" IS 'Team context for isolation';
51
+ COMMENT ON COLUMN public.pages.blocks IS 'Array of block instances with props (JSONB)';
52
+ COMMENT ON COLUMN public.pages.slug IS 'URL-friendly identifier (lowercase, hyphens only)';
53
+ COMMENT ON COLUMN public.pages.locale IS 'Language/locale code (e.g., en, es, en-US)';
54
+
55
+ -- ============================================
56
+ -- TRIGGER: updatedAt
57
+ -- ============================================
58
+ DROP TRIGGER IF EXISTS pages_set_updated_at ON public.pages;
59
+ CREATE TRIGGER pages_set_updated_at
60
+ BEFORE UPDATE ON public.pages
61
+ FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
62
+
63
+ -- ============================================
64
+ -- INDEXES
65
+ -- ============================================
66
+ CREATE INDEX IF NOT EXISTS idx_pages_user_id ON public.pages("userId");
67
+ CREATE INDEX IF NOT EXISTS idx_pages_team_id ON public.pages("teamId");
68
+ CREATE INDEX IF NOT EXISTS idx_pages_slug ON public.pages(slug);
69
+ CREATE INDEX IF NOT EXISTS idx_pages_locale ON public.pages(locale);
70
+ CREATE INDEX IF NOT EXISTS idx_pages_published ON public.pages(published);
71
+ CREATE INDEX IF NOT EXISTS idx_pages_author ON public.pages("authorId");
72
+ CREATE INDEX IF NOT EXISTS idx_pages_created ON public.pages("createdAt" DESC);
73
+ CREATE INDEX IF NOT EXISTS idx_pages_slug_locale ON public.pages(slug, locale);
74
+ CREATE INDEX IF NOT EXISTS idx_pages_published_locale ON public.pages(published, locale) WHERE published = TRUE;
75
+ CREATE INDEX IF NOT EXISTS idx_pages_blocks_gin ON public.pages USING GIN (blocks);
76
+ CREATE INDEX IF NOT EXISTS idx_pages_team_created ON public.pages("teamId", "createdAt" DESC);
77
+
78
+ -- ============================================
79
+ -- RLS
80
+ -- ============================================
81
+ ALTER TABLE public.pages ENABLE ROW LEVEL SECURITY;
82
+
83
+ DROP POLICY IF EXISTS "pages public can select" ON public.pages;
84
+ DROP POLICY IF EXISTS "pages auth can do all" ON public.pages;
85
+ DROP POLICY IF EXISTS "Pages team can do all" ON public.pages;
86
+
87
+ -- Public can read published pages
88
+ CREATE POLICY "pages public can select"
89
+ ON public.pages
90
+ FOR SELECT TO anon
91
+ USING (published = TRUE);
92
+
93
+ -- ============================
94
+ -- RLS: TEAM ISOLATION ONLY
95
+ -- ============================
96
+ -- IMPORTANT: RLS only verifies team membership
97
+ -- access.shared logic (user isolation) is handled at APP LEVEL
98
+ CREATE POLICY "Pages team can do all"
99
+ ON public.pages
100
+ FOR ALL TO authenticated
101
+ USING (
102
+ -- Superadmin bypass
103
+ public.is_superadmin()
104
+ OR
105
+ -- Team isolation only: user must be member of the team
106
+ "teamId" = ANY(public.get_user_team_ids())
107
+ )
108
+ WITH CHECK (
109
+ public.is_superadmin()
110
+ OR
111
+ "teamId" = ANY(public.get_user_team_ids())
112
+ );
@@ -0,0 +1,56 @@
1
+ -- Migration: 002_pages_metas.sql
2
+ -- Description: Create pages_metas table for flexible key-value metadata storage
3
+ -- Date: 2025-01-25
4
+
5
+ -- Create pages_metas table
6
+ CREATE TABLE IF NOT EXISTS "pages_metas" (
7
+ id TEXT PRIMARY KEY DEFAULT gen_random_uuid()::text,
8
+ "pageId" UUID NOT NULL REFERENCES public."pages"(id) ON DELETE CASCADE,
9
+ "metaKey" TEXT NOT NULL,
10
+ "metaValue" JSONB NOT NULL DEFAULT '{}'::jsonb,
11
+ "dataType" TEXT,
12
+ "isPublic" BOOLEAN NOT NULL DEFAULT FALSE,
13
+ "isSearchable" BOOLEAN NOT NULL DEFAULT FALSE,
14
+ "createdAt" TIMESTAMPTZ NOT NULL DEFAULT now(),
15
+ "updatedAt" TIMESTAMPTZ NOT NULL DEFAULT now(),
16
+ CONSTRAINT pages_metas_unique_key UNIQUE ("pageId", "metaKey")
17
+ );
18
+
19
+ -- Indices
20
+ CREATE INDEX IF NOT EXISTS idx_pages_metas_page_id ON "pages_metas"("pageId");
21
+ CREATE INDEX IF NOT EXISTS idx_pages_metas_key ON "pages_metas"("metaKey");
22
+ CREATE INDEX IF NOT EXISTS idx_pages_metas_composite ON "pages_metas"("pageId", "metaKey", "isPublic");
23
+ CREATE INDEX IF NOT EXISTS idx_pages_metas_searchable ON "pages_metas"("isSearchable") WHERE "isSearchable" = true;
24
+ CREATE INDEX IF NOT EXISTS idx_pages_metas_public ON "pages_metas"("isPublic") WHERE "isPublic" = true;
25
+ CREATE INDEX IF NOT EXISTS idx_pages_metas_value_gin ON "pages_metas" USING GIN ("metaValue");
26
+
27
+ -- Trigger for updatedAt
28
+ DROP TRIGGER IF EXISTS pages_metas_set_updated_at ON "pages_metas";
29
+ CREATE TRIGGER pages_metas_set_updated_at
30
+ BEFORE UPDATE ON "pages_metas"
31
+ FOR EACH ROW EXECUTE FUNCTION public.set_updated_at();
32
+
33
+ -- ============================================
34
+ -- RLS POLICIES
35
+ -- ============================================
36
+ ALTER TABLE "pages_metas" ENABLE ROW LEVEL SECURITY;
37
+
38
+ -- Public can read public metadata
39
+ DROP POLICY IF EXISTS "pages_metas_public_select" ON "pages_metas";
40
+ CREATE POLICY "pages_metas_public_select"
41
+ ON "pages_metas" FOR SELECT TO anon
42
+ USING ("isPublic" = TRUE);
43
+
44
+ -- Authenticated users can manage all metadata
45
+ DROP POLICY IF EXISTS "pages_metas_auth_all" ON "pages_metas";
46
+ CREATE POLICY "pages_metas_auth_all"
47
+ ON "pages_metas" FOR ALL TO authenticated
48
+ USING (true)
49
+ WITH CHECK (true);
50
+
51
+ -- Comments
52
+ COMMENT ON TABLE "pages_metas" IS 'Flexible key-value metadata storage for pages';
53
+ COMMENT ON COLUMN "pages_metas"."pageId" IS 'Reference to the parent page';
54
+ COMMENT ON COLUMN "pages_metas"."metaKey" IS 'Unique key identifier for the metadata';
55
+ COMMENT ON COLUMN "pages_metas"."metaValue" IS 'JSONB value for flexible data storage';
56
+ COMMENT ON COLUMN "pages_metas"."isPublic" IS 'If true, this metadata can be read by anyone';