@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.
Files changed (159) hide show
  1. package/base-repo/app-constants/alias-symbols.cjs.js +1 -1
  2. package/base-repo/app-constants/alias-symbols.js +1 -1
  3. package/base-repo/app-constants/aliases.cjs.js +1 -1
  4. package/base-repo/app-constants/aliases.js +1 -1
  5. package/base-repo/app-constants/project-paths.cjs.js +1 -1
  6. package/base-repo/app-constants/project-paths.js +1 -1
  7. package/base-repo/constants/create-app-constants.cjs.js +1 -1
  8. package/base-repo/constants/create-app-constants.js +2 -2
  9. package/cli/bin/create.ts +19 -15
  10. package/cli/configs/drizzle-cli-config.ts +3 -2
  11. package/cli/configs/next-cli-config.ts +78 -0
  12. package/cli/configs/playwright-cli-config.ts +1 -0
  13. package/cli/configs/tsconfig.cli.json +0 -2
  14. package/cli/next.config.js +2 -72
  15. package/cli/npm-commands/gen-meta.ts +2 -2
  16. package/cli/npm-commands/migrate-db.ts +2 -2
  17. package/cli/npm-commands/seed-db.ts +2 -2
  18. package/cli/package-template.json +3 -4
  19. package/cli/server.ts +4 -5
  20. package/cli/src/app/api/v1/(f)/search-result/route.ts +3 -0
  21. package/cli/src/app/api/v1/(f)/searchable-resources/route.ts +3 -0
  22. package/cli/src/app/f/(signed-in)/layout.tsx +5 -0
  23. package/cli/src/app/f/api-docs/page.tsx +15 -0
  24. package/cli/src/app/layout.tsx +2 -11
  25. package/cli/test/global-setup.ts +2 -24
  26. package/cli/tsconfig.json +2 -15
  27. package/cli/tsconfig.server.json +0 -3
  28. package/fd-toolbox/api/api-client.cjs.js +1 -1
  29. package/fd-toolbox/api/api-client.js +1 -1
  30. package/fd-toolbox/api/api-path-names.cjs.js +2 -2
  31. package/fd-toolbox/api/api-path-names.js +1 -1
  32. package/fd-toolbox/api/api-paths.cjs.js +1 -1
  33. package/fd-toolbox/api/api-paths.js +1 -1
  34. package/fd-toolbox/api/base-api.cjs.js +1 -1
  35. package/fd-toolbox/api/base-api.js +1 -1
  36. package/fd-toolbox/auth/login-states.cjs.js +1 -1
  37. package/fd-toolbox/auth/login-states.js +1 -1
  38. package/fd-toolbox/auth/session-storage.cjs.js +1 -1
  39. package/fd-toolbox/auth/session-storage.js +1 -1
  40. package/fd-toolbox/auth/tokens.cjs.js +1 -1
  41. package/fd-toolbox/auth/tokens.js +1 -1
  42. package/fd-toolbox/constants/constants.cjs.js +1 -1
  43. package/fd-toolbox/constants/constants.js +1 -1
  44. package/fd-toolbox/enums/enums.cjs.js +1 -1
  45. package/fd-toolbox/enums/enums.js +1 -1
  46. package/fd-toolbox/errors/error-handler.cjs.js +1 -1
  47. package/fd-toolbox/errors/error-handler.js +1 -1
  48. package/fd-toolbox/errors/errors.cjs.js +1 -1
  49. package/fd-toolbox/errors/errors.js +1 -1
  50. package/fd-toolbox/errors/problem-details.cjs.js +1 -1
  51. package/fd-toolbox/errors/problem-details.js +1 -1
  52. package/fd-toolbox/functions/value-checking-functions.cjs.js +1 -1
  53. package/fd-toolbox/functions/value-checking-functions.js +1 -1
  54. package/fd-toolbox/http/url/urls.cjs.js +1 -1
  55. package/fd-toolbox/http/url/urls.js +1 -1
  56. package/fd-toolbox/infra/env-config.cjs.js +2 -2
  57. package/fd-toolbox/infra/env-config.js +2 -2
  58. package/fd-toolbox/infra/env-functions.cjs.js +1 -1
  59. package/fd-toolbox/infra/env-functions.js +1 -1
  60. package/fd-toolbox/infra/env-schema.cjs.js +2 -2
  61. package/fd-toolbox/infra/env-schema.js +2 -2
  62. package/fd-toolbox/infra/env-store.cjs.js +1 -1
  63. package/fd-toolbox/infra/env-store.js +1 -1
  64. package/fd-toolbox/infra/toolbox-env-setting-keys.cjs.js +1 -1
  65. package/fd-toolbox/infra/toolbox-env-setting-keys.js +1 -1
  66. package/fd-toolbox/lib/environments.cjs.js +1 -1
  67. package/fd-toolbox/lib/environments.js +1 -1
  68. package/fd-toolbox/lib/utils.cjs.js +1 -1
  69. package/fd-toolbox/lib/utils.js +1 -1
  70. package/fd-toolbox/local-storage/local-storage.cjs.js +1 -1
  71. package/fd-toolbox/local-storage/local-storage.js +1 -1
  72. package/fd-toolbox/logging/loggers.cjs.js +1 -1
  73. package/fd-toolbox/logging/loggers.js +1 -1
  74. package/fd-toolbox/notifications.cjs.js +2 -2
  75. package/fd-toolbox/notifications.js +2 -2
  76. package/fd-toolbox/odata/odata-constants.cjs.js +1 -1
  77. package/fd-toolbox/odata/odata-constants.js +1 -1
  78. package/fd-toolbox/odata/odatas.cjs.js +1 -1
  79. package/fd-toolbox/odata/odatas.js +1 -1
  80. package/fd-toolbox/odata/services/odata-filters.cjs.js +1 -1
  81. package/fd-toolbox/odata/services/odata-filters.js +1 -1
  82. package/fd-toolbox/paths/paths-names.cjs.js +2 -2
  83. package/fd-toolbox/paths/paths-names.js +1 -1
  84. package/fd-toolbox/routing/login-routers.cjs.js +1 -1
  85. package/fd-toolbox/routing/login-routers.js +1 -1
  86. package/fd-toolbox/routing/paths.cjs.js +1 -1
  87. package/fd-toolbox/routing/paths.js +1 -1
  88. package/fd-toolbox/routing/routes.cjs.js +1 -1
  89. package/fd-toolbox/routing/routes.js +1 -1
  90. package/fd-toolbox/strings/strings-constants.cjs.js +1 -1
  91. package/fd-toolbox/strings/strings-constants.js +1 -1
  92. package/fd-toolbox/strings/strings.cjs.js +1 -1
  93. package/fd-toolbox/strings/strings.js +1 -1
  94. package/fd-toolbox/types/ensure-type.cjs.js +1 -1
  95. package/fd-toolbox/types/ensure-type.js +1 -1
  96. package/fd-toolbox-core/core/name-of.cjs.js +1 -1
  97. package/fd-toolbox-core/core/name-of.js +1 -1
  98. package/fd-toolbox-core/types/resource-with-id.cjs.js +1 -1
  99. package/fd-toolbox-core/types/resource-with-id.js +1 -1
  100. package/level2/cli/bin/index.cjs.js +1 -1
  101. package/level2/cli/bin/index.js +1 -1
  102. package/level2/cli/create/bin/create.cjs.js +4 -4
  103. package/level2/cli/create/bin/create.js +3 -3
  104. package/level2/npm-commands/build-npm/path.cjs.js +2 -1
  105. package/level2/npm-commands/build-npm/path.js +2 -2
  106. package/package.json +10 -9
  107. package/cli/public/images/shipment/076aecd1-7fb8-5d89-baa9-e48e61048525.pdf +0 -0
  108. package/cli/public/images/shipment/21884fb7-6e39-4f7b-9a49-0f46d527f50c.pdf +0 -0
  109. package/cli/public/images/shipment/e6367904-081e-479b-a8c5-5972057a261e.pdf +0 -0
  110. package/cli/public/images/store/00000000-0000-0000-0000-000000000000.webp +0 -0
  111. package/cli/public/images/test/photo-1460925895917-afdab827c52f.jpg +0 -0
  112. package/cli/public/images/test/photo-1499636136210-6f4ee915583e.jpg +0 -0
  113. package/cli/public/images/test/photo-1519681393784-d120267933ba.jpg +0 -0
  114. package/cli/src/app/api/v1/searchable-resources/route.ts +0 -11
  115. package/cli/src/app/api/v1/searchresult/route.ts +0 -35
  116. package/cli/src/app/f/(private)/layout.tsx +0 -5
  117. package/cli/src/app/f/defaultRedirect/page.tsx +0 -9
  118. /package/cli/src/app/api/v1/{[resourceName] → (f)/[resourceName]}/[id]/route.ts +0 -0
  119. /package/cli/src/app/api/v1/{[resourceName] → (f)/[resourceName]}/route.ts +0 -0
  120. /package/cli/src/app/api/v1/{[resourceName] → (f)/[resourceName]}/upsert/route.ts +0 -0
  121. /package/cli/src/app/api/v1/{blob → (f)/blob}/route.ts +0 -0
  122. /package/cli/src/app/api/v1/{log → (f)/log}/route.ts +0 -0
  123. /package/cli/src/app/api/v1/{otheruser → (f)/other-user}/[id]/route.ts +0 -0
  124. /package/cli/src/app/api/v1/{otheruser → (f)/other-user}/route.ts +0 -0
  125. /package/cli/src/app/api/v1/{password/forgotpassword → (f)/password/forgot-password}/route.ts +0 -0
  126. /package/cli/src/app/api/v1/{password/resetpassword → (f)/password/reset-password}/route.ts +0 -0
  127. /package/cli/src/app/api/v1/{payment → (f)/payment}/method/route.ts +0 -0
  128. /package/cli/src/app/api/v1/{payment → (f)/payment}/route.ts +0 -0
  129. /package/cli/src/app/api/v1/{payment → (f)/payment}/verify-fail/route.ts +0 -0
  130. /package/cli/src/app/api/v1/{payment → (f)/payment}/verify-success/route.ts +0 -0
  131. /package/cli/src/app/api/v1/{preload → (f)/preload}/route.ts +0 -0
  132. /package/cli/src/app/api/v1/{sign-in → (f)/sign-in}/route.ts +0 -0
  133. /package/cli/src/app/api/v1/{sign-out → (f)/sign-out}/route.ts +0 -0
  134. /package/cli/src/app/api/v1/{sign-up → (f)/sign-up}/route.ts +0 -0
  135. /package/cli/src/app/api/v1/{subscription → (f)/subscription}/cancel/route.ts +0 -0
  136. /package/cli/src/app/api/v1/{subscription → (f)/subscription}/create/route.ts +0 -0
  137. /package/cli/src/app/api/v1/{subscription → (f)/subscription}/update/route.ts +0 -0
  138. /package/cli/src/app/api/v1/{uimeta → (f)/uimeta}/route.ts +0 -0
  139. /package/cli/src/app/api/v1/{uimetas → (f)/uimetas}/route.ts +0 -0
  140. /package/cli/src/app/api/v1/{userfeature → (f)/user-feature}/isenabled/route.ts +0 -0
  141. /package/cli/src/app/api/v1/{userpermission → (f)/user-permission}/route.ts +0 -0
  142. /package/cli/src/app/api/v1/{visible-workspace → (f)/visible-workspace}/route.ts +0 -0
  143. /package/cli/src/app/api/v1/{workspace → (f)/workspace}/change/route.ts +0 -0
  144. /package/cli/src/app/f/{editpassword → (not-signed-in)/edit-password}/page.tsx +0 -0
  145. /package/cli/src/app/f/{forgotpassword → (not-signed-in)/forgot-password}/page.tsx +0 -0
  146. /package/cli/src/app/f/{resetpassword → (not-signed-in)/reset-password}/page.tsx +0 -0
  147. /package/cli/src/app/f/{sign-in → (not-signed-in)/sign-in}/microsoft/page.tsx +0 -0
  148. /package/cli/src/app/f/{sign-in → (not-signed-in)/sign-in}/page.tsx +0 -0
  149. /package/cli/src/app/f/{sign-up → (not-signed-in)/sign-up}/page.tsx +0 -0
  150. /package/cli/src/app/f/{(private) → (signed-in)}/dashboard/page.tsx +0 -0
  151. /package/cli/src/app/f/{(private) → (signed-in)}/dynamiclayout/page.tsx +0 -0
  152. /package/cli/src/app/f/{(private) → (signed-in)}/edituser/[id]/page.tsx +0 -0
  153. /package/cli/src/app/f/{(private) → (signed-in)}/edituser/page.tsx +0 -0
  154. /package/cli/src/app/f/{(private) → (signed-in)}/lm/page.tsx +0 -0
  155. /package/cli/src/app/f/{(private) → (signed-in)}/payment-plans/page.tsx +0 -0
  156. /package/cli/src/app/f/{(private) → (signed-in)}/preload/page.tsx +0 -0
  157. /package/cli/src/app/f/{(private) → (signed-in)}/statusboard/page.tsx +0 -0
  158. /package/cli/src/app/f/{(private) → (signed-in)}/userlist/page.tsx +0 -0
  159. /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'](([_0xce587b,_0x229eb3])=>[_0xce587b+'/*',[_0x229eb3+'/*']]));
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'](([_0xce587b,_0x229eb3])=>[_0xce587b+'/*',[_0x229eb3+'/*']]));
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'],'apiV1':folders['src']+'/'+folders['app']+'/'+folders['api']+'/'+'v1','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']+'/'+'server','toolsNpmCommands':folders['tools']+'/'+folders['npmCommands'],'tools':folders['tools'],'saasKitCliBin':'level2/cli/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':'cli/constants','cliConfigs':'cli/configs'};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']+'/','packagesTools':folders['packages']+'/'+folders['level2']+'/'+folders['tools']+'/','packagesClient':folders['packages']+'/'+folders['level2']+'/'+folders['client']+'/','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']+'/','packagesDocsContent':folders['packages']+'/'+folders['docs']+'/'+folders['content']+'/','apiResponses':folders['packages']+'/'+folders['level2']+'/'+folders['meta']+'/'+serverWeb+'/'+'responses/','apiErrors':folders['packages']+'/'+folders['fdToolbox']+'/'+serverWeb+'/'+'errors/'};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']+'/ci/jobs/lint','buildAndTestJob':aliasSymbols.aliases['infra']+'/ci/jobs/build-and-test','saasKitTestBuildAndTestJob':aliasSymbols.aliases['infra']+'/ci/jobs/saas-kit-test-build-and-test','createSaasKitAppTestJob':aliasSymbols.aliases['infra']+'/ci/jobs/create-saas-kit-app-test','manualCleanupJob':aliasSymbols.aliases['infra']+'/ci/jobs/manual-cleanup','cleanupScript':aliasSymbols.aliases['infra']+'/ci/setup/cleanup','setupScript':aliasSymbols.aliases['infra']+'/ci/setup/setup'};const globPatterns={'tsTsx':'**/'+'*.{ts,tsx}','jsTsJsxTsx':'**/'+'*.{js,ts,jsx,tsx}'};
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'],'apiV1':folders['src']+'/'+folders['app']+'/'+folders['api']+'/'+'v1','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']+'/'+'server','toolsNpmCommands':folders['tools']+'/'+folders['npmCommands'],'tools':folders['tools'],'saasKitCliBin':'level2/cli/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':'cli/constants','cliConfigs':'cli/configs'};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']+'/','packagesTools':folders['packages']+'/'+folders['level2']+'/'+folders['tools']+'/','packagesClient':folders['packages']+'/'+folders['level2']+'/'+folders['client']+'/','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']+'/','packagesDocsContent':folders['packages']+'/'+folders['docs']+'/'+folders['content']+'/','apiResponses':folders['packages']+'/'+folders['level2']+'/'+folders['meta']+'/'+serverWeb+'/'+'responses/','apiErrors':folders['packages']+'/'+folders['fdToolbox']+'/'+serverWeb+'/'+'errors/'};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']+'/ci/jobs/lint','buildAndTestJob':aliases['infra']+'/ci/jobs/build-and-test','saasKitTestBuildAndTestJob':aliases['infra']+'/ci/jobs/saas-kit-test-build-and-test','createSaasKitAppTestJob':aliases['infra']+'/ci/jobs/create-saas-kit-app-test','manualCleanupJob':aliases['infra']+'/ci/jobs/manual-cleanup','cleanupScript':aliases['infra']+'/ci/setup/cleanup','setupScript':aliases['infra']+'/ci/setup/setup'};const globPatterns={'tsTsx':'**/'+'*.{ts,tsx}','jsTsJsxTsx':'**/'+'*.{js,ts,jsx,tsx}'};
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=[projectPaths.folders['server']];const toolsFoldersToReplace={[projectPaths.nonRootProjectPaths['toolsNpmCommands']]:{[projectPaths.nonRootProjectPaths['tools']]:''}};
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 { folders, nonRootProjectPaths } from '../app-constants/project-paths.js';
2
+ import { nonRootProjectPaths } from '../app-constants/project-paths.js';
3
3
 
4
- const additionalFoldersToCreate=[folders['server']];const toolsFoldersToReplace={[nonRootProjectPaths['toolsNpmCommands']]:{[nonRootProjectPaths['tools']]:''}};
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}${folders.cli}${"/"}${files.envExample}`);
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}${"/"}${folders.constants}`,
64
- `${folders.cli}${"/"}${files.packageTemplate}`,
65
- `${folders.cli}${"/"}${files.envExample}`,
66
- `${folders.cli}${"/"}${folders.bin}`,
67
- `${folders.cli}${"/"}${folders.configs}`,
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
- if (fs.existsSync(tsConfigPath)) {
120
- fs.rmSync(tsConfigPath);
121
- logInfoRaw("Removed default next.config.ts");
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}${"/"}${files.packageTemplate}`);
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}${"/"}${file}`;
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}${"/"}${files.layout}`);
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 { metaEnvSettingKeys } from "@meta/infra/meta-env-setting-keys";
4
+ import { toolboxEnvSettingKeys } from "@fd-toolbox/infra/toolbox-env-setting-keys";
5
5
 
6
- const connectionString = getRequiredStringEnvSetting(metaEnvSettingKeys.databaseConnection);
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
+ };
@@ -5,6 +5,7 @@ getDotenvConfig();
5
5
 
6
6
  const baseUrl = "http://localhost:8080/";
7
7
 
8
+ /** To do: add docs */
8
9
  export const playwrightConfig = defineConfig({
9
10
  timeout: 120000,
10
11
  testDir: "test/",
@@ -29,8 +29,6 @@
29
29
  "noImplicitOverride": true,
30
30
  "useUnknownInCatchVariables": true,
31
31
  "noEmit": false,
32
- "declaration": true,
33
- "declarationDir": "./build/package/types",
34
32
  "outDir": "./build/package/types-output",
35
33
  "noEmitOnError": true
36
34
  }
@@ -1,73 +1,3 @@
1
- import { execSync } from "child_process";
2
- import { folders } from "@fernir2/saas-kit";
1
+ import { nextConfig } from "@fernir2/saas-kit";
3
2
 
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
- 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 { combineMeta } from "@fernir2/saas-kit";
1
+ import { generateCombinedMeta } from "@fernir2/saas-kit";
2
2
 
3
- combineMeta();
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
- if (err instanceof Error) console.error("Error running migrations", err);
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
- if (err instanceof Error) console.error("Error seeding database", err);
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
- initializeInternalMetaCache,
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.fdPort) ?? 3000;
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
- const parsedUrl = parse(req.url!, true);
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 initializeInternalMetaCache();
37
+ await initializeResourceMetaCache();
39
38
  }
40
39
 
41
40
  run();
@@ -0,0 +1,3 @@
1
+ import { getSearchResultRoute } from "@server/search/search-result-api";
2
+
3
+ export const GET = getSearchResultRoute;
@@ -0,0 +1,3 @@
1
+ import { getSearchableResourcesRoute } from "@meta/server/resources/searchable-resources-api";
2
+
3
+ export const GET = getSearchableResourcesRoute;
@@ -0,0 +1,5 @@
1
+ import { SignedInLayout } from "@fd-app-toolbox/server/layout/signed-in-layout/SignedInLayout";
2
+
3
+ export default async function Layout({ children }: { children: React.ReactNode }) {
4
+ return <SignedInLayout>{children}</SignedInLayout>;
5
+ }
@@ -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;