@fernir2/saas-kit-cli 0.1.40 → 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 -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 +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 -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 +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 +49 -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 -23
  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=(_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');
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=(_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=(_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=(_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=(_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=(_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=(_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']((_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'](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 _0x20c19a from 'path';
6
- import _0x5f4fd1 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=(_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');
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.40",
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,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;