@fernir2/saas-kit-cli 0.1.33 → 0.1.35
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/base-repo/app-constants/project-paths.cjs.js +1 -1
- package/base-repo/app-constants/project-paths.js +1 -1
- package/base-repo/constants/create-app-constants.cjs.js +1 -1
- package/base-repo/constants/create-app-constants.js +1 -1
- package/base-repo/constants/packages.cjs.js +1 -1
- package/base-repo/constants/packages.cjs2.js +1 -1
- package/base-repo/constants/packages.js +1 -1
- package/base-repo/constants/packages2.js +1 -1
- package/cli/.env.example +61 -55
- package/cli/README.md +3 -101
- package/cli/bin/{index.ts → create.ts} +444 -383
- package/cli/configs/drizzle-cli-config.ts +14 -0
- package/cli/configs/playwright-cli-config.ts +34 -0
- package/cli/configs/tsconfig.cli.json +37 -0
- package/cli/configs/tsconfig.server.json +13 -0
- package/cli/drizzle.config.ts +6 -12
- package/cli/next.config.js +73 -80
- package/cli/npm-commands/{gen-meta/index.ts → gen-meta.ts} +3 -3
- package/cli/npm-commands/gen-schema.ts +3 -0
- package/cli/npm-commands/{migrate-db/migrate-db.ts → migrate-db.ts} +15 -15
- package/cli/npm-commands/{seed-db/seed-db.ts → seed-db.ts} +15 -15
- package/cli/package-template.json +61 -64
- package/cli/playwright.config.ts +6 -34
- package/cli/postcss.config.mjs +7 -9
- package/cli/server.ts +41 -41
- package/cli/src/app/api/v1/[resourceName]/[id]/route.ts +11 -0
- package/cli/src/app/api/v1/[resourceName]/route.ts +14 -0
- package/cli/src/app/api/v1/[resourceName]/upsert/route.ts +3 -0
- package/cli/src/app/api/v1/log/route.ts +7 -0
- package/cli/src/app/api/v1/otheruser/[id]/route.ts +14 -0
- package/cli/src/app/api/v1/otheruser/route.ts +7 -0
- package/cli/src/app/api/v1/password/forgotpassword/route.ts +3 -0
- package/cli/src/app/api/v1/password/resetpassword/route.ts +3 -0
- package/cli/src/app/api/v1/payment/method/route.ts +4 -0
- package/cli/src/app/api/v1/payment/route.ts +3 -0
- package/cli/src/app/api/v1/payment/verify-fail/route.ts +3 -0
- package/cli/src/app/api/v1/payment/verify-success/route.ts +3 -0
- package/cli/src/app/api/v1/preload/route.ts +3 -0
- package/cli/src/app/api/v1/searchable-resources/route.ts +11 -0
- package/cli/src/app/api/v1/searchresult/route.ts +35 -0
- package/cli/src/app/api/v1/sign-in/route.ts +3 -0
- package/cli/src/app/api/v1/sign-out/route.ts +3 -0
- package/cli/src/app/api/v1/sign-up/route.ts +3 -0
- package/cli/src/app/api/v1/subscription/cancel/route.ts +3 -0
- package/cli/src/app/api/v1/subscription/create/route.ts +3 -0
- package/cli/src/app/api/v1/subscription/update/route.ts +3 -0
- package/cli/src/app/api/v1/uimeta/route.ts +3 -0
- package/cli/src/app/api/v1/uimetas/route.ts +3 -0
- package/cli/src/app/api/v1/userpermission/route.ts +3 -0
- package/cli/src/app/api/v1/visible-workspace/route.ts +5 -0
- package/cli/src/app/api/v1/workspace/change/route.ts +5 -0
- package/cli/src/app/f/(private)/dashboard/page.tsx +8 -8
- package/cli/src/app/f/(private)/dynamiclayout/page.tsx +8 -8
- package/cli/src/app/f/(private)/edituser/[id]/page.tsx +8 -8
- package/cli/src/app/f/(private)/edituser/page.tsx +8 -8
- package/cli/src/app/f/(private)/layout.tsx +5 -5
- package/cli/src/app/f/(private)/lm/page.tsx +8 -8
- package/cli/src/app/f/(private)/payment-plans/page.tsx +8 -8
- package/cli/src/app/f/(private)/preload/page.tsx +8 -8
- package/cli/src/app/f/(private)/statusboard/page.tsx +8 -8
- package/cli/src/app/f/(private)/userlist/page.tsx +8 -8
- package/cli/src/app/f/(private)/view/page.tsx +9 -8
- package/cli/src/app/f/defaultRedirect/page.tsx +9 -9
- package/cli/src/app/f/editpassword/page.tsx +8 -8
- package/cli/src/app/f/forgotpassword/page.tsx +13 -13
- package/cli/src/app/f/resetpassword/page.tsx +11 -16
- package/cli/src/app/f/sign-in/microsoft/page.tsx +8 -8
- package/cli/src/app/f/sign-in/page.tsx +13 -13
- package/cli/src/app/f/sign-up/page.tsx +13 -13
- package/cli/src/app/f/test/feed/page.tsx +8 -8
- package/cli/src/app/f/test/file-upload/page.tsx +8 -8
- package/cli/src/app/f/test/layout.tsx +5 -5
- package/cli/src/app/f/test/page.tsx +8 -8
- package/cli/src/app/globals.css +1 -1
- package/cli/src/app/layout.tsx +46 -44
- package/cli/src/app/page.tsx +9 -9
- package/cli/src/app/styles/common.css +71 -74
- package/cli/src/app/styles/rich-text-editor.css +130 -130
- package/cli/{global-setup.ts → test/global-setup.ts} +25 -25
- package/cli/tsconfig.json +28 -65
- package/cli/tsconfig.server.json +17 -14
- package/fd-toolbox/api/api-client.cjs.js +19 -0
- package/fd-toolbox/api/api-client.js +11 -0
- package/{level2/fd-toolbox → fd-toolbox}/api/api-path-names.cjs.js +2 -2
- package/fd-toolbox/api/api-paths.cjs.js +9 -0
- package/fd-toolbox/api/api-paths.js +7 -0
- package/fd-toolbox/api/base-api.cjs.js +22 -0
- package/fd-toolbox/api/base-api.js +13 -0
- package/{level2/fd-toolbox → fd-toolbox}/auth/login-states.cjs.js +1 -1
- package/{level2/fd-toolbox → fd-toolbox}/auth/login-states.js +1 -1
- package/fd-toolbox/auth/session-storage.cjs.js +12 -0
- package/fd-toolbox/auth/session-storage.js +7 -0
- package/{level2/fd-toolbox → fd-toolbox}/auth/tokens.cjs.js +1 -1
- package/{level2/fd-toolbox → fd-toolbox}/auth/tokens.js +1 -1
- package/{level2/fd-toolbox → fd-toolbox}/constants/constants.cjs.js +1 -1
- package/fd-toolbox/constants/constants.js +4 -0
- package/{level2/fd-toolbox → fd-toolbox}/constants/header-names.cjs.js +1 -1
- package/{level2/fd-toolbox → fd-toolbox}/constants/header-names.js +1 -1
- package/{level2/fd-toolbox → fd-toolbox}/constants/public-files.cjs.js +2 -1
- package/{level2/fd-toolbox → fd-toolbox}/constants/public-files.js +2 -2
- package/fd-toolbox/enums/enums.cjs.js +26 -0
- package/fd-toolbox/enums/enums.js +4 -0
- package/{level2/fd-toolbox → fd-toolbox}/errors/error-handler.cjs.js +1 -1
- package/fd-toolbox/errors/error-handler.js +8 -0
- package/fd-toolbox/errors/errors.cjs.js +6 -0
- package/fd-toolbox/errors/errors.js +4 -0
- package/fd-toolbox/errors/problem-details.cjs.js +8 -0
- package/fd-toolbox/errors/problem-details.js +6 -0
- package/fd-toolbox/functions/value-checking-functions.cjs.js +10 -0
- package/fd-toolbox/functions/value-checking-functions.js +6 -0
- package/{level2/fd-toolbox → fd-toolbox}/http/url/urls.cjs.js +1 -1
- package/fd-toolbox/http/url/urls.js +6 -0
- package/fd-toolbox/infra/env-config.cjs.js +8 -0
- package/fd-toolbox/infra/env-config.js +6 -0
- package/fd-toolbox/infra/env-functions.cjs.js +16 -0
- package/fd-toolbox/infra/env-functions.js +11 -0
- package/fd-toolbox/infra/env-schema.cjs.js +12 -0
- package/fd-toolbox/infra/env-schema.js +8 -0
- package/{level2/fd-toolbox → fd-toolbox}/infra/env-store.cjs.js +1 -1
- package/{level2/fd-toolbox → fd-toolbox}/infra/env-store.js +1 -1
- package/{level2/fd-toolbox → fd-toolbox}/lib/environments.cjs.js +2 -2
- package/{level2/fd-toolbox → fd-toolbox}/lib/environments.js +2 -2
- package/fd-toolbox/lib/utils.cjs.js +29 -0
- package/fd-toolbox/lib/utils.js +13 -0
- package/fd-toolbox/local-storage/local-storage.cjs.js +12 -0
- package/fd-toolbox/local-storage/local-storage.js +7 -0
- package/fd-toolbox/logging/loggers.cjs.js +16 -0
- package/fd-toolbox/logging/loggers.js +10 -0
- package/fd-toolbox/notifications.cjs.js +14 -0
- package/fd-toolbox/notifications.js +7 -0
- package/{level2/fd-toolbox → fd-toolbox}/odata/odata-constants.cjs.js +1 -1
- package/fd-toolbox/odata/odata-constants.js +4 -0
- package/fd-toolbox/odata/odatas.cjs.js +11 -0
- package/fd-toolbox/odata/odatas.js +9 -0
- package/fd-toolbox/odata/services/odata-filters.cjs.js +11 -0
- package/fd-toolbox/odata/services/odata-filters.js +9 -0
- package/fd-toolbox/paths/paths-names.cjs.js +9 -0
- package/fd-toolbox/paths/paths-names.js +6 -0
- package/{level2/fd-toolbox → fd-toolbox}/routing/login-routers.cjs.js +1 -1
- package/{level2/fd-toolbox → fd-toolbox}/routing/login-routers.js +1 -1
- package/fd-toolbox/routing/paths.cjs.js +8 -0
- package/fd-toolbox/routing/paths.js +6 -0
- package/{level2/fd-toolbox → fd-toolbox}/strings/strings-constants.cjs.js +1 -1
- package/fd-toolbox/strings/strings-constants.js +4 -0
- package/fd-toolbox/strings/strings.cjs.js +10 -0
- package/fd-toolbox/strings/strings.js +7 -0
- package/fd-toolbox/types/ensure-type.cjs.js +21 -0
- package/fd-toolbox/types/ensure-type.js +4 -0
- package/fd-toolbox-core/core/name-of.cjs.js +8 -0
- package/fd-toolbox-core/core/name-of.js +4 -0
- package/fd-toolbox-core/types/resource-with-id.cjs.js +9 -0
- package/fd-toolbox-core/types/resource-with-id.js +6 -0
- package/level2/cli/bin/index.cjs.js +8 -0
- package/level2/cli/bin/index.js +6 -0
- package/level2/cli/create/bin/create.cjs.js +42 -0
- package/level2/cli/create/bin/create.js +20 -0
- package/level2/npm-commands/build-npm/cli-contents.cjs.js +9 -0
- package/level2/npm-commands/build-npm/cli-contents.js +6 -0
- package/level2/npm-commands/build-npm/path.cjs.js +1 -1
- package/level2/npm-commands/build-npm/path.js +2 -2
- package/package.json +31 -30
- package/cli/.gitlab-ci.yml +0 -16
- package/cli/.husky/commit-msg +0 -1
- package/cli/.husky/pre-commit +0 -1
- package/cli/eslint.config.js +0 -10
- package/cli/npm-commands/gen-schema/index.ts +0 -5
- package/cli/npm-commands/migrate-db/index.ts +0 -5
- package/cli/npm-commands/seed-db/index.ts +0 -5
- package/cli/tailwind.config.ts +0 -13
- package/cli/tsconfig.declaration.json +0 -48
- package/level2/cli/create-saas-kit-app/bin/index.cjs.js +0 -40
- package/level2/cli/create-saas-kit-app/bin/index.js +0 -18
- package/level2/fd-toolbox/api/api-client.cjs.js +0 -19
- package/level2/fd-toolbox/api/api-client.js +0 -11
- package/level2/fd-toolbox/api/api-paths.cjs.js +0 -9
- package/level2/fd-toolbox/api/api-paths.js +0 -7
- package/level2/fd-toolbox/api/base-api.cjs.js +0 -22
- package/level2/fd-toolbox/api/base-api.js +0 -13
- package/level2/fd-toolbox/auth/session-storage.cjs.js +0 -12
- package/level2/fd-toolbox/auth/session-storage.js +0 -7
- package/level2/fd-toolbox/constants/constants.js +0 -4
- package/level2/fd-toolbox/enums/enums.cjs.js +0 -26
- package/level2/fd-toolbox/enums/enums.js +0 -4
- package/level2/fd-toolbox/errors/error-handler.js +0 -8
- package/level2/fd-toolbox/errors/errors.cjs.js +0 -6
- package/level2/fd-toolbox/errors/errors.js +0 -4
- package/level2/fd-toolbox/errors/problem-details.cjs.js +0 -8
- package/level2/fd-toolbox/errors/problem-details.js +0 -6
- package/level2/fd-toolbox/functions/value-checking-functions.cjs.js +0 -10
- package/level2/fd-toolbox/functions/value-checking-functions.js +0 -6
- package/level2/fd-toolbox/http/url/urls.js +0 -6
- package/level2/fd-toolbox/infra/env-config.cjs.js +0 -8
- package/level2/fd-toolbox/infra/env-config.js +0 -6
- package/level2/fd-toolbox/infra/env-functions.cjs.js +0 -16
- package/level2/fd-toolbox/infra/env-functions.js +0 -11
- package/level2/fd-toolbox/infra/env-schema.cjs.js +0 -12
- package/level2/fd-toolbox/infra/env-schema.js +0 -8
- package/level2/fd-toolbox/lib/utils.cjs.js +0 -29
- package/level2/fd-toolbox/lib/utils.js +0 -13
- package/level2/fd-toolbox/local-storage/local-storage.cjs.js +0 -12
- package/level2/fd-toolbox/local-storage/local-storage.js +0 -7
- package/level2/fd-toolbox/logging/loggers.cjs.js +0 -16
- package/level2/fd-toolbox/logging/loggers.js +0 -10
- package/level2/fd-toolbox/notifications.cjs.js +0 -14
- package/level2/fd-toolbox/notifications.js +0 -7
- package/level2/fd-toolbox/odata/odata-constants.js +0 -4
- package/level2/fd-toolbox/odata/odatas.cjs.js +0 -11
- package/level2/fd-toolbox/odata/odatas.js +0 -9
- package/level2/fd-toolbox/odata/services/odata-filters.cjs.js +0 -11
- package/level2/fd-toolbox/odata/services/odata-filters.js +0 -9
- package/level2/fd-toolbox/paths/paths-names.cjs.js +0 -9
- package/level2/fd-toolbox/paths/paths-names.js +0 -6
- package/level2/fd-toolbox/routing/paths.cjs.js +0 -8
- package/level2/fd-toolbox/routing/paths.js +0 -6
- package/level2/fd-toolbox/strings/strings-constants.js +0 -4
- package/level2/fd-toolbox/strings/strings.cjs.js +0 -10
- package/level2/fd-toolbox/strings/strings.js +0 -7
- package/level2/fd-toolbox/types/ensure-type.cjs.js +0 -18
- package/level2/fd-toolbox/types/ensure-type.js +0 -4
- package/level2/fd-toolbox-core/core/name-of.cjs.js +0 -8
- package/level2/fd-toolbox-core/core/name-of.js +0 -4
- package/level2/fd-toolbox-core/types/resource-with-id.cjs.js +0 -9
- package/level2/fd-toolbox-core/types/resource-with-id.js +0 -6
- /package/{level2/fd-toolbox → fd-toolbox}/api/api-path-names.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/constants/api-constants.cjs.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/constants/api-constants.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/constants/environment-constants.cjs.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/constants/environment-constants.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/constants/extensions.cjs.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/constants/extensions.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/constants/http-status-codes.cjs.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/constants/http-status-codes.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/constants/meta-query-params.cjs.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/constants/meta-query-params.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/constants/representations.cjs.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/constants/representations.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/errors/error-statuses.cjs.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/errors/error-statuses.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/http/http-constants.cjs.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/http/http-constants.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/infra/env-setting-types.cjs.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/infra/env-setting-types.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/infra/toolbox-env-setting-keys.cjs.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/infra/toolbox-env-setting-keys.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/logging/logging-constants.cjs.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/logging/logging-constants.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/odata/odata-enums.cjs.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/odata/odata-enums.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/resources/resource-names.cjs.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/resources/resource-names.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/routing/routes.cjs.js +0 -0
- /package/{level2/fd-toolbox → fd-toolbox}/routing/routes.js +0 -0
- /package/{level2/fd-toolbox-core → fd-toolbox-core}/constants/meta-constants.cjs.js +0 -0
- /package/{level2/fd-toolbox-core → fd-toolbox-core}/constants/meta-constants.js +0 -0
- /package/{level2/fd-toolbox-core → fd-toolbox-core}/constants/promises.cjs.js +0 -0
- /package/{level2/fd-toolbox-core → fd-toolbox-core}/constants/promises.js +0 -0
- /package/{level2/fd-toolbox-core → fd-toolbox-core}/enums/log-severities.cjs.js +0 -0
- /package/{level2/fd-toolbox-core → fd-toolbox-core}/enums/log-severities.js +0 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var child_process = require('child_process');
|
|
5
|
+
var fs = require('fs');
|
|
6
|
+
var node_url = require('node:url');
|
|
7
|
+
var _0x3a74e9 = require('path');
|
|
8
|
+
var _0x473e78 = require('node:fs');
|
|
9
|
+
var createAppConstants = require('../../../../base-repo/constants/create-app-constants.cjs.js');
|
|
10
|
+
var loggers = require('../../../../fd-toolbox/logging/loggers.cjs.js');
|
|
11
|
+
var constants = require('../../../../fd-toolbox/constants/constants.cjs.js');
|
|
12
|
+
var path = require('../../../npm-commands/build-npm/path.cjs.js');
|
|
13
|
+
var errors = require('../../../../fd-toolbox/errors/errors.cjs.js');
|
|
14
|
+
var projectPaths = require('../../../../base-repo/app-constants/project-paths.cjs.js');
|
|
15
|
+
var packages = require('../../../../base-repo/constants/packages.cjs.js');
|
|
16
|
+
var aliases = require('../../../../base-repo/app-constants/aliases.cjs.js');
|
|
17
|
+
var ensureType = require('../../../../fd-toolbox/types/ensure-type.cjs.js');
|
|
18
|
+
var cliContents = require('../../../npm-commands/build-npm/cli-contents.cjs.js');
|
|
19
|
+
|
|
20
|
+
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
21
|
+
function _interopNamespaceDefault(e) {
|
|
22
|
+
var n = Object.create(null);
|
|
23
|
+
if (e) {
|
|
24
|
+
Object.keys(e).forEach(function (k) {
|
|
25
|
+
if (k !== 'default') {
|
|
26
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
27
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
28
|
+
enumerable: true,
|
|
29
|
+
get: function () { return e[k]; }
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
n.default = e;
|
|
35
|
+
return Object.freeze(n);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
var _0x3a74e9__namespace = /*#__PURE__*/_interopNamespaceDefault(_0x3a74e9);
|
|
39
|
+
|
|
40
|
+
var __defProp=Object['defineProperty'],__name=(_0x486649,_0x35498d)=>__defProp(_0x486649,'name',{'value':_0x35498d,'configurable':!![]});const requiredNodeVersion='v20.0.0';process['version']<requiredNodeVersion&&(loggers.logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](0xdf*0x4+-0x9d3+0x658));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/bin/create.cjs.js', document.baseURI).href))),sourceDir='../../../../',binDir=_0x3a74e9__namespace['dirname'](filename),repoRoot=_0x3a74e9__namespace['resolve'](binDir,sourceDir),envLocalPath=_0x3a74e9__namespace['join'](binDir,''+sourceDir+projectPaths.folders['cli']+_0x3a74e9__namespace['sep']+projectPaths.files['envExample']),envTemplate=_0x473e78['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[''+projectPaths.folders['cli']+_0x3a74e9__namespace['sep']+projectPaths.folders['constants'],''+projectPaths.folders['cli']+_0x3a74e9__namespace['sep']+projectPaths.files['packageTemplate'],''+projectPaths.folders['cli']+_0x3a74e9__namespace['sep']+projectPaths.files['envExample'],''+projectPaths.folders['cli']+_0x3a74e9__namespace['sep']+projectPaths.folders['bin'],''+projectPaths.folders['cli']+_0x3a74e9__namespace['sep']+projectPaths.folders['configs']];function runCommand(_0xa611b,_0x3daaf8){loggers.logInfoRaw('Executing:\x20'+_0xa611b);try{child_process.execSync(_0xa611b,{'stdio':'inherit','cwd':_0x3daaf8??process['cwd']()});}catch(_0x208fed){const _0xefad39=_0x208fed instanceof Error?_0x208fed['message']:'Unknown\x20error';loggers.logStringError('Error\x20executing:\x20'+_0xa611b),loggers.logStringError(_0xefad39),process['exit'](0xec1+0x16a0+-0x2560);}}__name(runCommand,'runCommand');function checkTargetFolder(_0x5f3c8a){fs.existsSync(_0x5f3c8a)&&(loggers.logStringError('Error:\x20Folder\x20\x22'+_0x3a74e9__namespace['basename'](_0x5f3c8a)+'\x22\x20already\x20exists.'),process['exit'](0x1*0xbc6+-0x731*-0x5+-0x2fba));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x11a5f2=_0x3a74e9__namespace['resolve'](repoRoot,projectPaths.files['packageJson']),_0x51436c=JSON['parse'](_0x473e78['readFileSync'](_0x11a5f2,'utf-8'));return String(_0x51436c['devDependencies']?.['next']??_0x51436c['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');function createNextProject(_0x228e04,_0x2002fa){loggers.logInfoRaw('Creating\x20Next.js\x20project...');const _0x11fc98=getCreateNextAppVersion(),_0x3cf7fb=['npx\x20--yes\x20create-next-app@'+_0x11fc98+'\x20\x22'+_0x228e04+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git','--react-compiler']['join']('\x20');runCommand(_0x3cf7fb,_0x3a74e9__namespace['dirname'](_0x2002fa)),loggers.logInfoRaw('Next.js\x20project\x20created!');const _0x152673=_0x3a74e9__namespace['join'](_0x2002fa,'next.config.ts');_0x473e78['existsSync'](_0x152673)&&(_0x473e78['rmSync'](_0x152673),loggers.logInfoRaw('Removed\x20default\x20next.config.ts'));}__name(createNextProject,'createNextProject');async function createEnvFile(_0x1768a0){loggers.logInfoRaw('Creating\x20'+projectPaths.files['env']+'\x20file\x20with\x20default\x20values...');const _0x52ebb7=_0x3a74e9__namespace['join'](_0x1768a0,projectPaths.files['env']);try{await fs.promises['writeFile'](_0x52ebb7,envTemplate,'utf8'),loggers.logInfoRaw(projectPaths.files['env']+'\x20file\x20created\x20with\x20values!');}catch(_0xc7473e){const _0x151ce8=_0xc7473e instanceof Error?_0xc7473e['message']:'Unknown\x20error';loggers.logStringError('Error\x20creating\x20'+projectPaths.files['env']+'\x20file:'),loggers.logStringError(_0x151ce8);throw _0xc7473e;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x3c2987){const _0xd6b6d1=_0x3a74e9__namespace['join'](_0x3c2987,projectPaths.files['packageJson']),_0x5cb9a8=_0x3a74e9__namespace['join'](repoRoot,''+projectPaths.folders['cli']+_0x3a74e9__namespace['sep']+projectPaths.files['packageTemplate']);try{const _0x206f51=JSON['parse'](await fs.promises['readFile'](_0xd6b6d1,'utf8')),_0x4b04fe=_0x206f51['name'],_0x5f494d=JSON['parse'](await fs.promises['readFile'](_0x5cb9a8,'utf8')),_0xb4b75f={..._0x5f494d,'name':_0x4b04fe};await fs.promises['writeFile'](_0xd6b6d1,JSON['stringify'](_0xb4b75f,null,-0x19fa+0xc34*-0x1+0x10*0x263)+'\x0a','utf8');}catch(_0x1affb9){const _0x24229d=_0x1affb9 instanceof Error?_0x1affb9['message']:'Unknown\x20error';loggers.logStringError('Error\x20overriding\x20'+projectPaths.files['packageJson']+':'),loggers.logStringError(_0x24229d);throw _0x1affb9;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x4178f7){const _0x25649d=/(import\s+)([^'"]+)(\s+from\s+["'])([^"']+)(["'])/g;return _0x4178f7['replace'](_0x25649d,(_0x5c5d84,_0x4fb83e,_0x4f4f48,_0x29b01f,_0x4e92cd,_0x1013ab)=>{if(!_0x4e92cd['startsWith'](aliases.aliasSymbols['atSign'])||_0x4e92cd['startsWith'](packages.npmPackages['saasKit']))return _0x5c5d84;let _0x4cc02f;_0x4e92cd['startsWith'](aliases.aliasSymbols['atSign']+projectPaths.folders['server'])||_0x4e92cd['includes'](''+projectPaths.projectPaths['server'])?_0x4cc02f=packages.npmPackages['saasKitServer']:_0x4cc02f=packages.npmPackages['saasKit'];let _0x3a122a=_0x4f4f48['trim']();const _0x5e1150=/^type\b/['test'](_0x3a122a),_0x329618=/^\*\s+as\s+/['test'](_0x3a122a);return !_0x5e1150&&!_0x329618&&!_0x3a122a['startsWith']('{')&&(_0x3a122a='{\x20'+_0x3a122a+'\x20}'),''+_0x4fb83e+_0x3a122a+_0x29b01f+_0x4cc02f+_0x1013ab;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x4dae3d){loggers.logInfoRaw('Copying\x20'+constants.projectName+'\x20files...');for(const _0x41a56e of path.allFilesToCopy){const _0x44b6b1=''+projectPaths.folders['cli']+_0x3a74e9__namespace['sep']+_0x41a56e,_0x3cda46=_0x3a74e9__namespace['join'](repoRoot,_0x44b6b1),_0x1b5a82=replaceToolsFolder(_0x41a56e),_0x4ee457=_0x3a74e9__namespace['join'](_0x4dae3d,_0x1b5a82);if(fs.existsSync(_0x3cda46)){const _0x485e0b=await fs.promises['stat'](_0x3cda46);_0x485e0b['isDirectory']()?await copyDirectoryContents(_0x3cda46,_0x4ee457):await copyAndProcessFile(_0x3cda46,_0x4ee457);}else loggers.logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0x44b6b1);}loggers.logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0x51bd0a){let _0x4f3379=_0x51bd0a;for(const [_0x23d218,_0x30628b]of Object['entries'](createAppConstants.toolsFoldersToReplace)){if(_0x4f3379['startsWith'](_0x23d218)&&ensureType.isWithIndexer(_0x30628b)){const _0x9e78e=_0x30628b;for(const _0x45df5c in _0x9e78e){const _0xb54d2b=_0x9e78e[_0x45df5c];ensureType.isString(_0xb54d2b)&&(_0x4f3379=_0x4f3379['replace'](_0x45df5c,_0xb54d2b));}break;}}return _0x4f3379;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x13c424,_0x439d20,_0x15cd30=![]){const _0x3dac2e=_0x3a74e9__namespace['relative'](repoRoot,_0x13c424)['replace'](/\\/g,'/'),_0x4d3f92=foldersToIgnore['map'](_0x47ad6b=>_0x47ad6b['replace'](/\\/g,'/'));if(_0x4d3f92['includes'](_0x3dac2e))return !![];if(_0x15cd30){const _0x4207e9=_0x3a74e9__namespace['relative'](_0x439d20,_0x13c424)['replace'](/\\/g,'/'),_0x5cfe90=_0x4207e9['split']('/');return _0x4d3f92['some'](_0x3c6c10=>_0x5cfe90['some'](_0x431025=>_0x431025===_0x3c6c10));}return ![];}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x5e9645,_0x41fe22){!fs.existsSync(_0x41fe22)&&fs.mkdirSync(_0x41fe22,{'recursive':!![]});try{const _0x5841e3=await fs.promises['readdir'](_0x5e9645,{'withFileTypes':!![]});for(const _0x4c8715 of _0x5841e3){const _0x28a630=_0x3a74e9__namespace['join'](_0x5e9645,_0x4c8715['name']),_0x29595d=_0x3a74e9__namespace['join'](_0x41fe22,_0x4c8715['name']);!shouldIgnorePath(_0x28a630,_0x5e9645,_0x4c8715['isDirectory']())&&(_0x4c8715['isDirectory']()?await copyDirectoryContents(_0x28a630,_0x29595d):await copyAndProcessFile(_0x28a630,_0x29595d));}}catch(_0x3f61d6){const _0x177a4f=_0x3f61d6 instanceof Error?_0x3f61d6['message']:'Unknown\x20error';loggers.logStringError('Error\x20reading\x20directory\x20'+_0x5e9645+':\x20'+_0x177a4f);throw _0x3f61d6;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x27e4bd,_0x4d08f7){const _0x4b6e7d=_0x3a74e9__namespace['dirname'](_0x4d08f7);!fs.existsSync(_0x4b6e7d)&&fs.mkdirSync(_0x4b6e7d,{'recursive':!![]});const _0x2610cd=await fs.promises['stat'](_0x27e4bd);if(_0x2610cd['isDirectory']())await copyDirectoryContents(_0x27e4bd,_0x4d08f7);else {const _0x3f078c=_0x3a74e9__namespace['extname'](_0x27e4bd)['toLowerCase'](),_0x3db05d=['.ico','.png','.jpg','.jpeg','.webp','.gif','.svg','.pdf'];if(_0x3db05d['includes'](_0x3f078c)){await fs.promises['copyFile'](_0x27e4bd,_0x4d08f7);return;}const _0x2450ef=await fs.promises['readFile'](_0x27e4bd,'utf8'),_0x57943e=replaceImports(_0x2450ef);await fs.promises['writeFile'](_0x4d08f7,_0x57943e,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x56b756){for(const _0x2ee4b3 of createAppConstants.additionalFoldersToCreate){const _0x228e07=_0x3a74e9__namespace['join'](_0x56b756,_0x2ee4b3);!fs.existsSync(_0x228e07)&&(fs.mkdirSync(_0x228e07,{'recursive':!![]}),loggers.logInfoRaw('Created\x20folder:\x20'+_0x2ee4b3));}loggers.logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function setupPreCommitHooks(_0x1f6b79){const _0x5904e9=_0x3a74e9__namespace['join'](_0x1f6b79,projectPaths.folders['husky']),_0x121c55=_0x3a74e9__namespace['join'](_0x5904e9,projectPaths.files['preCommit']),_0x25dfe0=_0x3a74e9__namespace['join'](_0x5904e9,projectPaths.files['commitMsg']);fs.mkdirSync(_0x5904e9,{'recursive':!![]}),await fs.promises['writeFile'](_0x121c55,cliContents.cliScripts['preCommit'],'utf8'),await fs.promises['writeFile'](_0x25dfe0,cliContents.cliScripts['commitMsg'],'utf8'),runCommand(cliContents.cliScripts['chmodPreCommit'],_0x1f6b79),runCommand(cliContents.cliScripts['chmodCommitMsg'],_0x1f6b79);}__name(setupPreCommitHooks,'setupPreCommitHooks');async function setupEslintConfig(_0x561ec5){const _0x61944c=_0x3a74e9__namespace['join'](_0x561ec5,projectPaths.files['eslintConfigMjs']);fs.existsSync(_0x61944c)&&await fs.promises['rm'](_0x61944c);const _0x25e13e=_0x3a74e9__namespace['join'](_0x561ec5,projectPaths.files['eslintConfigJs']);await fs.promises['writeFile'](_0x25e13e,cliContents.cliEslintContent,'utf8');}__name(setupEslintConfig,'setupEslintConfig');async function enableRepoModeExtras(_0x5d12ac){loggers.logInfoRaw('Enabling\x20recommendation\x20mode\x20(-r)...'),runCommand(cliContents.cliScripts['gitInit'],_0x5d12ac),runCommand(cliContents.cliScripts['installDevHuskyTsx'],_0x5d12ac),runCommand(cliContents.cliScripts['setLint'],_0x5d12ac),runCommand(cliContents.cliScripts['installHusky'],_0x5d12ac),await setupPreCommitHooks(_0x5d12ac);}__name(enableRepoModeExtras,'enableRepoModeExtras');async function updateLayoutTitle(_0x4a83ef,_0x3d47c6){const _0x45dbe9=_0x3a74e9__namespace['join'](_0x4a83ef,''+projectPaths.projectPaths['app']+_0x3a74e9__namespace['sep']+projectPaths.files['layout']);if(!fs.existsSync(_0x45dbe9))throw errors.createError(projectPaths.files['layout']+'\x20not\x20found\x20at\x20'+_0x45dbe9+',\x20cannot\x20update\x20title.');let _0x5a8801=await fs.promises['readFile'](_0x45dbe9,'utf8');const _0x45b4d5=/"SaaS Kit"/g;if(!_0x45b4d5['test'](_0x5a8801))throw errors.createError('SaaS\x20Kit\x20not\x20found\x20in\x20'+projectPaths.files['layout']+',\x20cannot\x20update\x20title.');_0x5a8801=_0x5a8801['replace'](_0x45b4d5,'\x22'+_0x3d47c6+'\x22'),await fs.promises['writeFile'](_0x45dbe9,_0x5a8801,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle');async function create(_0x408b51){try{_0x408b51['length']<-0x43*-0x54+0x5*0x459+-0x2bb8&&(loggers.logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](0x2678+0xadf+0x34a*-0xf));const _0x1603dd=_0x408b51[-0x1*0xcdd+0x1e55+-0x1178],_0x11b72d=_0x408b51['includes']('-r'),_0x4ab865=_0x3a74e9__namespace['resolve'](process['cwd'](),_0x1603dd);loggers.logInfoRaw('\x0aCreating\x20'+constants.projectName+'\x20project\x20\x22'+_0x1603dd+'\x22...\x0a');try{checkTargetFolder(_0x4ab865),createNextProject(_0x1603dd,_0x4ab865),await copyProjectFiles(_0x4ab865),await overridePackageJson(_0x4ab865),createAdditionalFolders(_0x4ab865),await createEnvFile(_0x4ab865),await updateLayoutTitle(_0x4ab865,_0x1603dd),await setupEslintConfig(_0x4ab865),_0x11b72d&&await enableRepoModeExtras(_0x4ab865),loggers.logInfoRaw('\x0a'+constants.projectName+'\x20project\x20\x22'+_0x1603dd+'\x22\x20is\x20ready!'),loggers.logInfoRaw('Next\x20steps:'),loggers.logInfoRaw('\x20\x20cd\x20'+_0x1603dd),loggers.logInfoRaw('\x20\x20npm\x20run\x20prod'),loggers.logInfoRaw('\x20\x20npm\x20start');}catch(_0x297f2a){const _0x53c3da=_0x297f2a instanceof Error?_0x297f2a['message']:'Unknown\x20error';loggers.logStringError('Error:'),loggers.logStringError(_0x53c3da),fs.existsSync(_0x4ab865)&&(loggers.logInfoRaw('Cleaning\x20up...'),fs.rmSync(_0x4ab865,{'recursive':!![],'force':!![]})),process['exit'](-0x1c98+-0x13b9+-0x5*-0x9aa);}}catch(_0xdfbe37){const _0x2e3e80=_0xdfbe37 instanceof Error?_0xdfbe37['message']:'Unknown\x20error';loggers.logStringError('Unhandled\x20error:'),loggers.logStringError(_0x2e3e80),process['exit'](-0x20*0x12d+0xa*-0x36a+0x47c5);}}__name(create,'create');
|
|
41
|
+
|
|
42
|
+
exports.create = create;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import { existsSync, promises, mkdirSync, rmSync } from 'fs';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import * as _0x3a74e9 from 'path';
|
|
6
|
+
import _0x473e78 from 'node:fs';
|
|
7
|
+
import { toolsFoldersToReplace, additionalFoldersToCreate } from '../../../../base-repo/constants/create-app-constants.js';
|
|
8
|
+
import { logStringError, logInfoRaw } from '../../../../fd-toolbox/logging/loggers.js';
|
|
9
|
+
import { projectName } from '../../../../fd-toolbox/constants/constants.js';
|
|
10
|
+
import { allFilesToCopy } from '../../../npm-commands/build-npm/path.js';
|
|
11
|
+
import { createError } from '../../../../fd-toolbox/errors/errors.js';
|
|
12
|
+
import { folders, files, projectPaths } from '../../../../base-repo/app-constants/project-paths.js';
|
|
13
|
+
import { npmPackages } from '../../../../base-repo/constants/packages.js';
|
|
14
|
+
import { aliasSymbols } from '../../../../base-repo/app-constants/aliases.js';
|
|
15
|
+
import { isWithIndexer, isString } from '../../../../fd-toolbox/types/ensure-type.js';
|
|
16
|
+
import { cliScripts, cliEslintContent } from '../../../npm-commands/build-npm/cli-contents.js';
|
|
17
|
+
|
|
18
|
+
var __defProp=Object['defineProperty'],__name=(_0x486649,_0x35498d)=>__defProp(_0x486649,'name',{'value':_0x35498d,'configurable':!![]});const requiredNodeVersion='v20.0.0';process['version']<requiredNodeVersion&&(logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](0xdf*0x4+-0x9d3+0x658));const filename=fileURLToPath(import.meta['url']),sourceDir='../../../../',binDir=_0x3a74e9['dirname'](filename),repoRoot=_0x3a74e9['resolve'](binDir,sourceDir),envLocalPath=_0x3a74e9['join'](binDir,''+sourceDir+folders['cli']+_0x3a74e9['sep']+files['envExample']),envTemplate=_0x473e78['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[''+folders['cli']+_0x3a74e9['sep']+folders['constants'],''+folders['cli']+_0x3a74e9['sep']+files['packageTemplate'],''+folders['cli']+_0x3a74e9['sep']+files['envExample'],''+folders['cli']+_0x3a74e9['sep']+folders['bin'],''+folders['cli']+_0x3a74e9['sep']+folders['configs']];function runCommand(_0xa611b,_0x3daaf8){logInfoRaw('Executing:\x20'+_0xa611b);try{execSync(_0xa611b,{'stdio':'inherit','cwd':_0x3daaf8??process['cwd']()});}catch(_0x208fed){const _0xefad39=_0x208fed instanceof Error?_0x208fed['message']:'Unknown\x20error';logStringError('Error\x20executing:\x20'+_0xa611b),logStringError(_0xefad39),process['exit'](0xec1+0x16a0+-0x2560);}}__name(runCommand,'runCommand');function checkTargetFolder(_0x5f3c8a){existsSync(_0x5f3c8a)&&(logStringError('Error:\x20Folder\x20\x22'+_0x3a74e9['basename'](_0x5f3c8a)+'\x22\x20already\x20exists.'),process['exit'](0x1*0xbc6+-0x731*-0x5+-0x2fba));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x11a5f2=_0x3a74e9['resolve'](repoRoot,files['packageJson']),_0x51436c=JSON['parse'](_0x473e78['readFileSync'](_0x11a5f2,'utf-8'));return String(_0x51436c['devDependencies']?.['next']??_0x51436c['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');function createNextProject(_0x228e04,_0x2002fa){logInfoRaw('Creating\x20Next.js\x20project...');const _0x11fc98=getCreateNextAppVersion(),_0x3cf7fb=['npx\x20--yes\x20create-next-app@'+_0x11fc98+'\x20\x22'+_0x228e04+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git','--react-compiler']['join']('\x20');runCommand(_0x3cf7fb,_0x3a74e9['dirname'](_0x2002fa)),logInfoRaw('Next.js\x20project\x20created!');const _0x152673=_0x3a74e9['join'](_0x2002fa,'next.config.ts');_0x473e78['existsSync'](_0x152673)&&(_0x473e78['rmSync'](_0x152673),logInfoRaw('Removed\x20default\x20next.config.ts'));}__name(createNextProject,'createNextProject');async function createEnvFile(_0x1768a0){logInfoRaw('Creating\x20'+files['env']+'\x20file\x20with\x20default\x20values...');const _0x52ebb7=_0x3a74e9['join'](_0x1768a0,files['env']);try{await promises['writeFile'](_0x52ebb7,envTemplate,'utf8'),logInfoRaw(files['env']+'\x20file\x20created\x20with\x20values!');}catch(_0xc7473e){const _0x151ce8=_0xc7473e instanceof Error?_0xc7473e['message']:'Unknown\x20error';logStringError('Error\x20creating\x20'+files['env']+'\x20file:'),logStringError(_0x151ce8);throw _0xc7473e;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x3c2987){const _0xd6b6d1=_0x3a74e9['join'](_0x3c2987,files['packageJson']),_0x5cb9a8=_0x3a74e9['join'](repoRoot,''+folders['cli']+_0x3a74e9['sep']+files['packageTemplate']);try{const _0x206f51=JSON['parse'](await promises['readFile'](_0xd6b6d1,'utf8')),_0x4b04fe=_0x206f51['name'],_0x5f494d=JSON['parse'](await promises['readFile'](_0x5cb9a8,'utf8')),_0xb4b75f={..._0x5f494d,'name':_0x4b04fe};await promises['writeFile'](_0xd6b6d1,JSON['stringify'](_0xb4b75f,null,-0x19fa+0xc34*-0x1+0x10*0x263)+'\x0a','utf8');}catch(_0x1affb9){const _0x24229d=_0x1affb9 instanceof Error?_0x1affb9['message']:'Unknown\x20error';logStringError('Error\x20overriding\x20'+files['packageJson']+':'),logStringError(_0x24229d);throw _0x1affb9;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x4178f7){const _0x25649d=/(import\s+)([^'"]+)(\s+from\s+["'])([^"']+)(["'])/g;return _0x4178f7['replace'](_0x25649d,(_0x5c5d84,_0x4fb83e,_0x4f4f48,_0x29b01f,_0x4e92cd,_0x1013ab)=>{if(!_0x4e92cd['startsWith'](aliasSymbols['atSign'])||_0x4e92cd['startsWith'](npmPackages['saasKit']))return _0x5c5d84;let _0x4cc02f;_0x4e92cd['startsWith'](aliasSymbols['atSign']+folders['server'])||_0x4e92cd['includes'](''+projectPaths['server'])?_0x4cc02f=npmPackages['saasKitServer']:_0x4cc02f=npmPackages['saasKit'];let _0x3a122a=_0x4f4f48['trim']();const _0x5e1150=/^type\b/['test'](_0x3a122a),_0x329618=/^\*\s+as\s+/['test'](_0x3a122a);return !_0x5e1150&&!_0x329618&&!_0x3a122a['startsWith']('{')&&(_0x3a122a='{\x20'+_0x3a122a+'\x20}'),''+_0x4fb83e+_0x3a122a+_0x29b01f+_0x4cc02f+_0x1013ab;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x4dae3d){logInfoRaw('Copying\x20'+projectName+'\x20files...');for(const _0x41a56e of allFilesToCopy){const _0x44b6b1=''+folders['cli']+_0x3a74e9['sep']+_0x41a56e,_0x3cda46=_0x3a74e9['join'](repoRoot,_0x44b6b1),_0x1b5a82=replaceToolsFolder(_0x41a56e),_0x4ee457=_0x3a74e9['join'](_0x4dae3d,_0x1b5a82);if(existsSync(_0x3cda46)){const _0x485e0b=await promises['stat'](_0x3cda46);_0x485e0b['isDirectory']()?await copyDirectoryContents(_0x3cda46,_0x4ee457):await copyAndProcessFile(_0x3cda46,_0x4ee457);}else logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0x44b6b1);}logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0x51bd0a){let _0x4f3379=_0x51bd0a;for(const [_0x23d218,_0x30628b]of Object['entries'](toolsFoldersToReplace)){if(_0x4f3379['startsWith'](_0x23d218)&&isWithIndexer(_0x30628b)){const _0x9e78e=_0x30628b;for(const _0x45df5c in _0x9e78e){const _0xb54d2b=_0x9e78e[_0x45df5c];isString(_0xb54d2b)&&(_0x4f3379=_0x4f3379['replace'](_0x45df5c,_0xb54d2b));}break;}}return _0x4f3379;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x13c424,_0x439d20,_0x15cd30=![]){const _0x3dac2e=_0x3a74e9['relative'](repoRoot,_0x13c424)['replace'](/\\/g,'/'),_0x4d3f92=foldersToIgnore['map'](_0x47ad6b=>_0x47ad6b['replace'](/\\/g,'/'));if(_0x4d3f92['includes'](_0x3dac2e))return !![];if(_0x15cd30){const _0x4207e9=_0x3a74e9['relative'](_0x439d20,_0x13c424)['replace'](/\\/g,'/'),_0x5cfe90=_0x4207e9['split']('/');return _0x4d3f92['some'](_0x3c6c10=>_0x5cfe90['some'](_0x431025=>_0x431025===_0x3c6c10));}return ![];}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x5e9645,_0x41fe22){!existsSync(_0x41fe22)&&mkdirSync(_0x41fe22,{'recursive':!![]});try{const _0x5841e3=await promises['readdir'](_0x5e9645,{'withFileTypes':!![]});for(const _0x4c8715 of _0x5841e3){const _0x28a630=_0x3a74e9['join'](_0x5e9645,_0x4c8715['name']),_0x29595d=_0x3a74e9['join'](_0x41fe22,_0x4c8715['name']);!shouldIgnorePath(_0x28a630,_0x5e9645,_0x4c8715['isDirectory']())&&(_0x4c8715['isDirectory']()?await copyDirectoryContents(_0x28a630,_0x29595d):await copyAndProcessFile(_0x28a630,_0x29595d));}}catch(_0x3f61d6){const _0x177a4f=_0x3f61d6 instanceof Error?_0x3f61d6['message']:'Unknown\x20error';logStringError('Error\x20reading\x20directory\x20'+_0x5e9645+':\x20'+_0x177a4f);throw _0x3f61d6;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x27e4bd,_0x4d08f7){const _0x4b6e7d=_0x3a74e9['dirname'](_0x4d08f7);!existsSync(_0x4b6e7d)&&mkdirSync(_0x4b6e7d,{'recursive':!![]});const _0x2610cd=await promises['stat'](_0x27e4bd);if(_0x2610cd['isDirectory']())await copyDirectoryContents(_0x27e4bd,_0x4d08f7);else {const _0x3f078c=_0x3a74e9['extname'](_0x27e4bd)['toLowerCase'](),_0x3db05d=['.ico','.png','.jpg','.jpeg','.webp','.gif','.svg','.pdf'];if(_0x3db05d['includes'](_0x3f078c)){await promises['copyFile'](_0x27e4bd,_0x4d08f7);return;}const _0x2450ef=await promises['readFile'](_0x27e4bd,'utf8'),_0x57943e=replaceImports(_0x2450ef);await promises['writeFile'](_0x4d08f7,_0x57943e,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x56b756){for(const _0x2ee4b3 of additionalFoldersToCreate){const _0x228e07=_0x3a74e9['join'](_0x56b756,_0x2ee4b3);!existsSync(_0x228e07)&&(mkdirSync(_0x228e07,{'recursive':!![]}),logInfoRaw('Created\x20folder:\x20'+_0x2ee4b3));}logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function setupPreCommitHooks(_0x1f6b79){const _0x5904e9=_0x3a74e9['join'](_0x1f6b79,folders['husky']),_0x121c55=_0x3a74e9['join'](_0x5904e9,files['preCommit']),_0x25dfe0=_0x3a74e9['join'](_0x5904e9,files['commitMsg']);mkdirSync(_0x5904e9,{'recursive':!![]}),await promises['writeFile'](_0x121c55,cliScripts['preCommit'],'utf8'),await promises['writeFile'](_0x25dfe0,cliScripts['commitMsg'],'utf8'),runCommand(cliScripts['chmodPreCommit'],_0x1f6b79),runCommand(cliScripts['chmodCommitMsg'],_0x1f6b79);}__name(setupPreCommitHooks,'setupPreCommitHooks');async function setupEslintConfig(_0x561ec5){const _0x61944c=_0x3a74e9['join'](_0x561ec5,files['eslintConfigMjs']);existsSync(_0x61944c)&&await promises['rm'](_0x61944c);const _0x25e13e=_0x3a74e9['join'](_0x561ec5,files['eslintConfigJs']);await promises['writeFile'](_0x25e13e,cliEslintContent,'utf8');}__name(setupEslintConfig,'setupEslintConfig');async function enableRepoModeExtras(_0x5d12ac){logInfoRaw('Enabling\x20recommendation\x20mode\x20(-r)...'),runCommand(cliScripts['gitInit'],_0x5d12ac),runCommand(cliScripts['installDevHuskyTsx'],_0x5d12ac),runCommand(cliScripts['setLint'],_0x5d12ac),runCommand(cliScripts['installHusky'],_0x5d12ac),await setupPreCommitHooks(_0x5d12ac);}__name(enableRepoModeExtras,'enableRepoModeExtras');async function updateLayoutTitle(_0x4a83ef,_0x3d47c6){const _0x45dbe9=_0x3a74e9['join'](_0x4a83ef,''+projectPaths['app']+_0x3a74e9['sep']+files['layout']);if(!existsSync(_0x45dbe9))throw createError(files['layout']+'\x20not\x20found\x20at\x20'+_0x45dbe9+',\x20cannot\x20update\x20title.');let _0x5a8801=await promises['readFile'](_0x45dbe9,'utf8');const _0x45b4d5=/"SaaS Kit"/g;if(!_0x45b4d5['test'](_0x5a8801))throw createError('SaaS\x20Kit\x20not\x20found\x20in\x20'+files['layout']+',\x20cannot\x20update\x20title.');_0x5a8801=_0x5a8801['replace'](_0x45b4d5,'\x22'+_0x3d47c6+'\x22'),await promises['writeFile'](_0x45dbe9,_0x5a8801,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle');async function create(_0x408b51){try{_0x408b51['length']<-0x43*-0x54+0x5*0x459+-0x2bb8&&(logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](0x2678+0xadf+0x34a*-0xf));const _0x1603dd=_0x408b51[-0x1*0xcdd+0x1e55+-0x1178],_0x11b72d=_0x408b51['includes']('-r'),_0x4ab865=_0x3a74e9['resolve'](process['cwd'](),_0x1603dd);logInfoRaw('\x0aCreating\x20'+projectName+'\x20project\x20\x22'+_0x1603dd+'\x22...\x0a');try{checkTargetFolder(_0x4ab865),createNextProject(_0x1603dd,_0x4ab865),await copyProjectFiles(_0x4ab865),await overridePackageJson(_0x4ab865),createAdditionalFolders(_0x4ab865),await createEnvFile(_0x4ab865),await updateLayoutTitle(_0x4ab865,_0x1603dd),await setupEslintConfig(_0x4ab865),_0x11b72d&&await enableRepoModeExtras(_0x4ab865),logInfoRaw('\x0a'+projectName+'\x20project\x20\x22'+_0x1603dd+'\x22\x20is\x20ready!'),logInfoRaw('Next\x20steps:'),logInfoRaw('\x20\x20cd\x20'+_0x1603dd),logInfoRaw('\x20\x20npm\x20run\x20prod'),logInfoRaw('\x20\x20npm\x20start');}catch(_0x297f2a){const _0x53c3da=_0x297f2a instanceof Error?_0x297f2a['message']:'Unknown\x20error';logStringError('Error:'),logStringError(_0x53c3da),existsSync(_0x4ab865)&&(logInfoRaw('Cleaning\x20up...'),rmSync(_0x4ab865,{'recursive':!![],'force':!![]})),process['exit'](-0x1c98+-0x13b9+-0x5*-0x9aa);}}catch(_0xdfbe37){const _0x2e3e80=_0xdfbe37 instanceof Error?_0xdfbe37['message']:'Unknown\x20error';logStringError('Unhandled\x20error:'),logStringError(_0x2e3e80),process['exit'](-0x20*0x12d+0xa*-0x36a+0x47c5);}}__name(create,'create');
|
|
19
|
+
|
|
20
|
+
export { create };
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
var packages = require('../../../base-repo/constants/packages.cjs.js');
|
|
5
|
+
|
|
6
|
+
const cliScripts={'preCommit':'npx\x20tsx\x20node_modules/@fernir2/saas-kit/packages/base-repo/tools/git/pre-commit-script.ts','commitMsg':'npx\x20tsx\x20node_modules/@fernir2/saas-kit/packages/base-repo/tools/git/commit-msg-script.ts\x20\x22$1\x22','chmodPreCommit':'chmod\x20+x\x20.husky/pre-commit','chmodCommitMsg':'chmod\x20+x\x20.husky/commit-msg','gitInit':'git\x20init','installDevHuskyTsx':'npm\x20install\x20-D\x20husky\x20tsx','setLint':'npm\x20pkg\x20set\x20scripts.lint=\x22eslint\x20.\x22','installHusky':'npx\x20husky\x20install'};const cliEslintContent='\x0aimport\x20{\x20baseConfig\x20}\x20from\x20\x22'+packages.npmPackages['saasKitFlint']+'\x22;\x0aimport\x20{\x20defineConfig\x20}\x20from\x20\x22eslint/config\x22;\x0a\x0aexport\x20default\x20defineConfig([...baseConfig]);\x0a\x20\x20\x20\x20';
|
|
7
|
+
|
|
8
|
+
exports.cliEslintContent = cliEslintContent;
|
|
9
|
+
exports.cliScripts = cliScripts;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
import { npmPackages } from '../../../base-repo/constants/packages.js';
|
|
3
|
+
|
|
4
|
+
const cliScripts={'preCommit':'npx\x20tsx\x20node_modules/@fernir2/saas-kit/packages/base-repo/tools/git/pre-commit-script.ts','commitMsg':'npx\x20tsx\x20node_modules/@fernir2/saas-kit/packages/base-repo/tools/git/commit-msg-script.ts\x20\x22$1\x22','chmodPreCommit':'chmod\x20+x\x20.husky/pre-commit','chmodCommitMsg':'chmod\x20+x\x20.husky/commit-msg','gitInit':'git\x20init','installDevHuskyTsx':'npm\x20install\x20-D\x20husky\x20tsx','setLint':'npm\x20pkg\x20set\x20scripts.lint=\x22eslint\x20.\x22','installHusky':'npx\x20husky\x20install'};const cliEslintContent='\x0aimport\x20{\x20baseConfig\x20}\x20from\x20\x22'+npmPackages['saasKitFlint']+'\x22;\x0aimport\x20{\x20defineConfig\x20}\x20from\x20\x22eslint/config\x22;\x0a\x0aexport\x20default\x20defineConfig([...baseConfig]);\x0a\x20\x20\x20\x20';
|
|
5
|
+
|
|
6
|
+
export { cliEslintContent, cliScripts };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
var projectPaths = require('../../../base-repo/app-constants/project-paths.cjs.js');
|
|
5
5
|
|
|
6
|
-
const filesToCopy=['','git'];const rootFilesToCopy=['.gitignore','
|
|
6
|
+
const filesToCopy=['',''+projectPaths.folders['git']];const rootFilesToCopy=['.gitignore','postcss.config.mjs','server.ts'];const appFilesToCopy=[projectPaths.clientPaths['styles'],projectPaths.projectPaths['app']+'/favicon.ico',projectPaths.projectPaths['app']+'/globals.css',projectPaths.projectPaths['app']+'/layout.tsx',projectPaths.projectPaths['app']+'/page.tsx'];const apiRoutesToCopy=[projectPaths.projectPaths['apiV1']+'/searchable-resources/route.ts',projectPaths.projectPaths['apiV1']+'/searchresult/route.ts',projectPaths.projectPaths['apiV1']+'/workspace/change/route.ts',projectPaths.projectPaths['apiV1']+'/visible-workspace/route.ts',projectPaths.projectPaths['apiV1']+'/userpermission/route.ts',projectPaths.projectPaths['apiV1']+'/user-feature/is-enabled/route.ts',projectPaths.projectPaths['apiV1']+'/uimetas/route.ts',projectPaths.projectPaths['apiV1']+'/uimeta/route.ts',projectPaths.projectPaths['apiV1']+'/subscription/update/route.ts',projectPaths.projectPaths['apiV1']+'/subscription/create/route.ts',projectPaths.projectPaths['apiV1']+'/subscription/cancel/route.ts',projectPaths.projectPaths['apiV1']+'/sign-up/route.ts',projectPaths.projectPaths['apiV1']+'/sign-out/route.ts',projectPaths.projectPaths['apiV1']+'/sign-in/route.ts',projectPaths.projectPaths['apiV1']+'/preload/route.ts',projectPaths.projectPaths['apiV1']+'/payment/route.ts',projectPaths.projectPaths['apiV1']+'/payment/verify-success/route.ts',projectPaths.projectPaths['apiV1']+'/payment/verify-fail/route.ts',projectPaths.projectPaths['apiV1']+'/payment/method/route.ts',projectPaths.projectPaths['apiV1']+'/password/resetpassword/route.ts',projectPaths.projectPaths['apiV1']+'/password/forgotpassword/route.ts',projectPaths.projectPaths['apiV1']+'/otheruser/route.ts',projectPaths.projectPaths['apiV1']+'/otheruser/[id]/route.ts',projectPaths.projectPaths['apiV1']+'/log/route.ts',projectPaths.projectPaths['apiV1']+'/blob/[filename]/route.ts',projectPaths.projectPaths['apiV1']+'/[resourceName]/route.ts',projectPaths.projectPaths['apiV1']+'/[resourceName]/upsert/route.ts',projectPaths.projectPaths['apiV1']+'/[resourceName]/[id]/route.ts'];const allFilesToCopy=[...filesToCopy,...rootFilesToCopy,...appFilesToCopy,...apiRoutesToCopy];
|
|
7
7
|
|
|
8
8
|
exports.allFilesToCopy = allFilesToCopy;
|
|
9
9
|
exports.apiRoutesToCopy = apiRoutesToCopy;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
import { clientPaths, projectPaths } from '../../../base-repo/app-constants/project-paths.js';
|
|
2
|
+
import { folders, clientPaths, projectPaths } from '../../../base-repo/app-constants/project-paths.js';
|
|
3
3
|
|
|
4
|
-
const filesToCopy=['','git'];const rootFilesToCopy=['.gitignore','
|
|
4
|
+
const filesToCopy=['',''+folders['git']];const rootFilesToCopy=['.gitignore','postcss.config.mjs','server.ts'];const appFilesToCopy=[clientPaths['styles'],projectPaths['app']+'/favicon.ico',projectPaths['app']+'/globals.css',projectPaths['app']+'/layout.tsx',projectPaths['app']+'/page.tsx'];const apiRoutesToCopy=[projectPaths['apiV1']+'/searchable-resources/route.ts',projectPaths['apiV1']+'/searchresult/route.ts',projectPaths['apiV1']+'/workspace/change/route.ts',projectPaths['apiV1']+'/visible-workspace/route.ts',projectPaths['apiV1']+'/userpermission/route.ts',projectPaths['apiV1']+'/user-feature/is-enabled/route.ts',projectPaths['apiV1']+'/uimetas/route.ts',projectPaths['apiV1']+'/uimeta/route.ts',projectPaths['apiV1']+'/subscription/update/route.ts',projectPaths['apiV1']+'/subscription/create/route.ts',projectPaths['apiV1']+'/subscription/cancel/route.ts',projectPaths['apiV1']+'/sign-up/route.ts',projectPaths['apiV1']+'/sign-out/route.ts',projectPaths['apiV1']+'/sign-in/route.ts',projectPaths['apiV1']+'/preload/route.ts',projectPaths['apiV1']+'/payment/route.ts',projectPaths['apiV1']+'/payment/verify-success/route.ts',projectPaths['apiV1']+'/payment/verify-fail/route.ts',projectPaths['apiV1']+'/payment/method/route.ts',projectPaths['apiV1']+'/password/resetpassword/route.ts',projectPaths['apiV1']+'/password/forgotpassword/route.ts',projectPaths['apiV1']+'/otheruser/route.ts',projectPaths['apiV1']+'/otheruser/[id]/route.ts',projectPaths['apiV1']+'/log/route.ts',projectPaths['apiV1']+'/blob/[filename]/route.ts',projectPaths['apiV1']+'/[resourceName]/route.ts',projectPaths['apiV1']+'/[resourceName]/upsert/route.ts',projectPaths['apiV1']+'/[resourceName]/[id]/route.ts'];const allFilesToCopy=[...filesToCopy,...rootFilesToCopy,...appFilesToCopy,...apiRoutesToCopy];
|
|
5
5
|
|
|
6
6
|
export { allFilesToCopy, apiRoutesToCopy, appFilesToCopy, filesToCopy, rootFilesToCopy };
|
package/package.json
CHANGED
|
@@ -1,12 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fernir2/saas-kit-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.35",
|
|
4
4
|
"description": "CLI for creating saas-kit apps",
|
|
5
5
|
"bin": {
|
|
6
|
-
"
|
|
7
|
-
},
|
|
8
|
-
"scripts": {
|
|
9
|
-
"start": "node level2/cli/create-saas-kit-app/bin/index.js"
|
|
6
|
+
"saaskitcli": "./level2/cli/bin\\index.js"
|
|
10
7
|
},
|
|
11
8
|
"dependencies": {
|
|
12
9
|
"@aws-sdk/client-s3": "3.879.0",
|
|
@@ -18,9 +15,12 @@
|
|
|
18
15
|
"@gitbeaker/rest": "42.5.0",
|
|
19
16
|
"@googleapis/sheets": "9.8.0",
|
|
20
17
|
"@hookform/resolvers": "3.10.0",
|
|
21
|
-
"@
|
|
22
|
-
"@
|
|
18
|
+
"@libsql/client": "0.15.15",
|
|
19
|
+
"@next/eslint-plugin-next": "16.0.10",
|
|
20
|
+
"@node-rs/argon2": "2.0.2",
|
|
23
21
|
"@nx/s3-cache": "2.1.0",
|
|
22
|
+
"@pulumi/kubernetes": "4.23.0",
|
|
23
|
+
"@pulumi/pulumi": "3.204.0",
|
|
24
24
|
"@radix-ui/react-avatar": "1.1.10",
|
|
25
25
|
"@radix-ui/react-checkbox": "1.3.3",
|
|
26
26
|
"@radix-ui/react-collapsible": "1.1.12",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@rollup/plugin-alias": "5.1.1",
|
|
41
41
|
"@rollup/plugin-commonjs": "28.0.6",
|
|
42
42
|
"@rollup/plugin-json": "6.1.0",
|
|
43
|
-
"@rollup/plugin-node-resolve": "16.0.
|
|
43
|
+
"@rollup/plugin-node-resolve": "16.0.3",
|
|
44
44
|
"@stripe/react-stripe-js": "3.9.2",
|
|
45
45
|
"@stripe/stripe-js": "4.10.0",
|
|
46
46
|
"@t3-oss/env-nextjs": "0.13.8",
|
|
@@ -59,9 +59,9 @@
|
|
|
59
59
|
"geist": "1.4.2",
|
|
60
60
|
"groq-sdk": "0.9.1",
|
|
61
61
|
"ioredis": "5.7.0",
|
|
62
|
-
"istanbul-lib-coverage": "
|
|
63
|
-
"istanbul-lib-report": "
|
|
64
|
-
"istanbul-reports": "
|
|
62
|
+
"istanbul-lib-coverage": "3.2.2",
|
|
63
|
+
"istanbul-lib-report": "3.0.1",
|
|
64
|
+
"istanbul-reports": "3.2.0",
|
|
65
65
|
"jsonwebtoken": "9.0.2",
|
|
66
66
|
"jwt-decode": "4.0.0",
|
|
67
67
|
"lodash.debounce": "4.0.8",
|
|
@@ -69,9 +69,8 @@
|
|
|
69
69
|
"lru-cache": "11.1.0",
|
|
70
70
|
"lucide-react": "0.503.0",
|
|
71
71
|
"module-alias": "2.2.3",
|
|
72
|
-
"next": "16.0.
|
|
72
|
+
"next": "16.0.10",
|
|
73
73
|
"nodemailer": "6.10.1",
|
|
74
|
-
"path": "0.12.7",
|
|
75
74
|
"pg-boss": "10.3.2",
|
|
76
75
|
"plaid": "30.1.0",
|
|
77
76
|
"playwright": "1.52.0",
|
|
@@ -79,10 +78,10 @@
|
|
|
79
78
|
"postgres": "3.4.7",
|
|
80
79
|
"prism-react-renderer": "2.4.1",
|
|
81
80
|
"quill": "2.0.3",
|
|
82
|
-
"react": "19.
|
|
81
|
+
"react": "19.2.3",
|
|
83
82
|
"react-colorful": "5.6.1",
|
|
84
|
-
"react-day-picker": "9.
|
|
85
|
-
"react-dom": "19.
|
|
83
|
+
"react-day-picker": "9.11.1",
|
|
84
|
+
"react-dom": "19.2.3",
|
|
86
85
|
"react-grid-layout": "1.5.2",
|
|
87
86
|
"react-hook-form": "7.62.0",
|
|
88
87
|
"react-resizable-panels": "2.1.9",
|
|
@@ -100,14 +99,14 @@
|
|
|
100
99
|
"socket.io-client": "4.8.1",
|
|
101
100
|
"sonner": "2.0.7",
|
|
102
101
|
"stripe": "16.12.0",
|
|
103
|
-
"tailwind-merge": "
|
|
102
|
+
"tailwind-merge": "3.3.1",
|
|
104
103
|
"tailwindcss-animate": "1.0.7",
|
|
105
104
|
"ts-morph": "23.0.0",
|
|
106
105
|
"ts-prune": "0.10.3",
|
|
107
106
|
"tslib": "2.8.1",
|
|
108
107
|
"tsx": "4.20.5",
|
|
109
108
|
"uuid": "10.0.0",
|
|
110
|
-
"v8-to-istanbul": "
|
|
109
|
+
"v8-to-istanbul": "9.3.0",
|
|
111
110
|
"webpack": "5.101.3",
|
|
112
111
|
"zod": "3.25.76"
|
|
113
112
|
},
|
|
@@ -117,20 +116,21 @@
|
|
|
117
116
|
"@eslint-stylistic/metadata": "5.3.1",
|
|
118
117
|
"@eslint/eslintrc": "3.3.1",
|
|
119
118
|
"@eslint/js": "9.35.0",
|
|
119
|
+
"@mdx-js/react": "3.1.1",
|
|
120
120
|
"@nx/eslint": "21.5.2",
|
|
121
121
|
"@nx/js": "21.4.1",
|
|
122
122
|
"@nx/next": "21.0.3",
|
|
123
|
-
"@
|
|
123
|
+
"@rollup/plugin-babel": "6.1.0",
|
|
124
124
|
"@rollup/plugin-terser": "0.4.4",
|
|
125
125
|
"@rollup/plugin-typescript": "12.1.4",
|
|
126
126
|
"@stylistic/eslint-plugin": "5.3.1",
|
|
127
127
|
"@stylistic/eslint-plugin-jsx": "4.4.1",
|
|
128
|
-
"@tailwindcss/postcss": "4.1.
|
|
128
|
+
"@tailwindcss/postcss": "4.1.16",
|
|
129
129
|
"@types/commonmark": "0.27.10",
|
|
130
130
|
"@types/eslint": "9.6.1",
|
|
131
|
-
"@types/istanbul-lib-coverage": "
|
|
132
|
-
"@types/istanbul-lib-report": "
|
|
133
|
-
"@types/istanbul-reports": "
|
|
131
|
+
"@types/istanbul-lib-coverage": "2.0.6",
|
|
132
|
+
"@types/istanbul-lib-report": "3.0.3",
|
|
133
|
+
"@types/istanbul-reports": "3.0.4",
|
|
134
134
|
"@types/jsonwebtoken": "9.0.10",
|
|
135
135
|
"@types/lodash.debounce": "4.0.9",
|
|
136
136
|
"@types/lodash.isequal": "4.5.8",
|
|
@@ -138,9 +138,10 @@
|
|
|
138
138
|
"@types/node": "24.5.2",
|
|
139
139
|
"@types/nodemailer": "6.4.19",
|
|
140
140
|
"@types/pluralize": "0.0.33",
|
|
141
|
-
"@types/react": "19.2.
|
|
142
|
-
"@types/react-dom": "19.2.
|
|
141
|
+
"@types/react": "19.2.7",
|
|
142
|
+
"@types/react-dom": "19.2.3",
|
|
143
143
|
"@types/react-grid-layout": "1.3.5",
|
|
144
|
+
"@types/swagger-ui-react": "5.18.0",
|
|
144
145
|
"@types/uuid": "10.0.0",
|
|
145
146
|
"@typescript-eslint/eslint-plugin": "8.43.0",
|
|
146
147
|
"@typescript-eslint/parser": "8.43.0",
|
|
@@ -153,7 +154,7 @@
|
|
|
153
154
|
"cross-env": "7.0.3",
|
|
154
155
|
"drizzle-kit": "0.28.1",
|
|
155
156
|
"eslint": "9.35.0",
|
|
156
|
-
"eslint-config-next": "16.0.
|
|
157
|
+
"eslint-config-next": "16.0.10",
|
|
157
158
|
"eslint-config-prettier": "10.1.8",
|
|
158
159
|
"eslint-import-resolver-typescript": "4.4.4",
|
|
159
160
|
"eslint-plugin-github": "6.0.0",
|
|
@@ -166,19 +167,19 @@
|
|
|
166
167
|
"eslint-plugin-react-hooks": "5.2.0",
|
|
167
168
|
"eslint-plugin-react-refresh": "0.4.20",
|
|
168
169
|
"eslint-plugin-sonarjs": "3.0.5",
|
|
169
|
-
"eslint-plugin-tailwindcss": "3.18.2",
|
|
170
170
|
"husky": "9.1.7",
|
|
171
171
|
"nx": "21.0.3",
|
|
172
172
|
"postcss": "8.5.6",
|
|
173
173
|
"prettier": "3.6.2",
|
|
174
|
-
"prettier-plugin-tailwindcss": "0.
|
|
174
|
+
"prettier-plugin-tailwindcss": "0.7.1",
|
|
175
175
|
"raw-loader": "4.0.2",
|
|
176
176
|
"rollup-plugin-copy": "3.5.0",
|
|
177
177
|
"rollup-plugin-delete": "2.2.0",
|
|
178
178
|
"rollup-plugin-dts": "6.2.3",
|
|
179
179
|
"rollup-preserve-directives": "1.1.3",
|
|
180
|
-
"
|
|
181
|
-
"
|
|
180
|
+
"swagger-ui": "5.29.5",
|
|
181
|
+
"swagger-ui-react": "5.29.5",
|
|
182
|
+
"tailwindcss": "4.1.17",
|
|
182
183
|
"ts-node": "10.9.2",
|
|
183
184
|
"typedoc": "0.28.12",
|
|
184
185
|
"typedoc-plugin-markdown": "4.8.1",
|
package/cli/.gitlab-ci.yml
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
include:
|
|
2
|
-
- "packages/infra/ci/templates/ci-variables.yml"
|
|
3
|
-
- "packages/infra/ci/templates/base-template.yml"
|
|
4
|
-
|
|
5
|
-
- "packages/infra/ci/templates/build-package.yml"
|
|
6
|
-
- "packages/infra/ci/templates/lint.yml"
|
|
7
|
-
- "packages/infra/ci/templates/build-and-test.yml"
|
|
8
|
-
- "packages/infra/ci/templates/saas-kit-test-build-and-test.yml"
|
|
9
|
-
- "packages/infra/ci/templates/create-saas-kit-app-test.yml"
|
|
10
|
-
|
|
11
|
-
- "packages/infra/ci/templates/manual-cleanup.yml"
|
|
12
|
-
- "packages/infra/ci/templates/update-submodules.yml"
|
|
13
|
-
- "packages/infra/ci/templates/deploy-to-vercel.yml"
|
|
14
|
-
- "packages/infra/ci/templates/publish-and-test-package.yml"
|
|
15
|
-
- "packages/infra/ci/templates/clear-nx-cache.yml"
|
|
16
|
-
- "packages/infra/ci/templates/drop-all-db.yml"
|
package/cli/.husky/commit-msg
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
npx tsx packages/base-repo/tools/git/commit-msg-script.ts "$1"
|
package/cli/.husky/pre-commit
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
pnpm run-precommit
|
package/cli/eslint.config.js
DELETED
package/cli/tailwind.config.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { getTailwindConfig } from "@fernir2/saas-kit";
|
|
2
|
-
|
|
3
|
-
const config = getTailwindConfig();
|
|
4
|
-
|
|
5
|
-
config.content = [
|
|
6
|
-
"./pages/**/*.{ts,tsx}",
|
|
7
|
-
"./components/**/*.{ts,tsx}",
|
|
8
|
-
"./app/**/*.{ts,tsx}",
|
|
9
|
-
"./src/**/*.{ts,tsx}",
|
|
10
|
-
"./node_modules/@fernir2/saas-kit/**/*.{js,ts,jsx,tsx}",
|
|
11
|
-
];
|
|
12
|
-
|
|
13
|
-
export default config;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2022",
|
|
4
|
-
"experimentalDecorators": true,
|
|
5
|
-
"emitDecoratorMetadata": true,
|
|
6
|
-
"lib": ["dom", "dom.iterable", "esnext"],
|
|
7
|
-
"allowJs": true,
|
|
8
|
-
"skipLibCheck": true,
|
|
9
|
-
"strict": false,
|
|
10
|
-
"esModuleInterop": true,
|
|
11
|
-
"module": "esnext",
|
|
12
|
-
"moduleResolution": "bundler",
|
|
13
|
-
"resolveJsonModule": true,
|
|
14
|
-
"isolatedModules": false,
|
|
15
|
-
"jsx": "preserve",
|
|
16
|
-
"incremental": false,
|
|
17
|
-
"plugins": [
|
|
18
|
-
{
|
|
19
|
-
"name": "next"
|
|
20
|
-
}
|
|
21
|
-
],
|
|
22
|
-
"paths": {
|
|
23
|
-
"@/*": ["./src/*"],
|
|
24
|
-
"@cli/*": ["./packages/level2/cli/*"],
|
|
25
|
-
"@server/*": ["./packages/level2/server/*"],
|
|
26
|
-
"@schemas/*": ["./generated/*"],
|
|
27
|
-
"@npm-commands/*": ["./packages/level2/npm-commands/*"],
|
|
28
|
-
"@root/*": ["./*"],
|
|
29
|
-
"@enricher/*": ["./packages/level2/enricher/*"],
|
|
30
|
-
"@packages/*": ["./packages/*"],
|
|
31
|
-
"@common/*": ["./packages/level2/common/*"],
|
|
32
|
-
"@fd-app-toolbox/*": ["./packages/level2/fd-app-toolbox/*"],
|
|
33
|
-
"@fd-component-toolbox/*": ["./packages/level2/fd-component-toolbox/*"],
|
|
34
|
-
"@fd-toolbox-core/*": ["./packages/level2/fd-toolbox-core/*"],
|
|
35
|
-
"@fd-toolbox/*": ["./packages/level2/fd-toolbox/*"],
|
|
36
|
-
"@meta/*": ["./packages/level2/meta/*"],
|
|
37
|
-
"@base-repo/*": ["./packages/base-repo/*"],
|
|
38
|
-
"@client/*": ["./packages/level2/client/*"]
|
|
39
|
-
},
|
|
40
|
-
"outDir": "./build/package",
|
|
41
|
-
"rootDir": "./",
|
|
42
|
-
"declaration": true,
|
|
43
|
-
"declarationDir": "./build/package",
|
|
44
|
-
"emitDeclarationOnly": false
|
|
45
|
-
},
|
|
46
|
-
"include": ["next-env.d.ts", "lib/**/*.ts"],
|
|
47
|
-
"exclude": ["node_modules", "dist"]
|
|
48
|
-
}
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
'use strict';
|
|
3
|
-
'use strict';
|
|
4
|
-
|
|
5
|
-
var child_process = require('child_process');
|
|
6
|
-
var fs = require('fs');
|
|
7
|
-
var node_url = require('node:url');
|
|
8
|
-
var _0xb33463 = require('path');
|
|
9
|
-
var _0x245332 = require('node:fs');
|
|
10
|
-
var createAppConstants = require('../../../../base-repo/constants/create-app-constants.cjs.js');
|
|
11
|
-
var loggers = require('../../../fd-toolbox/logging/loggers.cjs.js');
|
|
12
|
-
var constants = require('../../../fd-toolbox/constants/constants.cjs.js');
|
|
13
|
-
var path = require('../../../npm-commands/build-npm/path.cjs.js');
|
|
14
|
-
var errors = require('../../../fd-toolbox/errors/errors.cjs.js');
|
|
15
|
-
var projectPaths = require('../../../../base-repo/app-constants/project-paths.cjs.js');
|
|
16
|
-
var packages = require('../../../../base-repo/constants/packages.cjs.js');
|
|
17
|
-
var aliases = require('../../../../base-repo/app-constants/aliases.cjs.js');
|
|
18
|
-
var ensureType = require('../../../fd-toolbox/types/ensure-type.cjs.js');
|
|
19
|
-
|
|
20
|
-
var _documentCurrentScript = typeof document !== 'undefined' ? document.currentScript : null;
|
|
21
|
-
function _interopNamespaceDefault(e) {
|
|
22
|
-
var n = Object.create(null);
|
|
23
|
-
if (e) {
|
|
24
|
-
Object.keys(e).forEach(function (k) {
|
|
25
|
-
if (k !== 'default') {
|
|
26
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
27
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
28
|
-
enumerable: true,
|
|
29
|
-
get: function () { return e[k]; }
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
}
|
|
34
|
-
n.default = e;
|
|
35
|
-
return Object.freeze(n);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
var _0xb33463__namespace = /*#__PURE__*/_interopNamespaceDefault(_0xb33463);
|
|
39
|
-
|
|
40
|
-
'use strict';var __defProp=Object['defineProperty'],__name=(_0x2771c2,_0x372162)=>__defProp(_0x2771c2,'name',{'value':_0x372162,'configurable':!![]});const requiredNodeVersion='v18.0.0';process['version']<requiredNodeVersion&&(loggers.logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](-0x1ff5+-0xce7+0x2cdd));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=_0xb33463__namespace['dirname'](filename),repoRoot=_0xb33463__namespace['resolve'](binDir,sourceDir),envLocalPath=_0xb33463__namespace['join'](binDir,''+sourceDir+projectPaths.folders['cli']+'/'+projectPaths.files['env']),envTemplate=_0x245332['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[projectPaths.folders['cli']+'/constants'];function runCommand(_0x459d5f,_0x4a33b9){loggers.logInfoRaw('Executing:\x20'+_0x459d5f);try{child_process.execSync(_0x459d5f,{'stdio':'inherit','cwd':_0x4a33b9??process['cwd']()});}catch(_0x202640){const _0x432752=_0x202640 instanceof Error?_0x202640['message']:'Unknown\x20error';loggers.logStringError('Error\x20executing:\x20'+_0x459d5f),loggers.logStringError(_0x432752),process['exit'](-0x107+0x3fe*0x1+-0x2f6);}}__name(runCommand,'runCommand');function checkTargetFolder(_0xab8747){fs.existsSync(_0xab8747)&&(loggers.logStringError('Error:\x20Folder\x20\x22'+_0xb33463__namespace['basename'](_0xab8747)+'\x22\x20already\x20exists.'),process['exit'](-0x1ff0+-0xc1*0x26+0x3c97));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x189ee8=_0xb33463__namespace['resolve'](repoRoot,'package.json'),_0x1cf741=JSON['parse'](_0x245332['readFileSync'](_0x189ee8,'utf-8'));return String(_0x1cf741['devDependencies']?.['next']??_0x1cf741['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');function createNextProject(_0x53dc38,_0x111a45){loggers.logInfoRaw('Creating\x20Next.js\x20project...');const _0xb579a8=getCreateNextAppVersion(),_0x680dc3=['npx\x20create-next-app@'+_0xb579a8+'\x20\x22'+_0x53dc38+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git']['join']('\x20');runCommand(_0x680dc3,_0xb33463__namespace['dirname'](_0x111a45)),loggers.logInfoRaw('Next.js\x20project\x20created!');const _0x14f500=_0xb33463__namespace['join'](_0x111a45,'next.config.ts');_0x245332['existsSync'](_0x14f500)&&(_0x245332['rmSync'](_0x14f500),loggers.logInfoRaw('Removed\x20default\x20next.config.ts'));}__name(createNextProject,'createNextProject');async function createEnvFile(_0x4d6f75){loggers.logInfoRaw('Creating\x20.env\x20file\x20with\x20default\x20values...');const _0x3de8a1=_0xb33463__namespace['join'](_0x4d6f75,'.env');try{await fs.promises['writeFile'](_0x3de8a1,envTemplate,'utf8'),loggers.logInfoRaw('.env\x20file\x20created\x20with\x20values!');}catch(_0x55f18c){const _0x18823d=_0x55f18c instanceof Error?_0x55f18c['message']:'Unknown\x20error';loggers.logStringError('Error\x20creating\x20.env\x20file:'),loggers.logStringError(_0x18823d);throw _0x55f18c;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x3262ba){const _0x1777b8=_0xb33463__namespace['join'](_0x3262ba,'package.json'),_0x3ced89=_0xb33463__namespace['join'](repoRoot,projectPaths.folders['cli']+'/package-template.json');try{const _0x3471b0=JSON['parse'](await fs.promises['readFile'](_0x1777b8,'utf8')),_0x19b835=_0x3471b0['name'],_0x26c688=JSON['parse'](await fs.promises['readFile'](_0x3ced89,'utf8')),_0x108e27={..._0x26c688,'name':_0x19b835};await fs.promises['writeFile'](_0x1777b8,JSON['stringify'](_0x108e27,null,-0x1664+0x62*0x1d+-0x1e2*-0x6)+'\x0a','utf8');}catch(_0x3461ba){const _0x5b4e00=_0x3461ba instanceof Error?_0x3461ba['message']:'Unknown\x20error';loggers.logStringError('Error\x20overriding\x20package.json:'),loggers.logStringError(_0x5b4e00);throw _0x3461ba;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x270a50){const _0x29f472=/(import\s+)([^'"]+)(\s+from\s+["'])([^"']+)(["'])/g;return _0x270a50['replace'](_0x29f472,(_0xd6023b,_0x231ee9,_0x30632a,_0x3dc4f2,_0x53d7d9,_0x5cc296)=>{if(!_0x53d7d9['startsWith'](aliases.aliasSymbols['atSign'])||_0x53d7d9['startsWith'](packages.npmPackages['saasKit']))return _0xd6023b;let _0x4c45b5;_0x53d7d9['startsWith'](aliases.aliasSymbols['atSign']+projectPaths.folders['server'])||_0x53d7d9['includes']('/'+projectPaths.folders['server']+'/')?_0x4c45b5=packages.npmPackages['saasKitServer']:_0x4c45b5=packages.npmPackages['saasKit'];let _0x459b65=_0x30632a['trim']();return !_0x459b65['startsWith']('{')&&(_0x459b65='{\x20'+_0x459b65+'\x20}'),''+_0x231ee9+_0x459b65+_0x3dc4f2+_0x4c45b5+_0x5cc296;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x490607){loggers.logInfoRaw('Copying\x20'+constants.projectName+'\x20files...');for(const _0x35c1f6 of path.allFilesToCopy){const _0x1394e8=projectPaths.folders['cli']+'/'+_0x35c1f6,_0x2e9f32=_0xb33463__namespace['join'](repoRoot,_0x1394e8),_0x712b58=replaceToolsFolder(_0x35c1f6),_0x39a34b=_0xb33463__namespace['join'](_0x490607,_0x712b58);if(fs.existsSync(_0x2e9f32)){const _0x94255e=await fs.promises['stat'](_0x2e9f32);_0x94255e['isDirectory']()?await copyDirectoryContents(_0x2e9f32,_0x39a34b):await copyAndProcessFile(_0x2e9f32,_0x39a34b);}else loggers.logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0x1394e8);}loggers.logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0xdf806c){let _0x4a9f92=_0xdf806c;for(const [_0x8b9a0,_0x35493d]of Object['entries'](createAppConstants.toolsFoldersToReplace)){if(_0x4a9f92['startsWith'](_0x8b9a0)&&ensureType.isWithIndexer(_0x35493d)){const _0x2f10b9=_0x35493d;for(const _0x1c77b8 in _0x2f10b9){const _0x337805=_0x2f10b9[_0x1c77b8];ensureType.isString(_0x337805)&&(_0x4a9f92=_0x4a9f92['replace'](_0x1c77b8,_0x337805));}break;}}return _0x4a9f92;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x269875,_0x1cfafd,_0x21b460=![]){const _0x35924b=_0xb33463__namespace['relative'](_0x1cfafd,_0x269875),_0x226d23=_0x35924b['split'](_0xb33463__namespace['sep']),_0x5464d0=_0xb33463__namespace['relative'](repoRoot,_0x269875)['replace'](/\\/g,'/');return _0x21b460&&foldersToIgnore['includes'](_0x5464d0)||foldersToIgnore['some'](_0x3ee3cb=>_0x226d23['some'](_0x55c3f2=>_0x55c3f2===_0x3ee3cb));}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x77bec6,_0xb5f402){!fs.existsSync(_0xb5f402)&&fs.mkdirSync(_0xb5f402,{'recursive':!![]});try{const _0x52c05e=await fs.promises['readdir'](_0x77bec6,{'withFileTypes':!![]});for(const _0x4eca86 of _0x52c05e){const _0x12b512=_0xb33463__namespace['join'](_0x77bec6,_0x4eca86['name']),_0x4663af=_0xb33463__namespace['join'](_0xb5f402,_0x4eca86['name']);!shouldIgnorePath(_0x12b512,_0x77bec6,_0x4eca86['isDirectory']())&&(_0x4eca86['isDirectory']()?await copyDirectoryContents(_0x12b512,_0x4663af):await copyAndProcessFile(_0x12b512,_0x4663af));}}catch(_0x3a19a6){const _0x24a6f5=_0x3a19a6 instanceof Error?_0x3a19a6['message']:'Unknown\x20error';loggers.logStringError('Error\x20reading\x20directory\x20'+_0x77bec6+':\x20'+_0x24a6f5);throw _0x3a19a6;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x5c6df5,_0x39ba47){const _0x3ffd69=_0xb33463__namespace['dirname'](_0x39ba47);!fs.existsSync(_0x3ffd69)&&fs.mkdirSync(_0x3ffd69,{'recursive':!![]});const _0x10e378=await fs.promises['stat'](_0x5c6df5);if(_0x10e378['isDirectory']())await copyDirectoryContents(_0x5c6df5,_0x39ba47);else {const _0x1ebf2c=_0xb33463__namespace['extname'](_0x5c6df5)['toLowerCase'](),_0x4d2820=['.ico','.png','.jpg'];if(_0x4d2820['includes'](_0x1ebf2c)){await fs.promises['copyFile'](_0x5c6df5,_0x39ba47);return;}const _0x534aea=await fs.promises['readFile'](_0x5c6df5,'utf8'),_0x16cbb7=replaceImports(_0x534aea);await fs.promises['writeFile'](_0x39ba47,_0x16cbb7,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x5c9279){for(const _0x43320c of createAppConstants.additionalFoldersToCreate){const _0xfec6c0=_0xb33463__namespace['join'](_0x5c9279,_0x43320c);!fs.existsSync(_0xfec6c0)&&(fs.mkdirSync(_0xfec6c0,{'recursive':!![]}),loggers.logInfoRaw('Created\x20folder:\x20'+_0x43320c));}loggers.logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function main(){const _0x5d37a1=process['argv']['slice'](-0x15a0*0x1+-0x130+0x7f*0x2e);_0x5d37a1['length']<-0x169c+0xd*-0x2d2+0xbdb*0x5&&(loggers.logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](-0x1*-0x10be+0x4*0x988+-0x36dd));const _0x80d799=_0x5d37a1[0x2*-0x409+0xa19+-0x1*0x207],_0xa5a5b1=_0xb33463__namespace['resolve'](process['cwd'](),_0x80d799);loggers.logInfoRaw('\x0aCreating\x20'+constants.projectName+'\x20project\x20\x22'+_0x80d799+'\x22...\x0a');try{checkTargetFolder(_0xa5a5b1),createNextProject(_0x80d799,_0xa5a5b1),await copyProjectFiles(_0xa5a5b1),await overridePackageJson(_0xa5a5b1),createAdditionalFolders(_0xa5a5b1),await createEnvFile(_0xa5a5b1),await updateLayoutTitle(_0xa5a5b1,_0x80d799),loggers.logInfoRaw('\x0a'+constants.projectName+'\x20project\x20\x22'+_0x80d799+'\x22\x20is\x20ready!'),loggers.logInfoRaw('Next\x20steps:'),loggers.logInfoRaw('\x20\x20cd\x20'+_0x80d799),loggers.logInfoRaw('\x20\x20npm\x20run\x20prod'),loggers.logInfoRaw('\x20\x20npm\x20start');}catch(_0x185fec){const _0x349247=_0x185fec instanceof Error?_0x185fec['message']:'Unknown\x20error';loggers.logStringError('Error:'),loggers.logStringError(_0x349247),fs.existsSync(_0xa5a5b1)&&(loggers.logInfoRaw('Cleaning\x20up...'),fs.rmSync(_0xa5a5b1,{'recursive':!![],'force':!![]})),process['exit'](0x3*0x217+0x940+0x52c*-0x3);}}__name(main,'main');async function updateLayoutTitle(_0x184bc8,_0x51cf7f){const _0x5ef9c0=_0xb33463__namespace['join'](_0x184bc8,'src/app/layout.tsx');if(!fs.existsSync(_0x5ef9c0))throw errors.createError('layout.tsx\x20not\x20found\x20at\x20'+_0x5ef9c0+',\x20cannot\x20update\x20title.');let _0x42f0f8=await fs.promises['readFile'](_0x5ef9c0,'utf8');const _0xe21693=/"SaaS Kit"/g;if(!_0xe21693['test'](_0x42f0f8))throw errors.createError('SaaS\x20Kit\x20not\x20found\x20in\x20layout.tsx,\x20cannot\x20update\x20title.');_0x42f0f8=_0x42f0f8['replace'](_0xe21693,'\x22'+_0x51cf7f+'\x22'),await fs.promises['writeFile'](_0x5ef9c0,_0x42f0f8,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle'),main()['catch'](_0x5c50ae=>{const _0x200003=_0x5c50ae instanceof Error?_0x5c50ae['message']:'Unknown\x20error';loggers.logStringError('Unhandled\x20error:'),loggers.logStringError(_0x200003),process['exit'](0x1bd7+-0x2*0x22f+-0x1778);});
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
'use strict';
|
|
3
|
-
import { execSync } from 'child_process';
|
|
4
|
-
import { existsSync, promises, mkdirSync, rmSync } from 'fs';
|
|
5
|
-
import { fileURLToPath } from 'node:url';
|
|
6
|
-
import * as _0xb33463 from 'path';
|
|
7
|
-
import _0x245332 from 'node:fs';
|
|
8
|
-
import { toolsFoldersToReplace, additionalFoldersToCreate } from '../../../../base-repo/constants/create-app-constants.js';
|
|
9
|
-
import { logStringError, logInfoRaw } from '../../../fd-toolbox/logging/loggers.js';
|
|
10
|
-
import { projectName } from '../../../fd-toolbox/constants/constants.js';
|
|
11
|
-
import { allFilesToCopy } from '../../../npm-commands/build-npm/path.js';
|
|
12
|
-
import { createError } from '../../../fd-toolbox/errors/errors.js';
|
|
13
|
-
import { folders, files } from '../../../../base-repo/app-constants/project-paths.js';
|
|
14
|
-
import { npmPackages } from '../../../../base-repo/constants/packages.js';
|
|
15
|
-
import { aliasSymbols } from '../../../../base-repo/app-constants/aliases.js';
|
|
16
|
-
import { isWithIndexer, isString } from '../../../fd-toolbox/types/ensure-type.js';
|
|
17
|
-
|
|
18
|
-
'use strict';var __defProp=Object['defineProperty'],__name=(_0x2771c2,_0x372162)=>__defProp(_0x2771c2,'name',{'value':_0x372162,'configurable':!![]});const requiredNodeVersion='v18.0.0';process['version']<requiredNodeVersion&&(logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](-0x1ff5+-0xce7+0x2cdd));const filename=fileURLToPath(import.meta['url']),sourceDir='../../../../',binDir=_0xb33463['dirname'](filename),repoRoot=_0xb33463['resolve'](binDir,sourceDir),envLocalPath=_0xb33463['join'](binDir,''+sourceDir+folders['cli']+'/'+files['env']),envTemplate=_0x245332['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[folders['cli']+'/constants'];function runCommand(_0x459d5f,_0x4a33b9){logInfoRaw('Executing:\x20'+_0x459d5f);try{execSync(_0x459d5f,{'stdio':'inherit','cwd':_0x4a33b9??process['cwd']()});}catch(_0x202640){const _0x432752=_0x202640 instanceof Error?_0x202640['message']:'Unknown\x20error';logStringError('Error\x20executing:\x20'+_0x459d5f),logStringError(_0x432752),process['exit'](-0x107+0x3fe*0x1+-0x2f6);}}__name(runCommand,'runCommand');function checkTargetFolder(_0xab8747){existsSync(_0xab8747)&&(logStringError('Error:\x20Folder\x20\x22'+_0xb33463['basename'](_0xab8747)+'\x22\x20already\x20exists.'),process['exit'](-0x1ff0+-0xc1*0x26+0x3c97));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x189ee8=_0xb33463['resolve'](repoRoot,'package.json'),_0x1cf741=JSON['parse'](_0x245332['readFileSync'](_0x189ee8,'utf-8'));return String(_0x1cf741['devDependencies']?.['next']??_0x1cf741['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');function createNextProject(_0x53dc38,_0x111a45){logInfoRaw('Creating\x20Next.js\x20project...');const _0xb579a8=getCreateNextAppVersion(),_0x680dc3=['npx\x20create-next-app@'+_0xb579a8+'\x20\x22'+_0x53dc38+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git']['join']('\x20');runCommand(_0x680dc3,_0xb33463['dirname'](_0x111a45)),logInfoRaw('Next.js\x20project\x20created!');const _0x14f500=_0xb33463['join'](_0x111a45,'next.config.ts');_0x245332['existsSync'](_0x14f500)&&(_0x245332['rmSync'](_0x14f500),logInfoRaw('Removed\x20default\x20next.config.ts'));}__name(createNextProject,'createNextProject');async function createEnvFile(_0x4d6f75){logInfoRaw('Creating\x20.env\x20file\x20with\x20default\x20values...');const _0x3de8a1=_0xb33463['join'](_0x4d6f75,'.env');try{await promises['writeFile'](_0x3de8a1,envTemplate,'utf8'),logInfoRaw('.env\x20file\x20created\x20with\x20values!');}catch(_0x55f18c){const _0x18823d=_0x55f18c instanceof Error?_0x55f18c['message']:'Unknown\x20error';logStringError('Error\x20creating\x20.env\x20file:'),logStringError(_0x18823d);throw _0x55f18c;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x3262ba){const _0x1777b8=_0xb33463['join'](_0x3262ba,'package.json'),_0x3ced89=_0xb33463['join'](repoRoot,folders['cli']+'/package-template.json');try{const _0x3471b0=JSON['parse'](await promises['readFile'](_0x1777b8,'utf8')),_0x19b835=_0x3471b0['name'],_0x26c688=JSON['parse'](await promises['readFile'](_0x3ced89,'utf8')),_0x108e27={..._0x26c688,'name':_0x19b835};await promises['writeFile'](_0x1777b8,JSON['stringify'](_0x108e27,null,-0x1664+0x62*0x1d+-0x1e2*-0x6)+'\x0a','utf8');}catch(_0x3461ba){const _0x5b4e00=_0x3461ba instanceof Error?_0x3461ba['message']:'Unknown\x20error';logStringError('Error\x20overriding\x20package.json:'),logStringError(_0x5b4e00);throw _0x3461ba;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x270a50){const _0x29f472=/(import\s+)([^'"]+)(\s+from\s+["'])([^"']+)(["'])/g;return _0x270a50['replace'](_0x29f472,(_0xd6023b,_0x231ee9,_0x30632a,_0x3dc4f2,_0x53d7d9,_0x5cc296)=>{if(!_0x53d7d9['startsWith'](aliasSymbols['atSign'])||_0x53d7d9['startsWith'](npmPackages['saasKit']))return _0xd6023b;let _0x4c45b5;_0x53d7d9['startsWith'](aliasSymbols['atSign']+folders['server'])||_0x53d7d9['includes']('/'+folders['server']+'/')?_0x4c45b5=npmPackages['saasKitServer']:_0x4c45b5=npmPackages['saasKit'];let _0x459b65=_0x30632a['trim']();return !_0x459b65['startsWith']('{')&&(_0x459b65='{\x20'+_0x459b65+'\x20}'),''+_0x231ee9+_0x459b65+_0x3dc4f2+_0x4c45b5+_0x5cc296;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x490607){logInfoRaw('Copying\x20'+projectName+'\x20files...');for(const _0x35c1f6 of allFilesToCopy){const _0x1394e8=folders['cli']+'/'+_0x35c1f6,_0x2e9f32=_0xb33463['join'](repoRoot,_0x1394e8),_0x712b58=replaceToolsFolder(_0x35c1f6),_0x39a34b=_0xb33463['join'](_0x490607,_0x712b58);if(existsSync(_0x2e9f32)){const _0x94255e=await promises['stat'](_0x2e9f32);_0x94255e['isDirectory']()?await copyDirectoryContents(_0x2e9f32,_0x39a34b):await copyAndProcessFile(_0x2e9f32,_0x39a34b);}else logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0x1394e8);}logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0xdf806c){let _0x4a9f92=_0xdf806c;for(const [_0x8b9a0,_0x35493d]of Object['entries'](toolsFoldersToReplace)){if(_0x4a9f92['startsWith'](_0x8b9a0)&&isWithIndexer(_0x35493d)){const _0x2f10b9=_0x35493d;for(const _0x1c77b8 in _0x2f10b9){const _0x337805=_0x2f10b9[_0x1c77b8];isString(_0x337805)&&(_0x4a9f92=_0x4a9f92['replace'](_0x1c77b8,_0x337805));}break;}}return _0x4a9f92;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x269875,_0x1cfafd,_0x21b460=![]){const _0x35924b=_0xb33463['relative'](_0x1cfafd,_0x269875),_0x226d23=_0x35924b['split'](_0xb33463['sep']),_0x5464d0=_0xb33463['relative'](repoRoot,_0x269875)['replace'](/\\/g,'/');return _0x21b460&&foldersToIgnore['includes'](_0x5464d0)||foldersToIgnore['some'](_0x3ee3cb=>_0x226d23['some'](_0x55c3f2=>_0x55c3f2===_0x3ee3cb));}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x77bec6,_0xb5f402){!existsSync(_0xb5f402)&&mkdirSync(_0xb5f402,{'recursive':!![]});try{const _0x52c05e=await promises['readdir'](_0x77bec6,{'withFileTypes':!![]});for(const _0x4eca86 of _0x52c05e){const _0x12b512=_0xb33463['join'](_0x77bec6,_0x4eca86['name']),_0x4663af=_0xb33463['join'](_0xb5f402,_0x4eca86['name']);!shouldIgnorePath(_0x12b512,_0x77bec6,_0x4eca86['isDirectory']())&&(_0x4eca86['isDirectory']()?await copyDirectoryContents(_0x12b512,_0x4663af):await copyAndProcessFile(_0x12b512,_0x4663af));}}catch(_0x3a19a6){const _0x24a6f5=_0x3a19a6 instanceof Error?_0x3a19a6['message']:'Unknown\x20error';logStringError('Error\x20reading\x20directory\x20'+_0x77bec6+':\x20'+_0x24a6f5);throw _0x3a19a6;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x5c6df5,_0x39ba47){const _0x3ffd69=_0xb33463['dirname'](_0x39ba47);!existsSync(_0x3ffd69)&&mkdirSync(_0x3ffd69,{'recursive':!![]});const _0x10e378=await promises['stat'](_0x5c6df5);if(_0x10e378['isDirectory']())await copyDirectoryContents(_0x5c6df5,_0x39ba47);else {const _0x1ebf2c=_0xb33463['extname'](_0x5c6df5)['toLowerCase'](),_0x4d2820=['.ico','.png','.jpg'];if(_0x4d2820['includes'](_0x1ebf2c)){await promises['copyFile'](_0x5c6df5,_0x39ba47);return;}const _0x534aea=await promises['readFile'](_0x5c6df5,'utf8'),_0x16cbb7=replaceImports(_0x534aea);await promises['writeFile'](_0x39ba47,_0x16cbb7,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x5c9279){for(const _0x43320c of additionalFoldersToCreate){const _0xfec6c0=_0xb33463['join'](_0x5c9279,_0x43320c);!existsSync(_0xfec6c0)&&(mkdirSync(_0xfec6c0,{'recursive':!![]}),logInfoRaw('Created\x20folder:\x20'+_0x43320c));}logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function main(){const _0x5d37a1=process['argv']['slice'](-0x15a0*0x1+-0x130+0x7f*0x2e);_0x5d37a1['length']<-0x169c+0xd*-0x2d2+0xbdb*0x5&&(logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](-0x1*-0x10be+0x4*0x988+-0x36dd));const _0x80d799=_0x5d37a1[0x2*-0x409+0xa19+-0x1*0x207],_0xa5a5b1=_0xb33463['resolve'](process['cwd'](),_0x80d799);logInfoRaw('\x0aCreating\x20'+projectName+'\x20project\x20\x22'+_0x80d799+'\x22...\x0a');try{checkTargetFolder(_0xa5a5b1),createNextProject(_0x80d799,_0xa5a5b1),await copyProjectFiles(_0xa5a5b1),await overridePackageJson(_0xa5a5b1),createAdditionalFolders(_0xa5a5b1),await createEnvFile(_0xa5a5b1),await updateLayoutTitle(_0xa5a5b1,_0x80d799),logInfoRaw('\x0a'+projectName+'\x20project\x20\x22'+_0x80d799+'\x22\x20is\x20ready!'),logInfoRaw('Next\x20steps:'),logInfoRaw('\x20\x20cd\x20'+_0x80d799),logInfoRaw('\x20\x20npm\x20run\x20prod'),logInfoRaw('\x20\x20npm\x20start');}catch(_0x185fec){const _0x349247=_0x185fec instanceof Error?_0x185fec['message']:'Unknown\x20error';logStringError('Error:'),logStringError(_0x349247),existsSync(_0xa5a5b1)&&(logInfoRaw('Cleaning\x20up...'),rmSync(_0xa5a5b1,{'recursive':!![],'force':!![]})),process['exit'](0x3*0x217+0x940+0x52c*-0x3);}}__name(main,'main');async function updateLayoutTitle(_0x184bc8,_0x51cf7f){const _0x5ef9c0=_0xb33463['join'](_0x184bc8,'src/app/layout.tsx');if(!existsSync(_0x5ef9c0))throw createError('layout.tsx\x20not\x20found\x20at\x20'+_0x5ef9c0+',\x20cannot\x20update\x20title.');let _0x42f0f8=await promises['readFile'](_0x5ef9c0,'utf8');const _0xe21693=/"SaaS Kit"/g;if(!_0xe21693['test'](_0x42f0f8))throw createError('SaaS\x20Kit\x20not\x20found\x20in\x20layout.tsx,\x20cannot\x20update\x20title.');_0x42f0f8=_0x42f0f8['replace'](_0xe21693,'\x22'+_0x51cf7f+'\x22'),await promises['writeFile'](_0x5ef9c0,_0x42f0f8,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle'),main()['catch'](_0x5c50ae=>{const _0x200003=_0x5c50ae instanceof Error?_0x5c50ae['message']:'Unknown\x20error';logStringError('Unhandled\x20error:'),logStringError(_0x200003),process['exit'](0x1bd7+-0x2*0x22f+-0x1778);});
|