@fernir2/saas-kit-cli 0.1.23 → 0.1.25
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.
- package/base-repo/app-constants/aliases.cjs.js +1 -1
- package/base-repo/app-constants/aliases.js +1 -1
- package/cli/bin/index.ts +0 -1
- package/cli/package-template.json +4 -4
- package/cli/src/app/favicon.ico +0 -0
- package/cli/src/app/globals.css +163 -1
- package/cli/src/app/layout.tsx +44 -0
- package/cli/src/app/page.tsx +9 -0
- package/cli/src/app/styles/common.css +74 -0
- package/cli/src/app/styles/rich-text-editor.css +130 -0
- package/level2/cli/create-saas-kit-app/bin/index.cjs.js +4 -4
- package/level2/cli/create-saas-kit-app/bin/index.js +3 -3
- package/level2/fd-toolbox/api/api-client.cjs.js +1 -1
- package/level2/fd-toolbox/api/api-client.js +1 -1
- package/level2/fd-toolbox/api/api-path-names.cjs.js +2 -2
- package/level2/fd-toolbox/api/api-paths.cjs.js +1 -1
- package/level2/fd-toolbox/api/api-paths.js +1 -1
- package/level2/fd-toolbox/api/base-api.cjs.js +1 -1
- package/level2/fd-toolbox/api/base-api.js +1 -1
- package/level2/fd-toolbox/auth/login-states.cjs.js +1 -1
- package/level2/fd-toolbox/auth/login-states.js +1 -1
- package/level2/fd-toolbox/auth/session-storage.cjs.js +1 -1
- package/level2/fd-toolbox/auth/session-storage.js +1 -1
- package/level2/fd-toolbox/auth/tokens.cjs.js +1 -1
- package/level2/fd-toolbox/auth/tokens.js +1 -1
- package/level2/fd-toolbox/constants/constants.cjs.js +1 -1
- package/level2/fd-toolbox/constants/constants.js +1 -1
- package/level2/fd-toolbox/enums/enums.cjs.js +1 -1
- package/level2/fd-toolbox/enums/enums.js +1 -1
- package/level2/fd-toolbox/errors/error-handler.cjs.js +1 -1
- package/level2/fd-toolbox/errors/error-handler.js +1 -1
- package/level2/fd-toolbox/errors/errors.cjs.js +1 -1
- package/level2/fd-toolbox/errors/errors.js +1 -1
- package/level2/fd-toolbox/errors/problem-details.cjs.js +1 -1
- package/level2/fd-toolbox/errors/problem-details.js +1 -1
- package/level2/fd-toolbox/functions/value-checking-functions.cjs.js +1 -1
- package/level2/fd-toolbox/functions/value-checking-functions.js +1 -1
- package/level2/fd-toolbox/http/url/urls.cjs.js +1 -1
- package/level2/fd-toolbox/http/url/urls.js +1 -1
- package/level2/fd-toolbox/infra/env-config.cjs.js +2 -2
- package/level2/fd-toolbox/infra/env-config.js +2 -2
- package/level2/fd-toolbox/infra/env-functions.cjs.js +1 -1
- package/level2/fd-toolbox/infra/env-functions.js +1 -1
- package/level2/fd-toolbox/infra/env-schema.cjs.js +2 -2
- package/level2/fd-toolbox/infra/env-schema.js +2 -2
- package/level2/fd-toolbox/infra/env-store.cjs.js +1 -1
- package/level2/fd-toolbox/infra/env-store.js +1 -1
- package/level2/fd-toolbox/lib/environments.cjs.js +1 -1
- package/level2/fd-toolbox/lib/environments.js +1 -1
- package/level2/fd-toolbox/lib/utils.cjs.js +1 -1
- package/level2/fd-toolbox/lib/utils.js +1 -1
- package/level2/fd-toolbox/local-storage/local-storage.cjs.js +1 -1
- package/level2/fd-toolbox/local-storage/local-storage.js +1 -1
- package/level2/fd-toolbox/logging/loggers.cjs.js +1 -1
- package/level2/fd-toolbox/logging/loggers.js +1 -1
- package/level2/fd-toolbox/notifications.cjs.js +2 -2
- package/level2/fd-toolbox/notifications.js +2 -2
- package/level2/fd-toolbox/odata/odata-constants.cjs.js +1 -1
- package/level2/fd-toolbox/odata/odata-constants.js +1 -1
- package/level2/fd-toolbox/odata/odatas.cjs.js +1 -1
- package/level2/fd-toolbox/odata/odatas.js +1 -1
- package/level2/fd-toolbox/odata/services/odata-filters.cjs.js +1 -1
- package/level2/fd-toolbox/odata/services/odata-filters.js +1 -1
- package/level2/fd-toolbox/paths/paths-names.cjs.js +2 -2
- package/level2/fd-toolbox/paths/paths-names.js +1 -1
- package/level2/fd-toolbox/routing/login-routers.cjs.js +1 -1
- package/level2/fd-toolbox/routing/login-routers.js +1 -1
- package/level2/fd-toolbox/routing/paths.cjs.js +1 -1
- package/level2/fd-toolbox/routing/paths.js +1 -1
- package/level2/fd-toolbox/strings/strings-constants.cjs.js +1 -1
- package/level2/fd-toolbox/strings/strings-constants.js +1 -1
- package/level2/fd-toolbox/strings/strings.cjs.js +1 -1
- package/level2/fd-toolbox/strings/strings.js +1 -1
- package/level2/fd-toolbox/types/ensure-type.cjs.js +1 -1
- package/level2/fd-toolbox/types/ensure-type.js +1 -1
- package/level2/fd-toolbox-core/core/name-of.cjs.js +1 -1
- package/level2/fd-toolbox-core/core/name-of.js +1 -1
- package/level2/fd-toolbox-core/types/resource-with-id.cjs.js +1 -1
- package/level2/fd-toolbox-core/types/resource-with-id.js +1 -1
- 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'](([
|
|
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'](([_0x16259a,_0x1030f6])=>[_0x16259a+'/*',[_0x1030f6+'/*']]));
|
|
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'](([
|
|
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'](([_0x16259a,_0x1030f6])=>[_0x16259a+'/*',[_0x1030f6+'/*']]));
|
|
3
3
|
|
|
4
4
|
export { aliasSymbols, modulePathAliases, typescriptAliases };
|
package/cli/bin/index.ts
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
"dev": "npx tsx --tsconfig tsconfig.server.json server.ts",
|
|
7
7
|
"build": "next build && tsc --project tsconfig.server.json",
|
|
8
8
|
"lint": "eslint -c eslint.config.js",
|
|
9
|
-
"gen-schema": "npx tsx
|
|
10
|
-
"gen-meta": "npx tsx
|
|
9
|
+
"gen-schema": "npx tsx npm-commands/gen-schema/index.ts",
|
|
10
|
+
"gen-meta": "npx tsx npm-commands/gen-meta/index.ts",
|
|
11
11
|
"init-db": "npm run migrate-db && npm run seed-db",
|
|
12
12
|
"setup": "npm run gen-meta && npm run gen-schema && npm run init-db",
|
|
13
13
|
"start": "npm run setup && npm run dev",
|
|
14
14
|
"prod": "npm run setup && npm run build && npx tsx server.ts",
|
|
15
|
-
"migrate-db": "npx tsx
|
|
16
|
-
"seed-db": "npx tsx
|
|
15
|
+
"migrate-db": "npx tsx npm-commands/migrate-db/index.ts",
|
|
16
|
+
"seed-db": "npx tsx npm-commands/seed-db/index.ts"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
19
|
"@fernir2/saas-kit": "0.0.150",
|
|
Binary file
|
package/cli/src/app/globals.css
CHANGED
|
@@ -1 +1,163 @@
|
|
|
1
|
-
@import "
|
|
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
|
|
9
|
-
var
|
|
8
|
+
var _0x35c0d9 = require('path');
|
|
9
|
+
var _0x58757c = 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
|
|
38
|
+
var _0x35c0d9__namespace = /*#__PURE__*/_interopNamespaceDefault(_0x35c0d9);
|
|
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=(_0xed842a,_0x12d9ae)=>__defProp(_0xed842a,'name',{'value':_0x12d9ae,'configurable':!![]});const requiredNodeVersion='v18.0.0';process['version']<requiredNodeVersion&&(loggers.logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](0x4*0x78a+-0xbf8+-0x5f*0x31));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=_0x35c0d9__namespace['dirname'](filename),repoRoot=_0x35c0d9__namespace['resolve'](binDir,sourceDir),envLocalPath=_0x35c0d9__namespace['join'](binDir,''+sourceDir+projectPaths.folders['cli']+'/.env'),envTemplate=_0x58757c['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[projectPaths.folders['cli']+'/constants'];function runCommand(_0x17ba9a,_0x45cdb0){loggers.logInfoRaw('Executing:\x20'+_0x17ba9a);try{child_process.execSync(_0x17ba9a,{'stdio':'inherit','cwd':_0x45cdb0??process['cwd']()});}catch(_0x5e9aa5){const _0x37a626=_0x5e9aa5 instanceof Error?_0x5e9aa5['message']:'Unknown\x20error';loggers.logStringError('Error\x20executing:\x20'+_0x17ba9a),loggers.logStringError(_0x37a626),process['exit'](0x147*-0x3+-0x1dfb+0x1*0x21d1);}}__name(runCommand,'runCommand');function checkTargetFolder(_0x14d0c5){fs.existsSync(_0x14d0c5)&&(loggers.logStringError('Error:\x20Folder\x20\x22'+_0x35c0d9__namespace['basename'](_0x14d0c5)+'\x22\x20already\x20exists.'),process['exit'](-0xb9+0x1*-0x19aa+0xd32*0x2));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x5ead65=_0x35c0d9__namespace['resolve'](repoRoot,'package.json'),_0x5b10cd=JSON['parse'](_0x58757c['readFileSync'](_0x5ead65,'utf-8'));return String(_0x5b10cd['devDependencies']?.['next']??_0x5b10cd['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');function createNextProject(_0x483b6f,_0xe7405e){loggers.logInfoRaw('Creating\x20Next.js\x20project...');const _0x1424ed=getCreateNextAppVersion(),_0x2d5a8c=['npx\x20create-next-app@'+_0x1424ed+'\x20\x22'+_0x483b6f+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git']['join']('\x20');runCommand(_0x2d5a8c,_0x35c0d9__namespace['dirname'](_0xe7405e)),loggers.logInfoRaw('Next.js\x20project\x20created!');}__name(createNextProject,'createNextProject');async function createEnvFile(_0x4e97d2){loggers.logInfoRaw('Creating\x20.env\x20file\x20with\x20default\x20values...');const _0x9a3b18=_0x35c0d9__namespace['join'](_0x4e97d2,'.env');try{await fs.promises['writeFile'](_0x9a3b18,envTemplate,'utf8'),loggers.logInfoRaw('.env\x20file\x20created\x20with\x20values!');}catch(_0x4fa1a7){const _0x53e2e4=_0x4fa1a7 instanceof Error?_0x4fa1a7['message']:'Unknown\x20error';loggers.logStringError('Error\x20creating\x20.env\x20file:'),loggers.logStringError(_0x53e2e4);throw _0x4fa1a7;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x1407cb){const _0x4e2180=_0x35c0d9__namespace['join'](_0x1407cb,'package.json'),_0x1f15b2=_0x35c0d9__namespace['join'](repoRoot,projectPaths.folders['cli']+'/package-template.json');try{const _0x5c3868=JSON['parse'](await fs.promises['readFile'](_0x4e2180,'utf8')),_0x41e282=_0x5c3868['name'],_0x59af61=JSON['parse'](await fs.promises['readFile'](_0x1f15b2,'utf8')),_0x3086d5={..._0x59af61,'name':_0x41e282};await fs.promises['writeFile'](_0x4e2180,JSON['stringify'](_0x3086d5,null,0xba0+-0x1af2+-0x24*-0x6d)+'\x0a','utf8');}catch(_0x4ea532){const _0x524f1e=_0x4ea532 instanceof Error?_0x4ea532['message']:'Unknown\x20error';loggers.logStringError('Error\x20overriding\x20package.json:'),loggers.logStringError(_0x524f1e);throw _0x4ea532;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x5f052e){const _0x3697e2=/(import\s+[^'"]*from\s+["'])([^"']+)(["'])/g;return _0x5f052e['replace'](_0x3697e2,(_0x413792,_0x41110a,_0x2e2e51,_0x210fc9)=>{if(!_0x2e2e51['startsWith'](aliases.aliasSymbols['atSign'])||_0x2e2e51['startsWith'](packages.npmPackages['saasKit']))return _0x413792;if(_0x2e2e51['startsWith'](aliases.aliasSymbols['atSign']+projectPaths.folders['server'])||_0x2e2e51['includes']('/'+projectPaths.folders['server']+'/'))return ''+_0x41110a+packages.npmPackages['saasKitServer']+_0x210fc9;return ''+_0x41110a+packages.npmPackages['saasKit']+_0x210fc9;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x577f1e){loggers.logInfoRaw('Copying\x20'+constants.projectName+'\x20files...');for(const _0x573b44 of path.allFilesToCopy){const _0x2fcb70=projectPaths.folders['cli']+'/'+_0x573b44,_0x57e3ac=_0x35c0d9__namespace['join'](repoRoot,_0x2fcb70),_0x17eb5a=replaceToolsFolder(_0x573b44),_0x594f92=_0x35c0d9__namespace['join'](_0x577f1e,_0x17eb5a);if(fs.existsSync(_0x57e3ac)){const _0x5bde37=await fs.promises['stat'](_0x57e3ac);_0x5bde37['isDirectory']()?await copyDirectoryContents(_0x57e3ac,_0x594f92):await copyAndProcessFile(_0x57e3ac,_0x594f92);}else loggers.logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0x2fcb70);}loggers.logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0xaf404a){let _0x4652d8=_0xaf404a;for(const [_0x595d10,_0x23d925]of Object['entries'](createAppConstants.toolsFoldersToReplace)){if(_0x4652d8['startsWith'](_0x595d10)&&ensureType.isWithIndexer(_0x23d925)){const _0x53d7fd=_0x23d925;for(const _0x2a5350 in _0x53d7fd){const _0x7fcba1=_0x53d7fd[_0x2a5350];ensureType.isString(_0x7fcba1)&&(_0x4652d8=_0x4652d8['replace'](_0x2a5350,_0x7fcba1));}break;}}return _0x4652d8;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x246e33,_0x266b92,_0x4c26ee=![]){const _0x26b60b=_0x35c0d9__namespace['relative'](_0x266b92,_0x246e33),_0x2361cb=_0x26b60b['split'](_0x35c0d9__namespace['sep']),_0x171040=_0x35c0d9__namespace['relative'](repoRoot,_0x246e33)['replace'](/\\/g,'/');return _0x4c26ee&&foldersToIgnore['includes'](_0x171040)||foldersToIgnore['some'](_0x80abe7=>_0x2361cb['some'](_0x4e352c=>_0x4e352c===_0x80abe7));}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x57ab89,_0x3dea44){!fs.existsSync(_0x3dea44)&&fs.mkdirSync(_0x3dea44,{'recursive':!![]});try{const _0x1bba63=await fs.promises['readdir'](_0x57ab89,{'withFileTypes':!![]});for(const _0xb6ae4b of _0x1bba63){const _0x47ad5c=_0x35c0d9__namespace['join'](_0x57ab89,_0xb6ae4b['name']),_0xfbaeaf=_0x35c0d9__namespace['join'](_0x3dea44,_0xb6ae4b['name']);!shouldIgnorePath(_0x47ad5c,_0x57ab89,_0xb6ae4b['isDirectory']())&&(_0xb6ae4b['isDirectory']()?await copyDirectoryContents(_0x47ad5c,_0xfbaeaf):await copyAndProcessFile(_0x47ad5c,_0xfbaeaf));}}catch(_0x2cb329){const _0x405c1f=_0x2cb329 instanceof Error?_0x2cb329['message']:'Unknown\x20error';loggers.logStringError('Error\x20reading\x20directory\x20'+_0x57ab89+':\x20'+_0x405c1f);throw _0x2cb329;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x1ead22,_0x4f9c64){const _0x20a971=_0x35c0d9__namespace['dirname'](_0x4f9c64);!fs.existsSync(_0x20a971)&&fs.mkdirSync(_0x20a971,{'recursive':!![]});const _0x4f6ae7=await fs.promises['stat'](_0x1ead22);if(_0x4f6ae7['isDirectory']())await copyDirectoryContents(_0x1ead22,_0x4f9c64);else {const _0x341566=await fs.promises['readFile'](_0x1ead22,'utf8'),_0xcdc884=replaceImports(_0x341566);await fs.promises['writeFile'](_0x4f9c64,_0xcdc884,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x3e1df0){for(const _0x509b21 of createAppConstants.additionalFoldersToCreate){const _0xb3b99b=_0x35c0d9__namespace['join'](_0x3e1df0,_0x509b21);!fs.existsSync(_0xb3b99b)&&(fs.mkdirSync(_0xb3b99b,{'recursive':!![]}),loggers.logInfoRaw('Created\x20folder:\x20'+_0x509b21));}loggers.logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function main(){const _0x1653f3=process['argv']['slice'](-0x22ee+0x2534+-0x244);_0x1653f3['length']<-0x1863+0x1*0x203c+-0x7d8&&(loggers.logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](-0x7d4+-0x3b9*-0x2+0x63));const _0x57cf1a=_0x1653f3[-0x424+-0x14ee*0x1+-0x2*-0xc89],_0x158cd7=_0x35c0d9__namespace['resolve'](process['cwd'](),_0x57cf1a);loggers.logInfoRaw('\x0aCreating\x20'+constants.projectName+'\x20project\x20\x22'+_0x57cf1a+'\x22...\x0a');try{checkTargetFolder(_0x158cd7),createNextProject(_0x57cf1a,_0x158cd7),await copyProjectFiles(_0x158cd7),await overridePackageJson(_0x158cd7),createAdditionalFolders(_0x158cd7),await createEnvFile(_0x158cd7),await updateLayoutTitle(_0x158cd7,_0x57cf1a),loggers.logInfoRaw('\x0a'+constants.projectName+'\x20project\x20\x22'+_0x57cf1a+'\x22\x20is\x20ready!'),loggers.logInfoRaw('Next\x20steps:'),loggers.logInfoRaw('\x20\x20cd\x20'+_0x57cf1a),loggers.logInfoRaw('\x20\x20npm\x20run\x20prod'),loggers.logInfoRaw('\x20\x20npm\x20start');}catch(_0xc3d32f){const _0x46c21a=_0xc3d32f instanceof Error?_0xc3d32f['message']:'Unknown\x20error';loggers.logStringError('Error:'),loggers.logStringError(_0x46c21a),fs.existsSync(_0x158cd7)&&(loggers.logInfoRaw('Cleaning\x20up...'),fs.rmSync(_0x158cd7,{'recursive':!![],'force':!![]})),process['exit'](0x15cb*0x1+-0xe7c+-0x74e);}}__name(main,'main');async function updateLayoutTitle(_0x863b24,_0x438ceb){const _0x1f30c2=_0x35c0d9__namespace['join'](_0x863b24,'src/app/layout.tsx');if(!fs.existsSync(_0x1f30c2))throw errors.createError('layout.tsx\x20not\x20found\x20at\x20'+_0x1f30c2+',\x20cannot\x20update\x20title.');let _0x36f4ba=await fs.promises['readFile'](_0x1f30c2,'utf8');const _0x1e401d=/"SaaS Kit"/g;if(!_0x1e401d['test'](_0x36f4ba))throw errors.createError('SaaS\x20Kit\x20not\x20found\x20in\x20layout.tsx,\x20cannot\x20update\x20title.');_0x36f4ba=_0x36f4ba['replace'](_0x1e401d,'\x22'+_0x438ceb+'\x22'),await fs.promises['writeFile'](_0x1f30c2,_0x36f4ba,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle'),main()['catch'](_0x22bbba=>{const _0x3bf0a4=_0x22bbba instanceof Error?_0x22bbba['message']:'Unknown\x20error';loggers.logStringError('Unhandled\x20error:'),loggers.logStringError(_0x3bf0a4),process['exit'](-0x7*0x24b+-0x238f+0x339d);});
|
|
@@ -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
|
|
7
|
-
import
|
|
6
|
+
import * as _0x35c0d9 from 'path';
|
|
7
|
+
import _0x58757c 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=(
|
|
18
|
+
'use strict';var __defProp=Object['defineProperty'],__name=(_0xed842a,_0x12d9ae)=>__defProp(_0xed842a,'name',{'value':_0x12d9ae,'configurable':!![]});const requiredNodeVersion='v18.0.0';process['version']<requiredNodeVersion&&(logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](0x4*0x78a+-0xbf8+-0x5f*0x31));const filename=fileURLToPath(import.meta['url']),sourceDir='../../../../',binDir=_0x35c0d9['dirname'](filename),repoRoot=_0x35c0d9['resolve'](binDir,sourceDir),envLocalPath=_0x35c0d9['join'](binDir,''+sourceDir+folders['cli']+'/.env'),envTemplate=_0x58757c['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[folders['cli']+'/constants'];function runCommand(_0x17ba9a,_0x45cdb0){logInfoRaw('Executing:\x20'+_0x17ba9a);try{execSync(_0x17ba9a,{'stdio':'inherit','cwd':_0x45cdb0??process['cwd']()});}catch(_0x5e9aa5){const _0x37a626=_0x5e9aa5 instanceof Error?_0x5e9aa5['message']:'Unknown\x20error';logStringError('Error\x20executing:\x20'+_0x17ba9a),logStringError(_0x37a626),process['exit'](0x147*-0x3+-0x1dfb+0x1*0x21d1);}}__name(runCommand,'runCommand');function checkTargetFolder(_0x14d0c5){existsSync(_0x14d0c5)&&(logStringError('Error:\x20Folder\x20\x22'+_0x35c0d9['basename'](_0x14d0c5)+'\x22\x20already\x20exists.'),process['exit'](-0xb9+0x1*-0x19aa+0xd32*0x2));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x5ead65=_0x35c0d9['resolve'](repoRoot,'package.json'),_0x5b10cd=JSON['parse'](_0x58757c['readFileSync'](_0x5ead65,'utf-8'));return String(_0x5b10cd['devDependencies']?.['next']??_0x5b10cd['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');function createNextProject(_0x483b6f,_0xe7405e){logInfoRaw('Creating\x20Next.js\x20project...');const _0x1424ed=getCreateNextAppVersion(),_0x2d5a8c=['npx\x20create-next-app@'+_0x1424ed+'\x20\x22'+_0x483b6f+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git']['join']('\x20');runCommand(_0x2d5a8c,_0x35c0d9['dirname'](_0xe7405e)),logInfoRaw('Next.js\x20project\x20created!');}__name(createNextProject,'createNextProject');async function createEnvFile(_0x4e97d2){logInfoRaw('Creating\x20.env\x20file\x20with\x20default\x20values...');const _0x9a3b18=_0x35c0d9['join'](_0x4e97d2,'.env');try{await promises['writeFile'](_0x9a3b18,envTemplate,'utf8'),logInfoRaw('.env\x20file\x20created\x20with\x20values!');}catch(_0x4fa1a7){const _0x53e2e4=_0x4fa1a7 instanceof Error?_0x4fa1a7['message']:'Unknown\x20error';logStringError('Error\x20creating\x20.env\x20file:'),logStringError(_0x53e2e4);throw _0x4fa1a7;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x1407cb){const _0x4e2180=_0x35c0d9['join'](_0x1407cb,'package.json'),_0x1f15b2=_0x35c0d9['join'](repoRoot,folders['cli']+'/package-template.json');try{const _0x5c3868=JSON['parse'](await promises['readFile'](_0x4e2180,'utf8')),_0x41e282=_0x5c3868['name'],_0x59af61=JSON['parse'](await promises['readFile'](_0x1f15b2,'utf8')),_0x3086d5={..._0x59af61,'name':_0x41e282};await promises['writeFile'](_0x4e2180,JSON['stringify'](_0x3086d5,null,0xba0+-0x1af2+-0x24*-0x6d)+'\x0a','utf8');}catch(_0x4ea532){const _0x524f1e=_0x4ea532 instanceof Error?_0x4ea532['message']:'Unknown\x20error';logStringError('Error\x20overriding\x20package.json:'),logStringError(_0x524f1e);throw _0x4ea532;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x5f052e){const _0x3697e2=/(import\s+[^'"]*from\s+["'])([^"']+)(["'])/g;return _0x5f052e['replace'](_0x3697e2,(_0x413792,_0x41110a,_0x2e2e51,_0x210fc9)=>{if(!_0x2e2e51['startsWith'](aliasSymbols['atSign'])||_0x2e2e51['startsWith'](npmPackages['saasKit']))return _0x413792;if(_0x2e2e51['startsWith'](aliasSymbols['atSign']+folders['server'])||_0x2e2e51['includes']('/'+folders['server']+'/'))return ''+_0x41110a+npmPackages['saasKitServer']+_0x210fc9;return ''+_0x41110a+npmPackages['saasKit']+_0x210fc9;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x577f1e){logInfoRaw('Copying\x20'+projectName+'\x20files...');for(const _0x573b44 of allFilesToCopy){const _0x2fcb70=folders['cli']+'/'+_0x573b44,_0x57e3ac=_0x35c0d9['join'](repoRoot,_0x2fcb70),_0x17eb5a=replaceToolsFolder(_0x573b44),_0x594f92=_0x35c0d9['join'](_0x577f1e,_0x17eb5a);if(existsSync(_0x57e3ac)){const _0x5bde37=await promises['stat'](_0x57e3ac);_0x5bde37['isDirectory']()?await copyDirectoryContents(_0x57e3ac,_0x594f92):await copyAndProcessFile(_0x57e3ac,_0x594f92);}else logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0x2fcb70);}logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0xaf404a){let _0x4652d8=_0xaf404a;for(const [_0x595d10,_0x23d925]of Object['entries'](toolsFoldersToReplace)){if(_0x4652d8['startsWith'](_0x595d10)&&isWithIndexer(_0x23d925)){const _0x53d7fd=_0x23d925;for(const _0x2a5350 in _0x53d7fd){const _0x7fcba1=_0x53d7fd[_0x2a5350];isString(_0x7fcba1)&&(_0x4652d8=_0x4652d8['replace'](_0x2a5350,_0x7fcba1));}break;}}return _0x4652d8;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x246e33,_0x266b92,_0x4c26ee=![]){const _0x26b60b=_0x35c0d9['relative'](_0x266b92,_0x246e33),_0x2361cb=_0x26b60b['split'](_0x35c0d9['sep']),_0x171040=_0x35c0d9['relative'](repoRoot,_0x246e33)['replace'](/\\/g,'/');return _0x4c26ee&&foldersToIgnore['includes'](_0x171040)||foldersToIgnore['some'](_0x80abe7=>_0x2361cb['some'](_0x4e352c=>_0x4e352c===_0x80abe7));}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x57ab89,_0x3dea44){!existsSync(_0x3dea44)&&mkdirSync(_0x3dea44,{'recursive':!![]});try{const _0x1bba63=await promises['readdir'](_0x57ab89,{'withFileTypes':!![]});for(const _0xb6ae4b of _0x1bba63){const _0x47ad5c=_0x35c0d9['join'](_0x57ab89,_0xb6ae4b['name']),_0xfbaeaf=_0x35c0d9['join'](_0x3dea44,_0xb6ae4b['name']);!shouldIgnorePath(_0x47ad5c,_0x57ab89,_0xb6ae4b['isDirectory']())&&(_0xb6ae4b['isDirectory']()?await copyDirectoryContents(_0x47ad5c,_0xfbaeaf):await copyAndProcessFile(_0x47ad5c,_0xfbaeaf));}}catch(_0x2cb329){const _0x405c1f=_0x2cb329 instanceof Error?_0x2cb329['message']:'Unknown\x20error';logStringError('Error\x20reading\x20directory\x20'+_0x57ab89+':\x20'+_0x405c1f);throw _0x2cb329;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x1ead22,_0x4f9c64){const _0x20a971=_0x35c0d9['dirname'](_0x4f9c64);!existsSync(_0x20a971)&&mkdirSync(_0x20a971,{'recursive':!![]});const _0x4f6ae7=await promises['stat'](_0x1ead22);if(_0x4f6ae7['isDirectory']())await copyDirectoryContents(_0x1ead22,_0x4f9c64);else {const _0x341566=await promises['readFile'](_0x1ead22,'utf8'),_0xcdc884=replaceImports(_0x341566);await promises['writeFile'](_0x4f9c64,_0xcdc884,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x3e1df0){for(const _0x509b21 of additionalFoldersToCreate){const _0xb3b99b=_0x35c0d9['join'](_0x3e1df0,_0x509b21);!existsSync(_0xb3b99b)&&(mkdirSync(_0xb3b99b,{'recursive':!![]}),logInfoRaw('Created\x20folder:\x20'+_0x509b21));}logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function main(){const _0x1653f3=process['argv']['slice'](-0x22ee+0x2534+-0x244);_0x1653f3['length']<-0x1863+0x1*0x203c+-0x7d8&&(logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](-0x7d4+-0x3b9*-0x2+0x63));const _0x57cf1a=_0x1653f3[-0x424+-0x14ee*0x1+-0x2*-0xc89],_0x158cd7=_0x35c0d9['resolve'](process['cwd'](),_0x57cf1a);logInfoRaw('\x0aCreating\x20'+projectName+'\x20project\x20\x22'+_0x57cf1a+'\x22...\x0a');try{checkTargetFolder(_0x158cd7),createNextProject(_0x57cf1a,_0x158cd7),await copyProjectFiles(_0x158cd7),await overridePackageJson(_0x158cd7),createAdditionalFolders(_0x158cd7),await createEnvFile(_0x158cd7),await updateLayoutTitle(_0x158cd7,_0x57cf1a),logInfoRaw('\x0a'+projectName+'\x20project\x20\x22'+_0x57cf1a+'\x22\x20is\x20ready!'),logInfoRaw('Next\x20steps:'),logInfoRaw('\x20\x20cd\x20'+_0x57cf1a),logInfoRaw('\x20\x20npm\x20run\x20prod'),logInfoRaw('\x20\x20npm\x20start');}catch(_0xc3d32f){const _0x46c21a=_0xc3d32f instanceof Error?_0xc3d32f['message']:'Unknown\x20error';logStringError('Error:'),logStringError(_0x46c21a),existsSync(_0x158cd7)&&(logInfoRaw('Cleaning\x20up...'),rmSync(_0x158cd7,{'recursive':!![],'force':!![]})),process['exit'](0x15cb*0x1+-0xe7c+-0x74e);}}__name(main,'main');async function updateLayoutTitle(_0x863b24,_0x438ceb){const _0x1f30c2=_0x35c0d9['join'](_0x863b24,'src/app/layout.tsx');if(!existsSync(_0x1f30c2))throw createError('layout.tsx\x20not\x20found\x20at\x20'+_0x1f30c2+',\x20cannot\x20update\x20title.');let _0x36f4ba=await promises['readFile'](_0x1f30c2,'utf8');const _0x1e401d=/"SaaS Kit"/g;if(!_0x1e401d['test'](_0x36f4ba))throw createError('SaaS\x20Kit\x20not\x20found\x20in\x20layout.tsx,\x20cannot\x20update\x20title.');_0x36f4ba=_0x36f4ba['replace'](_0x1e401d,'\x22'+_0x438ceb+'\x22'),await promises['writeFile'](_0x1f30c2,_0x36f4ba,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle'),main()['catch'](_0x22bbba=>{const _0x3bf0a4=_0x22bbba instanceof Error?_0x22bbba['message']:'Unknown\x20error';logStringError('Unhandled\x20error:'),logStringError(_0x3bf0a4),process['exit'](-0x7*0x24b+-0x238f+0x339d);});
|