@fernir2/saas-kit-cli 0.1.40 → 0.1.41-1096

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 (286) 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 +8 -0
  6. package/base-repo/app-constants/project-paths.js +6 -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-cli-constants.js +6 -0
  12. package/base-repo/constants/internal-common-strings.js +4 -0
  13. package/base-repo/constants/internal-extensions.js +6 -0
  14. package/base-repo/constants/packages.js +1 -1
  15. package/base-repo/constants/push-statuses.js +4 -0
  16. package/base-repo/constants/strings-constants.js +4 -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 +635 -453
  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 -57
  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 +23 -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 +23 -0
  93. package/cli/src/app/init-saas-kit.ts +12 -0
  94. package/cli/src/app/layout.tsx +43 -35
  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 -12
  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 +15 -15
  104. package/cli/tsconfig.lint.json +5 -0
  105. package/cli/tsconfig.server.json +4 -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 -3
  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/git/constants/git-constants.js +6 -0
  163. package/level2/cli/bin/index.js +2 -1
  164. package/level2/cli/create/bin/create.js +19 -10
  165. package/level2/npm-commands/build-npm/cli-contents.js +1 -1
  166. package/level2/npm-commands/build-npm/paths.js +6 -0
  167. package/package.json +49 -55
  168. package/base-repo/app-constants/alias-symbols.cjs.js +0 -6
  169. package/base-repo/app-constants/aliases.cjs.js +0 -8
  170. package/base-repo/app-constants/project-paths.cjs.js +0 -17
  171. package/base-repo/constants/create-app-constants.cjs.js +0 -9
  172. package/base-repo/constants/packages.cjs.js +0 -6
  173. package/base-repo/constants/packages.cjs2.js +0 -6
  174. package/base-repo/constants/packages2.js +0 -4
  175. package/cli/public/images/00000000-0000-0000-0000-000000000000.webp +0 -0
  176. package/cli/public/images/login-image-dark.jpg +0 -0
  177. package/cli/public/images/login-image.jpg +0 -0
  178. package/cli/public/images/no-image.png +0 -0
  179. package/cli/public/images/profile.png +0 -0
  180. package/cli/public/images/search-not-found-result.png +0 -0
  181. package/cli/public/images/toolbar-logo.png +0 -0
  182. package/cli/public/images/users/00000000-0000-0000-0000-000000000000.webp +0 -0
  183. package/cli/src/app/api/v1/(f)/preload/route.ts +0 -3
  184. package/cli/src/app/f/(signed-in)/lm/page.tsx +0 -8
  185. package/cli/src/app/f/(signed-in)/preload/page.tsx +0 -8
  186. package/cli/src/app/f/test/feed/page.tsx +0 -8
  187. package/cli/src/app/f/test/file-upload/page.tsx +0 -8
  188. package/cli/src/app/f/test/layout.tsx +0 -5
  189. package/cli/src/app/f/test/page.tsx +0 -8
  190. package/fd-toolbox/api/api-client.cjs.js +0 -19
  191. package/fd-toolbox/api/api-path-names.cjs.js +0 -9
  192. package/fd-toolbox/api/api-paths.cjs.js +0 -9
  193. package/fd-toolbox/api/base-api.cjs.js +0 -22
  194. package/fd-toolbox/auth/login-states.cjs.js +0 -18
  195. package/fd-toolbox/auth/session-storage.cjs.js +0 -12
  196. package/fd-toolbox/auth/tokens.cjs.js +0 -11
  197. package/fd-toolbox/constants/api-constants.cjs.js +0 -26
  198. package/fd-toolbox/constants/api-constants.js +0 -4
  199. package/fd-toolbox/constants/constants.cjs.js +0 -13
  200. package/fd-toolbox/constants/environment-constants.cjs.js +0 -7
  201. package/fd-toolbox/constants/extensions.cjs.js +0 -6
  202. package/fd-toolbox/constants/extensions.js +0 -4
  203. package/fd-toolbox/constants/header-names.cjs.js +0 -7
  204. package/fd-toolbox/constants/http-status-codes.cjs.js +0 -6
  205. package/fd-toolbox/constants/meta-query-params.cjs.js +0 -6
  206. package/fd-toolbox/constants/public-files.cjs.js +0 -14
  207. package/fd-toolbox/constants/representations.cjs.js +0 -6
  208. package/fd-toolbox/constants/representations.js +0 -4
  209. package/fd-toolbox/enums/enums.cjs.js +0 -26
  210. package/fd-toolbox/errors/error-handler.cjs.js +0 -10
  211. package/fd-toolbox/errors/error-statuses.cjs.js +0 -6
  212. package/fd-toolbox/errors/errors.cjs.js +0 -6
  213. package/fd-toolbox/errors/problem-details.cjs.js +0 -8
  214. package/fd-toolbox/functions/value-checking-functions.cjs.js +0 -10
  215. package/fd-toolbox/http/http-constants.cjs.js +0 -7
  216. package/fd-toolbox/http/http-constants.js +0 -4
  217. package/fd-toolbox/http/url/urls.cjs.js +0 -9
  218. package/fd-toolbox/infra/env-config.cjs.js +0 -8
  219. package/fd-toolbox/infra/env-functions.cjs.js +0 -16
  220. package/fd-toolbox/infra/env-schema.cjs.js +0 -12
  221. package/fd-toolbox/infra/env-setting-types.cjs.js +0 -6
  222. package/fd-toolbox/infra/env-setting-types.js +0 -4
  223. package/fd-toolbox/infra/env-store.cjs.js +0 -9
  224. package/fd-toolbox/infra/env-store.js +0 -7
  225. package/fd-toolbox/infra/toolbox-env-setting-keys.cjs.js +0 -6
  226. package/fd-toolbox/lib/environments.cjs.js +0 -25
  227. package/fd-toolbox/lib/utils.cjs.js +0 -29
  228. package/fd-toolbox/local-storage/local-storage.cjs.js +0 -12
  229. package/fd-toolbox/logging/loggers.cjs.js +0 -16
  230. package/fd-toolbox/logging/logging-constants.cjs.js +0 -6
  231. package/fd-toolbox/logging/logging-constants.js +0 -4
  232. package/fd-toolbox/notifications.cjs.js +0 -14
  233. package/fd-toolbox/odata/odata-constants.cjs.js +0 -11
  234. package/fd-toolbox/odata/odata-constants.js +0 -4
  235. package/fd-toolbox/odata/odata-enums.cjs.js +0 -8
  236. package/fd-toolbox/odata/odatas.cjs.js +0 -11
  237. package/fd-toolbox/odata/odatas.js +0 -9
  238. package/fd-toolbox/odata/services/odata-filters.cjs.js +0 -11
  239. package/fd-toolbox/odata/services/odata-filters.js +0 -9
  240. package/fd-toolbox/paths/paths-names.cjs.js +0 -9
  241. package/fd-toolbox/resources/resource-names.cjs.js +0 -6
  242. package/fd-toolbox/routing/login-routers.cjs.js +0 -10
  243. package/fd-toolbox/routing/paths.cjs.js +0 -6
  244. package/fd-toolbox/routing/routes.cjs.js +0 -14
  245. package/fd-toolbox/strings/strings-constants.cjs.js +0 -7
  246. package/fd-toolbox/strings/strings-constants.js +0 -4
  247. package/fd-toolbox/strings/strings.cjs.js +0 -10
  248. package/fd-toolbox/types/ensure-type.cjs.js +0 -23
  249. package/fd-toolbox-core/constants/meta-constants.cjs.js +0 -7
  250. package/fd-toolbox-core/constants/promises.cjs.js +0 -6
  251. package/fd-toolbox-core/core/name-of.cjs.js +0 -8
  252. package/fd-toolbox-core/enums/log-severities.cjs.js +0 -6
  253. package/fd-toolbox-core/types/resource-with-id.cjs.js +0 -9
  254. package/level2/cli/bin/index.cjs.js +0 -8
  255. package/level2/cli/create/bin/create.cjs.js +0 -42
  256. package/level2/npm-commands/build-npm/cli-contents.cjs.js +0 -9
  257. package/level2/npm-commands/build-npm/path.cjs.js +0 -13
  258. package/level2/npm-commands/build-npm/path.js +0 -6
  259. /package/cli/public/images/{companies → demo/companies}/00000000-0000-0000-0000-000000000000.webp +0 -0
  260. /package/cli/public/images/{companies → demo/companies}/004a196f-f9a7-49fc-9e05-606fffd0613c.webp +0 -0
  261. /package/cli/public/images/{companies → demo/companies}/497b26a6-3e91-4b27-8c24-f3b145fc6c7f.webp +0 -0
  262. /package/cli/public/images/{companies → demo/companies}/6cead29b-2572-4283-add6-f407b39d7135.webp +0 -0
  263. /package/cli/public/images/{companies → demo/companies}/71efdb77-4ecb-45e6-bc83-0fdff835c2e7.webp +0 -0
  264. /package/cli/public/images/{companies → demo/companies}/773602c8-a417-4afc-adb0-bb6856ac2970.webp +0 -0
  265. /package/cli/public/images/{companies → demo/companies}/9d09881a-cf60-438d-9edf-10f5864d4468.webp +0 -0
  266. /package/cli/public/images/{companies → demo/companies}/a1b2c3d4-e5f6-7890-1234-56789abcdef0.webp +0 -0
  267. /package/cli/public/images/{companies → demo/companies}/b04d7c5e-18de-4f44-b923-5bfb28bb33bb.webp +0 -0
  268. /package/cli/public/images/{companies → demo/companies}/c75c22fc-d295-472e-bdae-dbb8eb09cf18.webp +0 -0
  269. /package/cli/public/images/{companies → demo/companies}/cdf3efb4-33a2-485e-8d95-e0ab5a4cb6a5.webp +0 -0
  270. /package/cli/public/images/{companies → demo/companies}/d6fe4c6a-ecdb-40fc-a8e6-2044ef2b82d4.webp +0 -0
  271. /package/cli/public/images/{contacts → demo/contacts}/159e4c7a-ff5f-4162-8237-acec3ca8a759.webp +0 -0
  272. /package/cli/public/images/{contacts → demo/contacts}/65e07208-6b1f-4a59-b5e3-2f80f5741b18.webp +0 -0
  273. /package/cli/public/images/{contacts → demo/contacts}/6d1c5410-ef5b-4d37-8b8d-4ab8cfc87785.webp +0 -0
  274. /package/cli/public/images/{contacts → demo/contacts}/754c77d8-eefb-4a90-b07b-ed00980c88b4.webp +0 -0
  275. /package/cli/public/images/{contacts → demo/contacts}/9fd23cd9-9b94-4bb8-bb73-d315b93b8a5c.webp +0 -0
  276. /package/cli/public/images/{contacts → demo/contacts}/b2f746d1-6b3c-4c47-8e07-f73927c167cb.webp +0 -0
  277. /package/cli/public/images/{contacts → demo/contacts}/b515cb46-eab4-4862-9e8e-c2f5f217ae79.webp +0 -0
  278. /package/cli/public/images/{contacts → demo/contacts}/cf2eae72-e5ab-4d95-8f08-b6571b44f8eb.webp +0 -0
  279. /package/cli/public/images/{contacts → demo/contacts}/ec0e0285-22d9-48d4-b4b3-96388c37c807.webp +0 -0
  280. /package/cli/public/images/{contacts → demo/contacts}/ecb1a0f4-d244-4136-badf-c2bc72e3b678.webp +0 -0
  281. /package/cli/public/images/{users → demo/users}/02d1230f-5bfe-46b4-8ce1-d10f4aa918a7.webp +0 -0
  282. /package/cli/public/images/{users → demo/users}/166c5e4a-696f-4bf5-ab48-dbbb5e90d526.webp +0 -0
  283. /package/cli/public/images/{users → demo/users}/175a3f0c-692c-4503-87eb-ff95d6535e16.webp +0 -0
  284. /package/cli/public/images/{users → demo/users}/8398ee85-7546-4710-b628-44c98e4ba03a.webp +0 -0
  285. /package/cli/public/images/{users → demo/users}/979f8933-71b1-4df8-b691-566a901d3c76.webp +0 -0
  286. /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=(_0x2aa144,_0x3d42f4)=>__defProp(_0x2aa144,'name',{'value':_0x3d42f4,'configurable':!![]});function singleWithWarning(_0xfcfc33){if(_0xfcfc33['length']===-0x73+0x245+0x1*-0x1d2)throw createError(toolboxErrorMessages['emptyArray']);const _0x3f64e2=_0xfcfc33[0x17*0x25+0x2f0+-0x643];if(_0xfcfc33['length']===-0x2323+0x3*0x329+0x19a9)return _0x3f64e2;if(_0xfcfc33['length']>-0x9c3*0x2+-0x3a*-0x6a+-0x47d)logWarning(getCollectionElementsMessage(_0xfcfc33['length']));return _0x3f64e2;}__name(singleWithWarning,'singleWithWarning');function singleOrUndefinedWithWarning(_0x29b83b){if(_0x29b83b['length']===-0x80f+0x10b7+-0x8a8)return void(-0xdb5+-0xa*0x127+-0x193b*-0x1);const _0x197fa4=_0x29b83b[0x59*-0x29+0x1450+-0x60f*0x1];if(_0x29b83b['length']===-0xa0b+0xdd6+-0x3ca)return _0x197fa4;if(_0x29b83b['length']>0x194f+-0xdf6+0x108*-0xb)logWarning(getCollectionElementsMessage(_0x29b83b['length']));return _0x197fa4;}__name(singleOrUndefinedWithWarning,'singleOrUndefinedWithWarning');function getSingleOrEmpty(_0xc7bc34){let _0x157118;if(_0xc7bc34['length']===0x1f6*0x3+-0x574*0x5+0x4b*0x49)_0x157118=_0xc7bc34[-0xca8*-0x1+0x1eb*0x1+-0x7*0x215];if(_0xc7bc34['length']>0xcd+0x1321+0x13ed*-0x1)throw createError(getCollectionElementsMessage(_0xc7bc34['length']));return _0x157118;}__name(getSingleOrEmpty,'getSingleOrEmpty');function singleOrUndefined(_0x55696d,_0xa21917=()=>!![]){const _0x109c42=_0x55696d['filter'](_0xa21917);if(_0x109c42['length']>-0xbef+0xc7*0x1+0xb29)throw createError(getCollectionElementsMessage(_0x109c42['length']));return _0x109c42['length']===-0xba*-0x1e+0x1b8*-0x16+0x1005?_0x109c42[-0xb50+-0x40f+-0xf5f*-0x1]:void(-0xacf*0x3+-0x1*0x8c1+-0xfb*-0x2a);}__name(singleOrUndefined,'singleOrUndefined');async function singleAsync(_0x3a90d8){const _0x18d020=await _0x3a90d8,_0x2b9593=_0x18d020[-0x22d5+0xe79*-0x2+0x1*0x3fc7];if(_0x18d020['length']>-0x255f+-0x1404+-0x3964*-0x1)logWarning(getCollectionElementsMessage(_0x18d020['length']));return _0x2b9593;}__name(singleAsync,'singleAsync');async function singleOrUndefinedAsync(_0x28f74a,_0x5d51cb=()=>!![]){const _0x2f3d2b=await _0x28f74a,_0x3289c2=_0x2f3d2b['filter'](_0x5d51cb),_0x2c0e71=firstOrUndefined(_0x3289c2);if(_0x3289c2['length']===-0x2b+0x6*-0x4ac+0x1c34)return _0x2c0e71;else {if(_0x3289c2['length']>0x24c2+0x1139+0x62*-0x8d)throw createError(getCollectionElementsMessage(_0x3289c2['length']));}return _0x2c0e71;}__name(singleOrUndefinedAsync,'singleOrUndefinedAsync');function first(_0x582357){if(_0x582357['length']===-0x171f+0x55b*0x3+-0x56*-0x15)throw createError(toolboxErrorMessages['emptyArray']);return _0x582357[0x229*0xd+-0xe61*-0x2+0x1*-0x38d7];}__name(first,'first');function firstOrUndefined(_0x1ce5d2){return _0x1ce5d2[0x8c1*0x1+0x39f+-0x9*0x160];}__name(firstOrUndefined,'firstOrUndefined');function getCollectionElementsMessage(_0x2111fa){return 'Collection\x20had\x20'+_0x2111fa+'\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=(_0x48e45d,_0x351578)=>__defProp(_0x48e45d,'name',{'value':_0x351578,'configurable':!![]});function getErrorDto(_0x494b26){const _0x38d7b1={'errorMessage':_0x494b26['message'],'stackTrace':_0x494b26['stack'],..._0x494b26['cause']instanceof Error&&{'innerError':getErrorDto(_0x494b26['cause'])}};return _0x38d7b1;}__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=(_0x2db63e,_0x1f6f6b)=>__defProp(_0x2db63e,'name',{'value':_0x1f6f6b,'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(_0x38b40a){return require('next/navigation.js').redirect(_0x38b40a);}__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=(_0x256451,_0x171c99)=>__defProp(_0x256451,'name',{'value':_0x171c99,'configurable':!![]});const logLen=-0x10b4*0x2+-0x1cc7+0x3ef7;const latestLogs=[];function addLog(_0x301005){checkLength(_0x301005),latestLogs['push'](_0x301005),latestLogs['length']>0x3bb+0x1*0x2ef+-0x92*0xb&&latestLogs['splice'](0xaf*-0x3+-0x1*-0x11+-0xfe*-0x2,0x31*0x87+0x44a+0x1def*-0x1);}__name(addLog,'addLog');function clearLatestLogs(){latestLogs['splice'](0xe9f*-0x1+0xe80+0x1f,latestLogs['length']);}__name(clearLatestLogs,'clearLatestLogs');function getLatestLogs(){return latestLogs;}__name(getLatestLogs,'getLatestLogs');function checkLength(_0x13eee7){if(!isObject(_0x13eee7['message'])&&_0x13eee7['message']['length']>logLen)_0x13eee7['message']=_0x13eee7['message']['substring'](0x2230+-0x95e*0x3+0x26*-0x29,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=(_0x305252,_0x2b20c9)=>__defProp(_0x305252,'name',{'value':_0x2b20c9,'configurable':!![]});function getLogDto(_0x369813,_0xc79c97,_0xcf4034,_0xba4fe1){let _0x30b1fb={'severity':_0xc79c97,'message':_0x369813,'userId':_0xba4fe1};if(_0xcf4034 instanceof Error)_0x30b1fb={'severity':_0xc79c97,'message':_0x369813,'errorMessage':_0xcf4034?.['message'],'userId':_0xba4fe1,'stackTrace':_0xcf4034?.['stack'],'error':_0xcf4034&&getErrorDto(_0xcf4034)};return _0x30b1fb;}__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=(_0x16d161,_0x3166d2)=>__defProp(_0x16d161,'name',{'value':_0x3166d2,'configurable':!![]});function logInfo(_0x24e284){log(getLogDto(_0x24e284,logSeverities['info']));}__name(logInfo,'logInfo');function logDebug(_0x2fd308){log(getLogDto(_0x2fd308,logSeverities['debug']));}__name(logDebug,'logDebug');function logWarning(_0x3a8598){log(getLogDto(_0x3a8598,logSeverities['warning']));}__name(logWarning,'logWarning');function logError(_0x5c4900,_0x2bf335){log(getLogDto(_0x5c4900,logSeverities['error'],_0x2bf335),_0x2bf335);}__name(logError,'logError');function logNextJsMessage(_0x56f706,_0x3e4a98,_0x81fd01){if(isProdOrDemo())log(getLogDto({'method':_0x56f706,'url':_0x3e4a98,'status':_0x81fd01},logSeverities['info']));}__name(logNextJsMessage,'logNextJsMessage');function log(_0x26d5d7,_0x5590b3){addLog(_0x26d5d7);const _0x406cb0=JSON['stringify'](_0x26d5d7);switch(_0x26d5d7['severity']){case logSeverities['warning']:console['warn'](_0x406cb0);break;case logSeverities['error']:console['error'](_0x5590b3??'',_0x406cb0);break;case logSeverities['debug']:console['debug'](_0x406cb0);break;case logSeverities['info']:console['info'](_0x406cb0);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,6 @@
1
1
  'use strict';
2
- import { shortTextLength, ellipsis } from './strings-constants.js';
3
- import { isNullOrUndefined } from '../functions/value-checking-functions.js';
2
+ import { shortTextLength } from '../../base-repo/constants/strings-constants.js';
4
3
 
5
- var __defProp=Object['defineProperty'],__name=(_0x254b70,_0x430c3a)=>__defProp(_0x254b70,'name',{'value':_0x430c3a,'configurable':!![]});function shortenWithEllipsis(_0x3e1ca5,_0x174b80=shortTextLength){if(isNullOrUndefined(_0x3e1ca5))return '';return _0x3e1ca5['length']<0x33*0xa+-0x101+-0xfb?_0x3e1ca5['length']<=_0x174b80?_0x3e1ca5:_0x3e1ca5['substring'](-0xea1*0x1+0x16e6+0x49*-0x1d,_0x174b80):_0x3e1ca5['length']<=_0x174b80?_0x3e1ca5:_0x3e1ca5['substring'](0x5ff+-0x26f5+-0x107b*-0x2,_0x174b80-(0x1c1e*-0x1+-0x5*0x314+-0x1*-0x2b83))+ellipsis;}__name(shortenWithEllipsis,'shortenWithEllipsis');function trimCharacter(_0x591130,_0x47a50c){let _0x52cba7=_0x591130;if(Array['isArray'](_0x47a50c))for(let _0x56be66 of _0x47a50c){(_0x591130['startsWith'](_0x56be66)||_0x591130['endsWith'](_0x56be66))&&(_0x52cba7=trimOneCharacter(_0x591130,_0x56be66));}else _0x52cba7=trimOneCharacter(_0x591130,_0x47a50c);return _0x52cba7;}__name(trimCharacter,'trimCharacter');function trimOneCharacter(_0x204633,_0x17c3d4){let _0xbab903=_0x204633;return _0xbab903?.['startsWith'](_0x17c3d4)&&(_0xbab903=_0xbab903['substring'](0x152b+-0x32*-0xb7+-0x38e8)),_0xbab903?.['endsWith'](_0x17c3d4)&&(_0xbab903=_0xbab903['substring'](-0x145d+-0x1e25+-0x3*-0x10d6,_0xbab903['lastIndexOf'](_0x17c3d4))),_0xbab903;}__name(trimOneCharacter,'trimOneCharacter');
4
+ var __defProp=Object['defineProperty'],__name=(_0x3ba58c,_0x1c538c)=>__defProp(_0x3ba58c,'name',{'value':_0x1c538c,'configurable':!![]});function shortenWithEllipsis(_0xf4b72c,_0x91c587=shortTextLength){return _0xf4b72c['length']<0xd77+0x1b7a+0x1f3*-0x15?_0xf4b72c['length']<=_0x91c587?_0xf4b72c:_0xf4b72c['substring'](0x1*-0xeab+-0x1478+0x707*0x5,_0x91c587):_0xf4b72c['length']<=_0x91c587?_0xf4b72c:_0xf4b72c['substring'](-0x1*0xffb+-0xbb*-0x21+-0x820,_0x91c587-(-0x3f*0x76+-0x165*0x1c+0x4417))+'…';}__name(shortenWithEllipsis,'shortenWithEllipsis');function trimCharacter(_0xb95a33,_0x56ce1a){let _0x530169=_0xb95a33;if(Array['isArray'](_0x56ce1a))for(let _0xb7ea23 of _0x56ce1a){(_0xb95a33['startsWith'](_0xb7ea23)||_0xb95a33['endsWith'](_0xb7ea23))&&(_0x530169=trimOneCharacter(_0xb95a33,_0xb7ea23));}else _0x530169=trimOneCharacter(_0xb95a33,_0x56ce1a);return _0x530169;}__name(trimCharacter,'trimCharacter');function trimOneCharacter(_0x33455d,_0x4b6e1c){let _0x131881=_0x33455d;return _0x131881?.['startsWith'](_0x4b6e1c)&&(_0x131881=_0x131881['substring'](-0x1*0xa6d+-0x1fb8+-0xd*-0x33e)),_0x131881?.['endsWith'](_0x4b6e1c)&&(_0x131881=_0x131881['substring'](-0x2*-0xea5+-0x2031+0x2e7,_0x131881['lastIndexOf'](_0x4b6e1c))),_0x131881;}__name(trimOneCharacter,'trimOneCharacter');
6
5
 
7
6
  export { shortenWithEllipsis, trimCharacter };
@@ -1,4 +1,8 @@
1
1
  'use strict';
2
- var __defProp=Object['defineProperty'],__name=(_0x5e4324,_0x748cd6)=>__defProp(_0x5e4324,'name',{'value':_0x748cd6,'configurable':!![]});function ensureString(_0x2e9098){return isString(_0x2e9098)?_0x2e9098:String(_0x2e9098);}__name(ensureString,'ensureString');function ensureNumber(_0x4887ab){if(isNumber(_0x4887ab))return _0x4887ab;else {if(isString(_0x4887ab))return parseFloat(_0x4887ab);else return NaN;}}__name(ensureNumber,'ensureNumber');function ensureObjectArray(_0x3236a9){if(Array['isArray'](_0x3236a9)&&_0x3236a9['length']>0x7*0x277+-0x1149+0x8&&isObject(_0x3236a9[-0x1b6d*0x1+0x565+0x1608])){const _0xd3faf3=[];for(const _0x1b6ab7 of _0x3236a9){if(isObject(_0x1b6ab7))_0xd3faf3['push'](_0x1b6ab7);}return _0xd3faf3;}return [];}__name(ensureObjectArray,'ensureObjectArray');function ensureWithIndexer(_0x3ff937){let _0x15d245={};return isWithIndexer(_0x3ff937)&&(_0x15d245=_0x3ff937),_0x15d245;}__name(ensureWithIndexer,'ensureWithIndexer');function ensureWithIndexerArray(_0x15eddd){if(Array['isArray'](_0x15eddd))return _0x15eddd['filter'](isWithIndexer);if(isWithIndexer(_0x15eddd))return [_0x15eddd];return [];}__name(ensureWithIndexerArray,'ensureWithIndexerArray');const types={'object':'object','string':'string','number':'number'};const stripeConflictResponseProperties={'detail':'detail'};function isObject(_0x1f81c6){return typeof _0x1f81c6===types['object']&&_0x1f81c6!==null;}__name(isObject,'isObject');function isString(_0x2c35c7){return typeof _0x2c35c7===types['string'];}__name(isString,'isString');function isNumber(_0x5e5fa5){return typeof _0x5e5fa5===types['number'];}__name(isNumber,'isNumber');function isError(_0x39be0d){return typeof _0x39be0d===types['object'];}__name(isError,'isError');function isKeyof(_0xbea414,_0x34364a){return isObject(_0xbea414)&&_0x34364a in _0xbea414;}__name(isKeyof,'isKeyof');function isWithIndexer(_0x2c1c4b){return isObject(_0x2c1c4b)&&!Array['isArray'](_0x2c1c4b);}__name(isWithIndexer,'isWithIndexer');function isArray(_0x52512c){return isObject(_0x52512c)&&Array['isArray'](_0x52512c);}__name(isArray,'isArray');function isErrorResponseWithDetail(_0x4cabe2){return isObject(_0x4cabe2)&&stripeConflictResponseProperties['detail']in _0x4cabe2;}__name(isErrorResponseWithDetail,'isErrorResponseWithDetail');function isBoolean(_0x8b0612){return typeof _0x8b0612==='boolean';}__name(isBoolean,'isBoolean');function isDate(_0x34ae16){return _0x34ae16 instanceof Date;}__name(isDate,'isDate');function isNumberArray(_0xad6ca0){return Array['isArray'](_0xad6ca0)&&(_0xad6ca0['length']===0x2217*0x1+0xfc+-0x2313||typeof _0xad6ca0[0x27*0x5f+-0x1673*-0x1+-0x24ec]==='number');}__name(isNumberArray,'isNumberArray');
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, isNumberArray, isObject, isString, isWithIndexer, stripeConflictResponseProperties, types };
6
+ var __defProp=Object['defineProperty'],__name=(_0x3ce4a6,_0x133587)=>__defProp(_0x3ce4a6,'name',{'value':_0x133587,'configurable':!![]});function ensureString(_0x8603a8){let _0x151fce;return isString(_0x8603a8)?_0x151fce=_0x8603a8:_0x151fce=String(_0x8603a8),_0x151fce;}__name(ensureString,'ensureString');function ensureNumber(_0x1296f8){let _0xa7d1ad=NaN;if(isNumber(_0x1296f8))_0xa7d1ad=_0x1296f8;else isString(_0x1296f8)&&(_0xa7d1ad=parseFloat(_0x1296f8));return _0xa7d1ad;}__name(ensureNumber,'ensureNumber');function ensureObjectArray(_0x3028e4){let _0x40dc8e=[];if(Array['isArray'](_0x3028e4)&&_0x3028e4['length']>-0x147b+-0x1e68+-0x745*-0x7&&isObject(first(_0x3028e4)))for(const _0x12c073 of _0x3028e4){if(isObject(_0x12c073))_0x40dc8e['push'](_0x12c073);}return _0x40dc8e;}__name(ensureObjectArray,'ensureObjectArray');function ensureWithIndexer(_0x3c2c1b){let _0x36eedd={};return isWithIndexer(_0x3c2c1b)&&(_0x36eedd=_0x3c2c1b),_0x36eedd;}__name(ensureWithIndexer,'ensureWithIndexer');function ensureWithIndexerArray(_0x26c9e1){let _0x2d36a3=[];if(Array['isArray'](_0x26c9e1))_0x2d36a3=_0x26c9e1['filter'](isWithIndexer);else isWithIndexer(_0x26c9e1)&&(_0x2d36a3=[_0x26c9e1]);return _0x2d36a3;}__name(ensureWithIndexerArray,'ensureWithIndexerArray');const stripeConflictResponseProperties={'detail':commonLowerCaseWords['detail']};function isObject(_0x47ed9d){return typeof _0x47ed9d===jsBasicTypes['object']&&_0x47ed9d!==void(0x151a+0x12ea+-0x2804);}__name(isObject,'isObject');function isString(_0x1736aa){return typeof _0x1736aa===jsBasicTypes['string'];}__name(isString,'isString');function isNumber(_0x2b00a8){return typeof _0x2b00a8===jsBasicTypes['number'];}__name(isNumber,'isNumber');function isError(_0x591143){return typeof _0x591143===jsBasicTypes['object'];}__name(isError,'isError');function isKeyof(_0x11af82,_0x2e9992){return isObject(_0x11af82)&&_0x2e9992 in _0x11af82;}__name(isKeyof,'isKeyof');function isFunction(_0x3e1b7e){return typeof _0x3e1b7e===jsBasicTypes['function'];}__name(isFunction,'isFunction');function isWithIndexer(_0x516bcb){return isObject(_0x516bcb)&&!Array['isArray'](_0x516bcb);}__name(isWithIndexer,'isWithIndexer');function isArray(_0x194e2f){return isObject(_0x194e2f)&&Array['isArray'](_0x194e2f);}__name(isArray,'isArray');function isErrorResponseWithDetail(_0x4f8061){return isObject(_0x4f8061)&&stripeConflictResponseProperties['detail']in _0x4f8061;}__name(isErrorResponseWithDetail,'isErrorResponseWithDetail');function isBoolean(_0x10f337){return typeof _0x10f337===jsBasicTypes['boolean'];}__name(isBoolean,'isBoolean');function isDate(_0x465fca){return _0x465fca instanceof Date;}__name(isDate,'isDate');function isNumberArray(_0x532a32){return Array['isArray'](_0x532a32)&&(_0x532a32['length']===0x1143+0x161*-0x13+0x8f0||typeof first(_0x532a32)===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=(_0x1b4743,_0x3017d2)=>__defProp(_0x1b4743,'name',{'value':_0x3017d2,'configurable':!![]});function buildUrl(_0x1de532,_0x47e7c7,_0x24d05d){let _0x1bc340=appendUrl(_0x24d05d,_0x1de532);return _0x47e7c7&&_0x47e7c7['length']>0xb*-0x26d+-0x6*0x520+0x396f&&(_0x1bc340+='?',_0x47e7c7['forEach']((_0x5d0673,_0x5b8228)=>{_0x1bc340+=_0x5d0673['name']+'='+_0x5d0673['value'],_0x5b8228<_0x47e7c7['length']-(-0x1*0x137d+-0x84e*-0x3+0x2*-0x2b6)&&(_0x1bc340+='&');})),_0x1bc340;}__name(buildUrl,'buildUrl');function isLocalUrl(_0x499ba0){if(!_0x499ba0?.['trim']())return ![];const _0x2f42df=/^~?\/[^/\\]/gm;return _0x2f42df['test'](_0x499ba0['trim']());}__name(isLocalUrl,'isLocalUrl');function appendUrl(..._0x2d1358){const _0x38e724=[];return _0x2d1358['forEach'](_0x33eb05=>{const _0x1f52f0=_0x33eb05?.['toString']()['trim']();_0x1f52f0&&_0x1f52f0!==''&&_0x38e724['push'](_0x1f52f0['replace'](/(^\/|\/$)/g,''));}),_0x38e724['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=(_0x1903f7,_0x1aad69)=>__defProp(_0x1903f7,'name',{'value':_0x1aad69,'configurable':!![]});const nameOf=__name(_0x31e6d2=>_0x31e6d2['toString'](),'nameOf');const deepNameOf=__name((_0xbd6e7,_0xef6b2d)=>_0xbd6e7+'.'+_0xef6b2d,'deepNameOf');const nameOfWithType=__name(_0x526bc9=>_0x526bc9,'nameOfWithType');
2
+ var __defProp=Object['defineProperty'],__name=(_0x1b121e,_0x532786)=>__defProp(_0x1b121e,'name',{'value':_0x532786,'configurable':!![]});function nameOf(_0x2facc){return _0x2facc['toString']();}__name(nameOf,'nameOf');function deepNameOf(_0x128dfe,_0xade6f0){return _0x128dfe+'.'+_0xade6f0;}__name(deepNameOf,'deepNameOf');function nameOfWithType(_0x44dd6e){return _0x44dd6e;}__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=(_0x3855ea,_0x4f127e)=>__defProp(_0x3855ea,'name',{'value':_0x4f127e,'configurable':!![]});const withIdProps={'id':nameOf('id')};function isResourceWithId(_0x4ea52c){return _0x4ea52c&&typeof _0x4ea52c==='object'&&typeof _0x4ea52c['id']==='string';}__name(isResourceWithId,'isResourceWithId');
6
+ var __defProp=Object['defineProperty'],__name=(_0x1f168c,_0x3f7425)=>__defProp(_0x1f168c,'name',{'value':_0x3f7425,'configurable':!![]});const withIdProps={'id':nameOf(wellKnownMetaProps['id'])};function isResourceWithId(_0x2609ae){return _0x2609ae&&typeof _0x2609ae===jsBasicTypes['object']&&typeof _0x2609ae['id']===jsBasicTypes['string'];}__name(isResourceWithId,'isResourceWithId');
5
7
 
6
8
  export { isResourceWithId, withIdProps };
@@ -0,0 +1,6 @@
1
+ 'use strict';
2
+ import { commonLowerCaseWords } from '../../base-repo/constants/internal-common-strings.js';
3
+
4
+ const gitCommandParts={'add':commonLowerCaseWords['add'],'commit':'commit','push':commonLowerCaseWords['push'],'pull':commonLowerCaseWords['pull'],'checkout':'checkout','status':commonLowerCaseWords['status'],'diff':'diff','revParse':'rev-parse','lsFiles':'ls-files','log':commonLowerCaseWords['log'],'revList':'rev-list'};const gitCommandOptionValues={'acmr':'ACMR'};const gitCommandArguments={'porcelain':'--porcelain','ignoreSubmodulesAll':'--ignore-submodules=all','submoduleRecurseDisabled':'submodule.recurse=false','nameOnly':'--name-only','cached':'--cached','diffFilterAcmr':'--diff-filter='+gitCommandOptionValues['acmr'],'binary':'--binary','contextLinesZero':'-U0','others':'--others','excludeStandard':'--exclude-standard','doubleDash':'--','dashR':'-r','noMerges':'--no-merges','message':'-m'};const gitRemotes={'origin':'origin','website':commonLowerCaseWords['website']};const branches={'main':'main','originMain':gitRemotes['origin']+'/main'};const gitFlags={'noVerify':'--no-verify','force':'-f','directories':'-d','ignoreAllSpace':'-w','showToplevel':'--show-toplevel'};
5
+
6
+ export { branches, gitCommandArguments, gitCommandOptionValues, gitCommandParts, gitFlags, gitRemotes };
@@ -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 { gitCommandArguments } from '../../../git/constants/git-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']((_0x23e3f7,_0x318d45)=>{const _0xc67614=[_0x23e3f7];if(_0x318d45['repo'])_0xc67614['push']('-r');create(_0xc67614);}),program['parse'](process['argv']);
7
+ 'use strict';const program=new Command();program['command']('create\x20<folder>')['option'](gitCommandArguments['dashR']+',\x20--repo','Enable\x20repo\x20mode')['description']('Create\x20a\x20new\x20SaaS\x20Kit\x20project')['action']((_0x5b44d0,_0x46f7a4)=>{const _0x24a466=[_0x5b44d0];if(_0x46f7a4['repo'])_0x24a466['push'](gitCommandArguments['dashR']);create(_0x24a466);}),program['parse'](process['argv']);
@@ -1,20 +1,29 @@
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 _0x20c19a from 'path';
6
- import _0x5f4fd1 from 'node:fs';
5
+ import { createInterface } from 'node:readline/promises';
6
+ import _0x4ddc8b from 'process';
7
+ import * as _0x50ac40 from 'path';
8
+ import _0x21dc6d from 'node:fs';
9
+ import _0x28eb30 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 { stdioStatuses, ecmaVersion } from '../../../../base-repo/constants/internal-cli-constants.js';
21
+ import { gitCommandArguments, gitCommandParts } from '../../../../git/constants/git-constants.js';
22
+ import { externalPackageNames, commandNames } from '../../../../base-repo/app-constants/command-names.js';
23
+ import { commonStatuses } from '../../../../base-repo/constants/ci-constants.js';
24
+ import { basicErrorMessages } from '../../../../base-repo/constants/internal-common-strings.js';
25
+ import { first } from '../../../../fd-toolbox/server/collections/single-funcs.js';
17
26
 
18
- var __defProp=Object['defineProperty'],__name=(_0x212fcd,_0x386e24)=>__defProp(_0x212fcd,'name',{'value':_0x386e24,'configurable':!![]});const requiredNodeVersion='v20.0.0';process['version']<requiredNodeVersion&&(logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),process['exit'](0x3cb*-0x3+0x3*-0xf2+-0x41*-0x38));const filename=fileURLToPath(import.meta.url),sourceDir='../../../../',binDir=_0x20c19a['dirname'](filename),repoRoot=_0x20c19a['resolve'](binDir,sourceDir),envLocalPath=_0x20c19a['join'](binDir,sourceDir+folders['cli']+'/'+files['envExample']),envTemplate=_0x5f4fd1['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(_0x1f2e9c,_0x449a1d){logInfoRaw('Executing:\x20'+_0x1f2e9c);try{execSync(_0x1f2e9c,{'stdio':'inherit','cwd':_0x449a1d??process['cwd']()});}catch(_0x60e471){const _0x61e679=_0x60e471 instanceof Error?_0x60e471['message']:'Unknown\x20error';logStringError('Error\x20executing:\x20'+_0x1f2e9c),logStringError(_0x61e679),process['exit'](0x7b3+0x1c7b+-0x242d);}}__name(runCommand,'runCommand');function checkTargetFolder(_0x1c84a7){existsSync(_0x1c84a7)&&(logStringError('Error:\x20Folder\x20\x22'+_0x20c19a['basename'](_0x1c84a7)+'\x22\x20already\x20exists.'),process['exit'](-0x2329+-0x203*0xe+0x2a*0x182));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0xa1280b=_0x20c19a['resolve'](repoRoot,files['packageJson']),_0x3b1250=JSON['parse'](_0x5f4fd1['readFileSync'](_0xa1280b,'utf-8'));return String(_0x3b1250['devDependencies']?.['next']??_0x3b1250['dependencies']?.['next']??'latest');}__name(getCreateNextAppVersion,'getCreateNextAppVersion');async function createNextProject(_0x198b27,_0x47fcb8){logInfoRaw('Creating\x20Next.js\x20project...');const _0x1d1bf7=getCreateNextAppVersion(),_0x2de52f=['npx\x20--yes\x20create-next-app@'+_0x1d1bf7+'\x20\x22'+_0x198b27+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git','--react-compiler']['join']('\x20');runCommand(_0x2de52f,_0x20c19a['dirname'](_0x47fcb8)),logInfoRaw('Next.js\x20project\x20created!');const _0x4cba29=_0x20c19a['join'](_0x47fcb8,'next.config.ts'),_0xc19fc3=_0x20c19a['join'](_0x47fcb8,folders['public']);await promises['rm'](_0x4cba29,{'force':!![]}),logInfoRaw('Removed\x20default\x20next.config.ts'),await promises['rm'](_0xc19fc3,{'recursive':!![],'force':!![]}),logInfoRaw('Removed\x20default\x20public\x20folder'),await promises['mkdir'](_0xc19fc3);}__name(createNextProject,'createNextProject');async function createEnvFile(_0x81595a){logInfoRaw('Creating\x20'+files['env']+'\x20file\x20with\x20default\x20values...');const _0x21fd84=_0x20c19a['join'](_0x81595a,files['env']);try{await promises['writeFile'](_0x21fd84,envTemplate,'utf8'),logInfoRaw(files['env']+'\x20file\x20created\x20with\x20values!');}catch(_0x25a3ff){const _0x373b0b=_0x25a3ff instanceof Error?_0x25a3ff['message']:'Unknown\x20error';logStringError('Error\x20creating\x20'+files['env']+'\x20file:'),logStringError(_0x373b0b);throw _0x25a3ff;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x54c4b8){const _0x3b16d6=_0x20c19a['join'](_0x54c4b8,files['packageJson']),_0x5a8139=_0x20c19a['join'](repoRoot,folders['cli']+'/'+files['packageTemplate']);try{const _0x5311d2=JSON['parse'](await promises['readFile'](_0x3b16d6,'utf8')),_0x58744e=_0x5311d2['name'],_0x372f60=JSON['parse'](await promises['readFile'](_0x5a8139,'utf8')),_0x3a71e0={..._0x372f60,'name':_0x58744e};await promises['writeFile'](_0x3b16d6,JSON['stringify'](_0x3a71e0,null,-0x51c+0xe8*0x1+-0x9a*-0x7)+'\x0a','utf8');}catch(_0x53fbfe){const _0xdd0ebc=_0x53fbfe instanceof Error?_0x53fbfe['message']:'Unknown\x20error';logStringError('Error\x20overriding\x20'+files['packageJson']+':'),logStringError(_0xdd0ebc);throw _0x53fbfe;}}__name(overridePackageJson,'overridePackageJson');function replaceImports(_0x34a094){const _0x2bb3ce=/(import\s+)([^'"]+)(\s+from\s+["'])([^"']+)(["'])/g;return _0x34a094['replace'](_0x2bb3ce,(_0x4aacf1,_0x428aee,_0xe6ba03,_0x52ebc3,_0x4763e6,_0x19afa1)=>{if(!_0x4763e6['startsWith'](aliasSymbols['atSign'])||_0x4763e6['startsWith'](npmPackages['saasKit']))return _0x4aacf1;let _0x3fbefd;_0x4763e6['startsWith'](aliasSymbols['atSign']+folders['server'])||_0x4763e6['includes'](''+nonRootProjectPaths['server'])?_0x3fbefd=npmPackages['saasKitServer']:_0x3fbefd=npmPackages['saasKit'];let _0x17f53d=_0xe6ba03['trim']();const _0x78af7b=/^type\b/['test'](_0x17f53d),_0x257b02=/^\*\s+as\s+/['test'](_0x17f53d);return !_0x78af7b&&!_0x257b02&&!_0x17f53d['startsWith']('{')&&(_0x17f53d='{\x20'+_0x17f53d+'\x20}'),''+_0x428aee+_0x17f53d+_0x52ebc3+_0x3fbefd+_0x19afa1;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x5cd29a){logInfoRaw('Copying\x20'+projectName+'\x20files...');for(const _0x151378 of allFilesToCopy){const _0xc0c664=folders['cli']+'/'+_0x151378,_0x518b8b=_0x20c19a['join'](repoRoot,_0xc0c664),_0x546c93=replaceToolsFolder(_0x151378),_0x340f5b=_0x20c19a['join'](_0x5cd29a,_0x546c93);if(existsSync(_0x518b8b)){const _0x32476d=await promises['stat'](_0x518b8b);_0x32476d['isDirectory']()?await copyDirectoryContents(_0x518b8b,_0x340f5b):await copyAndProcessFile(_0x518b8b,_0x340f5b);}else logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0xc0c664);}logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0x28f233){let _0x156052=_0x28f233;for(const [_0x537b94,_0x4360c1]of Object['entries'](toolsFoldersToReplace)){if(_0x156052['startsWith'](_0x537b94)&&isWithIndexer(_0x4360c1)){const _0x29c8be=_0x4360c1;for(const _0x466ab7 in _0x29c8be){const _0x482fbd=_0x29c8be[_0x466ab7];isString(_0x482fbd)&&(_0x156052=_0x156052['replace'](_0x466ab7,_0x482fbd));}break;}}return _0x156052;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x4c67f9,_0x2f8056,_0x1e95ea=![]){const _0x36125d=_0x20c19a['relative'](repoRoot,_0x4c67f9)['replace'](/\\/g,'/'),_0x1ab9a2=foldersToIgnore['map'](_0x3852cf=>_0x3852cf['replace'](/\\/g,'/'));if(_0x1ab9a2['includes'](_0x36125d))return !![];if(_0x1e95ea){const _0x5973d0=_0x20c19a['relative'](_0x2f8056,_0x4c67f9)['replace'](/\\/g,'/'),_0x188807=_0x5973d0['split']('/');return _0x1ab9a2['some'](_0x1199e7=>_0x188807['some'](_0x8b677b=>_0x8b677b===_0x1199e7));}return ![];}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x320931,_0x1e988d){!existsSync(_0x1e988d)&&mkdirSync(_0x1e988d,{'recursive':!![]});try{const _0x240f3f=await promises['readdir'](_0x320931,{'withFileTypes':!![]});for(const _0x3d2064 of _0x240f3f){const _0x5112db=_0x20c19a['join'](_0x320931,_0x3d2064['name']),_0x26a445=_0x20c19a['join'](_0x1e988d,_0x3d2064['name']);!shouldIgnorePath(_0x5112db,_0x320931,_0x3d2064['isDirectory']())&&(_0x3d2064['isDirectory']()?await copyDirectoryContents(_0x5112db,_0x26a445):await copyAndProcessFile(_0x5112db,_0x26a445));}}catch(_0x4c17e9){const _0x5c8de8=_0x4c17e9 instanceof Error?_0x4c17e9['message']:'Unknown\x20error';logStringError('Error\x20reading\x20directory\x20'+_0x320931+':\x20'+_0x5c8de8);throw _0x4c17e9;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x32e007,_0x4c31a2){const _0x3d465c=_0x20c19a['dirname'](_0x4c31a2);!existsSync(_0x3d465c)&&mkdirSync(_0x3d465c,{'recursive':!![]});const _0x45e2bb=await promises['stat'](_0x32e007);if(_0x45e2bb['isDirectory']())await copyDirectoryContents(_0x32e007,_0x4c31a2);else {const _0x57a6b3=_0x20c19a['extname'](_0x32e007)['toLowerCase'](),_0x1efa48=['.ico','.png','.jpg','.jpeg','.webp','.gif','.svg','.pdf'];if(_0x1efa48['includes'](_0x57a6b3)){await promises['copyFile'](_0x32e007,_0x4c31a2);return;}const _0x505312=await promises['readFile'](_0x32e007,'utf8'),_0x1ce581=replaceImports(_0x505312);await promises['writeFile'](_0x4c31a2,_0x1ce581,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x26d002){for(const _0x2d76be of additionalFoldersToCreate){const _0x492bec=_0x20c19a['join'](_0x26d002,_0x2d76be);!existsSync(_0x492bec)&&(mkdirSync(_0x492bec,{'recursive':!![]}),logInfoRaw('Created\x20folder:\x20'+_0x2d76be));}logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function setupPreCommitHooks(_0x5dd656){const _0x16eb6e=_0x20c19a['join'](_0x5dd656,folders['husky']),_0x782d02=_0x20c19a['join'](_0x16eb6e,files['preCommit']),_0x14a1d1=_0x20c19a['join'](_0x16eb6e,files['commitMsg']);mkdirSync(_0x16eb6e,{'recursive':!![]}),await promises['writeFile'](_0x782d02,cliScripts['preCommit'],'utf8'),await promises['writeFile'](_0x14a1d1,cliScripts['commitMsg'],'utf8'),runCommand(cliScripts['chmodPreCommit'],_0x5dd656),runCommand(cliScripts['chmodCommitMsg'],_0x5dd656);}__name(setupPreCommitHooks,'setupPreCommitHooks');async function setupEslintConfig(_0x7852a2){const _0xb24807=_0x20c19a['join'](_0x7852a2,files['eslintConfigMjs']);existsSync(_0xb24807)&&await promises['rm'](_0xb24807);const _0x14e8d2=_0x20c19a['join'](_0x7852a2,files['eslintConfigJs']);await promises['writeFile'](_0x14e8d2,cliEslintContent,'utf8');}__name(setupEslintConfig,'setupEslintConfig');async function enableRepoModeExtras(_0x2b2742){logInfoRaw('Enabling\x20recommendation\x20mode\x20(-r)...'),runCommand(cliScripts['gitInit'],_0x2b2742),runCommand(cliScripts['installDevHuskyTsx'],_0x2b2742),runCommand(cliScripts['setLint'],_0x2b2742),runCommand(cliScripts['installHusky'],_0x2b2742),await setupPreCommitHooks(_0x2b2742);}__name(enableRepoModeExtras,'enableRepoModeExtras');async function updateLayoutTitle(_0x4353ae,_0x13091d){const _0x1f64c6=_0x20c19a['join'](_0x4353ae,projectPaths['app']+'/'+files['layout']);if(!existsSync(_0x1f64c6))throw createError(files['layout']+'\x20not\x20found\x20at\x20'+_0x1f64c6+',\x20cannot\x20update\x20title.');let _0x35f31a=await promises['readFile'](_0x1f64c6,'utf8');const _0x30b707=/"SaaS Kit"/g;if(!_0x30b707['test'](_0x35f31a))throw createError('SaaS\x20Kit\x20not\x20found\x20in\x20'+files['layout']+',\x20cannot\x20update\x20title.');_0x35f31a=_0x35f31a['replace'](_0x30b707,'\x22'+_0x13091d+'\x22'),await promises['writeFile'](_0x1f64c6,_0x35f31a,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle');async function create(_0x2619f9){try{_0x2619f9['length']<-0x1*-0xd19+-0x1*0x1a0f+0xcf7&&(logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),process['exit'](-0x685*0x1+-0x8c6*-0x3+0x1*-0x13cc));const _0x41e063=_0x2619f9[0xcbf+-0x1*-0x21b3+-0x52*0x91],_0x290f9a=_0x2619f9['includes']('-r'),_0x44a747=_0x20c19a['resolve'](process['cwd'](),_0x41e063);logInfoRaw('\x0aCreating\x20'+projectName+'\x20project\x20\x22'+_0x41e063+'\x22...\x0a');try{checkTargetFolder(_0x44a747),await createNextProject(_0x41e063,_0x44a747),await copyProjectFiles(_0x44a747),await overridePackageJson(_0x44a747),createAdditionalFolders(_0x44a747),await createEnvFile(_0x44a747),await updateLayoutTitle(_0x44a747,_0x41e063),await setupEslintConfig(_0x44a747),_0x290f9a&&await enableRepoModeExtras(_0x44a747),runCommand('git\x20add\x20.',_0x44a747),runCommand('git\x20commit\x20-nm\x20\x27Initial\x20commit\x27',_0x44a747),logInfoRaw('Initial\x20commit\x20created!'),logInfoRaw('\x0a'+projectName+'\x20project\x20\x22'+_0x41e063+'\x22\x20is\x20ready!'),logInfoRaw('Next\x20steps:'),logInfoRaw('\x20\x20cd\x20'+_0x41e063),logInfoRaw('\x20\x20npm\x20run\x20start');}catch(_0x54b8c4){const _0x381e49=_0x54b8c4 instanceof Error?_0x54b8c4['message']:'Unknown\x20error';logStringError('Error:'),logStringError(_0x381e49),existsSync(_0x44a747)&&(logInfoRaw('Cleaning\x20up...'),rmSync(_0x44a747,{'recursive':!![],'force':!![]})),process['exit'](-0x1*0x4c4+0x633+0x3*-0x7a);}}catch(_0x59319b){const _0x28ee27=_0x59319b instanceof Error?_0x59319b['message']:'Unknown\x20error';logStringError('Unhandled\x20error:'),logStringError(_0x28ee27),process['exit'](-0x1*0x2168+-0x18a4+0x3a0d);}}__name(create,'create');
27
+ var __defProp=Object['defineProperty'],__name=(_0x3949b3,_0xeefa2a)=>__defProp(_0x3949b3,'name',{'value':_0xeefa2a,'configurable':!![]});const lifecycleStatuses={'created':commonStatuses['created']};const requiredNodeVersion='v20.0.0';_0x4ddc8b['version']<requiredNodeVersion&&(logStringError('Node.js\x20'+requiredNodeVersion+'+\x20is\x20required'),_0x4ddc8b['exit'](-0x3d*-0x1f+-0x14fb+-0x1*-0xd99));const filename=fileURLToPath(import.meta.url),binDir=_0x50ac40['dirname'](filename),repoRoot=_0x50ac40['resolve'](binDir,sourceDir),envLocalPath=_0x50ac40['join'](binDir,sourceDir+folders['cli']+'/'+files['envExample']),envTemplate=_0x21dc6d['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(_0x12dfff){try{_0x12dfff['length']<-0x1b11+0x498+0x336*0x7&&(logStringError('Error:\x20Specify\x20folder\x20name.\x20Example:\x20npx\x20create-saas-kit-app\x20<folder-name>'),_0x4ddc8b['exit'](0xebf+0x71*-0x44+0xf46));const _0x5d9fd0=first(_0x12dfff),_0xc19853=_0x12dfff['includes'](gitCommandArguments['dashR']),_0x32c8ec=await shouldInstallPlaywright(_0xc19853),_0x58bc50=await shouldUsePreCommit(),_0x2cb60b=_0x50ac40['resolve'](_0x4ddc8b['cwd'](),_0x5d9fd0);logInfoRaw('\x0aCreating\x20'+projectName+'\x20'+project+'\x20\x22'+_0x5d9fd0+'\x22...\x0a');try{checkTargetFolder(_0x2cb60b),await createNextProject(_0x5d9fd0,_0x2cb60b),await copyProjectFiles(_0x2cb60b),await overridePackageJson(_0x2cb60b,_0x32c8ec);!_0x32c8ec&&await removePlaywrightArtifacts(_0x2cb60b);runCommandWithArgs('npm',['install'],_0x2cb60b),createAdditionalFolders(_0x2cb60b),await createEnvFile(_0x2cb60b),await updateLayoutTitle(_0x2cb60b,_0x5d9fd0),await setupEslintConfig(_0x2cb60b);_0xc19853&&await enableRepoModeExtras(_0x2cb60b,_0x58bc50);await normalizeLineEndings(_0x2cb60b);const _0x413fd3='0-initial-commit';runCommandWithArgs(commandNames['git'],[gitCommandParts['add'],'.'],_0x2cb60b),runCommandWithArgs(commandNames['git'],[gitCommandParts['commit'],gitCommandArguments['message'],_0x413fd3],_0x2cb60b),logInfoRaw(_0x413fd3+'\x20'+lifecycleStatuses['created']+'!'),logInfoRaw('\x0a'+projectName+'\x20'+project+'\x20\x22'+_0x5d9fd0+'\x22\x20is\x20ready!'),logInfoRaw('Next\x20steps:'),logInfoRaw('\x20\x20cd\x20'+_0x5d9fd0),logInfoRaw('\x20\x20npm\x20run\x20start');}catch(_0x24874d){const _0x59e04e=_0x24874d instanceof Error?_0x24874d['message']:unknownError;logStringError('Error:'),logStringError(_0x59e04e),existsSync(_0x2cb60b)&&(logInfoRaw('Cleaning\x20up...'),rmSync(_0x2cb60b,{'recursive':!![],'force':!![]})),_0x4ddc8b['exit'](0x1b28+-0x1ed3+0x1*0x3ac);}}catch(_0x371e48){const _0x23fd42=_0x371e48 instanceof Error?_0x371e48['message']:unknownError;logStringError('Unhandled\x20error:'),logStringError(_0x23fd42),_0x4ddc8b['exit'](-0x2*0x679+-0xed9+-0x6f3*-0x4);}}__name(create,'create');function runCommand(_0x79491,_0xda0aff){logInfoRaw('Executing:\x20'+_0x79491);try{execSync(_0x79491,{'stdio':stdioStatuses['inherit'],'cwd':_0xda0aff??_0x4ddc8b['cwd']()});}catch(_0xe4634b){const _0x894b63=_0xe4634b instanceof Error?_0xe4634b['message']:unknownError;logStringError('Error\x20executing:\x20'+_0x79491),logStringError(_0x894b63),_0x4ddc8b['exit'](0x43*-0x26+0xc25*0x3+-0x4*0x69f);}}__name(runCommand,'runCommand');function runCommandWithArgs(_0x3b377d,_0x4bd33b,_0x2b40f6){const _0x5a4a42=_0x3b377d+'\x20'+_0x4bd33b['join']('\x20'),_0x18c2cd=_0x2b40f6??_0x4ddc8b['cwd']();logInfoRaw('Executing:\x20'+_0x5a4a42);try{execFileSync(_0x3b377d,_0x4bd33b,{'stdio':stdioStatuses['inherit'],'cwd':_0x18c2cd,'shell':!![]});}catch(_0x35c031){logStringError('Error\x20executing:\x20'+_0x5a4a42),logStringError(_0x35c031 instanceof Error?_0x35c031['message']:unknownError),_0x4ddc8b['exit'](0x1*-0x2527+-0x2113+0x463b);}}__name(runCommandWithArgs,'runCommandWithArgs');function checkTargetFolder(_0x52d5c7){existsSync(_0x52d5c7)&&(logStringError('Error:\x20Folder\x20\x22'+_0x50ac40['basename'](_0x52d5c7)+'\x22\x20already\x20exists.'),_0x4ddc8b['exit'](-0xe8e+0x2*0xe99+-0xea3*0x1));}__name(checkTargetFolder,'checkTargetFolder');function getCreateNextAppVersion(){const _0x5e6337=_0x50ac40['resolve'](repoRoot,files['packageJson']),_0x48e060=JSON['parse'](_0x21dc6d['readFileSync'](_0x5e6337,'utf-8')),_0x45aa5e=_0x48e060['devDependencies']?.[externalPackageNames['next']]??_0x48e060['dependencies']?.[externalPackageNames['next']];return ensureString(_0x45aa5e??ecmaVersion);}__name(getCreateNextAppVersion,'getCreateNextAppVersion');async function createNextProject(_0x176d34,_0x5569e0){logInfoRaw('Creating\x20Next.js\x20project...');const _0x50a6f3=getCreateNextAppVersion(),_0x11ae9e=['npx\x20--yes\x20create-next-app@'+_0x50a6f3+'\x20\x22'+_0x176d34+'\x22','--typescript','--tailwind','--eslint','--app','--src-dir','--turbopack','--no-import-alias','--no-git','--react-compiler','--agents','--ts','--agents-md']['join']('\x20');runCommand(_0x11ae9e,_0x50ac40['dirname'](_0x5569e0)),logInfoRaw('Next.js\x20'+project+'\x20'+lifecycleStatuses['created']+'!');const _0x10e184=_0x50ac40['join'](_0x5569e0,'next.config.ts'),_0xf757af=_0x50ac40['join'](_0x5569e0,folders['public']);await promises['rm'](_0x10e184,{'force':!![]}),logInfoRaw('Removed\x20default\x20next.config.ts'),await promises['rm'](_0xf757af,{'recursive':!![],'force':!![]}),logInfoRaw('Removed\x20default\x20public\x20folder'),await promises['mkdir'](_0xf757af);}__name(createNextProject,'createNextProject');async function createEnvFile(_0x49f2c7){logInfoRaw('Creating\x20'+files['dotEnv']+'\x20file\x20with\x20default\x20values...');const _0x4fa8bb=_0x50ac40['join'](_0x49f2c7,files['dotEnv']);try{await promises['writeFile'](_0x4fa8bb,envTemplate,'utf8'),logInfoRaw(files['dotEnv']+'\x20file\x20created\x20with\x20values!');}catch(_0x2d4bac){const _0x3e31ff=_0x2d4bac instanceof Error?_0x2d4bac['message']:unknownError;logStringError('Error\x20creating\x20'+files['dotEnv']+'\x20file:'),logStringError(_0x3e31ff);throw _0x2d4bac;}}__name(createEnvFile,'createEnvFile');async function overridePackageJson(_0x3fc974,_0x1e7e57){const _0x5d5e6d=_0x50ac40['join'](_0x3fc974,files['packageJson']),_0x429feb=_0x50ac40['join'](repoRoot,cliPackageTemplate);try{const _0x5e146e=JSON['parse'](await promises['readFile'](_0x5d5e6d,'utf8')),_0x249189=_0x5e146e['name'],_0x49307f=JSON['parse'](await promises['readFile'](_0x429feb,'utf8')),_0x5d1aa4={..._0x49307f,'name':_0x249189};!_0x1e7e57&&_0x5d1aa4['devDependencies']&&delete _0x5d1aa4['devDependencies'][playwright],await promises['writeFile'](_0x5d5e6d,JSON['stringify'](_0x5d1aa4,void(-0x1*-0xa9e+0x1e50+-0x28ee),0x8*0x13d+0x7c5+-0x11ab)+'\x0a','utf8');}catch(_0x33ec08){const _0x411cb0=_0x33ec08 instanceof Error?_0x33ec08['message']:unknownError;logStringError('Error\x20overriding\x20'+files['packageJson']+':'),logStringError(_0x411cb0);throw _0x33ec08;}}__name(overridePackageJson,'overridePackageJson');async function shouldInstallPlaywright(_0x1d59f9){let _0x5c43e1=![];if(_0x1d59f9)_0x5c43e1=!![];else {if(!_0x4ddc8b['stdin']['isTTY'])logInfoRaw('No\x20interactive\x20terminal\x20detected;\x20skipping\x20Playwright\x20setup.');else {const _0x4acf39=createInterface({'input':_0x4ddc8b['stdin'],'output':_0x4ddc8b['stdout']});try{const _0x6ac2e=await _0x4acf39['question']('Install\x20Playwright?\x20(y/N):\x20');_0x5c43e1=/^y(es)?$/i['test'](_0x6ac2e['trim']());}finally{_0x4acf39['close']();}}}return _0x5c43e1;}__name(shouldInstallPlaywright,'shouldInstallPlaywright');async function shouldUsePreCommit(){let _0x362b4a=![];if(!_0x4ddc8b['stdin']['isTTY'])logInfoRaw('No\x20interactive\x20terminal\x20detected;\x20skipping\x20pre-commit\x20setup.');else {const _0x40905a=createInterface({'input':_0x4ddc8b['stdin'],'output':_0x4ddc8b['stdout']});try{const _0x598a1e=await _0x40905a['question']('Set\x20up\x20pre-commit?\x20(y/N):\x20');_0x362b4a=/^y(es)?$/i['test'](_0x598a1e['trim']());}finally{_0x40905a['close']();}}return _0x362b4a;}__name(shouldUsePreCommit,'shouldUsePreCommit');async function removePlaywrightArtifacts(_0x32732b){const _0x53278d=_0x50ac40['join'](_0x32732b,files['playwrightConfig']),_0x1d3503=_0x50ac40['join'](_0x32732b,folders['configs'],playwright+'-cli-config.ts'),_0x31c13a=_0x50ac40['join'](_0x32732b,folders['test']);await promises['rm'](_0x53278d,{'force':!![]}),await promises['rm'](_0x1d3503,{'force':!![]}),await promises['rm'](_0x31c13a,{'recursive':!![],'force':!![]});}__name(removePlaywrightArtifacts,'removePlaywrightArtifacts');function replaceImports(_0x59b8cd){const _0xc3643c=/(import\s+)([^'"]+)(\s+from\s+["'])([^"']+)(["'])/g,_0x36750a=['@generated/schema','@generated/meta/crud-handler-map','@/app/init-saas-kit','@/app/http-wrappers'];return _0x59b8cd['replace'](_0xc3643c,(_0x2ff9eb,_0x2a5ecb,_0x405fe5,_0xe2332e,_0x6dda3e,_0x13d312)=>{if(!_0x6dda3e['startsWith'](aliasSymbols['atSign'])||_0x6dda3e['startsWith'](npmPackages['saasKit']))return _0x2ff9eb;if(_0x36750a['includes'](_0x6dda3e))return _0x2ff9eb;let _0x531d3f;_0x6dda3e['startsWith'](aliasSymbols['atSign']+folders['server'])||_0x6dda3e['includes'](nonRootProjectPaths['server'])?_0x531d3f=npmPackages['saasKitServer']:_0x531d3f=npmPackages['saasKit'];let _0x2efa8d=_0x405fe5['trim']();const _0x42fd17=/^type\b/['test'](_0x2efa8d),_0x2344e8=/^\*\s+as\s+/['test'](_0x2efa8d);return !_0x42fd17&&!_0x2344e8&&!_0x2efa8d['startsWith']('{')&&(_0x2efa8d='{\x20'+_0x2efa8d+'\x20}'),''+_0x2a5ecb+_0x2efa8d+_0xe2332e+_0x531d3f+_0x13d312;});}__name(replaceImports,'replaceImports');async function copyProjectFiles(_0x481f39){logInfoRaw('Copying\x20'+projectName+'\x20files...');for(const _0x3f93a4 of allFilesToCopy){const _0x461d87=_0x3f93a4===files['gitIgnore']?gitIgnoreTemplate:folders['cli']+'/'+_0x3f93a4,_0x2eb253=_0x50ac40['join'](repoRoot,_0x461d87),_0x3cf50c=replaceToolsFolder(_0x3f93a4),_0x4e7d83=_0x50ac40['join'](_0x481f39,_0x3cf50c);if(existsSync(_0x2eb253)){const _0x28e466=await promises['stat'](_0x2eb253);_0x28e466['isDirectory']()?await copyDirectoryContents(_0x2eb253,_0x4e7d83):await copyAndProcessFile(_0x2eb253,_0x4e7d83);}else logInfoRaw('Source\x20file\x20not\x20found:\x20'+_0x461d87);}logInfoRaw('Files\x20copied\x20and\x20imports\x20updated!');}__name(copyProjectFiles,'copyProjectFiles');function replaceToolsFolder(_0x4a09cc){let _0x5456f6=_0x4a09cc;for(const [_0x5b1a0e,_0x2d00cc]of Object['entries'](toolsFoldersToReplace)){if(_0x5456f6['startsWith'](_0x5b1a0e)&&isWithIndexer(_0x2d00cc)){const _0xee8802=_0x2d00cc;for(const _0x177ba9 in _0xee8802){const _0x119958=_0xee8802[_0x177ba9];isString(_0x119958)&&(_0x5456f6=_0x5456f6['replace'](_0x177ba9,_0x119958));}break;}}return _0x5456f6;}__name(replaceToolsFolder,'replaceToolsFolder');function shouldIgnorePath(_0x720310,_0x7422c3,_0x2a173c=![]){const _0x461b42=_0x50ac40['relative'](repoRoot,_0x720310)['replace'](/\\/g,'/'),_0x9874ea=foldersToIgnore['map'](_0x4fccc1=>_0x4fccc1['replace'](/\\/g,'/'));if(_0x9874ea['includes'](_0x461b42))return !![];if(_0x2a173c){const _0x446248=_0x50ac40['relative'](_0x7422c3,_0x720310)['replace'](/\\/g,'/'),_0x5ef506=_0x446248['split']('/');return _0x9874ea['some'](_0xab2868=>_0x5ef506['some'](_0x6aa4f0=>_0x6aa4f0===_0xab2868));}return ![];}__name(shouldIgnorePath,'shouldIgnorePath');async function copyDirectoryContents(_0x2baeed,_0x576855){!existsSync(_0x576855)&&mkdirSync(_0x576855,{'recursive':!![]});try{const _0x42bcb4=await promises['readdir'](_0x2baeed,{'withFileTypes':!![]});for(const _0x4f1e8f of _0x42bcb4){const _0x59fccb=_0x50ac40['join'](_0x2baeed,_0x4f1e8f['name']),_0x49ff35=_0x50ac40['join'](_0x576855,_0x4f1e8f['name']);!shouldIgnorePath(_0x59fccb,_0x2baeed,_0x4f1e8f['isDirectory']())&&(_0x4f1e8f['isDirectory']()?await copyDirectoryContents(_0x59fccb,_0x49ff35):await copyAndProcessFile(_0x59fccb,_0x49ff35));}}catch(_0x5cd0cc){const _0x2e8c39=_0x5cd0cc instanceof Error?_0x5cd0cc['message']:unknownError;logStringError('Error\x20reading\x20directory\x20'+_0x2baeed+':\x20'+_0x2e8c39);throw _0x5cd0cc;}}__name(copyDirectoryContents,'copyDirectoryContents');async function copyAndProcessFile(_0x3c1254,_0x1e05c0){const _0x82a773=_0x50ac40['dirname'](_0x1e05c0);!existsSync(_0x82a773)&&mkdirSync(_0x82a773,{'recursive':!![]});const _0x2a02e7=await promises['stat'](_0x3c1254);if(_0x2a02e7['isDirectory']())await copyDirectoryContents(_0x3c1254,_0x1e05c0);else {const _0x226cc4=_0x50ac40['extname'](_0x3c1254)['toLowerCase'](),_0x21300c=[fileExtensions['ico'],fileExtensions['png'],fileExtensions['jpg'],fileExtensions['jpeg'],fileExtensions['webp'],fileExtensions['gif'],fileExtensions['svg'],'.pdf'];if(_0x21300c['includes'](_0x226cc4)){await promises['copyFile'](_0x3c1254,_0x1e05c0);return;}const _0x4b0e32=await promises['readFile'](_0x3c1254,'utf8'),_0x32bc0e=replaceImports(_0x4b0e32);await promises['writeFile'](_0x1e05c0,_0x32bc0e,'utf8');}}__name(copyAndProcessFile,'copyAndProcessFile');function createAdditionalFolders(_0x2f82fe){for(const _0x5b8981 of additionalFoldersToCreate){const _0x2520a3=_0x50ac40['join'](_0x2f82fe,_0x5b8981);!existsSync(_0x2520a3)&&(mkdirSync(_0x2520a3,{'recursive':!![]}),logInfoRaw('Created\x20folder:\x20'+_0x5b8981));}logInfoRaw('Additional\x20folders\x20created!');}__name(createAdditionalFolders,'createAdditionalFolders');async function setupPreCommitHooks(_0xf50494){const _0x3d6815=_0x50ac40['join'](_0xf50494,folders['husky']),_0xa39409=_0x50ac40['join'](_0x3d6815,files['preCommit']),_0x35e05a=_0x50ac40['join'](_0x3d6815,files['commitMsg']);mkdirSync(_0x3d6815,{'recursive':!![]}),await promises['writeFile'](_0xa39409,cliScripts['preCommit'],'utf8'),await promises['writeFile'](_0x35e05a,cliScripts['commitMsg'],'utf8'),runCommand(cliScripts['chmodPreCommit'],_0xf50494),runCommand(cliScripts['chmodCommitMsg'],_0xf50494);}__name(setupPreCommitHooks,'setupPreCommitHooks');async function setupEslintConfig(_0x19cb08){const _0x4bebe3=_0x50ac40['join'](_0x19cb08,files['eslintConfigMjs']);existsSync(_0x4bebe3)&&await promises['rm'](_0x4bebe3);const _0x25bd38=_0x50ac40['join'](_0x19cb08,files['eslintConfigJs']);await promises['writeFile'](_0x25bd38,cliEslintContent,'utf8');}__name(setupEslintConfig,'setupEslintConfig');async function enableRepoModeExtras(_0x129731,_0x3a724f){logInfoRaw('Enabling\x20recommendation\x20mode\x20('+gitCommandArguments['dashR']+')...'),runCommand(cliScripts['gitInit'],_0x129731),runCommand(cliScripts['installDevHuskyTsx'],_0x129731),runCommand(cliScripts['setLint'],_0x129731),runCommand(cliScripts['installHusky'],_0x129731),_0x3a724f&&await setupPreCommitHooks(_0x129731);}__name(enableRepoModeExtras,'enableRepoModeExtras');async function updateLayoutTitle(_0x505769,_0x3926c0){const _0x102a27=_0x50ac40['join'](_0x505769,projectPaths['app']+'/'+files['layout']),_0x111298='Cannot\x20update\x20title';if(!existsSync(_0x102a27))throw createError(files['layout']+'\x20not\x20found\x20at\x20'+_0x102a27+',\x20'+_0x111298+'.');let _0x6aac6c=await promises['readFile'](_0x102a27,'utf8');const _0x47b91f=/title: projectName,/g;if(!_0x47b91f['test'](_0x6aac6c))throw createError('projectName\x20not\x20found\x20in\x20'+files['layout']+',\x20'+_0x111298+'.');_0x6aac6c=_0x6aac6c['replace'](_0x47b91f,'title:\x20\x22'+_0x3926c0+'\x22,'),_0x6aac6c=_0x6aac6c['replace'](/import\s*{\s*projectName\s*}\s*from\s*["'][^"']+["'];?\s*\n?/g,''),await promises['writeFile'](_0x102a27,_0x6aac6c,'utf8');}__name(updateLayoutTitle,'updateLayoutTitle');async function normalizeLineEndings(_0x314126){if(_0x28eb30['platform']()!==nodeOsPlatforms['win32'])return;const _0x3ba3f6=[fileExtensions['ts'],fileExtensions['tsx'],fileExtensions['js'],fileExtensions['json'],fileExtensions['css'],files['dotEnv'],fileExtensions['md'],fileExtensions['mjs']],_0x4e3036=[_0x314126];while(_0x4e3036['length']>0x2539+0x1deb+-0x4324){const _0x27665c=_0x4e3036['pop'](),_0x3fc0e5=await promises['readdir'](_0x27665c,{'withFileTypes':!![]});for(const _0x53b46a of _0x3fc0e5){const _0xd0548b=_0x50ac40['join'](_0x27665c,_0x53b46a['name']);if(_0x53b46a['isDirectory']())_0x4e3036['push'](_0xd0548b);else {const _0x3af49b=_0x50ac40['extname'](_0xd0548b)['toLowerCase']();if(_0x3ba3f6['includes'](_0x3af49b)&&existsSync(_0xd0548b)){const _0x2ed9f5=await promises['readFile'](_0xd0548b,'utf8'),_0x179118=_0x2ed9f5['replace'](/\r?\n/g,'\x0d\x0a');await promises['writeFile'](_0xd0548b,_0x179118,'utf8');}}}}}__name(normalizeLineEndings,'normalizeLineEndings');
19
28
 
20
- export { create };
29
+ 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['saasKit']+'\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=(_0x46db76,_0x136fb4)=>__defProp(_0x46db76,'name',{'value':_0x136fb4,'configurable':!![]});function normalizePathForRollUpCopy(_0x2025fd){return _0x2025fd['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.40",
3
+ "version": "0.1.41-1096",
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,7 +50,7 @@
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
55
  "groq-sdk": "0.9.1",
59
56
  "ioredis": "5.7.0",
@@ -67,34 +64,32 @@
67
64
  "lru-cache": "11.1.0",
68
65
  "lucide-react": "0.503.0",
69
66
  "module-alias": "2.2.3",
70
- "next": "16.1.1",
71
- "nodemailer": "6.10.1",
67
+ "next": "16.2.4",
68
+ "nodemailer": "8.0.5",
72
69
  "pg-boss": "10.3.2",
73
- "plaid": "30.1.0",
74
- "playwright": "1.52.0",
70
+ "plaid": "42.1.0",
71
+ "playwright": "1.59.1",
75
72
  "pluralize": "8.0.0",
76
73
  "postgres": "3.4.7",
77
74
  "prism-react-renderer": "2.4.1",
78
75
  "quill": "2.0.3",
79
- "react": "19.2.3",
76
+ "react": "19.2.4",
80
77
  "react-colorful": "5.6.1",
81
78
  "react-day-picker": "9.11.1",
82
- "react-dom": "19.2.3",
79
+ "react-dom": "19.2.4",
83
80
  "react-grid-layout": "1.5.2",
84
81
  "react-hook-form": "7.62.0",
85
82
  "react-resizable-panels": "2.1.9",
86
83
  "recharts": "2.15.4",
87
- "rollup": "4.50.0",
88
- "rollup-obfuscator": "4.1.1",
84
+ "rollup": "4.60.2",
89
85
  "rollup-plugin-esbuild": "6.2.1",
90
86
  "rollup-plugin-obfuscator": "1.1.0",
91
- "rollup-plugin-postcss": "4.0.2",
92
87
  "rollup-plugin-typescript-paths": "1.5.0",
93
88
  "screenshotone-api-sdk": "1.1.21",
94
89
  "sharp": "0.33.5",
95
- "simple-git": "3.28.0",
96
- "socket.io": "4.8.1",
97
- "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",
98
93
  "sonner": "2.0.7",
99
94
  "stripe": "16.12.0",
100
95
  "tailwind-merge": "3.3.1",
@@ -103,24 +98,19 @@
103
98
  "ts-prune": "0.10.3",
104
99
  "tslib": "2.8.1",
105
100
  "tsx": "4.20.5",
106
- "uuid": "10.0.0",
101
+ "uuid": "14.0.0",
107
102
  "v8-to-istanbul": "9.3.0",
108
- "webpack": "5.101.3",
103
+ "webpack": "5.106.2",
109
104
  "zod": "3.25.76"
110
105
  },
111
106
  "devDependencies": {
112
- "@docusaurus/module-type-aliases": "3.8.1",
113
- "@docusaurus/types": "3.8.1",
107
+ "@docusaurus/module-type-aliases": "3.10.0",
108
+ "@docusaurus/types": "3.10.0",
114
109
  "@eslint-stylistic/metadata": "5.3.1",
115
110
  "@eslint/eslintrc": "3.3.1",
116
111
  "@eslint/js": "9.35.0",
117
112
  "@mdx-js/react": "3.1.1",
118
- "@nx/eslint": "22.3.3",
119
- "@nx/js": "22.3.3",
120
- "@nx/next": "22.3.3",
121
- "@rollup/plugin-babel": "6.1.0",
122
- "@rollup/plugin-terser": "0.4.4",
123
- "@rollup/plugin-typescript": "12.1.4",
113
+ "@rollup/plugin-babel": "7.0.0",
124
114
  "@stylistic/eslint-plugin": "5.3.1",
125
115
  "@stylistic/eslint-plugin-jsx": "4.4.1",
126
116
  "@tailwindcss/postcss": "4.1.16",
@@ -133,10 +123,10 @@
133
123
  "@types/lodash.debounce": "4.0.9",
134
124
  "@types/lodash.isequal": "4.5.8",
135
125
  "@types/lru-cache": "7.10.10",
136
- "@types/node": "24.5.2",
137
- "@types/nodemailer": "6.4.19",
126
+ "@types/node": "24.12.2",
127
+ "@types/nodemailer": "8.0.0",
138
128
  "@types/pluralize": "0.0.33",
139
- "@types/react": "19.2.7",
129
+ "@types/react": "19.2.14",
140
130
  "@types/react-dom": "19.2.3",
141
131
  "@types/react-grid-layout": "1.3.5",
142
132
  "@types/swagger-ui-react": "5.18.0",
@@ -150,9 +140,10 @@
150
140
  "cli-table3": "0.6.5",
151
141
  "commander": "14.0.0",
152
142
  "cross-env": "7.0.3",
153
- "drizzle-kit": "0.28.1",
143
+ "discord.js": "14.26.3",
144
+ "drizzle-kit": "0.31.10",
154
145
  "eslint": "9.35.0",
155
- "eslint-config-next": "16.1.1",
146
+ "eslint-config-next": "16.2.1",
156
147
  "eslint-config-prettier": "10.1.8",
157
148
  "eslint-import-resolver-typescript": "4.4.4",
158
149
  "eslint-plugin-github": "6.0.0",
@@ -167,23 +158,26 @@
167
158
  "eslint-plugin-sonarjs": "3.0.5",
168
159
  "globby": "16.0.0",
169
160
  "husky": "9.1.7",
170
- "nx": "22.3.3",
171
161
  "postcss": "8.5.6",
172
162
  "prettier": "3.6.2",
173
163
  "prettier-plugin-tailwindcss": "0.7.1",
174
164
  "raw-loader": "4.0.2",
175
165
  "rollup-plugin-copy": "3.5.0",
176
- "rollup-plugin-delete": "2.2.0",
177
- "rollup-plugin-dts": "6.2.3",
178
166
  "rollup-preserve-directives": "1.1.3",
179
- "swagger-ui": "5.29.5",
180
- "swagger-ui-react": "5.29.5",
167
+ "swagger-ui": "5.32.4",
168
+ "swagger-ui-react": "5.32.4",
181
169
  "tailwindcss": "4.1.17",
182
170
  "ts-node": "10.9.2",
183
- "typedoc": "0.28.12",
184
- "typedoc-plugin-markdown": "4.8.1",
171
+ "typedoc": "0.28.19",
172
+ "typedoc-plugin-markdown": "4.11.0",
185
173
  "typescript": "5.9.2",
186
- "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"
187
181
  },
188
182
  "type": "module"
189
- }
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'](([_0x75502a,_0x40ba02])=>[_0x75502a+'/*',[_0x40ba02+'/*']]));
5
-
6
- exports.aliasSymbols = aliasSymbols;
7
- exports.modulePathAliases = modulePathAliases;
8
- exports.typescriptAliases = typescriptAliases;