@fernir2/saas-kit-cli 0.1.39 → 0.1.41

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 (285) hide show
  1. package/base-repo/app-constants/alias-symbols.js +2 -2
  2. package/base-repo/app-constants/aliases.js +3 -1
  3. package/base-repo/app-constants/app-packages-names.js +4 -0
  4. package/base-repo/app-constants/command-names.js +4 -0
  5. package/base-repo/app-constants/internal-system-constants.js +9 -0
  6. package/base-repo/app-constants/project-paths.js +5 -3
  7. package/base-repo/constants/basic-types.js +4 -0
  8. package/base-repo/constants/ci-constants.js +7 -0
  9. package/base-repo/constants/http-constants.js +4 -0
  10. package/base-repo/constants/http-methods.js +6 -0
  11. package/base-repo/constants/internal-common-strings.js +4 -0
  12. package/base-repo/constants/internal-extensions.js +6 -0
  13. package/base-repo/constants/packages.js +1 -1
  14. package/base-repo/constants/push-statuses.js +4 -0
  15. package/base-repo/constants/strings-constants.js +4 -0
  16. package/base-repo/constants/tools-constants.js +6 -0
  17. package/base-repo/constants/type-string-values.js +4 -0
  18. package/base-repo/process.js +4 -0
  19. package/cli/.env.example +8 -61
  20. package/cli/.prettierignore +15 -0
  21. package/cli/.prettierrc.json +8 -0
  22. package/cli/README.md +3 -3
  23. package/cli/bin/create.ts +630 -450
  24. package/cli/configs/drizzle-cli-config.ts +16 -15
  25. package/cli/configs/next-cli-config.ts +44 -78
  26. package/cli/configs/playwright-cli-config.ts +45 -35
  27. package/cli/configs/tsconfig.cli.json +35 -35
  28. package/cli/configs/tsconfig.server.json +13 -13
  29. package/cli/drizzle.config.ts +6 -6
  30. package/cli/next.config.js +5 -3
  31. package/cli/npm-commands/gen-meta.ts +9 -3
  32. package/cli/npm-commands/gen-schema.ts +3 -3
  33. package/cli/npm-commands/migrate-db.ts +17 -15
  34. package/cli/npm-commands/seed-db.ts +17 -15
  35. package/cli/package-template.json +54 -60
  36. package/cli/playwright.config.ts +6 -6
  37. package/cli/postcss.config.mjs +7 -7
  38. package/cli/public/handle.svg +23 -0
  39. package/cli/public/images/login-image-dark.webp +0 -0
  40. package/cli/public/images/login-image.webp +0 -0
  41. package/cli/public/images/logo.webp +0 -0
  42. package/cli/public/images/no-image.webp +0 -0
  43. package/cli/public/images/profile.webp +0 -0
  44. package/cli/public/images/search-not-found-result.webp +0 -0
  45. package/cli/public/logo.svg +1 -0
  46. package/cli/server.ts +48 -40
  47. package/cli/src/app/api/v1/(f)/[resourceName]/[id]/route.ts +18 -11
  48. package/cli/src/app/api/v1/(f)/[resourceName]/route.ts +23 -14
  49. package/cli/src/app/api/v1/(f)/[resourceName]/upsert/route.ts +6 -3
  50. package/cli/src/app/api/v1/(f)/blob/route.ts +14 -7
  51. package/cli/src/app/api/v1/(f)/log/route.ts +14 -7
  52. package/cli/src/app/api/v1/(f)/markdown/route.ts +6 -0
  53. package/cli/src/app/api/v1/(f)/other-user/[id]/route.ts +23 -14
  54. package/cli/src/app/api/v1/(f)/other-user/route.ts +14 -7
  55. package/cli/src/app/api/v1/(f)/password/forgot-password/route.ts +6 -3
  56. package/cli/src/app/api/v1/(f)/password/reset-password/route.ts +6 -3
  57. package/cli/src/app/api/v1/(f)/payment/method/route.ts +9 -4
  58. package/cli/src/app/api/v1/(f)/payment/route.ts +6 -3
  59. package/cli/src/app/api/v1/(f)/payment/verify-fail/route.ts +6 -3
  60. package/cli/src/app/api/v1/(f)/payment/verify-success/route.ts +6 -3
  61. package/cli/src/app/api/v1/(f)/search-result/route.ts +6 -3
  62. package/cli/src/app/api/v1/(f)/searchable-resources/route.ts +6 -3
  63. package/cli/src/app/api/v1/(f)/sign-in/route.ts +6 -3
  64. package/cli/src/app/api/v1/(f)/sign-out/route.ts +6 -3
  65. package/cli/src/app/api/v1/(f)/sign-up/route.ts +6 -3
  66. package/cli/src/app/api/v1/(f)/subscription/cancel/route.ts +6 -3
  67. package/cli/src/app/api/v1/(f)/subscription/create/route.ts +6 -3
  68. package/cli/src/app/api/v1/(f)/subscription/update/route.ts +6 -3
  69. package/cli/src/app/api/v1/(f)/uimeta/route.ts +6 -3
  70. package/cli/src/app/api/v1/(f)/uimetas/route.ts +6 -3
  71. package/cli/src/app/api/v1/(f)/user-feature/isenabled/route.ts +6 -3
  72. package/cli/src/app/api/v1/(f)/user-permission/route.ts +6 -3
  73. package/cli/src/app/api/v1/(f)/visible-workspace/route.ts +10 -5
  74. package/cli/src/app/api/v1/(f)/workspace/change/route.ts +10 -5
  75. package/cli/src/app/f/(not-signed-in)/edit-password/page.tsx +8 -8
  76. package/cli/src/app/f/(not-signed-in)/forgot-password/page.tsx +13 -13
  77. package/cli/src/app/f/(not-signed-in)/reset-password/page.tsx +11 -11
  78. package/cli/src/app/f/(not-signed-in)/sign-in/microsoft/page.tsx +8 -8
  79. package/cli/src/app/f/(not-signed-in)/sign-in/page.tsx +13 -13
  80. package/cli/src/app/f/(not-signed-in)/sign-up/page.tsx +13 -13
  81. package/cli/src/app/f/(signed-in)/dashboard/page.tsx +8 -8
  82. package/cli/src/app/f/(signed-in)/dynamiclayout/page.tsx +8 -8
  83. package/cli/src/app/f/(signed-in)/edituser/[id]/page.tsx +8 -8
  84. package/cli/src/app/f/(signed-in)/edituser/page.tsx +8 -8
  85. package/cli/src/app/f/(signed-in)/layout.tsx +5 -5
  86. package/cli/src/app/f/(signed-in)/payment-plans/page.tsx +8 -8
  87. package/cli/src/app/f/(signed-in)/statusboard/page.tsx +8 -8
  88. package/cli/src/app/f/(signed-in)/userlist/page.tsx +8 -8
  89. package/cli/src/app/f/(signed-in)/view/page.tsx +27 -9
  90. package/cli/src/app/f/api-docs/page.tsx +15 -15
  91. package/cli/src/app/globals.css +1 -1
  92. package/cli/src/app/http-wrappers.ts +19 -0
  93. package/cli/src/app/init-saas-kit.ts +12 -0
  94. package/cli/src/app/layout.tsx +43 -37
  95. package/cli/src/app/page.tsx +9 -9
  96. package/cli/src/app/styles/common.css +75 -71
  97. package/cli/src/app/styles/rich-text-editor.css +130 -130
  98. package/cli/templates/.env-template +8 -0
  99. package/cli/templates/gitignore-template +54 -0
  100. package/cli/test/custom-test.ts +20 -0
  101. package/cli/test/global-setup.ts +7 -3
  102. package/cli/test/global-teardown.ts +7 -0
  103. package/cli/tsconfig.json +16 -15
  104. package/cli/tsconfig.lint.json +5 -0
  105. package/cli/tsconfig.server.json +15 -14
  106. package/fd-toolbox/api/api-client.js +3 -3
  107. package/fd-toolbox/api/api-path-names.js +4 -1
  108. package/fd-toolbox/api/api-paths.js +2 -1
  109. package/fd-toolbox/api/base-api.js +5 -4
  110. package/fd-toolbox/auth/{login-states.js → internal-login-states.js} +3 -3
  111. package/fd-toolbox/auth/session-storage.js +1 -1
  112. package/fd-toolbox/auth/tokens.js +1 -1
  113. package/fd-toolbox/constants/common-user-fields.js +7 -0
  114. package/fd-toolbox/constants/constants.js +2 -2
  115. package/fd-toolbox/constants/environment-constants.js +4 -1
  116. package/fd-toolbox/constants/header-names.js +1 -1
  117. package/fd-toolbox/constants/meta-query-params.js +4 -1
  118. package/fd-toolbox/constants/odata-query-params.js +7 -0
  119. package/fd-toolbox/constants/public-files.js +5 -3
  120. package/fd-toolbox/constants/resource-folders.js +4 -0
  121. package/fd-toolbox/constants/toolbox-error-messages-constants.js +4 -0
  122. package/fd-toolbox/enums/enums.js +5 -2
  123. package/fd-toolbox/errors/error-handler.js +2 -2
  124. package/fd-toolbox/errors/error-statuses.js +4 -1
  125. package/fd-toolbox/errors/errors.js +1 -1
  126. package/fd-toolbox/errors/problem-details.js +4 -2
  127. package/fd-toolbox/functions/value-checking-functions.js +5 -3
  128. package/fd-toolbox/http/url/urls.js +4 -3
  129. package/fd-toolbox/infra/env-config.js +2 -2
  130. package/fd-toolbox/infra/env-functions.js +6 -4
  131. package/fd-toolbox/infra/env-schema.js +2 -4
  132. package/fd-toolbox/infra/toolbox-env-setting-keys.js +1 -1
  133. package/fd-toolbox/lib/environments.js +4 -3
  134. package/fd-toolbox/lib/utils.js +5 -2
  135. package/fd-toolbox/local-storage/local-storage.js +1 -1
  136. package/fd-toolbox/logging/loggers.js +2 -2
  137. package/fd-toolbox/notifications.js +2 -2
  138. package/fd-toolbox/odata/odata-filter-constants.js +4 -0
  139. package/fd-toolbox/odata/odata-formatting/odata-filters.js +9 -0
  140. package/fd-toolbox/odata/odata.js +12 -0
  141. package/fd-toolbox/paths/paths-names.js +1 -1
  142. package/fd-toolbox/redirect/redirect-functions.js +8 -0
  143. package/fd-toolbox/resources/resource-names.js +1 -1
  144. package/fd-toolbox/routing/login-routers.js +2 -1
  145. package/fd-toolbox/routing/paths.js +1 -1
  146. package/fd-toolbox/routing/routers.js +9 -0
  147. package/fd-toolbox/routing/routes.js +3 -2
  148. package/fd-toolbox/server/collections/single-funcs.js +8 -0
  149. package/fd-toolbox/server/constants/api-routes-constants.js +4 -0
  150. package/fd-toolbox/server/errors/error-dtos.js +4 -0
  151. package/fd-toolbox/server/framework/index.js +8 -0
  152. package/fd-toolbox/server/logging/latest-logs-store.js +6 -0
  153. package/fd-toolbox/server/logging/log-dtos.js +6 -0
  154. package/fd-toolbox/server/logging/logger.js +9 -0
  155. package/fd-toolbox/server/web/response-messages.js +4 -0
  156. package/fd-toolbox/strings/strings.js +2 -2
  157. package/fd-toolbox/types/ensure-type.js +6 -2
  158. package/fd-toolbox/url/urls.js +4 -0
  159. package/fd-toolbox-core/constants/meta-constants.js +4 -2
  160. package/fd-toolbox-core/core/name-of.js +1 -1
  161. package/fd-toolbox-core/types/resource-with-id.js +3 -1
  162. package/level2/cli/bin/index.js +2 -1
  163. package/level2/cli/create/bin/create.js +18 -10
  164. package/level2/npm-commands/build-npm/cli-contents.js +1 -1
  165. package/level2/npm-commands/build-npm/paths.js +6 -0
  166. package/package.json +48 -55
  167. package/base-repo/app-constants/alias-symbols.cjs.js +0 -6
  168. package/base-repo/app-constants/aliases.cjs.js +0 -8
  169. package/base-repo/app-constants/project-paths.cjs.js +0 -17
  170. package/base-repo/constants/create-app-constants.cjs.js +0 -9
  171. package/base-repo/constants/packages.cjs.js +0 -6
  172. package/base-repo/constants/packages.cjs2.js +0 -6
  173. package/base-repo/constants/packages2.js +0 -4
  174. package/cli/public/images/00000000-0000-0000-0000-000000000000.webp +0 -0
  175. package/cli/public/images/login-image-dark.jpg +0 -0
  176. package/cli/public/images/login-image.jpg +0 -0
  177. package/cli/public/images/no-image.png +0 -0
  178. package/cli/public/images/profile.png +0 -0
  179. package/cli/public/images/search-not-found-result.png +0 -0
  180. package/cli/public/images/toolbar-logo.png +0 -0
  181. package/cli/public/images/users/00000000-0000-0000-0000-000000000000.webp +0 -0
  182. package/cli/src/app/api/v1/(f)/preload/route.ts +0 -3
  183. package/cli/src/app/f/(signed-in)/lm/page.tsx +0 -8
  184. package/cli/src/app/f/(signed-in)/preload/page.tsx +0 -8
  185. package/cli/src/app/f/test/feed/page.tsx +0 -8
  186. package/cli/src/app/f/test/file-upload/page.tsx +0 -8
  187. package/cli/src/app/f/test/layout.tsx +0 -5
  188. package/cli/src/app/f/test/page.tsx +0 -8
  189. package/fd-toolbox/api/api-client.cjs.js +0 -19
  190. package/fd-toolbox/api/api-path-names.cjs.js +0 -9
  191. package/fd-toolbox/api/api-paths.cjs.js +0 -9
  192. package/fd-toolbox/api/base-api.cjs.js +0 -22
  193. package/fd-toolbox/auth/login-states.cjs.js +0 -18
  194. package/fd-toolbox/auth/session-storage.cjs.js +0 -12
  195. package/fd-toolbox/auth/tokens.cjs.js +0 -11
  196. package/fd-toolbox/constants/api-constants.cjs.js +0 -26
  197. package/fd-toolbox/constants/api-constants.js +0 -4
  198. package/fd-toolbox/constants/constants.cjs.js +0 -13
  199. package/fd-toolbox/constants/environment-constants.cjs.js +0 -7
  200. package/fd-toolbox/constants/extensions.cjs.js +0 -6
  201. package/fd-toolbox/constants/extensions.js +0 -4
  202. package/fd-toolbox/constants/header-names.cjs.js +0 -7
  203. package/fd-toolbox/constants/http-status-codes.cjs.js +0 -6
  204. package/fd-toolbox/constants/meta-query-params.cjs.js +0 -6
  205. package/fd-toolbox/constants/public-files.cjs.js +0 -14
  206. package/fd-toolbox/constants/representations.cjs.js +0 -6
  207. package/fd-toolbox/constants/representations.js +0 -4
  208. package/fd-toolbox/enums/enums.cjs.js +0 -26
  209. package/fd-toolbox/errors/error-handler.cjs.js +0 -10
  210. package/fd-toolbox/errors/error-statuses.cjs.js +0 -6
  211. package/fd-toolbox/errors/errors.cjs.js +0 -6
  212. package/fd-toolbox/errors/problem-details.cjs.js +0 -8
  213. package/fd-toolbox/functions/value-checking-functions.cjs.js +0 -10
  214. package/fd-toolbox/http/http-constants.cjs.js +0 -7
  215. package/fd-toolbox/http/http-constants.js +0 -4
  216. package/fd-toolbox/http/url/urls.cjs.js +0 -9
  217. package/fd-toolbox/infra/env-config.cjs.js +0 -8
  218. package/fd-toolbox/infra/env-functions.cjs.js +0 -16
  219. package/fd-toolbox/infra/env-schema.cjs.js +0 -12
  220. package/fd-toolbox/infra/env-setting-types.cjs.js +0 -6
  221. package/fd-toolbox/infra/env-setting-types.js +0 -4
  222. package/fd-toolbox/infra/env-store.cjs.js +0 -9
  223. package/fd-toolbox/infra/env-store.js +0 -7
  224. package/fd-toolbox/infra/toolbox-env-setting-keys.cjs.js +0 -6
  225. package/fd-toolbox/lib/environments.cjs.js +0 -25
  226. package/fd-toolbox/lib/utils.cjs.js +0 -29
  227. package/fd-toolbox/local-storage/local-storage.cjs.js +0 -12
  228. package/fd-toolbox/logging/loggers.cjs.js +0 -16
  229. package/fd-toolbox/logging/logging-constants.cjs.js +0 -6
  230. package/fd-toolbox/logging/logging-constants.js +0 -4
  231. package/fd-toolbox/notifications.cjs.js +0 -14
  232. package/fd-toolbox/odata/odata-constants.cjs.js +0 -11
  233. package/fd-toolbox/odata/odata-constants.js +0 -4
  234. package/fd-toolbox/odata/odata-enums.cjs.js +0 -8
  235. package/fd-toolbox/odata/odatas.cjs.js +0 -11
  236. package/fd-toolbox/odata/odatas.js +0 -9
  237. package/fd-toolbox/odata/services/odata-filters.cjs.js +0 -11
  238. package/fd-toolbox/odata/services/odata-filters.js +0 -9
  239. package/fd-toolbox/paths/paths-names.cjs.js +0 -9
  240. package/fd-toolbox/resources/resource-names.cjs.js +0 -6
  241. package/fd-toolbox/routing/login-routers.cjs.js +0 -10
  242. package/fd-toolbox/routing/paths.cjs.js +0 -6
  243. package/fd-toolbox/routing/routes.cjs.js +0 -14
  244. package/fd-toolbox/strings/strings-constants.cjs.js +0 -7
  245. package/fd-toolbox/strings/strings-constants.js +0 -4
  246. package/fd-toolbox/strings/strings.cjs.js +0 -10
  247. package/fd-toolbox/types/ensure-type.cjs.js +0 -22
  248. package/fd-toolbox-core/constants/meta-constants.cjs.js +0 -7
  249. package/fd-toolbox-core/constants/promises.cjs.js +0 -6
  250. package/fd-toolbox-core/core/name-of.cjs.js +0 -8
  251. package/fd-toolbox-core/enums/log-severities.cjs.js +0 -6
  252. package/fd-toolbox-core/types/resource-with-id.cjs.js +0 -9
  253. package/level2/cli/bin/index.cjs.js +0 -8
  254. package/level2/cli/create/bin/create.cjs.js +0 -42
  255. package/level2/npm-commands/build-npm/cli-contents.cjs.js +0 -9
  256. package/level2/npm-commands/build-npm/path.cjs.js +0 -13
  257. package/level2/npm-commands/build-npm/path.js +0 -6
  258. /package/cli/public/images/{companies → demo/companies}/00000000-0000-0000-0000-000000000000.webp +0 -0
  259. /package/cli/public/images/{companies → demo/companies}/004a196f-f9a7-49fc-9e05-606fffd0613c.webp +0 -0
  260. /package/cli/public/images/{companies → demo/companies}/497b26a6-3e91-4b27-8c24-f3b145fc6c7f.webp +0 -0
  261. /package/cli/public/images/{companies → demo/companies}/6cead29b-2572-4283-add6-f407b39d7135.webp +0 -0
  262. /package/cli/public/images/{companies → demo/companies}/71efdb77-4ecb-45e6-bc83-0fdff835c2e7.webp +0 -0
  263. /package/cli/public/images/{companies → demo/companies}/773602c8-a417-4afc-adb0-bb6856ac2970.webp +0 -0
  264. /package/cli/public/images/{companies → demo/companies}/9d09881a-cf60-438d-9edf-10f5864d4468.webp +0 -0
  265. /package/cli/public/images/{companies → demo/companies}/a1b2c3d4-e5f6-7890-1234-56789abcdef0.webp +0 -0
  266. /package/cli/public/images/{companies → demo/companies}/b04d7c5e-18de-4f44-b923-5bfb28bb33bb.webp +0 -0
  267. /package/cli/public/images/{companies → demo/companies}/c75c22fc-d295-472e-bdae-dbb8eb09cf18.webp +0 -0
  268. /package/cli/public/images/{companies → demo/companies}/cdf3efb4-33a2-485e-8d95-e0ab5a4cb6a5.webp +0 -0
  269. /package/cli/public/images/{companies → demo/companies}/d6fe4c6a-ecdb-40fc-a8e6-2044ef2b82d4.webp +0 -0
  270. /package/cli/public/images/{contacts → demo/contacts}/159e4c7a-ff5f-4162-8237-acec3ca8a759.webp +0 -0
  271. /package/cli/public/images/{contacts → demo/contacts}/65e07208-6b1f-4a59-b5e3-2f80f5741b18.webp +0 -0
  272. /package/cli/public/images/{contacts → demo/contacts}/6d1c5410-ef5b-4d37-8b8d-4ab8cfc87785.webp +0 -0
  273. /package/cli/public/images/{contacts → demo/contacts}/754c77d8-eefb-4a90-b07b-ed00980c88b4.webp +0 -0
  274. /package/cli/public/images/{contacts → demo/contacts}/9fd23cd9-9b94-4bb8-bb73-d315b93b8a5c.webp +0 -0
  275. /package/cli/public/images/{contacts → demo/contacts}/b2f746d1-6b3c-4c47-8e07-f73927c167cb.webp +0 -0
  276. /package/cli/public/images/{contacts → demo/contacts}/b515cb46-eab4-4862-9e8e-c2f5f217ae79.webp +0 -0
  277. /package/cli/public/images/{contacts → demo/contacts}/cf2eae72-e5ab-4d95-8f08-b6571b44f8eb.webp +0 -0
  278. /package/cli/public/images/{contacts → demo/contacts}/ec0e0285-22d9-48d4-b4b3-96388c37c807.webp +0 -0
  279. /package/cli/public/images/{contacts → demo/contacts}/ecb1a0f4-d244-4136-badf-c2bc72e3b678.webp +0 -0
  280. /package/cli/public/images/{users → demo/users}/02d1230f-5bfe-46b4-8ce1-d10f4aa918a7.webp +0 -0
  281. /package/cli/public/images/{users → demo/users}/166c5e4a-696f-4bf5-ab48-dbbb5e90d526.webp +0 -0
  282. /package/cli/public/images/{users → demo/users}/175a3f0c-692c-4503-87eb-ff95d6535e16.webp +0 -0
  283. /package/cli/public/images/{users → demo/users}/8398ee85-7546-4710-b628-44c98e4ba03a.webp +0 -0
  284. /package/cli/public/images/{users → demo/users}/979f8933-71b1-4df8-b691-566a901d3c76.webp +0 -0
  285. /package/cli/public/images/{users → demo/users}/fbe37132-31bc-4fc9-9bfb-aac7a1b61a7f.webp +0 -0
@@ -2,7 +2,8 @@
2
2
  import { apiPathNames } from '../api/api-path-names.js';
3
3
  import { metaQueryParams } from '../constants/meta-query-params.js';
4
4
  import { combineEndpointPath } from '../http/url/urls.js';
5
+ import { commonLowerCaseWords, wellKnownProps } from '../../base-repo/constants/internal-common-strings.js';
5
6
 
6
- const paramPart='/:',idPart=paramPart+metaQueryParams['id'],editItem='edititem';const paramRouteName='[param]';const list='view';const edit='edit';const blobRoute='blob';const routes={'root':'/','list':list,'edit':edit,'view':'view','editItem':editItem,'editWithId':editItem+idPart,'itemReview':'itemreview','itemHints':'itemhints','login':'sign-in','logout':'sign-out','user':apiPathNames['user'],'editUser':'edituser','editUserWithId':'edituser'+idPart,'editPassword':'edit-password','userList':'userlist','home':'home','team':'team','about':'about','contact':'contact','companion':'companion','videoExample':'videoexample','chartExample':'chart-example','videoRecordingReview':'videorecordingreview','videoReview':'videoreview','videoRecording':'videorecording','viewVideoRecording':'viewvideorecording','mainDashboard':'maindashboard','tableExample':'tableexample','feed':'feed','resourceDetailList':'resource-detail-list','item':'item','fileUpload':'file-upload','viewCourse':'viewcourse','forgotPassword':'forgot-password','resetPassword':'reset-password','tableTemplateExample':'tabletemplateexample','paymentPlans':'payment-plans','api':'api','register':'sign-up','featureCode':'featurecode','userId':'userid','otherUser':'other-user','preload':'preload','userFeature':'user-feature','log':'log','uiMeta':'uimeta','meta':'meta','dashboard':'dashboard','productPreview':'product-preview','export':'export','hd':'hd','productPreviewSegment':'product-preview','screenshot':'screenshot','lm':'lm','leadScanWebsite':'lm/lead-scan-website','googlePlaceScanWebsite':'lm/google-place-scan-website','googlePlaceSaveToGroup':'lm/google-place/save-to-group','remoteBlob':combineEndpointPath(blobRoute,'remote')};
7
+ const idPart='/:'+metaQueryParams['id'],editItem='edititem',editUser='edituser';const paramRouteName='[param]';const list='view';const routeSegmentNames={'edit':commonLowerCaseWords['edit']};const routes={'root':'/','list':list,'edit':routeSegmentNames['edit'],'view':list,'editItem':editItem,'editWithId':editItem+idPart,'itemReview':'itemreview','itemHints':'itemhints','login':'sign-in','logout':'sign-out','user':apiPathNames['user'],'editUser':editUser,'editUserWithId':''+editUser+idPart,'editPassword':'edit-password','userList':'userlist','home':'home','team':'team','about':'about','contact':'contact','companion':'companion','videoExample':'videoexample','chartExample':'chart-example','videoRecordingReview':'videorecordingreview','videoReview':'videoreview','videoRecording':'videorecording','viewVideoRecording':'viewvideorecording','mainDashboard':'maindashboard','tableExample':'tableexample','feed':'feed','resourceDetailList':'resource-detail-list','item':'item','fileUpload':'file-upload','testFilters':'test/filters','viewCourse':'viewcourse','forgotPassword':'forgot-password','resetPassword':'reset-password','tableTemplateExample':'tabletemplateexample','paymentPlans':'payment-plans','register':'sign-up','featureCode':'featurecode','userId':wellKnownProps['userId'],'otherUser':apiPathNames['otherUser'],'userFeature':'user-feature','dashboard':'dashboard','productPreview':'product-preview','export':'export','screenshot':'screenshot','remoteBlob':combineEndpointPath(apiPathNames['blob'],'remote')};
7
8
 
8
- export { blobRoute, edit, list, paramRouteName, routes };
9
+ export { list, paramRouteName, routes };
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+ import { logWarning } from '../logging/logger.js';
3
+ import { toolboxErrorMessages } from '../../constants/toolbox-error-messages-constants.js';
4
+ import { createError } from '../../errors/errors.js';
5
+
6
+ var __defProp=Object['defineProperty'],__name=(_0x525827,_0x150a39)=>__defProp(_0x525827,'name',{'value':_0x150a39,'configurable':!![]});function singleWithWarning(_0x422ca9){if(_0x422ca9['length']===-0x8d7*0x3+-0x202*0x5+0x248f)throw createError(toolboxErrorMessages['emptyArray']);const _0x569ac0=_0x422ca9[0x73c*0x4+-0x3fe*-0x7+-0x38e2];if(_0x422ca9['length']===0x1f47+-0xe9f+-0x10a7)return _0x569ac0;if(_0x422ca9['length']>-0x9c8*0x3+-0x15a8+0x1*0x3301)logWarning(getCollectionElementsMessage(_0x422ca9['length']));return _0x569ac0;}__name(singleWithWarning,'singleWithWarning');function singleOrUndefinedWithWarning(_0x464681){if(_0x464681['length']===-0x171e+0x257b+-0xe5d)return void(0x1985+-0x15*-0x2b+-0x1d0c);const _0x5c2e48=_0x464681[-0x1*-0x11a5+-0x3*-0xbe6+-0x3557];if(_0x464681['length']===0xb48+0x11d7+0x1d1e*-0x1)return _0x5c2e48;if(_0x464681['length']>-0x208b+-0x1*0x11d7+-0x1*-0x3263)logWarning(getCollectionElementsMessage(_0x464681['length']));return _0x5c2e48;}__name(singleOrUndefinedWithWarning,'singleOrUndefinedWithWarning');function getSingleOrEmpty(_0x1eaadf){let _0x188e45;if(_0x1eaadf['length']===0x1dc1+-0x1*-0x138d+0x259*-0x15)_0x188e45=_0x1eaadf[0xfa7+-0x2157+0x11b0];if(_0x1eaadf['length']>0x21b4+-0x1565+-0xc4e)throw createError(getCollectionElementsMessage(_0x1eaadf['length']));return _0x188e45;}__name(getSingleOrEmpty,'getSingleOrEmpty');function singleOrUndefined(_0xbf4114,_0x2f68b6=()=>!![]){const _0x4447d5=_0xbf4114['filter'](_0x2f68b6);if(_0x4447d5['length']>0x739+0x4*0x427+-0x17d4)throw createError(getCollectionElementsMessage(_0x4447d5['length']));return _0x4447d5['length']===0x122d+-0x21bf*0x1+0xf93?_0x4447d5[-0x27*-0x5f+0x1367*-0x2+-0x1855*-0x1]:void(0x2a6*0x3+-0x2332+0x1b40);}__name(singleOrUndefined,'singleOrUndefined');async function singleAsync(_0x5a3301){const _0x5365ea=await _0x5a3301,_0x3d5189=_0x5365ea[-0x1bbe+0x15*0x59+0x1471*0x1];if(_0x5365ea['length']>-0x163*0x7+-0x871+0x1227)logWarning(getCollectionElementsMessage(_0x5365ea['length']));return _0x3d5189;}__name(singleAsync,'singleAsync');async function singleOrUndefinedAsync(_0x29bd0e,_0x1843cf=()=>!![]){const _0xa6cd9=await _0x29bd0e,_0x5488a8=_0xa6cd9['filter'](_0x1843cf),_0x2f1abc=firstOrUndefined(_0x5488a8);if(_0x5488a8['length']===0x48*-0x5a+0x3*-0x7f9+0x189e*0x2)return _0x2f1abc;else {if(_0x5488a8['length']>-0x2*-0xa97+0x1a39+0x17b3*-0x2)throw createError(getCollectionElementsMessage(_0x5488a8['length']));}return _0x2f1abc;}__name(singleOrUndefinedAsync,'singleOrUndefinedAsync');function first(_0x157d63){if(_0x157d63['length']===0x16f3*-0x1+-0x20cf+0x12*0x319)throw createError(toolboxErrorMessages['emptyArray']);return _0x157d63[0xaff+0x2203+-0x2d02];}__name(first,'first');function firstOrUndefined(_0x4a530a){return _0x4a530a[-0x49*0x6+-0x60*-0x20+0x1b7*-0x6];}__name(firstOrUndefined,'firstOrUndefined');function getCollectionElementsMessage(_0x1226c0){return 'Collection\x20had\x20'+_0x1226c0+'\x20elements,\x20expected\x20one';}__name(getCollectionElementsMessage,'getCollectionElementsMessage');
7
+
8
+ export { first, firstOrUndefined, getSingleOrEmpty, singleAsync, singleOrUndefined, singleOrUndefinedAsync, singleOrUndefinedWithWarning, singleWithWarning };
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+ const apiRoutes={'connectToken':'connect/token','accountLogin':'account/login','accountLogout':'account/logout'};
3
+
4
+ export { apiRoutes };
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+ var __defProp=Object['defineProperty'],__name=(_0x269aa7,_0xaf1696)=>__defProp(_0x269aa7,'name',{'value':_0xaf1696,'configurable':!![]});function getErrorDto(_0x137315){const _0xb9f71b={'errorMessage':_0x137315['message'],'stackTrace':_0x137315['stack'],..._0x137315['cause']instanceof Error&&{'innerError':getErrorDto(_0x137315['cause'])}};return _0xb9f71b;}__name(getErrorDto,'getErrorDto');
3
+
4
+ export { getErrorDto };
@@ -0,0 +1,8 @@
1
+ 'use strict';
2
+ import { ApiError as ApiError$1 } from 'next/dist/server/api-utils/index.js';
3
+ import { isDynamicServerError } from 'next/dist/client/components/hooks-server-context.js';
4
+ import { cookies, headers } from 'next/headers.js';
5
+
6
+ var __defProp=Object['defineProperty'],__name=(_0x23c6d1,_0x20f586)=>__defProp(_0x23c6d1,'name',{'value':_0x20f586,'configurable':!![]});class ApiError extends ApiError$1{static{__name(this,'ApiError');}}const fdIsDynamicServerError=isDynamicServerError;function fdCookies(){return cookies();}__name(fdCookies,'fdCookies');function fdHeaders(){return headers();}__name(fdHeaders,'fdHeaders');function fdRedirect(_0x1ea30d){return require('next/navigation.js').redirect(_0x1ea30d);}__name(fdRedirect,'fdRedirect');
7
+
8
+ export { ApiError, fdCookies, fdHeaders, fdIsDynamicServerError, fdRedirect };
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+ import { isObject } from '../../types/ensure-type.js';
3
+
4
+ var __defProp=Object['defineProperty'],__name=(_0xbf95f1,_0x43c759)=>__defProp(_0xbf95f1,'name',{'value':_0x43c759,'configurable':!![]});const logLen=-0xab4+0x12a*-0xd+0x1a9e;const latestLogs=[];function addLog(_0x28deb2){checkLength(_0x28deb2),latestLogs['push'](_0x28deb2),latestLogs['length']>-0x716+-0x31*0x58+0x1852&&latestLogs['splice'](0x1c4c+-0x82*0x3d+0x2ae,-0x546+-0x1974+0x1eec);}__name(addLog,'addLog');function clearLatestLogs(){latestLogs['splice'](0x5e9*-0x5+0x1*0x216d+-0x1*0x3e0,latestLogs['length']);}__name(clearLatestLogs,'clearLatestLogs');function getLatestLogs(){return latestLogs;}__name(getLatestLogs,'getLatestLogs');function checkLength(_0x171b8e){if(!isObject(_0x171b8e['message'])&&_0x171b8e['message']['length']>logLen)_0x171b8e['message']=_0x171b8e['message']['substring'](0x6d4+-0x215f+0x1a8b,logLen);}__name(checkLength,'checkLength');
5
+
6
+ export { addLog, clearLatestLogs, getLatestLogs, logLen };
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+ import { getErrorDto } from '../errors/error-dtos.js';
3
+
4
+ var __defProp=Object['defineProperty'],__name=(_0x25f475,_0x50c7e8)=>__defProp(_0x25f475,'name',{'value':_0x50c7e8,'configurable':!![]});function getLogDto(_0xf971e3,_0x5b7da2,_0x3d2469,_0x239623){let _0x9de85a={'severity':_0x5b7da2,'message':_0xf971e3,'userId':_0x239623};if(_0x3d2469 instanceof Error)_0x9de85a={'severity':_0x5b7da2,'message':_0xf971e3,'errorMessage':_0x3d2469?.['message'],'userId':_0x239623,'stackTrace':_0x3d2469?.['stack'],'error':_0x3d2469&&getErrorDto(_0x3d2469)};return _0x9de85a;}__name(getLogDto,'getLogDto');
5
+
6
+ export { getLogDto };
@@ -0,0 +1,9 @@
1
+ 'use strict';
2
+ import { getLogDto } from './log-dtos.js';
3
+ import { logSeverities } from '../../../fd-toolbox-core/enums/log-severities.js';
4
+ import { addLog } from './latest-logs-store.js';
5
+ import { isProdOrDemo } from '../../lib/environments.js';
6
+
7
+ var __defProp=Object['defineProperty'],__name=(_0x5237aa,_0x58dbed)=>__defProp(_0x5237aa,'name',{'value':_0x58dbed,'configurable':!![]});function logInfo(_0x7e841d){log(getLogDto(_0x7e841d,logSeverities['info']));}__name(logInfo,'logInfo');function logDebug(_0x415508){log(getLogDto(_0x415508,logSeverities['debug']));}__name(logDebug,'logDebug');function logWarning(_0x4521e9){log(getLogDto(_0x4521e9,logSeverities['warning']));}__name(logWarning,'logWarning');function logError(_0x1aa36e,_0x3011fa){log(getLogDto(_0x1aa36e,logSeverities['error'],_0x3011fa),_0x3011fa);}__name(logError,'logError');function logNextJsMessage(_0x3aa1f4,_0x4d9fce,_0x2b8e42){if(isProdOrDemo())log(getLogDto({'method':_0x3aa1f4,'url':_0x4d9fce,'status':_0x2b8e42},logSeverities['info']));}__name(logNextJsMessage,'logNextJsMessage');function log(_0x45ded0,_0x3a3016){addLog(_0x45ded0);const _0x36d456=JSON['stringify'](_0x45ded0);switch(_0x45ded0['severity']){case logSeverities['warning']:console['warn'](_0x36d456);break;case logSeverities['error']:console['error'](_0x3a3016??'',_0x36d456);break;case logSeverities['debug']:console['debug'](_0x36d456);break;case logSeverities['info']:console['info'](_0x36d456);break;default:}}__name(log,'log');
8
+
9
+ export { log, logDebug, logError, logInfo, logNextJsMessage, logWarning };
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+ const responseMessages={'unhandledError':'Unhandled\x20error','routingError':'Routing\x20error','unauthorizedError':'Unauthorized:\x20Authentication\x20required','badRequest':'Bad\x20Request:\x20Missing\x20required\x20data','accessDenied':'Access\x20Denied','notFoundError':'Not\x20found','internalServerError':'Internal\x20Server\x20Error','missingFileName':'Missing\x20file\x20name','methodNotAllowed':'Method\x20Not\x20Allowed','uploadSuccess':'File\x20uploaded\x20successfully','apiNotAllowedOnProduction':'This\x20API\x20is\x20not\x20allowed\x20on\x20production'};
3
+
4
+ export { responseMessages };
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
- import { shortTextLength, ellipsis } from './strings-constants.js';
2
+ import { shortTextLength } from '../../base-repo/constants/strings-constants.js';
3
3
  import { isNullOrUndefined } from '../functions/value-checking-functions.js';
4
4
 
5
- var __defProp=Object['defineProperty'],__name=(_0x560ffd,_0x52b4ed)=>__defProp(_0x560ffd,'name',{'value':_0x52b4ed,'configurable':!![]});function shortenWithEllipsis(_0x35a423,_0x3ba2be=shortTextLength){if(isNullOrUndefined(_0x35a423))return '';return _0x35a423['length']<-0x5f2*0x5+0x50*0x3a+0xb9c?_0x35a423['length']<=_0x3ba2be?_0x35a423:_0x35a423['substring'](0x1241+0x1aed+0x1*-0x2d2e,_0x3ba2be):_0x35a423['length']<=_0x3ba2be?_0x35a423:_0x35a423['substring'](0x198b+-0x589*-0x6+-0x485*0xd,_0x3ba2be-(0x3*0xbf8+0x133*-0x1c+0x1*-0x253))+ellipsis;}__name(shortenWithEllipsis,'shortenWithEllipsis');function trimCharacter(_0x2194a9,_0xc1b118){let _0x22d4f5=_0x2194a9;if(Array['isArray'](_0xc1b118))for(let _0x989059 of _0xc1b118){(_0x2194a9['startsWith'](_0x989059)||_0x2194a9['endsWith'](_0x989059))&&(_0x22d4f5=trimOneCharacter(_0x2194a9,_0x989059));}else _0x22d4f5=trimOneCharacter(_0x2194a9,_0xc1b118);return _0x22d4f5;}__name(trimCharacter,'trimCharacter');function trimOneCharacter(_0x14cafe,_0x389541){let _0x1657f5=_0x14cafe;return _0x1657f5?.['startsWith'](_0x389541)&&(_0x1657f5=_0x1657f5['substring'](-0x8bd*0x2+-0xce*0x18+0x24cb)),_0x1657f5?.['endsWith'](_0x389541)&&(_0x1657f5=_0x1657f5['substring'](-0x259*-0x7+-0x1195*0x1+0x126,_0x1657f5['lastIndexOf'](_0x389541))),_0x1657f5;}__name(trimOneCharacter,'trimOneCharacter');
5
+ var __defProp=Object['defineProperty'],__name=(_0xd6330b,_0xed905)=>__defProp(_0xd6330b,'name',{'value':_0xed905,'configurable':!![]});function shortenWithEllipsis(_0x3e9c64,_0x2f00f7=shortTextLength){if(isNullOrUndefined(_0x3e9c64))return '';return _0x3e9c64['length']<0x17*-0x1af+-0x1e8e+0x4549?_0x3e9c64['length']<=_0x2f00f7?_0x3e9c64:_0x3e9c64['substring'](0x3*-0x57b+0x18d0+0x85f*-0x1,_0x2f00f7):_0x3e9c64['length']<=_0x2f00f7?_0x3e9c64:_0x3e9c64['substring'](0x764+-0xf63+0x7ff,_0x2f00f7-(0x1f41+-0x1c4*-0x10+0x880*-0x7))+'…';}__name(shortenWithEllipsis,'shortenWithEllipsis');function trimCharacter(_0x163fc5,_0x5b0b79){let _0x4f1656=_0x163fc5;if(Array['isArray'](_0x5b0b79))for(let _0x3e4d7f of _0x5b0b79){(_0x163fc5['startsWith'](_0x3e4d7f)||_0x163fc5['endsWith'](_0x3e4d7f))&&(_0x4f1656=trimOneCharacter(_0x163fc5,_0x3e4d7f));}else _0x4f1656=trimOneCharacter(_0x163fc5,_0x5b0b79);return _0x4f1656;}__name(trimCharacter,'trimCharacter');function trimOneCharacter(_0x4cce2c,_0x12d293){let _0x26d3c8=_0x4cce2c;return _0x26d3c8?.['startsWith'](_0x12d293)&&(_0x26d3c8=_0x26d3c8['substring'](0xbab*-0x2+0x10b1*-0x2+0x38b9)),_0x26d3c8?.['endsWith'](_0x12d293)&&(_0x26d3c8=_0x26d3c8['substring'](0x2f*-0xd3+0x50c+-0x23f*-0xf,_0x26d3c8['lastIndexOf'](_0x12d293))),_0x26d3c8;}__name(trimOneCharacter,'trimOneCharacter');
6
6
 
7
7
  export { shortenWithEllipsis, trimCharacter };
@@ -1,4 +1,8 @@
1
1
  'use strict';
2
- var __defProp=Object['defineProperty'],__name=(_0x31f528,_0x386541)=>__defProp(_0x31f528,'name',{'value':_0x386541,'configurable':!![]});function ensureString(_0x1de962){return isString(_0x1de962)?_0x1de962:String(_0x1de962);}__name(ensureString,'ensureString');function ensureNumber(_0x19bb89){if(isNumber(_0x19bb89))return _0x19bb89;else {if(isString(_0x19bb89))return parseFloat(_0x19bb89);else return NaN;}}__name(ensureNumber,'ensureNumber');function ensureObjectArray(_0x4fa953){if(Array['isArray'](_0x4fa953)&&_0x4fa953['length']>0x1787+-0x12df+-0x4a8&&isObject(_0x4fa953[-0x3*-0x6ec+-0x66+-0x145e])){const _0x6b2b2b=[];for(const _0x3d866a of _0x4fa953){if(isObject(_0x3d866a))_0x6b2b2b['push'](_0x3d866a);}return _0x6b2b2b;}return [];}__name(ensureObjectArray,'ensureObjectArray');function ensureWithIndexer(_0x48b3ca){let _0x5c4803={};return isWithIndexer(_0x48b3ca)&&(_0x5c4803=_0x48b3ca),_0x5c4803;}__name(ensureWithIndexer,'ensureWithIndexer');function ensureWithIndexerArray(_0x5bb748){if(Array['isArray'](_0x5bb748))return _0x5bb748['filter'](isWithIndexer);if(isWithIndexer(_0x5bb748))return [_0x5bb748];return [];}__name(ensureWithIndexerArray,'ensureWithIndexerArray');const types={'object':'object','string':'string','number':'number'};const stripeConflictResponseProperties={'detail':'detail'};function isObject(_0x1665dd){return typeof _0x1665dd===types['object']&&_0x1665dd!==null;}__name(isObject,'isObject');function isString(_0x4771f0){return typeof _0x4771f0===types['string'];}__name(isString,'isString');function isNumber(_0x14abfe){return typeof _0x14abfe===types['number'];}__name(isNumber,'isNumber');function isError(_0x5c7e65){return typeof _0x5c7e65===types['object'];}__name(isError,'isError');function isKeyof(_0x302c64,_0x28a382){return isObject(_0x302c64)&&_0x28a382 in _0x302c64;}__name(isKeyof,'isKeyof');function isWithIndexer(_0x25d27d){return isObject(_0x25d27d)&&!Array['isArray'](_0x25d27d);}__name(isWithIndexer,'isWithIndexer');function isArray(_0x10cdfb){return isObject(_0x10cdfb)&&Array['isArray'](_0x10cdfb);}__name(isArray,'isArray');function isErrorResponseWithDetail(_0x5c06a7){return isObject(_0x5c06a7)&&stripeConflictResponseProperties['detail']in _0x5c06a7;}__name(isErrorResponseWithDetail,'isErrorResponseWithDetail');function isBoolean(_0x2780d2){return typeof _0x2780d2==='boolean';}__name(isBoolean,'isBoolean');function isDate(_0x2058a1){return _0x2058a1 instanceof Date;}__name(isDate,'isDate');
2
+ import { jsBasicTypes } from '../../base-repo/constants/basic-types.js';
3
+ import { commonLowerCaseWords } from '../../base-repo/constants/internal-common-strings.js';
4
+ import { first } from '../server/collections/single-funcs.js';
3
5
 
4
- export { ensureNumber, ensureObjectArray, ensureString, ensureWithIndexer, ensureWithIndexerArray, isArray, isBoolean, isDate, isError, isErrorResponseWithDetail, isKeyof, isNumber, isObject, isString, isWithIndexer, stripeConflictResponseProperties, types };
6
+ var __defProp=Object['defineProperty'],__name=(_0x30b30f,_0x5df149)=>__defProp(_0x30b30f,'name',{'value':_0x5df149,'configurable':!![]});function ensureString(_0x3c6acb){let _0x43af97;return isString(_0x3c6acb)?_0x43af97=_0x3c6acb:_0x43af97=String(_0x3c6acb),_0x43af97;}__name(ensureString,'ensureString');function ensureNumber(_0x5583b7){let _0x4bfaef=NaN;if(isNumber(_0x5583b7))_0x4bfaef=_0x5583b7;else isString(_0x5583b7)&&(_0x4bfaef=parseFloat(_0x5583b7));return _0x4bfaef;}__name(ensureNumber,'ensureNumber');function ensureObjectArray(_0x55c62a){let _0x1525d9=[];if(Array['isArray'](_0x55c62a)&&_0x55c62a['length']>-0x24d7+0x2694+-0x5*0x59&&isObject(first(_0x55c62a)))for(const _0x1144f1 of _0x55c62a){if(isObject(_0x1144f1))_0x1525d9['push'](_0x1144f1);}return _0x1525d9;}__name(ensureObjectArray,'ensureObjectArray');function ensureWithIndexer(_0x2b0c3f){let _0x3ee0f0={};return isWithIndexer(_0x2b0c3f)&&(_0x3ee0f0=_0x2b0c3f),_0x3ee0f0;}__name(ensureWithIndexer,'ensureWithIndexer');function ensureWithIndexerArray(_0x2d325a){let _0x446dfc=[];if(Array['isArray'](_0x2d325a))_0x446dfc=_0x2d325a['filter'](isWithIndexer);else isWithIndexer(_0x2d325a)&&(_0x446dfc=[_0x2d325a]);return _0x446dfc;}__name(ensureWithIndexerArray,'ensureWithIndexerArray');const stripeConflictResponseProperties={'detail':commonLowerCaseWords['detail']};function isObject(_0x2274f6){return typeof _0x2274f6===jsBasicTypes['object']&&_0x2274f6!==void(0xcc7*0x3+-0x1*-0x1798+-0x3ded);}__name(isObject,'isObject');function isString(_0x1d08ab){return typeof _0x1d08ab===jsBasicTypes['string'];}__name(isString,'isString');function isNumber(_0x5e8cbe){return typeof _0x5e8cbe===jsBasicTypes['number'];}__name(isNumber,'isNumber');function isError(_0x1d9cb3){return typeof _0x1d9cb3===jsBasicTypes['object'];}__name(isError,'isError');function isKeyof(_0x309883,_0x22976f){return isObject(_0x309883)&&_0x22976f in _0x309883;}__name(isKeyof,'isKeyof');function isFunction(_0x11eed2){return typeof _0x11eed2===jsBasicTypes['function'];}__name(isFunction,'isFunction');function isWithIndexer(_0x116b71){return isObject(_0x116b71)&&!Array['isArray'](_0x116b71);}__name(isWithIndexer,'isWithIndexer');function isArray(_0x5d58a4){return isObject(_0x5d58a4)&&Array['isArray'](_0x5d58a4);}__name(isArray,'isArray');function isErrorResponseWithDetail(_0x2c3e0d){return isObject(_0x2c3e0d)&&stripeConflictResponseProperties['detail']in _0x2c3e0d;}__name(isErrorResponseWithDetail,'isErrorResponseWithDetail');function isBoolean(_0x27485d){return typeof _0x27485d===jsBasicTypes['boolean'];}__name(isBoolean,'isBoolean');function isDate(_0xd88ce1){return _0xd88ce1 instanceof Date;}__name(isDate,'isDate');function isNumberArray(_0x5dfde5){return Array['isArray'](_0x5dfde5)&&(_0x5dfde5['length']===-0x92b*-0x3+-0x1c3d+0x1*0xbc||typeof first(_0x5dfde5)===jsBasicTypes['number']);}__name(isNumberArray,'isNumberArray');
7
+
8
+ export { ensureNumber, ensureObjectArray, ensureString, ensureWithIndexer, ensureWithIndexerArray, isArray, isBoolean, isDate, isError, isErrorResponseWithDetail, isFunction, isKeyof, isNumber, isNumberArray, isObject, isString, isWithIndexer, stripeConflictResponseProperties };
@@ -0,0 +1,4 @@
1
+ 'use strict';
2
+ var __defProp=Object['defineProperty'],__name=(_0x997cca,_0x12c29b)=>__defProp(_0x997cca,'name',{'value':_0x12c29b,'configurable':!![]});function buildUrl(_0x43bbc9,_0x34e5cf,_0x417e71){let _0x178e2b=appendUrl(_0x417e71,_0x43bbc9);return _0x34e5cf&&_0x34e5cf['length']>-0x1035*-0x1+-0xddd+-0x258&&(_0x178e2b+='?',_0x34e5cf['forEach']((_0x5e8ecc,_0x4ee6fb)=>{_0x178e2b+=_0x5e8ecc['name']+'='+_0x5e8ecc['value'],_0x4ee6fb<_0x34e5cf['length']-(0xb74+0x11c3+-0x1d36)&&(_0x178e2b+='&');})),_0x178e2b;}__name(buildUrl,'buildUrl');function isLocalUrl(_0x3b2d5d){if(!_0x3b2d5d?.['trim']())return ![];const _0x3ddcb2=/^~?\/[^/\\]/gm;return _0x3ddcb2['test'](_0x3b2d5d['trim']());}__name(isLocalUrl,'isLocalUrl');function appendUrl(..._0x174b0d){const _0x576cd2=[];return _0x174b0d['forEach'](_0x137174=>{const _0x54c29b=_0x137174?.['toString']()['trim']();_0x54c29b&&_0x54c29b!==''&&_0x576cd2['push'](_0x54c29b['replace'](/(^\/|\/$)/g,''));}),_0x576cd2['join']('/');}__name(appendUrl,'appendUrl');
3
+
4
+ export { buildUrl, isLocalUrl };
@@ -1,4 +1,6 @@
1
1
  'use strict';
2
- const resourceNameApiParam='resource';const wellKnownMetaProps={'id':'id','imageUrl':'imageUrl','workspaceId':'workspaceId','blobList':'blobList','name':'name','screenshotBlob':'screenshotBlob'};
2
+ import { commonLowerCaseWords, wellKnownProps } from '../../base-repo/constants/internal-common-strings.js';
3
3
 
4
- export { resourceNameApiParam, wellKnownMetaProps };
4
+ const wellKnownMetaProps={'id':wellKnownProps['id'],'imageUrl':'imageUrl','workspaceId':'workspaceId','blobList':'blobList','name':commonLowerCaseWords['name'],'screenshotBlob':'screenshotBlob'};
5
+
6
+ export { wellKnownMetaProps };
@@ -1,4 +1,4 @@
1
1
  'use strict';
2
- var __defProp=Object['defineProperty'],__name=(_0x499a2e,_0x7209e5)=>__defProp(_0x499a2e,'name',{'value':_0x7209e5,'configurable':!![]});const nameOf=__name(_0x2e3252=>_0x2e3252['toString'](),'nameOf');const deepNameOf=__name((_0x2b0cb9,_0x1aa443)=>_0x2b0cb9+'.'+_0x1aa443,'deepNameOf');const nameOfWithType=__name(_0x5f30a4=>_0x5f30a4,'nameOfWithType');
2
+ var __defProp=Object['defineProperty'],__name=(_0x3ff706,_0x458998)=>__defProp(_0x3ff706,'name',{'value':_0x458998,'configurable':!![]});function nameOf(_0x11a294){return _0x11a294['toString']();}__name(nameOf,'nameOf');function deepNameOf(_0x3d9d4e,_0x199861){return _0x3d9d4e+'.'+_0x199861;}__name(deepNameOf,'deepNameOf');function nameOfWithType(_0x52a88d){return _0x52a88d;}__name(nameOfWithType,'nameOfWithType');
3
3
 
4
4
  export { deepNameOf, nameOf, nameOfWithType };
@@ -1,6 +1,8 @@
1
1
  'use strict';
2
2
  import { nameOf } from '../core/name-of.js';
3
+ import { wellKnownMetaProps } from '../constants/meta-constants.js';
4
+ import { jsBasicTypes } from '../../base-repo/constants/basic-types.js';
3
5
 
4
- var __defProp=Object['defineProperty'],__name=(_0x518b84,_0x1a315a)=>__defProp(_0x518b84,'name',{'value':_0x1a315a,'configurable':!![]});const withIdProps={'id':nameOf('id')};function isResourceWithId(_0x3d7178){return _0x3d7178&&typeof _0x3d7178==='object'&&typeof _0x3d7178['id']==='string';}__name(isResourceWithId,'isResourceWithId');
6
+ var __defProp=Object['defineProperty'],__name=(_0x269e60,_0x284d49)=>__defProp(_0x269e60,'name',{'value':_0x284d49,'configurable':!![]});const withIdProps={'id':nameOf(wellKnownMetaProps['id'])};function isResourceWithId(_0x590374){return _0x590374&&typeof _0x590374===jsBasicTypes['object']&&typeof _0x590374['id']===jsBasicTypes['string'];}__name(isResourceWithId,'isResourceWithId');
5
7
 
6
8
  export { isResourceWithId, withIdProps };
@@ -2,5 +2,6 @@
2
2
  'use strict';
3
3
  import { Command } from 'commander';
4
4
  import { create } from '../create/bin/create.js';
5
+ import { gitCommandTokens } from '../../../base-repo/constants/tools-constants.js';
5
6
 
6
- 'use strict';const program=new Command();program['command']('create\x20<folder>')['option']('-r,\x20--repo','Enable\x20repo\x20mode')['description']('Create\x20a\x20new\x20SaaS\x20Kit\x20project')['action']((_0x4b6271,_0x234490)=>{const _0x4329e5=[_0x4b6271];if(_0x234490['repo'])_0x4329e5['push']('-r');create(_0x4329e5);}),program['parse'](process['argv']);
7
+ 'use strict';const program=new Command();program['command']('create\x20<folder>')['option'](gitCommandTokens['dashR']+',\x20--repo','Enable\x20repo\x20mode')['description']('Create\x20a\x20new\x20SaaS\x20Kit\x20project')['action']((_0x224936,_0x42db84)=>{const _0x5d274d=[_0x224936];if(_0x42db84['repo'])_0x5d274d['push'](gitCommandTokens['dashR']);create(_0x5d274d);}),program['parse'](process['argv']);
@@ -1,20 +1,28 @@
1
1
  'use strict';
2
- import { execSync } from 'child_process';
3
- import { existsSync, promises, mkdirSync, rmSync } from 'fs';
2
+ import { execSync, execFileSync } from 'child_process';
3
+ import { existsSync, rmSync, promises, mkdirSync } from 'fs';
4
4
  import { fileURLToPath } from 'node:url';
5
- import * as _0x2657b6 from 'path';
6
- import _0x4e9839 from 'node:fs';
5
+ import { createInterface } from 'node:readline/promises';
6
+ import _0x5aab02 from 'process';
7
+ import * as _0x13ceb0 from 'path';
8
+ import _0x130630 from 'node:fs';
9
+ import _0xf9d3e8 from 'os';
7
10
  import { toolsFoldersToReplace, additionalFoldersToCreate } from '../../../../base-repo/constants/create-app-constants.js';
8
11
  import { logStringError, logInfoRaw } from '../../../../fd-toolbox/logging/loggers.js';
9
- import { projectName } from '../../../../fd-toolbox/constants/constants.js';
10
- import { allFilesToCopy } from '../../../npm-commands/build-npm/path.js';
12
+ import { allFilesToCopy } from '../../../npm-commands/build-npm/paths.js';
11
13
  import { createError } from '../../../../fd-toolbox/errors/errors.js';
12
- import { folders, files, nonRootProjectPaths, projectPaths } from '../../../../base-repo/app-constants/project-paths.js';
14
+ import { folders, files, nonRootProjectPaths, projectName, projectPaths } from '../../../../base-repo/app-constants/project-paths.js';
13
15
  import { npmPackages } from '../../../../base-repo/constants/packages.js';
14
16
  import { aliasSymbols } from '../../../../base-repo/app-constants/aliases.js';
15
- import { isWithIndexer, isString } from '../../../../fd-toolbox/types/ensure-type.js';
17
+ import { sourceDir, fileExtensions, nodeOsPlatforms } from '../../../../base-repo/app-constants/internal-system-constants.js';
18
+ import { ensureString, isWithIndexer, isString } from '../../../../fd-toolbox/types/ensure-type.js';
16
19
  import { cliScripts, cliEslintContent } from '../../../npm-commands/build-npm/cli-contents.js';
20
+ import { gitCommandTokens, stdioStatuses, ecmaVersion } from '../../../../base-repo/constants/tools-constants.js';
21
+ import { externalPackageNames, commandNames } from '../../../../base-repo/app-constants/command-names.js';
22
+ import { commonStatuses } from '../../../../base-repo/constants/ci-constants.js';
23
+ import { basicErrorMessages } from '../../../../base-repo/constants/internal-common-strings.js';
24
+ import { first } from '../../../../fd-toolbox/server/collections/single-funcs.js';
17
25
 
18
- var __defProp=Object['defineProperty'],__name=(_0x1b0777,_0x53b8d8)=>__defProp(_0x1b0777,'name',{'value':_0x53b8d8,'configurable':!![]});const requiredNodeVersion='v20.0.0';process['version']<requiredNodeVersion&&(logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](0x1*-0x1585+0x19b*0xf+0x1*-0x28f));const filename=fileURLToPath(import.meta.url),sourceDir='../../../../',binDir=_0x2657b6['dirname'](filename),repoRoot=_0x2657b6['resolve'](binDir,sourceDir),envLocalPath=_0x2657b6['join'](binDir,sourceDir+folders['cli']+'/'+files['envExample']),envTemplate=_0x4e9839['readFileSync'](envLocalPath,'utf8'),foldersToIgnore=[folders['cli']+'/'+folders['constants'],folders['cli']+'/'+files['packageTemplate'],folders['cli']+'/'+files['envExample'],folders['cli']+'/'+folders['bin'],folders['cli']+'/'+folders['configs']];function runCommand(_0x4f479c,_0x4b5078){logInfoRaw('Executing:\x20'+_0x4f479c);try{execSync(_0x4f479c,{'stdio':'inherit','cwd':_0x4b5078??process['cwd']()});}catch(_0x5db369){const _0x390bed=_0x5db369 instanceof Error?_0x5db369['message']:'Unknown\x20error';logStringError('Error\x20executing:\x20'+_0x4f479c),logStringError(_0x390bed),process['exit'](-0x1355*0x2+-0x221+-0x7*-0x5d4);}}__name(runCommand,'runCommand');function checkTargetFolder(_0x4a064c){existsSync(_0x4a064c)&&(logStringError('Error:\x20Folder\x20\x22'+_0x2657b6['basename'](_0x4a064c)+'\x22\x20already\x20exists.'),process['exit'](-0x14dd+0x2512+-0x1034));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x1cc3db=_0x2657b6['resolve'](repoRoot,files['packageJson']),_0x18c7f1=JSON['parse'](_0x4e9839['readFileSync'](_0x1cc3db,'utf-8'));return String(_0x18c7f1['devDependencies']?.['next']??_0x18c7f1['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');async function createNextProject(_0x43a2ec,_0x2c1a5c){logInfoRaw('Creating\x20Next.js\x20project...');const _0x52a455=getCreateNextAppVersion(),_0x4c18fa=['npx\x20--yes\x20create-next-app@'+_0x52a455+'\x20\x22'+_0x43a2ec+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git','--react-compiler']['join']('\x20');runCommand(_0x4c18fa,_0x2657b6['dirname'](_0x2c1a5c)),logInfoRaw('Next.js\x20project\x20created!');const _0x49a50b=_0x2657b6['join'](_0x2c1a5c,'next.config.ts'),_0x4d972b=_0x2657b6['join'](_0x2c1a5c,folders['public']);await promises['rm'](_0x49a50b,{'force':!![]}),logInfoRaw('Removed\x20default\x20next.config.ts'),await promises['rm'](_0x4d972b,{'recursive':!![],'force':!![]}),logInfoRaw('Removed\x20default\x20public\x20folder'),await promises['mkdir'](_0x4d972b);}__name(createNextProject,'createNextProject');async function createEnvFile(_0x2b845e){logInfoRaw('Creating\x20'+files['env']+'\x20file\x20with\x20default\x20values...');const _0x29a66f=_0x2657b6['join'](_0x2b845e,files['env']);try{await promises['writeFile'](_0x29a66f,envTemplate,'utf8'),logInfoRaw(files['env']+'\x20file\x20created\x20with\x20values!');}catch(_0xb0c791){const _0x38c34e=_0xb0c791 instanceof Error?_0xb0c791['message']:'Unknown\x20error';logStringError('Error\x20creating\x20'+files['env']+'\x20file:'),logStringError(_0x38c34e);throw _0xb0c791;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x2b7a2a){const _0x992347=_0x2657b6['join'](_0x2b7a2a,files['packageJson']),_0x56ed97=_0x2657b6['join'](repoRoot,folders['cli']+'/'+files['packageTemplate']);try{const _0x576a20=JSON['parse'](await promises['readFile'](_0x992347,'utf8')),_0x8821dd=_0x576a20['name'],_0x19743a=JSON['parse'](await promises['readFile'](_0x56ed97,'utf8')),_0x52f8ac={..._0x19743a,'name':_0x8821dd};await promises['writeFile'](_0x992347,JSON['stringify'](_0x52f8ac,null,0xe98+0x137*0x13+-0x1*0x25ab)+'\x0a','utf8');}catch(_0x396660){const _0x4307a8=_0x396660 instanceof Error?_0x396660['message']:'Unknown\x20error';logStringError('Error\x20overriding\x20'+files['packageJson']+':'),logStringError(_0x4307a8);throw _0x396660;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x139294){const _0x1edccc=/(import\s+)([^'"]+)(\s+from\s+["'])([^"']+)(["'])/g;return _0x139294['replace'](_0x1edccc,(_0x12cbd1,_0xaedecc,_0x260a0e,_0x1615dc,_0x4de4f4,_0x315e4e)=>{if(!_0x4de4f4['startsWith'](aliasSymbols['atSign'])||_0x4de4f4['startsWith'](npmPackages['saasKit']))return _0x12cbd1;let _0x58032c;_0x4de4f4['startsWith'](aliasSymbols['atSign']+folders['server'])||_0x4de4f4['includes'](''+nonRootProjectPaths['server'])?_0x58032c=npmPackages['saasKitServer']:_0x58032c=npmPackages['saasKit'];let _0x584e94=_0x260a0e['trim']();const _0x19b308=/^type\b/['test'](_0x584e94),_0x10e814=/^\*\s+as\s+/['test'](_0x584e94);return !_0x19b308&&!_0x10e814&&!_0x584e94['startsWith']('{')&&(_0x584e94='{\x20'+_0x584e94+'\x20}'),''+_0xaedecc+_0x584e94+_0x1615dc+_0x58032c+_0x315e4e;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x366ecb){logInfoRaw('Copying\x20'+projectName+'\x20files...');for(const _0x381a85 of allFilesToCopy){const _0xc6f65a=folders['cli']+'/'+_0x381a85,_0x5f0c79=_0x2657b6['join'](repoRoot,_0xc6f65a),_0x3d01d0=replaceToolsFolder(_0x381a85),_0x14bf77=_0x2657b6['join'](_0x366ecb,_0x3d01d0);if(existsSync(_0x5f0c79)){const _0x45ce1f=await promises['stat'](_0x5f0c79);_0x45ce1f['isDirectory']()?await copyDirectoryContents(_0x5f0c79,_0x14bf77):await copyAndProcessFile(_0x5f0c79,_0x14bf77);}else logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0xc6f65a);}logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0xf111be){let _0x596f83=_0xf111be;for(const [_0x4b9621,_0x2e1997]of Object['entries'](toolsFoldersToReplace)){if(_0x596f83['startsWith'](_0x4b9621)&&isWithIndexer(_0x2e1997)){const _0x5746eb=_0x2e1997;for(const _0x2c5a95 in _0x5746eb){const _0x50be8b=_0x5746eb[_0x2c5a95];isString(_0x50be8b)&&(_0x596f83=_0x596f83['replace'](_0x2c5a95,_0x50be8b));}break;}}return _0x596f83;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x549db7,_0xa77ee3,_0x555e34=![]){const _0xaad736=_0x2657b6['relative'](repoRoot,_0x549db7)['replace'](/\\/g,'/'),_0x4af70e=foldersToIgnore['map'](_0x220b91=>_0x220b91['replace'](/\\/g,'/'));if(_0x4af70e['includes'](_0xaad736))return !![];if(_0x555e34){const _0x1c1513=_0x2657b6['relative'](_0xa77ee3,_0x549db7)['replace'](/\\/g,'/'),_0x28d938=_0x1c1513['split']('/');return _0x4af70e['some'](_0x7a84fb=>_0x28d938['some'](_0x5cfd87=>_0x5cfd87===_0x7a84fb));}return ![];}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x516b90,_0x36fe04){!existsSync(_0x36fe04)&&mkdirSync(_0x36fe04,{'recursive':!![]});try{const _0xe32e15=await promises['readdir'](_0x516b90,{'withFileTypes':!![]});for(const _0x25fbcf of _0xe32e15){const _0xb8d8d7=_0x2657b6['join'](_0x516b90,_0x25fbcf['name']),_0x2c4993=_0x2657b6['join'](_0x36fe04,_0x25fbcf['name']);!shouldIgnorePath(_0xb8d8d7,_0x516b90,_0x25fbcf['isDirectory']())&&(_0x25fbcf['isDirectory']()?await copyDirectoryContents(_0xb8d8d7,_0x2c4993):await copyAndProcessFile(_0xb8d8d7,_0x2c4993));}}catch(_0x4a024c){const _0xa666ea=_0x4a024c instanceof Error?_0x4a024c['message']:'Unknown\x20error';logStringError('Error\x20reading\x20directory\x20'+_0x516b90+':\x20'+_0xa666ea);throw _0x4a024c;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x4a9fd6,_0x28cfe4){const _0x5c8de0=_0x2657b6['dirname'](_0x28cfe4);!existsSync(_0x5c8de0)&&mkdirSync(_0x5c8de0,{'recursive':!![]});const _0x2e43ad=await promises['stat'](_0x4a9fd6);if(_0x2e43ad['isDirectory']())await copyDirectoryContents(_0x4a9fd6,_0x28cfe4);else {const _0x1cd805=_0x2657b6['extname'](_0x4a9fd6)['toLowerCase'](),_0x390f45=['.ico','.png','.jpg','.jpeg','.webp','.gif','.svg','.pdf'];if(_0x390f45['includes'](_0x1cd805)){await promises['copyFile'](_0x4a9fd6,_0x28cfe4);return;}const _0x22c9b8=await promises['readFile'](_0x4a9fd6,'utf8'),_0x4a2213=replaceImports(_0x22c9b8);await promises['writeFile'](_0x28cfe4,_0x4a2213,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x563ecd){for(const _0x548162 of additionalFoldersToCreate){const _0x3db59f=_0x2657b6['join'](_0x563ecd,_0x548162);!existsSync(_0x3db59f)&&(mkdirSync(_0x3db59f,{'recursive':!![]}),logInfoRaw('Created\x20folder:\x20'+_0x548162));}logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function setupPreCommitHooks(_0x1872cc){const _0x37dc0c=_0x2657b6['join'](_0x1872cc,folders['husky']),_0x2f4d7d=_0x2657b6['join'](_0x37dc0c,files['preCommit']),_0x26cadf=_0x2657b6['join'](_0x37dc0c,files['commitMsg']);mkdirSync(_0x37dc0c,{'recursive':!![]}),await promises['writeFile'](_0x2f4d7d,cliScripts['preCommit'],'utf8'),await promises['writeFile'](_0x26cadf,cliScripts['commitMsg'],'utf8'),runCommand(cliScripts['chmodPreCommit'],_0x1872cc),runCommand(cliScripts['chmodCommitMsg'],_0x1872cc);}__name(setupPreCommitHooks,'setupPreCommitHooks');async function setupEslintConfig(_0x479713){const _0xa1deb5=_0x2657b6['join'](_0x479713,files['eslintConfigMjs']);existsSync(_0xa1deb5)&&await promises['rm'](_0xa1deb5);const _0x132a49=_0x2657b6['join'](_0x479713,files['eslintConfigJs']);await promises['writeFile'](_0x132a49,cliEslintContent,'utf8');}__name(setupEslintConfig,'setupEslintConfig');async function enableRepoModeExtras(_0x109ef7){logInfoRaw('Enabling\x20recommendation\x20mode\x20(-r)...'),runCommand(cliScripts['gitInit'],_0x109ef7),runCommand(cliScripts['installDevHuskyTsx'],_0x109ef7),runCommand(cliScripts['setLint'],_0x109ef7),runCommand(cliScripts['installHusky'],_0x109ef7),await setupPreCommitHooks(_0x109ef7);}__name(enableRepoModeExtras,'enableRepoModeExtras');async function updateLayoutTitle(_0x1f9c79,_0x4e790b){const _0x47b4b1=_0x2657b6['join'](_0x1f9c79,projectPaths['app']+'/'+files['layout']);if(!existsSync(_0x47b4b1))throw createError(files['layout']+'\x20not\x20found\x20at\x20'+_0x47b4b1+',\x20cannot\x20update\x20title.');let _0x98c251=await promises['readFile'](_0x47b4b1,'utf8');const _0x3ff355=/"SaaS Kit"/g;if(!_0x3ff355['test'](_0x98c251))throw createError('SaaS\x20Kit\x20not\x20found\x20in\x20'+files['layout']+',\x20cannot\x20update\x20title.');_0x98c251=_0x98c251['replace'](_0x3ff355,'\x22'+_0x4e790b+'\x22'),await promises['writeFile'](_0x47b4b1,_0x98c251,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle');async function create(_0xaaa7fe){try{_0xaaa7fe['length']<0x7b2+-0x6b*-0x1b+-0x12fa&&(logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](-0x15b4+0x1*0x13d+0x1478));const _0xcdd775=_0xaaa7fe[0x1f2d+-0xd67+-0x11c6],_0xe07060=_0xaaa7fe['includes']('-r'),_0x46475b=_0x2657b6['resolve'](process['cwd'](),_0xcdd775);logInfoRaw('\x0aCreating\x20'+projectName+'\x20project\x20\x22'+_0xcdd775+'\x22...\x0a');try{checkTargetFolder(_0x46475b),await createNextProject(_0xcdd775,_0x46475b),await copyProjectFiles(_0x46475b),await overridePackageJson(_0x46475b),createAdditionalFolders(_0x46475b),await createEnvFile(_0x46475b),await updateLayoutTitle(_0x46475b,_0xcdd775),await setupEslintConfig(_0x46475b),_0xe07060&&await enableRepoModeExtras(_0x46475b),logInfoRaw('\x0a'+projectName+'\x20project\x20\x22'+_0xcdd775+'\x22\x20is\x20ready!'),logInfoRaw('Next\x20steps:'),logInfoRaw('\x20\x20cd\x20'+_0xcdd775),logInfoRaw('\x20\x20npm\x20run\x20prod'),logInfoRaw('\x20\x20npm\x20start');}catch(_0x4c1a64){const _0x3b0c32=_0x4c1a64 instanceof Error?_0x4c1a64['message']:'Unknown\x20error';logStringError('Error:'),logStringError(_0x3b0c32),existsSync(_0x46475b)&&(logInfoRaw('Cleaning\x20up...'),rmSync(_0x46475b,{'recursive':!![],'force':!![]})),process['exit'](-0x1ea4+0x241*0x1+-0x2*-0xe32);}}catch(_0x69982d){const _0x21eaeb=_0x69982d instanceof Error?_0x69982d['message']:'Unknown\x20error';logStringError('Unhandled\x20error:'),logStringError(_0x21eaeb),process['exit'](0x2392+-0x8b1*-0x1+-0x2c42);}}__name(create,'create');
26
+ var __defProp=Object['defineProperty'],__name=(_0x35a55e,_0x1aa8fa)=>__defProp(_0x35a55e,'name',{'value':_0x1aa8fa,'configurable':!![]});const lifecycleStatuses={'created':commonStatuses['created']};const requiredNodeVersion='v20.0.0';_0x5aab02['version']<requiredNodeVersion&&(logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),_0x5aab02['exit'](0xf1d*0x1+0x3aa*-0x4+-0x2*0x3a));const filename=fileURLToPath(import.meta.url),binDir=_0x13ceb0['dirname'](filename),repoRoot=_0x13ceb0['resolve'](binDir,sourceDir),envLocalPath=_0x13ceb0['join'](binDir,sourceDir+folders['cli']+'/'+files['envExample']),envTemplate=_0x130630['readFileSync'](envLocalPath,'utf8'),cliPackageTemplate=folders['cli']+'/'+files['packageTemplate'],gitIgnoreTemplate=folders['cli']+'/'+folders['templates']+'/gitignore-template',foldersToIgnore=[nonRootProjectPaths['cliConstants'],cliPackageTemplate,folders['cli']+'/'+files['envExample'],folders['cli']+'/'+folders['bin'],nonRootProjectPaths['cliConfigs'],folders['cli']+'/'+folders['templates']],unknownError=basicErrorMessages['unknownError'],playwright=externalPackageNames['playwright'],project='project';async function create(_0x291588){try{_0x291588['length']<-0xb45+-0x1272+0x1db8&&(logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),_0x5aab02['exit'](-0x1*0x1de7+0x7cf+0x1619));const _0x4a3fa9=first(_0x291588),_0xd4ac04=_0x291588['includes'](gitCommandTokens['dashR']),_0x50cdeb=await shouldInstallPlaywright(_0xd4ac04),_0x1325f6=await shouldUsePreCommit(),_0x4c9805=_0x13ceb0['resolve'](_0x5aab02['cwd'](),_0x4a3fa9);logInfoRaw('\x0aCreating\x20'+projectName+'\x20'+project+'\x20\x22'+_0x4a3fa9+'\x22...\x0a');try{checkTargetFolder(_0x4c9805),await createNextProject(_0x4a3fa9,_0x4c9805),await copyProjectFiles(_0x4c9805),await overridePackageJson(_0x4c9805,_0x50cdeb);!_0x50cdeb&&await removePlaywrightArtifacts(_0x4c9805);runCommandWithArgs('npm',['install'],_0x4c9805),createAdditionalFolders(_0x4c9805),await createEnvFile(_0x4c9805),await updateLayoutTitle(_0x4c9805,_0x4a3fa9),await setupEslintConfig(_0x4c9805);_0xd4ac04&&await enableRepoModeExtras(_0x4c9805,_0x1325f6);await normalizeLineEndings(_0x4c9805);const _0x7f3b90='0-initial-commit';runCommandWithArgs(commandNames['git'],[gitCommandTokens['add'],'.'],_0x4c9805),runCommandWithArgs(commandNames['git'],['commit','-m',_0x7f3b90],_0x4c9805),logInfoRaw(_0x7f3b90+'\x20'+lifecycleStatuses['created']+'!'),logInfoRaw('\x0a'+projectName+'\x20'+project+'\x20\x22'+_0x4a3fa9+'\x22\x20is\x20ready!'),logInfoRaw('Next\x20steps:'),logInfoRaw('\x20\x20cd\x20'+_0x4a3fa9),logInfoRaw('\x20\x20npm\x20run\x20start');}catch(_0x2b731d){const _0x971657=_0x2b731d instanceof Error?_0x2b731d['message']:unknownError;logStringError('Error:'),logStringError(_0x971657),existsSync(_0x4c9805)&&(logInfoRaw('Cleaning\x20up...'),rmSync(_0x4c9805,{'recursive':!![],'force':!![]})),_0x5aab02['exit'](0x172d+-0x484+-0x12a8);}}catch(_0x3e37a2){const _0x271bb6=_0x3e37a2 instanceof Error?_0x3e37a2['message']:unknownError;logStringError('Unhandled\x20error:'),logStringError(_0x271bb6),_0x5aab02['exit'](0x2*0xe10+-0x2*-0x509+-0x2631);}}__name(create,'create');function runCommand(_0x4b6be6,_0x13c9de){logInfoRaw('Executing:\x20'+_0x4b6be6);try{execSync(_0x4b6be6,{'stdio':stdioStatuses['inherit'],'cwd':_0x13c9de??_0x5aab02['cwd']()});}catch(_0xdae765){const _0x5639af=_0xdae765 instanceof Error?_0xdae765['message']:unknownError;logStringError('Error\x20executing:\x20'+_0x4b6be6),logStringError(_0x5639af),_0x5aab02['exit'](0x1*-0x22b1+0x19b1*0x1+0x901);}}__name(runCommand,'runCommand');function runCommandWithArgs(_0x24c50c,_0x417524,_0x81fc06){const _0x139825=_0x24c50c+'\x20'+_0x417524['join']('\x20'),_0x3830b5=_0x81fc06??_0x5aab02['cwd']();logInfoRaw('Executing:\x20'+_0x139825);try{execFileSync(_0x24c50c,_0x417524,{'stdio':stdioStatuses['inherit'],'cwd':_0x3830b5});}catch(_0x3d0478){logStringError('Error\x20executing:\x20'+_0x139825),logStringError(_0x3d0478 instanceof Error?_0x3d0478['message']:unknownError),_0x5aab02['exit'](-0x106*-0x5+0x28f*-0x1+0x1*-0x28e);}}__name(runCommandWithArgs,'runCommandWithArgs');function checkTargetFolder(_0x14e75f){existsSync(_0x14e75f)&&(logStringError('Error:\x20Folder\x20\x22'+_0x13ceb0['basename'](_0x14e75f)+'\x22\x20already\x20exists.'),_0x5aab02['exit'](-0x1c79+-0x1*0x55d+-0x21d7*-0x1));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x53b907=_0x13ceb0['resolve'](repoRoot,files['packageJson']),_0x35da6f=JSON['parse'](_0x130630['readFileSync'](_0x53b907,'utf-8')),_0x145991=_0x35da6f['devDependencies']?.[externalPackageNames['next']]??_0x35da6f['dependencies']?.[externalPackageNames['next']];return ensureString(_0x145991??ecmaVersion);}__name(getCreateNextAppVersion,'getCreateNextAppVersion');async function createNextProject(_0x1aafe0,_0x44f9ae){logInfoRaw('Creating\x20Next.js\x20project...');const _0x407896=getCreateNextAppVersion(),_0x493217=['npx\x20--yes\x20create-next-app@'+_0x407896+'\x20\x22'+_0x1aafe0+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git','--react-compiler','--agents','--ts','--agents-md']['join']('\x20');runCommand(_0x493217,_0x13ceb0['dirname'](_0x44f9ae)),logInfoRaw('Next.js\x20'+project+'\x20'+lifecycleStatuses['created']+'!');const _0x9b2a5a=_0x13ceb0['join'](_0x44f9ae,'next.config.ts'),_0x38bd61=_0x13ceb0['join'](_0x44f9ae,folders['public']);await promises['rm'](_0x9b2a5a,{'force':!![]}),logInfoRaw('Removed\x20default\x20next.config.ts'),await promises['rm'](_0x38bd61,{'recursive':!![],'force':!![]}),logInfoRaw('Removed\x20default\x20public\x20folder'),await promises['mkdir'](_0x38bd61);}__name(createNextProject,'createNextProject');async function createEnvFile(_0x306f96){logInfoRaw('Creating\x20'+files['dotEnv']+'\x20file\x20with\x20default\x20values...');const _0x1b09e7=_0x13ceb0['join'](_0x306f96,files['dotEnv']);try{await promises['writeFile'](_0x1b09e7,envTemplate,'utf8'),logInfoRaw(files['dotEnv']+'\x20file\x20created\x20with\x20values!');}catch(_0x1db1e7){const _0xdb461b=_0x1db1e7 instanceof Error?_0x1db1e7['message']:unknownError;logStringError('Error\x20creating\x20'+files['dotEnv']+'\x20file:'),logStringError(_0xdb461b);throw _0x1db1e7;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x23d7e8,_0x3c87b8){const _0x54d2fe=_0x13ceb0['join'](_0x23d7e8,files['packageJson']),_0x279300=_0x13ceb0['join'](repoRoot,cliPackageTemplate);try{const _0x1348a9=JSON['parse'](await promises['readFile'](_0x54d2fe,'utf8')),_0x383fe2=_0x1348a9['name'],_0x5e6699=JSON['parse'](await promises['readFile'](_0x279300,'utf8')),_0x10ceb9={..._0x5e6699,'name':_0x383fe2};!_0x3c87b8&&_0x10ceb9['devDependencies']&&delete _0x10ceb9['devDependencies'][playwright],await promises['writeFile'](_0x54d2fe,JSON['stringify'](_0x10ceb9,void(0x1fe7+0xbf*-0x29+-0x2*0xa8),-0xe1e+0xff+0xd21)+'\x0a','utf8');}catch(_0x5146e1){const _0xf56788=_0x5146e1 instanceof Error?_0x5146e1['message']:unknownError;logStringError('Error\x20overriding\x20'+files['packageJson']+':'),logStringError(_0xf56788);throw _0x5146e1;}}__name(overridePackageJson,'overridePackageJson');async function shouldInstallPlaywright(_0x4962ae){let _0x280e3f=![];if(_0x4962ae)_0x280e3f=!![];else {if(!_0x5aab02['stdin']['isTTY'])logInfoRaw('No\x20interactive\x20terminal\x20detected;\x20skipping\x20Playwright\x20setup.');else {const _0x1b2539=createInterface({'input':_0x5aab02['stdin'],'output':_0x5aab02['stdout']});try{const _0x3aec0a=await _0x1b2539['question']('Install\x20Playwright?\x20(y/N):\x20');_0x280e3f=/^y(es)?$/i['test'](_0x3aec0a['trim']());}finally{_0x1b2539['close']();}}}return _0x280e3f;}__name(shouldInstallPlaywright,'shouldInstallPlaywright');async function shouldUsePreCommit(){let _0x3487f5=![];if(!_0x5aab02['stdin']['isTTY'])logInfoRaw('No\x20interactive\x20terminal\x20detected;\x20skipping\x20pre-commit\x20setup.');else {const _0x1557e9=createInterface({'input':_0x5aab02['stdin'],'output':_0x5aab02['stdout']});try{const _0x3e5abe=await _0x1557e9['question']('Set\x20up\x20pre-commit?\x20(y/N):\x20');_0x3487f5=/^y(es)?$/i['test'](_0x3e5abe['trim']());}finally{_0x1557e9['close']();}}return _0x3487f5;}__name(shouldUsePreCommit,'shouldUsePreCommit');async function removePlaywrightArtifacts(_0x4bf593){const _0x4c87b2=_0x13ceb0['join'](_0x4bf593,files['playwrightConfig']),_0x1ee911=_0x13ceb0['join'](_0x4bf593,folders['configs'],playwright+'-cli-config.ts'),_0x443dd7=_0x13ceb0['join'](_0x4bf593,folders['test']);await promises['rm'](_0x4c87b2,{'force':!![]}),await promises['rm'](_0x1ee911,{'force':!![]}),await promises['rm'](_0x443dd7,{'recursive':!![],'force':!![]});}__name(removePlaywrightArtifacts,'removePlaywrightArtifacts');function replaceImports(_0x30b4fb){const _0x1d9a2d=/(import\s+)([^'"]+)(\s+from\s+["'])([^"']+)(["'])/g,_0x3cf923=['@schemas/schema','@schemas/meta/crud-handler-map','@/app/init-saas-kit','@/app/http-wrappers'];return _0x30b4fb['replace'](_0x1d9a2d,(_0x3fd9ec,_0x24eb08,_0x50c121,_0x3f21b4,_0x26cf96,_0x1434b4)=>{if(!_0x26cf96['startsWith'](aliasSymbols['atSign'])||_0x26cf96['startsWith'](npmPackages['saasKit']))return _0x3fd9ec;if(_0x3cf923['includes'](_0x26cf96))return _0x3fd9ec;let _0x12859b;_0x26cf96['startsWith'](aliasSymbols['atSign']+folders['server'])||_0x26cf96['includes'](nonRootProjectPaths['server'])?_0x12859b=npmPackages['saasKitServer']:_0x12859b=npmPackages['saasKit'];let _0x5b45ee=_0x50c121['trim']();const _0x5404c4=/^type\b/['test'](_0x5b45ee),_0x3de73d=/^\*\s+as\s+/['test'](_0x5b45ee);return !_0x5404c4&&!_0x3de73d&&!_0x5b45ee['startsWith']('{')&&(_0x5b45ee='{\x20'+_0x5b45ee+'\x20}'),''+_0x24eb08+_0x5b45ee+_0x3f21b4+_0x12859b+_0x1434b4;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x113aaf){logInfoRaw('Copying\x20'+projectName+'\x20files...');for(const _0x3fea43 of allFilesToCopy){const _0x40654c=_0x3fea43===files['gitIgnore']?gitIgnoreTemplate:folders['cli']+'/'+_0x3fea43,_0x3b772c=_0x13ceb0['join'](repoRoot,_0x40654c),_0x509b4d=replaceToolsFolder(_0x3fea43),_0x35e160=_0x13ceb0['join'](_0x113aaf,_0x509b4d);if(existsSync(_0x3b772c)){const _0x45d6ff=await promises['stat'](_0x3b772c);_0x45d6ff['isDirectory']()?await copyDirectoryContents(_0x3b772c,_0x35e160):await copyAndProcessFile(_0x3b772c,_0x35e160);}else logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0x40654c);}logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0x353dac){let _0x219e62=_0x353dac;for(const [_0x5d4dd2,_0x34666d]of Object['entries'](toolsFoldersToReplace)){if(_0x219e62['startsWith'](_0x5d4dd2)&&isWithIndexer(_0x34666d)){const _0x51d907=_0x34666d;for(const _0x5efd64 in _0x51d907){const _0x519e8d=_0x51d907[_0x5efd64];isString(_0x519e8d)&&(_0x219e62=_0x219e62['replace'](_0x5efd64,_0x519e8d));}break;}}return _0x219e62;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x33be3c,_0x2f6288,_0x231fac=![]){const _0x1c93c1=_0x13ceb0['relative'](repoRoot,_0x33be3c)['replace'](/\\/g,'/'),_0x1c1ac0=foldersToIgnore['map'](_0x30ce40=>_0x30ce40['replace'](/\\/g,'/'));if(_0x1c1ac0['includes'](_0x1c93c1))return !![];if(_0x231fac){const _0x3b585e=_0x13ceb0['relative'](_0x2f6288,_0x33be3c)['replace'](/\\/g,'/'),_0x3c03b3=_0x3b585e['split']('/');return _0x1c1ac0['some'](_0x364f5d=>_0x3c03b3['some'](_0x3de3d5=>_0x3de3d5===_0x364f5d));}return ![];}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x11ecb8,_0x2b131d){!existsSync(_0x2b131d)&&mkdirSync(_0x2b131d,{'recursive':!![]});try{const _0x1cbe8c=await promises['readdir'](_0x11ecb8,{'withFileTypes':!![]});for(const _0x3d5cc5 of _0x1cbe8c){const _0x5f0037=_0x13ceb0['join'](_0x11ecb8,_0x3d5cc5['name']),_0x4565c7=_0x13ceb0['join'](_0x2b131d,_0x3d5cc5['name']);!shouldIgnorePath(_0x5f0037,_0x11ecb8,_0x3d5cc5['isDirectory']())&&(_0x3d5cc5['isDirectory']()?await copyDirectoryContents(_0x5f0037,_0x4565c7):await copyAndProcessFile(_0x5f0037,_0x4565c7));}}catch(_0xe52386){const _0x439cb8=_0xe52386 instanceof Error?_0xe52386['message']:unknownError;logStringError('Error\x20reading\x20directory\x20'+_0x11ecb8+':\x20'+_0x439cb8);throw _0xe52386;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x50e33f,_0x4f63e2){const _0x5432c5=_0x13ceb0['dirname'](_0x4f63e2);!existsSync(_0x5432c5)&&mkdirSync(_0x5432c5,{'recursive':!![]});const _0x4cbae3=await promises['stat'](_0x50e33f);if(_0x4cbae3['isDirectory']())await copyDirectoryContents(_0x50e33f,_0x4f63e2);else {const _0x47bdf2=_0x13ceb0['extname'](_0x50e33f)['toLowerCase'](),_0x5edcfa=[fileExtensions['ico'],fileExtensions['png'],fileExtensions['jpg'],fileExtensions['jpeg'],fileExtensions['webp'],fileExtensions['gif'],fileExtensions['svg'],'.pdf'];if(_0x5edcfa['includes'](_0x47bdf2)){await promises['copyFile'](_0x50e33f,_0x4f63e2);return;}const _0x50bf72=await promises['readFile'](_0x50e33f,'utf8'),_0x4c7170=replaceImports(_0x50bf72);await promises['writeFile'](_0x4f63e2,_0x4c7170,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x4c3c96){for(const _0x231972 of additionalFoldersToCreate){const _0x5dd41f=_0x13ceb0['join'](_0x4c3c96,_0x231972);!existsSync(_0x5dd41f)&&(mkdirSync(_0x5dd41f,{'recursive':!![]}),logInfoRaw('Created\x20folder:\x20'+_0x231972));}logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function setupPreCommitHooks(_0x5d5573){const _0x5ef082=_0x13ceb0['join'](_0x5d5573,folders['husky']),_0x1caf4b=_0x13ceb0['join'](_0x5ef082,files['preCommit']),_0x2ebba2=_0x13ceb0['join'](_0x5ef082,files['commitMsg']);mkdirSync(_0x5ef082,{'recursive':!![]}),await promises['writeFile'](_0x1caf4b,cliScripts['preCommit'],'utf8'),await promises['writeFile'](_0x2ebba2,cliScripts['commitMsg'],'utf8'),runCommand(cliScripts['chmodPreCommit'],_0x5d5573),runCommand(cliScripts['chmodCommitMsg'],_0x5d5573);}__name(setupPreCommitHooks,'setupPreCommitHooks');async function setupEslintConfig(_0x4fffe1){const _0x2273f0=_0x13ceb0['join'](_0x4fffe1,files['eslintConfigMjs']);existsSync(_0x2273f0)&&await promises['rm'](_0x2273f0);const _0x2f9484=_0x13ceb0['join'](_0x4fffe1,files['eslintConfigJs']);await promises['writeFile'](_0x2f9484,cliEslintContent,'utf8');}__name(setupEslintConfig,'setupEslintConfig');async function enableRepoModeExtras(_0x45b8a4,_0x4ea83f){logInfoRaw('Enabling\x20recommendation\x20mode\x20('+gitCommandTokens['dashR']+')...'),runCommand(cliScripts['gitInit'],_0x45b8a4),runCommand(cliScripts['installDevHuskyTsx'],_0x45b8a4),runCommand(cliScripts['setLint'],_0x45b8a4),runCommand(cliScripts['installHusky'],_0x45b8a4),_0x4ea83f&&await setupPreCommitHooks(_0x45b8a4);}__name(enableRepoModeExtras,'enableRepoModeExtras');async function updateLayoutTitle(_0x164573,_0x4ba9f2){const _0x1d5e60=_0x13ceb0['join'](_0x164573,projectPaths['app']+'/'+files['layout']),_0xdf0332='Cannot\x20update\x20title';if(!existsSync(_0x1d5e60))throw createError(files['layout']+'\x20not\x20found\x20at\x20'+_0x1d5e60+',\x20'+_0xdf0332+'.');let _0x3fffd7=await promises['readFile'](_0x1d5e60,'utf8');const _0x366c0d=/title: projectName,/g;if(!_0x366c0d['test'](_0x3fffd7))throw createError('projectName\x20not\x20found\x20in\x20'+files['layout']+',\x20'+_0xdf0332+'.');_0x3fffd7=_0x3fffd7['replace'](_0x366c0d,'title:\x20\x22'+_0x4ba9f2+'\x22,'),_0x3fffd7=_0x3fffd7['replace'](/import\s*{\s*projectName\s*}\s*from\s*["'][^"']+["'];?\s*\n?/g,''),await promises['writeFile'](_0x1d5e60,_0x3fffd7,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle');async function normalizeLineEndings(_0x3e404e){if(_0xf9d3e8['platform']()!==nodeOsPlatforms['win32'])return;const _0x87f5e7=[fileExtensions['ts'],fileExtensions['tsx'],fileExtensions['js'],fileExtensions['json'],fileExtensions['css'],files['dotEnv'],fileExtensions['md'],fileExtensions['mjs']],_0x1ecb78=[_0x3e404e];while(_0x1ecb78['length']>0x1303*0x2+0x1*-0xce1+-0x1925){const _0x479369=_0x1ecb78['pop'](),_0x341897=await promises['readdir'](_0x479369,{'withFileTypes':!![]});for(const _0x334b2e of _0x341897){const _0x1d442c=_0x13ceb0['join'](_0x479369,_0x334b2e['name']);if(_0x334b2e['isDirectory']())_0x1ecb78['push'](_0x1d442c);else {const _0x461d8e=_0x13ceb0['extname'](_0x1d442c)['toLowerCase']();if(_0x87f5e7['includes'](_0x461d8e)&&existsSync(_0x1d442c)){const _0xd08250=await promises['readFile'](_0x1d442c,'utf8'),_0x45aa98=_0xd08250['replace'](/\r?\n/g,'\x0d\x0a');await promises['writeFile'](_0x1d442c,_0x45aa98,'utf8');}}}}}__name(normalizeLineEndings,'normalizeLineEndings');
19
27
 
20
- export { create };
28
+ export { create, lifecycleStatuses };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  import { npmPackages } from '../../../base-repo/constants/packages.js';
3
3
 
4
- const cliScripts={'preCommit':'npx\x20tsx\x20node_modules/@fernir2/saas-kit/packages/base-repo/tools/git/pre-commit-script.ts','commitMsg':'npx\x20tsx\x20node_modules/@fernir2/saas-kit/packages/base-repo/tools/git/commit-msg-script.ts\x20\x22$1\x22','chmodPreCommit':'chmod\x20+x\x20.husky/pre-commit','chmodCommitMsg':'chmod\x20+x\x20.husky/commit-msg','gitInit':'git\x20init','installDevHuskyTsx':'npm\x20install\x20-D\x20husky\x20tsx','setLint':'npm\x20pkg\x20set\x20scripts.lint=\x22eslint\x20.\x22','installHusky':'npx\x20husky\x20install'};const cliEslintContent='\x0aimport\x20{\x20baseConfig\x20}\x20from\x20\x22'+npmPackages['saasKitFlint']+'\x22;\x0aimport\x20{\x20defineConfig\x20}\x20from\x20\x22eslint/config\x22;\x0a\x0aexport\x20default\x20defineConfig([...baseConfig]);\x0a\x20\x20\x20\x20';
4
+ const cliScripts={'preCommit':'npx\x20tsx\x20node_modules/@fernir2/saas-kit/packages/infra/tools/git/pre-commit-script.js','commitMsg':'npx\x20tsx\x20node_modules/@fernir2/saas-kit/packages/infra/tools/git/commit-msg-script.js\x20\x22$1\x22','chmodPreCommit':'chmod\x20+x\x20.husky/pre-commit','chmodCommitMsg':'chmod\x20+x\x20.husky/commit-msg','gitInit':'git\x20init','installDevHuskyTsx':'npm\x20install\x20-D\x20husky\x20tsx','setLint':'npm\x20pkg\x20set\x20scripts.lint=\x22eslint\x20.\x22','installHusky':'npx\x20husky\x20init'};const cliEslintContent='\x0aimport\x20{\x20baseConfig\x20}\x20from\x20\x22'+npmPackages['saasKitFlint']+'\x22;\x0aimport\x20{\x20defineConfig\x20}\x20from\x20\x22eslint/config\x22;\x0a\x0aexport\x20default\x20defineConfig([...baseConfig]);\x0a\x20\x20\x20\x20';
5
5
 
6
6
  export { cliEslintContent, cliScripts };
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+ import { projectPaths, files } from '../../../base-repo/app-constants/project-paths.js';
3
+
4
+ var __defProp=Object['defineProperty'],__name=(_0x53e61d,_0x1513d8)=>__defProp(_0x53e61d,'name',{'value':_0x1513d8,'configurable':!![]});function normalizePathForRollUpCopy(_0x22ae6b){return _0x22ae6b['replace'](/\/\(([^)]+)\)\//g,'/[(]$1[)]/');}__name(normalizePathForRollUpCopy,'normalizePathForRollUpCopy');const pageFilesToCopy=[projectPaths['f']+'/\x5c(not-signed-in\x5c)',projectPaths['f']+'/\x5c(signed-in\x5c)',projectPaths['f']+'/api-docs'];const filesToCopy=[''];const rootFilesToCopy=[files['gitIgnore'],'postcss.config.mjs',files['prettierIgnore'],'.prettierrc.json',files['serverTs']];const appFilesToCopy=[projectPaths['app']+'/favicon.ico',projectPaths['app']+'/globals.css',projectPaths['app']+'/layout.tsx',projectPaths['app']+'/page.tsx',projectPaths['app']+'/http-wrappers.ts',projectPaths['app']+'/init-saas-kit.ts'];const apiRoutesToCopy=[projectPaths['apiV1F']+'/searchable-resources/route.ts',projectPaths['apiV1F']+'/search-result/route.ts',projectPaths['apiV1F']+'/workspace/change/route.ts',projectPaths['apiV1F']+'/visible-workspace/route.ts',projectPaths['apiV1F']+'/user-permission/route.ts',projectPaths['apiV1F']+'/user-feature/isenabled/route.ts',projectPaths['apiV1F']+'/uimetas/route.ts',projectPaths['apiV1F']+'/uimeta/route.ts',projectPaths['apiV1F']+'/subscription/update/route.ts',projectPaths['apiV1F']+'/subscription/create/route.ts',projectPaths['apiV1F']+'/subscription/cancel/route.ts',projectPaths['apiV1F']+'/sign-up/route.ts',projectPaths['apiV1F']+'/sign-out/route.ts',projectPaths['apiV1F']+'/sign-in/route.ts',projectPaths['apiV1F']+'/payment/route.ts',projectPaths['apiV1F']+'/payment/verify-success/route.ts',projectPaths['apiV1F']+'/payment/verify-fail/route.ts',projectPaths['apiV1F']+'/payment/method/route.ts',projectPaths['apiV1F']+'/password/reset-password/route.ts',projectPaths['apiV1F']+'/password/forgot-password/route.ts',projectPaths['apiV1F']+'/other-user/route.ts',projectPaths['apiV1F']+'/other-user/[id]/route.ts',projectPaths['apiV1F']+'/log/route.ts',projectPaths['apiV1F']+'/blob/route.ts',projectPaths['apiV1F']+'/[resourceName]/route.ts',projectPaths['apiV1F']+'/[resourceName]/upsert/route.ts',projectPaths['apiV1F']+'/[resourceName]/[id]/route.ts',projectPaths['apiV1F']+'/markdown/route.ts'];const allFilesToCopy=[...filesToCopy,...rootFilesToCopy,...appFilesToCopy,...apiRoutesToCopy];
5
+
6
+ export { allFilesToCopy, apiRoutesToCopy, appFilesToCopy, filesToCopy, normalizePathForRollUpCopy, pageFilesToCopy, rootFilesToCopy };
package/package.json CHANGED
@@ -1,26 +1,28 @@
1
1
  {
2
2
  "name": "@fernir2/saas-kit-cli",
3
- "version": "0.1.39",
3
+ "version": "0.1.41",
4
4
  "description": "CLI for creating saas-kit apps",
5
5
  "bin": {
6
6
  "saaskitcli": "./level2/cli/bin/index.js"
7
7
  },
8
8
  "dependencies": {
9
- "@aws-sdk/client-s3": "3.879.0",
9
+ "@ai-sdk/deepinfra": "2.0.22",
10
+ "@ai-sdk/google": "3.0.29",
11
+ "@ai-sdk/groq": "3.0.16",
12
+ "@ai-sdk/react": "3.0.50",
13
+ "@aws-sdk/client-s3": "3.1036.0",
14
+ "@base-ui/react": "1.1.0",
10
15
  "@dnd-kit/core": "6.3.1",
11
- "@docusaurus/core": "3.8.1",
12
- "@docusaurus/plugin-content-docs": "3.8.1",
13
- "@docusaurus/preset-classic": "3.8.1",
14
- "@docusaurus/tsconfig": "3.8.1",
16
+ "@docusaurus/core": "3.10.0",
17
+ "@docusaurus/plugin-content-docs": "3.10.0",
18
+ "@docusaurus/preset-classic": "3.10.0",
19
+ "@docusaurus/tsconfig": "3.10.0",
15
20
  "@gitbeaker/rest": "42.5.0",
16
- "@googleapis/sheets": "9.8.0",
21
+ "@googleapis/sheets": "13.0.1",
17
22
  "@hookform/resolvers": "3.10.0",
18
23
  "@libsql/client": "0.15.15",
19
- "@next/eslint-plugin-next": "16.1.1",
24
+ "@next/eslint-plugin-next": "16.2.1",
20
25
  "@node-rs/argon2": "2.0.2",
21
- "@nx/s3-cache": "5.0.0",
22
- "@pulumi/kubernetes": "4.23.0",
23
- "@pulumi/pulumi": "3.204.0",
24
26
  "@radix-ui/react-avatar": "1.1.10",
25
27
  "@radix-ui/react-checkbox": "1.3.3",
26
28
  "@radix-ui/react-collapsible": "1.1.12",
@@ -30,22 +32,17 @@
30
32
  "@radix-ui/react-popover": "1.1.15",
31
33
  "@radix-ui/react-radio-group": "1.3.8",
32
34
  "@radix-ui/react-select": "2.2.6",
33
- "@radix-ui/react-separator": "1.1.7",
34
35
  "@radix-ui/react-slot": "1.2.3",
35
36
  "@radix-ui/react-switch": "1.2.6",
36
37
  "@radix-ui/react-tabs": "1.1.13",
37
38
  "@radix-ui/react-tooltip": "1.2.8",
38
39
  "@react-oauth/google": "0.12.2",
39
- "@rollup/plugin-alias": "5.1.1",
40
- "@rollup/plugin-commonjs": "28.0.6",
41
- "@rollup/plugin-json": "6.1.0",
42
- "@rollup/plugin-node-resolve": "16.0.3",
43
40
  "@stripe/react-stripe-js": "3.9.2",
44
41
  "@stripe/stripe-js": "4.10.0",
45
- "@t3-oss/env-nextjs": "0.13.8",
46
42
  "@typescript-eslint/utils": "8.43.0",
43
+ "ai": "6.0.48",
47
44
  "arctic": "1.9.2",
48
- "cheerio": "1.1.2",
45
+ "cheerio": "1.2.0",
49
46
  "class-variance-authority": "0.7.1",
50
47
  "clsx": "2.1.1",
51
48
  "cmdk": "1.1.1",
@@ -53,9 +50,8 @@
53
50
  "date-fns": "3.6.0",
54
51
  "dayjs": "1.11.18",
55
52
  "dotenv": "16.5.0",
56
- "drizzle-orm": "0.36.4",
53
+ "drizzle-orm": "0.45.2",
57
54
  "esbuild": "0.25.9",
58
- "geist": "1.4.2",
59
55
  "groq-sdk": "0.9.1",
60
56
  "ioredis": "5.7.0",
61
57
  "istanbul-lib-coverage": "3.2.2",
@@ -68,34 +64,32 @@
68
64
  "lru-cache": "11.1.0",
69
65
  "lucide-react": "0.503.0",
70
66
  "module-alias": "2.2.3",
71
- "next": "16.1.1",
72
- "nodemailer": "6.10.1",
67
+ "next": "16.2.4",
68
+ "nodemailer": "8.0.5",
73
69
  "pg-boss": "10.3.2",
74
- "plaid": "30.1.0",
75
- "playwright": "1.52.0",
70
+ "plaid": "42.1.0",
71
+ "playwright": "1.59.1",
76
72
  "pluralize": "8.0.0",
77
73
  "postgres": "3.4.7",
78
74
  "prism-react-renderer": "2.4.1",
79
75
  "quill": "2.0.3",
80
- "react": "19.2.3",
76
+ "react": "19.2.4",
81
77
  "react-colorful": "5.6.1",
82
78
  "react-day-picker": "9.11.1",
83
- "react-dom": "19.2.3",
79
+ "react-dom": "19.2.4",
84
80
  "react-grid-layout": "1.5.2",
85
81
  "react-hook-form": "7.62.0",
86
82
  "react-resizable-panels": "2.1.9",
87
83
  "recharts": "2.15.4",
88
- "rollup": "4.50.0",
89
- "rollup-obfuscator": "4.1.1",
84
+ "rollup": "4.60.2",
90
85
  "rollup-plugin-esbuild": "6.2.1",
91
86
  "rollup-plugin-obfuscator": "1.1.0",
92
- "rollup-plugin-postcss": "4.0.2",
93
87
  "rollup-plugin-typescript-paths": "1.5.0",
94
88
  "screenshotone-api-sdk": "1.1.21",
95
89
  "sharp": "0.33.5",
96
- "simple-git": "3.28.0",
97
- "socket.io": "4.8.1",
98
- "socket.io-client": "4.8.1",
90
+ "simple-git": "3.33.0",
91
+ "socket.io": "4.8.3",
92
+ "socket.io-client": "4.8.3",
99
93
  "sonner": "2.0.7",
100
94
  "stripe": "16.12.0",
101
95
  "tailwind-merge": "3.3.1",
@@ -104,24 +98,19 @@
104
98
  "ts-prune": "0.10.3",
105
99
  "tslib": "2.8.1",
106
100
  "tsx": "4.20.5",
107
- "uuid": "10.0.0",
101
+ "uuid": "14.0.0",
108
102
  "v8-to-istanbul": "9.3.0",
109
- "webpack": "5.101.3",
103
+ "webpack": "5.106.2",
110
104
  "zod": "3.25.76"
111
105
  },
112
106
  "devDependencies": {
113
- "@docusaurus/module-type-aliases": "3.8.1",
114
- "@docusaurus/types": "3.8.1",
107
+ "@docusaurus/module-type-aliases": "3.10.0",
108
+ "@docusaurus/types": "3.10.0",
115
109
  "@eslint-stylistic/metadata": "5.3.1",
116
110
  "@eslint/eslintrc": "3.3.1",
117
111
  "@eslint/js": "9.35.0",
118
112
  "@mdx-js/react": "3.1.1",
119
- "@nx/eslint": "22.3.3",
120
- "@nx/js": "22.3.3",
121
- "@nx/next": "22.3.3",
122
- "@rollup/plugin-babel": "6.1.0",
123
- "@rollup/plugin-terser": "0.4.4",
124
- "@rollup/plugin-typescript": "12.1.4",
113
+ "@rollup/plugin-babel": "7.0.0",
125
114
  "@stylistic/eslint-plugin": "5.3.1",
126
115
  "@stylistic/eslint-plugin-jsx": "4.4.1",
127
116
  "@tailwindcss/postcss": "4.1.16",
@@ -134,10 +123,10 @@
134
123
  "@types/lodash.debounce": "4.0.9",
135
124
  "@types/lodash.isequal": "4.5.8",
136
125
  "@types/lru-cache": "7.10.10",
137
- "@types/node": "24.5.2",
138
- "@types/nodemailer": "6.4.19",
126
+ "@types/node": "24.12.2",
127
+ "@types/nodemailer": "8.0.0",
139
128
  "@types/pluralize": "0.0.33",
140
- "@types/react": "19.2.7",
129
+ "@types/react": "19.2.14",
141
130
  "@types/react-dom": "19.2.3",
142
131
  "@types/react-grid-layout": "1.3.5",
143
132
  "@types/swagger-ui-react": "5.18.0",
@@ -151,9 +140,10 @@
151
140
  "cli-table3": "0.6.5",
152
141
  "commander": "14.0.0",
153
142
  "cross-env": "7.0.3",
154
- "drizzle-kit": "0.28.1",
143
+ "discord.js": "14.26.3",
144
+ "drizzle-kit": "0.31.10",
155
145
  "eslint": "9.35.0",
156
- "eslint-config-next": "16.1.1",
146
+ "eslint-config-next": "16.2.1",
157
147
  "eslint-config-prettier": "10.1.8",
158
148
  "eslint-import-resolver-typescript": "4.4.4",
159
149
  "eslint-plugin-github": "6.0.0",
@@ -168,23 +158,26 @@
168
158
  "eslint-plugin-sonarjs": "3.0.5",
169
159
  "globby": "16.0.0",
170
160
  "husky": "9.1.7",
171
- "nx": "22.3.3",
172
161
  "postcss": "8.5.6",
173
162
  "prettier": "3.6.2",
174
163
  "prettier-plugin-tailwindcss": "0.7.1",
175
164
  "raw-loader": "4.0.2",
176
165
  "rollup-plugin-copy": "3.5.0",
177
- "rollup-plugin-delete": "2.2.0",
178
- "rollup-plugin-dts": "6.2.3",
179
166
  "rollup-preserve-directives": "1.1.3",
180
- "swagger-ui": "5.29.5",
181
- "swagger-ui-react": "5.29.5",
167
+ "swagger-ui": "5.32.4",
168
+ "swagger-ui-react": "5.32.4",
182
169
  "tailwindcss": "4.1.17",
183
170
  "ts-node": "10.9.2",
184
- "typedoc": "0.28.12",
185
- "typedoc-plugin-markdown": "4.8.1",
171
+ "typedoc": "0.28.19",
172
+ "typedoc-plugin-markdown": "4.11.0",
186
173
  "typescript": "5.9.2",
187
- "typescript-eslint": "8.36.0"
174
+ "typescript-eslint": "8.59.0",
175
+ "@pulumi/kubernetes": "4.23.0",
176
+ "@pulumi/pulumi": "3.232.0",
177
+ "@pulumi/command": "1.2.1",
178
+ "@muhlba91/pulumi-proxmoxve": "7.13.0",
179
+ "bcrypt": "6.0.0",
180
+ "@types/bcrypt": "6.0.0"
188
181
  },
189
182
  "type": "module"
190
183
  }
@@ -1,6 +0,0 @@
1
- 'use strict';
2
- 'use strict';
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','db':'@db'};
5
-
6
- exports.aliases = aliases;
@@ -1,8 +0,0 @@
1
- 'use strict';
2
- 'use strict';
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'](([_0x34fbf7,_0xacf5aa])=>[_0x34fbf7+'/*',[_0xacf5aa+'/*']]));
5
-
6
- exports.aliasSymbols = aliasSymbols;
7
- exports.modulePathAliases = modulePathAliases;
8
- exports.typescriptAliases = typescriptAliases;