@digilogiclabs/create-saas-app 2.0.0 → 2.2.0

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 (348) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +975 -891
  3. package/dist/.tsbuildinfo +1 -1
  4. package/dist/generators/template-generator.d.ts +11 -0
  5. package/dist/generators/template-generator.d.ts.map +1 -1
  6. package/dist/generators/template-generator.js +389 -18
  7. package/dist/generators/template-generator.js.map +1 -1
  8. package/dist/index.js +1837 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/templates/infrastructure/kubernetes/base/template/README.md +253 -0
  11. package/dist/templates/infrastructure/kubernetes/base/template/configmap.yaml +12 -0
  12. package/dist/templates/infrastructure/kubernetes/base/template/deployment.yaml +123 -0
  13. package/dist/templates/infrastructure/kubernetes/base/template/hpa.yaml +45 -0
  14. package/dist/templates/infrastructure/kubernetes/base/template/ingress.yaml +31 -0
  15. package/dist/templates/infrastructure/kubernetes/base/template/kustomization.yaml +25 -0
  16. package/dist/templates/infrastructure/kubernetes/base/template/namespace.yaml +8 -0
  17. package/dist/templates/infrastructure/kubernetes/base/template/networkpolicy.yaml +48 -0
  18. package/dist/templates/infrastructure/kubernetes/base/template/pdb.yaml +14 -0
  19. package/dist/templates/infrastructure/kubernetes/base/template/secret.yaml +17 -0
  20. package/dist/templates/infrastructure/kubernetes/base/template/service.yaml +19 -0
  21. package/dist/templates/infrastructure/kubernetes/base/template/serviceaccount.yaml +9 -0
  22. package/dist/templates/infrastructure/kubernetes/production/template/kustomization.yaml +92 -0
  23. package/dist/templates/infrastructure/terraform/aws/template/README.md +156 -0
  24. package/dist/templates/infrastructure/terraform/aws/template/main.tf +343 -0
  25. package/dist/templates/infrastructure/terraform/aws/template/outputs.tf +66 -0
  26. package/dist/templates/infrastructure/terraform/aws/template/terraform.tfvars.example +28 -0
  27. package/dist/templates/infrastructure/terraform/aws/template/variables.tf +110 -0
  28. package/dist/templates/infrastructure/terraform/gcp/template/README.md +165 -0
  29. package/dist/templates/infrastructure/terraform/gcp/template/main.tf +397 -0
  30. package/dist/templates/infrastructure/terraform/gcp/template/outputs.tf +51 -0
  31. package/dist/templates/infrastructure/terraform/gcp/template/terraform.tfvars.example +29 -0
  32. package/dist/templates/infrastructure/terraform/gcp/template/variables.tf +115 -0
  33. package/dist/templates/shared/admin/web/app/admin/layout.tsx +34 -0
  34. package/dist/templates/shared/admin/web/components/admin-nav.tsx +48 -0
  35. package/dist/templates/shared/audit/web/lib/audit.ts +24 -0
  36. package/dist/templates/shared/auth/keycloak/web/app/api/auth/federated-logout/route.ts +173 -0
  37. package/dist/templates/shared/auth/keycloak/web/auth.config.ts +84 -0
  38. package/dist/templates/shared/auth/keycloak/web/auth.ts +26 -0
  39. package/dist/templates/shared/beta/web/app/api/beta-settings/route.ts +25 -0
  40. package/dist/templates/shared/beta/web/app/api/validate-beta-code/route.ts +67 -0
  41. package/dist/templates/shared/beta/web/lib/beta/settings.ts +31 -0
  42. package/dist/templates/shared/cache/web/lib/cache.ts +44 -0
  43. package/dist/templates/shared/config/web/lib/config.ts +112 -0
  44. package/dist/templates/shared/config/web/next.config.mjs +62 -0
  45. package/dist/templates/shared/contact/web/app/api/contact/route.ts +113 -0
  46. package/dist/templates/shared/contact/web/app/contact/page.tsx +195 -0
  47. package/dist/templates/shared/cookie-consent/web/components/cookie-consent.tsx +54 -0
  48. package/dist/templates/shared/database/postgresql/web/drizzle.config.ts +16 -0
  49. package/dist/templates/shared/database/postgresql/web/lib/db/drizzle.ts +39 -0
  50. package/dist/templates/shared/database/postgresql/web/lib/db/schema.ts +33 -0
  51. package/dist/templates/shared/database/supabase/web/lib/supabase/client.ts +12 -0
  52. package/dist/templates/shared/database/supabase/web/lib/supabase/server.ts +31 -0
  53. package/dist/templates/shared/database/supabase/web/lib/supabase/service.ts +15 -0
  54. package/dist/templates/shared/email/web/lib/email/branding.ts +18 -0
  55. package/dist/templates/shared/email/web/lib/email/client.ts +96 -0
  56. package/dist/templates/shared/error-pages/web/app/error.tsx +70 -0
  57. package/dist/templates/shared/error-pages/web/app/global-error.tsx +102 -0
  58. package/dist/templates/shared/error-pages/web/app/not-found.tsx +39 -0
  59. package/dist/templates/shared/health/web/app/api/health/route.ts +68 -0
  60. package/dist/templates/shared/legal/web/app/(legal)/privacy/page.tsx +205 -0
  61. package/dist/templates/shared/legal/web/app/(legal)/terms/page.tsx +154 -0
  62. package/dist/templates/shared/legal/web/lib/legal-config.ts +50 -0
  63. package/dist/templates/shared/loading/web/app/loading.tsx +5 -0
  64. package/dist/templates/shared/loading/web/components/skeleton.tsx +95 -0
  65. package/dist/templates/shared/middleware/web/middleware.ts +68 -0
  66. package/dist/templates/shared/observability/web/lib/observability.ts +135 -0
  67. package/dist/templates/shared/payments/web/app/api/webhooks/stripe/route.ts +109 -0
  68. package/dist/templates/shared/platform/web/lib/platform.ts +37 -0
  69. package/dist/templates/shared/redis/web/lib/rate-limit-store.ts +18 -0
  70. package/dist/templates/shared/redis/web/lib/redis.ts +48 -0
  71. package/dist/templates/shared/security/web/lib/api-security.ts +318 -0
  72. package/dist/templates/shared/seo/web/app/api/og/route.tsx +97 -0
  73. package/dist/templates/shared/seo/web/app/robots.ts +53 -0
  74. package/dist/templates/shared/seo/web/app/sitemap.ts +53 -0
  75. package/dist/templates/shared/utils/web/lib/api-response.ts +71 -0
  76. package/dist/templates/shared/utils/web/lib/utils.ts +85 -0
  77. package/dist/templates/web/ai-platform/template/.env.example +16 -0
  78. package/dist/templates/web/ai-platform/template/README.md +84 -0
  79. package/dist/templates/web/ai-platform/template/middleware.ts +55 -0
  80. package/dist/templates/web/ai-platform/template/next.config.js +14 -0
  81. package/dist/templates/web/ai-platform/template/package.json +55 -0
  82. package/dist/templates/web/ai-platform/template/src/app/api/chat/route.ts +54 -0
  83. package/dist/templates/web/ai-platform/template/src/app/chat/page.tsx +235 -0
  84. package/dist/templates/web/ai-platform/template/src/app/dashboard/page.tsx +142 -0
  85. package/dist/templates/web/ai-platform/template/src/app/globals.css +34 -0
  86. package/dist/templates/web/ai-platform/template/src/app/layout.tsx +27 -0
  87. package/dist/templates/web/ai-platform/template/src/app/page.tsx +203 -0
  88. package/dist/templates/web/ai-platform/template/src/components/providers/app-providers.tsx +27 -0
  89. package/dist/templates/web/ai-platform/template/src/lib/auth-server.ts +33 -0
  90. package/dist/templates/web/ai-platform/template/src/lib/supabase/client.ts +8 -0
  91. package/dist/templates/web/ai-platform/template/src/lib/supabase/server.ts +27 -0
  92. package/dist/templates/web/ai-platform/template/src/lib/utils.ts +6 -0
  93. package/dist/templates/web/ai-platform/template/tsconfig.json +27 -0
  94. package/dist/templates/web/iot-dashboard/template/.env.example +12 -0
  95. package/dist/templates/web/iot-dashboard/template/README.md +101 -0
  96. package/dist/templates/web/iot-dashboard/template/middleware.ts +56 -0
  97. package/dist/templates/web/iot-dashboard/template/next.config.js +14 -0
  98. package/dist/templates/web/iot-dashboard/template/package.json +49 -0
  99. package/dist/templates/web/iot-dashboard/template/src/app/dashboard/page.tsx +229 -0
  100. package/dist/templates/web/iot-dashboard/template/src/app/globals.css +20 -0
  101. package/dist/templates/web/iot-dashboard/template/src/app/layout.tsx +27 -0
  102. package/dist/templates/web/iot-dashboard/template/src/app/page.tsx +191 -0
  103. package/dist/templates/web/iot-dashboard/template/src/components/providers/app-providers.tsx +24 -0
  104. package/dist/templates/web/iot-dashboard/template/src/lib/auth-server.ts +33 -0
  105. package/dist/templates/web/iot-dashboard/template/src/lib/supabase/client.ts +8 -0
  106. package/dist/templates/web/iot-dashboard/template/src/lib/supabase/server.ts +27 -0
  107. package/dist/templates/web/iot-dashboard/template/src/lib/utils.ts +25 -0
  108. package/dist/templates/web/iot-dashboard/template/tsconfig.json +27 -0
  109. package/dist/templates/web/marketplace/template/.env.example +12 -0
  110. package/dist/templates/web/marketplace/template/README.md +66 -0
  111. package/dist/templates/web/marketplace/template/middleware.ts +56 -0
  112. package/dist/templates/web/marketplace/template/next.config.js +14 -0
  113. package/dist/templates/web/marketplace/template/package.json +51 -0
  114. package/dist/templates/web/marketplace/template/src/app/cart/page.tsx +147 -0
  115. package/dist/templates/web/marketplace/template/src/app/dashboard/page.tsx +149 -0
  116. package/dist/templates/web/marketplace/template/src/app/globals.css +20 -0
  117. package/dist/templates/web/marketplace/template/src/app/layout.tsx +27 -0
  118. package/dist/templates/web/marketplace/template/src/app/page.tsx +167 -0
  119. package/dist/templates/web/marketplace/template/src/app/products/page.tsx +129 -0
  120. package/dist/templates/web/marketplace/template/src/components/providers/app-providers.tsx +27 -0
  121. package/dist/templates/web/marketplace/template/src/lib/auth-server.ts +33 -0
  122. package/dist/templates/web/marketplace/template/src/lib/supabase/client.ts +8 -0
  123. package/dist/templates/web/marketplace/template/src/lib/supabase/server.ts +27 -0
  124. package/dist/templates/web/marketplace/template/src/lib/utils.ts +19 -0
  125. package/dist/templates/web/marketplace/template/tsconfig.json +27 -0
  126. package/dist/templates/web/micro-saas/template/.env.example +10 -0
  127. package/dist/templates/web/micro-saas/template/README.md +63 -0
  128. package/dist/templates/web/micro-saas/template/middleware.ts +53 -0
  129. package/dist/templates/web/micro-saas/template/next.config.js +14 -0
  130. package/dist/templates/web/micro-saas/template/package.json +41 -0
  131. package/dist/templates/web/micro-saas/template/src/app/dashboard/page.tsx +117 -0
  132. package/dist/templates/web/micro-saas/template/src/app/globals.css +20 -0
  133. package/dist/templates/web/micro-saas/template/src/app/layout.tsx +27 -0
  134. package/dist/templates/web/micro-saas/template/src/app/login/page.tsx +87 -0
  135. package/dist/templates/web/micro-saas/template/src/app/page.tsx +137 -0
  136. package/dist/templates/web/micro-saas/template/src/app/signup/page.tsx +108 -0
  137. package/dist/templates/web/micro-saas/template/src/components/providers/app-providers.tsx +24 -0
  138. package/dist/templates/web/micro-saas/template/src/lib/auth-server.ts +33 -0
  139. package/dist/templates/web/micro-saas/template/src/lib/supabase/client.ts +8 -0
  140. package/dist/templates/web/micro-saas/template/src/lib/supabase/server.ts +29 -0
  141. package/dist/templates/web/micro-saas/template/src/lib/utils.ts +6 -0
  142. package/dist/templates/web/micro-saas/template/tsconfig.json +27 -0
  143. package/package.json +5 -4
  144. package/src/templates/infrastructure/kubernetes/base/template/README.md +253 -0
  145. package/src/templates/infrastructure/kubernetes/base/template/configmap.yaml +12 -0
  146. package/src/templates/infrastructure/kubernetes/base/template/deployment.yaml +123 -0
  147. package/src/templates/infrastructure/kubernetes/base/template/hpa.yaml +45 -0
  148. package/src/templates/infrastructure/kubernetes/base/template/ingress.yaml +31 -0
  149. package/src/templates/infrastructure/kubernetes/base/template/kustomization.yaml +25 -0
  150. package/src/templates/infrastructure/kubernetes/base/template/namespace.yaml +8 -0
  151. package/src/templates/infrastructure/kubernetes/base/template/networkpolicy.yaml +48 -0
  152. package/src/templates/infrastructure/kubernetes/base/template/pdb.yaml +14 -0
  153. package/src/templates/infrastructure/kubernetes/base/template/secret.yaml +17 -0
  154. package/src/templates/infrastructure/kubernetes/base/template/service.yaml +19 -0
  155. package/src/templates/infrastructure/kubernetes/base/template/serviceaccount.yaml +9 -0
  156. package/src/templates/infrastructure/kubernetes/production/template/kustomization.yaml +92 -0
  157. package/src/templates/infrastructure/terraform/aws/template/README.md +156 -0
  158. package/src/templates/infrastructure/terraform/aws/template/main.tf +343 -0
  159. package/src/templates/infrastructure/terraform/aws/template/outputs.tf +66 -0
  160. package/src/templates/infrastructure/terraform/aws/template/terraform.tfvars.example +28 -0
  161. package/src/templates/infrastructure/terraform/aws/template/variables.tf +110 -0
  162. package/src/templates/infrastructure/terraform/gcp/template/README.md +165 -0
  163. package/src/templates/infrastructure/terraform/gcp/template/main.tf +397 -0
  164. package/src/templates/infrastructure/terraform/gcp/template/outputs.tf +51 -0
  165. package/src/templates/infrastructure/terraform/gcp/template/terraform.tfvars.example +29 -0
  166. package/src/templates/infrastructure/terraform/gcp/template/variables.tf +115 -0
  167. package/src/templates/shared/admin/web/app/admin/layout.tsx +34 -0
  168. package/src/templates/shared/admin/web/components/admin-nav.tsx +48 -0
  169. package/src/templates/shared/audit/web/lib/audit.ts +24 -0
  170. package/src/templates/shared/auth/keycloak/web/app/api/auth/federated-logout/route.ts +173 -0
  171. package/src/templates/shared/auth/keycloak/web/auth.config.ts +84 -0
  172. package/src/templates/shared/auth/keycloak/web/auth.ts +26 -0
  173. package/src/templates/shared/beta/web/app/api/beta-settings/route.ts +25 -0
  174. package/src/templates/shared/beta/web/app/api/validate-beta-code/route.ts +67 -0
  175. package/src/templates/shared/beta/web/lib/beta/settings.ts +31 -0
  176. package/src/templates/shared/cache/web/lib/cache.ts +44 -0
  177. package/src/templates/shared/config/web/lib/config.ts +112 -0
  178. package/src/templates/shared/config/web/next.config.mjs +62 -0
  179. package/src/templates/shared/contact/web/app/api/contact/route.ts +113 -0
  180. package/src/templates/shared/contact/web/app/contact/page.tsx +195 -0
  181. package/src/templates/shared/cookie-consent/web/components/cookie-consent.tsx +54 -0
  182. package/src/templates/shared/database/postgresql/web/drizzle.config.ts +16 -0
  183. package/src/templates/shared/database/postgresql/web/lib/db/drizzle.ts +39 -0
  184. package/src/templates/shared/database/postgresql/web/lib/db/schema.ts +33 -0
  185. package/src/templates/shared/database/supabase/web/lib/supabase/client.ts +12 -0
  186. package/src/templates/shared/database/supabase/web/lib/supabase/server.ts +31 -0
  187. package/src/templates/shared/database/supabase/web/lib/supabase/service.ts +15 -0
  188. package/src/templates/shared/email/web/lib/email/branding.ts +18 -0
  189. package/src/templates/shared/email/web/lib/email/client.ts +96 -0
  190. package/src/templates/shared/error-pages/web/app/error.tsx +70 -0
  191. package/src/templates/shared/error-pages/web/app/global-error.tsx +102 -0
  192. package/src/templates/shared/error-pages/web/app/not-found.tsx +39 -0
  193. package/src/templates/shared/health/web/app/api/health/route.ts +68 -0
  194. package/src/templates/shared/legal/web/app/(legal)/privacy/page.tsx +205 -0
  195. package/src/templates/shared/legal/web/app/(legal)/terms/page.tsx +154 -0
  196. package/src/templates/shared/legal/web/lib/legal-config.ts +50 -0
  197. package/src/templates/shared/loading/web/app/loading.tsx +5 -0
  198. package/src/templates/shared/loading/web/components/skeleton.tsx +95 -0
  199. package/src/templates/shared/middleware/web/middleware.ts +68 -0
  200. package/src/templates/shared/observability/web/lib/observability.ts +135 -0
  201. package/src/templates/shared/payments/web/app/api/webhooks/stripe/route.ts +109 -0
  202. package/src/templates/shared/platform/web/lib/platform.ts +37 -0
  203. package/src/templates/shared/redis/web/lib/rate-limit-store.ts +18 -0
  204. package/src/templates/shared/redis/web/lib/redis.ts +48 -0
  205. package/src/templates/shared/security/web/lib/api-security.ts +318 -0
  206. package/src/templates/shared/seo/web/app/api/og/route.tsx +97 -0
  207. package/src/templates/shared/seo/web/app/robots.ts +53 -0
  208. package/src/templates/shared/seo/web/app/sitemap.ts +53 -0
  209. package/src/templates/shared/utils/web/lib/api-response.ts +71 -0
  210. package/src/templates/shared/utils/web/lib/utils.ts +85 -0
  211. package/src/templates/web/ai-platform/template/.env.example +16 -0
  212. package/src/templates/web/ai-platform/template/README.md +84 -0
  213. package/src/templates/web/ai-platform/template/middleware.ts +55 -0
  214. package/src/templates/web/ai-platform/template/next.config.js +14 -0
  215. package/src/templates/web/ai-platform/template/package.json +55 -0
  216. package/src/templates/web/ai-platform/template/src/app/api/chat/route.ts +54 -0
  217. package/src/templates/web/ai-platform/template/src/app/chat/page.tsx +235 -0
  218. package/src/templates/web/ai-platform/template/src/app/dashboard/page.tsx +142 -0
  219. package/src/templates/web/ai-platform/template/src/app/globals.css +34 -0
  220. package/src/templates/web/ai-platform/template/src/app/layout.tsx +27 -0
  221. package/src/templates/web/ai-platform/template/src/app/page.tsx +203 -0
  222. package/src/templates/web/ai-platform/template/src/components/providers/app-providers.tsx +27 -0
  223. package/src/templates/web/ai-platform/template/src/lib/auth-server.ts +33 -0
  224. package/src/templates/web/ai-platform/template/src/lib/supabase/client.ts +8 -0
  225. package/src/templates/web/ai-platform/template/src/lib/supabase/server.ts +27 -0
  226. package/src/templates/web/ai-platform/template/src/lib/utils.ts +6 -0
  227. package/src/templates/web/ai-platform/template/tsconfig.json +27 -0
  228. package/src/templates/web/iot-dashboard/template/.env.example +12 -0
  229. package/src/templates/web/iot-dashboard/template/README.md +101 -0
  230. package/src/templates/web/iot-dashboard/template/middleware.ts +56 -0
  231. package/src/templates/web/iot-dashboard/template/next.config.js +14 -0
  232. package/src/templates/web/iot-dashboard/template/package.json +49 -0
  233. package/src/templates/web/iot-dashboard/template/src/app/dashboard/page.tsx +229 -0
  234. package/src/templates/web/iot-dashboard/template/src/app/globals.css +20 -0
  235. package/src/templates/web/iot-dashboard/template/src/app/layout.tsx +27 -0
  236. package/src/templates/web/iot-dashboard/template/src/app/page.tsx +191 -0
  237. package/src/templates/web/iot-dashboard/template/src/components/providers/app-providers.tsx +24 -0
  238. package/src/templates/web/iot-dashboard/template/src/lib/auth-server.ts +33 -0
  239. package/src/templates/web/iot-dashboard/template/src/lib/supabase/client.ts +8 -0
  240. package/src/templates/web/iot-dashboard/template/src/lib/supabase/server.ts +27 -0
  241. package/src/templates/web/iot-dashboard/template/src/lib/utils.ts +25 -0
  242. package/src/templates/web/iot-dashboard/template/tsconfig.json +27 -0
  243. package/src/templates/web/marketplace/template/.env.example +12 -0
  244. package/src/templates/web/marketplace/template/README.md +66 -0
  245. package/src/templates/web/marketplace/template/middleware.ts +56 -0
  246. package/src/templates/web/marketplace/template/next.config.js +14 -0
  247. package/src/templates/web/marketplace/template/package.json +51 -0
  248. package/src/templates/web/marketplace/template/src/app/cart/page.tsx +147 -0
  249. package/src/templates/web/marketplace/template/src/app/dashboard/page.tsx +149 -0
  250. package/src/templates/web/marketplace/template/src/app/globals.css +20 -0
  251. package/src/templates/web/marketplace/template/src/app/layout.tsx +27 -0
  252. package/src/templates/web/marketplace/template/src/app/page.tsx +167 -0
  253. package/src/templates/web/marketplace/template/src/app/products/page.tsx +129 -0
  254. package/src/templates/web/marketplace/template/src/components/providers/app-providers.tsx +27 -0
  255. package/src/templates/web/marketplace/template/src/lib/auth-server.ts +33 -0
  256. package/src/templates/web/marketplace/template/src/lib/supabase/client.ts +8 -0
  257. package/src/templates/web/marketplace/template/src/lib/supabase/server.ts +27 -0
  258. package/src/templates/web/marketplace/template/src/lib/utils.ts +19 -0
  259. package/src/templates/web/marketplace/template/tsconfig.json +27 -0
  260. package/src/templates/web/micro-saas/template/.env.example +10 -0
  261. package/src/templates/web/micro-saas/template/README.md +63 -0
  262. package/src/templates/web/micro-saas/template/middleware.ts +53 -0
  263. package/src/templates/web/micro-saas/template/next.config.js +14 -0
  264. package/src/templates/web/micro-saas/template/package.json +41 -0
  265. package/src/templates/web/micro-saas/template/src/app/dashboard/page.tsx +117 -0
  266. package/src/templates/web/micro-saas/template/src/app/globals.css +20 -0
  267. package/src/templates/web/micro-saas/template/src/app/layout.tsx +27 -0
  268. package/src/templates/web/micro-saas/template/src/app/login/page.tsx +87 -0
  269. package/src/templates/web/micro-saas/template/src/app/page.tsx +137 -0
  270. package/src/templates/web/micro-saas/template/src/app/signup/page.tsx +108 -0
  271. package/src/templates/web/micro-saas/template/src/components/providers/app-providers.tsx +24 -0
  272. package/src/templates/web/micro-saas/template/src/lib/auth-server.ts +33 -0
  273. package/src/templates/web/micro-saas/template/src/lib/supabase/client.ts +8 -0
  274. package/src/templates/web/micro-saas/template/src/lib/supabase/server.ts +29 -0
  275. package/src/templates/web/micro-saas/template/src/lib/utils.ts +6 -0
  276. package/src/templates/web/micro-saas/template/tsconfig.json +27 -0
  277. package/dist/cli/commands/add.d.ts +0 -6
  278. package/dist/cli/commands/add.d.ts.map +0 -1
  279. package/dist/cli/commands/add.js +0 -39
  280. package/dist/cli/commands/add.js.map +0 -1
  281. package/dist/cli/commands/create.d.ts +0 -45
  282. package/dist/cli/commands/create.d.ts.map +0 -1
  283. package/dist/cli/commands/create.js +0 -175
  284. package/dist/cli/commands/create.js.map +0 -1
  285. package/dist/cli/commands/index.d.ts +0 -4
  286. package/dist/cli/commands/index.d.ts.map +0 -1
  287. package/dist/cli/commands/index.js +0 -20
  288. package/dist/cli/commands/index.js.map +0 -1
  289. package/dist/cli/commands/update.d.ts +0 -6
  290. package/dist/cli/commands/update.d.ts.map +0 -1
  291. package/dist/cli/commands/update.js +0 -68
  292. package/dist/cli/commands/update.js.map +0 -1
  293. package/dist/cli/index.d.ts +0 -4
  294. package/dist/cli/index.d.ts.map +0 -1
  295. package/dist/cli/index.js +0 -61
  296. package/dist/cli/index.js.map +0 -1
  297. package/dist/cli/prompts/index.d.ts +0 -2
  298. package/dist/cli/prompts/index.d.ts.map +0 -1
  299. package/dist/cli/prompts/index.js +0 -18
  300. package/dist/cli/prompts/index.js.map +0 -1
  301. package/dist/cli/prompts/project-setup.d.ts +0 -5
  302. package/dist/cli/prompts/project-setup.d.ts.map +0 -1
  303. package/dist/cli/prompts/project-setup.js +0 -316
  304. package/dist/cli/prompts/project-setup.js.map +0 -1
  305. package/dist/cli/utils/git.d.ts +0 -9
  306. package/dist/cli/utils/git.d.ts.map +0 -1
  307. package/dist/cli/utils/git.js +0 -77
  308. package/dist/cli/utils/git.js.map +0 -1
  309. package/dist/cli/utils/index.d.ts +0 -5
  310. package/dist/cli/utils/index.d.ts.map +0 -1
  311. package/dist/cli/utils/index.js +0 -21
  312. package/dist/cli/utils/index.js.map +0 -1
  313. package/dist/cli/utils/logger.d.ts +0 -16
  314. package/dist/cli/utils/logger.d.ts.map +0 -1
  315. package/dist/cli/utils/logger.js +0 -55
  316. package/dist/cli/utils/logger.js.map +0 -1
  317. package/dist/cli/utils/package-manager.d.ts +0 -8
  318. package/dist/cli/utils/package-manager.d.ts.map +0 -1
  319. package/dist/cli/utils/package-manager.js +0 -92
  320. package/dist/cli/utils/package-manager.js.map +0 -1
  321. package/dist/cli/utils/spinner.d.ts +0 -7
  322. package/dist/cli/utils/spinner.d.ts.map +0 -1
  323. package/dist/cli/utils/spinner.js +0 -48
  324. package/dist/cli/utils/spinner.js.map +0 -1
  325. package/dist/cli/validators/dependencies.d.ts +0 -15
  326. package/dist/cli/validators/dependencies.d.ts.map +0 -1
  327. package/dist/cli/validators/dependencies.js +0 -108
  328. package/dist/cli/validators/dependencies.js.map +0 -1
  329. package/dist/cli/validators/index.d.ts +0 -3
  330. package/dist/cli/validators/index.d.ts.map +0 -1
  331. package/dist/cli/validators/index.js +0 -19
  332. package/dist/cli/validators/index.js.map +0 -1
  333. package/dist/cli/validators/project-name.d.ts +0 -5
  334. package/dist/cli/validators/project-name.d.ts.map +0 -1
  335. package/dist/cli/validators/project-name.js +0 -151
  336. package/dist/cli/validators/project-name.js.map +0 -1
  337. package/dist/generators/file-processor.d.ts +0 -28
  338. package/dist/generators/file-processor.d.ts.map +0 -1
  339. package/dist/generators/file-processor.js +0 -224
  340. package/dist/generators/file-processor.js.map +0 -1
  341. package/dist/generators/index.d.ts +0 -4
  342. package/dist/generators/index.d.ts.map +0 -1
  343. package/dist/generators/index.js +0 -20
  344. package/dist/generators/index.js.map +0 -1
  345. package/dist/generators/package-installer.d.ts +0 -29
  346. package/dist/generators/package-installer.d.ts.map +0 -1
  347. package/dist/generators/package-installer.js +0 -177
  348. package/dist/generators/package-installer.js.map +0 -1
@@ -0,0 +1,191 @@
1
+ 'use client'
2
+
3
+ import { Button, Card } from '@digilogiclabs/saas-factory-ui'
4
+ import { useAuth } from '@digilogiclabs/app-sdk'
5
+ import { Cpu, Activity, Signal, Bell, Settings, ArrowRight, User, LogOut, Wifi, ThermometerSun, Gauge, Shield } from 'lucide-react'
6
+ import Link from 'next/link'
7
+
8
+ const FEATURES = [
9
+ {
10
+ icon: Cpu,
11
+ title: 'Device Management',
12
+ description: 'Monitor and control all your IoT devices from one dashboard',
13
+ },
14
+ {
15
+ icon: Activity,
16
+ title: 'Real-time Telemetry',
17
+ description: 'Live data streams with historical analysis and trends',
18
+ },
19
+ {
20
+ icon: Bell,
21
+ title: 'Smart Alerts',
22
+ description: 'Configurable alerts and notifications for critical events',
23
+ },
24
+ {
25
+ icon: Shield,
26
+ title: 'Secure & Scalable',
27
+ description: 'Enterprise-grade security for your connected devices',
28
+ },
29
+ ]
30
+
31
+ const DEVICE_TYPES = [
32
+ { name: 'Temperature Sensors', count: 24, icon: ThermometerSun, status: 'online' },
33
+ { name: 'Pressure Gauges', count: 12, icon: Gauge, status: 'online' },
34
+ { name: 'Network Gateways', count: 8, icon: Wifi, status: 'online' },
35
+ { name: 'Motion Sensors', count: 18, icon: Signal, status: 'partial' },
36
+ ]
37
+
38
+ export default function Home() {
39
+ const { user, signOut, loading } = useAuth()
40
+
41
+ const projectName = "{{titleCaseName}}"
42
+
43
+ const handleSignOut = async () => {
44
+ try {
45
+ await signOut()
46
+ } catch (err) {
47
+ console.error('Sign out error:', err)
48
+ }
49
+ }
50
+
51
+ return (
52
+ <main className="min-h-screen bg-slate-50 dark:bg-slate-900">
53
+ {/* Header */}
54
+ <header className="bg-white dark:bg-slate-800 border-b border-slate-200 dark:border-slate-700 sticky top-0 z-50">
55
+ <div className="max-w-7xl mx-auto px-4 py-4">
56
+ <div className="flex items-center justify-between">
57
+ <Link href="/" className="flex items-center gap-2">
58
+ <div className="w-8 h-8 bg-emerald-600 rounded-lg flex items-center justify-center">
59
+ <Cpu className="w-5 h-5 text-white" />
60
+ </div>
61
+ <span className="text-2xl font-bold text-slate-900 dark:text-white">{projectName}</span>
62
+ </Link>
63
+
64
+ <nav className="hidden md:flex items-center gap-6">
65
+ <Link href="/devices" className="text-slate-600 dark:text-slate-300 hover:text-slate-900 dark:hover:text-white transition">
66
+ Devices
67
+ </Link>
68
+ <Link href="/analytics" className="text-slate-600 dark:text-slate-300 hover:text-slate-900 dark:hover:text-white transition">
69
+ Analytics
70
+ </Link>
71
+ <Link href="/alerts" className="text-slate-600 dark:text-slate-300 hover:text-slate-900 dark:hover:text-white transition">
72
+ Alerts
73
+ </Link>
74
+ </nav>
75
+
76
+ <div className="flex items-center gap-4">
77
+ {loading ? (
78
+ <div className="text-sm text-slate-600">Loading...</div>
79
+ ) : user ? (
80
+ <div className="flex items-center gap-2">
81
+ <Link href="/dashboard">
82
+ <Button variant="outline" size="sm">
83
+ <User className="w-4 h-4 mr-2" />
84
+ Dashboard
85
+ </Button>
86
+ </Link>
87
+ <Button variant="ghost" size="sm" onClick={handleSignOut}>
88
+ <LogOut className="w-4 h-4" />
89
+ </Button>
90
+ </div>
91
+ ) : (
92
+ <div className="flex gap-2">
93
+ <Link href="/login">
94
+ <Button variant="outline" size="sm">Sign In</Button>
95
+ </Link>
96
+ <Link href="/signup">
97
+ <Button size="sm" className="bg-emerald-600 hover:bg-emerald-700">Get Started</Button>
98
+ </Link>
99
+ </div>
100
+ )}
101
+ </div>
102
+ </div>
103
+ </div>
104
+ </header>
105
+
106
+ <div className="max-w-7xl mx-auto px-4 py-16">
107
+ {/* Hero */}
108
+ <div className="text-center mb-16">
109
+ <div className="inline-flex items-center px-4 py-2 rounded-full bg-emerald-100 dark:bg-emerald-900/30 text-emerald-700 dark:text-emerald-400 text-sm mb-6">
110
+ <Signal className="w-4 h-4 mr-2" />
111
+ IoT Management Platform
112
+ </div>
113
+ <h1 className="text-5xl font-bold text-slate-900 dark:text-white mb-6">
114
+ Monitor Your <span className="text-emerald-600">Connected Devices</span>
115
+ </h1>
116
+ <p className="text-xl text-slate-600 dark:text-slate-300 max-w-2xl mx-auto mb-8">
117
+ Real-time monitoring, analytics, and control for your IoT infrastructure.
118
+ Built for scale, designed for simplicity.
119
+ </p>
120
+ <div className="flex gap-4 justify-center">
121
+ <Link href="/dashboard">
122
+ <Button size="lg" className="bg-emerald-600 hover:bg-emerald-700">
123
+ <Activity className="w-5 h-5 mr-2" />
124
+ View Dashboard
125
+ </Button>
126
+ </Link>
127
+ <Link href="/devices">
128
+ <Button size="lg" variant="outline">
129
+ Manage Devices
130
+ </Button>
131
+ </Link>
132
+ </div>
133
+ </div>
134
+
135
+ {/* Device Overview */}
136
+ <div className="grid md:grid-cols-2 lg:grid-cols-4 gap-4 mb-16">
137
+ {DEVICE_TYPES.map((device) => (
138
+ <Card key={device.name} className="p-6">
139
+ <div className="flex items-center justify-between mb-3">
140
+ <div className="w-10 h-10 bg-emerald-100 dark:bg-emerald-900/30 rounded-lg flex items-center justify-center">
141
+ <device.icon className="w-5 h-5 text-emerald-600" />
142
+ </div>
143
+ <span className={`text-xs px-2 py-1 rounded-full ${
144
+ device.status === 'online'
145
+ ? 'bg-green-100 text-green-700 dark:bg-green-900/30 dark:text-green-400'
146
+ : 'bg-yellow-100 text-yellow-700 dark:bg-yellow-900/30 dark:text-yellow-400'
147
+ }`}>
148
+ {device.status === 'online' ? 'All Online' : 'Partial'}
149
+ </span>
150
+ </div>
151
+ <h3 className="font-semibold text-slate-900 dark:text-white">{device.name}</h3>
152
+ <p className="text-2xl font-bold text-emerald-600">{device.count}</p>
153
+ </Card>
154
+ ))}
155
+ </div>
156
+
157
+ {/* Features */}
158
+ <div className="mb-16">
159
+ <h2 className="text-3xl font-bold text-slate-900 dark:text-white text-center mb-12">
160
+ Everything You Need
161
+ </h2>
162
+ <div className="grid md:grid-cols-2 lg:grid-cols-4 gap-6">
163
+ {FEATURES.map((feature) => (
164
+ <Card key={feature.title} className="p-6 text-center">
165
+ <div className="w-12 h-12 bg-emerald-100 dark:bg-emerald-900/30 rounded-lg flex items-center justify-center mx-auto mb-4">
166
+ <feature.icon className="w-6 h-6 text-emerald-600" />
167
+ </div>
168
+ <h3 className="text-lg font-semibold text-slate-900 dark:text-white mb-2">{feature.title}</h3>
169
+ <p className="text-slate-600 dark:text-slate-400 text-sm">{feature.description}</p>
170
+ </Card>
171
+ ))}
172
+ </div>
173
+ </div>
174
+
175
+ {/* CTA */}
176
+ <Card className="p-12 bg-gradient-to-r from-emerald-600 to-teal-600 text-white text-center">
177
+ <h2 className="text-3xl font-bold mb-4">Ready to Connect?</h2>
178
+ <p className="text-white/80 mb-8 max-w-md mx-auto">
179
+ Start monitoring your IoT devices in minutes. Free tier available for up to 10 devices.
180
+ </p>
181
+ <Link href="/signup">
182
+ <Button size="lg" variant="secondary">
183
+ Get Started Free
184
+ <ArrowRight className="w-5 h-5 ml-2" />
185
+ </Button>
186
+ </Link>
187
+ </Card>
188
+ </div>
189
+ </main>
190
+ )
191
+ }
@@ -0,0 +1,24 @@
1
+ 'use client'
2
+
3
+ import { ThemeProvider } from 'next-themes'
4
+ import { DLLProvider } from '@digilogiclabs/app-sdk'
5
+
6
+ interface AppProvidersProps {
7
+ children: React.ReactNode
8
+ }
9
+
10
+ export function AppProviders({ children }: AppProvidersProps) {
11
+ return (
12
+ <ThemeProvider attribute="class" defaultTheme="system" enableSystem>
13
+ <DLLProvider
14
+ config={{
15
+ auth: {
16
+ provider: 'supabase',
17
+ },
18
+ }}
19
+ >
20
+ {children}
21
+ </DLLProvider>
22
+ </ThemeProvider>
23
+ )
24
+ }
@@ -0,0 +1,33 @@
1
+ import { redirect } from 'next/navigation'
2
+ import { createClient } from './supabase/server'
3
+
4
+ export interface AuthUser {
5
+ id: string
6
+ email: string | null
7
+ name?: string | null
8
+ }
9
+
10
+ export async function getUser(): Promise<AuthUser | null> {
11
+ const supabase = await createClient()
12
+ const { data: { user }, error } = await supabase.auth.getUser()
13
+
14
+ if (error || !user) {
15
+ return null
16
+ }
17
+
18
+ return {
19
+ id: user.id,
20
+ email: user.email ?? null,
21
+ name: user.user_metadata?.name ?? user.user_metadata?.full_name ?? null,
22
+ }
23
+ }
24
+
25
+ export async function requireAuth(): Promise<AuthUser> {
26
+ const user = await getUser()
27
+
28
+ if (!user) {
29
+ redirect('/login')
30
+ }
31
+
32
+ return user
33
+ }
@@ -0,0 +1,8 @@
1
+ import { createBrowserClient } from '@supabase/ssr'
2
+
3
+ export function createClient() {
4
+ return createBrowserClient(
5
+ process.env.NEXT_PUBLIC_SUPABASE_URL!,
6
+ process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
7
+ )
8
+ }
@@ -0,0 +1,27 @@
1
+ import { createServerClient } from '@supabase/ssr'
2
+ import { cookies } from 'next/headers'
3
+
4
+ export async function createClient() {
5
+ const cookieStore = await cookies()
6
+
7
+ return createServerClient(
8
+ process.env.NEXT_PUBLIC_SUPABASE_URL!,
9
+ process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
10
+ {
11
+ cookies: {
12
+ getAll() {
13
+ return cookieStore.getAll()
14
+ },
15
+ setAll(cookiesToSet) {
16
+ try {
17
+ cookiesToSet.forEach(({ name, value, options }) =>
18
+ cookieStore.set(name, value, options)
19
+ )
20
+ } catch {
21
+ // Server Component context
22
+ }
23
+ },
24
+ },
25
+ }
26
+ )
27
+ }
@@ -0,0 +1,25 @@
1
+ import { clsx, type ClassValue } from 'clsx'
2
+ import { twMerge } from 'tailwind-merge'
3
+
4
+ export function cn(...inputs: ClassValue[]) {
5
+ return twMerge(clsx(inputs))
6
+ }
7
+
8
+ export function formatTimestamp(date: Date | string) {
9
+ return new Intl.DateTimeFormat('en-US', {
10
+ dateStyle: 'medium',
11
+ timeStyle: 'short',
12
+ }).format(new Date(date))
13
+ }
14
+
15
+ export function formatRelativeTime(date: Date | string) {
16
+ const now = new Date()
17
+ const then = new Date(date)
18
+ const diffMs = now.getTime() - then.getTime()
19
+ const diffMins = Math.floor(diffMs / 60000)
20
+
21
+ if (diffMins < 1) return 'Just now'
22
+ if (diffMins < 60) return `${diffMins} min ago`
23
+ if (diffMins < 1440) return `${Math.floor(diffMins / 60)} hours ago`
24
+ return `${Math.floor(diffMins / 1440)} days ago`
25
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "lib": ["dom", "dom.iterable", "esnext"],
5
+ "allowJs": true,
6
+ "skipLibCheck": true,
7
+ "strict": true,
8
+ "noEmit": true,
9
+ "esModuleInterop": true,
10
+ "module": "esnext",
11
+ "moduleResolution": "bundler",
12
+ "resolveJsonModule": true,
13
+ "isolatedModules": true,
14
+ "jsx": "preserve",
15
+ "incremental": true,
16
+ "plugins": [
17
+ {
18
+ "name": "next"
19
+ }
20
+ ],
21
+ "paths": {
22
+ "@/*": ["./src/*"]
23
+ }
24
+ },
25
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
26
+ "exclude": ["node_modules"]
27
+ }
@@ -0,0 +1,12 @@
1
+ # Supabase Configuration
2
+ NEXT_PUBLIC_SUPABASE_URL=your-supabase-url
3
+ NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
4
+ SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
5
+
6
+ # Stripe Configuration
7
+ NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_xxx
8
+ STRIPE_SECRET_KEY=sk_test_xxx
9
+ STRIPE_WEBHOOK_SECRET=whsec_xxx
10
+
11
+ # Application
12
+ NEXT_PUBLIC_APP_URL=http://localhost:3000
@@ -0,0 +1,66 @@
1
+ # {{titleCaseName}}
2
+
3
+ {{description}} - A multi-vendor digital marketplace.
4
+
5
+ ## Features
6
+
7
+ - **Product Listings** - Browse and search products by category
8
+ - **Vendor Dashboard** - Sellers can manage products and view analytics
9
+ - **Shopping Cart** - Add products and checkout with Stripe
10
+ - **User Authentication** - Secure auth with Supabase
11
+ - **Responsive Design** - Mobile-first approach
12
+
13
+ ## Quick Start
14
+
15
+ 1. **Install dependencies:**
16
+ ```bash
17
+ npm install
18
+ ```
19
+
20
+ 2. **Set up environment variables:**
21
+ ```bash
22
+ cp .env.example .env.local
23
+ ```
24
+ Update with your Supabase and Stripe credentials.
25
+
26
+ 3. **Run the development server:**
27
+ ```bash
28
+ npm run dev
29
+ ```
30
+
31
+ 4. **Open [http://localhost:3000](http://localhost:3000)**
32
+
33
+ ## Tech Stack
34
+
35
+ - **Framework:** Next.js 15
36
+ - **Language:** TypeScript
37
+ - **Styling:** Tailwind CSS
38
+ - **Auth:** Supabase
39
+ - **Payments:** Stripe
40
+ - **UI Components:** @digilogiclabs/saas-factory-ui
41
+ - **State Management:** Zustand
42
+
43
+ ## Project Structure
44
+
45
+ ```
46
+ src/
47
+ ├── app/ # Next.js App Router pages
48
+ │ ├── dashboard/ # Seller dashboard
49
+ │ ├── products/ # Product listings
50
+ │ ├── cart/ # Shopping cart
51
+ │ └── vendors/ # Vendor pages
52
+ ├── components/ # React components
53
+ │ ├── marketplace/ # Marketplace-specific components
54
+ │ └── providers/ # Context providers
55
+ └── lib/ # Utilities and helpers
56
+ ```
57
+
58
+ ## Deployment
59
+
60
+ Deploy to Vercel with one click:
61
+
62
+ [![Deploy with Vercel](https://vercel.com/button)](https://vercel.com/new)
63
+
64
+ ## License
65
+
66
+ MIT - Built with DLL Platform
@@ -0,0 +1,56 @@
1
+ import { createServerClient } from '@supabase/ssr'
2
+ import { NextResponse, type NextRequest } from 'next/server'
3
+
4
+ export async function middleware(request: NextRequest) {
5
+ let supabaseResponse = NextResponse.next({
6
+ request,
7
+ })
8
+
9
+ const supabase = createServerClient(
10
+ process.env.NEXT_PUBLIC_SUPABASE_URL!,
11
+ process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
12
+ {
13
+ cookies: {
14
+ getAll() {
15
+ return request.cookies.getAll()
16
+ },
17
+ setAll(cookiesToSet) {
18
+ cookiesToSet.forEach(({ name, value }) =>
19
+ request.cookies.set(name, value)
20
+ )
21
+ supabaseResponse = NextResponse.next({
22
+ request,
23
+ })
24
+ cookiesToSet.forEach(({ name, value, options }) =>
25
+ supabaseResponse.cookies.set(name, value, options)
26
+ )
27
+ },
28
+ },
29
+ }
30
+ )
31
+
32
+ const {
33
+ data: { user },
34
+ } = await supabase.auth.getUser()
35
+
36
+ // Redirect to login if accessing protected route without auth
37
+ if (
38
+ !user &&
39
+ (request.nextUrl.pathname.startsWith('/dashboard') ||
40
+ request.nextUrl.pathname.startsWith('/products/new') ||
41
+ request.nextUrl.pathname.startsWith('/orders') ||
42
+ request.nextUrl.pathname.startsWith('/payouts'))
43
+ ) {
44
+ const url = request.nextUrl.clone()
45
+ url.pathname = '/login'
46
+ return NextResponse.redirect(url)
47
+ }
48
+
49
+ return supabaseResponse
50
+ }
51
+
52
+ export const config = {
53
+ matcher: [
54
+ '/((?!_next/static|_next/image|favicon.ico|.*\\.(?:svg|png|jpg|jpeg|gif|webp)$).*)',
55
+ ],
56
+ }
@@ -0,0 +1,14 @@
1
+ /** @type {import('next').NextConfig} */
2
+ const nextConfig = {
3
+ reactStrictMode: true,
4
+ images: {
5
+ remotePatterns: [
6
+ {
7
+ protocol: 'https',
8
+ hostname: '**.supabase.co',
9
+ },
10
+ ],
11
+ },
12
+ }
13
+
14
+ module.exports = nextConfig
@@ -0,0 +1,51 @@
1
+ {
2
+ "name": "{{packageName}}",
3
+ "version": "0.1.0",
4
+ "description": "{{description}} - Multi-vendor Marketplace",
5
+ "private": true,
6
+ "scripts": {
7
+ "dev": "next dev",
8
+ "build": "next build",
9
+ "start": "next start",
10
+ "lint": "next lint",
11
+ "type-check": "tsc --noEmit",
12
+ "test": "vitest",
13
+ "test:run": "vitest run"
14
+ },
15
+ "dependencies": {
16
+ "next": "^15.0.0",
17
+ "react": "^19.0.0",
18
+ "react-dom": "^19.0.0",
19
+ "@digilogiclabs/platform-core": "^1.1.0",
20
+ "@digilogiclabs/app-sdk": "^1.0.0",
21
+ "@digilogiclabs/saas-factory-auth": "^1.0.7",
22
+ "@digilogiclabs/saas-factory-payments": "^1.2.9",
23
+ "@digilogiclabs/saas-factory-ui": "^1.0.1",
24
+ "stripe": "^16.12.0",
25
+ "@stripe/react-stripe-js": "^2.8.0",
26
+ "@stripe/stripe-js": "^4.10.0",
27
+ "tailwindcss": "^4.0.0",
28
+ "clsx": "^2.0.0",
29
+ "class-variance-authority": "^0.7.0",
30
+ "tailwind-merge": "^2.0.0",
31
+ "next-themes": "^0.4.0",
32
+ "lucide-react": "^0.460.0",
33
+ "zod": "^3.22.4",
34
+ "zustand": "^4.5.0"
35
+ },
36
+ "devDependencies": {
37
+ "typescript": "^5.7.0",
38
+ "@types/node": "^22.0.0",
39
+ "@types/react": "^19.0.0",
40
+ "@types/react-dom": "^19.0.0",
41
+ "eslint": "^9.0.0",
42
+ "eslint-config-next": "^15.0.0",
43
+ "prettier": "^3.4.0",
44
+ "vitest": "^2.1.0",
45
+ "@testing-library/react": "^16.0.0",
46
+ "@testing-library/jest-dom": "^6.6.0"
47
+ },
48
+ "engines": {
49
+ "node": ">=20.0.0"
50
+ }
51
+ }