@fernir2/saas-kit-cli 0.1.37 → 0.1.39
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/alias-symbols.cjs.js +1 -1
- package/base-repo/app-constants/alias-symbols.js +1 -1
- 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 +2 -2
- package/cli/bin/create.ts +19 -15
- package/cli/configs/drizzle-cli-config.ts +3 -2
- package/cli/configs/next-cli-config.ts +78 -0
- package/cli/configs/playwright-cli-config.ts +1 -0
- package/cli/configs/tsconfig.cli.json +0 -2
- package/cli/next.config.js +2 -72
- package/cli/npm-commands/gen-meta.ts +2 -2
- package/cli/npm-commands/migrate-db.ts +2 -2
- package/cli/npm-commands/seed-db.ts +2 -2
- package/cli/package-template.json +3 -4
- package/cli/server.ts +4 -5
- package/cli/src/app/api/v1/(f)/search-result/route.ts +3 -0
- package/cli/src/app/api/v1/(f)/searchable-resources/route.ts +3 -0
- package/cli/src/app/f/(signed-in)/layout.tsx +5 -0
- package/cli/src/app/f/api-docs/page.tsx +15 -0
- package/cli/src/app/layout.tsx +2 -11
- package/cli/test/global-setup.ts +2 -24
- package/cli/tsconfig.json +2 -15
- package/cli/tsconfig.server.json +0 -3
- package/fd-toolbox/api/api-client.cjs.js +1 -1
- package/fd-toolbox/api/api-client.js +1 -1
- package/fd-toolbox/api/api-path-names.cjs.js +2 -2
- package/fd-toolbox/api/api-path-names.js +1 -1
- package/fd-toolbox/api/api-paths.cjs.js +1 -1
- package/fd-toolbox/api/api-paths.js +1 -1
- package/fd-toolbox/api/base-api.cjs.js +1 -1
- package/fd-toolbox/api/base-api.js +1 -1
- package/fd-toolbox/auth/login-states.cjs.js +1 -1
- package/fd-toolbox/auth/login-states.js +1 -1
- package/fd-toolbox/auth/session-storage.cjs.js +1 -1
- package/fd-toolbox/auth/session-storage.js +1 -1
- package/fd-toolbox/auth/tokens.cjs.js +1 -1
- package/fd-toolbox/auth/tokens.js +1 -1
- package/fd-toolbox/constants/constants.cjs.js +1 -1
- package/fd-toolbox/constants/constants.js +1 -1
- package/fd-toolbox/enums/enums.cjs.js +1 -1
- package/fd-toolbox/enums/enums.js +1 -1
- package/fd-toolbox/errors/error-handler.cjs.js +1 -1
- package/fd-toolbox/errors/error-handler.js +1 -1
- package/fd-toolbox/errors/errors.cjs.js +1 -1
- package/fd-toolbox/errors/errors.js +1 -1
- package/fd-toolbox/errors/problem-details.cjs.js +1 -1
- package/fd-toolbox/errors/problem-details.js +1 -1
- package/fd-toolbox/functions/value-checking-functions.cjs.js +1 -1
- package/fd-toolbox/functions/value-checking-functions.js +1 -1
- package/fd-toolbox/http/url/urls.cjs.js +1 -1
- package/fd-toolbox/http/url/urls.js +1 -1
- package/fd-toolbox/infra/env-config.cjs.js +2 -2
- package/fd-toolbox/infra/env-config.js +2 -2
- package/fd-toolbox/infra/env-functions.cjs.js +1 -1
- package/fd-toolbox/infra/env-functions.js +1 -1
- package/fd-toolbox/infra/env-schema.cjs.js +2 -2
- package/fd-toolbox/infra/env-schema.js +2 -2
- package/fd-toolbox/infra/env-store.cjs.js +1 -1
- package/fd-toolbox/infra/env-store.js +1 -1
- package/fd-toolbox/infra/toolbox-env-setting-keys.cjs.js +1 -1
- package/fd-toolbox/infra/toolbox-env-setting-keys.js +1 -1
- package/fd-toolbox/lib/environments.cjs.js +1 -1
- package/fd-toolbox/lib/environments.js +1 -1
- package/fd-toolbox/lib/utils.cjs.js +1 -1
- package/fd-toolbox/lib/utils.js +1 -1
- package/fd-toolbox/local-storage/local-storage.cjs.js +1 -1
- package/fd-toolbox/local-storage/local-storage.js +1 -1
- package/fd-toolbox/logging/loggers.cjs.js +1 -1
- package/fd-toolbox/logging/loggers.js +1 -1
- package/fd-toolbox/notifications.cjs.js +2 -2
- package/fd-toolbox/notifications.js +2 -2
- package/fd-toolbox/odata/odata-constants.cjs.js +1 -1
- package/fd-toolbox/odata/odata-constants.js +1 -1
- package/fd-toolbox/odata/odatas.cjs.js +1 -1
- package/fd-toolbox/odata/odatas.js +1 -1
- package/fd-toolbox/odata/services/odata-filters.cjs.js +1 -1
- package/fd-toolbox/odata/services/odata-filters.js +1 -1
- package/fd-toolbox/paths/paths-names.cjs.js +2 -2
- package/fd-toolbox/paths/paths-names.js +1 -1
- package/fd-toolbox/routing/login-routers.cjs.js +1 -1
- package/fd-toolbox/routing/login-routers.js +1 -1
- package/fd-toolbox/routing/paths.cjs.js +1 -1
- package/fd-toolbox/routing/paths.js +1 -1
- package/fd-toolbox/routing/routes.cjs.js +1 -1
- package/fd-toolbox/routing/routes.js +1 -1
- package/fd-toolbox/strings/strings-constants.cjs.js +1 -1
- package/fd-toolbox/strings/strings-constants.js +1 -1
- package/fd-toolbox/strings/strings.cjs.js +1 -1
- package/fd-toolbox/strings/strings.js +1 -1
- package/fd-toolbox/types/ensure-type.cjs.js +1 -1
- package/fd-toolbox/types/ensure-type.js +1 -1
- package/fd-toolbox-core/core/name-of.cjs.js +1 -1
- package/fd-toolbox-core/core/name-of.js +1 -1
- package/fd-toolbox-core/types/resource-with-id.cjs.js +1 -1
- package/fd-toolbox-core/types/resource-with-id.js +1 -1
- package/level2/cli/bin/index.cjs.js +1 -1
- package/level2/cli/bin/index.js +1 -1
- package/level2/cli/create/bin/create.cjs.js +4 -4
- package/level2/cli/create/bin/create.js +3 -3
- package/level2/npm-commands/build-npm/path.cjs.js +2 -1
- package/level2/npm-commands/build-npm/path.js +2 -2
- package/package.json +10 -9
- package/cli/public/images/shipment/076aecd1-7fb8-5d89-baa9-e48e61048525.pdf +0 -0
- package/cli/public/images/shipment/21884fb7-6e39-4f7b-9a49-0f46d527f50c.pdf +0 -0
- package/cli/public/images/shipment/e6367904-081e-479b-a8c5-5972057a261e.pdf +0 -0
- package/cli/public/images/store/00000000-0000-0000-0000-000000000000.webp +0 -0
- package/cli/public/images/test/photo-1460925895917-afdab827c52f.jpg +0 -0
- package/cli/public/images/test/photo-1499636136210-6f4ee915583e.jpg +0 -0
- package/cli/public/images/test/photo-1519681393784-d120267933ba.jpg +0 -0
- package/cli/src/app/api/v1/searchable-resources/route.ts +0 -11
- package/cli/src/app/api/v1/searchresult/route.ts +0 -35
- package/cli/src/app/f/(private)/layout.tsx +0 -5
- package/cli/src/app/f/defaultRedirect/page.tsx +0 -9
- /package/cli/src/app/api/v1/{[resourceName] → (f)/[resourceName]}/[id]/route.ts +0 -0
- /package/cli/src/app/api/v1/{[resourceName] → (f)/[resourceName]}/route.ts +0 -0
- /package/cli/src/app/api/v1/{[resourceName] → (f)/[resourceName]}/upsert/route.ts +0 -0
- /package/cli/src/app/api/v1/{blob → (f)/blob}/route.ts +0 -0
- /package/cli/src/app/api/v1/{log → (f)/log}/route.ts +0 -0
- /package/cli/src/app/api/v1/{otheruser → (f)/other-user}/[id]/route.ts +0 -0
- /package/cli/src/app/api/v1/{otheruser → (f)/other-user}/route.ts +0 -0
- /package/cli/src/app/api/v1/{password/forgotpassword → (f)/password/forgot-password}/route.ts +0 -0
- /package/cli/src/app/api/v1/{password/resetpassword → (f)/password/reset-password}/route.ts +0 -0
- /package/cli/src/app/api/v1/{payment → (f)/payment}/method/route.ts +0 -0
- /package/cli/src/app/api/v1/{payment → (f)/payment}/route.ts +0 -0
- /package/cli/src/app/api/v1/{payment → (f)/payment}/verify-fail/route.ts +0 -0
- /package/cli/src/app/api/v1/{payment → (f)/payment}/verify-success/route.ts +0 -0
- /package/cli/src/app/api/v1/{preload → (f)/preload}/route.ts +0 -0
- /package/cli/src/app/api/v1/{sign-in → (f)/sign-in}/route.ts +0 -0
- /package/cli/src/app/api/v1/{sign-out → (f)/sign-out}/route.ts +0 -0
- /package/cli/src/app/api/v1/{sign-up → (f)/sign-up}/route.ts +0 -0
- /package/cli/src/app/api/v1/{subscription → (f)/subscription}/cancel/route.ts +0 -0
- /package/cli/src/app/api/v1/{subscription → (f)/subscription}/create/route.ts +0 -0
- /package/cli/src/app/api/v1/{subscription → (f)/subscription}/update/route.ts +0 -0
- /package/cli/src/app/api/v1/{uimeta → (f)/uimeta}/route.ts +0 -0
- /package/cli/src/app/api/v1/{uimetas → (f)/uimetas}/route.ts +0 -0
- /package/cli/src/app/api/v1/{userfeature → (f)/user-feature}/isenabled/route.ts +0 -0
- /package/cli/src/app/api/v1/{userpermission → (f)/user-permission}/route.ts +0 -0
- /package/cli/src/app/api/v1/{visible-workspace → (f)/visible-workspace}/route.ts +0 -0
- /package/cli/src/app/api/v1/{workspace → (f)/workspace}/change/route.ts +0 -0
- /package/cli/src/app/f/{editpassword → (not-signed-in)/edit-password}/page.tsx +0 -0
- /package/cli/src/app/f/{forgotpassword → (not-signed-in)/forgot-password}/page.tsx +0 -0
- /package/cli/src/app/f/{resetpassword → (not-signed-in)/reset-password}/page.tsx +0 -0
- /package/cli/src/app/f/{sign-in → (not-signed-in)/sign-in}/microsoft/page.tsx +0 -0
- /package/cli/src/app/f/{sign-in → (not-signed-in)/sign-in}/page.tsx +0 -0
- /package/cli/src/app/f/{sign-up → (not-signed-in)/sign-up}/page.tsx +0 -0
- /package/cli/src/app/f/{(private) → (signed-in)}/dashboard/page.tsx +0 -0
- /package/cli/src/app/f/{(private) → (signed-in)}/dynamiclayout/page.tsx +0 -0
- /package/cli/src/app/f/{(private) → (signed-in)}/edituser/[id]/page.tsx +0 -0
- /package/cli/src/app/f/{(private) → (signed-in)}/edituser/page.tsx +0 -0
- /package/cli/src/app/f/{(private) → (signed-in)}/lm/page.tsx +0 -0
- /package/cli/src/app/f/{(private) → (signed-in)}/payment-plans/page.tsx +0 -0
- /package/cli/src/app/f/{(private) → (signed-in)}/preload/page.tsx +0 -0
- /package/cli/src/app/f/{(private) → (signed-in)}/statusboard/page.tsx +0 -0
- /package/cli/src/app/f/{(private) → (signed-in)}/userlist/page.tsx +0 -0
- /package/cli/src/app/f/{(private) → (signed-in)}/view/page.tsx +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
const aliases={'src':'@','cli':'@cli','server':'@server','generated':'@schemas','npmCommands':'@npm-commands','root':'@root','enricher':'@enricher','packages':'@packages','common':'@common','meta':'@meta','fdToolbox':'@fd-toolbox','fdToolboxCore':'@fd-toolbox-core','fdComponentToolbox':'@fd-component-toolbox','fdAppToolbox':'@fd-app-toolbox','client':'@client','baseRepo':'@base-repo','internalCli':'@internal-cli','infra':'@infra','flint':'@flint','test':'@test'};
|
|
4
|
+
const aliases={'src':'@','cli':'@cli','server':'@server','generated':'@schemas','npmCommands':'@npm-commands','root':'@root','enricher':'@enricher','packages':'@packages','common':'@common','meta':'@meta','fdToolbox':'@fd-toolbox','fdToolboxCore':'@fd-toolbox-core','fdComponentToolbox':'@fd-component-toolbox','fdAppToolbox':'@fd-app-toolbox','client':'@client','baseRepo':'@base-repo','internalCli':'@internal-cli','infra':'@infra','flint':'@flint','test':'@test','db':'@db'};
|
|
5
5
|
|
|
6
6
|
exports.aliases = aliases;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
const aliases={'src':'@','cli':'@cli','server':'@server','generated':'@schemas','npmCommands':'@npm-commands','root':'@root','enricher':'@enricher','packages':'@packages','common':'@common','meta':'@meta','fdToolbox':'@fd-toolbox','fdToolboxCore':'@fd-toolbox-core','fdComponentToolbox':'@fd-component-toolbox','fdAppToolbox':'@fd-app-toolbox','client':'@client','baseRepo':'@base-repo','internalCli':'@internal-cli','infra':'@infra','flint':'@flint','test':'@test'};
|
|
2
|
+
const aliases={'src':'@','cli':'@cli','server':'@server','generated':'@schemas','npmCommands':'@npm-commands','root':'@root','enricher':'@enricher','packages':'@packages','common':'@common','meta':'@meta','fdToolbox':'@fd-toolbox','fdToolboxCore':'@fd-toolbox-core','fdComponentToolbox':'@fd-component-toolbox','fdAppToolbox':'@fd-app-toolbox','client':'@client','baseRepo':'@base-repo','internalCli':'@internal-cli','infra':'@infra','flint':'@flint','test':'@test','db':'@db'};
|
|
3
3
|
|
|
4
4
|
export { aliases };
|
|
@@ -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/fd-toolbox','@fd-toolbox-core':'./packages/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/fd-toolbox','@fd-toolbox-core':'./packages/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'](([_0x34fbf7,_0xacf5aa])=>[_0x34fbf7+'/*',[_0xacf5aa+'/*']]));
|
|
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/fd-toolbox','@fd-toolbox-core':'./packages/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/fd-toolbox','@fd-toolbox-core':'./packages/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'](([_0x34fbf7,_0xacf5aa])=>[_0x34fbf7+'/*',[_0xacf5aa+'/*']]));
|
|
3
3
|
|
|
4
4
|
export { aliasSymbols, modulePathAliases, typescriptAliases };
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
var aliasSymbols = require('./alias-symbols.cjs.js');
|
|
5
5
|
var packages = require('../constants/packages.cjs2.js');
|
|
6
6
|
|
|
7
|
-
const folders={'src':'src','baseRepo':'base-repo','cli':'cli','common':'common','docs':'docs','enricher':'enricher','fdAppToolbox':'fd-app-toolbox','fdComponentToolbox':'fd-component-toolbox','fdToolbox':'fd-toolbox','fdToolboxCore':'fd-toolbox-core','flint':'flint','infra':'infra','internalCli':'internal-cli','meta':'meta','npmCommands':'npm-commands','other':'other','server':'server','test':'test','tools':'tools','client':'client','generated':'generated','dist':'dist','lib':'lib','packages':'packages','package':'package','public':'public','build':'build','bin':'bin','buildNpm':'build-npm','genExports':'gen-exports','modules':'modules','generatedTests':'generated-tests','nodeModules':'node_modules','next':'.next','nodeCache':'.node_cache','nx':'.nx','vscode':'.vscode','git':'.git','playwrightReport':'playwright-report','testResults':'test-results','rollup':'rollup','replaceAliases':'replace-aliases','pages':'pages','deploy':'deploy','level2':'level2','monorepo':'monorepo','content':'content','components':'components','app':'app','framework':'framework','api':'api','ci':'ci','jobs':'jobs','web':'web','cliPackage':'cli-package','createSaasKitApp':'create','setup':'setup','husky':'.husky','constants':'constants','configs':'configs'};const files={'route':'route.ts','metaJson':'meta.json','schema':'schema.ts','schemaDts':'schema.d.ts','schemaJs':'schema.js','crudHandlerMap':'crud-handler-map.ts','tsconfig':'tsconfig.json','tsconfigBase':'tsconfig.base.json','tsconfigResources':'tsconfig.resources.json','tsconfigLint':'tsconfig.lint.json','tsconfigCli':'tsconfig.cli.json','tsconfigServer':'tsconfig.server.json','tailwindConfig':'tailwind.config.ts','packageJson':'package.json','env':'.env','envExample':'.env.example','npmConfig':'.npmrc','nextEnv':'next-env.d.ts','license':'LICENSE','pnpmLock':'pnpm-lock.yaml','indexJs':'index.js','preCommitScript':'pre-commit-script.ts','preCommit':'pre-commit','commitMsg':'commit-msg','packageTemplate':'package-template.json','eslintConfigJs':'eslint.config.js','eslintConfigMjs':'eslint.config.mjs','layout':'layout.tsx'};const projectPaths={'root':'/','src':folders['src'],'app':folders['src']+'/'+folders['app'],'
|
|
7
|
+
const folders={'src':'src','baseRepo':'base-repo','cli':'cli','common':'common','docs':'docs','enricher':'enricher','fdAppToolbox':'fd-app-toolbox','fdComponentToolbox':'fd-component-toolbox','fdToolbox':'fd-toolbox','fdToolboxCore':'fd-toolbox-core','flint':'flint','infra':'infra','internalCli':'internal-cli','meta':'meta','npmCommands':'npm-commands','other':'other','server':'server','test':'test','tools':'tools','tools2':'tools2','client':'client','cluster':'cluster','generated':'generated','dist':'dist','lib':'lib','packages':'packages','package':'package','public':'public','build':'build','bin':'bin','buildNpm':'build-npm','genExports':'gen-exports','modules':'modules','generatedTests':'generated-tests','nodeModules':'node_modules','next':'.next','nodeCache':'.node_cache','nx':'.nx','vscode':'.vscode','git':'.git','playwrightReport':'playwright-report','testResults':'test-results','rollup':'rollup','replaceAliases':'replace-aliases','pages':'pages','deploy':'deploy','level2':'level2','monorepo':'monorepo','content':'content','components':'components','app':'app','framework':'framework','api':'api','ci':'ci','jobs':'jobs','web':'web','cliPackage':'cli-package','createSaasKitApp':'create','setup':'setup','husky':'.husky','constants':'constants','configs':'configs','db':'db','internal':'internal','undocumented':'undocumented','stringDuplication':'string-duplication'};const files={'route':'route.ts','metaJson':'meta.json','schema':'schema.ts','schemaDts':'schema.d.ts','schemaJs':'schema.js','crudHandlerMap':'crud-handler-map.ts','tsconfig':'tsconfig.json','tsconfigBase':'tsconfig.base.json','tsconfigResources':'tsconfig.resources.json','tsconfigLint':'tsconfig.lint.json','tsconfigCli':'tsconfig.cli.json','tsconfigServer':'tsconfig.server.json','tailwindConfig':'tailwind.config.ts','packageJson':'package.json','env':'.env','envExample':'.env.example','envStaging':'.env.staging','npmConfig':'.npmrc','nextEnv':'next-env.d.ts','license':'LICENSE','pnpmLock':'pnpm-lock.yaml','indexJs':'index.js','preCommitScript':'pre-commit-script.ts','preCommit':'pre-commit','commitMsg':'commit-msg','packageTemplate':'package-template.json','eslintConfigJs':'eslint.config.js','eslintConfigMjs':'eslint.config.mjs','layout':'layout.tsx','buildInitDb':'build-init-db.ts','duplicationsReportMd':'duplications-report.md'};const projectPaths={'root':'/','src':folders['src'],'app':folders['src']+'/'+folders['app'],'apiV1F':folders['src']+'/'+folders['app']+'/'+folders['api']+'/v1/(f)','lib':folders['lib'],'generated':folders['generated'],'srcComponents':folders['src']+'/'+folders['components'],'saasKitNodeModulesPath':folders['nodeModules']+'/'+packages.npmPackages['saasKit'],'f':folders['src']+'/'+folders['app']+'/f','public':folders['public'],'images':folders['public']+'/images','openApiJson':folders['public']+'/openapi.json','cliCreate':folders['packages']+'/'+folders['level2']+'/'+folders['cli']+'/'+folders['createSaasKitApp']};const nonRootProjectPaths={'currentDir':'./','currentDirRef':'.','parentDirRef':'..','clientFramework':folders['client']+'/'+folders['framework'],'serverFramework':folders['server']+'/'+folders['framework'],'apiHooks':folders['api']+'/hooks','npmCommands':folders['npmCommands'],'server':folders['server'],'serverContent':folders['server']+'/'+folders['content'],'package':folders['package'],'packageCli':folders['cliPackage'],'htmlTemplates':'html-templates','metaServer':folders['meta']+'/'+folders['server'],'toolsNpmCommands':folders['tools']+'/'+folders['npmCommands'],'tools':folders['tools'],'saasKitCliBin':folders['level2']+'/'+folders['cli']+'/'+folders['bin'],'buildPackage':folders['build']+'/'+folders['package'],'buildPackagesTypes':folders['build']+'/'+folders['package']+'/types','buildCliPackage':folders['build']+'/'+folders['cliPackage'],'buildPackagesTypesOutput':folders['build']+'/'+folders['package']+'/types-output','cliConstants':folders['cli']+'/'+folders['constants'],'cliConfigs':folders['cli']+'/'+folders['configs'],'tools2':folders['tools2']};const serverWeb=folders['server']+'/'+folders['web'];const packagesPath={'packagesBaseRepo':folders['packages']+'/'+folders['baseRepo']+'/','packagesCli':folders['packages']+'/'+folders['level2']+'/'+folders['cli']+'/','packagesCommon':folders['packages']+'/'+folders['level2']+'/'+folders['common']+'/','packagesDocs':folders['packages']+'/'+folders['docs']+'/','packagesFdAppToolbox':folders['packages']+'/'+folders['level2']+'/'+folders['fdAppToolbox']+'/','packagesFdComponentToolbox':folders['packages']+'/'+folders['level2']+'/'+folders['fdComponentToolbox']+'/','packagesFdToolbox':folders['packages']+'/'+folders['fdToolbox']+'/','packagesFdToolboxCore':folders['packages']+'/'+folders['fdToolboxCore']+'/','packagesFlint':folders['packages']+'/'+folders['flint']+'/','packagesInfra':folders['packages']+'/'+folders['infra']+'/','packagesInternalCli':folders['packages']+'/'+folders['internalCli']+'/','packagesMeta':folders['packages']+'/'+folders['level2']+'/'+folders['meta']+'/','packagesNpmCommands':folders['packages']+'/'+folders['level2']+'/'+folders['npmCommands']+'/','packagesOther':folders['packages']+'/'+folders['level2']+'/'+folders['other']+'/','packagesServer':folders['packages']+'/'+folders['level2']+'/'+folders['server']+'/','packagesTest':folders['packages']+'/'+folders['test']+'/','packagesClient':folders['packages']+'/'+folders['level2']+'/'+folders['client']+'/','packagesDb':folders['packages']+'/'+folders['level2']+'/'+folders['db']+'/','git':folders['packages']+'/'+folders['baseRepo']+'/'+folders['tools']+'/'+folders['git']+'/','buildNpm':folders['packages']+'/'+folders['level2']+'/'+folders['npmCommands']+'/'+folders['buildNpm']+'/','createSaasKitApp':folders['packages']+'/'+folders['level2']+'/'+folders['cli']+'/'+folders['createSaasKitApp']+'/','packagesEnricher':folders['packages']+'/'+folders['level2']+'/'+folders['enricher']+'/','packagesDocsContent':folders['packages']+'/'+folders['docs']+'/'+folders['content']+'/','apiResponses':folders['packages']+'/'+folders['level2']+'/'+folders['meta']+'/'+serverWeb+'/responses/','apiErrors':folders['packages']+'/'+folders['fdToolbox']+'/'+serverWeb+'/errors/','packagesTools':folders['packages']+'/'+folders['tools']+'/','packagesTools2':folders['packages']+'/'+folders['level2']+'/'+folders['tools2']+'/','packagesCluster':folders['packages']+'/'+folders['cluster']+'/'};const infraCiJobsBase=packagesPath['packagesInfra']+folders['ci']+'/'+folders['jobs'],infraCiSetupBase=packagesPath['packagesInfra']+folders['ci']+'/'+folders['setup'];const generatedPaths={'metaJson':folders['generated']+'/'+files['metaJson'],'tsconfigResources':folders['generated']+'/'+files['tsconfigResources'],'schema':folders['generated']+'/'+files['schema'],'schemaDts':folders['generated']+'/'+files['schemaDts'],'schemaJs':folders['generated']+'/'+files['schemaJs'],'crudHandlerMap':folders['generated']+'/'+files['crudHandlerMap']};const clientPaths={'styles':''+(packagesPath['packagesClient']+'styles'),'components':''+(packagesPath['packagesClient']+folders['components']),'pages':''+(packagesPath['packagesClient']+folders['pages']),'payments':''+(packagesPath['packagesClient']+'payments'),'products':''+(packagesPath['packagesClient']+'products'),'websiteScan':''+(packagesPath['packagesClient']+'website-scan')};const infraPaths={'lintJob':aliasSymbols.aliases['infra']+'/'+folders['ci']+'/'+folders['jobs']+'/lint','buildAndTestJob':aliasSymbols.aliases['infra']+'/'+folders['ci']+'/'+folders['jobs']+'/build-and-test','saasKitTestBuildAndTestJob':aliasSymbols.aliases['infra']+'/'+folders['ci']+'/'+folders['jobs']+'/saas-kit-test-build-and-test','createSaasKitAppTestJob':aliasSymbols.aliases['infra']+'/'+folders['ci']+'/'+folders['jobs']+'/create-saas-kit-app-test','manualCleanupJob':aliasSymbols.aliases['infra']+'/'+folders['ci']+'/'+folders['jobs']+'/manual-cleanup','cleanupScript':aliasSymbols.aliases['infra']+'/'+folders['ci']+'/'+folders['setup']+'/cleanup','setupScript':aliasSymbols.aliases['infra']+'/'+folders['ci']+'/'+folders['setup']+'/setup'};const globPatterns={'tsTsx':'**/*.{ts,tsx}','jsTsJsxTsx':'**/*.{js,ts,jsx,tsx}'};
|
|
8
8
|
|
|
9
9
|
exports.clientPaths = clientPaths;
|
|
10
10
|
exports.files = files;
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
import { aliases } from './alias-symbols.js';
|
|
3
3
|
import { npmPackages } from '../constants/packages2.js';
|
|
4
4
|
|
|
5
|
-
const folders={'src':'src','baseRepo':'base-repo','cli':'cli','common':'common','docs':'docs','enricher':'enricher','fdAppToolbox':'fd-app-toolbox','fdComponentToolbox':'fd-component-toolbox','fdToolbox':'fd-toolbox','fdToolboxCore':'fd-toolbox-core','flint':'flint','infra':'infra','internalCli':'internal-cli','meta':'meta','npmCommands':'npm-commands','other':'other','server':'server','test':'test','tools':'tools','client':'client','generated':'generated','dist':'dist','lib':'lib','packages':'packages','package':'package','public':'public','build':'build','bin':'bin','buildNpm':'build-npm','genExports':'gen-exports','modules':'modules','generatedTests':'generated-tests','nodeModules':'node_modules','next':'.next','nodeCache':'.node_cache','nx':'.nx','vscode':'.vscode','git':'.git','playwrightReport':'playwright-report','testResults':'test-results','rollup':'rollup','replaceAliases':'replace-aliases','pages':'pages','deploy':'deploy','level2':'level2','monorepo':'monorepo','content':'content','components':'components','app':'app','framework':'framework','api':'api','ci':'ci','jobs':'jobs','web':'web','cliPackage':'cli-package','createSaasKitApp':'create','setup':'setup','husky':'.husky','constants':'constants','configs':'configs'};const files={'route':'route.ts','metaJson':'meta.json','schema':'schema.ts','schemaDts':'schema.d.ts','schemaJs':'schema.js','crudHandlerMap':'crud-handler-map.ts','tsconfig':'tsconfig.json','tsconfigBase':'tsconfig.base.json','tsconfigResources':'tsconfig.resources.json','tsconfigLint':'tsconfig.lint.json','tsconfigCli':'tsconfig.cli.json','tsconfigServer':'tsconfig.server.json','tailwindConfig':'tailwind.config.ts','packageJson':'package.json','env':'.env','envExample':'.env.example','npmConfig':'.npmrc','nextEnv':'next-env.d.ts','license':'LICENSE','pnpmLock':'pnpm-lock.yaml','indexJs':'index.js','preCommitScript':'pre-commit-script.ts','preCommit':'pre-commit','commitMsg':'commit-msg','packageTemplate':'package-template.json','eslintConfigJs':'eslint.config.js','eslintConfigMjs':'eslint.config.mjs','layout':'layout.tsx'};const projectPaths={'root':'/','src':folders['src'],'app':folders['src']+'/'+folders['app'],'
|
|
5
|
+
const folders={'src':'src','baseRepo':'base-repo','cli':'cli','common':'common','docs':'docs','enricher':'enricher','fdAppToolbox':'fd-app-toolbox','fdComponentToolbox':'fd-component-toolbox','fdToolbox':'fd-toolbox','fdToolboxCore':'fd-toolbox-core','flint':'flint','infra':'infra','internalCli':'internal-cli','meta':'meta','npmCommands':'npm-commands','other':'other','server':'server','test':'test','tools':'tools','tools2':'tools2','client':'client','cluster':'cluster','generated':'generated','dist':'dist','lib':'lib','packages':'packages','package':'package','public':'public','build':'build','bin':'bin','buildNpm':'build-npm','genExports':'gen-exports','modules':'modules','generatedTests':'generated-tests','nodeModules':'node_modules','next':'.next','nodeCache':'.node_cache','nx':'.nx','vscode':'.vscode','git':'.git','playwrightReport':'playwright-report','testResults':'test-results','rollup':'rollup','replaceAliases':'replace-aliases','pages':'pages','deploy':'deploy','level2':'level2','monorepo':'monorepo','content':'content','components':'components','app':'app','framework':'framework','api':'api','ci':'ci','jobs':'jobs','web':'web','cliPackage':'cli-package','createSaasKitApp':'create','setup':'setup','husky':'.husky','constants':'constants','configs':'configs','db':'db','internal':'internal','undocumented':'undocumented','stringDuplication':'string-duplication'};const files={'route':'route.ts','metaJson':'meta.json','schema':'schema.ts','schemaDts':'schema.d.ts','schemaJs':'schema.js','crudHandlerMap':'crud-handler-map.ts','tsconfig':'tsconfig.json','tsconfigBase':'tsconfig.base.json','tsconfigResources':'tsconfig.resources.json','tsconfigLint':'tsconfig.lint.json','tsconfigCli':'tsconfig.cli.json','tsconfigServer':'tsconfig.server.json','tailwindConfig':'tailwind.config.ts','packageJson':'package.json','env':'.env','envExample':'.env.example','envStaging':'.env.staging','npmConfig':'.npmrc','nextEnv':'next-env.d.ts','license':'LICENSE','pnpmLock':'pnpm-lock.yaml','indexJs':'index.js','preCommitScript':'pre-commit-script.ts','preCommit':'pre-commit','commitMsg':'commit-msg','packageTemplate':'package-template.json','eslintConfigJs':'eslint.config.js','eslintConfigMjs':'eslint.config.mjs','layout':'layout.tsx','buildInitDb':'build-init-db.ts','duplicationsReportMd':'duplications-report.md'};const projectPaths={'root':'/','src':folders['src'],'app':folders['src']+'/'+folders['app'],'apiV1F':folders['src']+'/'+folders['app']+'/'+folders['api']+'/v1/(f)','lib':folders['lib'],'generated':folders['generated'],'srcComponents':folders['src']+'/'+folders['components'],'saasKitNodeModulesPath':folders['nodeModules']+'/'+npmPackages['saasKit'],'f':folders['src']+'/'+folders['app']+'/f','public':folders['public'],'images':folders['public']+'/images','openApiJson':folders['public']+'/openapi.json','cliCreate':folders['packages']+'/'+folders['level2']+'/'+folders['cli']+'/'+folders['createSaasKitApp']};const nonRootProjectPaths={'currentDir':'./','currentDirRef':'.','parentDirRef':'..','clientFramework':folders['client']+'/'+folders['framework'],'serverFramework':folders['server']+'/'+folders['framework'],'apiHooks':folders['api']+'/hooks','npmCommands':folders['npmCommands'],'server':folders['server'],'serverContent':folders['server']+'/'+folders['content'],'package':folders['package'],'packageCli':folders['cliPackage'],'htmlTemplates':'html-templates','metaServer':folders['meta']+'/'+folders['server'],'toolsNpmCommands':folders['tools']+'/'+folders['npmCommands'],'tools':folders['tools'],'saasKitCliBin':folders['level2']+'/'+folders['cli']+'/'+folders['bin'],'buildPackage':folders['build']+'/'+folders['package'],'buildPackagesTypes':folders['build']+'/'+folders['package']+'/types','buildCliPackage':folders['build']+'/'+folders['cliPackage'],'buildPackagesTypesOutput':folders['build']+'/'+folders['package']+'/types-output','cliConstants':folders['cli']+'/'+folders['constants'],'cliConfigs':folders['cli']+'/'+folders['configs'],'tools2':folders['tools2']};const serverWeb=folders['server']+'/'+folders['web'];const packagesPath={'packagesBaseRepo':folders['packages']+'/'+folders['baseRepo']+'/','packagesCli':folders['packages']+'/'+folders['level2']+'/'+folders['cli']+'/','packagesCommon':folders['packages']+'/'+folders['level2']+'/'+folders['common']+'/','packagesDocs':folders['packages']+'/'+folders['docs']+'/','packagesFdAppToolbox':folders['packages']+'/'+folders['level2']+'/'+folders['fdAppToolbox']+'/','packagesFdComponentToolbox':folders['packages']+'/'+folders['level2']+'/'+folders['fdComponentToolbox']+'/','packagesFdToolbox':folders['packages']+'/'+folders['fdToolbox']+'/','packagesFdToolboxCore':folders['packages']+'/'+folders['fdToolboxCore']+'/','packagesFlint':folders['packages']+'/'+folders['flint']+'/','packagesInfra':folders['packages']+'/'+folders['infra']+'/','packagesInternalCli':folders['packages']+'/'+folders['internalCli']+'/','packagesMeta':folders['packages']+'/'+folders['level2']+'/'+folders['meta']+'/','packagesNpmCommands':folders['packages']+'/'+folders['level2']+'/'+folders['npmCommands']+'/','packagesOther':folders['packages']+'/'+folders['level2']+'/'+folders['other']+'/','packagesServer':folders['packages']+'/'+folders['level2']+'/'+folders['server']+'/','packagesTest':folders['packages']+'/'+folders['test']+'/','packagesClient':folders['packages']+'/'+folders['level2']+'/'+folders['client']+'/','packagesDb':folders['packages']+'/'+folders['level2']+'/'+folders['db']+'/','git':folders['packages']+'/'+folders['baseRepo']+'/'+folders['tools']+'/'+folders['git']+'/','buildNpm':folders['packages']+'/'+folders['level2']+'/'+folders['npmCommands']+'/'+folders['buildNpm']+'/','createSaasKitApp':folders['packages']+'/'+folders['level2']+'/'+folders['cli']+'/'+folders['createSaasKitApp']+'/','packagesEnricher':folders['packages']+'/'+folders['level2']+'/'+folders['enricher']+'/','packagesDocsContent':folders['packages']+'/'+folders['docs']+'/'+folders['content']+'/','apiResponses':folders['packages']+'/'+folders['level2']+'/'+folders['meta']+'/'+serverWeb+'/responses/','apiErrors':folders['packages']+'/'+folders['fdToolbox']+'/'+serverWeb+'/errors/','packagesTools':folders['packages']+'/'+folders['tools']+'/','packagesTools2':folders['packages']+'/'+folders['level2']+'/'+folders['tools2']+'/','packagesCluster':folders['packages']+'/'+folders['cluster']+'/'};const infraCiJobsBase=packagesPath['packagesInfra']+folders['ci']+'/'+folders['jobs'],infraCiSetupBase=packagesPath['packagesInfra']+folders['ci']+'/'+folders['setup'];const generatedPaths={'metaJson':folders['generated']+'/'+files['metaJson'],'tsconfigResources':folders['generated']+'/'+files['tsconfigResources'],'schema':folders['generated']+'/'+files['schema'],'schemaDts':folders['generated']+'/'+files['schemaDts'],'schemaJs':folders['generated']+'/'+files['schemaJs'],'crudHandlerMap':folders['generated']+'/'+files['crudHandlerMap']};const clientPaths={'styles':''+(packagesPath['packagesClient']+'styles'),'components':''+(packagesPath['packagesClient']+folders['components']),'pages':''+(packagesPath['packagesClient']+folders['pages']),'payments':''+(packagesPath['packagesClient']+'payments'),'products':''+(packagesPath['packagesClient']+'products'),'websiteScan':''+(packagesPath['packagesClient']+'website-scan')};const infraPaths={'lintJob':aliases['infra']+'/'+folders['ci']+'/'+folders['jobs']+'/lint','buildAndTestJob':aliases['infra']+'/'+folders['ci']+'/'+folders['jobs']+'/build-and-test','saasKitTestBuildAndTestJob':aliases['infra']+'/'+folders['ci']+'/'+folders['jobs']+'/saas-kit-test-build-and-test','createSaasKitAppTestJob':aliases['infra']+'/'+folders['ci']+'/'+folders['jobs']+'/create-saas-kit-app-test','manualCleanupJob':aliases['infra']+'/'+folders['ci']+'/'+folders['jobs']+'/manual-cleanup','cleanupScript':aliases['infra']+'/'+folders['ci']+'/'+folders['setup']+'/cleanup','setupScript':aliases['infra']+'/'+folders['ci']+'/'+folders['setup']+'/setup'};const globPatterns={'tsTsx':'**/*.{ts,tsx}','jsTsJsxTsx':'**/*.{js,ts,jsx,tsx}'};
|
|
6
6
|
|
|
7
7
|
export { clientPaths, files, folders, generatedPaths, globPatterns, infraPaths, nonRootProjectPaths, packagesPath, projectPaths };
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
var projectPaths = require('../app-constants/project-paths.cjs.js');
|
|
5
5
|
|
|
6
|
-
const additionalFoldersToCreate=[
|
|
6
|
+
const additionalFoldersToCreate=[];const toolsFoldersToReplace={[projectPaths.nonRootProjectPaths['toolsNpmCommands']]:{[projectPaths.nonRootProjectPaths['tools']]:''}};
|
|
7
7
|
|
|
8
8
|
exports.additionalFoldersToCreate = additionalFoldersToCreate;
|
|
9
9
|
exports.toolsFoldersToReplace = toolsFoldersToReplace;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
-
import {
|
|
2
|
+
import { nonRootProjectPaths } from '../app-constants/project-paths.js';
|
|
3
3
|
|
|
4
|
-
const additionalFoldersToCreate=[
|
|
4
|
+
const additionalFoldersToCreate=[];const toolsFoldersToReplace={[nonRootProjectPaths['toolsNpmCommands']]:{[nonRootProjectPaths['tools']]:''}};
|
|
5
5
|
|
|
6
6
|
export { additionalFoldersToCreate, toolsFoldersToReplace };
|
package/cli/bin/create.ts
CHANGED
|
@@ -56,15 +56,15 @@ const filename = fileURLToPath(import.meta.url);
|
|
|
56
56
|
const sourceDir = "../../../../";
|
|
57
57
|
const binDir = path.dirname(filename);
|
|
58
58
|
const repoRoot = path.resolve(binDir, sourceDir);
|
|
59
|
-
const envLocalPath: string = path.join(binDir, `${sourceDir
|
|
59
|
+
const envLocalPath: string = path.join(binDir, `${sourceDir + folders.cli}/${files.envExample}`);
|
|
60
60
|
const envTemplate: string = fs.readFileSync(envLocalPath, "utf8");
|
|
61
61
|
|
|
62
62
|
const foldersToIgnore: string[] = [
|
|
63
|
-
`${folders.cli}
|
|
64
|
-
`${folders.cli}
|
|
65
|
-
`${folders.cli}
|
|
66
|
-
`${folders.cli}
|
|
67
|
-
`${folders.cli}
|
|
63
|
+
`${folders.cli}/${folders.constants}`,
|
|
64
|
+
`${folders.cli}/${files.packageTemplate}`,
|
|
65
|
+
`${folders.cli}/${files.envExample}`,
|
|
66
|
+
`${folders.cli}/${folders.bin}`,
|
|
67
|
+
`${folders.cli}/${folders.configs}`,
|
|
68
68
|
];
|
|
69
69
|
|
|
70
70
|
function runCommand(command: string, cwd?: string) {
|
|
@@ -94,7 +94,7 @@ function getCreateNextAppVersion() {
|
|
|
94
94
|
return String(packageJson.devDependencies?.["next"] ?? packageJson.dependencies?.["next"] ?? "latest");
|
|
95
95
|
}
|
|
96
96
|
|
|
97
|
-
function createNextProject(projectTitle: string, targetDir: string) {
|
|
97
|
+
async function createNextProject(projectTitle: string, targetDir: string) {
|
|
98
98
|
logInfoRaw("Creating Next.js project...");
|
|
99
99
|
|
|
100
100
|
const createNextAppVersion = getCreateNextAppVersion();
|
|
@@ -115,11 +115,15 @@ function createNextProject(projectTitle: string, targetDir: string) {
|
|
|
115
115
|
logInfoRaw("Next.js project created!");
|
|
116
116
|
|
|
117
117
|
const tsConfigPath = path.join(targetDir, "next.config.ts");
|
|
118
|
+
const publicDir = path.join(targetDir, folders.public);
|
|
118
119
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
}
|
|
120
|
+
await fsPromises.rm(tsConfigPath, { force: true });
|
|
121
|
+
logInfoRaw("Removed default next.config.ts");
|
|
122
|
+
|
|
123
|
+
await fsPromises.rm(publicDir, { recursive: true, force: true });
|
|
124
|
+
logInfoRaw("Removed default public folder");
|
|
125
|
+
|
|
126
|
+
await fsPromises.mkdir(publicDir);
|
|
123
127
|
}
|
|
124
128
|
|
|
125
129
|
async function createEnvFile(targetDir: string) {
|
|
@@ -141,7 +145,7 @@ async function createEnvFile(targetDir: string) {
|
|
|
141
145
|
async function overridePackageJson(targetDir: string) {
|
|
142
146
|
const targetPackageJsonPath: string = path.join(targetDir, files.packageJson);
|
|
143
147
|
// "name" is omitted in package.json; renamed to package-template.json so NX ignores it as a project.
|
|
144
|
-
const cliPackageJsonPath: string = path.join(repoRoot, `${folders.cli}
|
|
148
|
+
const cliPackageJsonPath: string = path.join(repoRoot, `${folders.cli}/${files.packageTemplate}`);
|
|
145
149
|
|
|
146
150
|
try {
|
|
147
151
|
const targetPackageJson: PackageJson = JSON.parse(
|
|
@@ -205,7 +209,7 @@ async function copyProjectFiles(targetDir: string) {
|
|
|
205
209
|
logInfoRaw(`Copying ${projectName} files...`);
|
|
206
210
|
|
|
207
211
|
for (const file of allFilesToCopy) {
|
|
208
|
-
const cliFile = `${folders.cli}
|
|
212
|
+
const cliFile = `${folders.cli}/${file}`;
|
|
209
213
|
const srcPath: string = path.join(repoRoot, cliFile);
|
|
210
214
|
|
|
211
215
|
const processedFile = replaceToolsFolder(file);
|
|
@@ -376,7 +380,7 @@ async function enableRepoModeExtras(targetDir: string) {
|
|
|
376
380
|
}
|
|
377
381
|
|
|
378
382
|
async function updateLayoutTitle(targetDir: string, folderName: string) {
|
|
379
|
-
const layoutPath = path.join(targetDir, `${projectPaths.app}
|
|
383
|
+
const layoutPath = path.join(targetDir, `${projectPaths.app}/${files.layout}`);
|
|
380
384
|
|
|
381
385
|
if (!existsSync(layoutPath)) {
|
|
382
386
|
throw createError(`${files.layout} not found at ${layoutPath}, cannot update title.`);
|
|
@@ -408,7 +412,7 @@ export async function create(args: string[]) {
|
|
|
408
412
|
|
|
409
413
|
try {
|
|
410
414
|
checkTargetFolder(targetDir);
|
|
411
|
-
createNextProject(folderName, targetDir);
|
|
415
|
+
await createNextProject(folderName, targetDir);
|
|
412
416
|
await copyProjectFiles(targetDir);
|
|
413
417
|
await overridePackageJson(targetDir);
|
|
414
418
|
createAdditionalFolders(targetDir);
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { defineConfig } from "drizzle-kit";
|
|
2
2
|
import { getRequiredStringEnvSetting } from "@fd-toolbox/infra/env-functions";
|
|
3
3
|
import { generatedPaths } from "@base-repo/app-constants/project-paths";
|
|
4
|
-
import {
|
|
4
|
+
import { toolboxEnvSettingKeys } from "@fd-toolbox/infra/toolbox-env-setting-keys";
|
|
5
5
|
|
|
6
|
-
const connectionString = getRequiredStringEnvSetting(
|
|
6
|
+
const connectionString = getRequiredStringEnvSetting(toolboxEnvSettingKeys.databaseConnectionString);
|
|
7
7
|
|
|
8
|
+
/** To do: add docs */
|
|
8
9
|
export const drizzleConfig = defineConfig({
|
|
9
10
|
dialect: "postgresql",
|
|
10
11
|
schema: generatedPaths.schema,
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { folders } from "@base-repo/app-constants/project-paths";
|
|
2
|
+
import type { Configuration as WebpackConfig } from "webpack";
|
|
3
|
+
|
|
4
|
+
const externalModules = {
|
|
5
|
+
"@node-rs/argon2": "commonjs @node-rs/argon2",
|
|
6
|
+
"cloudflare:sockets": "commonjs cloudflare:sockets",
|
|
7
|
+
"node:crypto": "commonjs node:crypto",
|
|
8
|
+
"node:fs": "commonjs node:fs",
|
|
9
|
+
"node:path": "commonjs node:path",
|
|
10
|
+
"node:stream": "commonjs node:stream",
|
|
11
|
+
child_process: "commonjs2 child_process",
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const serverRules = {
|
|
15
|
+
test: /\.html$/,
|
|
16
|
+
use: "raw-loader",
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
const mdRules = {
|
|
20
|
+
test: /\.md$/,
|
|
21
|
+
use: "ignore-loader",
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/** To do: add docs */
|
|
25
|
+
export const nextConfig = (overrides = {}) => {
|
|
26
|
+
const baseConfig = {
|
|
27
|
+
reactCompiler: true,
|
|
28
|
+
images: {
|
|
29
|
+
remotePatterns: [
|
|
30
|
+
{
|
|
31
|
+
protocol: "https",
|
|
32
|
+
hostname: "pub-7a5f8c3ab46946ae96d8d2e497a36f7b.r2.dev",
|
|
33
|
+
port: "",
|
|
34
|
+
pathname: "/**",
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
webpack: (
|
|
39
|
+
config: WebpackConfig & {
|
|
40
|
+
resolve: { alias: Record<string, false> };
|
|
41
|
+
module: { rules: unknown[] };
|
|
42
|
+
externals: unknown[];
|
|
43
|
+
watchOptions?: { ignored: string[] };
|
|
44
|
+
},
|
|
45
|
+
{ isServer }: { isServer: boolean },
|
|
46
|
+
) => {
|
|
47
|
+
if (isServer) {
|
|
48
|
+
config.watchOptions = {
|
|
49
|
+
ignored: [
|
|
50
|
+
`**/${folders.nodeModules}/**`,
|
|
51
|
+
`**/${folders.next}/**`,
|
|
52
|
+
`**/${folders.npmCommands}/**`,
|
|
53
|
+
],
|
|
54
|
+
};
|
|
55
|
+
config.externals.push(externalModules);
|
|
56
|
+
config.module.rules.push(serverRules);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
config.module.rules.push(mdRules);
|
|
60
|
+
|
|
61
|
+
return config;
|
|
62
|
+
},
|
|
63
|
+
async rewrites() {
|
|
64
|
+
return [
|
|
65
|
+
{
|
|
66
|
+
source: "/api/:path*",
|
|
67
|
+
destination: "/api/v1/:path*",
|
|
68
|
+
},
|
|
69
|
+
{
|
|
70
|
+
source: "/:path((?!api).*)",
|
|
71
|
+
destination: "/f/:path*",
|
|
72
|
+
},
|
|
73
|
+
];
|
|
74
|
+
},
|
|
75
|
+
serverExternalPackages: ["oslo", "pg"],
|
|
76
|
+
};
|
|
77
|
+
return { ...baseConfig, ...overrides };
|
|
78
|
+
};
|
package/cli/next.config.js
CHANGED
|
@@ -1,73 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { folders } from "@fernir2/saas-kit";
|
|
1
|
+
import { nextConfig } from "@fernir2/saas-kit";
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
"@node-rs/argon2": "commonjs @node-rs/argon2",
|
|
6
|
-
"cloudflare:sockets": "commonjs cloudflare:sockets",
|
|
7
|
-
"node:crypto": "commonjs node:crypto",
|
|
8
|
-
"node:fs": "commonjs node:fs",
|
|
9
|
-
"node:path": "commonjs node:path",
|
|
10
|
-
"node:stream": "commonjs node:stream",
|
|
11
|
-
child_process: "commonjs2 child_process",
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
const serverRules = {
|
|
15
|
-
test: /\.html$/,
|
|
16
|
-
use: "raw-loader",
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
const mdRules = {
|
|
20
|
-
test: /\.md$/,
|
|
21
|
-
use: "ignore-loader",
|
|
22
|
-
};
|
|
23
|
-
|
|
24
|
-
const nextConfig = async () => {
|
|
25
|
-
return {
|
|
26
|
-
reactCompiler: true,
|
|
27
|
-
images: {
|
|
28
|
-
remotePatterns: [
|
|
29
|
-
{
|
|
30
|
-
protocol: "https",
|
|
31
|
-
hostname: "pub-7a5f8c3ab46946ae96d8d2e497a36f7b.r2.dev",
|
|
32
|
-
port: "",
|
|
33
|
-
pathname: "/**",
|
|
34
|
-
},
|
|
35
|
-
],
|
|
36
|
-
},
|
|
37
|
-
webpack: (config, { isServer }) => {
|
|
38
|
-
if (isServer) {
|
|
39
|
-
config.watchOptions = {
|
|
40
|
-
ignored: [
|
|
41
|
-
`**/${folders.nodeModules}/**`,
|
|
42
|
-
`**/${folders.next}/**`,
|
|
43
|
-
`**/${folders.npmCommands}/**`,
|
|
44
|
-
`**/${folders.docs}/**`,
|
|
45
|
-
`**/${folders.flint}/**`,
|
|
46
|
-
],
|
|
47
|
-
};
|
|
48
|
-
config.externals.push(externalModules);
|
|
49
|
-
config.module.rules.push(serverRules);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
config.module.rules.push(mdRules);
|
|
53
|
-
|
|
54
|
-
config.resolve.alias["./packages/flint/*"] = false;
|
|
55
|
-
|
|
56
|
-
return config;
|
|
57
|
-
},
|
|
58
|
-
async rewrites() {
|
|
59
|
-
return [
|
|
60
|
-
{
|
|
61
|
-
source: "/api/:path*",
|
|
62
|
-
destination: "/api/v1/:path*",
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
source: "/:path((?!api).*)",
|
|
66
|
-
destination: "/f/:path*",
|
|
67
|
-
},
|
|
68
|
-
];
|
|
69
|
-
},
|
|
70
|
-
serverExternalPackages: ["oslo", "pg"],
|
|
71
|
-
};
|
|
72
|
-
};
|
|
73
|
-
export default nextConfig;
|
|
3
|
+
export default nextConfig();
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { generateCombinedMeta } from "@fernir2/saas-kit";
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
generateCombinedMeta();
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { migrateDatabase, logInfo } from "@fernir2/saas-kit/server";
|
|
1
|
+
import { migrateDatabase, logInfo, logError } from "@fernir2/saas-kit/server";
|
|
2
2
|
|
|
3
3
|
async function migrate() {
|
|
4
4
|
try {
|
|
@@ -6,7 +6,7 @@ async function migrate() {
|
|
|
6
6
|
logInfo("Database migrations executed successfully");
|
|
7
7
|
process.exit(0);
|
|
8
8
|
} catch (err) {
|
|
9
|
-
|
|
9
|
+
logError("Error running migrations", err);
|
|
10
10
|
|
|
11
11
|
process.exit(1);
|
|
12
12
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { seedDatabase, logInfo } from "@fernir2/saas-kit/server";
|
|
1
|
+
import { seedDatabase, logInfo, logError } from "@fernir2/saas-kit/server";
|
|
2
2
|
|
|
3
3
|
async function seed() {
|
|
4
4
|
try {
|
|
@@ -6,7 +6,7 @@ async function seed() {
|
|
|
6
6
|
logInfo("Database seeded successfully");
|
|
7
7
|
process.exit(0);
|
|
8
8
|
} catch (err) {
|
|
9
|
-
|
|
9
|
+
logError("Error seeding database", err);
|
|
10
10
|
|
|
11
11
|
process.exit(1);
|
|
12
12
|
}
|
|
@@ -19,9 +19,6 @@
|
|
|
19
19
|
"@fernir2/saas-kit": "0.0.162",
|
|
20
20
|
"@node-rs/argon2": "2.0.2",
|
|
21
21
|
"drizzle-orm": "0.36.4",
|
|
22
|
-
"eslint-plugin-github": "6.0.0",
|
|
23
|
-
"eslint-plugin-import": "2.32.0",
|
|
24
|
-
"eslint-plugin-sonarjs": "3.0.5",
|
|
25
22
|
"geist": "1.4.2",
|
|
26
23
|
"next": "16.0.10",
|
|
27
24
|
"quill": "2.0.3",
|
|
@@ -47,6 +44,9 @@
|
|
|
47
44
|
"eslint-plugin-react-compiler": "19.1.0-rc.2",
|
|
48
45
|
"eslint-plugin-react-hooks": "5.2.0",
|
|
49
46
|
"eslint-plugin-react-refresh": "0.4.20",
|
|
47
|
+
"eslint-plugin-github": "6.0.0",
|
|
48
|
+
"eslint-plugin-import": "2.32.0",
|
|
49
|
+
"eslint-plugin-sonarjs": "3.0.5",
|
|
50
50
|
"husky": "9.1.7",
|
|
51
51
|
"postcss": "8.5.6",
|
|
52
52
|
"prettier": "3.6.2",
|
|
@@ -55,7 +55,6 @@
|
|
|
55
55
|
"@tailwindcss/postcss": "4.1.16",
|
|
56
56
|
"tsx": "4.20.5",
|
|
57
57
|
"typescript": "5.9.2",
|
|
58
|
-
"esbuild": "0.25.9",
|
|
59
58
|
"babel-plugin-react-compiler": "1.0.0"
|
|
60
59
|
}
|
|
61
60
|
}
|
package/cli/server.ts
CHANGED
|
@@ -4,12 +4,12 @@ import next from "next";
|
|
|
4
4
|
import {
|
|
5
5
|
checkAndHandleWebSocketRequest,
|
|
6
6
|
initSocket,
|
|
7
|
-
|
|
7
|
+
initializeResourceMetaCache,
|
|
8
8
|
} from "@fernir2/saas-kit/server";
|
|
9
9
|
import { envSettingKeys, getNumberEnvSetting, isDev } from "@fernir2/saas-kit";
|
|
10
10
|
|
|
11
11
|
const dev = isDev();
|
|
12
|
-
const port = getNumberEnvSetting(envSettingKeys.
|
|
12
|
+
const port = getNumberEnvSetting(envSettingKeys.port) ?? 3000;
|
|
13
13
|
|
|
14
14
|
const app = next({ dev, port });
|
|
15
15
|
const nextRequestHandler = app.getRequestHandler();
|
|
@@ -20,8 +20,7 @@ async function run() {
|
|
|
20
20
|
const httpServer = createServer((req, res) => {
|
|
21
21
|
checkAndHandleWebSocketRequest(req, res);
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
nextRequestHandler(req, res, parsedUrl);
|
|
23
|
+
nextRequestHandler(req, res, parse(req.url!, true));
|
|
25
24
|
});
|
|
26
25
|
|
|
27
26
|
initSocket(httpServer);
|
|
@@ -35,7 +34,7 @@ async function run() {
|
|
|
35
34
|
console.log(`> Ready on http://localhost:${port}`);
|
|
36
35
|
});
|
|
37
36
|
|
|
38
|
-
await
|
|
37
|
+
await initializeResourceMetaCache();
|
|
39
38
|
}
|
|
40
39
|
|
|
41
40
|
run();
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { notFound } from "next/navigation";
|
|
2
|
+
import { httpWrapper } from "@server/web/http-wrapper";
|
|
3
|
+
import ApiDocsPage from "@client/pages/api-docs-page/ApiDocsPage";
|
|
4
|
+
import { isProd } from "@fd-toolbox/lib/environments";
|
|
5
|
+
import "swagger-ui-react/swagger-ui.css";
|
|
6
|
+
|
|
7
|
+
const Page = httpWrapper(async () => {
|
|
8
|
+
if (isProd()) {
|
|
9
|
+
notFound();
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
return <ApiDocsPage />;
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export default Page;
|