@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
@@ -1,130 +1,130 @@
1
- div.ql-toolbar.ql-snow {
2
- padding: 0.5rem 0.75rem;
3
- border-top-right-radius: var(--radius);
4
- border-top-left-radius: var(--radius);
5
- border: 1px solid hsl(var(--border));
6
- }
7
-
8
- .ql-toolbar.ql-snow .ql-picker-label {
9
- padding-left: 0;
10
- border: none;
11
- }
12
-
13
- .ql-toolbar.ql-snow .ql-picker-label::before {
14
- font-family: "__GeistSans_3a0388", serif;
15
- }
16
-
17
- .ql-editor {
18
- font-size: 14px;
19
- padding: 10px 12px;
20
- }
21
-
22
- div.ql-container.ql-snow {
23
- height: max-content;
24
- border: 1px solid hsl(var(--border));
25
- border-bottom-right-radius: var(--radius);
26
- border-bottom-left-radius: var(--radius);
27
- }
28
-
29
- .ql-tooltip {
30
- display: none;
31
- }
32
-
33
- .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options {
34
- z-index: 11;
35
- }
36
-
37
- .ql-picker-label,
38
- .ql-picker-label .ql-stroke {
39
- color: hsl(var(--popover-foreground));
40
- stroke: hsl(var(--popover-foreground));
41
- fill: hsl(var(--popover-foreground));
42
- }
43
-
44
- .ql-toolbar .ql-formats button {
45
- color: hsl(var(--popover-foreground));
46
- }
47
-
48
- .ql-toolbar .ql-formats button .ql-stroke {
49
- stroke: hsl(var(--popover-foreground));
50
- }
51
-
52
- .ql-toolbar .ql-formats button .ql-fill {
53
- fill: hsl(var(--popover-foreground));
54
- }
55
-
56
- .ql-toolbar .ql-active,
57
- .ql-toolbar .ql-active .ql-stroke,
58
- .ql-toolbar .ql-active .ql-fill {
59
- color: hsl(var(--popover-foreground));
60
- fill: none;
61
- stroke: none;
62
- }
63
-
64
- .ql-snow .ql-picker {
65
- font-weight: 400;
66
- }
67
-
68
- .ql-editor.ql-blank::before {
69
- left: 12px;
70
- right: 12px;
71
- color: hsl(var(--muted-foreground));
72
- }
73
-
74
- .ql-toolbar .ql-formats button:hover .ql-stroke,
75
- .ql-toolbar .ql-picker .ql-picker-label:hover .ql-stroke,
76
- .ql-toolbar .ql-picker .ql-picker-label.ql-active .ql-stroke,
77
- .ql-toolbar .ql-formats button.ql-active .ql-stroke {
78
- stroke: hsl(var(--foreground));
79
- stroke-width: 2;
80
- }
81
-
82
- .ql-toolbar .ql-formats button:hover .ql-fill,
83
- .ql-toolbar .ql-formats button.ql-active .ql-fill {
84
- fill: hsl(var(--foreground));
85
- }
86
-
87
- .ql-toolbar .ql-picker .ql-picker-label:hover::before,
88
- .ql-toolbar .ql-picker .ql-picker-label.ql-active::before,
89
- .ql-picker .ql-picker-options .ql-picker-item.ql-selected::before {
90
- color: hsl(var(--foreground));
91
- font-weight: 600;
92
- }
93
-
94
- .ql-snow .ql-picker-options .ql-picker-item:hover {
95
- border-radius: 0.375rem;
96
- background: hsl(var(--muted) / 0.5);
97
- }
98
-
99
- .ql-toolbar .ql-formats button .ql-stroke,
100
- .ql-toolbar .ql-picker .ql-picker-label .ql-stroke {
101
- stroke: hsl(var(--foreground));
102
- stroke-width: 1.2;
103
- }
104
-
105
- .ql-toolbar .ql-formats button .ql-fill {
106
- fill: hsl(var(--foreground));
107
- }
108
-
109
- .ql-toolbar .ql-picker .ql-picker-label::before,
110
- .ql-picker .ql-picker-options .ql-picker-item::before {
111
- color: hsl(var(--foreground));
112
- font-weight: 400;
113
- }
114
-
115
- .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options {
116
- min-width: 12rem;
117
- z-index: 50;
118
- margin-right: 1rem;
119
- border-radius: 0.375rem;
120
- background-color: hsl(var(--background));
121
- border: 1px solid hsl(var(--border));
122
- box-shadow: 0rem 0rem 0.1rem 0.01rem hsl(var(--fd-toolbar-shadow));
123
- outline: none;
124
- pointer-events: auto;
125
- }
126
-
127
- .ql-snow .ql-picker-options .ql-picker-item {
128
- width: 100%;
129
- padding: 0.5rem 0.75rem;
130
- }
1
+ div.ql-toolbar.ql-snow {
2
+ padding: 0.5rem 0.75rem;
3
+ border-top-right-radius: var(--radius);
4
+ border-top-left-radius: var(--radius);
5
+ border: 1px solid hsl(var(--border));
6
+ }
7
+
8
+ .ql-toolbar.ql-snow .ql-picker-label {
9
+ padding-left: 0;
10
+ border: none;
11
+ }
12
+
13
+ .ql-toolbar.ql-snow .ql-picker-label::before {
14
+ font-family: "__GeistSans_3a0388", serif;
15
+ }
16
+
17
+ .ql-editor {
18
+ font-size: 14px;
19
+ padding: 10px 12px;
20
+ }
21
+
22
+ div.ql-container.ql-snow {
23
+ height: max-content;
24
+ border: 1px solid hsl(var(--border));
25
+ border-bottom-right-radius: var(--radius);
26
+ border-bottom-left-radius: var(--radius);
27
+ }
28
+
29
+ .ql-tooltip {
30
+ display: none;
31
+ }
32
+
33
+ .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options {
34
+ z-index: 11;
35
+ }
36
+
37
+ .ql-picker-label,
38
+ .ql-picker-label .ql-stroke {
39
+ color: hsl(var(--popover-foreground));
40
+ stroke: hsl(var(--popover-foreground));
41
+ fill: hsl(var(--popover-foreground));
42
+ }
43
+
44
+ .ql-toolbar .ql-formats button {
45
+ color: hsl(var(--popover-foreground));
46
+ }
47
+
48
+ .ql-toolbar .ql-formats button .ql-stroke {
49
+ stroke: hsl(var(--popover-foreground));
50
+ }
51
+
52
+ .ql-toolbar .ql-formats button .ql-fill {
53
+ fill: hsl(var(--popover-foreground));
54
+ }
55
+
56
+ .ql-toolbar .ql-active,
57
+ .ql-toolbar .ql-active .ql-stroke,
58
+ .ql-toolbar .ql-active .ql-fill {
59
+ color: hsl(var(--popover-foreground));
60
+ fill: none;
61
+ stroke: none;
62
+ }
63
+
64
+ .ql-snow .ql-picker {
65
+ font-weight: 400;
66
+ }
67
+
68
+ .ql-editor.ql-blank::before {
69
+ left: 12px;
70
+ right: 12px;
71
+ color: hsl(var(--muted-foreground));
72
+ }
73
+
74
+ .ql-toolbar .ql-formats button:hover .ql-stroke,
75
+ .ql-toolbar .ql-picker .ql-picker-label:hover .ql-stroke,
76
+ .ql-toolbar .ql-picker .ql-picker-label.ql-active .ql-stroke,
77
+ .ql-toolbar .ql-formats button.ql-active .ql-stroke {
78
+ stroke: hsl(var(--foreground));
79
+ stroke-width: 2;
80
+ }
81
+
82
+ .ql-toolbar .ql-formats button:hover .ql-fill,
83
+ .ql-toolbar .ql-formats button.ql-active .ql-fill {
84
+ fill: hsl(var(--foreground));
85
+ }
86
+
87
+ .ql-toolbar .ql-picker .ql-picker-label:hover::before,
88
+ .ql-toolbar .ql-picker .ql-picker-label.ql-active::before,
89
+ .ql-picker .ql-picker-options .ql-picker-item.ql-selected::before {
90
+ color: hsl(var(--foreground));
91
+ font-weight: 600;
92
+ }
93
+
94
+ .ql-snow .ql-picker-options .ql-picker-item:hover {
95
+ border-radius: 0.375rem;
96
+ background: hsl(var(--muted) / 0.5);
97
+ }
98
+
99
+ .ql-toolbar .ql-formats button .ql-stroke,
100
+ .ql-toolbar .ql-picker .ql-picker-label .ql-stroke {
101
+ stroke: hsl(var(--foreground));
102
+ stroke-width: 1.2;
103
+ }
104
+
105
+ .ql-toolbar .ql-formats button .ql-fill {
106
+ fill: hsl(var(--foreground));
107
+ }
108
+
109
+ .ql-toolbar .ql-picker .ql-picker-label::before,
110
+ .ql-picker .ql-picker-options .ql-picker-item::before {
111
+ color: hsl(var(--foreground));
112
+ font-weight: 400;
113
+ }
114
+
115
+ .ql-toolbar.ql-snow .ql-picker.ql-expanded .ql-picker-options {
116
+ min-width: 12rem;
117
+ z-index: 50;
118
+ margin-right: 1rem;
119
+ border-radius: 0.375rem;
120
+ background-color: hsl(var(--background));
121
+ border: 1px solid hsl(var(--border));
122
+ box-shadow: 0rem 0rem 0.1rem 0.01rem hsl(var(--fd-toolbar-shadow));
123
+ outline: none;
124
+ pointer-events: auto;
125
+ }
126
+
127
+ .ql-snow .ql-picker-options .ql-picker-item {
128
+ width: 100%;
129
+ padding: 0.5rem 0.75rem;
130
+ }
@@ -1,12 +1,8 @@
1
- FD_INTEGRATION_ENABLED=true
2
-
3
- FD_DATABASE_CONNECTION_STRING="postgresql://postgres:root@localhost:5432/saas-kit"
4
-
5
- NEXT_PUBLIC_FD_SEED_DEMO_RESOURCES=true
6
- FD_SEED_DEV_RESOURCES=true
7
-
8
- FD_SENDER_EMAIL=
9
- FD_EMAIL_SERVICE_URL=
10
- FD_EMAIL_SERVICE_KEY=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
11
-
12
- NODE_OPTIONS="--import=tsx"
1
+ FD_DATABASE_CONNECTION_STRING="postgresql://postgres:root@localhost:5432/saas-kit"
2
+
3
+ NEXT_PUBLIC_FD_SEED_DEMO_RESOURCES=true
4
+ FD_SEED_DEV_RESOURCES=true
5
+
6
+ FD_SENDER_EMAIL=
7
+ FD_EMAIL_SERVICE_URL=
8
+ FD_EMAIL_SERVICE_KEY=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
@@ -0,0 +1,54 @@
1
+ # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2
+
3
+ # dependencies
4
+ node_modules/
5
+
6
+ # testing
7
+ test-results/
8
+ playwright-report/
9
+ blob-report/
10
+ playwright/.cache/
11
+
12
+ # next.js
13
+ .next/
14
+
15
+ # production
16
+ build/
17
+ dist/
18
+
19
+ # node.js compile cache
20
+ .node_cache/
21
+
22
+ # misc
23
+ .DS_Store
24
+ *.pem
25
+
26
+ # debug
27
+ npm-debug.log*
28
+ pnpm-debug.log*
29
+
30
+ # env files
31
+ .env
32
+ .env*.local
33
+
34
+ # vercel
35
+ .vercel/
36
+
37
+ # typescript
38
+ *.tsbuildinfo
39
+ next-env.d.ts
40
+
41
+ # generated
42
+ generated/
43
+ tsconfig.resources.json
44
+ server/content/
45
+
46
+ # editor directories and files
47
+ .idea
48
+ .suo
49
+ .ntvs*
50
+ .njsproj
51
+ .sln
52
+ .sw?
53
+ .vs
54
+ .vscode/
@@ -0,0 +1,20 @@
1
+ import { test as base, PlaywrightTestArgs, PlaywrightWorkerArgs, TestType } from "playwright/test";
2
+ import { testScope } from "@fernir2/saas-kit/test";
3
+ import { initSaasKit } from "@/app/init-saas-kit";
4
+
5
+ export type WorkerArgs = PlaywrightWorkerArgs & { metaInitialized: void };
6
+ export type TestArgs = PlaywrightTestArgs;
7
+
8
+ export const test: TestType<TestArgs, WorkerArgs> = base.extend({
9
+ metaInitialized: [
10
+ // Approved
11
+ // eslint-disable-next-line no-empty-pattern
12
+ async ({}, use: () => Promise<void>) => {
13
+ initSaasKit();
14
+ await use();
15
+ },
16
+ { scope: testScope.workerScope, auto: true },
17
+ ],
18
+ });
19
+
20
+ export const expect = test.expect;
@@ -1,3 +1,7 @@
1
- import { playwrightGlobalSetup } from "@fernir2/saas-kit";
2
-
3
- export default playwrightGlobalSetup;
1
+ import { playwrightGlobalSetup } from "@fernir2/saas-kit/test";
2
+ import { initSaasKit } from "@/app/init-saas-kit";
3
+
4
+ export default async function globalSetup() {
5
+ initSaasKit();
6
+ await playwrightGlobalSetup();
7
+ }
@@ -0,0 +1,7 @@
1
+ import { playwrightGlobalTeardown } from "@fernir2/saas-kit/test";
2
+ import { initSaasKit } from "@/app/init-saas-kit";
3
+
4
+ export default async function globalTeardown() {
5
+ initSaasKit();
6
+ await playwrightGlobalTeardown();
7
+ }
package/cli/tsconfig.json CHANGED
@@ -1,15 +1,16 @@
1
- {
2
- "extends": "@fernir2/saas-kit/cli/configs/tsconfig.cli.json",
3
- "compilerOptions": {
4
- "rootDir": "./",
5
- "baseUrl": "./",
6
- "paths": {
7
- "@/*": ["./src/*"],
8
- "@schemas/*": ["./generated/*"],
9
- "@npm-commands/*": ["./npm-commands/*"],
10
- "@root/*": ["./*"]
11
- }
12
- },
13
- "include": ["next-env.d.ts", "global.d.ts", "./**/*", ".next/types/**/*.ts"],
14
- "exclude": ["node_modules", "dist", "build", ".next", "server.ts"]
15
- }
1
+ {
2
+ "extends": "@fernir2/saas-kit/cli/configs/tsconfig.cli.json",
3
+ "compilerOptions": {
4
+ "rootDir": "./",
5
+ "baseUrl": "./",
6
+ "paths": {
7
+ "@/*": ["./src/*"],
8
+ "@schemas/crud-handler-map": ["./generated/meta/crud-handler-map.ts"],
9
+ "@schemas/*": ["./generated/*"],
10
+ "@npm-commands/*": ["./npm-commands/*"],
11
+ "@root/*": ["./*"]
12
+ }
13
+ },
14
+ "include": ["next-env.d.ts", "global.d.ts", "./**/*", ".next/types/**/*.ts"],
15
+ "exclude": ["node_modules", "dist", "build", ".next", "server.ts"]
16
+ }
@@ -0,0 +1,5 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "include": ["**/*.ts", "**/*.tsx", "./**/*", "package.json"],
4
+ "exclude": ["node_modules", "dist"]
5
+ }
@@ -1,14 +1,15 @@
1
- {
2
- "extends": "@fernir2/saas-kit/cli/configs/tsconfig.server.json",
3
- "compilerOptions": {
4
- "rootDir": "./",
5
- "baseUrl": "./",
6
- "paths": {
7
- "@/*": ["./src/*"],
8
- "@schemas/*": ["./generated/*"],
9
- "@npm-commands/*": ["./npm-commands/*"],
10
- "@root/*": ["./*"]
11
- }
12
- },
13
- "include": ["server.ts"]
14
- }
1
+ {
2
+ "extends": "@fernir2/saas-kit/cli/configs/tsconfig.server.json",
3
+ "compilerOptions": {
4
+ "rootDir": "./",
5
+ "baseUrl": "./",
6
+ "paths": {
7
+ "@/*": ["./src/*"],
8
+ "@schemas/crud-handler-map": ["./generated/meta/crud-handler-map.ts"],
9
+ "@schemas/*": ["./generated/*"],
10
+ "@npm-commands/*": ["./npm-commands/*"],
11
+ "@root/*": ["./*"]
12
+ }
13
+ },
14
+ "include": ["server.ts"]
15
+ }
@@ -1,11 +1,11 @@
1
1
  'use strict';
2
2
  import { apiBaseGet, apiBaseGetBlob, postBaseApi, baseApiHandleResponse, putBaseApi, deleteBaseApi } from './base-api.js';
3
3
  import { getApiPath } from './api-paths.js';
4
- import { getODataParams } from '../odata/odatas.js';
4
+ import { getODataParams } from '../odata/odata.js';
5
5
  import { getAuthToken } from '../auth/tokens.js';
6
6
  import { headerNames, httpContentTypes } from '../constants/header-names.js';
7
- import { httpMethods } from '../http/http-constants.js';
7
+ import { httpMethods } from '../../base-repo/constants/http-methods.js';
8
8
 
9
- var __defProp=Object['defineProperty'],__name=(_0x3ed8bd,_0x2e2b8)=>__defProp(_0x3ed8bd,'name',{'value':_0x2e2b8,'configurable':!![]});async function apiGet(_0x54aee0,_0x5ba0a5,_0x4c8f6b,_0x32a8b5){const _0x5f2d80=getApiPath(_0x54aee0,_0x5ba0a5,_0x4c8f6b);return apiBaseGet(_0x5f2d80,getApiHeaders(_0x32a8b5));}__name(apiGet,'apiGet');async function apiGetBlob(_0x8b3505,_0x17717f,_0x1fe237,_0x45b56b){const _0x17e64f=getApiPath(_0x8b3505,_0x17717f,_0x1fe237);return apiBaseGetBlob(_0x17e64f,getApiHeaders(_0x45b56b,!![]));}__name(apiGetBlob,'apiGetBlob');async function apiGetWithOData(_0x4e335c,_0x5913f5,_0x485e65){const _0x4ae7f6=getODataParams(_0x5913f5);return apiGet(_0x4e335c,_0x485e65,_0x4ae7f6);}__name(apiGetWithOData,'apiGetWithOData');async function apiPost(_0x1159ad,_0x12931f,_0x2cb5db){const _0x3896bd=getApiPath(_0x1159ad);return postBaseApi(_0x3896bd,_0x12931f,getApiHeaders(_0x2cb5db));}__name(apiPost,'apiPost');async function apiPostFile(_0x6c348c,_0x158fd7,_0x9e476f){const _0x1a1f4d=getApiPath(_0x6c348c),_0x2351f7=await fetch(_0x1a1f4d,{'method':httpMethods['post'],'body':_0x158fd7,'headers':getApiHeaders(_0x9e476f,!![])});return baseApiHandleResponse(_0x2351f7);}__name(apiPostFile,'apiPostFile');async function apiPut(_0x466342,_0x208eb7,_0x298c7b){const _0x59e086=getApiPath(_0x466342);return putBaseApi(_0x59e086,_0x208eb7,getApiHeaders(_0x298c7b));}__name(apiPut,'apiPut');async function apiDelete(_0x53b172,_0x3969f6,_0x1ca35c){const _0x29f840=getApiPath(_0x53b172,_0x3969f6);return deleteBaseApi(_0x29f840,getApiHeaders(_0x1ca35c));}__name(apiDelete,'apiDelete');function getApiHeaders(_0x2d2dc0,_0x4dac17=![]){const _0x118a69=_0x2d2dc0??new Headers(),_0x2a595f=getAuthToken();return (!_0x118a69['get'](headerNames['authHeaderName'])||_0x118a69['get'](headerNames['authHeaderName'])==='')&&_0x2a595f&&_0x118a69['set'](headerNames['authHeaderName'],headerNames['authHeaderValuePrefix']+_0x2a595f),!_0x4dac17&&!_0x118a69['get'](httpContentTypes['contentTypeHeaderName'])&&_0x118a69['set'](httpContentTypes['contentTypeHeaderName'],httpContentTypes['contentTypeHeaderValue']),_0x118a69;}__name(getApiHeaders,'getApiHeaders');
9
+ var __defProp=Object['defineProperty'],__name=(_0xa1032b,_0xe1c4e)=>__defProp(_0xa1032b,'name',{'value':_0xe1c4e,'configurable':!![]});async function apiGet(_0x78d6f6,_0x2b95d2,_0x10a42e,_0x21876f){const _0x2c339d=getApiPath(_0x78d6f6,_0x2b95d2,_0x10a42e);return apiBaseGet(_0x2c339d,getApiHeaders(_0x21876f));}__name(apiGet,'apiGet');async function apiGetBlob(_0x10a87d,_0x5be66f,_0x3bd33c,_0x2fc244){const _0x1c42b7=getApiPath(_0x10a87d,_0x5be66f,_0x3bd33c);return apiBaseGetBlob(_0x1c42b7,getApiHeaders(_0x2fc244,!![]));}__name(apiGetBlob,'apiGetBlob');async function apiGetWithOData(_0x2def35,_0x4a622d,_0x3179c2){const _0x41c1b5=getODataParams(_0x4a622d);return apiGet(_0x2def35,_0x3179c2,_0x41c1b5);}__name(apiGetWithOData,'apiGetWithOData');async function apiPost(_0x40a583,_0xe83ac,_0x357bc8){const _0x20d0c0=getApiPath(_0x40a583);return postBaseApi(_0x20d0c0,_0xe83ac,getApiHeaders(_0x357bc8));}__name(apiPost,'apiPost');async function apiPostFile(_0x33592a,_0x5b10c9,_0x587bd0){const _0x20b905=getApiPath(_0x33592a),_0x5c154d=await fetch(_0x20b905,{'method':httpMethods['post'],'body':_0x5b10c9,'headers':getApiHeaders(_0x587bd0,!![])});return baseApiHandleResponse(_0x5c154d);}__name(apiPostFile,'apiPostFile');async function apiPut(_0x232535,_0x30d5ec,_0xc74e19){const _0x308da6=getApiPath(_0x232535);return putBaseApi(_0x308da6,_0x30d5ec,getApiHeaders(_0xc74e19));}__name(apiPut,'apiPut');async function apiDelete(_0x47a1ab,_0x30f2db,_0x19a6ce){const _0x431c71=getApiPath(_0x47a1ab,_0x30f2db);return deleteBaseApi(_0x431c71,getApiHeaders(_0x19a6ce));}__name(apiDelete,'apiDelete');function getApiHeaders(_0x16fcbe,_0x1b6098=![]){const _0x15ef52=_0x16fcbe??new Headers(),_0x214295=getAuthToken();return (!_0x15ef52['get'](headerNames['authHeaderName'])||_0x15ef52['get'](headerNames['authHeaderName'])==='')&&_0x214295&&_0x15ef52['set'](headerNames['authHeaderName'],headerNames['authHeaderValuePrefix']+_0x214295),!_0x1b6098&&!_0x15ef52['get'](httpContentTypes['contentTypeHeaderName'])&&_0x15ef52['set'](httpContentTypes['contentTypeHeaderName'],httpContentTypes['contentTypeApplicationJson']),_0x15ef52;}__name(getApiHeaders,'getApiHeaders');
10
10
 
11
11
  export { apiDelete, apiGet, apiGetBlob, apiGetWithOData, apiPost, apiPostFile, apiPut };
@@ -1,7 +1,10 @@
1
1
  'use strict';
2
2
  import { resourceNames } from '../resources/resource-names.js';
3
3
  import { join } from 'path';
4
+ import { apiRoutes } from '../server/constants/api-routes-constants.js';
5
+ import { folders } from '../../base-repo/app-constants/project-paths.js';
6
+ import { contentFormatNames, commonLowerCaseWords, mutationActionNames } from '../../base-repo/constants/internal-common-strings.js';
4
7
 
5
- const hint=resourceNames['hint']['toLowerCase'](),subscription=resourceNames['subscription']['toLowerCase'](),payment=resourceNames['payment']['toLowerCase']();const apiPathNames={'hint':hint,'meta':'meta','uiMetas':'uimetas','uiMeta':'uimeta','login':'account/login','token':'connect/token','logout':'account/logout','getOne':join(hint,'getone'),'user':'user','preLoad':'preload','userPermission':'user-permission','otherUser':'other-user','person':'person','friend':'friend','relation':'relation','log':'log','version':'version','markdownRender':'markdown/render','forgotPassword':'password/forgot-password','resetPassword':'password/reset-password','editPassword':'password/edit-password','payment':payment,'paymentVerifyFail':join(payment,'verify-fail'),'paymentVerifySuccess':join(payment,'verify-success'),'paymentMethod':join(payment,'method'),'subscription':subscription,'cancelSubscription':join(subscription,'cancel'),'updateSubscription':join(subscription,'update'),'createSubscription':join(subscription,'create'),'paymentPlan':'paymentplan','feature':'feature','paymentPlanFeature':'paymentplanfeature','markdown':'markdown','searchResult':'search-result','searchableResource':'searchable-resources','search':'search','blob':'blob','statusBoard':'statusboard','aiScan':'lm/ai-scan','changeWorkspace':'workspace/change','visibleWorkspace':'visible-workspace','test':'test','testData':'test/data'};
8
+ const hint=resourceNames['hint']['toLowerCase'](),subscription=resourceNames['subscription']['toLowerCase'](),payment=resourceNames['payment']['toLowerCase']();const apiPathNames={'hint':hint,'uiMetas':'uimetas','uiMeta':'uimeta','login':apiRoutes['accountLogin'],'token':apiRoutes['connectToken'],'logout':apiRoutes['accountLogout'],'getOne':join(hint,'getone'),'user':commonLowerCaseWords['user'],'preLoad':'preload','userPermission':'user-permission','otherUser':'other-user','person':'person','friend':'friend','relation':'relation','log':commonLowerCaseWords['log'],'markdownRender':'markdown/render','forgotPassword':'password/forgot-password','resetPassword':'password/reset-password','editPassword':'password/edit-password','payment':payment,'paymentVerifyFail':join(payment,'verify-fail'),'paymentVerifySuccess':join(payment,'verify-success'),'paymentMethod':join(payment,commonLowerCaseWords['method']),'subscription':subscription,'cancelSubscription':join(subscription,'cancel'),'updateSubscription':join(subscription,mutationActionNames['update']),'createSubscription':join(subscription,folders['createSaasKitApp']),'paymentPlan':'paymentplan','feature':'feature','paymentPlanFeature':'paymentplanfeature','markdown':contentFormatNames['markdown'],'searchResult':'search-result','searchableResource':'searchable-resources','search':commonLowerCaseWords['search'],'blob':contentFormatNames['blob'],'statusBoard':'statusboard','changeWorkspace':'workspace/change','visibleWorkspace':'visible-workspace','testData':'test/data'};
6
9
 
7
10
  export { apiPathNames };
@@ -1,7 +1,8 @@
1
1
  'use strict';
2
2
  import { combineEndpointPath } from '../http/url/urls.js';
3
3
  import { addQueryParamsToPath } from '../routing/paths.js';
4
+ import { folders } from '../../base-repo/app-constants/project-paths.js';
4
5
 
5
- var __defProp=Object['defineProperty'],__name=(_0x596bbf,_0x1ac308)=>__defProp(_0x596bbf,'name',{'value':_0x1ac308,'configurable':!![]});const apiPrefix='api';function getApiPath(_0x557dbc,_0x58f435,_0x5be9c3){let _0x46197b=combineEndpointPath(apiPrefix,_0x557dbc);return _0x58f435&&(_0x46197b=combineEndpointPath(_0x46197b,_0x58f435)),_0x46197b=addQueryParamsToPath(_0x46197b,_0x5be9c3),new URL(_0x46197b,getBaseUrl())['href'];}__name(getApiPath,'getApiPath');function getBaseUrl(){return location['protocol']+'//'+location['hostname']+':'+location['port']+'/';}__name(getBaseUrl,'getBaseUrl');
6
+ var __defProp=Object['defineProperty'],__name=(_0x33280b,_0x33c950)=>__defProp(_0x33280b,'name',{'value':_0x33c950,'configurable':!![]});function getApiPath(_0x193ff2,_0x415c78,_0x3a8abb){let _0x39d8d7=combineEndpointPath(folders['api'],_0x193ff2);return _0x415c78&&(_0x39d8d7=combineEndpointPath(_0x39d8d7,_0x415c78)),_0x39d8d7=addQueryParamsToPath(_0x39d8d7,_0x3a8abb),new URL(_0x39d8d7,getBaseUrl())['href'];}__name(getApiPath,'getApiPath');function getBaseUrl(){return location['protocol']+'//'+location['hostname']+':'+location['port']+'/';}__name(getBaseUrl,'getBaseUrl');
6
7
 
7
8
  export { getApiPath };
@@ -1,13 +1,14 @@
1
1
  'use strict';
2
2
  import { logAndNotify } from '../errors/error-handler.js';
3
- import { httpMethods } from '../http/http-constants.js';
3
+ import { httpMethods } from '../../base-repo/constants/http-methods.js';
4
4
  import { getProblemDetails } from '../errors/problem-details.js';
5
5
  import { httpStatusCodes } from '../constants/http-status-codes.js';
6
6
  import { goToLogin, getRelativeLoginUrl } from '../routing/login-routers.js';
7
- import { removeLoginState } from '../auth/login-states.js';
7
+ import { removeLoginState } from '../auth/internal-login-states.js';
8
8
  import { isBrowser } from '../lib/environments.js';
9
9
  import { getJsonFromResponse } from '../lib/utils.js';
10
+ import { httpContentTypes } from '../constants/header-names.js';
10
11
 
11
- var __defProp=Object['defineProperty'],__name=(_0x35b0ae,_0x3536e0)=>__defProp(_0x35b0ae,'name',{'value':_0x3536e0,'configurable':!![]});async function apiBaseGet(_0x3658c6,_0x4220a1){const _0x14d2b9=await fetch(_0x3658c6,{'method':httpMethods['get'],'headers':_0x4220a1});return baseApiHandleResponse(_0x14d2b9);}__name(apiBaseGet,'apiBaseGet');async function apiBaseGetBlob(_0x2a3715,_0x5bbaa2){const _0x161e03=await fetch(_0x2a3715,{'method':httpMethods['get'],'headers':_0x5bbaa2});return baseApiHandleBlobResponse(_0x161e03);}__name(apiBaseGetBlob,'apiBaseGetBlob');async function postBaseApi(_0x11bd31,_0x425e92,_0x1c73f2){const _0x368618=await fetch(_0x11bd31,{'method':httpMethods['post'],'headers':_0x1c73f2,'body':_0x425e92 instanceof URLSearchParams?_0x425e92:JSON['stringify'](_0x425e92)});return baseApiHandleResponse(_0x368618);}__name(postBaseApi,'postBaseApi');async function putBaseApi(_0x4dbf02,_0x5cd2bc,_0x4a89ee){const _0x921a32=await fetch(_0x4dbf02,{'method':httpMethods['put'],'headers':_0x4a89ee,'body':JSON['stringify'](_0x5cd2bc)});return baseApiHandleResponse(_0x921a32);}__name(putBaseApi,'putBaseApi');async function deleteBaseApi(_0x538028,_0x4083bf){const _0x461b03=await fetch(_0x538028,{'method':httpMethods['delete'],'headers':_0x4083bf});if(!_0x461b03['ok'])handleErrorResponse(_0x461b03);}__name(deleteBaseApi,'deleteBaseApi');async function baseApiHandleResponse(_0x281cd0){const _0x4358e6=_0x281cd0['headers']['get']('content-type'),_0x239587=_0x4358e6?.['includes']('application/json');isUnauthorizedError(_0x281cd0['status'])&&(removeLoginState(),goToLogin());if(!_0x281cd0['ok'])return handleErrorResponse(_0x281cd0);if(_0x281cd0['status']===httpStatusCodes['noContent']||!_0x239587)return null;return getJsonFromResponse(_0x281cd0);}__name(baseApiHandleResponse,'baseApiHandleResponse');async function baseApiHandleBlobResponse(_0x3585e5){isUnauthorizedError(_0x3585e5['status'])&&goToLogin();if(!_0x3585e5['ok']){const _0x45f075=await handleErrorResponse(_0x3585e5);return _0x45f075;}if(_0x3585e5['status']===httpStatusCodes['noContent'])return null;const _0x29479a=await _0x3585e5['blob']();return _0x29479a;}__name(baseApiHandleBlobResponse,'baseApiHandleBlobResponse');async function handleErrorResponse(_0x3f2449){const _0x2ff6c5=_0x3f2449['headers']['get']('content-type'),_0xc769dd=_0x2ff6c5?.['includes']('application/json');let _0x3a7372='',_0x3507ec='';if(_0xc769dd){const _0x15bf03=await getJsonFromResponse(_0x3f2449);_0x3a7372=_0x15bf03?.['message'],_0x3507ec=_0x15bf03?.['description']||'';}_0x3a7372=_0x3a7372?_0x3a7372:_0x3f2449['statusText'];const _0x99a928={'status':_0x3f2449['status'],'message':_0x3a7372},_0x51b219={'originalUrl':_0x3f2449['url']};return _0x3f2449['status']!==httpStatusCodes['unauthorized']&&logAndNotify(new Error(_0x3a7372)),getProblemDetails(_0x99a928,_0x51b219,_0x3507ec);}__name(handleErrorResponse,'handleErrorResponse');function isUnauthorizedError(_0x3378d7){return _0x3378d7===httpStatusCodes['unauthorized']&&isBrowser()&&window['location']['pathname']!==getRelativeLoginUrl();}__name(isUnauthorizedError,'isUnauthorizedError');
12
+ var __defProp=Object['defineProperty'],__name=(_0x441ee0,_0x4f5614)=>__defProp(_0x441ee0,'name',{'value':_0x4f5614,'configurable':!![]});async function apiBaseGetResponse(_0x19e943,_0x3d20bb){const _0x5366d1=await fetch(_0x19e943,_0x3d20bb);return isUnauthorizedError(_0x5366d1['status'])&&(removeLoginState(),goToLogin()),_0x5366d1;}__name(apiBaseGetResponse,'apiBaseGetResponse');async function apiBaseGet(_0x24797e,_0xda333e){const _0x103e58=await fetch(_0x24797e,{'method':httpMethods['get'],'headers':_0xda333e});return baseApiHandleResponse(_0x103e58);}__name(apiBaseGet,'apiBaseGet');async function apiBaseGetBlob(_0x1b031b,_0x235513){const _0x4eba2a=await fetch(_0x1b031b,{'method':httpMethods['get'],'headers':_0x235513});return baseApiHandleBlobResponse(_0x4eba2a);}__name(apiBaseGetBlob,'apiBaseGetBlob');async function postBaseApi(_0x3992d9,_0x527f6b,_0xe0d628){const _0xf907e=await fetch(_0x3992d9,{'method':httpMethods['post'],'headers':_0xe0d628,'body':_0x527f6b instanceof URLSearchParams?_0x527f6b:JSON['stringify'](_0x527f6b)});return baseApiHandleResponse(_0xf907e);}__name(postBaseApi,'postBaseApi');async function putBaseApi(_0x185eb7,_0x3d49ec,_0x48d998){const _0x5186cc=await fetch(_0x185eb7,{'method':httpMethods['put'],'headers':_0x48d998,'body':JSON['stringify'](_0x3d49ec)});return baseApiHandleResponse(_0x5186cc);}__name(putBaseApi,'putBaseApi');async function deleteBaseApi(_0x2a9d7e,_0x7fd8b0){const _0x53a029=await fetch(_0x2a9d7e,{'method':httpMethods['delete'],'headers':_0x7fd8b0});if(!_0x53a029['ok'])handleErrorResponse(_0x53a029);}__name(deleteBaseApi,'deleteBaseApi');async function baseApiHandleResponse(_0x4755aa){const _0x17df8b=_0x4755aa['headers']['get'](httpContentTypes['contentTypeHeaderName']),_0x43792d=_0x17df8b?.['includes'](httpContentTypes['contentTypeApplicationJson']);let _0x1ed43d;isUnauthorizedError(_0x4755aa['status'])&&(removeLoginState(),goToLogin());if(!_0x4755aa['ok'])_0x1ed43d=await handleErrorResponse(_0x4755aa);else _0x4755aa['status']===httpStatusCodes['noContent']||!_0x43792d?_0x1ed43d=void(0x2*0x2ad+-0x1d4b+0x17f1):_0x1ed43d=await getJsonFromResponse(_0x4755aa);return _0x1ed43d;}__name(baseApiHandleResponse,'baseApiHandleResponse');async function baseApiHandleBlobResponse(_0x42c3aa){let _0x1b1c78;isUnauthorizedError(_0x42c3aa['status'])&&goToLogin();if(!_0x42c3aa['ok'])_0x1b1c78=await handleErrorResponse(_0x42c3aa);else _0x42c3aa['status']===httpStatusCodes['noContent']?_0x1b1c78=void(-0x1*-0x14b1+-0x1*0x1a49+-0xb3*-0x8):_0x1b1c78=await _0x42c3aa['blob']();return _0x1b1c78;}__name(baseApiHandleBlobResponse,'baseApiHandleBlobResponse');async function handleErrorResponse(_0x342986){const _0x5f3c1a=_0x342986['headers']['get'](httpContentTypes['contentTypeHeaderName']),_0x5a9f42=_0x5f3c1a?.['includes'](httpContentTypes['contentTypeApplicationJson']);let _0x119316='',_0xb317b='';if(_0x5a9f42){const _0x4b6111=await getJsonFromResponse(_0x342986);_0x119316=_0x4b6111?.['message'],_0xb317b=_0x4b6111?.['description']||'';}_0x119316=_0x119316?_0x119316:_0x342986['statusText'];const _0x300c4e={'status':_0x342986['status'],'message':_0x119316},_0x22b5d1={'originalUrl':_0x342986['url']};return _0x342986['status']!==httpStatusCodes['unauthorized']&&logAndNotify(new Error(_0x119316)),getProblemDetails(_0x300c4e,_0x22b5d1,_0xb317b);}__name(handleErrorResponse,'handleErrorResponse');function isUnauthorizedError(_0x32dbb4){return _0x32dbb4===httpStatusCodes['unauthorized']&&isBrowser()&&window['location']['pathname']!==getRelativeLoginUrl();}__name(isUnauthorizedError,'isUnauthorizedError');
12
13
 
13
- export { apiBaseGet, apiBaseGetBlob, baseApiHandleBlobResponse, baseApiHandleResponse, deleteBaseApi, handleErrorResponse, postBaseApi, putBaseApi };
14
+ export { apiBaseGet, apiBaseGetBlob, apiBaseGetResponse, baseApiHandleBlobResponse, baseApiHandleResponse, deleteBaseApi, handleErrorResponse, postBaseApi, putBaseApi };
@@ -1,10 +1,10 @@
1
1
  'use strict';
2
- import { emptyGuid } from '../constants/constants.js';
2
+ import { emptyUuid } from '../constants/constants.js';
3
3
  import { setLocalStorage, getLocalStorage, removeLocalStorage } from '../local-storage/local-storage.js';
4
4
  import { publicImages } from '../constants/public-files.js';
5
- import { extensions } from '../constants/extensions.js';
5
+ import { fileExtensionsWithoutDot } from '../../base-repo/app-constants/internal-system-constants.js';
6
6
  import { getSessionStorage, setSessionStorage, removeSessionStorage } from './session-storage.js';
7
7
 
8
- var __defProp=Object['defineProperty'],__name=(_0x356974,_0x108eac)=>__defProp(_0x356974,'name',{'value':_0x108eac,'configurable':!![]});const loginStateKey='LoginState',afterLoginRedirectUrlKey='AfterLoginRedirectUrl';function isLoggedIn(){return getLoginState()['loggedIn'];}__name(isLoggedIn,'isLoggedIn');function setLoginState(_0x4e0b5c){setLocalStorage(loginStateKey,_0x4e0b5c);}__name(setLoginState,'setLoginState');function getLoginState(){return getLocalStorage(loginStateKey)??getEmptyLoginState();}__name(getLoginState,'getLoginState');function removeLoginState(){removeLocalStorage(loginStateKey);}__name(removeLoginState,'removeLoginState');function getAfterLoginRedirectUrl(){return getSessionStorage(afterLoginRedirectUrlKey);}__name(getAfterLoginRedirectUrl,'getAfterLoginRedirectUrl');function setAfterLoginRedirectUrl(){const _0x4a76a1=(window['location']['pathname']+window['location']['search'])['slice'](-0x1*-0x14d4+0x76d*0x3+-0x4ca*0x9);setSessionStorage(afterLoginRedirectUrlKey,_0x4a76a1);}__name(setAfterLoginRedirectUrl,'setAfterLoginRedirectUrl');function removeAfterLoginRedirectUrl(){removeSessionStorage(afterLoginRedirectUrlKey);}__name(removeAfterLoginRedirectUrl,'removeAfterLoginRedirectUrl');function getEmptyLoginState(){const _0x4bad9e={'email':'','loggedIn':![],'displayName':'','userId':emptyGuid,'imageUrl':'/'+publicImages['user']+'/'+emptyGuid+'.'+extensions['webp']};return _0x4bad9e;}__name(getEmptyLoginState,'getEmptyLoginState');
8
+ var __defProp=Object['defineProperty'],__name=(_0x369654,_0x5708ac)=>__defProp(_0x369654,'name',{'value':_0x5708ac,'configurable':!![]});const loginStateKey='LoginState',afterLoginRedirectUrlKey='AfterLoginRedirectUrl';function isLoggedIn(){return getLoginState()['loggedIn'];}__name(isLoggedIn,'isLoggedIn');function setLoginState(_0x28215b){setLocalStorage(loginStateKey,_0x28215b);}__name(setLoginState,'setLoginState');function getLoginState(){return getLocalStorage(loginStateKey)??getEmptyLoginState();}__name(getLoginState,'getLoginState');function removeLoginState(){removeLocalStorage(loginStateKey);}__name(removeLoginState,'removeLoginState');function getAfterLoginRedirectUrl(){return getSessionStorage(afterLoginRedirectUrlKey);}__name(getAfterLoginRedirectUrl,'getAfterLoginRedirectUrl');function setAfterLoginRedirectUrl(){const _0x230e61=(window['location']['pathname']+window['location']['search'])['slice'](-0xf71*-0x1+-0x1b74+0xc04);setSessionStorage(afterLoginRedirectUrlKey,_0x230e61);}__name(setAfterLoginRedirectUrl,'setAfterLoginRedirectUrl');function removeAfterLoginRedirectUrl(){removeSessionStorage(afterLoginRedirectUrlKey);}__name(removeAfterLoginRedirectUrl,'removeAfterLoginRedirectUrl');function getEmptyLoginState(){const _0x1a9fed={'email':'','loggedIn':![],'displayName':'','userId':emptyUuid,'imageUrl':'/'+publicImages['user']+'/'+emptyUuid+'.'+fileExtensionsWithoutDot['webp']};return _0x1a9fed;}__name(getEmptyLoginState,'getEmptyLoginState');
9
9
 
10
10
  export { getAfterLoginRedirectUrl, getLoginState, isLoggedIn, removeAfterLoginRedirectUrl, removeLoginState, setAfterLoginRedirectUrl, setLoginState };
@@ -2,6 +2,6 @@
2
2
  import { isBrowser } from '../lib/environments.js';
3
3
  import { parseJson } from '../lib/utils.js';
4
4
 
5
- var __defProp=Object['defineProperty'],__name=(_0x310855,_0x311c83)=>__defProp(_0x310855,'name',{'value':_0x311c83,'configurable':!![]});function sessionStorageGetAsString(_0x550587){if(isBrowser()){const _0x254b45=sessionStorage['getItem'](_0x550587);return _0x254b45??void(0x25ab+0xa2*-0x9+-0x1*0x1ff9);}return void(-0x948+-0xe1+-0x1*-0xa29);}__name(sessionStorageGetAsString,'sessionStorageGetAsString');function getSessionStorage(_0x2f3bac){const _0x1a52ea=sessionStorageGetAsString(_0x2f3bac);return _0x1a52ea?parseJson(_0x1a52ea):void(-0xb*0x2bb+0x5ce*-0x1+0x23d7);}__name(getSessionStorage,'getSessionStorage');function setSessionStorage(_0x241c87,_0x3543f7){if(_0x3543f7===void(0x1*-0x2429+0x14e2+-0xf47*-0x1))return;sessionStorage['setItem'](_0x241c87,JSON['stringify'](_0x3543f7));}__name(setSessionStorage,'setSessionStorage');function removeSessionStorage(_0x3fd7ab){sessionStorage['removeItem'](_0x3fd7ab);}__name(removeSessionStorage,'removeSessionStorage');
5
+ var __defProp=Object['defineProperty'],__name=(_0x1672a3,_0x48642e)=>__defProp(_0x1672a3,'name',{'value':_0x48642e,'configurable':!![]});function sessionStorageGetAsString(_0x19dc73){if(isBrowser()){const _0x1cba86=sessionStorage['getItem'](_0x19dc73);return _0x1cba86??void(0x5e9+-0x210b+0x1b22);}return void(-0xe59*-0x1+-0x67*-0x49+0x577*-0x8);}__name(sessionStorageGetAsString,'sessionStorageGetAsString');function getSessionStorage(_0x47672c){const _0x46f5ed=sessionStorageGetAsString(_0x47672c);return _0x46f5ed?parseJson(_0x46f5ed):void(-0x146f*0x1+-0x2d1+0x1740);}__name(getSessionStorage,'getSessionStorage');function setSessionStorage(_0x3d7e3b,_0x530be3){if(_0x530be3===void(-0x25*-0xb1+0x11*-0x144+-0x3*0x15b))return;sessionStorage['setItem'](_0x3d7e3b,JSON['stringify'](_0x530be3));}__name(setSessionStorage,'setSessionStorage');function removeSessionStorage(_0x2ef022){sessionStorage['removeItem'](_0x2ef022);}__name(removeSessionStorage,'removeSessionStorage');
6
6
 
7
7
  export { getSessionStorage, removeSessionStorage, sessionStorageGetAsString, setSessionStorage };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
  import { getLocalStorage, setLocalStorage, removeLocalStorage } from '../local-storage/local-storage.js';
3
3
 
4
- var __defProp=Object['defineProperty'],__name=(_0x2920c5,_0x2b855f)=>__defProp(_0x2920c5,'name',{'value':_0x2b855f,'configurable':!![]});const tokenKey='token';function getAuthToken(){return getLocalStorage(tokenKey);}__name(getAuthToken,'getAuthToken');function rememberAuthToken(_0x289adb){setLocalStorage(tokenKey,_0x289adb);}__name(rememberAuthToken,'rememberAuthToken');function forgetAuthToken(){removeLocalStorage(tokenKey);}__name(forgetAuthToken,'forgetAuthToken');
4
+ var __defProp=Object['defineProperty'],__name=(_0x2a91f4,_0x115eec)=>__defProp(_0x2a91f4,'name',{'value':_0x115eec,'configurable':!![]});const tokenKey='token';function getAuthToken(){return getLocalStorage(tokenKey);}__name(getAuthToken,'getAuthToken');function rememberAuthToken(_0x182533){setLocalStorage(tokenKey,_0x182533);}__name(rememberAuthToken,'rememberAuthToken');function forgetAuthToken(){removeLocalStorage(tokenKey);}__name(forgetAuthToken,'forgetAuthToken');
5
5
 
6
6
  export { forgetAuthToken, getAuthToken, rememberAuthToken, tokenKey };
@@ -0,0 +1,7 @@
1
+ 'use strict';
2
+ import { fileExtensionsWithoutDot } from '../../base-repo/app-constants/internal-system-constants.js';
3
+ import { commonLowerCaseWords } from '../../base-repo/constants/internal-common-strings.js';
4
+
5
+ const wellKnownUserProps={'name':commonLowerCaseWords['name'],'firstName':'firstName','lastName':'lastName','country':'country','email':'email','phoneNumber':'phoneNumber','password':'password','confirmPassword':'confirmPassword','repeatPassword':'repeatPassword','currentPassword':'currentPassword','newPassword':'newPassword','zip':fileExtensionsWithoutDot['zip'],'isDisabled':'isDisabled','openid':'openid','profile':commonLowerCaseWords['profile'],'picture':commonLowerCaseWords['picture']};
6
+
7
+ export { wellKnownUserProps };
@@ -1,4 +1,4 @@
1
1
  'use strict';
2
- const emptyGuid='00000000-0000-0000-0000-000000000000';const minHintPriorityValue=-0x8*-0x35+0x25ba+0x2761*-0x1;const englishLanguageCode='en-US';const emptySelectValue='empty';const emptySelectIndex=0xff*-0x6+-0x3db*-0x7+-0x3*0x701;const fieldValuesSeparator=',\x20';const noName='No\x20name';const projectName='SaaS\x20Kit';
2
+ const emptyUuid='00000000-0000-0000-0000-000000000000';const minHintPriorityValue=0x526+0x101*0x1d+0x1121*-0x2;const emptyString='empty';const englishLanguageCode='en-US';const timeZoneNames={'utc':'UTC'};const emptySelectIndex=-0xc05*-0x3+0x14*0x1a3+0x1*-0x44cb;const fieldValuesSeparator=',\x20';const noName='No\x20name';const commonStrings={'deleteString':'Delete','editString':'Edit'};
3
3
 
4
- export { emptyGuid, emptySelectIndex, emptySelectValue, englishLanguageCode, fieldValuesSeparator, minHintPriorityValue, noName, projectName };
4
+ export { commonStrings, emptySelectIndex, emptyString, emptyUuid, englishLanguageCode, fieldValuesSeparator, minHintPriorityValue, noName, timeZoneNames };
@@ -1,4 +1,7 @@
1
1
  'use strict';
2
- const appEnvironments={'development':'development','production':'production','test':'test','staging':'staging','demo':'demo'};const launchMode={'direct':'direct'};
2
+ import { folders } from '../../base-repo/app-constants/project-paths.js';
3
+ import { resourceFolders } from './resource-folders.js';
4
+
5
+ const appEnvironments={'development':'development','production':'production','test':folders['test'],'staging':'staging','demo':resourceFolders['demo']};const launchMode={'direct':'direct','proxy':'proxy'};
3
6
 
4
7
  export { appEnvironments, launchMode };