@fernir2/saas-kit-cli 0.1.23 → 0.1.24

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 (79) 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/cli/bin/index.ts +0 -1
  4. package/cli/src/app/favicon.ico +0 -0
  5. package/cli/src/app/globals.css +163 -1
  6. package/cli/src/app/layout.tsx +44 -0
  7. package/cli/src/app/page.tsx +9 -0
  8. package/cli/src/app/styles/common.css +74 -0
  9. package/cli/src/app/styles/rich-text-editor.css +130 -0
  10. package/level2/cli/create-saas-kit-app/bin/index.cjs.js +4 -4
  11. package/level2/cli/create-saas-kit-app/bin/index.js +3 -3
  12. package/level2/fd-toolbox/api/api-client.cjs.js +1 -1
  13. package/level2/fd-toolbox/api/api-client.js +1 -1
  14. package/level2/fd-toolbox/api/api-path-names.cjs.js +2 -2
  15. package/level2/fd-toolbox/api/api-paths.cjs.js +1 -1
  16. package/level2/fd-toolbox/api/api-paths.js +1 -1
  17. package/level2/fd-toolbox/api/base-api.cjs.js +1 -1
  18. package/level2/fd-toolbox/api/base-api.js +1 -1
  19. package/level2/fd-toolbox/auth/login-states.cjs.js +1 -1
  20. package/level2/fd-toolbox/auth/login-states.js +1 -1
  21. package/level2/fd-toolbox/auth/session-storage.cjs.js +1 -1
  22. package/level2/fd-toolbox/auth/session-storage.js +1 -1
  23. package/level2/fd-toolbox/auth/tokens.cjs.js +1 -1
  24. package/level2/fd-toolbox/auth/tokens.js +1 -1
  25. package/level2/fd-toolbox/constants/constants.cjs.js +1 -1
  26. package/level2/fd-toolbox/constants/constants.js +1 -1
  27. package/level2/fd-toolbox/enums/enums.cjs.js +1 -1
  28. package/level2/fd-toolbox/enums/enums.js +1 -1
  29. package/level2/fd-toolbox/errors/error-handler.cjs.js +1 -1
  30. package/level2/fd-toolbox/errors/error-handler.js +1 -1
  31. package/level2/fd-toolbox/errors/errors.cjs.js +1 -1
  32. package/level2/fd-toolbox/errors/errors.js +1 -1
  33. package/level2/fd-toolbox/errors/problem-details.cjs.js +1 -1
  34. package/level2/fd-toolbox/errors/problem-details.js +1 -1
  35. package/level2/fd-toolbox/functions/value-checking-functions.cjs.js +1 -1
  36. package/level2/fd-toolbox/functions/value-checking-functions.js +1 -1
  37. package/level2/fd-toolbox/http/url/urls.cjs.js +1 -1
  38. package/level2/fd-toolbox/http/url/urls.js +1 -1
  39. package/level2/fd-toolbox/infra/env-config.cjs.js +2 -2
  40. package/level2/fd-toolbox/infra/env-config.js +2 -2
  41. package/level2/fd-toolbox/infra/env-functions.cjs.js +1 -1
  42. package/level2/fd-toolbox/infra/env-functions.js +1 -1
  43. package/level2/fd-toolbox/infra/env-schema.cjs.js +2 -2
  44. package/level2/fd-toolbox/infra/env-schema.js +2 -2
  45. package/level2/fd-toolbox/infra/env-store.cjs.js +1 -1
  46. package/level2/fd-toolbox/infra/env-store.js +1 -1
  47. package/level2/fd-toolbox/lib/environments.cjs.js +1 -1
  48. package/level2/fd-toolbox/lib/environments.js +1 -1
  49. package/level2/fd-toolbox/lib/utils.cjs.js +1 -1
  50. package/level2/fd-toolbox/lib/utils.js +1 -1
  51. package/level2/fd-toolbox/local-storage/local-storage.cjs.js +1 -1
  52. package/level2/fd-toolbox/local-storage/local-storage.js +1 -1
  53. package/level2/fd-toolbox/logging/loggers.cjs.js +1 -1
  54. package/level2/fd-toolbox/logging/loggers.js +1 -1
  55. package/level2/fd-toolbox/notifications.cjs.js +2 -2
  56. package/level2/fd-toolbox/notifications.js +2 -2
  57. package/level2/fd-toolbox/odata/odata-constants.cjs.js +1 -1
  58. package/level2/fd-toolbox/odata/odata-constants.js +1 -1
  59. package/level2/fd-toolbox/odata/odatas.cjs.js +1 -1
  60. package/level2/fd-toolbox/odata/odatas.js +1 -1
  61. package/level2/fd-toolbox/odata/services/odata-filters.cjs.js +1 -1
  62. package/level2/fd-toolbox/odata/services/odata-filters.js +1 -1
  63. package/level2/fd-toolbox/paths/paths-names.cjs.js +2 -2
  64. package/level2/fd-toolbox/paths/paths-names.js +1 -1
  65. package/level2/fd-toolbox/routing/login-routers.cjs.js +1 -1
  66. package/level2/fd-toolbox/routing/login-routers.js +1 -1
  67. package/level2/fd-toolbox/routing/paths.cjs.js +1 -1
  68. package/level2/fd-toolbox/routing/paths.js +1 -1
  69. package/level2/fd-toolbox/strings/strings-constants.cjs.js +1 -1
  70. package/level2/fd-toolbox/strings/strings-constants.js +1 -1
  71. package/level2/fd-toolbox/strings/strings.cjs.js +1 -1
  72. package/level2/fd-toolbox/strings/strings.js +1 -1
  73. package/level2/fd-toolbox/types/ensure-type.cjs.js +1 -1
  74. package/level2/fd-toolbox/types/ensure-type.js +1 -1
  75. package/level2/fd-toolbox-core/core/name-of.cjs.js +1 -1
  76. package/level2/fd-toolbox-core/core/name-of.js +1 -1
  77. package/level2/fd-toolbox-core/types/resource-with-id.cjs.js +1 -1
  78. package/level2/fd-toolbox-core/types/resource-with-id.js +1 -1
  79. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
  'use strict';
3
3
 
4
- const aliasSymbols={'atSign':'@','rootAlias':'@root/'};const typescriptAliases={'@':'./src','@cli':'./packages/level2/cli','@server':'./packages/level2/server','@schemas':'./generated','@npm-commands':'./packages/level2/npm-commands','@root':'.','@enricher':'./packages/level2/enricher','@packages':'./packages','@common':'./packages/level2/common','@meta':'./packages/level2/meta','@fd-toolbox':'./packages/level2/fd-toolbox','@fd-toolbox-core':'./packages/level2/fd-toolbox-core','@fd-component-toolbox':'./packages/level2/fd-component-toolbox','@fd-app-toolbox':'./packages/level2/fd-app-toolbox','@client':'./packages/level2/client'};const modulePathAliases=Object['fromEntries'](Object['entries'](typescriptAliases)['map'](([_0x5f16cb,_0x22ec80])=>[_0x5f16cb+'/*',[_0x22ec80+'/*']]));
4
+ const aliasSymbols={'atSign':'@','rootAlias':'@root/'};const typescriptAliases={'@':'./src','@cli':'./packages/level2/cli','@server':'./packages/level2/server','@schemas':'./generated','@npm-commands':'./packages/level2/npm-commands','@root':'.','@enricher':'./packages/level2/enricher','@packages':'./packages','@common':'./packages/level2/common','@meta':'./packages/level2/meta','@fd-toolbox':'./packages/level2/fd-toolbox','@fd-toolbox-core':'./packages/level2/fd-toolbox-core','@fd-component-toolbox':'./packages/level2/fd-component-toolbox','@fd-app-toolbox':'./packages/level2/fd-app-toolbox','@client':'./packages/level2/client'};const modulePathAliases=Object['fromEntries'](Object['entries'](typescriptAliases)['map'](([_0x1575fa,_0x384059])=>[_0x1575fa+'/*',[_0x384059+'/*']]));
5
5
 
6
6
  exports.aliasSymbols = aliasSymbols;
7
7
  exports.modulePathAliases = modulePathAliases;
@@ -1,4 +1,4 @@
1
1
  'use strict';
2
- const aliasSymbols={'atSign':'@','rootAlias':'@root/'};const typescriptAliases={'@':'./src','@cli':'./packages/level2/cli','@server':'./packages/level2/server','@schemas':'./generated','@npm-commands':'./packages/level2/npm-commands','@root':'.','@enricher':'./packages/level2/enricher','@packages':'./packages','@common':'./packages/level2/common','@meta':'./packages/level2/meta','@fd-toolbox':'./packages/level2/fd-toolbox','@fd-toolbox-core':'./packages/level2/fd-toolbox-core','@fd-component-toolbox':'./packages/level2/fd-component-toolbox','@fd-app-toolbox':'./packages/level2/fd-app-toolbox','@client':'./packages/level2/client'};const modulePathAliases=Object['fromEntries'](Object['entries'](typescriptAliases)['map'](([_0x5f16cb,_0x22ec80])=>[_0x5f16cb+'/*',[_0x22ec80+'/*']]));
2
+ const aliasSymbols={'atSign':'@','rootAlias':'@root/'};const typescriptAliases={'@':'./src','@cli':'./packages/level2/cli','@server':'./packages/level2/server','@schemas':'./generated','@npm-commands':'./packages/level2/npm-commands','@root':'.','@enricher':'./packages/level2/enricher','@packages':'./packages','@common':'./packages/level2/common','@meta':'./packages/level2/meta','@fd-toolbox':'./packages/level2/fd-toolbox','@fd-toolbox-core':'./packages/level2/fd-toolbox-core','@fd-component-toolbox':'./packages/level2/fd-component-toolbox','@fd-app-toolbox':'./packages/level2/fd-app-toolbox','@client':'./packages/level2/client'};const modulePathAliases=Object['fromEntries'](Object['entries'](typescriptAliases)['map'](([_0x1575fa,_0x384059])=>[_0x1575fa+'/*',[_0x384059+'/*']]));
3
3
 
4
4
  export { aliasSymbols, modulePathAliases, typescriptAliases };
package/cli/bin/index.ts CHANGED
@@ -5,7 +5,6 @@ import { promises as fsPromises, existsSync, mkdirSync, rmSync, Stats } from "fs
5
5
  import { fileURLToPath } from "node:url";
6
6
  import * as path from "path";
7
7
  import fs from "node:fs";
8
-
9
8
  import {
10
9
  toolsFoldersToReplace,
11
10
  additionalFoldersToCreate,
Binary file
@@ -1 +1,163 @@
1
- @import "@fernir2/saas-kit/styles";
1
+ @import "../../packages/level2/client/styles/common.css";
2
+ @import "quill/dist/quill.snow.css";
3
+ @import "../../packages/level2/client/styles/rich-text-editor.css";
4
+
5
+ @tailwind base;
6
+ @tailwind components;
7
+ @tailwind utilities;
8
+
9
+ @layer base {
10
+ :root {
11
+ --background: 0 0% 100%;
12
+ --foreground: 222.2 84% 4.9%;
13
+ --card: 0 0% 100%;
14
+ --card-foreground: 222.2 84% 4.9%;
15
+ --popover: 0 0% 100%;
16
+ --popover-foreground: 222.2 84% 4.9%;
17
+ --primary: 222.2 47.4% 11.2%;
18
+ --primary-foreground: 210 40% 98%;
19
+ --secondary: 210 40% 96.1%;
20
+ --secondary-foreground: 222.2 47.4% 11.2%;
21
+ --muted: 210 40% 96.1%;
22
+ --muted-foreground: 215.4 16.3% 46.9%;
23
+ --accent: 210 40% 96.1%;
24
+ --accent-foreground: 222.2 47.4% 11.2%;
25
+ --destructive: 0 84.2% 60.2%;
26
+ --destructive-foreground: 210 40% 98%;
27
+ --border: 214.3 31.8% 91.4%;
28
+ --input: 214.3 31.8% 91.4%;
29
+ --ring: 222.2 84% 4.9%;
30
+ --radius: 0.5rem;
31
+
32
+ --chart-1: 12 76% 61%;
33
+ --chart-2: 173 58% 39%;
34
+ --chart-3: 197 37% 24%;
35
+ --chart-4: 43 74% 66%;
36
+ --chart-5: 27 87% 67%;
37
+
38
+ --fd-accent: 190, 100%, 34%; /* accent-600 */
39
+ --fd-accent-light: 172, 100%, 37%; /* accent-100 */
40
+
41
+ --fd-tertiary-50: 216, 33%, 97%;
42
+ --fd-tertiary-200: 206, 35%, 86%;
43
+ --fd-tertiary-600: 206, 38%, 39%;
44
+ --fd-tertiary-700: 208, 38%, 32%;
45
+ --fd-tertiary-900: 208, 31%, 24%;
46
+ --fd-green-accent: 120, 100%, 34%;
47
+
48
+ --fd-shadow: 0, 0%, 0%, 0.25;
49
+
50
+ --fd-toolbar: var(--fd-tertiary-900);
51
+ --fd-toolbar-input: var(--fd-tertiary-700);
52
+ --fd-toolbar-hover: var(--fd-tertiary-700);
53
+ --fd-toolbar-keys: var(--fd-tertiary-200);
54
+ --fd-toolbar-placeholder: var(--fd-tertiary-50);
55
+ --fd-toolbar-shadow: var(--fd-shadow);
56
+ --fd-toolbar-separators: var(--fd-tertiary-600);
57
+ --fd-sidebar-icons: var(--fd-tertiary-50);
58
+ --fd-toolbar-icons: var(--fd-tertiary-50);
59
+ --fd-toolbar-border: var(--fd-tertiary-700);
60
+ --fd-toolbar-button: var(--fd-tertiary-600);
61
+
62
+ --subtle-400: 210, 10%, 65%;
63
+ --subtle-500: 220, 9%, 46%;
64
+ --subtle-700: 220, 20%, 27%;
65
+
66
+ --fd-enum-default-color: 0, 0%, 92%;
67
+ --fd-enum-color-1: 200, 50%, 87%;
68
+ --fd-enum-color-2: 120, 35%, 87%;
69
+ --fd-enum-color-3: 340, 61%, 91%;
70
+ --fd-enum-color-4: 19, 45%, 88%;
71
+ --fd-enum-color-5: 340, 61%, 91%;
72
+ --fd-enum-color-6: 9, 90%, 91%;
73
+ --fd-enum-color-7: 283, 44%, 90%;
74
+ --fd-enum-color-8: 9, 90%, 91%;
75
+ --fd-enum-color-9: 200, 50%, 87%;
76
+ --fd-enum-color-10: 38, 87%, 90%;
77
+ --fd-enum-color-11: 283, 44%, 90%;
78
+ --fd-enum-color-12: 283, 44%, 90%;
79
+ --fd-enum-color-13: 340, 61%, 91%;
80
+ --fd-enum-color-14: 283, 44%, 90%;
81
+ --fd-enum-color-15: 38, 87%, 90%;
82
+ --fd-enum-color-16: 0, 0%, 92%;
83
+ --fd-enum-color-17: 9, 90%, 91%;
84
+ --fd-enum-color-18: 19, 45%, 88%;
85
+ }
86
+
87
+ .dark {
88
+ --background: 222.2 84% 4.9%;
89
+ --foreground: 210 40% 98%;
90
+ --card: 222.2 84% 4.9%;
91
+ --card-foreground: 210 40% 98%;
92
+ --popover: 222.2 84% 4.9%;
93
+ --popover-foreground: 210 40% 98%;
94
+ --primary: 210 40% 98%;
95
+ --primary-foreground: 222.2 47.4% 11.2%;
96
+ --secondary: 217.2 32.6% 17.5%;
97
+ --secondary-foreground: 210 40% 98%;
98
+ --muted: 217.2 32.6% 17.5%;
99
+ --muted-foreground: 215 20.2% 65.1%;
100
+ --accent: 217.2 32.6% 17.5%;
101
+ --accent-foreground: 210 40% 98%;
102
+ --destructive: 0 62.8% 30.6%;
103
+ --destructive-foreground: 210 40% 98%;
104
+ --border: 217.2 32.6% 17.5%;
105
+ --input: 217.2 32.6% 17.5%;
106
+ --ring: 212.7 26.8% 83.9;
107
+
108
+ --radius: 0.5rem;
109
+
110
+ --fd-accent: 190, 100%, 34%; /* accent-600 */
111
+ --fd-accent-light: 172, 100%, 37%; /* accent-100 */
112
+
113
+ --fd-tertiary-50: 216, 33%, 97%;
114
+ --fd-tertiary-200: 206, 35%, 86%;
115
+ --fd-tertiary-600: 206, 38%, 39%;
116
+ --fd-tertiary-700: 208, 38%, 32%;
117
+ --fd-tertiary-900: 208, 31%, 24%;
118
+
119
+ --fd-shadow: 0, 0%, 0%, 0.25;
120
+
121
+ --fd-toolbar: var(--fd-tertiary-900);
122
+ --fd-toolbar-input: var(--fd-tertiary-700);
123
+ --fd-toolbar-hover: var(--fd-tertiary-700);
124
+ --fd-toolbar-keys: var(--fd-tertiary-200);
125
+ --fd-toolbar-placeholder: var(--fd-tertiary-50);
126
+ --fd-toolbar-shadow: var(--fd-shadow);
127
+ --fd-toolbar-separators: var(--fd-tertiary-600);
128
+ --fd-sidebar-icons: var(--fd-tertiary-50);
129
+ --fd-toolbar-icons: var(--fd-tertiary-50);
130
+ --fd-toolbar-border: var(--fd-tertiary-700);
131
+ --fd-toolbar-button: var(--fd-tertiary-600);
132
+
133
+ --subtle-400: 210, 10%, 65%;
134
+ --subtle-500: 220, 9%, 46%;
135
+ --subtle-700: 220, 20%, 27%;
136
+
137
+ --chart-1: 220 70% 50%;
138
+ --chart-2: 160 60% 45%;
139
+ --chart-3: 30 80% 55%;
140
+ --chart-4: 280 65% 60%;
141
+ --chart-5: 340 75% 55%;
142
+
143
+ --fd-enum-default-color: 0, 0%, 22%;
144
+ --fd-enum-color-1: 219, 43%, 30%;
145
+ --fd-enum-color-2: 152, 37%, 27%;
146
+ --fd-enum-color-3: 328, 37%, 30%;
147
+ --fd-enum-color-4: 27, 63%, 32%;
148
+ --fd-enum-color-5: 328, 37%, 30%;
149
+ --fd-enum-color-6: 10, 40%, 31%;
150
+ --fd-enum-color-7: 268, 38%, 29%;
151
+ --fd-enum-color-8: 10, 40%, 31%;
152
+ --fd-enum-color-9: 219, 43%, 30%;
153
+ --fd-enum-color-10: 37, 56%, 36%;
154
+ --fd-enum-color-11: 268, 38%, 29%;
155
+ --fd-enum-color-12: 268, 38%, 29%;
156
+ --fd-enum-color-13: 328, 37%, 30%;
157
+ --fd-enum-color-14: 268, 38%, 29%;
158
+ --fd-enum-color-15: 37, 56%, 36%;
159
+ --fd-enum-color-16: 0, 0%, 35%;
160
+ --fd-enum-color-17: 10, 40%, 31%;
161
+ --fd-enum-color-18: 27, 63%, 32%;
162
+ }
163
+ }
@@ -0,0 +1,44 @@
1
+ import { FdHtmlMetadata } from "@meta/client/framework";
2
+ import { GeistSans } from "geist/font/sans";
3
+ import "src/app/globals.css";
4
+ import { cn } from "@fd-toolbox/lib/utils";
5
+ import Favicon from "src/app/favicon.ico";
6
+ import { FdToaster } from "@fd-component-toolbox/toaster/FdToaster";
7
+ import { ReactNode } from "react";
8
+ import { FdProviders } from "@client/components/providers/FdProviders";
9
+ import { setSidebarResourceNames } from "@fd-app-toolbox/layout/sidebar/sidebar-resource-names-cache";
10
+ import { defaultGlobalConfig } from "@meta/providers/global-provider/default-config";
11
+ import { setMultiListEditResourceConfigs } from "@/app/config/multi-list-config";
12
+ import { setResourceListConfigs } from "@packages/level2/client/pages/view-page/resource-list-configs";
13
+ import { setEditResourceConfigs } from "@packages/level2/meta/edit-resource/config/fd-edit-resource-configs";
14
+
15
+ export const metadata: FdHtmlMetadata = {
16
+ title: "SaaS Kit",
17
+ icons: [{ rel: "icon", url: Favicon.src }],
18
+ };
19
+
20
+ export default async function RootLayout({ children }: { children: ReactNode }) {
21
+ const sidebarResourceNames: string[] = [];
22
+
23
+ setSidebarResourceNames(sidebarResourceNames);
24
+ await setMultiListEditResourceConfigs();
25
+ await setResourceListConfigs();
26
+ setEditResourceConfigs();
27
+
28
+ return (
29
+ <html lang="en">
30
+ <body className={cn(GeistSans.className, "h-screen text-sm")}>
31
+ <div className="flex h-full flex-col">
32
+ <FdProviders
33
+ globalConfig={{
34
+ ...defaultGlobalConfig,
35
+ }}
36
+ >
37
+ {children}
38
+ </FdProviders>
39
+ </div>
40
+ <FdToaster />
41
+ </body>
42
+ </html>
43
+ );
44
+ }
@@ -0,0 +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
+ }
@@ -0,0 +1,74 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
4
+
5
+ @layer base {
6
+ * {
7
+ @apply border-border;
8
+ }
9
+ body {
10
+ @apply bg-background text-foreground;
11
+ }
12
+ }
13
+
14
+ @supports not (-webkit-appearance: none) {
15
+ * {
16
+ scrollbar-width: thin;
17
+ scrollbar-color: hsl(var(--fd-toolbar)) hsl(var(--background));
18
+ }
19
+ }
20
+
21
+ @supports (-webkit-appearance: none) {
22
+ *::-webkit-scrollbar {
23
+ width: 15px;
24
+ height: 15px;
25
+ }
26
+
27
+ *::-webkit-scrollbar-track {
28
+ background: hsl(var(--background));
29
+ }
30
+
31
+ *::-webkit-scrollbar-thumb {
32
+ width: 9px;
33
+ height: 9px;
34
+ background: hsl(var(--fd-toolbar));
35
+ border-radius: var(--radius);
36
+ border: 3px solid hsl(var(--background));
37
+ }
38
+
39
+ *::-webkit-scrollbar-thumb:hover {
40
+ background: hsl(var(--fd-toolbar-hover));
41
+ }
42
+
43
+ *::-webkit-scrollbar-button {
44
+ display: none;
45
+ }
46
+ }
47
+
48
+ .scrollbar-hidden {
49
+ -ms-overflow-style: none;
50
+ scrollbar-width: none;
51
+ }
52
+
53
+ @media (max-width: 426px) {
54
+ html,
55
+ body {
56
+ overflow: auto;
57
+ -ms-overflow-style: none;
58
+ scrollbar-width: none;
59
+ }
60
+
61
+ body::-webkit-scrollbar,
62
+ body *::-webkit-scrollbar {
63
+ display: none;
64
+ }
65
+ }
66
+
67
+ @layer base {
68
+ input:-webkit-autofill,
69
+ input:-webkit-autofill:hover,
70
+ input:-webkit-autofill:focus {
71
+ -webkit-box-shadow: 0 0 0px 1000px hsl(var(--background)) inset;
72
+ -webkit-text-fill-color: hsl(var(--foreground));
73
+ }
74
+ }
@@ -0,0 +1,130 @@
1
+ div.ql-toolbar.ql-snow {
2
+ padding: 0.5rem 0.75rem;
3
+ border-top-right-radius: var(--radius);
4
+ border-top-left-radius: var(--radius);
5
+ border: 1px solid hsl(var(--border));
6
+ }
7
+
8
+ .ql-toolbar.ql-snow .ql-picker-label {
9
+ padding-left: 0;
10
+ border: none;
11
+ }
12
+
13
+ .ql-toolbar.ql-snow .ql-picker-label::before {
14
+ font-family: "__GeistSans_3a0388", serif;
15
+ }
16
+
17
+ .ql-editor {
18
+ font-size: 14px;
19
+ padding: 10px 12px;
20
+ }
21
+
22
+ div.ql-container.ql-snow {
23
+ height: max-content;
24
+ border: 1px solid hsl(var(--border));
25
+ border-bottom-right-radius: var(--radius);
26
+ border-bottom-left-radius: var(--radius);
27
+ }
28
+
29
+ .ql-tooltip {
30
+ display: none;
31
+ }
32
+
33
+ .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options {
34
+ z-index: 11;
35
+ }
36
+
37
+ .ql-picker-label,
38
+ .ql-picker-label .ql-stroke {
39
+ color: hsl(var(--popover-foreground));
40
+ stroke: hsl(var(--popover-foreground));
41
+ fill: hsl(var(--popover-foreground));
42
+ }
43
+
44
+ .ql-toolbar .ql-formats button {
45
+ color: hsl(var(--popover-foreground));
46
+ }
47
+
48
+ .ql-toolbar .ql-formats button .ql-stroke {
49
+ stroke: hsl(var(--popover-foreground));
50
+ }
51
+
52
+ .ql-toolbar .ql-formats button .ql-fill {
53
+ fill: hsl(var(--popover-foreground));
54
+ }
55
+
56
+ .ql-toolbar .ql-active,
57
+ .ql-toolbar .ql-active .ql-stroke,
58
+ .ql-toolbar .ql-active .ql-fill {
59
+ color: hsl(var(--popover-foreground));
60
+ fill: none;
61
+ stroke: none;
62
+ }
63
+
64
+ .ql-snow .ql-picker {
65
+ font-weight: 400;
66
+ }
67
+
68
+ .ql-editor.ql-blank::before {
69
+ left: 12px;
70
+ right: 12px;
71
+ color: hsl(var(--muted-foreground));
72
+ }
73
+
74
+ .ql-toolbar .ql-formats button:hover .ql-stroke,
75
+ .ql-toolbar .ql-picker .ql-picker-label:hover .ql-stroke,
76
+ .ql-toolbar .ql-picker .ql-picker-label.ql-active .ql-stroke,
77
+ .ql-toolbar .ql-formats button.ql-active .ql-stroke {
78
+ stroke: hsl(var(--foreground));
79
+ stroke-width: 2;
80
+ }
81
+
82
+ .ql-toolbar .ql-formats button:hover .ql-fill,
83
+ .ql-toolbar .ql-formats button.ql-active .ql-fill {
84
+ fill: hsl(var(--foreground));
85
+ }
86
+
87
+ .ql-toolbar .ql-picker .ql-picker-label:hover::before,
88
+ .ql-toolbar .ql-picker .ql-picker-label.ql-active::before,
89
+ .ql-picker .ql-picker-options .ql-picker-item.ql-selected::before {
90
+ color: hsl(var(--foreground));
91
+ font-weight: 600;
92
+ }
93
+
94
+ .ql-snow .ql-picker-options .ql-picker-item:hover {
95
+ border-radius: 0.375rem;
96
+ background: hsl(var(--muted) / 0.5);
97
+ }
98
+
99
+ .ql-toolbar .ql-formats button .ql-stroke,
100
+ .ql-toolbar .ql-picker .ql-picker-label .ql-stroke {
101
+ stroke: hsl(var(--foreground));
102
+ stroke-width: 1.2;
103
+ }
104
+
105
+ .ql-toolbar .ql-formats button .ql-fill {
106
+ fill: hsl(var(--foreground));
107
+ }
108
+
109
+ .ql-toolbar .ql-picker .ql-picker-label::before,
110
+ .ql-picker .ql-picker-options .ql-picker-item::before {
111
+ color: hsl(var(--foreground));
112
+ font-weight: 400;
113
+ }
114
+
115
+ .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options {
116
+ min-width: 12rem;
117
+ z-index: 50;
118
+ margin-right: 1rem;
119
+ border-radius: 0.375rem;
120
+ background-color: hsl(var(--background));
121
+ border: 1px solid hsl(var(--border));
122
+ box-shadow: 0rem 0rem 0.1rem 0.01rem hsl(var(--fd-toolbar-shadow));
123
+ outline: none;
124
+ pointer-events: auto;
125
+ }
126
+
127
+ .ql-snow .ql-picker-options .ql-picker-item {
128
+ width: 100%;
129
+ padding: 0.5rem 0.75rem;
130
+ }
@@ -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 _0x3072fe = require('path');
9
- var _0x400653 = require('node:fs');
8
+ var _0x1e8a16 = require('path');
9
+ var _0xc5efb5 = 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 _0x3072fe__namespace = /*#__PURE__*/_interopNamespaceDefault(_0x3072fe);
38
+ var _0x1e8a16__namespace = /*#__PURE__*/_interopNamespaceDefault(_0x1e8a16);
39
39
 
40
- 'use strict';var __defProp=Object['defineProperty'],__name=(_0x322376,_0x140002)=>__defProp(_0x322376,'name',{'value':_0x140002,'configurable':!![]});const requiredNodeVersion='v18.0.0';process['version']<requiredNodeVersion&&(loggers.logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](0x7*0x53+0x1269+-0x14ad));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=_0x3072fe__namespace['dirname'](filename),repoRoot=_0x3072fe__namespace['resolve'](binDir,sourceDir),envLocalPath=_0x3072fe__namespace['join'](binDir,''+sourceDir+projectPaths.folders['cli']+'/.env'),envTemplate=_0x400653['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[projectPaths.folders['cli']+'/constants'];function runCommand(_0x4bf6ef,_0x16daa9){loggers.logInfoRaw('Executing:\x20'+_0x4bf6ef);try{child_process.execSync(_0x4bf6ef,{'stdio':'inherit','cwd':_0x16daa9??process['cwd']()});}catch(_0x559b3f){const _0x30def4=_0x559b3f instanceof Error?_0x559b3f['message']:'Unknown\x20error';loggers.logStringError('Error\x20executing:\x20'+_0x4bf6ef),loggers.logStringError(_0x30def4),process['exit'](-0xb8c+-0x39*-0x20+-0x46d*-0x1);}}__name(runCommand,'runCommand');function checkTargetFolder(_0x22457f){fs.existsSync(_0x22457f)&&(loggers.logStringError('Error:\x20Folder\x20\x22'+_0x3072fe__namespace['basename'](_0x22457f)+'\x22\x20already\x20exists.'),process['exit'](-0xfd*-0x5+0x7*0x503+0x2ab*-0xf));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0xc176a8=_0x3072fe__namespace['resolve'](repoRoot,'package.json'),_0x31433e=JSON['parse'](_0x400653['readFileSync'](_0xc176a8,'utf-8'));return String(_0x31433e['devDependencies']?.['next']??_0x31433e['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');function createNextProject(_0x37a328,_0x3424bb){loggers.logInfoRaw('Creating\x20Next.js\x20project...');const _0x1e7bef=getCreateNextAppVersion(),_0x4e87f0=['npx\x20create-next-app@'+_0x1e7bef+'\x20\x22'+_0x37a328+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git']['join']('\x20');runCommand(_0x4e87f0,_0x3072fe__namespace['dirname'](_0x3424bb)),loggers.logInfoRaw('Next.js\x20project\x20created!');}__name(createNextProject,'createNextProject');async function createEnvFile(_0x304d7d){loggers.logInfoRaw('Creating\x20.env\x20file\x20with\x20default\x20values...');const _0x24ad16=_0x3072fe__namespace['join'](_0x304d7d,'.env');try{await fs.promises['writeFile'](_0x24ad16,envTemplate,'utf8'),loggers.logInfoRaw('.env\x20file\x20created\x20with\x20values!');}catch(_0x16413a){const _0x660f1f=_0x16413a instanceof Error?_0x16413a['message']:'Unknown\x20error';loggers.logStringError('Error\x20creating\x20.env\x20file:'),loggers.logStringError(_0x660f1f);throw _0x16413a;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x2495c9){const _0x56aba7=_0x3072fe__namespace['join'](_0x2495c9,'package.json'),_0x37f5be=_0x3072fe__namespace['join'](repoRoot,projectPaths.folders['cli']+'/package-template.json');try{const _0x5bb4e3=JSON['parse'](await fs.promises['readFile'](_0x56aba7,'utf8')),_0x529809=_0x5bb4e3['name'],_0xe02a7b=JSON['parse'](await fs.promises['readFile'](_0x37f5be,'utf8')),_0x420011={..._0xe02a7b,'name':_0x529809};await fs.promises['writeFile'](_0x56aba7,JSON['stringify'](_0x420011,null,0x2*0xfc7+-0x4*0x29d+0x4*-0x546)+'\x0a','utf8');}catch(_0x551550){const _0x265a8b=_0x551550 instanceof Error?_0x551550['message']:'Unknown\x20error';loggers.logStringError('Error\x20overriding\x20package.json:'),loggers.logStringError(_0x265a8b);throw _0x551550;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x489a9a){const _0x5b55b5=/(import\s+[^'"]*from\s+["'])([^"']+)(["'])/g;return _0x489a9a['replace'](_0x5b55b5,(_0x440453,_0x25fe16,_0x12242a,_0x361163)=>{if(!_0x12242a['startsWith'](aliases.aliasSymbols['atSign'])||_0x12242a['startsWith'](packages.npmPackages['saasKit']))return _0x440453;if(_0x12242a['startsWith'](aliases.aliasSymbols['atSign']+projectPaths.folders['server'])||_0x12242a['includes']('/'+projectPaths.folders['server']+'/'))return ''+_0x25fe16+packages.npmPackages['saasKitServer']+_0x361163;return ''+_0x25fe16+packages.npmPackages['saasKit']+_0x361163;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x182172){loggers.logInfoRaw('Copying\x20'+constants.projectName+'\x20files...');for(const _0x5416ad of path.allFilesToCopy){const _0x57d619=projectPaths.folders['cli']+'/'+_0x5416ad,_0x59b6cb=_0x3072fe__namespace['join'](repoRoot,_0x57d619),_0x51876f=replaceToolsFolder(_0x5416ad),_0x4c4a9e=_0x3072fe__namespace['join'](_0x182172,_0x51876f);if(fs.existsSync(_0x59b6cb)){const _0xa24a2e=await fs.promises['stat'](_0x59b6cb);_0xa24a2e['isDirectory']()?await copyDirectoryContents(_0x59b6cb,_0x4c4a9e):await copyAndProcessFile(_0x59b6cb,_0x4c4a9e);}else loggers.logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0x57d619);}loggers.logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0x1f4cda){let _0x24ad2c=_0x1f4cda;for(const [_0x4cdd32,_0x238b89]of Object['entries'](createAppConstants.toolsFoldersToReplace)){if(_0x24ad2c['startsWith'](_0x4cdd32)&&ensureType.isWithIndexer(_0x238b89)){const _0x1789a1=_0x238b89;for(const _0x3fd968 in _0x1789a1){const _0x3c4de1=_0x1789a1[_0x3fd968];ensureType.isString(_0x3c4de1)&&(_0x24ad2c=_0x24ad2c['replace'](_0x3fd968,_0x3c4de1));}break;}}return _0x24ad2c;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x4c643f,_0x186463,_0x5198e2=![]){const _0x5712ea=_0x3072fe__namespace['relative'](_0x186463,_0x4c643f),_0x39f70f=_0x5712ea['split'](_0x3072fe__namespace['sep']),_0x3e4e09=_0x3072fe__namespace['relative'](repoRoot,_0x4c643f)['replace'](/\\/g,'/');return _0x5198e2&&foldersToIgnore['includes'](_0x3e4e09)||foldersToIgnore['some'](_0x1241d9=>_0x39f70f['some'](_0x4ca532=>_0x4ca532===_0x1241d9));}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x12ed23,_0x52c8f0){!fs.existsSync(_0x52c8f0)&&fs.mkdirSync(_0x52c8f0,{'recursive':!![]});try{const _0x2d63b2=await fs.promises['readdir'](_0x12ed23,{'withFileTypes':!![]});for(const _0x45987c of _0x2d63b2){const _0x446326=_0x3072fe__namespace['join'](_0x12ed23,_0x45987c['name']),_0x4e9354=_0x3072fe__namespace['join'](_0x52c8f0,_0x45987c['name']);!shouldIgnorePath(_0x446326,_0x12ed23,_0x45987c['isDirectory']())&&(_0x45987c['isDirectory']()?await copyDirectoryContents(_0x446326,_0x4e9354):await copyAndProcessFile(_0x446326,_0x4e9354));}}catch(_0x375d7a){const _0x41c215=_0x375d7a instanceof Error?_0x375d7a['message']:'Unknown\x20error';loggers.logStringError('Error\x20reading\x20directory\x20'+_0x12ed23+':\x20'+_0x41c215);throw _0x375d7a;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x117279,_0x2d026c){const _0x13a22d=_0x3072fe__namespace['dirname'](_0x2d026c);!fs.existsSync(_0x13a22d)&&fs.mkdirSync(_0x13a22d,{'recursive':!![]});const _0x3b5cdd=await fs.promises['stat'](_0x117279);if(_0x3b5cdd['isDirectory']())await copyDirectoryContents(_0x117279,_0x2d026c);else {const _0xd7ee88=await fs.promises['readFile'](_0x117279,'utf8'),_0x9766fb=replaceImports(_0xd7ee88);await fs.promises['writeFile'](_0x2d026c,_0x9766fb,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x233ab3){for(const _0x37df3b of createAppConstants.additionalFoldersToCreate){const _0x328670=_0x3072fe__namespace['join'](_0x233ab3,_0x37df3b);!fs.existsSync(_0x328670)&&(fs.mkdirSync(_0x328670,{'recursive':!![]}),loggers.logInfoRaw('Created\x20folder:\x20'+_0x37df3b));}loggers.logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function main(){const _0x11d3fb=process['argv']['slice'](-0x8f0+0x1fe*0x3+0x17c*0x2);_0x11d3fb['length']<0x1ff2+-0x1*-0x2051+-0x4042&&(loggers.logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](-0x21*-0xcf+0x1bcc+-0x367a));const _0x2834e5=_0x11d3fb[-0x1*-0x629+0x356+-0xd*0xbb],_0x5f3d0d=_0x3072fe__namespace['resolve'](process['cwd'](),_0x2834e5);loggers.logInfoRaw('\x0aCreating\x20'+constants.projectName+'\x20project\x20\x22'+_0x2834e5+'\x22...\x0a');try{checkTargetFolder(_0x5f3d0d),createNextProject(_0x2834e5,_0x5f3d0d),await copyProjectFiles(_0x5f3d0d),await overridePackageJson(_0x5f3d0d),createAdditionalFolders(_0x5f3d0d),await createEnvFile(_0x5f3d0d),await updateLayoutTitle(_0x5f3d0d,_0x2834e5),loggers.logInfoRaw('\x0a'+constants.projectName+'\x20project\x20\x22'+_0x2834e5+'\x22\x20is\x20ready!'),loggers.logInfoRaw('Next\x20steps:'),loggers.logInfoRaw('\x20\x20cd\x20'+_0x2834e5),loggers.logInfoRaw('\x20\x20npm\x20run\x20prod'),loggers.logInfoRaw('\x20\x20npm\x20start');}catch(_0x2550a4){const _0x37d637=_0x2550a4 instanceof Error?_0x2550a4['message']:'Unknown\x20error';loggers.logStringError('Error:'),loggers.logStringError(_0x37d637),fs.existsSync(_0x5f3d0d)&&(loggers.logInfoRaw('Cleaning\x20up...'),fs.rmSync(_0x5f3d0d,{'recursive':!![],'force':!![]})),process['exit'](0xaf2+-0x13*-0xc5+-0x1990);}}__name(main,'main');async function updateLayoutTitle(_0x4f9891,_0x3aa583){const _0x2a3361=_0x3072fe__namespace['join'](_0x4f9891,'src/app/layout.tsx');if(!fs.existsSync(_0x2a3361))throw errors.createError('layout.tsx\x20not\x20found\x20at\x20'+_0x2a3361+',\x20cannot\x20update\x20title.');let _0x456f4b=await fs.promises['readFile'](_0x2a3361,'utf8');const _0x17aa77=/"SaaS Kit"/g;if(!_0x17aa77['test'](_0x456f4b))throw errors.createError('SaaS\x20Kit\x20not\x20found\x20in\x20layout.tsx,\x20cannot\x20update\x20title.');_0x456f4b=_0x456f4b['replace'](_0x17aa77,'\x22'+_0x3aa583+'\x22'),await fs.promises['writeFile'](_0x2a3361,_0x456f4b,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle'),main()['catch'](_0x2efb00=>{const _0x24b3f3=_0x2efb00 instanceof Error?_0x2efb00['message']:'Unknown\x20error';loggers.logStringError('Unhandled\x20error:'),loggers.logStringError(_0x24b3f3),process['exit'](-0x2*-0x887+0x398+-0x14a5);});
40
+ 'use strict';var __defProp=Object['defineProperty'],__name=(_0x443a3d,_0x2ef8e6)=>__defProp(_0x443a3d,'name',{'value':_0x2ef8e6,'configurable':!![]});const requiredNodeVersion='v18.0.0';process['version']<requiredNodeVersion&&(loggers.logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](0xb90+-0x5d*-0x35+-0x110*0x1d));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=_0x1e8a16__namespace['dirname'](filename),repoRoot=_0x1e8a16__namespace['resolve'](binDir,sourceDir),envLocalPath=_0x1e8a16__namespace['join'](binDir,''+sourceDir+projectPaths.folders['cli']+'/.env'),envTemplate=_0xc5efb5['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[projectPaths.folders['cli']+'/constants'];function runCommand(_0x20a0d7,_0x1f25ca){loggers.logInfoRaw('Executing:\x20'+_0x20a0d7);try{child_process.execSync(_0x20a0d7,{'stdio':'inherit','cwd':_0x1f25ca??process['cwd']()});}catch(_0x4fc0f9){const _0x4f1a85=_0x4fc0f9 instanceof Error?_0x4fc0f9['message']:'Unknown\x20error';loggers.logStringError('Error\x20executing:\x20'+_0x20a0d7),loggers.logStringError(_0x4f1a85),process['exit'](-0x1d*-0xb+-0x16a*-0x8+0x1*-0xc8e);}}__name(runCommand,'runCommand');function checkTargetFolder(_0x5a347e){fs.existsSync(_0x5a347e)&&(loggers.logStringError('Error:\x20Folder\x20\x22'+_0x1e8a16__namespace['basename'](_0x5a347e)+'\x22\x20already\x20exists.'),process['exit'](0x650+-0x1c*0x15d+0x1fdd));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x1b0940=_0x1e8a16__namespace['resolve'](repoRoot,'package.json'),_0x2601f9=JSON['parse'](_0xc5efb5['readFileSync'](_0x1b0940,'utf-8'));return String(_0x2601f9['devDependencies']?.['next']??_0x2601f9['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');function createNextProject(_0x516872,_0x3a8cf0){loggers.logInfoRaw('Creating\x20Next.js\x20project...');const _0x579f92=getCreateNextAppVersion(),_0x51ad6a=['npx\x20create-next-app@'+_0x579f92+'\x20\x22'+_0x516872+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git']['join']('\x20');runCommand(_0x51ad6a,_0x1e8a16__namespace['dirname'](_0x3a8cf0)),loggers.logInfoRaw('Next.js\x20project\x20created!');}__name(createNextProject,'createNextProject');async function createEnvFile(_0x32bbae){loggers.logInfoRaw('Creating\x20.env\x20file\x20with\x20default\x20values...');const _0x446df9=_0x1e8a16__namespace['join'](_0x32bbae,'.env');try{await fs.promises['writeFile'](_0x446df9,envTemplate,'utf8'),loggers.logInfoRaw('.env\x20file\x20created\x20with\x20values!');}catch(_0x3d2d77){const _0x5e575b=_0x3d2d77 instanceof Error?_0x3d2d77['message']:'Unknown\x20error';loggers.logStringError('Error\x20creating\x20.env\x20file:'),loggers.logStringError(_0x5e575b);throw _0x3d2d77;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x24811b){const _0x4696ff=_0x1e8a16__namespace['join'](_0x24811b,'package.json'),_0x1f4984=_0x1e8a16__namespace['join'](repoRoot,projectPaths.folders['cli']+'/package-template.json');try{const _0x2cd2c7=JSON['parse'](await fs.promises['readFile'](_0x4696ff,'utf8')),_0x2088ae=_0x2cd2c7['name'],_0x426e8c=JSON['parse'](await fs.promises['readFile'](_0x1f4984,'utf8')),_0x10aeb6={..._0x426e8c,'name':_0x2088ae};await fs.promises['writeFile'](_0x4696ff,JSON['stringify'](_0x10aeb6,null,0x9*0x30c+0xdf*-0x8+-0x1472)+'\x0a','utf8');}catch(_0x2e21a2){const _0x2221ab=_0x2e21a2 instanceof Error?_0x2e21a2['message']:'Unknown\x20error';loggers.logStringError('Error\x20overriding\x20package.json:'),loggers.logStringError(_0x2221ab);throw _0x2e21a2;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x220bcb){const _0x23cab5=/(import\s+[^'"]*from\s+["'])([^"']+)(["'])/g;return _0x220bcb['replace'](_0x23cab5,(_0xc5b5e,_0x8789bd,_0xa730a,_0x2277b1)=>{if(!_0xa730a['startsWith'](aliases.aliasSymbols['atSign'])||_0xa730a['startsWith'](packages.npmPackages['saasKit']))return _0xc5b5e;if(_0xa730a['startsWith'](aliases.aliasSymbols['atSign']+projectPaths.folders['server'])||_0xa730a['includes']('/'+projectPaths.folders['server']+'/'))return ''+_0x8789bd+packages.npmPackages['saasKitServer']+_0x2277b1;return ''+_0x8789bd+packages.npmPackages['saasKit']+_0x2277b1;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x59be6f){loggers.logInfoRaw('Copying\x20'+constants.projectName+'\x20files...');for(const _0x3415ab of path.allFilesToCopy){const _0x5ab718=projectPaths.folders['cli']+'/'+_0x3415ab,_0x206e2d=_0x1e8a16__namespace['join'](repoRoot,_0x5ab718),_0x59c63f=replaceToolsFolder(_0x3415ab),_0x191d3a=_0x1e8a16__namespace['join'](_0x59be6f,_0x59c63f);if(fs.existsSync(_0x206e2d)){const _0x5b1e0b=await fs.promises['stat'](_0x206e2d);_0x5b1e0b['isDirectory']()?await copyDirectoryContents(_0x206e2d,_0x191d3a):await copyAndProcessFile(_0x206e2d,_0x191d3a);}else loggers.logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0x5ab718);}loggers.logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0x2d949d){let _0x303b5e=_0x2d949d;for(const [_0x22bf41,_0x5a9728]of Object['entries'](createAppConstants.toolsFoldersToReplace)){if(_0x303b5e['startsWith'](_0x22bf41)&&ensureType.isWithIndexer(_0x5a9728)){const _0x1b9692=_0x5a9728;for(const _0x2d23bb in _0x1b9692){const _0x281f33=_0x1b9692[_0x2d23bb];ensureType.isString(_0x281f33)&&(_0x303b5e=_0x303b5e['replace'](_0x2d23bb,_0x281f33));}break;}}return _0x303b5e;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x431815,_0x42dddf,_0x21eb82=![]){const _0x3b0f2a=_0x1e8a16__namespace['relative'](_0x42dddf,_0x431815),_0x32d1d0=_0x3b0f2a['split'](_0x1e8a16__namespace['sep']),_0x1b4dca=_0x1e8a16__namespace['relative'](repoRoot,_0x431815)['replace'](/\\/g,'/');return _0x21eb82&&foldersToIgnore['includes'](_0x1b4dca)||foldersToIgnore['some'](_0x1452e7=>_0x32d1d0['some'](_0x54bb7e=>_0x54bb7e===_0x1452e7));}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x318605,_0x4174a7){!fs.existsSync(_0x4174a7)&&fs.mkdirSync(_0x4174a7,{'recursive':!![]});try{const _0x402c2a=await fs.promises['readdir'](_0x318605,{'withFileTypes':!![]});for(const _0x3ce0a0 of _0x402c2a){const _0x5017a1=_0x1e8a16__namespace['join'](_0x318605,_0x3ce0a0['name']),_0x39074c=_0x1e8a16__namespace['join'](_0x4174a7,_0x3ce0a0['name']);!shouldIgnorePath(_0x5017a1,_0x318605,_0x3ce0a0['isDirectory']())&&(_0x3ce0a0['isDirectory']()?await copyDirectoryContents(_0x5017a1,_0x39074c):await copyAndProcessFile(_0x5017a1,_0x39074c));}}catch(_0x3be76a){const _0x59cbe6=_0x3be76a instanceof Error?_0x3be76a['message']:'Unknown\x20error';loggers.logStringError('Error\x20reading\x20directory\x20'+_0x318605+':\x20'+_0x59cbe6);throw _0x3be76a;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x33f14d,_0x22c3a6){const _0x1620fd=_0x1e8a16__namespace['dirname'](_0x22c3a6);!fs.existsSync(_0x1620fd)&&fs.mkdirSync(_0x1620fd,{'recursive':!![]});const _0x3275b8=await fs.promises['stat'](_0x33f14d);if(_0x3275b8['isDirectory']())await copyDirectoryContents(_0x33f14d,_0x22c3a6);else {const _0x5c7ca0=await fs.promises['readFile'](_0x33f14d,'utf8'),_0x1c71db=replaceImports(_0x5c7ca0);await fs.promises['writeFile'](_0x22c3a6,_0x1c71db,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x5055ae){for(const _0x26432e of createAppConstants.additionalFoldersToCreate){const _0x49f7e8=_0x1e8a16__namespace['join'](_0x5055ae,_0x26432e);!fs.existsSync(_0x49f7e8)&&(fs.mkdirSync(_0x49f7e8,{'recursive':!![]}),loggers.logInfoRaw('Created\x20folder:\x20'+_0x26432e));}loggers.logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function main(){const _0xd641e9=process['argv']['slice'](0xb24+0x8d*-0xf+-0x2df);_0xd641e9['length']<-0x1fcf*0x1+0x15dd+0x9f3&&(loggers.logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](-0x1006+-0x1f5*0x9+0x4*0x869));const _0x377ece=_0xd641e9[0x7a*-0x43+-0xa*-0x2eb+-0x40*-0xb],_0x48f83f=_0x1e8a16__namespace['resolve'](process['cwd'](),_0x377ece);loggers.logInfoRaw('\x0aCreating\x20'+constants.projectName+'\x20project\x20\x22'+_0x377ece+'\x22...\x0a');try{checkTargetFolder(_0x48f83f),createNextProject(_0x377ece,_0x48f83f),await copyProjectFiles(_0x48f83f),await overridePackageJson(_0x48f83f),createAdditionalFolders(_0x48f83f),await createEnvFile(_0x48f83f),await updateLayoutTitle(_0x48f83f,_0x377ece),loggers.logInfoRaw('\x0a'+constants.projectName+'\x20project\x20\x22'+_0x377ece+'\x22\x20is\x20ready!'),loggers.logInfoRaw('Next\x20steps:'),loggers.logInfoRaw('\x20\x20cd\x20'+_0x377ece),loggers.logInfoRaw('\x20\x20npm\x20run\x20prod'),loggers.logInfoRaw('\x20\x20npm\x20start');}catch(_0x37bd5c){const _0x4d770d=_0x37bd5c instanceof Error?_0x37bd5c['message']:'Unknown\x20error';loggers.logStringError('Error:'),loggers.logStringError(_0x4d770d),fs.existsSync(_0x48f83f)&&(loggers.logInfoRaw('Cleaning\x20up...'),fs.rmSync(_0x48f83f,{'recursive':!![],'force':!![]})),process['exit'](0x1ee5*0x1+-0x1*-0x209+-0x20ed*0x1);}}__name(main,'main');async function updateLayoutTitle(_0x42acf9,_0x1be214){const _0x1e0677=_0x1e8a16__namespace['join'](_0x42acf9,'src/app/layout.tsx');if(!fs.existsSync(_0x1e0677))throw errors.createError('layout.tsx\x20not\x20found\x20at\x20'+_0x1e0677+',\x20cannot\x20update\x20title.');let _0x6efa50=await fs.promises['readFile'](_0x1e0677,'utf8');const _0x390e69=/"SaaS Kit"/g;if(!_0x390e69['test'](_0x6efa50))throw errors.createError('SaaS\x20Kit\x20not\x20found\x20in\x20layout.tsx,\x20cannot\x20update\x20title.');_0x6efa50=_0x6efa50['replace'](_0x390e69,'\x22'+_0x1be214+'\x22'),await fs.promises['writeFile'](_0x1e0677,_0x6efa50,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle'),main()['catch'](_0x3c2177=>{const _0x215513=_0x3c2177 instanceof Error?_0x3c2177['message']:'Unknown\x20error';loggers.logStringError('Unhandled\x20error:'),loggers.logStringError(_0x215513),process['exit'](0x3b9+-0x22b3+-0xb*-0x2d1);});
@@ -3,8 +3,8 @@
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 _0x3072fe from 'path';
7
- import _0x400653 from 'node:fs';
6
+ import * as _0x1e8a16 from 'path';
7
+ import _0xc5efb5 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';
@@ -15,4 +15,4 @@ 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=(_0x322376,_0x140002)=>__defProp(_0x322376,'name',{'value':_0x140002,'configurable':!![]});const requiredNodeVersion='v18.0.0';process['version']<requiredNodeVersion&&(logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](0x7*0x53+0x1269+-0x14ad));const filename=fileURLToPath(import.meta['url']),sourceDir='../../../../',binDir=_0x3072fe['dirname'](filename),repoRoot=_0x3072fe['resolve'](binDir,sourceDir),envLocalPath=_0x3072fe['join'](binDir,''+sourceDir+folders['cli']+'/.env'),envTemplate=_0x400653['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[folders['cli']+'/constants'];function runCommand(_0x4bf6ef,_0x16daa9){logInfoRaw('Executing:\x20'+_0x4bf6ef);try{execSync(_0x4bf6ef,{'stdio':'inherit','cwd':_0x16daa9??process['cwd']()});}catch(_0x559b3f){const _0x30def4=_0x559b3f instanceof Error?_0x559b3f['message']:'Unknown\x20error';logStringError('Error\x20executing:\x20'+_0x4bf6ef),logStringError(_0x30def4),process['exit'](-0xb8c+-0x39*-0x20+-0x46d*-0x1);}}__name(runCommand,'runCommand');function checkTargetFolder(_0x22457f){existsSync(_0x22457f)&&(logStringError('Error:\x20Folder\x20\x22'+_0x3072fe['basename'](_0x22457f)+'\x22\x20already\x20exists.'),process['exit'](-0xfd*-0x5+0x7*0x503+0x2ab*-0xf));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0xc176a8=_0x3072fe['resolve'](repoRoot,'package.json'),_0x31433e=JSON['parse'](_0x400653['readFileSync'](_0xc176a8,'utf-8'));return String(_0x31433e['devDependencies']?.['next']??_0x31433e['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');function createNextProject(_0x37a328,_0x3424bb){logInfoRaw('Creating\x20Next.js\x20project...');const _0x1e7bef=getCreateNextAppVersion(),_0x4e87f0=['npx\x20create-next-app@'+_0x1e7bef+'\x20\x22'+_0x37a328+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git']['join']('\x20');runCommand(_0x4e87f0,_0x3072fe['dirname'](_0x3424bb)),logInfoRaw('Next.js\x20project\x20created!');}__name(createNextProject,'createNextProject');async function createEnvFile(_0x304d7d){logInfoRaw('Creating\x20.env\x20file\x20with\x20default\x20values...');const _0x24ad16=_0x3072fe['join'](_0x304d7d,'.env');try{await promises['writeFile'](_0x24ad16,envTemplate,'utf8'),logInfoRaw('.env\x20file\x20created\x20with\x20values!');}catch(_0x16413a){const _0x660f1f=_0x16413a instanceof Error?_0x16413a['message']:'Unknown\x20error';logStringError('Error\x20creating\x20.env\x20file:'),logStringError(_0x660f1f);throw _0x16413a;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x2495c9){const _0x56aba7=_0x3072fe['join'](_0x2495c9,'package.json'),_0x37f5be=_0x3072fe['join'](repoRoot,folders['cli']+'/package-template.json');try{const _0x5bb4e3=JSON['parse'](await promises['readFile'](_0x56aba7,'utf8')),_0x529809=_0x5bb4e3['name'],_0xe02a7b=JSON['parse'](await promises['readFile'](_0x37f5be,'utf8')),_0x420011={..._0xe02a7b,'name':_0x529809};await promises['writeFile'](_0x56aba7,JSON['stringify'](_0x420011,null,0x2*0xfc7+-0x4*0x29d+0x4*-0x546)+'\x0a','utf8');}catch(_0x551550){const _0x265a8b=_0x551550 instanceof Error?_0x551550['message']:'Unknown\x20error';logStringError('Error\x20overriding\x20package.json:'),logStringError(_0x265a8b);throw _0x551550;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x489a9a){const _0x5b55b5=/(import\s+[^'"]*from\s+["'])([^"']+)(["'])/g;return _0x489a9a['replace'](_0x5b55b5,(_0x440453,_0x25fe16,_0x12242a,_0x361163)=>{if(!_0x12242a['startsWith'](aliasSymbols['atSign'])||_0x12242a['startsWith'](npmPackages['saasKit']))return _0x440453;if(_0x12242a['startsWith'](aliasSymbols['atSign']+folders['server'])||_0x12242a['includes']('/'+folders['server']+'/'))return ''+_0x25fe16+npmPackages['saasKitServer']+_0x361163;return ''+_0x25fe16+npmPackages['saasKit']+_0x361163;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x182172){logInfoRaw('Copying\x20'+projectName+'\x20files...');for(const _0x5416ad of allFilesToCopy){const _0x57d619=folders['cli']+'/'+_0x5416ad,_0x59b6cb=_0x3072fe['join'](repoRoot,_0x57d619),_0x51876f=replaceToolsFolder(_0x5416ad),_0x4c4a9e=_0x3072fe['join'](_0x182172,_0x51876f);if(existsSync(_0x59b6cb)){const _0xa24a2e=await promises['stat'](_0x59b6cb);_0xa24a2e['isDirectory']()?await copyDirectoryContents(_0x59b6cb,_0x4c4a9e):await copyAndProcessFile(_0x59b6cb,_0x4c4a9e);}else logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0x57d619);}logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0x1f4cda){let _0x24ad2c=_0x1f4cda;for(const [_0x4cdd32,_0x238b89]of Object['entries'](toolsFoldersToReplace)){if(_0x24ad2c['startsWith'](_0x4cdd32)&&isWithIndexer(_0x238b89)){const _0x1789a1=_0x238b89;for(const _0x3fd968 in _0x1789a1){const _0x3c4de1=_0x1789a1[_0x3fd968];isString(_0x3c4de1)&&(_0x24ad2c=_0x24ad2c['replace'](_0x3fd968,_0x3c4de1));}break;}}return _0x24ad2c;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x4c643f,_0x186463,_0x5198e2=![]){const _0x5712ea=_0x3072fe['relative'](_0x186463,_0x4c643f),_0x39f70f=_0x5712ea['split'](_0x3072fe['sep']),_0x3e4e09=_0x3072fe['relative'](repoRoot,_0x4c643f)['replace'](/\\/g,'/');return _0x5198e2&&foldersToIgnore['includes'](_0x3e4e09)||foldersToIgnore['some'](_0x1241d9=>_0x39f70f['some'](_0x4ca532=>_0x4ca532===_0x1241d9));}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x12ed23,_0x52c8f0){!existsSync(_0x52c8f0)&&mkdirSync(_0x52c8f0,{'recursive':!![]});try{const _0x2d63b2=await promises['readdir'](_0x12ed23,{'withFileTypes':!![]});for(const _0x45987c of _0x2d63b2){const _0x446326=_0x3072fe['join'](_0x12ed23,_0x45987c['name']),_0x4e9354=_0x3072fe['join'](_0x52c8f0,_0x45987c['name']);!shouldIgnorePath(_0x446326,_0x12ed23,_0x45987c['isDirectory']())&&(_0x45987c['isDirectory']()?await copyDirectoryContents(_0x446326,_0x4e9354):await copyAndProcessFile(_0x446326,_0x4e9354));}}catch(_0x375d7a){const _0x41c215=_0x375d7a instanceof Error?_0x375d7a['message']:'Unknown\x20error';logStringError('Error\x20reading\x20directory\x20'+_0x12ed23+':\x20'+_0x41c215);throw _0x375d7a;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x117279,_0x2d026c){const _0x13a22d=_0x3072fe['dirname'](_0x2d026c);!existsSync(_0x13a22d)&&mkdirSync(_0x13a22d,{'recursive':!![]});const _0x3b5cdd=await promises['stat'](_0x117279);if(_0x3b5cdd['isDirectory']())await copyDirectoryContents(_0x117279,_0x2d026c);else {const _0xd7ee88=await promises['readFile'](_0x117279,'utf8'),_0x9766fb=replaceImports(_0xd7ee88);await promises['writeFile'](_0x2d026c,_0x9766fb,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x233ab3){for(const _0x37df3b of additionalFoldersToCreate){const _0x328670=_0x3072fe['join'](_0x233ab3,_0x37df3b);!existsSync(_0x328670)&&(mkdirSync(_0x328670,{'recursive':!![]}),logInfoRaw('Created\x20folder:\x20'+_0x37df3b));}logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function main(){const _0x11d3fb=process['argv']['slice'](-0x8f0+0x1fe*0x3+0x17c*0x2);_0x11d3fb['length']<0x1ff2+-0x1*-0x2051+-0x4042&&(logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](-0x21*-0xcf+0x1bcc+-0x367a));const _0x2834e5=_0x11d3fb[-0x1*-0x629+0x356+-0xd*0xbb],_0x5f3d0d=_0x3072fe['resolve'](process['cwd'](),_0x2834e5);logInfoRaw('\x0aCreating\x20'+projectName+'\x20project\x20\x22'+_0x2834e5+'\x22...\x0a');try{checkTargetFolder(_0x5f3d0d),createNextProject(_0x2834e5,_0x5f3d0d),await copyProjectFiles(_0x5f3d0d),await overridePackageJson(_0x5f3d0d),createAdditionalFolders(_0x5f3d0d),await createEnvFile(_0x5f3d0d),await updateLayoutTitle(_0x5f3d0d,_0x2834e5),logInfoRaw('\x0a'+projectName+'\x20project\x20\x22'+_0x2834e5+'\x22\x20is\x20ready!'),logInfoRaw('Next\x20steps:'),logInfoRaw('\x20\x20cd\x20'+_0x2834e5),logInfoRaw('\x20\x20npm\x20run\x20prod'),logInfoRaw('\x20\x20npm\x20start');}catch(_0x2550a4){const _0x37d637=_0x2550a4 instanceof Error?_0x2550a4['message']:'Unknown\x20error';logStringError('Error:'),logStringError(_0x37d637),existsSync(_0x5f3d0d)&&(logInfoRaw('Cleaning\x20up...'),rmSync(_0x5f3d0d,{'recursive':!![],'force':!![]})),process['exit'](0xaf2+-0x13*-0xc5+-0x1990);}}__name(main,'main');async function updateLayoutTitle(_0x4f9891,_0x3aa583){const _0x2a3361=_0x3072fe['join'](_0x4f9891,'src/app/layout.tsx');if(!existsSync(_0x2a3361))throw createError('layout.tsx\x20not\x20found\x20at\x20'+_0x2a3361+',\x20cannot\x20update\x20title.');let _0x456f4b=await promises['readFile'](_0x2a3361,'utf8');const _0x17aa77=/"SaaS Kit"/g;if(!_0x17aa77['test'](_0x456f4b))throw createError('SaaS\x20Kit\x20not\x20found\x20in\x20layout.tsx,\x20cannot\x20update\x20title.');_0x456f4b=_0x456f4b['replace'](_0x17aa77,'\x22'+_0x3aa583+'\x22'),await promises['writeFile'](_0x2a3361,_0x456f4b,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle'),main()['catch'](_0x2efb00=>{const _0x24b3f3=_0x2efb00 instanceof Error?_0x2efb00['message']:'Unknown\x20error';logStringError('Unhandled\x20error:'),logStringError(_0x24b3f3),process['exit'](-0x2*-0x887+0x398+-0x14a5);});
18
+ 'use strict';var __defProp=Object['defineProperty'],__name=(_0x443a3d,_0x2ef8e6)=>__defProp(_0x443a3d,'name',{'value':_0x2ef8e6,'configurable':!![]});const requiredNodeVersion='v18.0.0';process['version']<requiredNodeVersion&&(logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](0xb90+-0x5d*-0x35+-0x110*0x1d));const filename=fileURLToPath(import.meta['url']),sourceDir='../../../../',binDir=_0x1e8a16['dirname'](filename),repoRoot=_0x1e8a16['resolve'](binDir,sourceDir),envLocalPath=_0x1e8a16['join'](binDir,''+sourceDir+folders['cli']+'/.env'),envTemplate=_0xc5efb5['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[folders['cli']+'/constants'];function runCommand(_0x20a0d7,_0x1f25ca){logInfoRaw('Executing:\x20'+_0x20a0d7);try{execSync(_0x20a0d7,{'stdio':'inherit','cwd':_0x1f25ca??process['cwd']()});}catch(_0x4fc0f9){const _0x4f1a85=_0x4fc0f9 instanceof Error?_0x4fc0f9['message']:'Unknown\x20error';logStringError('Error\x20executing:\x20'+_0x20a0d7),logStringError(_0x4f1a85),process['exit'](-0x1d*-0xb+-0x16a*-0x8+0x1*-0xc8e);}}__name(runCommand,'runCommand');function checkTargetFolder(_0x5a347e){existsSync(_0x5a347e)&&(logStringError('Error:\x20Folder\x20\x22'+_0x1e8a16['basename'](_0x5a347e)+'\x22\x20already\x20exists.'),process['exit'](0x650+-0x1c*0x15d+0x1fdd));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x1b0940=_0x1e8a16['resolve'](repoRoot,'package.json'),_0x2601f9=JSON['parse'](_0xc5efb5['readFileSync'](_0x1b0940,'utf-8'));return String(_0x2601f9['devDependencies']?.['next']??_0x2601f9['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');function createNextProject(_0x516872,_0x3a8cf0){logInfoRaw('Creating\x20Next.js\x20project...');const _0x579f92=getCreateNextAppVersion(),_0x51ad6a=['npx\x20create-next-app@'+_0x579f92+'\x20\x22'+_0x516872+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git']['join']('\x20');runCommand(_0x51ad6a,_0x1e8a16['dirname'](_0x3a8cf0)),logInfoRaw('Next.js\x20project\x20created!');}__name(createNextProject,'createNextProject');async function createEnvFile(_0x32bbae){logInfoRaw('Creating\x20.env\x20file\x20with\x20default\x20values...');const _0x446df9=_0x1e8a16['join'](_0x32bbae,'.env');try{await promises['writeFile'](_0x446df9,envTemplate,'utf8'),logInfoRaw('.env\x20file\x20created\x20with\x20values!');}catch(_0x3d2d77){const _0x5e575b=_0x3d2d77 instanceof Error?_0x3d2d77['message']:'Unknown\x20error';logStringError('Error\x20creating\x20.env\x20file:'),logStringError(_0x5e575b);throw _0x3d2d77;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x24811b){const _0x4696ff=_0x1e8a16['join'](_0x24811b,'package.json'),_0x1f4984=_0x1e8a16['join'](repoRoot,folders['cli']+'/package-template.json');try{const _0x2cd2c7=JSON['parse'](await promises['readFile'](_0x4696ff,'utf8')),_0x2088ae=_0x2cd2c7['name'],_0x426e8c=JSON['parse'](await promises['readFile'](_0x1f4984,'utf8')),_0x10aeb6={..._0x426e8c,'name':_0x2088ae};await promises['writeFile'](_0x4696ff,JSON['stringify'](_0x10aeb6,null,0x9*0x30c+0xdf*-0x8+-0x1472)+'\x0a','utf8');}catch(_0x2e21a2){const _0x2221ab=_0x2e21a2 instanceof Error?_0x2e21a2['message']:'Unknown\x20error';logStringError('Error\x20overriding\x20package.json:'),logStringError(_0x2221ab);throw _0x2e21a2;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x220bcb){const _0x23cab5=/(import\s+[^'"]*from\s+["'])([^"']+)(["'])/g;return _0x220bcb['replace'](_0x23cab5,(_0xc5b5e,_0x8789bd,_0xa730a,_0x2277b1)=>{if(!_0xa730a['startsWith'](aliasSymbols['atSign'])||_0xa730a['startsWith'](npmPackages['saasKit']))return _0xc5b5e;if(_0xa730a['startsWith'](aliasSymbols['atSign']+folders['server'])||_0xa730a['includes']('/'+folders['server']+'/'))return ''+_0x8789bd+npmPackages['saasKitServer']+_0x2277b1;return ''+_0x8789bd+npmPackages['saasKit']+_0x2277b1;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x59be6f){logInfoRaw('Copying\x20'+projectName+'\x20files...');for(const _0x3415ab of allFilesToCopy){const _0x5ab718=folders['cli']+'/'+_0x3415ab,_0x206e2d=_0x1e8a16['join'](repoRoot,_0x5ab718),_0x59c63f=replaceToolsFolder(_0x3415ab),_0x191d3a=_0x1e8a16['join'](_0x59be6f,_0x59c63f);if(existsSync(_0x206e2d)){const _0x5b1e0b=await promises['stat'](_0x206e2d);_0x5b1e0b['isDirectory']()?await copyDirectoryContents(_0x206e2d,_0x191d3a):await copyAndProcessFile(_0x206e2d,_0x191d3a);}else logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0x5ab718);}logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0x2d949d){let _0x303b5e=_0x2d949d;for(const [_0x22bf41,_0x5a9728]of Object['entries'](toolsFoldersToReplace)){if(_0x303b5e['startsWith'](_0x22bf41)&&isWithIndexer(_0x5a9728)){const _0x1b9692=_0x5a9728;for(const _0x2d23bb in _0x1b9692){const _0x281f33=_0x1b9692[_0x2d23bb];isString(_0x281f33)&&(_0x303b5e=_0x303b5e['replace'](_0x2d23bb,_0x281f33));}break;}}return _0x303b5e;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x431815,_0x42dddf,_0x21eb82=![]){const _0x3b0f2a=_0x1e8a16['relative'](_0x42dddf,_0x431815),_0x32d1d0=_0x3b0f2a['split'](_0x1e8a16['sep']),_0x1b4dca=_0x1e8a16['relative'](repoRoot,_0x431815)['replace'](/\\/g,'/');return _0x21eb82&&foldersToIgnore['includes'](_0x1b4dca)||foldersToIgnore['some'](_0x1452e7=>_0x32d1d0['some'](_0x54bb7e=>_0x54bb7e===_0x1452e7));}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x318605,_0x4174a7){!existsSync(_0x4174a7)&&mkdirSync(_0x4174a7,{'recursive':!![]});try{const _0x402c2a=await promises['readdir'](_0x318605,{'withFileTypes':!![]});for(const _0x3ce0a0 of _0x402c2a){const _0x5017a1=_0x1e8a16['join'](_0x318605,_0x3ce0a0['name']),_0x39074c=_0x1e8a16['join'](_0x4174a7,_0x3ce0a0['name']);!shouldIgnorePath(_0x5017a1,_0x318605,_0x3ce0a0['isDirectory']())&&(_0x3ce0a0['isDirectory']()?await copyDirectoryContents(_0x5017a1,_0x39074c):await copyAndProcessFile(_0x5017a1,_0x39074c));}}catch(_0x3be76a){const _0x59cbe6=_0x3be76a instanceof Error?_0x3be76a['message']:'Unknown\x20error';logStringError('Error\x20reading\x20directory\x20'+_0x318605+':\x20'+_0x59cbe6);throw _0x3be76a;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x33f14d,_0x22c3a6){const _0x1620fd=_0x1e8a16['dirname'](_0x22c3a6);!existsSync(_0x1620fd)&&mkdirSync(_0x1620fd,{'recursive':!![]});const _0x3275b8=await promises['stat'](_0x33f14d);if(_0x3275b8['isDirectory']())await copyDirectoryContents(_0x33f14d,_0x22c3a6);else {const _0x5c7ca0=await promises['readFile'](_0x33f14d,'utf8'),_0x1c71db=replaceImports(_0x5c7ca0);await promises['writeFile'](_0x22c3a6,_0x1c71db,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x5055ae){for(const _0x26432e of additionalFoldersToCreate){const _0x49f7e8=_0x1e8a16['join'](_0x5055ae,_0x26432e);!existsSync(_0x49f7e8)&&(mkdirSync(_0x49f7e8,{'recursive':!![]}),logInfoRaw('Created\x20folder:\x20'+_0x26432e));}logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function main(){const _0xd641e9=process['argv']['slice'](0xb24+0x8d*-0xf+-0x2df);_0xd641e9['length']<-0x1fcf*0x1+0x15dd+0x9f3&&(logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](-0x1006+-0x1f5*0x9+0x4*0x869));const _0x377ece=_0xd641e9[0x7a*-0x43+-0xa*-0x2eb+-0x40*-0xb],_0x48f83f=_0x1e8a16['resolve'](process['cwd'](),_0x377ece);logInfoRaw('\x0aCreating\x20'+projectName+'\x20project\x20\x22'+_0x377ece+'\x22...\x0a');try{checkTargetFolder(_0x48f83f),createNextProject(_0x377ece,_0x48f83f),await copyProjectFiles(_0x48f83f),await overridePackageJson(_0x48f83f),createAdditionalFolders(_0x48f83f),await createEnvFile(_0x48f83f),await updateLayoutTitle(_0x48f83f,_0x377ece),logInfoRaw('\x0a'+projectName+'\x20project\x20\x22'+_0x377ece+'\x22\x20is\x20ready!'),logInfoRaw('Next\x20steps:'),logInfoRaw('\x20\x20cd\x20'+_0x377ece),logInfoRaw('\x20\x20npm\x20run\x20prod'),logInfoRaw('\x20\x20npm\x20start');}catch(_0x37bd5c){const _0x4d770d=_0x37bd5c instanceof Error?_0x37bd5c['message']:'Unknown\x20error';logStringError('Error:'),logStringError(_0x4d770d),existsSync(_0x48f83f)&&(logInfoRaw('Cleaning\x20up...'),rmSync(_0x48f83f,{'recursive':!![],'force':!![]})),process['exit'](0x1ee5*0x1+-0x1*-0x209+-0x20ed*0x1);}}__name(main,'main');async function updateLayoutTitle(_0x42acf9,_0x1be214){const _0x1e0677=_0x1e8a16['join'](_0x42acf9,'src/app/layout.tsx');if(!existsSync(_0x1e0677))throw createError('layout.tsx\x20not\x20found\x20at\x20'+_0x1e0677+',\x20cannot\x20update\x20title.');let _0x6efa50=await promises['readFile'](_0x1e0677,'utf8');const _0x390e69=/"SaaS Kit"/g;if(!_0x390e69['test'](_0x6efa50))throw createError('SaaS\x20Kit\x20not\x20found\x20in\x20layout.tsx,\x20cannot\x20update\x20title.');_0x6efa50=_0x6efa50['replace'](_0x390e69,'\x22'+_0x1be214+'\x22'),await promises['writeFile'](_0x1e0677,_0x6efa50,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle'),main()['catch'](_0x3c2177=>{const _0x215513=_0x3c2177 instanceof Error?_0x3c2177['message']:'Unknown\x20error';logStringError('Unhandled\x20error:'),logStringError(_0x215513),process['exit'](0x3b9+-0x22b3+-0xb*-0x2d1);});
@@ -8,7 +8,7 @@ var tokens = require('../auth/tokens.cjs.js');
8
8
  var headerNames = require('../constants/header-names.cjs.js');
9
9
  var httpConstants = require('../http/http-constants.cjs.js');
10
10
 
11
- var __defProp=Object['defineProperty'],__name=(_0x499882,_0x2687c0)=>__defProp(_0x499882,'name',{'value':_0x2687c0,'configurable':!![]});async function apiGet(_0x3e198d,_0x23e0d8,_0x29489,_0x3e65c6){const _0x4161d3=apiPaths.getApiPath(_0x3e198d,_0x23e0d8,_0x29489);return baseApi.apiBaseGet(_0x4161d3,getApiHeaders(_0x3e65c6));}__name(apiGet,'apiGet');async function apiGetBlob(_0x4ca2f7,_0x507bc8,_0x54e66e,_0x3e0bd2){const _0x5069a6=apiPaths.getApiPath(_0x4ca2f7,_0x507bc8,_0x54e66e);return baseApi.apiBaseGetBlob(_0x5069a6,getApiHeaders(_0x3e0bd2,!![]));}__name(apiGetBlob,'apiGetBlob');async function apiGetWithOData(_0x195851,_0x4d96d7,_0x1ca25b){const _0x54b986=odatas.getODataParams(_0x4d96d7);return apiGet(_0x195851,_0x1ca25b,_0x54b986);}__name(apiGetWithOData,'apiGetWithOData');async function apiPost(_0x580a17,_0x3d0176,_0x24742b){const _0x3cec50=apiPaths.getApiPath(_0x580a17);return baseApi.postBaseApi(_0x3cec50,_0x3d0176,getApiHeaders(_0x24742b));}__name(apiPost,'apiPost');async function apiPostFile(_0x30f62c,_0x4ed42f,_0x1ef078){const _0x4a1e3a=apiPaths.getApiPath(_0x30f62c),_0xaa353c=await fetch(_0x4a1e3a,{'method':httpConstants.httpMethods['post'],'body':_0x4ed42f,'headers':getApiHeaders(_0x1ef078,!![])});return baseApi.baseApiHandleResponse(_0xaa353c);}__name(apiPostFile,'apiPostFile');async function apiPut(_0x12ef62,_0x5d1353,_0x1b804c){const _0x27f6bf=apiPaths.getApiPath(_0x12ef62);return baseApi.putBaseApi(_0x27f6bf,_0x5d1353,getApiHeaders(_0x1b804c));}__name(apiPut,'apiPut');async function apiDelete(_0x37f7c6,_0x3d28f8,_0x44ecc9){const _0x36ecd5=apiPaths.getApiPath(_0x37f7c6,_0x3d28f8);return baseApi.deleteBaseApi(_0x36ecd5,getApiHeaders(_0x44ecc9));}__name(apiDelete,'apiDelete');function getApiHeaders(_0x5a7c7c,_0x4120dd=![]){const _0x1320ea=_0x5a7c7c??new Headers(),_0x1052b7=tokens.getAuthToken();return (!_0x1320ea['get'](headerNames.headerNames['authHeaderName'])||_0x1320ea['get'](headerNames.headerNames['authHeaderName'])==='')&&_0x1052b7&&_0x1320ea['set'](headerNames.headerNames['authHeaderName'],headerNames.headerNames['authHeaderValuePrefix']+_0x1052b7),!_0x4120dd&&!_0x1320ea['get'](headerNames.httpContentTypes['contentTypeHeaderName'])&&_0x1320ea['set'](headerNames.httpContentTypes['contentTypeHeaderName'],headerNames.httpContentTypes['contentTypeHeaderValue']),_0x1320ea;}__name(getApiHeaders,'getApiHeaders');
11
+ var __defProp=Object['defineProperty'],__name=(_0x23c415,_0x2e9e44)=>__defProp(_0x23c415,'name',{'value':_0x2e9e44,'configurable':!![]});async function apiGet(_0x16d3a3,_0x1750df,_0x476e84,_0x2af09d){const _0x2df5df=apiPaths.getApiPath(_0x16d3a3,_0x1750df,_0x476e84);return baseApi.apiBaseGet(_0x2df5df,getApiHeaders(_0x2af09d));}__name(apiGet,'apiGet');async function apiGetBlob(_0xd11121,_0x57124e,_0x2e0275,_0x1080ea){const _0x2fa9ad=apiPaths.getApiPath(_0xd11121,_0x57124e,_0x2e0275);return baseApi.apiBaseGetBlob(_0x2fa9ad,getApiHeaders(_0x1080ea,!![]));}__name(apiGetBlob,'apiGetBlob');async function apiGetWithOData(_0x2177d4,_0x2ed434,_0x5b6f76){const _0x1b9d88=odatas.getODataParams(_0x2ed434);return apiGet(_0x2177d4,_0x5b6f76,_0x1b9d88);}__name(apiGetWithOData,'apiGetWithOData');async function apiPost(_0x1df3cc,_0xc78fd,_0x4f725e){const _0x522e32=apiPaths.getApiPath(_0x1df3cc);return baseApi.postBaseApi(_0x522e32,_0xc78fd,getApiHeaders(_0x4f725e));}__name(apiPost,'apiPost');async function apiPostFile(_0x40584a,_0x14f181,_0x2486b8){const _0x1d2c57=apiPaths.getApiPath(_0x40584a),_0x30078a=await fetch(_0x1d2c57,{'method':httpConstants.httpMethods['post'],'body':_0x14f181,'headers':getApiHeaders(_0x2486b8,!![])});return baseApi.baseApiHandleResponse(_0x30078a);}__name(apiPostFile,'apiPostFile');async function apiPut(_0x3c77cc,_0x31410b,_0x3cda9c){const _0x50dc49=apiPaths.getApiPath(_0x3c77cc);return baseApi.putBaseApi(_0x50dc49,_0x31410b,getApiHeaders(_0x3cda9c));}__name(apiPut,'apiPut');async function apiDelete(_0x33e401,_0x4c252d,_0x564424){const _0x5ed2c2=apiPaths.getApiPath(_0x33e401,_0x4c252d);return baseApi.deleteBaseApi(_0x5ed2c2,getApiHeaders(_0x564424));}__name(apiDelete,'apiDelete');function getApiHeaders(_0x450cb4,_0x29e92a=![]){const _0x45703f=_0x450cb4??new Headers(),_0x3838f7=tokens.getAuthToken();return (!_0x45703f['get'](headerNames.headerNames['authHeaderName'])||_0x45703f['get'](headerNames.headerNames['authHeaderName'])==='')&&_0x3838f7&&_0x45703f['set'](headerNames.headerNames['authHeaderName'],headerNames.headerNames['authHeaderValuePrefix']+_0x3838f7),!_0x29e92a&&!_0x45703f['get'](headerNames.httpContentTypes['contentTypeHeaderName'])&&_0x45703f['set'](headerNames.httpContentTypes['contentTypeHeaderName'],headerNames.httpContentTypes['contentTypeHeaderValue']),_0x45703f;}__name(getApiHeaders,'getApiHeaders');
12
12
 
13
13
  exports.apiDelete = apiDelete;
14
14
  exports.apiGet = apiGet;