@fernir2/saas-kit-cli 0.1.40 → 0.1.41-1096

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 (286) hide show
  1. package/base-repo/app-constants/alias-symbols.js +2 -2
  2. package/base-repo/app-constants/aliases.js +3 -1
  3. package/base-repo/app-constants/app-packages-names.js +4 -0
  4. package/base-repo/app-constants/command-names.js +4 -0
  5. package/base-repo/app-constants/internal-system-constants.js +8 -0
  6. package/base-repo/app-constants/project-paths.js +6 -3
  7. package/base-repo/constants/basic-types.js +4 -0
  8. package/base-repo/constants/ci-constants.js +7 -0
  9. package/base-repo/constants/http-constants.js +4 -0
  10. package/base-repo/constants/http-methods.js +6 -0
  11. package/base-repo/constants/internal-cli-constants.js +6 -0
  12. package/base-repo/constants/internal-common-strings.js +4 -0
  13. package/base-repo/constants/internal-extensions.js +6 -0
  14. package/base-repo/constants/packages.js +1 -1
  15. package/base-repo/constants/push-statuses.js +4 -0
  16. package/base-repo/constants/strings-constants.js +4 -0
  17. package/base-repo/constants/type-string-values.js +4 -0
  18. package/base-repo/process.js +4 -0
  19. package/cli/.env.example +8 -61
  20. package/cli/.prettierignore +15 -0
  21. package/cli/.prettierrc.json +8 -0
  22. package/cli/README.md +3 -3
  23. package/cli/bin/create.ts +635 -453
  24. package/cli/configs/drizzle-cli-config.ts +16 -15
  25. package/cli/configs/next-cli-config.ts +44 -78
  26. package/cli/configs/playwright-cli-config.ts +45 -35
  27. package/cli/configs/tsconfig.cli.json +35 -35
  28. package/cli/configs/tsconfig.server.json +13 -13
  29. package/cli/drizzle.config.ts +6 -6
  30. package/cli/next.config.js +5 -3
  31. package/cli/npm-commands/gen-meta.ts +9 -3
  32. package/cli/npm-commands/gen-schema.ts +3 -3
  33. package/cli/npm-commands/migrate-db.ts +17 -15
  34. package/cli/npm-commands/seed-db.ts +17 -15
  35. package/cli/package-template.json +54 -57
  36. package/cli/playwright.config.ts +6 -6
  37. package/cli/postcss.config.mjs +7 -7
  38. package/cli/public/handle.svg +23 -0
  39. package/cli/public/images/login-image-dark.webp +0 -0
  40. package/cli/public/images/login-image.webp +0 -0
  41. package/cli/public/images/logo.webp +0 -0
  42. package/cli/public/images/no-image.webp +0 -0
  43. package/cli/public/images/profile.webp +0 -0
  44. package/cli/public/images/search-not-found-result.webp +0 -0
  45. package/cli/public/logo.svg +1 -0
  46. package/cli/server.ts +48 -40
  47. package/cli/src/app/api/v1/(f)/[resourceName]/[id]/route.ts +18 -11
  48. package/cli/src/app/api/v1/(f)/[resourceName]/route.ts +23 -14
  49. package/cli/src/app/api/v1/(f)/[resourceName]/upsert/route.ts +6 -3
  50. package/cli/src/app/api/v1/(f)/blob/route.ts +14 -7
  51. package/cli/src/app/api/v1/(f)/log/route.ts +14 -7
  52. package/cli/src/app/api/v1/(f)/markdown/route.ts +6 -0
  53. package/cli/src/app/api/v1/(f)/other-user/[id]/route.ts +23 -14
  54. package/cli/src/app/api/v1/(f)/other-user/route.ts +14 -7
  55. package/cli/src/app/api/v1/(f)/password/forgot-password/route.ts +6 -3
  56. package/cli/src/app/api/v1/(f)/password/reset-password/route.ts +6 -3
  57. package/cli/src/app/api/v1/(f)/payment/method/route.ts +9 -4
  58. package/cli/src/app/api/v1/(f)/payment/route.ts +6 -3
  59. package/cli/src/app/api/v1/(f)/payment/verify-fail/route.ts +6 -3
  60. package/cli/src/app/api/v1/(f)/payment/verify-success/route.ts +6 -3
  61. package/cli/src/app/api/v1/(f)/search-result/route.ts +6 -3
  62. package/cli/src/app/api/v1/(f)/searchable-resources/route.ts +6 -3
  63. package/cli/src/app/api/v1/(f)/sign-in/route.ts +6 -3
  64. package/cli/src/app/api/v1/(f)/sign-out/route.ts +6 -3
  65. package/cli/src/app/api/v1/(f)/sign-up/route.ts +6 -3
  66. package/cli/src/app/api/v1/(f)/subscription/cancel/route.ts +6 -3
  67. package/cli/src/app/api/v1/(f)/subscription/create/route.ts +6 -3
  68. package/cli/src/app/api/v1/(f)/subscription/update/route.ts +6 -3
  69. package/cli/src/app/api/v1/(f)/uimeta/route.ts +6 -3
  70. package/cli/src/app/api/v1/(f)/uimetas/route.ts +6 -3
  71. package/cli/src/app/api/v1/(f)/user-feature/isenabled/route.ts +6 -3
  72. package/cli/src/app/api/v1/(f)/user-permission/route.ts +6 -3
  73. package/cli/src/app/api/v1/(f)/visible-workspace/route.ts +10 -5
  74. package/cli/src/app/api/v1/(f)/workspace/change/route.ts +10 -5
  75. package/cli/src/app/f/(not-signed-in)/edit-password/page.tsx +8 -8
  76. package/cli/src/app/f/(not-signed-in)/forgot-password/page.tsx +13 -13
  77. package/cli/src/app/f/(not-signed-in)/reset-password/page.tsx +11 -11
  78. package/cli/src/app/f/(not-signed-in)/sign-in/microsoft/page.tsx +8 -8
  79. package/cli/src/app/f/(not-signed-in)/sign-in/page.tsx +13 -13
  80. package/cli/src/app/f/(not-signed-in)/sign-up/page.tsx +13 -13
  81. package/cli/src/app/f/(signed-in)/dashboard/page.tsx +8 -8
  82. package/cli/src/app/f/(signed-in)/dynamiclayout/page.tsx +8 -8
  83. package/cli/src/app/f/(signed-in)/edituser/[id]/page.tsx +8 -8
  84. package/cli/src/app/f/(signed-in)/edituser/page.tsx +8 -8
  85. package/cli/src/app/f/(signed-in)/layout.tsx +5 -5
  86. package/cli/src/app/f/(signed-in)/payment-plans/page.tsx +8 -8
  87. package/cli/src/app/f/(signed-in)/statusboard/page.tsx +8 -8
  88. package/cli/src/app/f/(signed-in)/userlist/page.tsx +8 -8
  89. package/cli/src/app/f/(signed-in)/view/page.tsx +23 -9
  90. package/cli/src/app/f/api-docs/page.tsx +15 -15
  91. package/cli/src/app/globals.css +1 -1
  92. package/cli/src/app/http-wrappers.ts +23 -0
  93. package/cli/src/app/init-saas-kit.ts +12 -0
  94. package/cli/src/app/layout.tsx +43 -35
  95. package/cli/src/app/page.tsx +9 -9
  96. package/cli/src/app/styles/common.css +75 -71
  97. package/cli/src/app/styles/rich-text-editor.css +130 -130
  98. package/cli/templates/.env-template +8 -12
  99. package/cli/templates/gitignore-template +54 -0
  100. package/cli/test/custom-test.ts +20 -0
  101. package/cli/test/global-setup.ts +7 -3
  102. package/cli/test/global-teardown.ts +7 -0
  103. package/cli/tsconfig.json +15 -15
  104. package/cli/tsconfig.lint.json +5 -0
  105. package/cli/tsconfig.server.json +4 -14
  106. package/fd-toolbox/api/api-client.js +3 -3
  107. package/fd-toolbox/api/api-path-names.js +4 -1
  108. package/fd-toolbox/api/api-paths.js +2 -1
  109. package/fd-toolbox/api/base-api.js +5 -4
  110. package/fd-toolbox/auth/{login-states.js → internal-login-states.js} +3 -3
  111. package/fd-toolbox/auth/session-storage.js +1 -1
  112. package/fd-toolbox/auth/tokens.js +1 -1
  113. package/fd-toolbox/constants/common-user-fields.js +7 -0
  114. package/fd-toolbox/constants/constants.js +2 -2
  115. package/fd-toolbox/constants/environment-constants.js +4 -1
  116. package/fd-toolbox/constants/header-names.js +1 -1
  117. package/fd-toolbox/constants/meta-query-params.js +4 -1
  118. package/fd-toolbox/constants/odata-query-params.js +7 -0
  119. package/fd-toolbox/constants/public-files.js +5 -3
  120. package/fd-toolbox/constants/resource-folders.js +4 -0
  121. package/fd-toolbox/constants/toolbox-error-messages-constants.js +4 -0
  122. package/fd-toolbox/enums/enums.js +5 -2
  123. package/fd-toolbox/errors/error-handler.js +2 -2
  124. package/fd-toolbox/errors/error-statuses.js +4 -1
  125. package/fd-toolbox/errors/errors.js +1 -1
  126. package/fd-toolbox/errors/problem-details.js +4 -2
  127. package/fd-toolbox/functions/value-checking-functions.js +5 -3
  128. package/fd-toolbox/http/url/urls.js +4 -3
  129. package/fd-toolbox/infra/env-config.js +2 -2
  130. package/fd-toolbox/infra/env-functions.js +6 -4
  131. package/fd-toolbox/infra/env-schema.js +2 -4
  132. package/fd-toolbox/infra/toolbox-env-setting-keys.js +1 -1
  133. package/fd-toolbox/lib/environments.js +4 -3
  134. package/fd-toolbox/lib/utils.js +5 -2
  135. package/fd-toolbox/local-storage/local-storage.js +1 -1
  136. package/fd-toolbox/logging/loggers.js +2 -2
  137. package/fd-toolbox/notifications.js +2 -2
  138. package/fd-toolbox/odata/odata-filter-constants.js +4 -0
  139. package/fd-toolbox/odata/odata-formatting/odata-filters.js +9 -0
  140. package/fd-toolbox/odata/odata.js +12 -0
  141. package/fd-toolbox/paths/paths-names.js +1 -1
  142. package/fd-toolbox/redirect/redirect-functions.js +8 -0
  143. package/fd-toolbox/resources/resource-names.js +1 -1
  144. package/fd-toolbox/routing/login-routers.js +2 -1
  145. package/fd-toolbox/routing/paths.js +1 -1
  146. package/fd-toolbox/routing/routers.js +9 -0
  147. package/fd-toolbox/routing/routes.js +3 -2
  148. package/fd-toolbox/server/collections/single-funcs.js +8 -0
  149. package/fd-toolbox/server/constants/api-routes-constants.js +4 -0
  150. package/fd-toolbox/server/errors/error-dtos.js +4 -0
  151. package/fd-toolbox/server/framework/index.js +8 -0
  152. package/fd-toolbox/server/logging/latest-logs-store.js +6 -0
  153. package/fd-toolbox/server/logging/log-dtos.js +6 -0
  154. package/fd-toolbox/server/logging/logger.js +9 -0
  155. package/fd-toolbox/server/web/response-messages.js +4 -0
  156. package/fd-toolbox/strings/strings.js +2 -3
  157. package/fd-toolbox/types/ensure-type.js +6 -2
  158. package/fd-toolbox/url/urls.js +4 -0
  159. package/fd-toolbox-core/constants/meta-constants.js +4 -2
  160. package/fd-toolbox-core/core/name-of.js +1 -1
  161. package/fd-toolbox-core/types/resource-with-id.js +3 -1
  162. package/git/constants/git-constants.js +6 -0
  163. package/level2/cli/bin/index.js +2 -1
  164. package/level2/cli/create/bin/create.js +19 -10
  165. package/level2/npm-commands/build-npm/cli-contents.js +1 -1
  166. package/level2/npm-commands/build-npm/paths.js +6 -0
  167. package/package.json +49 -55
  168. package/base-repo/app-constants/alias-symbols.cjs.js +0 -6
  169. package/base-repo/app-constants/aliases.cjs.js +0 -8
  170. package/base-repo/app-constants/project-paths.cjs.js +0 -17
  171. package/base-repo/constants/create-app-constants.cjs.js +0 -9
  172. package/base-repo/constants/packages.cjs.js +0 -6
  173. package/base-repo/constants/packages.cjs2.js +0 -6
  174. package/base-repo/constants/packages2.js +0 -4
  175. package/cli/public/images/00000000-0000-0000-0000-000000000000.webp +0 -0
  176. package/cli/public/images/login-image-dark.jpg +0 -0
  177. package/cli/public/images/login-image.jpg +0 -0
  178. package/cli/public/images/no-image.png +0 -0
  179. package/cli/public/images/profile.png +0 -0
  180. package/cli/public/images/search-not-found-result.png +0 -0
  181. package/cli/public/images/toolbar-logo.png +0 -0
  182. package/cli/public/images/users/00000000-0000-0000-0000-000000000000.webp +0 -0
  183. package/cli/src/app/api/v1/(f)/preload/route.ts +0 -3
  184. package/cli/src/app/f/(signed-in)/lm/page.tsx +0 -8
  185. package/cli/src/app/f/(signed-in)/preload/page.tsx +0 -8
  186. package/cli/src/app/f/test/feed/page.tsx +0 -8
  187. package/cli/src/app/f/test/file-upload/page.tsx +0 -8
  188. package/cli/src/app/f/test/layout.tsx +0 -5
  189. package/cli/src/app/f/test/page.tsx +0 -8
  190. package/fd-toolbox/api/api-client.cjs.js +0 -19
  191. package/fd-toolbox/api/api-path-names.cjs.js +0 -9
  192. package/fd-toolbox/api/api-paths.cjs.js +0 -9
  193. package/fd-toolbox/api/base-api.cjs.js +0 -22
  194. package/fd-toolbox/auth/login-states.cjs.js +0 -18
  195. package/fd-toolbox/auth/session-storage.cjs.js +0 -12
  196. package/fd-toolbox/auth/tokens.cjs.js +0 -11
  197. package/fd-toolbox/constants/api-constants.cjs.js +0 -26
  198. package/fd-toolbox/constants/api-constants.js +0 -4
  199. package/fd-toolbox/constants/constants.cjs.js +0 -13
  200. package/fd-toolbox/constants/environment-constants.cjs.js +0 -7
  201. package/fd-toolbox/constants/extensions.cjs.js +0 -6
  202. package/fd-toolbox/constants/extensions.js +0 -4
  203. package/fd-toolbox/constants/header-names.cjs.js +0 -7
  204. package/fd-toolbox/constants/http-status-codes.cjs.js +0 -6
  205. package/fd-toolbox/constants/meta-query-params.cjs.js +0 -6
  206. package/fd-toolbox/constants/public-files.cjs.js +0 -14
  207. package/fd-toolbox/constants/representations.cjs.js +0 -6
  208. package/fd-toolbox/constants/representations.js +0 -4
  209. package/fd-toolbox/enums/enums.cjs.js +0 -26
  210. package/fd-toolbox/errors/error-handler.cjs.js +0 -10
  211. package/fd-toolbox/errors/error-statuses.cjs.js +0 -6
  212. package/fd-toolbox/errors/errors.cjs.js +0 -6
  213. package/fd-toolbox/errors/problem-details.cjs.js +0 -8
  214. package/fd-toolbox/functions/value-checking-functions.cjs.js +0 -10
  215. package/fd-toolbox/http/http-constants.cjs.js +0 -7
  216. package/fd-toolbox/http/http-constants.js +0 -4
  217. package/fd-toolbox/http/url/urls.cjs.js +0 -9
  218. package/fd-toolbox/infra/env-config.cjs.js +0 -8
  219. package/fd-toolbox/infra/env-functions.cjs.js +0 -16
  220. package/fd-toolbox/infra/env-schema.cjs.js +0 -12
  221. package/fd-toolbox/infra/env-setting-types.cjs.js +0 -6
  222. package/fd-toolbox/infra/env-setting-types.js +0 -4
  223. package/fd-toolbox/infra/env-store.cjs.js +0 -9
  224. package/fd-toolbox/infra/env-store.js +0 -7
  225. package/fd-toolbox/infra/toolbox-env-setting-keys.cjs.js +0 -6
  226. package/fd-toolbox/lib/environments.cjs.js +0 -25
  227. package/fd-toolbox/lib/utils.cjs.js +0 -29
  228. package/fd-toolbox/local-storage/local-storage.cjs.js +0 -12
  229. package/fd-toolbox/logging/loggers.cjs.js +0 -16
  230. package/fd-toolbox/logging/logging-constants.cjs.js +0 -6
  231. package/fd-toolbox/logging/logging-constants.js +0 -4
  232. package/fd-toolbox/notifications.cjs.js +0 -14
  233. package/fd-toolbox/odata/odata-constants.cjs.js +0 -11
  234. package/fd-toolbox/odata/odata-constants.js +0 -4
  235. package/fd-toolbox/odata/odata-enums.cjs.js +0 -8
  236. package/fd-toolbox/odata/odatas.cjs.js +0 -11
  237. package/fd-toolbox/odata/odatas.js +0 -9
  238. package/fd-toolbox/odata/services/odata-filters.cjs.js +0 -11
  239. package/fd-toolbox/odata/services/odata-filters.js +0 -9
  240. package/fd-toolbox/paths/paths-names.cjs.js +0 -9
  241. package/fd-toolbox/resources/resource-names.cjs.js +0 -6
  242. package/fd-toolbox/routing/login-routers.cjs.js +0 -10
  243. package/fd-toolbox/routing/paths.cjs.js +0 -6
  244. package/fd-toolbox/routing/routes.cjs.js +0 -14
  245. package/fd-toolbox/strings/strings-constants.cjs.js +0 -7
  246. package/fd-toolbox/strings/strings-constants.js +0 -4
  247. package/fd-toolbox/strings/strings.cjs.js +0 -10
  248. package/fd-toolbox/types/ensure-type.cjs.js +0 -23
  249. package/fd-toolbox-core/constants/meta-constants.cjs.js +0 -7
  250. package/fd-toolbox-core/constants/promises.cjs.js +0 -6
  251. package/fd-toolbox-core/core/name-of.cjs.js +0 -8
  252. package/fd-toolbox-core/enums/log-severities.cjs.js +0 -6
  253. package/fd-toolbox-core/types/resource-with-id.cjs.js +0 -9
  254. package/level2/cli/bin/index.cjs.js +0 -8
  255. package/level2/cli/create/bin/create.cjs.js +0 -42
  256. package/level2/npm-commands/build-npm/cli-contents.cjs.js +0 -9
  257. package/level2/npm-commands/build-npm/path.cjs.js +0 -13
  258. package/level2/npm-commands/build-npm/path.js +0 -6
  259. /package/cli/public/images/{companies → demo/companies}/00000000-0000-0000-0000-000000000000.webp +0 -0
  260. /package/cli/public/images/{companies → demo/companies}/004a196f-f9a7-49fc-9e05-606fffd0613c.webp +0 -0
  261. /package/cli/public/images/{companies → demo/companies}/497b26a6-3e91-4b27-8c24-f3b145fc6c7f.webp +0 -0
  262. /package/cli/public/images/{companies → demo/companies}/6cead29b-2572-4283-add6-f407b39d7135.webp +0 -0
  263. /package/cli/public/images/{companies → demo/companies}/71efdb77-4ecb-45e6-bc83-0fdff835c2e7.webp +0 -0
  264. /package/cli/public/images/{companies → demo/companies}/773602c8-a417-4afc-adb0-bb6856ac2970.webp +0 -0
  265. /package/cli/public/images/{companies → demo/companies}/9d09881a-cf60-438d-9edf-10f5864d4468.webp +0 -0
  266. /package/cli/public/images/{companies → demo/companies}/a1b2c3d4-e5f6-7890-1234-56789abcdef0.webp +0 -0
  267. /package/cli/public/images/{companies → demo/companies}/b04d7c5e-18de-4f44-b923-5bfb28bb33bb.webp +0 -0
  268. /package/cli/public/images/{companies → demo/companies}/c75c22fc-d295-472e-bdae-dbb8eb09cf18.webp +0 -0
  269. /package/cli/public/images/{companies → demo/companies}/cdf3efb4-33a2-485e-8d95-e0ab5a4cb6a5.webp +0 -0
  270. /package/cli/public/images/{companies → demo/companies}/d6fe4c6a-ecdb-40fc-a8e6-2044ef2b82d4.webp +0 -0
  271. /package/cli/public/images/{contacts → demo/contacts}/159e4c7a-ff5f-4162-8237-acec3ca8a759.webp +0 -0
  272. /package/cli/public/images/{contacts → demo/contacts}/65e07208-6b1f-4a59-b5e3-2f80f5741b18.webp +0 -0
  273. /package/cli/public/images/{contacts → demo/contacts}/6d1c5410-ef5b-4d37-8b8d-4ab8cfc87785.webp +0 -0
  274. /package/cli/public/images/{contacts → demo/contacts}/754c77d8-eefb-4a90-b07b-ed00980c88b4.webp +0 -0
  275. /package/cli/public/images/{contacts → demo/contacts}/9fd23cd9-9b94-4bb8-bb73-d315b93b8a5c.webp +0 -0
  276. /package/cli/public/images/{contacts → demo/contacts}/b2f746d1-6b3c-4c47-8e07-f73927c167cb.webp +0 -0
  277. /package/cli/public/images/{contacts → demo/contacts}/b515cb46-eab4-4862-9e8e-c2f5f217ae79.webp +0 -0
  278. /package/cli/public/images/{contacts → demo/contacts}/cf2eae72-e5ab-4d95-8f08-b6571b44f8eb.webp +0 -0
  279. /package/cli/public/images/{contacts → demo/contacts}/ec0e0285-22d9-48d4-b4b3-96388c37c807.webp +0 -0
  280. /package/cli/public/images/{contacts → demo/contacts}/ecb1a0f4-d244-4136-badf-c2bc72e3b678.webp +0 -0
  281. /package/cli/public/images/{users → demo/users}/02d1230f-5bfe-46b4-8ce1-d10f4aa918a7.webp +0 -0
  282. /package/cli/public/images/{users → demo/users}/166c5e4a-696f-4bf5-ab48-dbbb5e90d526.webp +0 -0
  283. /package/cli/public/images/{users → demo/users}/175a3f0c-692c-4503-87eb-ff95d6535e16.webp +0 -0
  284. /package/cli/public/images/{users → demo/users}/8398ee85-7546-4710-b628-44c98e4ba03a.webp +0 -0
  285. /package/cli/public/images/{users → demo/users}/979f8933-71b1-4df8-b691-566a901d3c76.webp +0 -0
  286. /package/cli/public/images/{users → demo/users}/fbe37132-31bc-4fc9-9bfb-aac7a1b61a7f.webp +0 -0
@@ -1,13 +1,13 @@
1
- import { httpWrapper } from "@server/web/http-wrapper";
2
- import SignInPage from "@client/pages/sign-in-page/SignInPage";
3
-
4
- export const dynamic = "force-dynamic";
5
-
6
- const Page = httpWrapper(
7
- async () => {
8
- return <SignInPage />;
9
- },
10
- { anonymous: true },
11
- );
12
-
13
- export default Page;
1
+ import { httpWrapper } from "@/app/http-wrappers";
2
+ import SignInPage from "@client/pages/sign-in-page/SignInPage";
3
+
4
+ export const dynamic = "force-dynamic";
5
+
6
+ const Page = httpWrapper(
7
+ async () => {
8
+ return <SignInPage />;
9
+ },
10
+ { anonymous: true },
11
+ );
12
+
13
+ export default Page;
@@ -1,13 +1,13 @@
1
- import { httpWrapper } from "@server/web/http-wrapper";
2
- import SignUpPage from "@client/pages/sign-up-page/SignUpPage";
3
-
4
- export const dynamic = "force-dynamic";
5
-
6
- const Page = httpWrapper(
7
- async ({ searchParams }) => {
8
- return <SignUpPage searchParams={searchParams} />;
9
- },
10
- { anonymous: true },
11
- );
12
-
13
- export default Page;
1
+ import { httpWrapper } from "@/app/http-wrappers";
2
+ import SignUpPage from "@client/pages/sign-up-page/SignUpPage";
3
+
4
+ export const dynamic = "force-dynamic";
5
+
6
+ const Page = httpWrapper(
7
+ async ({ searchParams }) => {
8
+ return <SignUpPage searchParams={searchParams} />;
9
+ },
10
+ { anonymous: true },
11
+ );
12
+
13
+ export default Page;
@@ -1,8 +1,8 @@
1
- import { httpWrapper } from "@server/web/http-wrapper";
2
- import DashboardPage from "@client/pages/dashboard-page/DashboardPage";
3
-
4
- const Page = httpWrapper(async () => {
5
- return <DashboardPage />;
6
- });
7
-
8
- export default Page;
1
+ import { httpWrapper } from "@/app/http-wrappers";
2
+ import DashboardPage from "@client/pages/dashboard-page/DashboardPage";
3
+
4
+ const Page = httpWrapper(async () => {
5
+ return <DashboardPage />;
6
+ });
7
+
8
+ export default Page;
@@ -1,8 +1,8 @@
1
- import { httpWrapper } from "@server/web/http-wrapper";
2
- import DynamicLayoutPage from "@client/pages/dynamic-layout-page/DynamicLayoutPage";
3
-
4
- const Page = httpWrapper(async () => {
5
- return <DynamicLayoutPage />;
6
- });
7
-
8
- export default Page;
1
+ import { httpWrapper } from "@/app/http-wrappers";
2
+ import DynamicLayoutPage from "@client/pages/dynamic-layout-page/DynamicLayoutPage";
3
+
4
+ const Page = httpWrapper(async () => {
5
+ return <DynamicLayoutPage />;
6
+ });
7
+
8
+ export default Page;
@@ -1,8 +1,8 @@
1
- import { httpWrapper } from "@server/web/http-wrapper";
2
- import EditUserByIdPage from "@client/pages/edit-user-by-id-page/EditUserByIdPage";
3
-
4
- const Page = httpWrapper(async ({ params }) => {
5
- return <EditUserByIdPage params={params} />;
6
- });
7
-
8
- export default Page;
1
+ import { httpWrapper } from "@/app/http-wrappers";
2
+ import EditUserByIdPage from "@client/pages/edit-user-by-id-page/EditUserByIdPage";
3
+
4
+ const Page = httpWrapper(async ({ params }) => {
5
+ return <EditUserByIdPage params={params} />;
6
+ });
7
+
8
+ export default Page;
@@ -1,8 +1,8 @@
1
- import { httpWrapper } from "@server/web/http-wrapper";
2
- import EditUserPage from "@client/pages/edit-user-page/EditUserPage";
3
-
4
- const Page = httpWrapper(async () => {
5
- return <EditUserPage />;
6
- });
7
-
8
- export default Page;
1
+ import { httpWrapper } from "@/app/http-wrappers";
2
+ import EditUserPage from "@client/pages/edit-user-page/EditUserPage";
3
+
4
+ const Page = httpWrapper(async () => {
5
+ return <EditUserPage />;
6
+ });
7
+
8
+ export default Page;
@@ -1,5 +1,5 @@
1
- import { SignedInLayout } from "@fd-app-toolbox/server/layout/signed-in-layout/SignedInLayout";
2
-
3
- export default async function Layout({ children }: { children: React.ReactNode }) {
4
- return <SignedInLayout>{children}</SignedInLayout>;
5
- }
1
+ import { SignedInLayout } from "@fd-app-toolbox/server/layout/signed-in-layout/SignedInLayout";
2
+
3
+ export default async function Layout({ children }: { children: React.ReactNode }) {
4
+ return <SignedInLayout>{children}</SignedInLayout>;
5
+ }
@@ -1,8 +1,8 @@
1
- import PaymentPlanPage from "@client/pages/payment-plan-page/PaymentPlanPage";
2
- import { httpWrapper } from "@server/web/http-wrapper";
3
-
4
- const Page = httpWrapper(async () => {
5
- return <PaymentPlanPage />;
6
- });
7
-
8
- export default Page;
1
+ import PaymentPlanPage from "@client/pages/payment-plan-page/PaymentPlanPage";
2
+ import { httpWrapper } from "@/app/http-wrappers";
3
+
4
+ const Page = httpWrapper(async () => {
5
+ return <PaymentPlanPage />;
6
+ });
7
+
8
+ export default Page;
@@ -1,8 +1,8 @@
1
- import StatusBoardPage from "@client/pages/status-board-page/StatusBoardPage";
2
- import { httpWrapper } from "@server/web/http-wrapper";
3
-
4
- const Page = httpWrapper(async () => {
5
- return <StatusBoardPage />;
6
- });
7
-
8
- export default Page;
1
+ import StatusBoardPage from "@client/pages/status-board-page/StatusBoardPage";
2
+ import { httpWrapper } from "@/app/http-wrappers";
3
+
4
+ const Page = httpWrapper(async () => {
5
+ return <StatusBoardPage />;
6
+ });
7
+
8
+ export default Page;
@@ -1,8 +1,8 @@
1
- import UserListPage from "@client/pages/user-list-page/UserListPage";
2
- import { httpWrapper } from "@server/web/http-wrapper";
3
-
4
- const Page = httpWrapper(async () => {
5
- return <UserListPage />;
6
- });
7
-
8
- export default Page;
1
+ import UserListPage from "@client/pages/user-list-page/UserListPage";
2
+ import { httpWrapper } from "@/app/http-wrappers";
3
+
4
+ const Page = httpWrapper(async () => {
5
+ return <UserListPage />;
6
+ });
7
+
8
+ export default Page;
@@ -1,9 +1,23 @@
1
- import ViewPage from "@client/pages/view-page/ViewPage";
2
- import { httpWrapper } from "@server/web/http-wrapper";
3
-
4
- const Page = httpWrapper(async ({ searchParams }) => {
5
- const { id, name, resource } = await searchParams;
6
- return <ViewPage id={id} name={name} resource={resource} />;
7
- });
8
-
9
- export default Page;
1
+ import ViewPage from "@client/pages/view-page/ViewPage";
2
+ import { httpWrapper } from "@/app/http-wrappers";
3
+ import type { PageProps } from "@common/web/page-props";
4
+
5
+ interface ViewPageSearchParams {
6
+ id?: string;
7
+ name?: string;
8
+ resource?: string;
9
+ }
10
+
11
+ const Page = httpWrapper(async ({ searchParams }: PageProps<ViewPageSearchParams>) => {
12
+ const resolvedSearchParams = await searchParams;
13
+
14
+ return (
15
+ <ViewPage
16
+ id={resolvedSearchParams.id}
17
+ name={resolvedSearchParams.name}
18
+ resource={resolvedSearchParams.resource}
19
+ />
20
+ );
21
+ });
22
+
23
+ export default Page;
@@ -1,15 +1,15 @@
1
- import { notFound } from "next/navigation";
2
- import { httpWrapper } from "@server/web/http-wrapper";
3
- import ApiDocsPage from "@client/pages/api-docs-page/ApiDocsPage";
4
- import { isProd } from "@fd-toolbox/lib/environments";
5
- import "swagger-ui-react/swagger-ui.css";
6
-
7
- const Page = httpWrapper(async () => {
8
- if (isProd()) {
9
- notFound();
10
- }
11
-
12
- return <ApiDocsPage />;
13
- });
14
-
15
- export default Page;
1
+ import { fdNotFound } from "@meta/client/framework/index";
2
+ import { httpWrapper } from "@/app/http-wrappers";
3
+ import ApiDocsPage from "@client/pages/api-docs-page/ApiDocsPage";
4
+ import { isProd } from "@fd-toolbox/lib/environments";
5
+ import "swagger-ui-react/swagger-ui.css";
6
+
7
+ const Page = httpWrapper(async () => {
8
+ if (isProd()) {
9
+ fdNotFound();
10
+ }
11
+
12
+ return <ApiDocsPage />;
13
+ });
14
+
15
+ export default Page;
@@ -1 +1 @@
1
- @import "@fernir2/saas-kit/styles";
1
+ @import "@fernir2/saas-kit/styles";
@@ -0,0 +1,23 @@
1
+ import { createHttpWrapper } from "@server/web/http-wrapper";
2
+ import {
3
+ HttpApiWrapperConfig,
4
+ RequestHandler,
5
+ createHttpApiWrapper,
6
+ } from "@meta/server/web/http-api-wrapper";
7
+ import type { PageProps, HttpWrapperConfig } from "@common/web/page-props";
8
+ import type { ElementNode } from "@fd-toolbox/types/react-types";
9
+ import type { WithIndexer } from "@fd-toolbox-core/types/with-indexer";
10
+ import { initSaasKit } from "@/app/init-saas-kit";
11
+
12
+ export function httpWrapper<T = WithIndexer<string>>(
13
+ handler: (props: PageProps<T>) => Promise<ElementNode>,
14
+ config?: HttpWrapperConfig,
15
+ ) {
16
+ initSaasKit();
17
+ return createHttpWrapper()<T>(handler, config);
18
+ }
19
+
20
+ export function httpApiWrapper(handler: RequestHandler, config?: HttpApiWrapperConfig) {
21
+ initSaasKit();
22
+ return createHttpApiWrapper()(handler, config);
23
+ }
@@ -0,0 +1,12 @@
1
+ import { initSaasKitWithConfig, InitSaasKitConfig } from "@meta/server/web/init-saas-kit-config";
2
+ import * as schema from "@generated/schema";
3
+ import { resourceHandlerDynamicImportMap } from "@generated/meta/crud-handler-map";
4
+
5
+ const config: InitSaasKitConfig = {
6
+ schema,
7
+ handlerMap: resourceHandlerDynamicImportMap,
8
+ };
9
+
10
+ export function initSaasKit() {
11
+ initSaasKitWithConfig(config);
12
+ }
@@ -1,35 +1,43 @@
1
- import { HtmlMetadataType } from "@meta/client/framework";
2
- import { Geist as createFontGeist } from "next/font/google";
3
- import "@/app/globals.css";
4
- import { cn } from "@fd-toolbox/lib/utils";
5
- import Favicon from "src/app/favicon.ico";
6
- import { Toaster } from "@fd-component-toolbox/toaster/Toaster";
7
- import { ReactNode } from "react";
8
- import { Providers } from "@client/components/providers/Providers";
9
- import { defaultGlobalConfig } from "@meta/providers/global-provider/default-config";
10
- import { configureDefaultGlobalConfig } from "@client/component-configs/configure-default-config";
11
-
12
- export const metadata: HtmlMetadataType = {
13
- title: "SaaS Kit",
14
- icons: [{ rel: "icon", url: Favicon.src }],
15
- } as const;
16
-
17
- export default async function RootLayout({ children }: { children: ReactNode }) {
18
- const sidebarResourceNames: string[] = [];
19
- configureDefaultGlobalConfig(sidebarResourceNames);
20
-
21
- return (
22
- <html lang="en">
23
- <body className={cn(geistFont.className, "h-screen text-sm")}>
24
- <div className="flex h-full flex-col">
25
- <Providers globalConfig={{ ...defaultGlobalConfig }}>{children}</Providers>
26
- </div>
27
- <Toaster />
28
- </body>
29
- </html>
30
- );
31
- }
32
-
33
- const geistFont = createFontGeist({
34
- subsets: ["latin"],
35
- });
1
+ // Geist must be imported directly in the root layout because next/font
2
+ // requires being used at the App Router entry point and cannot be wrapped.
3
+ // Approved
4
+ // eslint-disable-next-line no-restricted-imports
5
+ import { Geist as createFontGeist } from "next/font/google";
6
+ import { HtmlMetadata } from "@meta/client/framework";
7
+ import "@/app/globals.css";
8
+ import { cn } from "@fd-toolbox/lib/utils";
9
+ import Favicon from "src/app/favicon.ico";
10
+ import { Toaster } from "@fd-component-toolbox/toaster/Toaster";
11
+ import { ReactNode } from "react";
12
+ import { ClientRootLayout } from "@client/components/providers/ClientRootLayout";
13
+ import { themes } from "@fd-app-toolbox/menu/themes";
14
+ import { rootLayoutMetadata } from "@base-repo/app-constants/internal-system-constants";
15
+ import { projectName } from "@base-repo/app-constants/project-paths";
16
+
17
+ export const metadata: HtmlMetadata = {
18
+ title: projectName,
19
+ icons: [{ rel: rootLayoutMetadata.icon, url: Favicon.src }],
20
+ } as const;
21
+
22
+ /**
23
+ * Root layout component that wraps the entire application with providers
24
+ *
25
+ * @param children - React nodes to render within the layout
26
+ */
27
+ export default async function RootLayout({ children }: { children: ReactNode }) {
28
+ return (
29
+ <html lang="en" className={themes.light} style={{ colorScheme: themes.light }}>
30
+ <body className={cn(geistFont.className, "h-screen text-sm")}>
31
+ <div className="flex h-full flex-col">
32
+ <ClientRootLayout>{children}</ClientRootLayout>
33
+ </div>
34
+ <Toaster />
35
+ </body>
36
+ </html>
37
+ );
38
+ }
39
+
40
+ const geistFont = createFontGeist({
41
+ /* string-duplication-disable-next-line */
42
+ subsets: ["latin"],
43
+ });
@@ -1,9 +1,9 @@
1
- import { fdRedirect } from "@fd-toolbox/server/framework";
2
- import { getResourceListUrl } from "@meta/services/meta-navigations";
3
- import { resourceNames } from "@fd-toolbox/resources/resource-names";
4
-
5
- export default function Home() {
6
- const afterLoginUrl = getResourceListUrl(resourceNames.contact);
7
-
8
- fdRedirect(afterLoginUrl);
9
- }
1
+ import { fdRedirect } from "@fd-toolbox/server/framework";
2
+ import { getResourceListUrl } from "@meta/services/meta-navigations";
3
+ import { resourceNames } from "@fd-toolbox/resources/resource-names";
4
+
5
+ export default function Home() {
6
+ const afterLoginUrl = getResourceListUrl(resourceNames.contact);
7
+
8
+ fdRedirect(afterLoginUrl);
9
+ }
@@ -1,71 +1,75 @@
1
- @layer base {
2
- * {
3
- border-color: var(--color-border);
4
- }
5
- body {
6
- background-color: var(--color-background);
7
- color: var(--color-foreground);
8
- }
9
- }
10
-
11
- @supports not (-webkit-appearance: none) {
12
- * {
13
- scrollbar-width: thin;
14
- scrollbar-color: hsl(var(--fd-toolbar)) hsl(var(--background));
15
- }
16
- }
17
-
18
- @supports (-webkit-appearance: none) {
19
- *::-webkit-scrollbar {
20
- width: 15px;
21
- height: 15px;
22
- }
23
-
24
- *::-webkit-scrollbar-track {
25
- background: hsl(var(--background));
26
- }
27
-
28
- *::-webkit-scrollbar-thumb {
29
- width: 9px;
30
- height: 9px;
31
- background: hsl(var(--fd-toolbar));
32
- border-radius: var(--radius);
33
- border: 3px solid hsl(var(--background));
34
- }
35
-
36
- *::-webkit-scrollbar-thumb:hover {
37
- background: hsl(var(--fd-toolbar-hover));
38
- }
39
-
40
- *::-webkit-scrollbar-button {
41
- display: none;
42
- }
43
- }
44
-
45
- .scrollbar-hidden {
46
- -ms-overflow-style: none;
47
- scrollbar-width: none;
48
- }
49
-
50
- @media (max-width: 426px) {
51
- html,
52
- body {
53
- overflow: auto;
54
- -ms-overflow-style: none;
55
- scrollbar-width: none;
56
- }
57
-
58
- body::-webkit-scrollbar,
59
- body *::-webkit-scrollbar {
60
- display: none;
61
- }
62
- }
63
-
64
- @layer base {
65
- input:-webkit-autofill,
66
- input:-webkit-autofill:hover,
67
- input:-webkit-autofill:focus {
68
- -webkit-box-shadow: 0 0 0px 1000px hsl(var(--background)) inset;
69
- -webkit-text-fill-color: hsl(var(--foreground));
70
- }
71
- }
1
+ @layer base {
2
+ * {
3
+ border-color: var(--color-border);
4
+ }
5
+ body {
6
+ background-color: var(--color-background);
7
+ color: var(--color-foreground);
8
+ }
9
+ }
10
+
11
+ @supports not (-webkit-appearance: none) {
12
+ * {
13
+ scrollbar-width: thin;
14
+ scrollbar-color: hsl(var(--fd-toolbar)) hsl(var(--background));
15
+ }
16
+ }
17
+
18
+ @supports (-webkit-appearance: none) {
19
+ *::-webkit-scrollbar {
20
+ width: 15px;
21
+ height: 15px;
22
+ }
23
+
24
+ *::-webkit-scrollbar-track {
25
+ background: hsl(var(--background));
26
+ }
27
+
28
+ *::-webkit-scrollbar-thumb {
29
+ width: 9px;
30
+ height: 9px;
31
+ background: hsl(var(--fd-toolbar));
32
+ border-radius: var(--radius);
33
+ border: 3px solid hsl(var(--background));
34
+ }
35
+
36
+ *::-webkit-scrollbar-thumb:hover {
37
+ background: hsl(var(--fd-toolbar-hover));
38
+ }
39
+
40
+ *::-webkit-scrollbar-button {
41
+ display: none;
42
+ }
43
+ }
44
+
45
+ .scrollbar-hidden {
46
+ -ms-overflow-style: none;
47
+ scrollbar-width: none;
48
+ }
49
+
50
+ .bg-gradient-accent {
51
+ background: linear-gradient(135deg, #3b82f6, #8b5cf6);
52
+ }
53
+
54
+ @media (max-width: 426px) {
55
+ html,
56
+ body {
57
+ overflow: auto;
58
+ -ms-overflow-style: none;
59
+ scrollbar-width: none;
60
+ }
61
+
62
+ body::-webkit-scrollbar,
63
+ body *::-webkit-scrollbar {
64
+ display: none;
65
+ }
66
+ }
67
+
68
+ @layer base {
69
+ input:-webkit-autofill,
70
+ input:-webkit-autofill:hover,
71
+ input:-webkit-autofill:focus {
72
+ -webkit-box-shadow: 0 0 0px 1000px hsl(var(--background)) inset;
73
+ -webkit-text-fill-color: hsl(var(--foreground));
74
+ }
75
+ }