@fernir2/saas-kit-cli 0.1.38 → 0.1.40
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/cli/bin/create.ts +14 -16
- package/cli/configs/drizzle-cli-config.ts +2 -2
- 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 +6 -9
- package/cli/server.ts +2 -2
- package/cli/src/app/f/{forgot-password → (not-signed-in)/forgot-password}/page.tsx +1 -1
- package/cli/src/app/f/{resetpassword → (not-signed-in)/reset-password}/page.tsx +1 -1
- package/cli/src/app/f/{sign-in → (not-signed-in)/sign-in}/page.tsx +1 -1
- package/cli/src/app/f/{sign-up → (not-signed-in)/sign-up}/page.tsx +1 -1
- package/cli/src/app/f/(signed-in)/layout.tsx +5 -0
- package/cli/src/app/layout.tsx +7 -9
- package/cli/templates/.env-template +12 -0
- package/cli/test/global-setup.ts +2 -24
- 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-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/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 +2 -1
- package/fd-toolbox/types/ensure-type.js +2 -2
- 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 -2
- package/level2/npm-commands/build-npm/path.js +3 -3
- package/package.json +2 -2
- 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/[resourceName]/[id]/route.ts +0 -11
- package/cli/src/app/api/v1/[resourceName]/route.ts +0 -14
- package/cli/src/app/api/v1/[resourceName]/upsert/route.ts +0 -3
- package/cli/src/app/api/v1/blob/route.ts +0 -7
- package/cli/src/app/api/v1/log/route.ts +0 -7
- package/cli/src/app/api/v1/otheruser/[id]/route.ts +0 -14
- package/cli/src/app/api/v1/otheruser/route.ts +0 -7
- package/cli/src/app/api/v1/password/forgotpassword/route.ts +0 -3
- package/cli/src/app/api/v1/password/resetpassword/route.ts +0 -3
- package/cli/src/app/api/v1/payment/method/route.ts +0 -4
- package/cli/src/app/api/v1/payment/route.ts +0 -3
- package/cli/src/app/api/v1/payment/verify-fail/route.ts +0 -3
- package/cli/src/app/api/v1/payment/verify-success/route.ts +0 -3
- package/cli/src/app/api/v1/preload/route.ts +0 -3
- 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/api/v1/sign-in/route.ts +0 -3
- package/cli/src/app/api/v1/sign-out/route.ts +0 -3
- package/cli/src/app/api/v1/sign-up/route.ts +0 -3
- package/cli/src/app/api/v1/subscription/cancel/route.ts +0 -3
- package/cli/src/app/api/v1/subscription/create/route.ts +0 -3
- package/cli/src/app/api/v1/subscription/update/route.ts +0 -3
- package/cli/src/app/api/v1/uimeta/route.ts +0 -3
- package/cli/src/app/api/v1/uimetas/route.ts +0 -3
- package/cli/src/app/api/v1/userfeature/isenabled/route.ts +0 -3
- package/cli/src/app/api/v1/userpermission/route.ts +0 -3
- package/cli/src/app/api/v1/visible-workspace/route.ts +0 -5
- package/cli/src/app/api/v1/workspace/change/route.ts +0 -5
- package/cli/src/app/f/(private)/layout.tsx +0 -5
- package/cli/src/app/f/defaultRedirect/page.tsx +0 -9
- package/cli/src/app/f/editpassword/page.tsx +0 -8
- package/cli/src/app/f/forgotpassword/page.tsx +0 -13
- package/cli/src/app/f/reset-password/page.tsx +0 -11
- /package/cli/src/app/f/{edit-password → (not-signed-in)/edit-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/{(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'](([_0x75502a,_0x40ba02])=>[_0x75502a+'/*',[_0x40ba02+'/*']]));
|
|
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'](([_0x75502a,_0x40ba02])=>[_0x75502a+'/*',[_0x40ba02+'/*']]));
|
|
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','internal':'internal','undocumented':'undocumented'};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'};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','templates':'templates'};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','internal':'internal','undocumented':'undocumented'};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'};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','templates':'templates'};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 };
|
package/cli/bin/create.ts
CHANGED
|
@@ -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();
|
|
@@ -117,17 +117,13 @@ function createNextProject(projectTitle: string, targetDir: string) {
|
|
|
117
117
|
const tsConfigPath = path.join(targetDir, "next.config.ts");
|
|
118
118
|
const publicDir = path.join(targetDir, folders.public);
|
|
119
119
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
logInfoRaw("Removed default next.config.ts");
|
|
123
|
-
}
|
|
120
|
+
await fsPromises.rm(tsConfigPath, { force: true });
|
|
121
|
+
logInfoRaw("Removed default next.config.ts");
|
|
124
122
|
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
logInfoRaw("Removed default public folder");
|
|
128
|
-
}
|
|
123
|
+
await fsPromises.rm(publicDir, { recursive: true, force: true });
|
|
124
|
+
logInfoRaw("Removed default public folder");
|
|
129
125
|
|
|
130
|
-
|
|
126
|
+
await fsPromises.mkdir(publicDir);
|
|
131
127
|
}
|
|
132
128
|
|
|
133
129
|
async function createEnvFile(targetDir: string) {
|
|
@@ -213,11 +209,10 @@ async function copyProjectFiles(targetDir: string) {
|
|
|
213
209
|
logInfoRaw(`Copying ${projectName} files...`);
|
|
214
210
|
|
|
215
211
|
for (const file of allFilesToCopy) {
|
|
216
|
-
const
|
|
217
|
-
const cliFile = `${folders.cli}/${normalizedFile}`;
|
|
212
|
+
const cliFile = `${folders.cli}/${file}`;
|
|
218
213
|
const srcPath: string = path.join(repoRoot, cliFile);
|
|
219
214
|
|
|
220
|
-
const processedFile = replaceToolsFolder(
|
|
215
|
+
const processedFile = replaceToolsFolder(file);
|
|
221
216
|
|
|
222
217
|
const destPath: string = path.join(targetDir, processedFile);
|
|
223
218
|
|
|
@@ -417,7 +412,7 @@ export async function create(args: string[]) {
|
|
|
417
412
|
|
|
418
413
|
try {
|
|
419
414
|
checkTargetFolder(targetDir);
|
|
420
|
-
createNextProject(folderName, targetDir);
|
|
415
|
+
await createNextProject(folderName, targetDir);
|
|
421
416
|
await copyProjectFiles(targetDir);
|
|
422
417
|
await overridePackageJson(targetDir);
|
|
423
418
|
createAdditionalFolders(targetDir);
|
|
@@ -429,11 +424,14 @@ export async function create(args: string[]) {
|
|
|
429
424
|
await enableRepoModeExtras(targetDir);
|
|
430
425
|
}
|
|
431
426
|
|
|
427
|
+
runCommand("git add .", targetDir);
|
|
428
|
+
runCommand("git commit -nm 'Initial commit'", targetDir);
|
|
429
|
+
logInfoRaw("Initial commit created!");
|
|
430
|
+
|
|
432
431
|
logInfoRaw(`\n${projectName} project "${folderName}" is ready!`);
|
|
433
432
|
logInfoRaw("Next steps:");
|
|
434
433
|
logInfoRaw(` cd ${folderName}`);
|
|
435
|
-
logInfoRaw(" npm run
|
|
436
|
-
logInfoRaw(" npm start");
|
|
434
|
+
logInfoRaw(" npm run start");
|
|
437
435
|
} catch (error) {
|
|
438
436
|
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
439
437
|
logStringError("Error:");
|
|
@@ -1,9 +1,9 @@
|
|
|
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
8
|
/** To do: add docs */
|
|
9
9
|
export const drizzleConfig = defineConfig({
|
|
@@ -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
|
}
|
|
@@ -3,24 +3,21 @@
|
|
|
3
3
|
"private": true,
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
|
+
"start": "npm run setup && npm run build && npx tsx server.ts",
|
|
6
7
|
"dev": "next dev --turbo",
|
|
7
8
|
"build": "next build --turbo",
|
|
8
|
-
"start": "next start",
|
|
9
9
|
"lint": "eslint -c eslint.config.js",
|
|
10
|
+
"setup": "npm run gen-meta && npm run gen-schema && npm run init-db",
|
|
11
|
+
"init-db": "npm run migrate-db && npm run seed-db",
|
|
10
12
|
"gen-schema": "npx tsx npm-commands/gen-schema.ts",
|
|
11
13
|
"gen-meta": "npx tsx npm-commands/gen-meta.ts",
|
|
12
|
-
"init-db": "npm run migrate-db && npm run seed-db",
|
|
13
|
-
"setup": "npm run gen-meta && npm run gen-schema && npm run init-db",
|
|
14
|
-
"prod": "npm run setup && npm run build && npx tsx server.ts",
|
|
15
14
|
"migrate-db": "npx tsx npm-commands/migrate-db.ts",
|
|
16
15
|
"seed-db": "npx tsx npm-commands/seed-db.ts"
|
|
17
16
|
},
|
|
18
17
|
"dependencies": {
|
|
19
|
-
"@fernir2/saas-kit": "0.0.
|
|
20
|
-
"@node-rs/argon2": "2.0.2",
|
|
18
|
+
"@fernir2/saas-kit": "0.0.174",
|
|
21
19
|
"drizzle-orm": "0.36.4",
|
|
22
|
-
"
|
|
23
|
-
"next": "16.0.10",
|
|
20
|
+
"next": "16.1.1",
|
|
24
21
|
"quill": "2.0.3",
|
|
25
22
|
"react": "19.2.3",
|
|
26
23
|
"react-dom": "19.2.3",
|
|
@@ -38,7 +35,7 @@
|
|
|
38
35
|
"@typescript-eslint/parser": "8.43.0",
|
|
39
36
|
"drizzle-kit": "0.28.1",
|
|
40
37
|
"eslint": "9.35.0",
|
|
41
|
-
"eslint-config-next": "16.
|
|
38
|
+
"eslint-config-next": "16.1.1",
|
|
42
39
|
"eslint-config-prettier": "10.1.8",
|
|
43
40
|
"eslint-plugin-react": "7.37.5",
|
|
44
41
|
"eslint-plugin-react-compiler": "19.1.0-rc.2",
|
package/cli/server.ts
CHANGED
|
@@ -4,7 +4,7 @@ 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
|
|
|
@@ -34,7 +34,7 @@ async function run() {
|
|
|
34
34
|
console.log(`> Ready on http://localhost:${port}`);
|
|
35
35
|
});
|
|
36
36
|
|
|
37
|
-
await
|
|
37
|
+
await initializeResourceMetaCache();
|
|
38
38
|
}
|
|
39
39
|
|
|
40
40
|
run();
|
package/cli/src/app/layout.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { HtmlMetadataType } from "@meta/client/framework";
|
|
2
|
-
import {
|
|
2
|
+
import { Geist as createFontGeist } from "next/font/google";
|
|
3
3
|
import "@/app/globals.css";
|
|
4
4
|
import { cn } from "@fd-toolbox/lib/utils";
|
|
5
5
|
import Favicon from "src/app/favicon.ico";
|
|
@@ -20,18 +20,16 @@ export default async function RootLayout({ children }: { children: ReactNode })
|
|
|
20
20
|
|
|
21
21
|
return (
|
|
22
22
|
<html lang="en">
|
|
23
|
-
<body className={cn(
|
|
23
|
+
<body className={cn(geistFont.className, "h-screen text-sm")}>
|
|
24
24
|
<div className="flex h-full flex-col">
|
|
25
|
-
<Providers
|
|
26
|
-
globalConfig={{
|
|
27
|
-
...defaultGlobalConfig,
|
|
28
|
-
}}
|
|
29
|
-
>
|
|
30
|
-
{children}
|
|
31
|
-
</Providers>
|
|
25
|
+
<Providers globalConfig={{ ...defaultGlobalConfig }}>{children}</Providers>
|
|
32
26
|
</div>
|
|
33
27
|
<Toaster />
|
|
34
28
|
</body>
|
|
35
29
|
</html>
|
|
36
30
|
);
|
|
37
31
|
}
|
|
32
|
+
|
|
33
|
+
const geistFont = createFontGeist({
|
|
34
|
+
subsets: ["latin"],
|
|
35
|
+
});
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
FD_INTEGRATION_ENABLED=true
|
|
2
|
+
|
|
3
|
+
FD_DATABASE_CONNECTION_STRING="postgresql://postgres:root@localhost:5432/saas-kit"
|
|
4
|
+
|
|
5
|
+
NEXT_PUBLIC_FD_SEED_DEMO_RESOURCES=true
|
|
6
|
+
FD_SEED_DEV_RESOURCES=true
|
|
7
|
+
|
|
8
|
+
FD_SENDER_EMAIL=
|
|
9
|
+
FD_EMAIL_SERVICE_URL=
|
|
10
|
+
FD_EMAIL_SERVICE_KEY=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
|
|
11
|
+
|
|
12
|
+
NODE_OPTIONS="--import=tsx"
|
package/cli/test/global-setup.ts
CHANGED
|
@@ -1,25 +1,3 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { initInternalResourceMetasCacheFromJson } from "@fernir2/saas-kit/server";
|
|
3
|
-
import { toolboxEnvSettingKeys } from "@fernir2/saas-kit";
|
|
1
|
+
import { playwrightGlobalSetup } from "@fernir2/saas-kit";
|
|
4
2
|
|
|
5
|
-
export
|
|
6
|
-
export type TestArgs = PlaywrightTestArgs;
|
|
7
|
-
|
|
8
|
-
export const test: TestType<TestArgs, WorkerArgs> = base.extend({
|
|
9
|
-
metaInitialized: [
|
|
10
|
-
// Approved
|
|
11
|
-
// eslint-disable-next-line no-empty-pattern
|
|
12
|
-
async ({}, use: () => Promise<void>) => {
|
|
13
|
-
initInternalResourceMetasCacheFromJson();
|
|
14
|
-
await use();
|
|
15
|
-
},
|
|
16
|
-
{ scope: "worker", auto: true },
|
|
17
|
-
],
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
export const expect = test.expect;
|
|
21
|
-
|
|
22
|
-
export default async function globalSetup() {
|
|
23
|
-
process.env[toolboxEnvSettingKeys.appEnv] = "test";
|
|
24
|
-
initInternalResourceMetasCacheFromJson();
|
|
25
|
-
}
|
|
3
|
+
export default playwrightGlobalSetup;
|
|
@@ -8,7 +8,7 @@ var tokens = require('../auth/tokens.cjs.js');
|
|
|
8
8
|
var headerNames = require('../constants/header-names.cjs.js');
|
|
9
9
|
var httpConstants = require('../http/http-constants.cjs.js');
|
|
10
10
|
|
|
11
|
-
var __defProp=Object['defineProperty'],__name=(
|
|
11
|
+
var __defProp=Object['defineProperty'],__name=(_0x3ed8bd,_0x2e2b8)=>__defProp(_0x3ed8bd,'name',{'value':_0x2e2b8,'configurable':!![]});async function apiGet(_0x54aee0,_0x5ba0a5,_0x4c8f6b,_0x32a8b5){const _0x5f2d80=apiPaths.getApiPath(_0x54aee0,_0x5ba0a5,_0x4c8f6b);return baseApi.apiBaseGet(_0x5f2d80,getApiHeaders(_0x32a8b5));}__name(apiGet,'apiGet');async function apiGetBlob(_0x8b3505,_0x17717f,_0x1fe237,_0x45b56b){const _0x17e64f=apiPaths.getApiPath(_0x8b3505,_0x17717f,_0x1fe237);return baseApi.apiBaseGetBlob(_0x17e64f,getApiHeaders(_0x45b56b,!![]));}__name(apiGetBlob,'apiGetBlob');async function apiGetWithOData(_0x4e335c,_0x5913f5,_0x485e65){const _0x4ae7f6=odatas.getODataParams(_0x5913f5);return apiGet(_0x4e335c,_0x485e65,_0x4ae7f6);}__name(apiGetWithOData,'apiGetWithOData');async function apiPost(_0x1159ad,_0x12931f,_0x2cb5db){const _0x3896bd=apiPaths.getApiPath(_0x1159ad);return baseApi.postBaseApi(_0x3896bd,_0x12931f,getApiHeaders(_0x2cb5db));}__name(apiPost,'apiPost');async function apiPostFile(_0x6c348c,_0x158fd7,_0x9e476f){const _0x1a1f4d=apiPaths.getApiPath(_0x6c348c),_0x2351f7=await fetch(_0x1a1f4d,{'method':httpConstants.httpMethods['post'],'body':_0x158fd7,'headers':getApiHeaders(_0x9e476f,!![])});return baseApi.baseApiHandleResponse(_0x2351f7);}__name(apiPostFile,'apiPostFile');async function apiPut(_0x466342,_0x208eb7,_0x298c7b){const _0x59e086=apiPaths.getApiPath(_0x466342);return baseApi.putBaseApi(_0x59e086,_0x208eb7,getApiHeaders(_0x298c7b));}__name(apiPut,'apiPut');async function apiDelete(_0x53b172,_0x3969f6,_0x1ca35c){const _0x29f840=apiPaths.getApiPath(_0x53b172,_0x3969f6);return baseApi.deleteBaseApi(_0x29f840,getApiHeaders(_0x1ca35c));}__name(apiDelete,'apiDelete');function getApiHeaders(_0x2d2dc0,_0x4dac17=![]){const _0x118a69=_0x2d2dc0??new Headers(),_0x2a595f=tokens.getAuthToken();return (!_0x118a69['get'](headerNames.headerNames['authHeaderName'])||_0x118a69['get'](headerNames.headerNames['authHeaderName'])==='')&&_0x2a595f&&_0x118a69['set'](headerNames.headerNames['authHeaderName'],headerNames.headerNames['authHeaderValuePrefix']+_0x2a595f),!_0x4dac17&&!_0x118a69['get'](headerNames.httpContentTypes['contentTypeHeaderName'])&&_0x118a69['set'](headerNames.httpContentTypes['contentTypeHeaderName'],headerNames.httpContentTypes['contentTypeHeaderValue']),_0x118a69;}__name(getApiHeaders,'getApiHeaders');
|
|
12
12
|
|
|
13
13
|
exports.apiDelete = apiDelete;
|
|
14
14
|
exports.apiGet = apiGet;
|
|
@@ -6,6 +6,6 @@ import { getAuthToken } from '../auth/tokens.js';
|
|
|
6
6
|
import { headerNames, httpContentTypes } from '../constants/header-names.js';
|
|
7
7
|
import { httpMethods } from '../http/http-constants.js';
|
|
8
8
|
|
|
9
|
-
var __defProp=Object['defineProperty'],__name=(
|
|
9
|
+
var __defProp=Object['defineProperty'],__name=(_0x3ed8bd,_0x2e2b8)=>__defProp(_0x3ed8bd,'name',{'value':_0x2e2b8,'configurable':!![]});async function apiGet(_0x54aee0,_0x5ba0a5,_0x4c8f6b,_0x32a8b5){const _0x5f2d80=getApiPath(_0x54aee0,_0x5ba0a5,_0x4c8f6b);return apiBaseGet(_0x5f2d80,getApiHeaders(_0x32a8b5));}__name(apiGet,'apiGet');async function apiGetBlob(_0x8b3505,_0x17717f,_0x1fe237,_0x45b56b){const _0x17e64f=getApiPath(_0x8b3505,_0x17717f,_0x1fe237);return apiBaseGetBlob(_0x17e64f,getApiHeaders(_0x45b56b,!![]));}__name(apiGetBlob,'apiGetBlob');async function apiGetWithOData(_0x4e335c,_0x5913f5,_0x485e65){const _0x4ae7f6=getODataParams(_0x5913f5);return apiGet(_0x4e335c,_0x485e65,_0x4ae7f6);}__name(apiGetWithOData,'apiGetWithOData');async function apiPost(_0x1159ad,_0x12931f,_0x2cb5db){const _0x3896bd=getApiPath(_0x1159ad);return postBaseApi(_0x3896bd,_0x12931f,getApiHeaders(_0x2cb5db));}__name(apiPost,'apiPost');async function apiPostFile(_0x6c348c,_0x158fd7,_0x9e476f){const _0x1a1f4d=getApiPath(_0x6c348c),_0x2351f7=await fetch(_0x1a1f4d,{'method':httpMethods['post'],'body':_0x158fd7,'headers':getApiHeaders(_0x9e476f,!![])});return baseApiHandleResponse(_0x2351f7);}__name(apiPostFile,'apiPostFile');async function apiPut(_0x466342,_0x208eb7,_0x298c7b){const _0x59e086=getApiPath(_0x466342);return putBaseApi(_0x59e086,_0x208eb7,getApiHeaders(_0x298c7b));}__name(apiPut,'apiPut');async function apiDelete(_0x53b172,_0x3969f6,_0x1ca35c){const _0x29f840=getApiPath(_0x53b172,_0x3969f6);return deleteBaseApi(_0x29f840,getApiHeaders(_0x1ca35c));}__name(apiDelete,'apiDelete');function getApiHeaders(_0x2d2dc0,_0x4dac17=![]){const _0x118a69=_0x2d2dc0??new Headers(),_0x2a595f=getAuthToken();return (!_0x118a69['get'](headerNames['authHeaderName'])||_0x118a69['get'](headerNames['authHeaderName'])==='')&&_0x2a595f&&_0x118a69['set'](headerNames['authHeaderName'],headerNames['authHeaderValuePrefix']+_0x2a595f),!_0x4dac17&&!_0x118a69['get'](httpContentTypes['contentTypeHeaderName'])&&_0x118a69['set'](httpContentTypes['contentTypeHeaderName'],httpContentTypes['contentTypeHeaderValue']),_0x118a69;}__name(getApiHeaders,'getApiHeaders');
|
|
10
10
|
|
|
11
11
|
export { apiDelete, apiGet, apiGetBlob, apiGetWithOData, apiPost, apiPostFile, apiPut };
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
4
|
var resourceNames = require('../resources/resource-names.cjs.js');
|
|
5
|
-
var
|
|
5
|
+
var _0x20c19a = require('path');
|
|
6
6
|
|
|
7
|
-
const hint=resourceNames.resourceNames['hint']['toLowerCase'](),subscription=resourceNames.resourceNames['subscription']['toLowerCase'](),payment=resourceNames.resourceNames['payment']['toLowerCase']();const apiPathNames={'hint':hint,'meta':'meta','uiMetas':'uimetas','uiMeta':'uimeta','login':'account/login','token':'connect/token','logout':'account/logout','getOne':
|
|
7
|
+
const hint=resourceNames.resourceNames['hint']['toLowerCase'](),subscription=resourceNames.resourceNames['subscription']['toLowerCase'](),payment=resourceNames.resourceNames['payment']['toLowerCase']();const apiPathNames={'hint':hint,'meta':'meta','uiMetas':'uimetas','uiMeta':'uimeta','login':'account/login','token':'connect/token','logout':'account/logout','getOne':_0x20c19a.join(hint,'getone'),'user':'user','preLoad':'preload','userPermission':'user-permission','otherUser':'other-user','person':'person','friend':'friend','relation':'relation','log':'log','version':'version','markdownRender':'markdown/render','forgotPassword':'password/forgot-password','resetPassword':'password/reset-password','editPassword':'password/edit-password','payment':payment,'paymentVerifyFail':_0x20c19a.join(payment,'verify-fail'),'paymentVerifySuccess':_0x20c19a.join(payment,'verify-success'),'paymentMethod':_0x20c19a.join(payment,'method'),'subscription':subscription,'cancelSubscription':_0x20c19a.join(subscription,'cancel'),'updateSubscription':_0x20c19a.join(subscription,'update'),'createSubscription':_0x20c19a.join(subscription,'create'),'paymentPlan':'paymentplan','feature':'feature','paymentPlanFeature':'paymentplanfeature','markdown':'markdown','searchResult':'search-result','searchableResource':'searchable-resources','search':'search','blob':'blob','statusBoard':'statusboard','aiScan':'lm/ai-scan','changeWorkspace':'workspace/change','visibleWorkspace':'visible-workspace','test':'test','testData':'test/data'};
|
|
8
8
|
|
|
9
9
|
exports.apiPathNames = apiPathNames;
|
|
@@ -4,6 +4,6 @@
|
|
|
4
4
|
var urls = require('../http/url/urls.cjs.js');
|
|
5
5
|
var paths = require('../routing/paths.cjs.js');
|
|
6
6
|
|
|
7
|
-
var __defProp=Object['defineProperty'],__name=(
|
|
7
|
+
var __defProp=Object['defineProperty'],__name=(_0x596bbf,_0x1ac308)=>__defProp(_0x596bbf,'name',{'value':_0x1ac308,'configurable':!![]});const apiPrefix='api';function getApiPath(_0x557dbc,_0x58f435,_0x5be9c3){let _0x46197b=urls.combineEndpointPath(apiPrefix,_0x557dbc);return _0x58f435&&(_0x46197b=urls.combineEndpointPath(_0x46197b,_0x58f435)),_0x46197b=paths.addQueryParamsToPath(_0x46197b,_0x5be9c3),new URL(_0x46197b,getBaseUrl())['href'];}__name(getApiPath,'getApiPath');function getBaseUrl(){return location['protocol']+'//'+location['hostname']+':'+location['port']+'/';}__name(getBaseUrl,'getBaseUrl');
|
|
8
8
|
|
|
9
9
|
exports.getApiPath = getApiPath;
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
import { combineEndpointPath } from '../http/url/urls.js';
|
|
3
3
|
import { addQueryParamsToPath } from '../routing/paths.js';
|
|
4
4
|
|
|
5
|
-
var __defProp=Object['defineProperty'],__name=(
|
|
5
|
+
var __defProp=Object['defineProperty'],__name=(_0x596bbf,_0x1ac308)=>__defProp(_0x596bbf,'name',{'value':_0x1ac308,'configurable':!![]});const apiPrefix='api';function getApiPath(_0x557dbc,_0x58f435,_0x5be9c3){let _0x46197b=combineEndpointPath(apiPrefix,_0x557dbc);return _0x58f435&&(_0x46197b=combineEndpointPath(_0x46197b,_0x58f435)),_0x46197b=addQueryParamsToPath(_0x46197b,_0x5be9c3),new URL(_0x46197b,getBaseUrl())['href'];}__name(getApiPath,'getApiPath');function getBaseUrl(){return location['protocol']+'//'+location['hostname']+':'+location['port']+'/';}__name(getBaseUrl,'getBaseUrl');
|
|
6
6
|
|
|
7
7
|
export { getApiPath };
|