@fernir2/saas-kit-cli 0.1.32 → 0.1.34

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 (173) hide show
  1. package/base-repo/app-constants/aliases.cjs.js +1 -1
  2. package/base-repo/app-constants/aliases.js +1 -1
  3. package/base-repo/app-constants/project-paths.cjs.js +3 -1
  4. package/base-repo/app-constants/project-paths.js +3 -2
  5. package/base-repo/constants/packages.cjs2.js +6 -0
  6. package/base-repo/constants/packages2.js +4 -0
  7. package/cli/.env.example +55 -0
  8. package/cli/.gitlab-ci.yml +1 -0
  9. package/cli/bin/index.ts +35 -9
  10. package/cli/next.config.js +73 -48
  11. package/cli/package-template.json +15 -12
  12. package/cli/public/images/00000000-0000-0000-0000-000000000000.webp +0 -0
  13. package/cli/public/images/companies/00000000-0000-0000-0000-000000000000.webp +0 -0
  14. package/cli/public/images/companies/004a196f-f9a7-49fc-9e05-606fffd0613c.webp +0 -0
  15. package/cli/public/images/companies/497b26a6-3e91-4b27-8c24-f3b145fc6c7f.webp +0 -0
  16. package/cli/public/images/companies/6cead29b-2572-4283-add6-f407b39d7135.webp +0 -0
  17. package/cli/public/images/companies/71efdb77-4ecb-45e6-bc83-0fdff835c2e7.webp +0 -0
  18. package/cli/public/images/companies/773602c8-a417-4afc-adb0-bb6856ac2970.webp +0 -0
  19. package/cli/public/images/companies/9d09881a-cf60-438d-9edf-10f5864d4468.webp +0 -0
  20. package/cli/public/images/companies/a1b2c3d4-e5f6-7890-1234-56789abcdef0.webp +0 -0
  21. package/cli/public/images/companies/b04d7c5e-18de-4f44-b923-5bfb28bb33bb.webp +0 -0
  22. package/cli/public/images/companies/c75c22fc-d295-472e-bdae-dbb8eb09cf18.webp +0 -0
  23. package/cli/public/images/companies/cdf3efb4-33a2-485e-8d95-e0ab5a4cb6a5.webp +0 -0
  24. package/cli/public/images/companies/d6fe4c6a-ecdb-40fc-a8e6-2044ef2b82d4.webp +0 -0
  25. package/cli/public/images/contacts/159e4c7a-ff5f-4162-8237-acec3ca8a759.webp +0 -0
  26. package/cli/public/images/contacts/65e07208-6b1f-4a59-b5e3-2f80f5741b18.webp +0 -0
  27. package/cli/public/images/contacts/6d1c5410-ef5b-4d37-8b8d-4ab8cfc87785.webp +0 -0
  28. package/cli/public/images/contacts/754c77d8-eefb-4a90-b07b-ed00980c88b4.webp +0 -0
  29. package/cli/public/images/contacts/9fd23cd9-9b94-4bb8-bb73-d315b93b8a5c.webp +0 -0
  30. package/cli/public/images/contacts/b2f746d1-6b3c-4c47-8e07-f73927c167cb.webp +0 -0
  31. package/cli/public/images/contacts/b515cb46-eab4-4862-9e8e-c2f5f217ae79.webp +0 -0
  32. package/cli/public/images/contacts/cf2eae72-e5ab-4d95-8f08-b6571b44f8eb.webp +0 -0
  33. package/cli/public/images/contacts/ec0e0285-22d9-48d4-b4b3-96388c37c807.webp +0 -0
  34. package/cli/public/images/contacts/ecb1a0f4-d244-4136-badf-c2bc72e3b678.webp +0 -0
  35. package/cli/public/images/login-image-dark.jpg +0 -0
  36. package/cli/public/images/login-image.jpg +0 -0
  37. package/cli/public/images/no-image.png +0 -0
  38. package/cli/public/images/profile.png +0 -0
  39. package/cli/public/images/search-not-found-result.png +0 -0
  40. package/cli/public/images/shipment/076aecd1-7fb8-5d89-baa9-e48e61048525.pdf +0 -0
  41. package/cli/public/images/shipment/21884fb7-6e39-4f7b-9a49-0f46d527f50c.pdf +0 -0
  42. package/cli/public/images/shipment/e6367904-081e-479b-a8c5-5972057a261e.pdf +0 -0
  43. package/cli/public/images/store/00000000-0000-0000-0000-000000000000.webp +0 -0
  44. package/cli/public/images/test/photo-1460925895917-afdab827c52f.jpg +0 -0
  45. package/cli/public/images/test/photo-1499636136210-6f4ee915583e.jpg +0 -0
  46. package/cli/public/images/test/photo-1519681393784-d120267933ba.jpg +0 -0
  47. package/cli/public/images/toolbar-logo.png +0 -0
  48. package/cli/public/images/users/00000000-0000-0000-0000-000000000000.webp +0 -0
  49. package/cli/public/images/users/02d1230f-5bfe-46b4-8ce1-d10f4aa918a7.webp +0 -0
  50. package/cli/public/images/users/166c5e4a-696f-4bf5-ab48-dbbb5e90d526.webp +0 -0
  51. package/cli/public/images/users/175a3f0c-692c-4503-87eb-ff95d6535e16.webp +0 -0
  52. package/cli/public/images/users/8398ee85-7546-4710-b628-44c98e4ba03a.webp +0 -0
  53. package/cli/public/images/users/979f8933-71b1-4df8-b691-566a901d3c76.webp +0 -0
  54. package/cli/public/images/users/fbe37132-31bc-4fc9-9bfb-aac7a1b61a7f.webp +0 -0
  55. package/cli/src/app/api/v1/[resourceName]/[id]/route.ts +11 -0
  56. package/cli/src/app/api/v1/[resourceName]/route.ts +14 -0
  57. package/cli/src/app/api/v1/[resourceName]/upsert/route.ts +3 -0
  58. package/cli/src/app/api/v1/log/route.ts +7 -0
  59. package/cli/src/app/api/v1/otheruser/[id]/route.ts +14 -0
  60. package/cli/src/app/api/v1/otheruser/route.ts +7 -0
  61. package/cli/src/app/api/v1/password/forgotpassword/route.ts +3 -0
  62. package/cli/src/app/api/v1/password/resetpassword/route.ts +3 -0
  63. package/cli/src/app/api/v1/payment/method/route.ts +4 -0
  64. package/cli/src/app/api/v1/payment/route.ts +3 -0
  65. package/cli/src/app/api/v1/payment/verify-fail/route.ts +3 -0
  66. package/cli/src/app/api/v1/payment/verify-success/route.ts +3 -0
  67. package/cli/src/app/api/v1/preload/route.ts +3 -0
  68. package/cli/src/app/api/v1/searchable-resources/route.ts +11 -0
  69. package/cli/src/app/api/v1/searchresult/route.ts +35 -0
  70. package/cli/src/app/api/v1/sign-in/route.ts +3 -0
  71. package/cli/src/app/api/v1/sign-out/route.ts +3 -0
  72. package/cli/src/app/api/v1/sign-up/route.ts +3 -0
  73. package/cli/src/app/api/v1/subscription/cancel/route.ts +3 -0
  74. package/cli/src/app/api/v1/subscription/create/route.ts +3 -0
  75. package/cli/src/app/api/v1/subscription/update/route.ts +3 -0
  76. package/cli/src/app/api/v1/uimeta/route.ts +3 -0
  77. package/cli/src/app/api/v1/uimetas/route.ts +3 -0
  78. package/cli/src/app/api/v1/userpermission/route.ts +3 -0
  79. package/cli/src/app/api/v1/visible-workspace/route.ts +5 -0
  80. package/cli/src/app/api/v1/workspace/change/route.ts +5 -0
  81. package/cli/src/app/f/(private)/dashboard/page.tsx +8 -0
  82. package/cli/src/app/f/(private)/dynamiclayout/page.tsx +8 -0
  83. package/cli/src/app/f/(private)/edituser/[id]/page.tsx +8 -0
  84. package/cli/src/app/f/(private)/edituser/page.tsx +8 -0
  85. package/cli/src/app/f/(private)/layout.tsx +5 -0
  86. package/cli/src/app/f/(private)/lm/page.tsx +8 -0
  87. package/cli/src/app/f/(private)/payment-plans/page.tsx +8 -0
  88. package/cli/src/app/f/(private)/preload/page.tsx +8 -0
  89. package/cli/src/app/f/(private)/statusboard/page.tsx +8 -0
  90. package/cli/src/app/f/(private)/userlist/page.tsx +8 -0
  91. package/cli/src/app/f/(private)/view/page.tsx +8 -0
  92. package/cli/src/app/f/defaultRedirect/page.tsx +9 -0
  93. package/cli/src/app/f/editpassword/page.tsx +8 -0
  94. package/cli/src/app/f/forgotpassword/page.tsx +13 -0
  95. package/cli/src/app/f/resetpassword/page.tsx +16 -0
  96. package/cli/src/app/f/sign-in/microsoft/page.tsx +8 -0
  97. package/cli/src/app/f/sign-in/page.tsx +13 -0
  98. package/cli/src/app/f/sign-up/page.tsx +13 -0
  99. package/cli/src/app/f/test/feed/page.tsx +8 -0
  100. package/cli/src/app/f/test/file-upload/page.tsx +8 -0
  101. package/cli/src/app/f/test/layout.tsx +5 -0
  102. package/cli/src/app/f/test/page.tsx +8 -0
  103. package/cli/tailwind.config.ts +1 -1
  104. package/level2/cli/create-saas-kit-app/bin/index.cjs.js +4 -4
  105. package/level2/cli/create-saas-kit-app/bin/index.js +4 -4
  106. package/level2/fd-toolbox/api/api-client.cjs.js +1 -1
  107. package/level2/fd-toolbox/api/api-client.js +1 -1
  108. package/level2/fd-toolbox/api/api-path-names.cjs.js +2 -2
  109. package/level2/fd-toolbox/api/api-paths.cjs.js +1 -1
  110. package/level2/fd-toolbox/api/api-paths.js +1 -1
  111. package/level2/fd-toolbox/api/base-api.cjs.js +1 -1
  112. package/level2/fd-toolbox/api/base-api.js +1 -1
  113. package/level2/fd-toolbox/auth/login-states.cjs.js +1 -1
  114. package/level2/fd-toolbox/auth/login-states.js +1 -1
  115. package/level2/fd-toolbox/auth/session-storage.cjs.js +1 -1
  116. package/level2/fd-toolbox/auth/session-storage.js +1 -1
  117. package/level2/fd-toolbox/auth/tokens.cjs.js +1 -1
  118. package/level2/fd-toolbox/auth/tokens.js +1 -1
  119. package/level2/fd-toolbox/constants/constants.cjs.js +1 -1
  120. package/level2/fd-toolbox/constants/constants.js +1 -1
  121. package/level2/fd-toolbox/enums/enums.cjs.js +1 -1
  122. package/level2/fd-toolbox/enums/enums.js +1 -1
  123. package/level2/fd-toolbox/errors/error-handler.cjs.js +1 -1
  124. package/level2/fd-toolbox/errors/error-handler.js +1 -1
  125. package/level2/fd-toolbox/errors/errors.cjs.js +1 -1
  126. package/level2/fd-toolbox/errors/errors.js +1 -1
  127. package/level2/fd-toolbox/errors/problem-details.cjs.js +1 -1
  128. package/level2/fd-toolbox/errors/problem-details.js +1 -1
  129. package/level2/fd-toolbox/functions/value-checking-functions.cjs.js +1 -1
  130. package/level2/fd-toolbox/functions/value-checking-functions.js +1 -1
  131. package/level2/fd-toolbox/http/url/urls.cjs.js +1 -1
  132. package/level2/fd-toolbox/http/url/urls.js +1 -1
  133. package/level2/fd-toolbox/infra/env-config.cjs.js +2 -2
  134. package/level2/fd-toolbox/infra/env-config.js +2 -2
  135. package/level2/fd-toolbox/infra/env-functions.cjs.js +1 -1
  136. package/level2/fd-toolbox/infra/env-functions.js +1 -1
  137. package/level2/fd-toolbox/infra/env-schema.cjs.js +2 -2
  138. package/level2/fd-toolbox/infra/env-schema.js +2 -2
  139. package/level2/fd-toolbox/infra/env-store.cjs.js +1 -1
  140. package/level2/fd-toolbox/infra/env-store.js +1 -1
  141. package/level2/fd-toolbox/lib/environments.cjs.js +1 -1
  142. package/level2/fd-toolbox/lib/environments.js +1 -1
  143. package/level2/fd-toolbox/lib/utils.cjs.js +1 -1
  144. package/level2/fd-toolbox/lib/utils.js +1 -1
  145. package/level2/fd-toolbox/local-storage/local-storage.cjs.js +1 -1
  146. package/level2/fd-toolbox/local-storage/local-storage.js +1 -1
  147. package/level2/fd-toolbox/logging/loggers.cjs.js +1 -1
  148. package/level2/fd-toolbox/logging/loggers.js +1 -1
  149. package/level2/fd-toolbox/notifications.cjs.js +2 -2
  150. package/level2/fd-toolbox/notifications.js +2 -2
  151. package/level2/fd-toolbox/odata/odata-constants.cjs.js +1 -1
  152. package/level2/fd-toolbox/odata/odata-constants.js +1 -1
  153. package/level2/fd-toolbox/odata/odatas.cjs.js +1 -1
  154. package/level2/fd-toolbox/odata/odatas.js +1 -1
  155. package/level2/fd-toolbox/odata/services/odata-filters.cjs.js +1 -1
  156. package/level2/fd-toolbox/odata/services/odata-filters.js +1 -1
  157. package/level2/fd-toolbox/paths/paths-names.cjs.js +2 -2
  158. package/level2/fd-toolbox/paths/paths-names.js +1 -1
  159. package/level2/fd-toolbox/routing/login-routers.cjs.js +1 -1
  160. package/level2/fd-toolbox/routing/login-routers.js +1 -1
  161. package/level2/fd-toolbox/routing/paths.cjs.js +1 -1
  162. package/level2/fd-toolbox/routing/paths.js +1 -1
  163. package/level2/fd-toolbox/strings/strings-constants.cjs.js +1 -1
  164. package/level2/fd-toolbox/strings/strings-constants.js +1 -1
  165. package/level2/fd-toolbox/strings/strings.cjs.js +1 -1
  166. package/level2/fd-toolbox/strings/strings.js +1 -1
  167. package/level2/fd-toolbox/types/ensure-type.cjs.js +1 -1
  168. package/level2/fd-toolbox/types/ensure-type.js +1 -1
  169. package/level2/fd-toolbox-core/core/name-of.cjs.js +1 -1
  170. package/level2/fd-toolbox-core/core/name-of.js +1 -1
  171. package/level2/fd-toolbox-core/types/resource-with-id.cjs.js +1 -1
  172. package/level2/fd-toolbox-core/types/resource-with-id.js +1 -1
  173. package/package.json +23 -15
@@ -0,0 +1,14 @@
1
+ import {
2
+ deleteResourceRoute,
3
+ getResourceRoute,
4
+ postResourceRoute,
5
+ putResourceRoute,
6
+ } from "@meta/server/basic-crud/crud-api";
7
+
8
+ export const PUT = putResourceRoute;
9
+
10
+ export const GET = getResourceRoute;
11
+
12
+ export const POST = postResourceRoute;
13
+
14
+ export const DELETE = deleteResourceRoute;
@@ -0,0 +1,3 @@
1
+ import { upsertResourceRoute } from "@meta/server/basic-crud/crud-api";
2
+
3
+ export const POST = upsertResourceRoute;
@@ -0,0 +1,7 @@
1
+ import { logDeleteRoute, logGetRoute, logPostRoute } from "@server/fd/fd-toolbox-web/logging/log-api";
2
+
3
+ export const POST = logPostRoute;
4
+
5
+ export const GET = logGetRoute;
6
+
7
+ export const DELETE = logDeleteRoute;
@@ -0,0 +1,14 @@
1
+ import {
2
+ otheruserIdGetRoute,
3
+ otheruserIdPostRoute,
4
+ otheruserIdPutRoute,
5
+ otheruserIdDeleteRoute,
6
+ } from "@server/otheruser/id/otheruser-id-api";
7
+
8
+ export const GET = otheruserIdGetRoute;
9
+
10
+ export const POST = otheruserIdPostRoute;
11
+
12
+ export const PUT = otheruserIdPutRoute;
13
+
14
+ export const DELETE = otheruserIdDeleteRoute;
@@ -0,0 +1,7 @@
1
+ import { otheruserGetRoute, otheruserPostRoute, otheruserPutRoute } from "@server/otheruser/otheruser-api";
2
+
3
+ export const POST = otheruserPostRoute;
4
+
5
+ export const PUT = otheruserPutRoute;
6
+
7
+ export const GET = otheruserGetRoute;
@@ -0,0 +1,3 @@
1
+ import { forgotpasswordPostRoute } from "@server/password/forgotpassword/forgotpassword-api";
2
+
3
+ export const POST = forgotpasswordPostRoute;
@@ -0,0 +1,3 @@
1
+ import { resetpasswordPostRoute } from "@server/password/resetpassword/resetpassword-api";
2
+
3
+ export const POST = resetpasswordPostRoute;
@@ -0,0 +1,4 @@
1
+ import { paymentMethodGetRoute, paymentMethodPutRoute } from "@server/payment/method/payment-method-api";
2
+
3
+ export const PUT = paymentMethodPutRoute;
4
+ export const GET = paymentMethodGetRoute;
@@ -0,0 +1,3 @@
1
+ import { registerPaymentCustomerAndCreateWorkspaceSubscriptionApi } from "@server/payments/payments/payments-api";
2
+
3
+ export const POST = registerPaymentCustomerAndCreateWorkspaceSubscriptionApi;
@@ -0,0 +1,3 @@
1
+ import { paymentVerifyFailPostRoute } from "@server/payment/verify-fail/payment-verify-fail-api";
2
+
3
+ export const POST = paymentVerifyFailPostRoute;
@@ -0,0 +1,3 @@
1
+ import { paymentVerifySuccessPostRoute } from "@server/payment/verify-success/payment-verify-success";
2
+
3
+ export const POST = paymentVerifySuccessPostRoute;
@@ -0,0 +1,3 @@
1
+ import { preloadApi } from "@server/fd/fd-toolbox-web/controllers/preload-api";
2
+
3
+ export const GET = preloadApi;
@@ -0,0 +1,11 @@
1
+ import { getSearchableResources } from "@meta/server/resources/searchable-resources";
2
+ import { apiBadRequestResponse, apiOkResponse } from "@meta/server/web/responses";
3
+ import { httpApiWrapper } from "@meta/server/web/http-api-wrapper";
4
+
5
+ export const GET = httpApiWrapper(async () => {
6
+ const resourceNames = Array.from((await getSearchableResources()).keys());
7
+
8
+ if (!resourceNames) return apiBadRequestResponse([]);
9
+
10
+ return apiOkResponse(resourceNames);
11
+ });
@@ -0,0 +1,35 @@
1
+ import { SearchResult } from "@fd-app-toolbox/resources/search-result.resource";
2
+ import { searchResultParams } from "@fd-toolbox/constants/search-result-constants";
3
+ import { getSearchableResourceResult, getSearchScreensResult } from "@server/search/search-result";
4
+ import { SearchableResourceResult } from "@fd-app-toolbox/models/searchable-resource-result";
5
+ import { ScreensResult } from "@fd-app-toolbox/models/screens-result";
6
+ import { httpApiWrapper } from "@meta/server/web/http-api-wrapper";
7
+ import { apiOkResponse } from "@meta/server/web/responses";
8
+ import { isPromiseFulfilled } from "@fd-toolbox/lib/utils";
9
+
10
+ export const GET = httpApiWrapper(async (req: Request) => {
11
+ const url = new URL(req.url);
12
+ const querySearch = url.searchParams.get(searchResultParams.querySearch) ?? "";
13
+ const filterSearchParam = url.searchParams.get(searchResultParams.filterSearch);
14
+
15
+ const filterSearch = filterSearchParam ? filterSearchParam.split(",") : [];
16
+
17
+ const searchResourceResultPromise = getSearchableResourceResult(
18
+ querySearch,
19
+ filterSearch,
20
+ ) satisfies Promise<SearchableResourceResult[]>;
21
+
22
+ const searchScreensResultPromise = getSearchScreensResult(querySearch, filterSearch) satisfies Promise<
23
+ ScreensResult[]
24
+ >;
25
+
26
+ const [searchResourceResult, searchScreensResult] = await Promise.allSettled([
27
+ searchResourceResultPromise,
28
+ searchScreensResultPromise,
29
+ ]);
30
+
31
+ return apiOkResponse<SearchResult>({
32
+ searchableResources: isPromiseFulfilled(searchResourceResult) ? searchResourceResult.value : [],
33
+ screens: isPromiseFulfilled(searchScreensResult) ? searchScreensResult.value : [],
34
+ });
35
+ });
@@ -0,0 +1,3 @@
1
+ import { signInApi } from "@server/auth/sign-in-api";
2
+
3
+ export const POST = signInApi;
@@ -0,0 +1,3 @@
1
+ import { signOutGetRoute } from "@server/auth/sign-out-api";
2
+
3
+ export const GET = signOutGetRoute;
@@ -0,0 +1,3 @@
1
+ import { signUpApi } from "@server/auth/sign-up-api";
2
+
3
+ export const POST = signUpApi;
@@ -0,0 +1,3 @@
1
+ import { subscriptionCancelPostRoute } from "@server/subscription/cancel/subscription-cancel-api";
2
+
3
+ export const POST = subscriptionCancelPostRoute;
@@ -0,0 +1,3 @@
1
+ import { subscriptionCreatePostRoute } from "@server/subscription/create/subscription-create-api";
2
+
3
+ export const POST = subscriptionCreatePostRoute;
@@ -0,0 +1,3 @@
1
+ import { subscriptionUpdatePostRoute } from "@server/subscription/update/subscription-update-api";
2
+
3
+ export const POST = subscriptionUpdatePostRoute;
@@ -0,0 +1,3 @@
1
+ import { uiMetaRoute } from "@meta/server/ui/ui-metas-api";
2
+
3
+ export const GET = uiMetaRoute;
@@ -0,0 +1,3 @@
1
+ import { uiMetasRoute } from "@meta/server/ui/ui-metas-api";
2
+
3
+ export const GET = uiMetasRoute;
@@ -0,0 +1,3 @@
1
+ import { permissionRoute } from "@server/fd/fd-toolbox-web/permissions/permission-api";
2
+
3
+ export const GET = permissionRoute;
@@ -0,0 +1,5 @@
1
+ import { visibleWorkspaceGetRoute, visibleWorkspacePostRoute } from "@server/workspace/visible-workspace-api";
2
+
3
+ export const POST = visibleWorkspacePostRoute;
4
+
5
+ export const GET = visibleWorkspaceGetRoute;
@@ -0,0 +1,5 @@
1
+ import { workspaceGetRoute, workspacePostRoute } from "@server/workspace/workspace-api";
2
+
3
+ export const GET = workspaceGetRoute;
4
+
5
+ export const POST = workspacePostRoute;
@@ -0,0 +1,8 @@
1
+ import { httpWrapper } from "@server/web/http-wrapper";
2
+ import DashboardPage from "@client/pages/dashboard-page/DashbordPage";
3
+
4
+ const Page = httpWrapper(async () => {
5
+ return <DashboardPage />;
6
+ });
7
+
8
+ export default Page;
@@ -0,0 +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;
@@ -0,0 +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;
@@ -0,0 +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;
@@ -0,0 +1,5 @@
1
+ import { PrivateLayout } from "@fd-app-toolbox/server/layout/private-layout/PrivateLayout";
2
+
3
+ export default async function Layout({ children }: { children: React.ReactNode }) {
4
+ return <PrivateLayout>{children}</PrivateLayout>;
5
+ }
@@ -0,0 +1,8 @@
1
+ import { httpWrapper } from "@server/web/http-wrapper";
2
+ import LeadsViewPage from "@client/pages/leads-viw-page/LeadsViewPage";
3
+
4
+ const Page = httpWrapper(async () => {
5
+ return <LeadsViewPage />;
6
+ });
7
+
8
+ export default Page;
@@ -0,0 +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;
@@ -0,0 +1,8 @@
1
+ import { httpWrapper } from "@server/web/http-wrapper";
2
+ import PreloadPage from "@client/pages/preload-page/PreloadPage";
3
+
4
+ const Page = httpWrapper(async () => {
5
+ return <PreloadPage />;
6
+ });
7
+
8
+ export default Page;
@@ -0,0 +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;
@@ -0,0 +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;
@@ -0,0 +1,8 @@
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
+ return <ViewPage searchParams={searchParams} />;
6
+ });
7
+
8
+ export default Page;
@@ -0,0 +1,9 @@
1
+ import { httpWrapper } from "@server/web/http-wrapper";
2
+ const Page = httpWrapper(
3
+ async () => {
4
+ return null;
5
+ },
6
+ { isAnonymous: true },
7
+ );
8
+
9
+ export default Page;
@@ -0,0 +1,8 @@
1
+ import { httpWrapper } from "@server/web/http-wrapper";
2
+ import EditPasswordPage from "@client/pages/edit-password-page/EditPasswordPage";
3
+
4
+ const Page = httpWrapper(async () => {
5
+ return <EditPasswordPage />;
6
+ });
7
+
8
+ export default Page;
@@ -0,0 +1,13 @@
1
+ import ForgotPasswordPage from "@client/pages/forgot-password-page/ForgotPasswordPage";
2
+ import { httpWrapper } from "@server/web/http-wrapper";
3
+
4
+ export const dynamic = "force-dynamic";
5
+
6
+ const Page = httpWrapper(
7
+ async () => {
8
+ return <ForgotPasswordPage />;
9
+ },
10
+ { isAnonymous: true },
11
+ );
12
+
13
+ export default Page;
@@ -0,0 +1,16 @@
1
+ import ResetPasswordPage from "@client/pages/reset-password-page/ResetPasswordPage";
2
+ import { httpWrapper } from "@server/web/http-wrapper";
3
+ import { Suspense } from "react";
4
+
5
+ const Page = httpWrapper(
6
+ async () => {
7
+ return (
8
+ <Suspense>
9
+ <ResetPasswordPage />
10
+ </Suspense>
11
+ );
12
+ },
13
+ { isAnonymous: true },
14
+ );
15
+
16
+ export default Page;
@@ -0,0 +1,8 @@
1
+ import { httpWrapper } from "@server/web/http-wrapper";
2
+ import MicrosoftPage from "@client/pages/microsoft-page/MicrosoftPage";
3
+
4
+ const Page = httpWrapper(async () => {
5
+ return <MicrosoftPage />;
6
+ });
7
+
8
+ export default Page;
@@ -0,0 +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
+ { isAnonymous: true },
11
+ );
12
+
13
+ export default Page;
@@ -0,0 +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
+ { isAnonymous: true },
11
+ );
12
+
13
+ export default Page;
@@ -0,0 +1,8 @@
1
+ import { httpWrapper } from "@server/web/http-wrapper";
2
+ import FeedPage from "@client/pages/feed-page/FeedPage";
3
+
4
+ const Page = httpWrapper(async () => {
5
+ return <FeedPage />;
6
+ });
7
+
8
+ export default Page;
@@ -0,0 +1,8 @@
1
+ import { httpWrapper } from "@server/web/http-wrapper";
2
+ import FileUploadPage from "@client/pages/file-upload-page/FileUploadPage";
3
+
4
+ const Page = httpWrapper(async () => {
5
+ return <FileUploadPage />;
6
+ });
7
+
8
+ export default Page;
@@ -0,0 +1,5 @@
1
+ import TestLayout from "@client/pages/test-layout/TestLayout";
2
+
3
+ export default async function Layout({ children }: { children: React.ReactNode }) {
4
+ return <TestLayout>{children}</TestLayout>;
5
+ }
@@ -0,0 +1,8 @@
1
+ import { httpWrapper } from "@server/web/http-wrapper";
2
+ import TestPage from "@client/pages/test-page/TestPage";
3
+
4
+ const Page = httpWrapper(async () => {
5
+ return <TestPage />;
6
+ });
7
+
8
+ export default Page;
@@ -7,7 +7,7 @@ config.content = [
7
7
  "./components/**/*.{ts,tsx}",
8
8
  "./app/**/*.{ts,tsx}",
9
9
  "./src/**/*.{ts,tsx}",
10
- "./node_modules/@fernir2/saas-kit/src/**/*.{js,ts,jsx,tsx}",
10
+ "./node_modules/@fernir2/saas-kit/**/*.{js,ts,jsx,tsx}",
11
11
  ];
12
12
 
13
13
  export default config;
@@ -5,8 +5,8 @@
5
5
  var child_process = require('child_process');
6
6
  var fs = require('fs');
7
7
  var node_url = require('node:url');
8
- var _0x27ff26 = require('path');
9
- var _0x4b651e = require('node:fs');
8
+ var _0x1d92c9 = require('path');
9
+ var _0x2e6757 = require('node:fs');
10
10
  var createAppConstants = require('../../../../base-repo/constants/create-app-constants.cjs.js');
11
11
  var loggers = require('../../../fd-toolbox/logging/loggers.cjs.js');
12
12
  var constants = require('../../../fd-toolbox/constants/constants.cjs.js');
@@ -35,6 +35,6 @@ function _interopNamespaceDefault(e) {
35
35
  return Object.freeze(n);
36
36
  }
37
37
 
38
- var _0x27ff26__namespace = /*#__PURE__*/_interopNamespaceDefault(_0x27ff26);
38
+ var _0x1d92c9__namespace = /*#__PURE__*/_interopNamespaceDefault(_0x1d92c9);
39
39
 
40
- 'use strict';var __defProp=Object['defineProperty'],__name=(_0x3c6082,_0x47e985)=>__defProp(_0x3c6082,'name',{'value':_0x47e985,'configurable':!![]});const requiredNodeVersion='v18.0.0';process['version']<requiredNodeVersion&&(loggers.logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](-0x1*0x1f4c+-0x432+0x237f));const filename=node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('level2/cli/create-saas-kit-app/bin/index.cjs.js', document.baseURI).href))),sourceDir='../../../../',binDir=_0x27ff26__namespace['dirname'](filename),repoRoot=_0x27ff26__namespace['resolve'](binDir,sourceDir),envLocalPath=_0x27ff26__namespace['join'](binDir,''+sourceDir+projectPaths.folders['cli']+'/.env'),envTemplate=_0x4b651e['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[projectPaths.folders['cli']+'/constants'];function runCommand(_0xaf9a4b,_0x32795d){loggers.logInfoRaw('Executing:\x20'+_0xaf9a4b);try{child_process.execSync(_0xaf9a4b,{'stdio':'inherit','cwd':_0x32795d??process['cwd']()});}catch(_0x1851f0){const _0xc51ddc=_0x1851f0 instanceof Error?_0x1851f0['message']:'Unknown\x20error';loggers.logStringError('Error\x20executing:\x20'+_0xaf9a4b),loggers.logStringError(_0xc51ddc),process['exit'](0x6e*0x1a+0x14*-0x1df+0x1a41);}}__name(runCommand,'runCommand');function checkTargetFolder(_0xd8be02){fs.existsSync(_0xd8be02)&&(loggers.logStringError('Error:\x20Folder\x20\x22'+_0x27ff26__namespace['basename'](_0xd8be02)+'\x22\x20already\x20exists.'),process['exit'](0x92d+0x35*0x4f+-0x5*0x51b));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x4911dc=_0x27ff26__namespace['resolve'](repoRoot,'package.json'),_0x450174=JSON['parse'](_0x4b651e['readFileSync'](_0x4911dc,'utf-8'));return String(_0x450174['devDependencies']?.['next']??_0x450174['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');function createNextProject(_0x4b2478,_0x2970c6){loggers.logInfoRaw('Creating\x20Next.js\x20project...');const _0xef31bb=getCreateNextAppVersion(),_0x13f885=['npx\x20create-next-app@'+_0xef31bb+'\x20\x22'+_0x4b2478+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git']['join']('\x20');runCommand(_0x13f885,_0x27ff26__namespace['dirname'](_0x2970c6)),loggers.logInfoRaw('Next.js\x20project\x20created!');}__name(createNextProject,'createNextProject');async function createEnvFile(_0x4c324f){loggers.logInfoRaw('Creating\x20.env\x20file\x20with\x20default\x20values...');const _0x24e72f=_0x27ff26__namespace['join'](_0x4c324f,'.env');try{await fs.promises['writeFile'](_0x24e72f,envTemplate,'utf8'),loggers.logInfoRaw('.env\x20file\x20created\x20with\x20values!');}catch(_0x3523e4){const _0x196865=_0x3523e4 instanceof Error?_0x3523e4['message']:'Unknown\x20error';loggers.logStringError('Error\x20creating\x20.env\x20file:'),loggers.logStringError(_0x196865);throw _0x3523e4;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x4666d9){const _0x547352=_0x27ff26__namespace['join'](_0x4666d9,'package.json'),_0x1b71b1=_0x27ff26__namespace['join'](repoRoot,projectPaths.folders['cli']+'/package-template.json');try{const _0x2d0c89=JSON['parse'](await fs.promises['readFile'](_0x547352,'utf8')),_0x546d0b=_0x2d0c89['name'],_0x3395d0=JSON['parse'](await fs.promises['readFile'](_0x1b71b1,'utf8')),_0x58ee26={..._0x3395d0,'name':_0x546d0b};await fs.promises['writeFile'](_0x547352,JSON['stringify'](_0x58ee26,null,0x430*0x9+-0x1a7+0x2407*-0x1)+'\x0a','utf8');}catch(_0x42c966){const _0x5e8390=_0x42c966 instanceof Error?_0x42c966['message']:'Unknown\x20error';loggers.logStringError('Error\x20overriding\x20package.json:'),loggers.logStringError(_0x5e8390);throw _0x42c966;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x43a795){const _0x59f3f0=/(import\s+[^'"]*from\s+["'])([^"']+)(["'])/g;return _0x43a795['replace'](_0x59f3f0,(_0x57f42e,_0x791ab0,_0x2b3c7d,_0x2f9353)=>{if(!_0x2b3c7d['startsWith'](aliases.aliasSymbols['atSign'])||_0x2b3c7d['startsWith'](packages.npmPackages['saasKit']))return _0x57f42e;if(_0x2b3c7d['startsWith'](aliases.aliasSymbols['atSign']+projectPaths.folders['server'])||_0x2b3c7d['includes']('/'+projectPaths.folders['server']+'/'))return ''+_0x791ab0+packages.npmPackages['saasKitServer']+_0x2f9353;return ''+_0x791ab0+packages.npmPackages['saasKit']+_0x2f9353;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x21fa74){loggers.logInfoRaw('Copying\x20'+constants.projectName+'\x20files...');for(const _0x2476b7 of path.allFilesToCopy){const _0x18fae1=projectPaths.folders['cli']+'/'+_0x2476b7,_0x11116f=_0x27ff26__namespace['join'](repoRoot,_0x18fae1),_0x57d861=replaceToolsFolder(_0x2476b7),_0x6faf6b=_0x27ff26__namespace['join'](_0x21fa74,_0x57d861);if(fs.existsSync(_0x11116f)){const _0x47af47=await fs.promises['stat'](_0x11116f);_0x47af47['isDirectory']()?await copyDirectoryContents(_0x11116f,_0x6faf6b):await copyAndProcessFile(_0x11116f,_0x6faf6b);}else loggers.logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0x18fae1);}loggers.logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0x48e02d){let _0x3de813=_0x48e02d;for(const [_0x3b045a,_0x491ac7]of Object['entries'](createAppConstants.toolsFoldersToReplace)){if(_0x3de813['startsWith'](_0x3b045a)&&ensureType.isWithIndexer(_0x491ac7)){const _0x2c1482=_0x491ac7;for(const _0x3a7945 in _0x2c1482){const _0x27ab68=_0x2c1482[_0x3a7945];ensureType.isString(_0x27ab68)&&(_0x3de813=_0x3de813['replace'](_0x3a7945,_0x27ab68));}break;}}return _0x3de813;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x405204,_0x400375,_0x202094=![]){const _0x2093dc=_0x27ff26__namespace['relative'](_0x400375,_0x405204),_0x144f81=_0x2093dc['split'](_0x27ff26__namespace['sep']),_0x22f98c=_0x27ff26__namespace['relative'](repoRoot,_0x405204)['replace'](/\\/g,'/');return _0x202094&&foldersToIgnore['includes'](_0x22f98c)||foldersToIgnore['some'](_0x2c3f7b=>_0x144f81['some'](_0x5c6003=>_0x5c6003===_0x2c3f7b));}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x349753,_0x1c8277){!fs.existsSync(_0x1c8277)&&fs.mkdirSync(_0x1c8277,{'recursive':!![]});try{const _0x336f2f=await fs.promises['readdir'](_0x349753,{'withFileTypes':!![]});for(const _0x34fff3 of _0x336f2f){const _0x25c18b=_0x27ff26__namespace['join'](_0x349753,_0x34fff3['name']),_0x3356ad=_0x27ff26__namespace['join'](_0x1c8277,_0x34fff3['name']);!shouldIgnorePath(_0x25c18b,_0x349753,_0x34fff3['isDirectory']())&&(_0x34fff3['isDirectory']()?await copyDirectoryContents(_0x25c18b,_0x3356ad):await copyAndProcessFile(_0x25c18b,_0x3356ad));}}catch(_0x383f8e){const _0xb7c08=_0x383f8e instanceof Error?_0x383f8e['message']:'Unknown\x20error';loggers.logStringError('Error\x20reading\x20directory\x20'+_0x349753+':\x20'+_0xb7c08);throw _0x383f8e;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x4255b4,_0x422380){const _0x2985c6=_0x27ff26__namespace['dirname'](_0x422380);!fs.existsSync(_0x2985c6)&&fs.mkdirSync(_0x2985c6,{'recursive':!![]});const _0xaad85e=await fs.promises['stat'](_0x4255b4);if(_0xaad85e['isDirectory']())await copyDirectoryContents(_0x4255b4,_0x422380);else {const _0x403a9e=await fs.promises['readFile'](_0x4255b4,'utf8'),_0x34ec2d=replaceImports(_0x403a9e);await fs.promises['writeFile'](_0x422380,_0x34ec2d,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x5cac3f){for(const _0x714141 of createAppConstants.additionalFoldersToCreate){const _0x265ded=_0x27ff26__namespace['join'](_0x5cac3f,_0x714141);!fs.existsSync(_0x265ded)&&(fs.mkdirSync(_0x265ded,{'recursive':!![]}),loggers.logInfoRaw('Created\x20folder:\x20'+_0x714141));}loggers.logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function main(){const _0x78392=process['argv']['slice'](-0x253a+-0x2629+0x4b65);_0x78392['length']<-0x1*0x1204+0xa7e*0x1+-0x29*-0x2f&&(loggers.logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](-0x17c9+-0x9b1*0x3+0x15b*0x27));const _0x5a8601=_0x78392[0x2b*0xad+0x268a+-0x4398],_0x2c40b7=_0x27ff26__namespace['resolve'](process['cwd'](),_0x5a8601);loggers.logInfoRaw('\x0aCreating\x20'+constants.projectName+'\x20project\x20\x22'+_0x5a8601+'\x22...\x0a');try{checkTargetFolder(_0x2c40b7),createNextProject(_0x5a8601,_0x2c40b7),await copyProjectFiles(_0x2c40b7),await overridePackageJson(_0x2c40b7),createAdditionalFolders(_0x2c40b7),await createEnvFile(_0x2c40b7),await updateLayoutTitle(_0x2c40b7,_0x5a8601),loggers.logInfoRaw('\x0a'+constants.projectName+'\x20project\x20\x22'+_0x5a8601+'\x22\x20is\x20ready!'),loggers.logInfoRaw('Next\x20steps:'),loggers.logInfoRaw('\x20\x20cd\x20'+_0x5a8601),loggers.logInfoRaw('\x20\x20npm\x20run\x20prod'),loggers.logInfoRaw('\x20\x20npm\x20start');}catch(_0x3dfde1){const _0x13f5f9=_0x3dfde1 instanceof Error?_0x3dfde1['message']:'Unknown\x20error';loggers.logStringError('Error:'),loggers.logStringError(_0x13f5f9),fs.existsSync(_0x2c40b7)&&(loggers.logInfoRaw('Cleaning\x20up...'),fs.rmSync(_0x2c40b7,{'recursive':!![],'force':!![]})),process['exit'](0x341+-0x1c75+0x1935);}}__name(main,'main');async function updateLayoutTitle(_0xb0e6af,_0x1606f6){const _0x22dff2=_0x27ff26__namespace['join'](_0xb0e6af,'src/app/layout.tsx');if(!fs.existsSync(_0x22dff2))throw errors.createError('layout.tsx\x20not\x20found\x20at\x20'+_0x22dff2+',\x20cannot\x20update\x20title.');let _0x5de474=await fs.promises['readFile'](_0x22dff2,'utf8');const _0x8d9c49=/"SaaS Kit"/g;if(!_0x8d9c49['test'](_0x5de474))throw errors.createError('SaaS\x20Kit\x20not\x20found\x20in\x20layout.tsx,\x20cannot\x20update\x20title.');_0x5de474=_0x5de474['replace'](_0x8d9c49,'\x22'+_0x1606f6+'\x22'),await fs.promises['writeFile'](_0x22dff2,_0x5de474,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle'),main()['catch'](_0x280cf7=>{const _0x4ca1a=_0x280cf7 instanceof Error?_0x280cf7['message']:'Unknown\x20error';loggers.logStringError('Unhandled\x20error:'),loggers.logStringError(_0x4ca1a),process['exit'](0x966+0x124e+0x3f5*-0x7);});
40
+ 'use strict';var __defProp=Object['defineProperty'],__name=(_0x4a1678,_0x1b6081)=>__defProp(_0x4a1678,'name',{'value':_0x1b6081,'configurable':!![]});const requiredNodeVersion='v18.0.0';process['version']<requiredNodeVersion&&(loggers.logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](0x9*-0x139+-0x264b*-0x1+-0x1b49));const filename=node_url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('level2/cli/create-saas-kit-app/bin/index.cjs.js', document.baseURI).href))),sourceDir='../../../../',binDir=_0x1d92c9__namespace['dirname'](filename),repoRoot=_0x1d92c9__namespace['resolve'](binDir,sourceDir),envLocalPath=_0x1d92c9__namespace['join'](binDir,''+sourceDir+projectPaths.folders['cli']+'/'+projectPaths.files['env']),envTemplate=_0x2e6757['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[projectPaths.folders['cli']+'/constants'];function runCommand(_0x46872e,_0x22e818){loggers.logInfoRaw('Executing:\x20'+_0x46872e);try{child_process.execSync(_0x46872e,{'stdio':'inherit','cwd':_0x22e818??process['cwd']()});}catch(_0x40711e){const _0x360f3c=_0x40711e instanceof Error?_0x40711e['message']:'Unknown\x20error';loggers.logStringError('Error\x20executing:\x20'+_0x46872e),loggers.logStringError(_0x360f3c),process['exit'](-0x619*0x3+-0x10bf*0x1+-0x230b*-0x1);}}__name(runCommand,'runCommand');function checkTargetFolder(_0x18c138){fs.existsSync(_0x18c138)&&(loggers.logStringError('Error:\x20Folder\x20\x22'+_0x1d92c9__namespace['basename'](_0x18c138)+'\x22\x20already\x20exists.'),process['exit'](-0x20e*0xc+-0x2032+-0xcd*-0x47));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x544e94=_0x1d92c9__namespace['resolve'](repoRoot,'package.json'),_0x1a27a7=JSON['parse'](_0x2e6757['readFileSync'](_0x544e94,'utf-8'));return String(_0x1a27a7['devDependencies']?.['next']??_0x1a27a7['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');function createNextProject(_0x2ca61b,_0x1f2810){loggers.logInfoRaw('Creating\x20Next.js\x20project...');const _0x1e6d46=getCreateNextAppVersion(),_0x424ecd=['npx\x20create-next-app@'+_0x1e6d46+'\x20\x22'+_0x2ca61b+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git']['join']('\x20');runCommand(_0x424ecd,_0x1d92c9__namespace['dirname'](_0x1f2810)),loggers.logInfoRaw('Next.js\x20project\x20created!');const _0x3d667b=_0x1d92c9__namespace['join'](_0x1f2810,'next.config.ts');_0x2e6757['existsSync'](_0x3d667b)&&(_0x2e6757['rmSync'](_0x3d667b),loggers.logInfoRaw('Removed\x20default\x20next.config.ts'));}__name(createNextProject,'createNextProject');async function createEnvFile(_0x2bc0f0){loggers.logInfoRaw('Creating\x20.env\x20file\x20with\x20default\x20values...');const _0x59eefb=_0x1d92c9__namespace['join'](_0x2bc0f0,'.env');try{await fs.promises['writeFile'](_0x59eefb,envTemplate,'utf8'),loggers.logInfoRaw('.env\x20file\x20created\x20with\x20values!');}catch(_0x33a6f9){const _0x184e54=_0x33a6f9 instanceof Error?_0x33a6f9['message']:'Unknown\x20error';loggers.logStringError('Error\x20creating\x20.env\x20file:'),loggers.logStringError(_0x184e54);throw _0x33a6f9;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x4b44fd){const _0x8bd37a=_0x1d92c9__namespace['join'](_0x4b44fd,'package.json'),_0x584a4c=_0x1d92c9__namespace['join'](repoRoot,projectPaths.folders['cli']+'/package-template.json');try{const _0x4d9dbb=JSON['parse'](await fs.promises['readFile'](_0x8bd37a,'utf8')),_0x1af06d=_0x4d9dbb['name'],_0x329f38=JSON['parse'](await fs.promises['readFile'](_0x584a4c,'utf8')),_0x5e8332={..._0x329f38,'name':_0x1af06d};await fs.promises['writeFile'](_0x8bd37a,JSON['stringify'](_0x5e8332,null,-0x5*0x1f9+-0x4d4+-0x47*-0x35)+'\x0a','utf8');}catch(_0x569a56){const _0x2a1432=_0x569a56 instanceof Error?_0x569a56['message']:'Unknown\x20error';loggers.logStringError('Error\x20overriding\x20package.json:'),loggers.logStringError(_0x2a1432);throw _0x569a56;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x303c6f){const _0x4c660f=/(import\s+)([^'"]+)(\s+from\s+["'])([^"']+)(["'])/g;return _0x303c6f['replace'](_0x4c660f,(_0x1156b7,_0x1884cf,_0x3e3c5f,_0x1fbaac,_0x13bc08,_0x17aab5)=>{if(!_0x13bc08['startsWith'](aliases.aliasSymbols['atSign'])||_0x13bc08['startsWith'](packages.npmPackages['saasKit']))return _0x1156b7;let _0x413fd6;_0x13bc08['startsWith'](aliases.aliasSymbols['atSign']+projectPaths.folders['server'])||_0x13bc08['includes']('/'+projectPaths.folders['server']+'/')?_0x413fd6=packages.npmPackages['saasKitServer']:_0x413fd6=packages.npmPackages['saasKit'];let _0x284d0f=_0x3e3c5f['trim']();return !_0x284d0f['startsWith']('{')&&(_0x284d0f='{\x20'+_0x284d0f+'\x20}'),''+_0x1884cf+_0x284d0f+_0x1fbaac+_0x413fd6+_0x17aab5;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x42b918){loggers.logInfoRaw('Copying\x20'+constants.projectName+'\x20files...');for(const _0x5808d3 of path.allFilesToCopy){const _0xac74c3=projectPaths.folders['cli']+'/'+_0x5808d3,_0x51d2dc=_0x1d92c9__namespace['join'](repoRoot,_0xac74c3),_0x44a9f7=replaceToolsFolder(_0x5808d3),_0x15973d=_0x1d92c9__namespace['join'](_0x42b918,_0x44a9f7);if(fs.existsSync(_0x51d2dc)){const _0x95f374=await fs.promises['stat'](_0x51d2dc);_0x95f374['isDirectory']()?await copyDirectoryContents(_0x51d2dc,_0x15973d):await copyAndProcessFile(_0x51d2dc,_0x15973d);}else loggers.logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0xac74c3);}loggers.logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0x3bc118){let _0x13d924=_0x3bc118;for(const [_0x4ba757,_0x1c7f37]of Object['entries'](createAppConstants.toolsFoldersToReplace)){if(_0x13d924['startsWith'](_0x4ba757)&&ensureType.isWithIndexer(_0x1c7f37)){const _0x6dd500=_0x1c7f37;for(const _0xb6653b in _0x6dd500){const _0x5967a1=_0x6dd500[_0xb6653b];ensureType.isString(_0x5967a1)&&(_0x13d924=_0x13d924['replace'](_0xb6653b,_0x5967a1));}break;}}return _0x13d924;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x313fda,_0xc3c852,_0x13c784=![]){const _0x35c31e=_0x1d92c9__namespace['relative'](_0xc3c852,_0x313fda),_0xdad243=_0x35c31e['split'](_0x1d92c9__namespace['sep']),_0x56c895=_0x1d92c9__namespace['relative'](repoRoot,_0x313fda)['replace'](/\\/g,'/');return _0x13c784&&foldersToIgnore['includes'](_0x56c895)||foldersToIgnore['some'](_0x5b9049=>_0xdad243['some'](_0x3f276a=>_0x3f276a===_0x5b9049));}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x3334f8,_0x1c0b77){!fs.existsSync(_0x1c0b77)&&fs.mkdirSync(_0x1c0b77,{'recursive':!![]});try{const _0x2885ce=await fs.promises['readdir'](_0x3334f8,{'withFileTypes':!![]});for(const _0x540512 of _0x2885ce){const _0x447da1=_0x1d92c9__namespace['join'](_0x3334f8,_0x540512['name']),_0x374383=_0x1d92c9__namespace['join'](_0x1c0b77,_0x540512['name']);!shouldIgnorePath(_0x447da1,_0x3334f8,_0x540512['isDirectory']())&&(_0x540512['isDirectory']()?await copyDirectoryContents(_0x447da1,_0x374383):await copyAndProcessFile(_0x447da1,_0x374383));}}catch(_0x27b765){const _0x58a935=_0x27b765 instanceof Error?_0x27b765['message']:'Unknown\x20error';loggers.logStringError('Error\x20reading\x20directory\x20'+_0x3334f8+':\x20'+_0x58a935);throw _0x27b765;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0xc844d7,_0x310f7c){const _0x540dd5=_0x1d92c9__namespace['dirname'](_0x310f7c);!fs.existsSync(_0x540dd5)&&fs.mkdirSync(_0x540dd5,{'recursive':!![]});const _0xc542bb=await fs.promises['stat'](_0xc844d7);if(_0xc542bb['isDirectory']())await copyDirectoryContents(_0xc844d7,_0x310f7c);else {const _0x4ac774=_0x1d92c9__namespace['extname'](_0xc844d7)['toLowerCase'](),_0x247b57=['.ico','.png','.jpg'];if(_0x247b57['includes'](_0x4ac774)){await fs.promises['copyFile'](_0xc844d7,_0x310f7c);return;}const _0xb89188=await fs.promises['readFile'](_0xc844d7,'utf8'),_0x1dc251=replaceImports(_0xb89188);await fs.promises['writeFile'](_0x310f7c,_0x1dc251,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x344c6d){for(const _0x51e378 of createAppConstants.additionalFoldersToCreate){const _0x413aa8=_0x1d92c9__namespace['join'](_0x344c6d,_0x51e378);!fs.existsSync(_0x413aa8)&&(fs.mkdirSync(_0x413aa8,{'recursive':!![]}),loggers.logInfoRaw('Created\x20folder:\x20'+_0x51e378));}loggers.logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function main(){const _0x259355=process['argv']['slice'](-0x163*0x7+-0x13b7+0x1d6e*0x1);_0x259355['length']<-0x11e9+0x1221+-0x37*0x1&&(loggers.logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](0x97c*-0x2+-0x6*-0x257+0x4ef));const _0x3c5280=_0x259355[-0x1a*-0xbb+0xfe7+0x22e5*-0x1],_0x111678=_0x1d92c9__namespace['resolve'](process['cwd'](),_0x3c5280);loggers.logInfoRaw('\x0aCreating\x20'+constants.projectName+'\x20project\x20\x22'+_0x3c5280+'\x22...\x0a');try{checkTargetFolder(_0x111678),createNextProject(_0x3c5280,_0x111678),await copyProjectFiles(_0x111678),await overridePackageJson(_0x111678),createAdditionalFolders(_0x111678),await createEnvFile(_0x111678),await updateLayoutTitle(_0x111678,_0x3c5280),loggers.logInfoRaw('\x0a'+constants.projectName+'\x20project\x20\x22'+_0x3c5280+'\x22\x20is\x20ready!'),loggers.logInfoRaw('Next\x20steps:'),loggers.logInfoRaw('\x20\x20cd\x20'+_0x3c5280),loggers.logInfoRaw('\x20\x20npm\x20run\x20prod'),loggers.logInfoRaw('\x20\x20npm\x20start');}catch(_0x3e955e){const _0x50ba96=_0x3e955e instanceof Error?_0x3e955e['message']:'Unknown\x20error';loggers.logStringError('Error:'),loggers.logStringError(_0x50ba96),fs.existsSync(_0x111678)&&(loggers.logInfoRaw('Cleaning\x20up...'),fs.rmSync(_0x111678,{'recursive':!![],'force':!![]})),process['exit'](0x7a2+-0x1d1f+0x157e);}}__name(main,'main');async function updateLayoutTitle(_0x41187d,_0x24d5a2){const _0x4d6f45=_0x1d92c9__namespace['join'](_0x41187d,'src/app/layout.tsx');if(!fs.existsSync(_0x4d6f45))throw errors.createError('layout.tsx\x20not\x20found\x20at\x20'+_0x4d6f45+',\x20cannot\x20update\x20title.');let _0x4e655e=await fs.promises['readFile'](_0x4d6f45,'utf8');const _0x158439=/"SaaS Kit"/g;if(!_0x158439['test'](_0x4e655e))throw errors.createError('SaaS\x20Kit\x20not\x20found\x20in\x20layout.tsx,\x20cannot\x20update\x20title.');_0x4e655e=_0x4e655e['replace'](_0x158439,'\x22'+_0x24d5a2+'\x22'),await fs.promises['writeFile'](_0x4d6f45,_0x4e655e,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle'),main()['catch'](_0x5041fc=>{const _0x5630ad=_0x5041fc instanceof Error?_0x5041fc['message']:'Unknown\x20error';loggers.logStringError('Unhandled\x20error:'),loggers.logStringError(_0x5630ad),process['exit'](0xf*0x4b+-0x122+-0x342);});
@@ -3,16 +3,16 @@
3
3
  import { execSync } from 'child_process';
4
4
  import { existsSync, promises, mkdirSync, rmSync } from 'fs';
5
5
  import { fileURLToPath } from 'node:url';
6
- import * as _0x27ff26 from 'path';
7
- import _0x4b651e from 'node:fs';
6
+ import * as _0x1d92c9 from 'path';
7
+ import _0x2e6757 from 'node:fs';
8
8
  import { toolsFoldersToReplace, additionalFoldersToCreate } from '../../../../base-repo/constants/create-app-constants.js';
9
9
  import { logStringError, logInfoRaw } from '../../../fd-toolbox/logging/loggers.js';
10
10
  import { projectName } from '../../../fd-toolbox/constants/constants.js';
11
11
  import { allFilesToCopy } from '../../../npm-commands/build-npm/path.js';
12
12
  import { createError } from '../../../fd-toolbox/errors/errors.js';
13
- import { folders } from '../../../../base-repo/app-constants/project-paths.js';
13
+ import { folders, files } from '../../../../base-repo/app-constants/project-paths.js';
14
14
  import { npmPackages } from '../../../../base-repo/constants/packages.js';
15
15
  import { aliasSymbols } from '../../../../base-repo/app-constants/aliases.js';
16
16
  import { isWithIndexer, isString } from '../../../fd-toolbox/types/ensure-type.js';
17
17
 
18
- 'use strict';var __defProp=Object['defineProperty'],__name=(_0x3c6082,_0x47e985)=>__defProp(_0x3c6082,'name',{'value':_0x47e985,'configurable':!![]});const requiredNodeVersion='v18.0.0';process['version']<requiredNodeVersion&&(logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](-0x1*0x1f4c+-0x432+0x237f));const filename=fileURLToPath(import.meta['url']),sourceDir='../../../../',binDir=_0x27ff26['dirname'](filename),repoRoot=_0x27ff26['resolve'](binDir,sourceDir),envLocalPath=_0x27ff26['join'](binDir,''+sourceDir+folders['cli']+'/.env'),envTemplate=_0x4b651e['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[folders['cli']+'/constants'];function runCommand(_0xaf9a4b,_0x32795d){logInfoRaw('Executing:\x20'+_0xaf9a4b);try{execSync(_0xaf9a4b,{'stdio':'inherit','cwd':_0x32795d??process['cwd']()});}catch(_0x1851f0){const _0xc51ddc=_0x1851f0 instanceof Error?_0x1851f0['message']:'Unknown\x20error';logStringError('Error\x20executing:\x20'+_0xaf9a4b),logStringError(_0xc51ddc),process['exit'](0x6e*0x1a+0x14*-0x1df+0x1a41);}}__name(runCommand,'runCommand');function checkTargetFolder(_0xd8be02){existsSync(_0xd8be02)&&(logStringError('Error:\x20Folder\x20\x22'+_0x27ff26['basename'](_0xd8be02)+'\x22\x20already\x20exists.'),process['exit'](0x92d+0x35*0x4f+-0x5*0x51b));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x4911dc=_0x27ff26['resolve'](repoRoot,'package.json'),_0x450174=JSON['parse'](_0x4b651e['readFileSync'](_0x4911dc,'utf-8'));return String(_0x450174['devDependencies']?.['next']??_0x450174['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');function createNextProject(_0x4b2478,_0x2970c6){logInfoRaw('Creating\x20Next.js\x20project...');const _0xef31bb=getCreateNextAppVersion(),_0x13f885=['npx\x20create-next-app@'+_0xef31bb+'\x20\x22'+_0x4b2478+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git']['join']('\x20');runCommand(_0x13f885,_0x27ff26['dirname'](_0x2970c6)),logInfoRaw('Next.js\x20project\x20created!');}__name(createNextProject,'createNextProject');async function createEnvFile(_0x4c324f){logInfoRaw('Creating\x20.env\x20file\x20with\x20default\x20values...');const _0x24e72f=_0x27ff26['join'](_0x4c324f,'.env');try{await promises['writeFile'](_0x24e72f,envTemplate,'utf8'),logInfoRaw('.env\x20file\x20created\x20with\x20values!');}catch(_0x3523e4){const _0x196865=_0x3523e4 instanceof Error?_0x3523e4['message']:'Unknown\x20error';logStringError('Error\x20creating\x20.env\x20file:'),logStringError(_0x196865);throw _0x3523e4;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x4666d9){const _0x547352=_0x27ff26['join'](_0x4666d9,'package.json'),_0x1b71b1=_0x27ff26['join'](repoRoot,folders['cli']+'/package-template.json');try{const _0x2d0c89=JSON['parse'](await promises['readFile'](_0x547352,'utf8')),_0x546d0b=_0x2d0c89['name'],_0x3395d0=JSON['parse'](await promises['readFile'](_0x1b71b1,'utf8')),_0x58ee26={..._0x3395d0,'name':_0x546d0b};await promises['writeFile'](_0x547352,JSON['stringify'](_0x58ee26,null,0x430*0x9+-0x1a7+0x2407*-0x1)+'\x0a','utf8');}catch(_0x42c966){const _0x5e8390=_0x42c966 instanceof Error?_0x42c966['message']:'Unknown\x20error';logStringError('Error\x20overriding\x20package.json:'),logStringError(_0x5e8390);throw _0x42c966;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x43a795){const _0x59f3f0=/(import\s+[^'"]*from\s+["'])([^"']+)(["'])/g;return _0x43a795['replace'](_0x59f3f0,(_0x57f42e,_0x791ab0,_0x2b3c7d,_0x2f9353)=>{if(!_0x2b3c7d['startsWith'](aliasSymbols['atSign'])||_0x2b3c7d['startsWith'](npmPackages['saasKit']))return _0x57f42e;if(_0x2b3c7d['startsWith'](aliasSymbols['atSign']+folders['server'])||_0x2b3c7d['includes']('/'+folders['server']+'/'))return ''+_0x791ab0+npmPackages['saasKitServer']+_0x2f9353;return ''+_0x791ab0+npmPackages['saasKit']+_0x2f9353;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x21fa74){logInfoRaw('Copying\x20'+projectName+'\x20files...');for(const _0x2476b7 of allFilesToCopy){const _0x18fae1=folders['cli']+'/'+_0x2476b7,_0x11116f=_0x27ff26['join'](repoRoot,_0x18fae1),_0x57d861=replaceToolsFolder(_0x2476b7),_0x6faf6b=_0x27ff26['join'](_0x21fa74,_0x57d861);if(existsSync(_0x11116f)){const _0x47af47=await promises['stat'](_0x11116f);_0x47af47['isDirectory']()?await copyDirectoryContents(_0x11116f,_0x6faf6b):await copyAndProcessFile(_0x11116f,_0x6faf6b);}else logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0x18fae1);}logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0x48e02d){let _0x3de813=_0x48e02d;for(const [_0x3b045a,_0x491ac7]of Object['entries'](toolsFoldersToReplace)){if(_0x3de813['startsWith'](_0x3b045a)&&isWithIndexer(_0x491ac7)){const _0x2c1482=_0x491ac7;for(const _0x3a7945 in _0x2c1482){const _0x27ab68=_0x2c1482[_0x3a7945];isString(_0x27ab68)&&(_0x3de813=_0x3de813['replace'](_0x3a7945,_0x27ab68));}break;}}return _0x3de813;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x405204,_0x400375,_0x202094=![]){const _0x2093dc=_0x27ff26['relative'](_0x400375,_0x405204),_0x144f81=_0x2093dc['split'](_0x27ff26['sep']),_0x22f98c=_0x27ff26['relative'](repoRoot,_0x405204)['replace'](/\\/g,'/');return _0x202094&&foldersToIgnore['includes'](_0x22f98c)||foldersToIgnore['some'](_0x2c3f7b=>_0x144f81['some'](_0x5c6003=>_0x5c6003===_0x2c3f7b));}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x349753,_0x1c8277){!existsSync(_0x1c8277)&&mkdirSync(_0x1c8277,{'recursive':!![]});try{const _0x336f2f=await promises['readdir'](_0x349753,{'withFileTypes':!![]});for(const _0x34fff3 of _0x336f2f){const _0x25c18b=_0x27ff26['join'](_0x349753,_0x34fff3['name']),_0x3356ad=_0x27ff26['join'](_0x1c8277,_0x34fff3['name']);!shouldIgnorePath(_0x25c18b,_0x349753,_0x34fff3['isDirectory']())&&(_0x34fff3['isDirectory']()?await copyDirectoryContents(_0x25c18b,_0x3356ad):await copyAndProcessFile(_0x25c18b,_0x3356ad));}}catch(_0x383f8e){const _0xb7c08=_0x383f8e instanceof Error?_0x383f8e['message']:'Unknown\x20error';logStringError('Error\x20reading\x20directory\x20'+_0x349753+':\x20'+_0xb7c08);throw _0x383f8e;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x4255b4,_0x422380){const _0x2985c6=_0x27ff26['dirname'](_0x422380);!existsSync(_0x2985c6)&&mkdirSync(_0x2985c6,{'recursive':!![]});const _0xaad85e=await promises['stat'](_0x4255b4);if(_0xaad85e['isDirectory']())await copyDirectoryContents(_0x4255b4,_0x422380);else {const _0x403a9e=await promises['readFile'](_0x4255b4,'utf8'),_0x34ec2d=replaceImports(_0x403a9e);await promises['writeFile'](_0x422380,_0x34ec2d,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x5cac3f){for(const _0x714141 of additionalFoldersToCreate){const _0x265ded=_0x27ff26['join'](_0x5cac3f,_0x714141);!existsSync(_0x265ded)&&(mkdirSync(_0x265ded,{'recursive':!![]}),logInfoRaw('Created\x20folder:\x20'+_0x714141));}logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function main(){const _0x78392=process['argv']['slice'](-0x253a+-0x2629+0x4b65);_0x78392['length']<-0x1*0x1204+0xa7e*0x1+-0x29*-0x2f&&(logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](-0x17c9+-0x9b1*0x3+0x15b*0x27));const _0x5a8601=_0x78392[0x2b*0xad+0x268a+-0x4398],_0x2c40b7=_0x27ff26['resolve'](process['cwd'](),_0x5a8601);logInfoRaw('\x0aCreating\x20'+projectName+'\x20project\x20\x22'+_0x5a8601+'\x22...\x0a');try{checkTargetFolder(_0x2c40b7),createNextProject(_0x5a8601,_0x2c40b7),await copyProjectFiles(_0x2c40b7),await overridePackageJson(_0x2c40b7),createAdditionalFolders(_0x2c40b7),await createEnvFile(_0x2c40b7),await updateLayoutTitle(_0x2c40b7,_0x5a8601),logInfoRaw('\x0a'+projectName+'\x20project\x20\x22'+_0x5a8601+'\x22\x20is\x20ready!'),logInfoRaw('Next\x20steps:'),logInfoRaw('\x20\x20cd\x20'+_0x5a8601),logInfoRaw('\x20\x20npm\x20run\x20prod'),logInfoRaw('\x20\x20npm\x20start');}catch(_0x3dfde1){const _0x13f5f9=_0x3dfde1 instanceof Error?_0x3dfde1['message']:'Unknown\x20error';logStringError('Error:'),logStringError(_0x13f5f9),existsSync(_0x2c40b7)&&(logInfoRaw('Cleaning\x20up...'),rmSync(_0x2c40b7,{'recursive':!![],'force':!![]})),process['exit'](0x341+-0x1c75+0x1935);}}__name(main,'main');async function updateLayoutTitle(_0xb0e6af,_0x1606f6){const _0x22dff2=_0x27ff26['join'](_0xb0e6af,'src/app/layout.tsx');if(!existsSync(_0x22dff2))throw createError('layout.tsx\x20not\x20found\x20at\x20'+_0x22dff2+',\x20cannot\x20update\x20title.');let _0x5de474=await promises['readFile'](_0x22dff2,'utf8');const _0x8d9c49=/"SaaS Kit"/g;if(!_0x8d9c49['test'](_0x5de474))throw createError('SaaS\x20Kit\x20not\x20found\x20in\x20layout.tsx,\x20cannot\x20update\x20title.');_0x5de474=_0x5de474['replace'](_0x8d9c49,'\x22'+_0x1606f6+'\x22'),await promises['writeFile'](_0x22dff2,_0x5de474,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle'),main()['catch'](_0x280cf7=>{const _0x4ca1a=_0x280cf7 instanceof Error?_0x280cf7['message']:'Unknown\x20error';logStringError('Unhandled\x20error:'),logStringError(_0x4ca1a),process['exit'](0x966+0x124e+0x3f5*-0x7);});
18
+ 'use strict';var __defProp=Object['defineProperty'],__name=(_0x4a1678,_0x1b6081)=>__defProp(_0x4a1678,'name',{'value':_0x1b6081,'configurable':!![]});const requiredNodeVersion='v18.0.0';process['version']<requiredNodeVersion&&(logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](0x9*-0x139+-0x264b*-0x1+-0x1b49));const filename=fileURLToPath(import.meta['url']),sourceDir='../../../../',binDir=_0x1d92c9['dirname'](filename),repoRoot=_0x1d92c9['resolve'](binDir,sourceDir),envLocalPath=_0x1d92c9['join'](binDir,''+sourceDir+folders['cli']+'/'+files['env']),envTemplate=_0x2e6757['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[folders['cli']+'/constants'];function runCommand(_0x46872e,_0x22e818){logInfoRaw('Executing:\x20'+_0x46872e);try{execSync(_0x46872e,{'stdio':'inherit','cwd':_0x22e818??process['cwd']()});}catch(_0x40711e){const _0x360f3c=_0x40711e instanceof Error?_0x40711e['message']:'Unknown\x20error';logStringError('Error\x20executing:\x20'+_0x46872e),logStringError(_0x360f3c),process['exit'](-0x619*0x3+-0x10bf*0x1+-0x230b*-0x1);}}__name(runCommand,'runCommand');function checkTargetFolder(_0x18c138){existsSync(_0x18c138)&&(logStringError('Error:\x20Folder\x20\x22'+_0x1d92c9['basename'](_0x18c138)+'\x22\x20already\x20exists.'),process['exit'](-0x20e*0xc+-0x2032+-0xcd*-0x47));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x544e94=_0x1d92c9['resolve'](repoRoot,'package.json'),_0x1a27a7=JSON['parse'](_0x2e6757['readFileSync'](_0x544e94,'utf-8'));return String(_0x1a27a7['devDependencies']?.['next']??_0x1a27a7['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');function createNextProject(_0x2ca61b,_0x1f2810){logInfoRaw('Creating\x20Next.js\x20project...');const _0x1e6d46=getCreateNextAppVersion(),_0x424ecd=['npx\x20create-next-app@'+_0x1e6d46+'\x20\x22'+_0x2ca61b+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git']['join']('\x20');runCommand(_0x424ecd,_0x1d92c9['dirname'](_0x1f2810)),logInfoRaw('Next.js\x20project\x20created!');const _0x3d667b=_0x1d92c9['join'](_0x1f2810,'next.config.ts');_0x2e6757['existsSync'](_0x3d667b)&&(_0x2e6757['rmSync'](_0x3d667b),logInfoRaw('Removed\x20default\x20next.config.ts'));}__name(createNextProject,'createNextProject');async function createEnvFile(_0x2bc0f0){logInfoRaw('Creating\x20.env\x20file\x20with\x20default\x20values...');const _0x59eefb=_0x1d92c9['join'](_0x2bc0f0,'.env');try{await promises['writeFile'](_0x59eefb,envTemplate,'utf8'),logInfoRaw('.env\x20file\x20created\x20with\x20values!');}catch(_0x33a6f9){const _0x184e54=_0x33a6f9 instanceof Error?_0x33a6f9['message']:'Unknown\x20error';logStringError('Error\x20creating\x20.env\x20file:'),logStringError(_0x184e54);throw _0x33a6f9;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x4b44fd){const _0x8bd37a=_0x1d92c9['join'](_0x4b44fd,'package.json'),_0x584a4c=_0x1d92c9['join'](repoRoot,folders['cli']+'/package-template.json');try{const _0x4d9dbb=JSON['parse'](await promises['readFile'](_0x8bd37a,'utf8')),_0x1af06d=_0x4d9dbb['name'],_0x329f38=JSON['parse'](await promises['readFile'](_0x584a4c,'utf8')),_0x5e8332={..._0x329f38,'name':_0x1af06d};await promises['writeFile'](_0x8bd37a,JSON['stringify'](_0x5e8332,null,-0x5*0x1f9+-0x4d4+-0x47*-0x35)+'\x0a','utf8');}catch(_0x569a56){const _0x2a1432=_0x569a56 instanceof Error?_0x569a56['message']:'Unknown\x20error';logStringError('Error\x20overriding\x20package.json:'),logStringError(_0x2a1432);throw _0x569a56;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x303c6f){const _0x4c660f=/(import\s+)([^'"]+)(\s+from\s+["'])([^"']+)(["'])/g;return _0x303c6f['replace'](_0x4c660f,(_0x1156b7,_0x1884cf,_0x3e3c5f,_0x1fbaac,_0x13bc08,_0x17aab5)=>{if(!_0x13bc08['startsWith'](aliasSymbols['atSign'])||_0x13bc08['startsWith'](npmPackages['saasKit']))return _0x1156b7;let _0x413fd6;_0x13bc08['startsWith'](aliasSymbols['atSign']+folders['server'])||_0x13bc08['includes']('/'+folders['server']+'/')?_0x413fd6=npmPackages['saasKitServer']:_0x413fd6=npmPackages['saasKit'];let _0x284d0f=_0x3e3c5f['trim']();return !_0x284d0f['startsWith']('{')&&(_0x284d0f='{\x20'+_0x284d0f+'\x20}'),''+_0x1884cf+_0x284d0f+_0x1fbaac+_0x413fd6+_0x17aab5;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x42b918){logInfoRaw('Copying\x20'+projectName+'\x20files...');for(const _0x5808d3 of allFilesToCopy){const _0xac74c3=folders['cli']+'/'+_0x5808d3,_0x51d2dc=_0x1d92c9['join'](repoRoot,_0xac74c3),_0x44a9f7=replaceToolsFolder(_0x5808d3),_0x15973d=_0x1d92c9['join'](_0x42b918,_0x44a9f7);if(existsSync(_0x51d2dc)){const _0x95f374=await promises['stat'](_0x51d2dc);_0x95f374['isDirectory']()?await copyDirectoryContents(_0x51d2dc,_0x15973d):await copyAndProcessFile(_0x51d2dc,_0x15973d);}else logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0xac74c3);}logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0x3bc118){let _0x13d924=_0x3bc118;for(const [_0x4ba757,_0x1c7f37]of Object['entries'](toolsFoldersToReplace)){if(_0x13d924['startsWith'](_0x4ba757)&&isWithIndexer(_0x1c7f37)){const _0x6dd500=_0x1c7f37;for(const _0xb6653b in _0x6dd500){const _0x5967a1=_0x6dd500[_0xb6653b];isString(_0x5967a1)&&(_0x13d924=_0x13d924['replace'](_0xb6653b,_0x5967a1));}break;}}return _0x13d924;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x313fda,_0xc3c852,_0x13c784=![]){const _0x35c31e=_0x1d92c9['relative'](_0xc3c852,_0x313fda),_0xdad243=_0x35c31e['split'](_0x1d92c9['sep']),_0x56c895=_0x1d92c9['relative'](repoRoot,_0x313fda)['replace'](/\\/g,'/');return _0x13c784&&foldersToIgnore['includes'](_0x56c895)||foldersToIgnore['some'](_0x5b9049=>_0xdad243['some'](_0x3f276a=>_0x3f276a===_0x5b9049));}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x3334f8,_0x1c0b77){!existsSync(_0x1c0b77)&&mkdirSync(_0x1c0b77,{'recursive':!![]});try{const _0x2885ce=await promises['readdir'](_0x3334f8,{'withFileTypes':!![]});for(const _0x540512 of _0x2885ce){const _0x447da1=_0x1d92c9['join'](_0x3334f8,_0x540512['name']),_0x374383=_0x1d92c9['join'](_0x1c0b77,_0x540512['name']);!shouldIgnorePath(_0x447da1,_0x3334f8,_0x540512['isDirectory']())&&(_0x540512['isDirectory']()?await copyDirectoryContents(_0x447da1,_0x374383):await copyAndProcessFile(_0x447da1,_0x374383));}}catch(_0x27b765){const _0x58a935=_0x27b765 instanceof Error?_0x27b765['message']:'Unknown\x20error';logStringError('Error\x20reading\x20directory\x20'+_0x3334f8+':\x20'+_0x58a935);throw _0x27b765;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0xc844d7,_0x310f7c){const _0x540dd5=_0x1d92c9['dirname'](_0x310f7c);!existsSync(_0x540dd5)&&mkdirSync(_0x540dd5,{'recursive':!![]});const _0xc542bb=await promises['stat'](_0xc844d7);if(_0xc542bb['isDirectory']())await copyDirectoryContents(_0xc844d7,_0x310f7c);else {const _0x4ac774=_0x1d92c9['extname'](_0xc844d7)['toLowerCase'](),_0x247b57=['.ico','.png','.jpg'];if(_0x247b57['includes'](_0x4ac774)){await promises['copyFile'](_0xc844d7,_0x310f7c);return;}const _0xb89188=await promises['readFile'](_0xc844d7,'utf8'),_0x1dc251=replaceImports(_0xb89188);await promises['writeFile'](_0x310f7c,_0x1dc251,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x344c6d){for(const _0x51e378 of additionalFoldersToCreate){const _0x413aa8=_0x1d92c9['join'](_0x344c6d,_0x51e378);!existsSync(_0x413aa8)&&(mkdirSync(_0x413aa8,{'recursive':!![]}),logInfoRaw('Created\x20folder:\x20'+_0x51e378));}logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function main(){const _0x259355=process['argv']['slice'](-0x163*0x7+-0x13b7+0x1d6e*0x1);_0x259355['length']<-0x11e9+0x1221+-0x37*0x1&&(logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](0x97c*-0x2+-0x6*-0x257+0x4ef));const _0x3c5280=_0x259355[-0x1a*-0xbb+0xfe7+0x22e5*-0x1],_0x111678=_0x1d92c9['resolve'](process['cwd'](),_0x3c5280);logInfoRaw('\x0aCreating\x20'+projectName+'\x20project\x20\x22'+_0x3c5280+'\x22...\x0a');try{checkTargetFolder(_0x111678),createNextProject(_0x3c5280,_0x111678),await copyProjectFiles(_0x111678),await overridePackageJson(_0x111678),createAdditionalFolders(_0x111678),await createEnvFile(_0x111678),await updateLayoutTitle(_0x111678,_0x3c5280),logInfoRaw('\x0a'+projectName+'\x20project\x20\x22'+_0x3c5280+'\x22\x20is\x20ready!'),logInfoRaw('Next\x20steps:'),logInfoRaw('\x20\x20cd\x20'+_0x3c5280),logInfoRaw('\x20\x20npm\x20run\x20prod'),logInfoRaw('\x20\x20npm\x20start');}catch(_0x3e955e){const _0x50ba96=_0x3e955e instanceof Error?_0x3e955e['message']:'Unknown\x20error';logStringError('Error:'),logStringError(_0x50ba96),existsSync(_0x111678)&&(logInfoRaw('Cleaning\x20up...'),rmSync(_0x111678,{'recursive':!![],'force':!![]})),process['exit'](0x7a2+-0x1d1f+0x157e);}}__name(main,'main');async function updateLayoutTitle(_0x41187d,_0x24d5a2){const _0x4d6f45=_0x1d92c9['join'](_0x41187d,'src/app/layout.tsx');if(!existsSync(_0x4d6f45))throw createError('layout.tsx\x20not\x20found\x20at\x20'+_0x4d6f45+',\x20cannot\x20update\x20title.');let _0x4e655e=await promises['readFile'](_0x4d6f45,'utf8');const _0x158439=/"SaaS Kit"/g;if(!_0x158439['test'](_0x4e655e))throw createError('SaaS\x20Kit\x20not\x20found\x20in\x20layout.tsx,\x20cannot\x20update\x20title.');_0x4e655e=_0x4e655e['replace'](_0x158439,'\x22'+_0x24d5a2+'\x22'),await promises['writeFile'](_0x4d6f45,_0x4e655e,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle'),main()['catch'](_0x5041fc=>{const _0x5630ad=_0x5041fc instanceof Error?_0x5041fc['message']:'Unknown\x20error';logStringError('Unhandled\x20error:'),logStringError(_0x5630ad),process['exit'](0xf*0x4b+-0x122+-0x342);});