@nlabs/metropolisjs 0.1.1 → 0.2.0

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 (326) hide show
  1. package/.github/copilot-instructions.md +167 -0
  2. package/AGENTS.md +13 -0
  3. package/CHANGELOG.md +112 -0
  4. package/GRAPHQL_VALIDATION_RESULTS.md +158 -0
  5. package/PERMISSION_GRAPHQL_INTEGRATION.md +293 -0
  6. package/PERMISSION_IMPLEMENTATION_SUMMARY.md +243 -0
  7. package/README.md +1343 -0
  8. package/SIGNIN_GRAPHQL_VALIDATION.md +125 -0
  9. package/VAULT_GRAPHQL_API_FINDINGS.md +312 -0
  10. package/docs/ACTIONS.md +63 -0
  11. package/docs/COLLECTIONS.md +1038 -0
  12. package/docs/CONNECTIONS.md +1367 -0
  13. package/docs/CRUD_INTEGRATION.md +702 -0
  14. package/examples/connections-usage.tsx +909 -0
  15. package/examples/content-actions-usage.ts +144 -0
  16. package/examples/crud-usage.tsx +847 -0
  17. package/examples/extensibility-usage.tsx +889 -0
  18. package/examples/factory-pattern-usage.ts +283 -0
  19. package/examples/i18n-import-examples.ts +86 -0
  20. package/examples/i18n-namespace-usage.ts +118 -0
  21. package/examples/i18next-singleton-demo.ts +187 -0
  22. package/examples/permission-system-usage.tsx +415 -0
  23. package/examples/project-details.tsx +397 -0
  24. package/examples/shared-i18n-usage.tsx +203 -0
  25. package/examples/signup-error-handling.ts +100 -0
  26. package/examples/translation-types.ts +86 -0
  27. package/examples/translation-usage.tsx +336 -0
  28. package/factoryPatternGuide.md +244 -0
  29. package/index.js +1 -0
  30. package/jest.config.mjs +28 -0
  31. package/lex.config.mjs +26 -0
  32. package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts +22 -0
  33. package/lib/__tests__/e2e/helpers/testGraphQLServer.d.ts.map +1 -0
  34. package/lib/__tests__/e2e/helpers/testGraphQLServer.js +197 -0
  35. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts +3 -0
  36. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.d.ts.map +1 -0
  37. package/lib/__tests__/e2e/helpers/testGraphQLServerSimple.js +52 -0
  38. package/lib/actions/appActions/appActions.d.ts +29 -0
  39. package/lib/actions/appActions/appActions.d.ts.map +1 -0
  40. package/lib/actions/appActions/appActions.js +159 -0
  41. package/lib/actions/connectionActions/connectionActions.d.ts +19 -0
  42. package/lib/actions/connectionActions/connectionActions.d.ts.map +1 -0
  43. package/lib/actions/connectionActions/connectionActions.js +131 -0
  44. package/lib/actions/contentActions/contentActions.d.ts +34 -0
  45. package/lib/actions/contentActions/contentActions.d.ts.map +1 -0
  46. package/lib/actions/contentActions/contentActions.js +314 -0
  47. package/lib/actions/conversationActions/conversationActions.d.ts +30 -0
  48. package/lib/actions/conversationActions/conversationActions.d.ts.map +1 -0
  49. package/lib/actions/conversationActions/conversationActions.js +225 -0
  50. package/lib/actions/eventActions/eventActions.d.ts +65 -0
  51. package/lib/actions/eventActions/eventActions.d.ts.map +1 -0
  52. package/lib/actions/eventActions/eventActions.js +436 -0
  53. package/lib/actions/groupActions/groupActions.d.ts +30 -0
  54. package/lib/actions/groupActions/groupActions.d.ts.map +1 -0
  55. package/lib/actions/groupActions/groupActions.js +229 -0
  56. package/lib/actions/imageActions/imageActions.d.ts +62 -0
  57. package/lib/actions/imageActions/imageActions.d.ts.map +1 -0
  58. package/lib/actions/imageActions/imageActions.js +593 -0
  59. package/lib/actions/index.d.ts +21 -0
  60. package/lib/actions/index.d.ts.map +1 -0
  61. package/lib/actions/index.js +22 -0
  62. package/lib/actions/locationActions/locationActions.d.ts +60 -0
  63. package/lib/actions/locationActions/locationActions.d.ts.map +1 -0
  64. package/lib/actions/locationActions/locationActions.js +388 -0
  65. package/lib/actions/messageActions/messageActions.d.ts +38 -0
  66. package/lib/actions/messageActions/messageActions.d.ts.map +1 -0
  67. package/lib/actions/messageActions/messageActions.js +235 -0
  68. package/lib/actions/permissionActions/permissionActions.d.ts +34 -0
  69. package/lib/actions/permissionActions/permissionActions.d.ts.map +1 -0
  70. package/lib/actions/permissionActions/permissionActions.js +330 -0
  71. package/lib/actions/personaActions/personaActions.d.ts +65 -0
  72. package/lib/actions/personaActions/personaActions.d.ts.map +1 -0
  73. package/lib/actions/personaActions/personaActions.js +572 -0
  74. package/lib/actions/postActions/postActions.d.ts +36 -0
  75. package/lib/actions/postActions/postActions.d.ts.map +1 -0
  76. package/lib/actions/postActions/postActions.js +447 -0
  77. package/lib/actions/reactionActions/reactionActions.d.ts +38 -0
  78. package/lib/actions/reactionActions/reactionActions.d.ts.map +1 -0
  79. package/lib/actions/reactionActions/reactionActions.js +413 -0
  80. package/lib/actions/sseActions/sseActions.d.ts +38 -0
  81. package/lib/actions/sseActions/sseActions.d.ts.map +1 -0
  82. package/lib/actions/sseActions/sseActions.js +148 -0
  83. package/lib/actions/subscriptionActions/subscriptionActions.d.ts +24 -0
  84. package/lib/actions/subscriptionActions/subscriptionActions.d.ts.map +1 -0
  85. package/lib/actions/subscriptionActions/subscriptionActions.js +329 -0
  86. package/lib/actions/tagActions/tagActions.d.ts +37 -0
  87. package/lib/actions/tagActions/tagActions.d.ts.map +1 -0
  88. package/lib/actions/tagActions/tagActions.js +347 -0
  89. package/lib/actions/translationActions/translationActions.d.ts +38 -0
  90. package/lib/actions/translationActions/translationActions.d.ts.map +1 -0
  91. package/lib/actions/translationActions/translationActions.js +189 -0
  92. package/lib/actions/userActions/userActions.d.ts +78 -0
  93. package/lib/actions/userActions/userActions.d.ts.map +1 -0
  94. package/lib/actions/userActions/userActions.js +844 -0
  95. package/lib/actions/videoActions/videoActions.d.ts +41 -0
  96. package/lib/actions/videoActions/videoActions.d.ts.map +1 -0
  97. package/lib/actions/videoActions/videoActions.js +532 -0
  98. package/lib/actions/websocketActions/websocketActions.d.ts +30 -0
  99. package/lib/actions/websocketActions/websocketActions.d.ts.map +1 -0
  100. package/lib/actions/websocketActions/websocketActions.js +377 -0
  101. package/lib/adapters/appAdapter/appAdapter.d.ts +8 -0
  102. package/lib/adapters/appAdapter/appAdapter.d.ts.map +1 -0
  103. package/lib/adapters/appAdapter/appAdapter.js +90 -0
  104. package/lib/adapters/arangoAdapter/arangoAdapter.d.ts +21 -0
  105. package/lib/adapters/arangoAdapter/arangoAdapter.d.ts.map +1 -0
  106. package/lib/adapters/arangoAdapter/arangoAdapter.js +75 -0
  107. package/lib/adapters/contentAdapter/contentAdapter.d.ts +32 -0
  108. package/lib/adapters/contentAdapter/contentAdapter.d.ts.map +1 -0
  109. package/lib/adapters/contentAdapter/contentAdapter.js +107 -0
  110. package/lib/adapters/conversationAdapter/conversationAdapter.d.ts +24 -0
  111. package/lib/adapters/conversationAdapter/conversationAdapter.d.ts.map +1 -0
  112. package/lib/adapters/conversationAdapter/conversationAdapter.js +75 -0
  113. package/lib/adapters/eventAdapter/eventAdapter.d.ts +46 -0
  114. package/lib/adapters/eventAdapter/eventAdapter.d.ts.map +1 -0
  115. package/lib/adapters/eventAdapter/eventAdapter.js +162 -0
  116. package/lib/adapters/fileAdapter/fileAdapter.d.ts +30 -0
  117. package/lib/adapters/fileAdapter/fileAdapter.d.ts.map +1 -0
  118. package/lib/adapters/fileAdapter/fileAdapter.js +118 -0
  119. package/lib/adapters/groupAdapter/groupAdapter.d.ts +28 -0
  120. package/lib/adapters/groupAdapter/groupAdapter.d.ts.map +1 -0
  121. package/lib/adapters/groupAdapter/groupAdapter.js +66 -0
  122. package/lib/adapters/imageAdapter/imageAdapter.d.ts +38 -0
  123. package/lib/adapters/imageAdapter/imageAdapter.d.ts.map +1 -0
  124. package/lib/adapters/imageAdapter/imageAdapter.js +134 -0
  125. package/lib/adapters/index.d.ts +34 -0
  126. package/lib/adapters/index.d.ts.map +1 -0
  127. package/lib/adapters/index.js +19 -0
  128. package/lib/adapters/locationAdapter/locationAdapter.d.ts +28 -0
  129. package/lib/adapters/locationAdapter/locationAdapter.d.ts.map +1 -0
  130. package/lib/adapters/locationAdapter/locationAdapter.js +95 -0
  131. package/lib/adapters/messageAdapter/messageAdapter.d.ts +31 -0
  132. package/lib/adapters/messageAdapter/messageAdapter.d.ts.map +1 -0
  133. package/lib/adapters/messageAdapter/messageAdapter.js +82 -0
  134. package/lib/adapters/permissionAdapter/permissionAdapter.d.ts +41 -0
  135. package/lib/adapters/permissionAdapter/permissionAdapter.d.ts.map +1 -0
  136. package/lib/adapters/permissionAdapter/permissionAdapter.js +120 -0
  137. package/lib/adapters/personaAdapter/personaAdapter.d.ts +44 -0
  138. package/lib/adapters/personaAdapter/personaAdapter.d.ts.map +1 -0
  139. package/lib/adapters/personaAdapter/personaAdapter.js +161 -0
  140. package/lib/adapters/postAdapter/postAdapter.d.ts +33 -0
  141. package/lib/adapters/postAdapter/postAdapter.d.ts.map +1 -0
  142. package/lib/adapters/postAdapter/postAdapter.js +115 -0
  143. package/lib/adapters/reactionAdapter/reactionAdapter.d.ts +23 -0
  144. package/lib/adapters/reactionAdapter/reactionAdapter.d.ts.map +1 -0
  145. package/lib/adapters/reactionAdapter/reactionAdapter.js +81 -0
  146. package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts +17 -0
  147. package/lib/adapters/reaktorAdapter/reaktorAdapter.d.ts.map +1 -0
  148. package/lib/adapters/reaktorAdapter/reaktorAdapter.js +58 -0
  149. package/lib/adapters/sessionAdapter/sessionAdapter.d.ts +24 -0
  150. package/lib/adapters/sessionAdapter/sessionAdapter.d.ts.map +1 -0
  151. package/lib/adapters/sessionAdapter/sessionAdapter.js +80 -0
  152. package/lib/adapters/tagAdapter/tagAdapter.d.ts +21 -0
  153. package/lib/adapters/tagAdapter/tagAdapter.d.ts.map +1 -0
  154. package/lib/adapters/tagAdapter/tagAdapter.js +98 -0
  155. package/lib/adapters/translationAdapter/translationAdapter.d.ts +21 -0
  156. package/lib/adapters/translationAdapter/translationAdapter.d.ts.map +1 -0
  157. package/lib/adapters/translationAdapter/translationAdapter.js +55 -0
  158. package/lib/adapters/userAdapter/userAdapter.d.ts +67 -0
  159. package/lib/adapters/userAdapter/userAdapter.d.ts.map +1 -0
  160. package/lib/adapters/userAdapter/userAdapter.js +302 -0
  161. package/lib/adapters/videoAdapter/videoAdapter.d.ts +8 -0
  162. package/lib/adapters/videoAdapter/videoAdapter.d.ts.map +1 -0
  163. package/lib/adapters/videoAdapter/videoAdapter.js +194 -0
  164. package/lib/config/index.d.ts +44 -0
  165. package/lib/config/index.d.ts.map +1 -0
  166. package/lib/config/index.js +97 -0
  167. package/lib/constants/Collections.d.ts +44 -0
  168. package/lib/constants/Collections.d.ts.map +1 -0
  169. package/lib/constants/Collections.js +40 -0
  170. package/lib/constants/MetropolisConstants.d.ts +15 -0
  171. package/lib/constants/MetropolisConstants.d.ts.map +1 -0
  172. package/lib/constants/MetropolisConstants.js +15 -0
  173. package/lib/graphql/message.d.ts +3 -0
  174. package/lib/graphql/message.d.ts.map +1 -0
  175. package/lib/graphql/message.js +20 -0
  176. package/lib/graphql/notification.d.ts +3 -0
  177. package/lib/graphql/notification.d.ts.map +1 -0
  178. package/lib/graphql/notification.js +20 -0
  179. package/lib/graphql/session.d.ts +2 -0
  180. package/lib/graphql/session.d.ts.map +1 -0
  181. package/lib/graphql/session.js +17 -0
  182. package/lib/index.d.ts +52 -0
  183. package/lib/index.d.ts.map +1 -0
  184. package/lib/index.js +248 -0
  185. package/lib/stores/appStore.d.ts +23 -0
  186. package/lib/stores/appStore.d.ts.map +1 -0
  187. package/lib/stores/appStore.js +23 -0
  188. package/lib/stores/contentStore.d.ts +36 -0
  189. package/lib/stores/contentStore.d.ts.map +1 -0
  190. package/lib/stores/contentStore.js +139 -0
  191. package/lib/stores/conversationStore.d.ts +38 -0
  192. package/lib/stores/conversationStore.d.ts.map +1 -0
  193. package/lib/stores/conversationStore.js +117 -0
  194. package/lib/stores/eventStore.d.ts +37 -0
  195. package/lib/stores/eventStore.d.ts.map +1 -0
  196. package/lib/stores/eventStore.js +47 -0
  197. package/lib/stores/groupStore.d.ts +37 -0
  198. package/lib/stores/groupStore.d.ts.map +1 -0
  199. package/lib/stores/groupStore.js +68 -0
  200. package/lib/stores/imageStore.d.ts +40 -0
  201. package/lib/stores/imageStore.d.ts.map +1 -0
  202. package/lib/stores/imageStore.js +53 -0
  203. package/lib/stores/index.d.ts +24 -0
  204. package/lib/stores/index.d.ts.map +1 -0
  205. package/lib/stores/index.js +24 -0
  206. package/lib/stores/locationStore.d.ts +34 -0
  207. package/lib/stores/locationStore.d.ts.map +1 -0
  208. package/lib/stores/locationStore.js +42 -0
  209. package/lib/stores/messageStore.d.ts +51 -0
  210. package/lib/stores/messageStore.d.ts.map +1 -0
  211. package/lib/stores/messageStore.js +137 -0
  212. package/lib/stores/notificationStore.d.ts +33 -0
  213. package/lib/stores/notificationStore.d.ts.map +1 -0
  214. package/lib/stores/notificationStore.js +55 -0
  215. package/lib/stores/permissionStore.d.ts +37 -0
  216. package/lib/stores/permissionStore.d.ts.map +1 -0
  217. package/lib/stores/permissionStore.js +117 -0
  218. package/lib/stores/personaStore.d.ts +26 -0
  219. package/lib/stores/personaStore.d.ts.map +1 -0
  220. package/lib/stores/personaStore.js +118 -0
  221. package/lib/stores/postStore.d.ts +34 -0
  222. package/lib/stores/postStore.d.ts.map +1 -0
  223. package/lib/stores/postStore.js +53 -0
  224. package/lib/stores/reactionStore.d.ts +25 -0
  225. package/lib/stores/reactionStore.d.ts.map +1 -0
  226. package/lib/stores/reactionStore.js +28 -0
  227. package/lib/stores/subscriptionStore.d.ts +41 -0
  228. package/lib/stores/subscriptionStore.d.ts.map +1 -0
  229. package/lib/stores/subscriptionStore.js +85 -0
  230. package/lib/stores/tagStore.d.ts +34 -0
  231. package/lib/stores/tagStore.d.ts.map +1 -0
  232. package/lib/stores/tagStore.js +87 -0
  233. package/lib/stores/translationStore.d.ts +42 -0
  234. package/lib/stores/translationStore.d.ts.map +1 -0
  235. package/lib/stores/translationStore.js +122 -0
  236. package/lib/stores/userStore.d.ts +74 -0
  237. package/lib/stores/userStore.d.ts.map +1 -0
  238. package/lib/stores/userStore.js +319 -0
  239. package/lib/stores/videoStore.d.ts +39 -0
  240. package/lib/stores/videoStore.d.ts.map +1 -0
  241. package/lib/stores/videoStore.js +132 -0
  242. package/lib/stores/websocketStore.d.ts +24 -0
  243. package/lib/stores/websocketStore.d.ts.map +1 -0
  244. package/lib/stores/websocketStore.js +51 -0
  245. package/lib/types/apps.types.d.ts +17 -0
  246. package/lib/types/apps.types.d.ts.map +1 -0
  247. package/lib/types/apps.types.js +6 -0
  248. package/lib/types/common.types.d.ts +31 -0
  249. package/lib/types/common.types.d.ts.map +1 -0
  250. package/lib/types/common.types.js +6 -0
  251. package/lib/types/conversations.types.d.ts +17 -0
  252. package/lib/types/conversations.types.d.ts.map +1 -0
  253. package/lib/types/conversations.types.js +6 -0
  254. package/lib/types/edges.types.d.ts +38 -0
  255. package/lib/types/edges.types.d.ts.map +1 -0
  256. package/lib/types/edges.types.js +6 -0
  257. package/lib/types/groups.types.d.ts +19 -0
  258. package/lib/types/groups.types.d.ts.map +1 -0
  259. package/lib/types/groups.types.js +6 -0
  260. package/lib/types/index.d.ts +12 -0
  261. package/lib/types/index.d.ts.map +1 -0
  262. package/lib/types/index.js +12 -0
  263. package/lib/types/subscriptions.types.d.ts +32 -0
  264. package/lib/types/subscriptions.types.d.ts.map +1 -0
  265. package/lib/types/subscriptions.types.js +6 -0
  266. package/lib/types/videos.types.d.ts +61 -0
  267. package/lib/types/videos.types.d.ts.map +1 -0
  268. package/lib/types/videos.types.js +6 -0
  269. package/lib/utils/MetropolisProvider.d.ts +58 -0
  270. package/lib/utils/MetropolisProvider.d.ts.map +1 -0
  271. package/lib/utils/MetropolisProvider.js +31 -0
  272. package/lib/utils/actionFactory.d.ts +24 -0
  273. package/lib/utils/actionFactory.d.ts.map +1 -0
  274. package/lib/utils/actionFactory.js +95 -0
  275. package/lib/utils/api.d.ts +44 -0
  276. package/lib/utils/api.d.ts.map +1 -0
  277. package/lib/utils/api.js +253 -0
  278. package/lib/utils/app.d.ts +7 -0
  279. package/lib/utils/app.d.ts.map +1 -0
  280. package/lib/utils/app.js +15 -0
  281. package/lib/utils/baseActionFactory.d.ts +16 -0
  282. package/lib/utils/baseActionFactory.d.ts.map +1 -0
  283. package/lib/utils/baseActionFactory.js +72 -0
  284. package/lib/utils/configUtils.d.ts +11 -0
  285. package/lib/utils/configUtils.d.ts.map +1 -0
  286. package/lib/utils/configUtils.js +20 -0
  287. package/lib/utils/dateUtils.d.ts +3 -0
  288. package/lib/utils/dateUtils.d.ts.map +1 -0
  289. package/lib/utils/dateUtils.js +11 -0
  290. package/lib/utils/file.d.ts +3 -0
  291. package/lib/utils/file.d.ts.map +1 -0
  292. package/lib/utils/file.js +156 -0
  293. package/lib/utils/i18n.d.ts +7 -0
  294. package/lib/utils/i18n.d.ts.map +1 -0
  295. package/lib/utils/i18n.js +96 -0
  296. package/lib/utils/index.d.ts +20 -0
  297. package/lib/utils/index.d.ts.map +1 -0
  298. package/lib/utils/index.js +26 -0
  299. package/lib/utils/location.d.ts +10 -0
  300. package/lib/utils/location.d.ts.map +1 -0
  301. package/lib/utils/location.js +82 -0
  302. package/lib/utils/permissionUtils.d.ts +22 -0
  303. package/lib/utils/permissionUtils.d.ts.map +1 -0
  304. package/lib/utils/permissionUtils.js +72 -0
  305. package/lib/utils/requestCache.d.ts +8 -0
  306. package/lib/utils/requestCache.d.ts.map +1 -0
  307. package/lib/utils/requestCache.js +53 -0
  308. package/lib/utils/session.d.ts +14 -0
  309. package/lib/utils/session.d.ts.map +1 -0
  310. package/lib/utils/session.js +107 -0
  311. package/lib/utils/useConversationTyping.d.ts +26 -0
  312. package/lib/utils/useConversationTyping.d.ts.map +1 -0
  313. package/lib/utils/useConversationTyping.js +117 -0
  314. package/lib/utils/useMetropolis.d.ts +67 -0
  315. package/lib/utils/useMetropolis.d.ts.map +1 -0
  316. package/lib/utils/useMetropolis.js +311 -0
  317. package/lib/utils/useTranslations.d.ts +16 -0
  318. package/lib/utils/useTranslations.d.ts.map +1 -0
  319. package/lib/utils/useTranslations.js +105 -0
  320. package/lib/utils/validatorFactory.d.ts +49 -0
  321. package/lib/utils/validatorFactory.d.ts.map +1 -0
  322. package/lib/utils/validatorFactory.js +95 -0
  323. package/package.json +75 -28
  324. package/temp_signin.ts +73 -0
  325. package/tsconfig.lint.json +25 -0
  326. package/tsconfig.test.json +14 -0
@@ -0,0 +1,11 @@
1
+ import type { FluxFramework } from '@nlabs/arkhamjs';
2
+ import type { MetropolisEnvironmentConfiguration } from '../config/index.js';
3
+ /**
4
+ * Gets configuration from flux state.
5
+ * Falls back to default config if not found in flux state.
6
+ *
7
+ * @param flux - The Flux framework instance
8
+ * @returns The resolved environment configuration
9
+ */
10
+ export declare const getConfigFromFlux: (flux: FluxFramework) => MetropolisEnvironmentConfiguration;
11
+ //# sourceMappingURL=configUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configUtils.d.ts","sourceRoot":"","sources":["../../src/utils/configUtils.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,KAAK,EAAE,kCAAkC,EAAE,MAAM,oBAAoB,CAAC;AAE7E;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,GAAI,MAAM,aAAa,KAAG,kCASvD,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Copyright (c) 2025-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import { getDefaultConfig } from '../config/index.js';
5
+ /**
6
+ * Gets configuration from flux state.
7
+ * Falls back to default config if not found in flux state.
8
+ *
9
+ * @param flux - The Flux framework instance
10
+ * @returns The resolved environment configuration
11
+ */ export const getConfigFromFlux = (flux)=>{
12
+ const config = flux.getState('app.config');
13
+ if (config) {
14
+ return config;
15
+ }
16
+ // Fallback to default config
17
+ return getDefaultConfig();
18
+ };
19
+
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvY29uZmlnVXRpbHMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMjUtUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7IGdldERlZmF1bHRDb25maWcgfSBmcm9tICcuLi9jb25maWcvaW5kZXguanMnO1xuaW1wb3J0IHR5cGUgeyBGbHV4RnJhbWV3b3JrIH0gZnJvbSAnQG5sYWJzL2Fya2hhbWpzJztcbmltcG9ydCB0eXBlIHsgTWV0cm9wb2xpc0Vudmlyb25tZW50Q29uZmlndXJhdGlvbiB9IGZyb20gJy4uL2NvbmZpZy9pbmRleC5qcyc7XG5cbi8qKlxuICogR2V0cyBjb25maWd1cmF0aW9uIGZyb20gZmx1eCBzdGF0ZS5cbiAqIEZhbGxzIGJhY2sgdG8gZGVmYXVsdCBjb25maWcgaWYgbm90IGZvdW5kIGluIGZsdXggc3RhdGUuXG4gKlxuICogQHBhcmFtIGZsdXggLSBUaGUgRmx1eCBmcmFtZXdvcmsgaW5zdGFuY2VcbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBnZXRDb25maWdGcm9tRmx1eCA9IChmbHV4OiBGbHV4RnJhbWV3b3JrKTogTWV0cm9wb2xpc0Vudmlyb25tZW50Q29uZmlndXJhdGlvbiA9PiB7XG4gIGNvbnN0IGNvbmZpZyA9IGZsdXguZ2V0U3RhdGUoJ2FwcC5jb25maWcnKSBhcyBNZXRyb3BvbGlzRW52aXJvbm1lbnRDb25maWd1cmF0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIGlmIChjb25maWcpIHtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgLy8gRmFsbGJhY2sgdG8gZGVmYXVsdCBjb25maWdcbiAgcmV0dXJuIGdldERlZmF1bHRDb25maWcoKTtcbn07XG4iXSwibmFtZXMiOlsiZ2V0RGVmYXVsdENvbmZpZyIsImdldENvbmZpZ0Zyb21GbHV4IiwiZmx1eCIsImNvbmZpZyIsImdldFN0YXRlIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FDRCxTQUFTQSxnQkFBZ0IsUUFBUSxxQkFBcUI7QUFJdEQ7Ozs7OztDQU1DLEdBQ0QsT0FBTyxNQUFNQyxvQkFBb0IsQ0FBQ0M7SUFDaEMsTUFBTUMsU0FBU0QsS0FBS0UsUUFBUSxDQUFDO0lBRTdCLElBQUlELFFBQVE7UUFDVixPQUFPQTtJQUNUO0lBRUEsNkJBQTZCO0lBQzdCLE9BQU9IO0FBQ1QsRUFBRSJ9
@@ -0,0 +1,3 @@
1
+ import { DateTime } from 'luxon';
2
+ export declare const parseDateTime: (value: string | number | DateTime) => any;
3
+ //# sourceMappingURL=dateUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateUtils.d.ts","sourceRoot":"","sources":["../../src/utils/dateUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,QAAQ,EAAC,MAAM,OAAO,CAAC;AAE/B,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,GAAG,MAAM,GAAG,QAAQ,QAQ9D,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { DateTime } from 'luxon';
2
+ export const parseDateTime = (value)=>{
3
+ if (typeof value === 'string') {
4
+ return DateTime.fromISO(value).toMillis();
5
+ } else if (value instanceof DateTime) {
6
+ return value.toMillis();
7
+ }
8
+ return value;
9
+ };
10
+
11
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvZGF0ZVV0aWxzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGF0ZVRpbWV9IGZyb20gJ2x1eG9uJztcblxuZXhwb3J0IGNvbnN0IHBhcnNlRGF0ZVRpbWUgPSAodmFsdWU6IHN0cmluZyB8IG51bWJlciB8IERhdGVUaW1lKSA9PiB7XG4gIGlmKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gRGF0ZVRpbWUuZnJvbUlTTyh2YWx1ZSkudG9NaWxsaXMoKTtcbiAgfSBlbHNlIGlmKHZhbHVlIGluc3RhbmNlb2YgRGF0ZVRpbWUpIHtcbiAgICByZXR1cm4gKHZhbHVlIGFzIERhdGVUaW1lKS50b01pbGxpcygpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufTtcbiJdLCJuYW1lcyI6WyJEYXRlVGltZSIsInBhcnNlRGF0ZVRpbWUiLCJ2YWx1ZSIsImZyb21JU08iLCJ0b01pbGxpcyJdLCJtYXBwaW5ncyI6IkFBQUEsU0FBUUEsUUFBUSxRQUFPLFFBQVE7QUFFL0IsT0FBTyxNQUFNQyxnQkFBZ0IsQ0FBQ0M7SUFDNUIsSUFBRyxPQUFPQSxVQUFVLFVBQVU7UUFDNUIsT0FBT0YsU0FBU0csT0FBTyxDQUFDRCxPQUFPRSxRQUFRO0lBQ3pDLE9BQU8sSUFBR0YsaUJBQWlCRixVQUFVO1FBQ25DLE9BQU8sQUFBQ0UsTUFBbUJFLFFBQVE7SUFDckM7SUFFQSxPQUFPRjtBQUNULEVBQUUifQ==
@@ -0,0 +1,3 @@
1
+ export declare const convertFileToUploadFile: (file: File, maxSize: number, maxBytes?: number) => Promise<File>;
2
+ export declare const convertFileToBase64: (file: File, maxSize: number, maxBytes?: number) => Promise<string>;
3
+ //# sourceMappingURL=file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../src/utils/file.ts"],"names":[],"mappings":"AAgFA,eAAO,MAAM,uBAAuB,GAClC,MAAM,IAAI,EACV,SAAS,MAAM,EACf,WAAU,MAAmB,KAC5B,OAAO,CAAC,IAAI,CA0Cd,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,MAAM,IAAI,EACV,SAAS,MAAM,EACf,WAAU,MAAmB,KAC5B,OAAO,CAAC,MAAM,CA2Eb,CAAC"}
@@ -0,0 +1,156 @@
1
+ const getUploadPayloadByteSize = (dataUrl)=>dataUrl.length;
2
+ const getFileNameWithoutExtension = (name)=>name.split('.').slice(0, -1).join('.') || name;
3
+ const createImageCanvas = (file, maxSize)=>new Promise((resolve, reject)=>{
4
+ const image = new Image();
5
+ const objectUrl = URL.createObjectURL(file);
6
+ image.onload = ()=>{
7
+ URL.revokeObjectURL(objectUrl);
8
+ const canvas = document.createElement('canvas');
9
+ const { height, width } = image;
10
+ let updatedHeight = height;
11
+ let updatedWidth = width;
12
+ if (width > height) {
13
+ if (width > maxSize) {
14
+ updatedHeight *= maxSize / width;
15
+ updatedWidth = maxSize;
16
+ }
17
+ } else if (height > maxSize) {
18
+ updatedWidth *= maxSize / height;
19
+ updatedHeight = maxSize;
20
+ }
21
+ const context = canvas.getContext('2d');
22
+ if (!context) {
23
+ reject(new Error('Unable to prepare image upload.'));
24
+ return;
25
+ }
26
+ resolve({
27
+ canvas,
28
+ context,
29
+ height: Math.max(1, Math.round(updatedHeight)),
30
+ width: Math.max(1, Math.round(updatedWidth))
31
+ });
32
+ };
33
+ image.onerror = ()=>{
34
+ URL.revokeObjectURL(objectUrl);
35
+ reject(new Error('Unable to prepare image upload.'));
36
+ };
37
+ image.src = objectUrl;
38
+ });
39
+ const renderImageFile = (canvas, context, image, width, height, quality, name)=>new Promise((resolve, reject)=>{
40
+ canvas.width = width;
41
+ canvas.height = height;
42
+ context.clearRect(0, 0, width, height);
43
+ context.drawImage(image, 0, 0, width, height);
44
+ canvas.toBlob((blob)=>{
45
+ if (!blob) {
46
+ reject(new Error('Unable to prepare image upload.'));
47
+ return;
48
+ }
49
+ resolve(new File([
50
+ blob
51
+ ], `${getFileNameWithoutExtension(name)}.jpg`, {
52
+ type: 'image/jpeg'
53
+ }));
54
+ }, 'image/jpeg', quality);
55
+ });
56
+ export const convertFileToUploadFile = async (file, maxSize, maxBytes = 900 * 1024)=>{
57
+ if (!file.type.startsWith('image/') || typeof document === 'undefined') {
58
+ return file;
59
+ }
60
+ const image = new Image();
61
+ const objectUrl = URL.createObjectURL(file);
62
+ try {
63
+ await new Promise((resolve, reject)=>{
64
+ image.onload = ()=>resolve();
65
+ image.onerror = ()=>reject(new Error('Unable to prepare image upload.'));
66
+ image.src = objectUrl;
67
+ });
68
+ const { canvas, context, height, width } = await createImageCanvas(file, maxSize);
69
+ let currentWidth = width;
70
+ let currentHeight = height;
71
+ let quality = 0.82;
72
+ let uploadFile = await renderImageFile(canvas, context, image, currentWidth, currentHeight, quality, file.name);
73
+ while(uploadFile.size > maxBytes && quality > 0.45){
74
+ quality = Math.max(0.45, Number((quality - 0.08).toFixed(2)));
75
+ uploadFile = await renderImageFile(canvas, context, image, currentWidth, currentHeight, quality, file.name);
76
+ }
77
+ while(uploadFile.size > maxBytes && (currentWidth > 320 || currentHeight > 320)){
78
+ currentWidth = Math.max(320, Math.round(currentWidth * 0.85));
79
+ currentHeight = Math.max(320, Math.round(currentHeight * 0.85));
80
+ quality = 0.78;
81
+ uploadFile = await renderImageFile(canvas, context, image, currentWidth, currentHeight, quality, file.name);
82
+ while(uploadFile.size > maxBytes && quality > 0.45){
83
+ quality = Math.max(0.45, Number((quality - 0.08).toFixed(2)));
84
+ uploadFile = await renderImageFile(canvas, context, image, currentWidth, currentHeight, quality, file.name);
85
+ }
86
+ }
87
+ return uploadFile;
88
+ } finally{
89
+ URL.revokeObjectURL(objectUrl);
90
+ }
91
+ };
92
+ export const convertFileToBase64 = (file, maxSize, maxBytes = 900 * 1024)=>new Promise((resolve, reject)=>{
93
+ const reader = new FileReader();
94
+ reader.onload = ()=>{
95
+ const image = new Image();
96
+ image.onload = ()=>{
97
+ const canvas = document.createElement('canvas');
98
+ const { height, width } = image;
99
+ let updatedHeight = height;
100
+ let updatedWidth = width;
101
+ if (width > height) {
102
+ if (width > maxSize) {
103
+ updatedHeight *= maxSize / width;
104
+ updatedWidth = maxSize;
105
+ }
106
+ } else if (height > maxSize) {
107
+ updatedWidth *= maxSize / height;
108
+ updatedHeight = maxSize;
109
+ }
110
+ const context = canvas.getContext('2d');
111
+ if (!context) {
112
+ reject(new Error('Unable to prepare image upload.'));
113
+ return;
114
+ }
115
+ const renderImage = (width, height)=>{
116
+ canvas.width = width;
117
+ canvas.height = height;
118
+ context.clearRect(0, 0, width, height);
119
+ context.drawImage(image, 0, 0, width, height);
120
+ };
121
+ let currentWidth = Math.max(1, Math.round(updatedWidth));
122
+ let currentHeight = Math.max(1, Math.round(updatedHeight));
123
+ let quality = 0.82;
124
+ renderImage(currentWidth, currentHeight);
125
+ let dataUrl = canvas.toDataURL('image/jpeg', quality);
126
+ let byteSize = getUploadPayloadByteSize(dataUrl);
127
+ while(byteSize > maxBytes && quality > 0.45){
128
+ quality = Math.max(0.45, Number((quality - 0.08).toFixed(2)));
129
+ dataUrl = canvas.toDataURL('image/jpeg', quality);
130
+ byteSize = getUploadPayloadByteSize(dataUrl);
131
+ }
132
+ while(byteSize > maxBytes && (currentWidth > 320 || currentHeight > 320)){
133
+ currentWidth = Math.max(320, Math.round(currentWidth * 0.85));
134
+ currentHeight = Math.max(320, Math.round(currentHeight * 0.85));
135
+ quality = 0.78;
136
+ renderImage(currentWidth, currentHeight);
137
+ dataUrl = canvas.toDataURL('image/jpeg', quality);
138
+ byteSize = getUploadPayloadByteSize(dataUrl);
139
+ while(byteSize > maxBytes && quality > 0.45){
140
+ quality = Math.max(0.45, Number((quality - 0.08).toFixed(2)));
141
+ dataUrl = canvas.toDataURL('image/jpeg', quality);
142
+ byteSize = getUploadPayloadByteSize(dataUrl);
143
+ }
144
+ }
145
+ resolve(dataUrl);
146
+ };
147
+ const originalBase64 = reader.result;
148
+ image.src = originalBase64;
149
+ };
150
+ reader.onerror = (event)=>{
151
+ reject(event);
152
+ };
153
+ reader.readAsDataURL(file);
154
+ });
155
+
156
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvZmlsZS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBnZXRVcGxvYWRQYXlsb2FkQnl0ZVNpemUgPSAoZGF0YVVybDogc3RyaW5nKTogbnVtYmVyID0+IGRhdGFVcmwubGVuZ3RoO1xuXG5jb25zdCBnZXRGaWxlTmFtZVdpdGhvdXRFeHRlbnNpb24gPSAobmFtZTogc3RyaW5nKTogc3RyaW5nID0+IChcbiAgbmFtZS5zcGxpdCgnLicpLnNsaWNlKDAsIC0xKS5qb2luKCcuJykgfHwgbmFtZVxuKTtcblxuY29uc3QgY3JlYXRlSW1hZ2VDYW52YXMgPSAoZmlsZTogRmlsZSwgbWF4U2l6ZTogbnVtYmVyKTogUHJvbWlzZTx7XG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQ7XG4gIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDtcbiAgaGVpZ2h0OiBudW1iZXI7XG4gIHdpZHRoOiBudW1iZXI7XG59PiA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XG4gIGNvbnN0IG9iamVjdFVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XG5cbiAgaW1hZ2Uub25sb2FkID0gKCkgPT4ge1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKTtcblxuICAgIGNvbnN0IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICBjb25zdCB7aGVpZ2h0LCB3aWR0aH0gPSBpbWFnZTtcbiAgICBsZXQgdXBkYXRlZEhlaWdodDogbnVtYmVyID0gaGVpZ2h0O1xuICAgIGxldCB1cGRhdGVkV2lkdGg6IG51bWJlciA9IHdpZHRoO1xuXG4gICAgaWYod2lkdGggPiBoZWlnaHQpIHtcbiAgICAgIGlmKHdpZHRoID4gbWF4U2l6ZSkge1xuICAgICAgICB1cGRhdGVkSGVpZ2h0ICo9IG1heFNpemUgLyB3aWR0aDtcbiAgICAgICAgdXBkYXRlZFdpZHRoID0gbWF4U2l6ZTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYoaGVpZ2h0ID4gbWF4U2l6ZSkge1xuICAgICAgdXBkYXRlZFdpZHRoICo9IG1heFNpemUgLyBoZWlnaHQ7XG4gICAgICB1cGRhdGVkSGVpZ2h0ID0gbWF4U2l6ZTtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0ID0gY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG5cbiAgICBpZighY29udGV4dCkge1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcignVW5hYmxlIHRvIHByZXBhcmUgaW1hZ2UgdXBsb2FkLicpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXNvbHZlKHtcbiAgICAgIGNhbnZhcyxcbiAgICAgIGNvbnRleHQsXG4gICAgICBoZWlnaHQ6IE1hdGgubWF4KDEsIE1hdGgucm91bmQodXBkYXRlZEhlaWdodCkpLFxuICAgICAgd2lkdGg6IE1hdGgubWF4KDEsIE1hdGgucm91bmQodXBkYXRlZFdpZHRoKSlcbiAgICB9KTtcbiAgfTtcblxuICBpbWFnZS5vbmVycm9yID0gKCkgPT4ge1xuICAgIFVSTC5yZXZva2VPYmplY3RVUkwob2JqZWN0VXJsKTtcbiAgICByZWplY3QobmV3IEVycm9yKCdVbmFibGUgdG8gcHJlcGFyZSBpbWFnZSB1cGxvYWQuJykpO1xuICB9O1xuXG4gIGltYWdlLnNyYyA9IG9iamVjdFVybDtcbn0pO1xuXG5jb25zdCByZW5kZXJJbWFnZUZpbGUgPSAoXG4gIGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQsXG4gIGNvbnRleHQ6IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCxcbiAgaW1hZ2U6IENhbnZhc0ltYWdlU291cmNlLFxuICB3aWR0aDogbnVtYmVyLFxuICBoZWlnaHQ6IG51bWJlcixcbiAgcXVhbGl0eTogbnVtYmVyLFxuICBuYW1lOiBzdHJpbmdcbik6IFByb21pc2U8RmlsZT4gPT4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICBjYW52YXMud2lkdGggPSB3aWR0aDtcbiAgY2FudmFzLmhlaWdodCA9IGhlaWdodDtcbiAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gIGNvbnRleHQuZHJhd0ltYWdlKGltYWdlLCAwLCAwLCB3aWR0aCwgaGVpZ2h0KTtcblxuICBjYW52YXMudG9CbG9iKChibG9iKSA9PiB7XG4gICAgaWYoIWJsb2IpIHtcbiAgICAgIHJlamVjdChuZXcgRXJyb3IoJ1VuYWJsZSB0byBwcmVwYXJlIGltYWdlIHVwbG9hZC4nKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmVzb2x2ZShuZXcgRmlsZShbYmxvYl0sIGAke2dldEZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbihuYW1lKX0uanBnYCwge3R5cGU6ICdpbWFnZS9qcGVnJ30pKTtcbiAgfSwgJ2ltYWdlL2pwZWcnLCBxdWFsaXR5KTtcbn0pO1xuXG5leHBvcnQgY29uc3QgY29udmVydEZpbGVUb1VwbG9hZEZpbGUgPSBhc3luYyAoXG4gIGZpbGU6IEZpbGUsXG4gIG1heFNpemU6IG51bWJlcixcbiAgbWF4Qnl0ZXM6IG51bWJlciA9IDkwMCAqIDEwMjRcbik6IFByb21pc2U8RmlsZT4gPT4ge1xuICBpZighZmlsZS50eXBlLnN0YXJ0c1dpdGgoJ2ltYWdlLycpIHx8IHR5cGVvZiBkb2N1bWVudCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmlsZTtcbiAgfVxuXG4gIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XG4gIGNvbnN0IG9iamVjdFVybCA9IFVSTC5jcmVhdGVPYmplY3RVUkwoZmlsZSk7XG5cbiAgdHJ5IHtcbiAgICBhd2FpdCBuZXcgUHJvbWlzZTx2b2lkPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiByZXNvbHZlKCk7XG4gICAgICBpbWFnZS5vbmVycm9yID0gKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignVW5hYmxlIHRvIHByZXBhcmUgaW1hZ2UgdXBsb2FkLicpKTtcbiAgICAgIGltYWdlLnNyYyA9IG9iamVjdFVybDtcbiAgICB9KTtcblxuICAgIGNvbnN0IHtjYW52YXMsIGNvbnRleHQsIGhlaWdodCwgd2lkdGh9ID0gYXdhaXQgY3JlYXRlSW1hZ2VDYW52YXMoZmlsZSwgbWF4U2l6ZSk7XG4gICAgbGV0IGN1cnJlbnRXaWR0aCA9IHdpZHRoO1xuICAgIGxldCBjdXJyZW50SGVpZ2h0ID0gaGVpZ2h0O1xuICAgIGxldCBxdWFsaXR5ID0gMC44MjtcbiAgICBsZXQgdXBsb2FkRmlsZSA9IGF3YWl0IHJlbmRlckltYWdlRmlsZShjYW52YXMsIGNvbnRleHQsIGltYWdlLCBjdXJyZW50V2lkdGgsIGN1cnJlbnRIZWlnaHQsIHF1YWxpdHksIGZpbGUubmFtZSk7XG5cbiAgICB3aGlsZSh1cGxvYWRGaWxlLnNpemUgPiBtYXhCeXRlcyAmJiBxdWFsaXR5ID4gMC40NSkge1xuICAgICAgcXVhbGl0eSA9IE1hdGgubWF4KDAuNDUsIE51bWJlcigocXVhbGl0eSAtIDAuMDgpLnRvRml4ZWQoMikpKTtcbiAgICAgIHVwbG9hZEZpbGUgPSBhd2FpdCByZW5kZXJJbWFnZUZpbGUoY2FudmFzLCBjb250ZXh0LCBpbWFnZSwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCBxdWFsaXR5LCBmaWxlLm5hbWUpO1xuICAgIH1cblxuICAgIHdoaWxlKHVwbG9hZEZpbGUuc2l6ZSA+IG1heEJ5dGVzICYmIChjdXJyZW50V2lkdGggPiAzMjAgfHwgY3VycmVudEhlaWdodCA+IDMyMCkpIHtcbiAgICAgIGN1cnJlbnRXaWR0aCA9IE1hdGgubWF4KDMyMCwgTWF0aC5yb3VuZChjdXJyZW50V2lkdGggKiAwLjg1KSk7XG4gICAgICBjdXJyZW50SGVpZ2h0ID0gTWF0aC5tYXgoMzIwLCBNYXRoLnJvdW5kKGN1cnJlbnRIZWlnaHQgKiAwLjg1KSk7XG4gICAgICBxdWFsaXR5ID0gMC43ODtcbiAgICAgIHVwbG9hZEZpbGUgPSBhd2FpdCByZW5kZXJJbWFnZUZpbGUoY2FudmFzLCBjb250ZXh0LCBpbWFnZSwgY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0LCBxdWFsaXR5LCBmaWxlLm5hbWUpO1xuXG4gICAgICB3aGlsZSh1cGxvYWRGaWxlLnNpemUgPiBtYXhCeXRlcyAmJiBxdWFsaXR5ID4gMC40NSkge1xuICAgICAgICBxdWFsaXR5ID0gTWF0aC5tYXgoMC40NSwgTnVtYmVyKChxdWFsaXR5IC0gMC4wOCkudG9GaXhlZCgyKSkpO1xuICAgICAgICB1cGxvYWRGaWxlID0gYXdhaXQgcmVuZGVySW1hZ2VGaWxlKGNhbnZhcywgY29udGV4dCwgaW1hZ2UsIGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCwgcXVhbGl0eSwgZmlsZS5uYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdXBsb2FkRmlsZTtcbiAgfSBmaW5hbGx5IHtcbiAgICBVUkwucmV2b2tlT2JqZWN0VVJMKG9iamVjdFVybCk7XG4gIH1cbn07XG5cbmV4cG9ydCBjb25zdCBjb252ZXJ0RmlsZVRvQmFzZTY0ID0gKFxuICBmaWxlOiBGaWxlLFxuICBtYXhTaXplOiBudW1iZXIsXG4gIG1heEJ5dGVzOiBudW1iZXIgPSA5MDAgKiAxMDI0XG4pOiBQcm9taXNlPHN0cmluZz4gPT5cbiAgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG4gICAgcmVhZGVyLm9ubG9hZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGltYWdlID0gbmV3IEltYWdlKCk7XG4gICAgICBpbWFnZS5vbmxvYWQgPSAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNhbnZhczogSFRNTENhbnZhc0VsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtcbiAgICAgICAgY29uc3Qge2hlaWdodCwgd2lkdGh9ID0gaW1hZ2U7XG4gICAgICAgIGxldCB1cGRhdGVkSGVpZ2h0OiBudW1iZXIgPSBoZWlnaHQ7XG4gICAgICAgIGxldCB1cGRhdGVkV2lkdGg6IG51bWJlciA9IHdpZHRoO1xuXG4gICAgICAgIGlmKHdpZHRoID4gaGVpZ2h0KSB7XG4gICAgICAgICAgaWYod2lkdGggPiBtYXhTaXplKSB7XG4gICAgICAgICAgICB1cGRhdGVkSGVpZ2h0ICo9IG1heFNpemUgLyB3aWR0aDtcbiAgICAgICAgICAgIHVwZGF0ZWRXaWR0aCA9IG1heFNpemU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYoaGVpZ2h0ID4gbWF4U2l6ZSkge1xuICAgICAgICAgIHVwZGF0ZWRXaWR0aCAqPSBtYXhTaXplIC8gaGVpZ2h0O1xuICAgICAgICAgIHVwZGF0ZWRIZWlnaHQgPSBtYXhTaXplO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29udGV4dCA9IGNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO1xuXG4gICAgICAgIGlmKCFjb250ZXh0KSB7XG4gICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVW5hYmxlIHRvIHByZXBhcmUgaW1hZ2UgdXBsb2FkLicpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZW5kZXJJbWFnZSA9ICh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikgPT4ge1xuICAgICAgICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoO1xuICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XG4gICAgICAgICAgY29udGV4dC5jbGVhclJlY3QoMCwgMCwgd2lkdGgsIGhlaWdodCk7XG4gICAgICAgICAgY29udGV4dC5kcmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIHdpZHRoLCBoZWlnaHQpO1xuICAgICAgICB9O1xuXG4gICAgICAgIGxldCBjdXJyZW50V2lkdGggPSBNYXRoLm1heCgxLCBNYXRoLnJvdW5kKHVwZGF0ZWRXaWR0aCkpO1xuICAgICAgICBsZXQgY3VycmVudEhlaWdodCA9IE1hdGgubWF4KDEsIE1hdGgucm91bmQodXBkYXRlZEhlaWdodCkpO1xuICAgICAgICBsZXQgcXVhbGl0eSA9IDAuODI7XG5cbiAgICAgICAgcmVuZGVySW1hZ2UoY3VycmVudFdpZHRoLCBjdXJyZW50SGVpZ2h0KTtcblxuICAgICAgICBsZXQgZGF0YVVybDogc3RyaW5nID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHF1YWxpdHkpO1xuICAgICAgICBsZXQgYnl0ZVNpemUgPSBnZXRVcGxvYWRQYXlsb2FkQnl0ZVNpemUoZGF0YVVybCk7XG5cbiAgICAgICAgd2hpbGUoYnl0ZVNpemUgPiBtYXhCeXRlcyAmJiBxdWFsaXR5ID4gMC40NSkge1xuICAgICAgICAgIHF1YWxpdHkgPSBNYXRoLm1heCgwLjQ1LCBOdW1iZXIoKHF1YWxpdHkgLSAwLjA4KS50b0ZpeGVkKDIpKSk7XG4gICAgICAgICAgZGF0YVVybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCBxdWFsaXR5KTtcbiAgICAgICAgICBieXRlU2l6ZSA9IGdldFVwbG9hZFBheWxvYWRCeXRlU2l6ZShkYXRhVXJsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHdoaWxlKGJ5dGVTaXplID4gbWF4Qnl0ZXMgJiYgKGN1cnJlbnRXaWR0aCA+IDMyMCB8fCBjdXJyZW50SGVpZ2h0ID4gMzIwKSkge1xuICAgICAgICAgIGN1cnJlbnRXaWR0aCA9IE1hdGgubWF4KDMyMCwgTWF0aC5yb3VuZChjdXJyZW50V2lkdGggKiAwLjg1KSk7XG4gICAgICAgICAgY3VycmVudEhlaWdodCA9IE1hdGgubWF4KDMyMCwgTWF0aC5yb3VuZChjdXJyZW50SGVpZ2h0ICogMC44NSkpO1xuICAgICAgICAgIHF1YWxpdHkgPSAwLjc4O1xuICAgICAgICAgIHJlbmRlckltYWdlKGN1cnJlbnRXaWR0aCwgY3VycmVudEhlaWdodCk7XG4gICAgICAgICAgZGF0YVVybCA9IGNhbnZhcy50b0RhdGFVUkwoJ2ltYWdlL2pwZWcnLCBxdWFsaXR5KTtcbiAgICAgICAgICBieXRlU2l6ZSA9IGdldFVwbG9hZFBheWxvYWRCeXRlU2l6ZShkYXRhVXJsKTtcblxuICAgICAgICAgIHdoaWxlKGJ5dGVTaXplID4gbWF4Qnl0ZXMgJiYgcXVhbGl0eSA+IDAuNDUpIHtcbiAgICAgICAgICAgIHF1YWxpdHkgPSBNYXRoLm1heCgwLjQ1LCBOdW1iZXIoKHF1YWxpdHkgLSAwLjA4KS50b0ZpeGVkKDIpKSk7XG4gICAgICAgICAgICBkYXRhVXJsID0gY2FudmFzLnRvRGF0YVVSTCgnaW1hZ2UvanBlZycsIHF1YWxpdHkpO1xuICAgICAgICAgICAgYnl0ZVNpemUgPSBnZXRVcGxvYWRQYXlsb2FkQnl0ZVNpemUoZGF0YVVybCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmVzb2x2ZShkYXRhVXJsKTtcbiAgICAgIH07XG5cbiAgICAgIGNvbnN0IG9yaWdpbmFsQmFzZTY0OiBzdHJpbmcgPSByZWFkZXIucmVzdWx0IGFzIHN0cmluZztcbiAgICAgIGltYWdlLnNyYyA9IG9yaWdpbmFsQmFzZTY0O1xuICAgIH07XG4gICAgcmVhZGVyLm9uZXJyb3IgPSAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHtcbiAgICAgIHJlamVjdChldmVudCk7XG4gICAgfTtcbiAgICByZWFkZXIucmVhZEFzRGF0YVVSTChmaWxlKTtcbiAgfSk7XG4iXSwibmFtZXMiOlsiZ2V0VXBsb2FkUGF5bG9hZEJ5dGVTaXplIiwiZGF0YVVybCIsImxlbmd0aCIsImdldEZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbiIsIm5hbWUiLCJzcGxpdCIsInNsaWNlIiwiam9pbiIsImNyZWF0ZUltYWdlQ2FudmFzIiwiZmlsZSIsIm1heFNpemUiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImltYWdlIiwiSW1hZ2UiLCJvYmplY3RVcmwiLCJVUkwiLCJjcmVhdGVPYmplY3RVUkwiLCJvbmxvYWQiLCJyZXZva2VPYmplY3RVUkwiLCJjYW52YXMiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJoZWlnaHQiLCJ3aWR0aCIsInVwZGF0ZWRIZWlnaHQiLCJ1cGRhdGVkV2lkdGgiLCJjb250ZXh0IiwiZ2V0Q29udGV4dCIsIkVycm9yIiwiTWF0aCIsIm1heCIsInJvdW5kIiwib25lcnJvciIsInNyYyIsInJlbmRlckltYWdlRmlsZSIsInF1YWxpdHkiLCJjbGVhclJlY3QiLCJkcmF3SW1hZ2UiLCJ0b0Jsb2IiLCJibG9iIiwiRmlsZSIsInR5cGUiLCJjb252ZXJ0RmlsZVRvVXBsb2FkRmlsZSIsIm1heEJ5dGVzIiwic3RhcnRzV2l0aCIsImN1cnJlbnRXaWR0aCIsImN1cnJlbnRIZWlnaHQiLCJ1cGxvYWRGaWxlIiwic2l6ZSIsIk51bWJlciIsInRvRml4ZWQiLCJjb252ZXJ0RmlsZVRvQmFzZTY0IiwicmVhZGVyIiwiRmlsZVJlYWRlciIsInJlbmRlckltYWdlIiwidG9EYXRhVVJMIiwiYnl0ZVNpemUiLCJvcmlnaW5hbEJhc2U2NCIsInJlc3VsdCIsImV2ZW50IiwicmVhZEFzRGF0YVVSTCJdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTUEsMkJBQTJCLENBQUNDLFVBQTRCQSxRQUFRQyxNQUFNO0FBRTVFLE1BQU1DLDhCQUE4QixDQUFDQyxPQUNuQ0EsS0FBS0MsS0FBSyxDQUFDLEtBQUtDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBR0MsSUFBSSxDQUFDLFFBQVFIO0FBRzVDLE1BQU1JLG9CQUFvQixDQUFDQyxNQUFZQyxVQUtqQyxJQUFJQyxRQUFRLENBQUNDLFNBQVNDO1FBQzFCLE1BQU1DLFFBQVEsSUFBSUM7UUFDbEIsTUFBTUMsWUFBWUMsSUFBSUMsZUFBZSxDQUFDVDtRQUV0Q0ssTUFBTUssTUFBTSxHQUFHO1lBQ2JGLElBQUlHLGVBQWUsQ0FBQ0o7WUFFcEIsTUFBTUssU0FBNEJDLFNBQVNDLGFBQWEsQ0FBQztZQUN6RCxNQUFNLEVBQUNDLE1BQU0sRUFBRUMsS0FBSyxFQUFDLEdBQUdYO1lBQ3hCLElBQUlZLGdCQUF3QkY7WUFDNUIsSUFBSUcsZUFBdUJGO1lBRTNC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
@@ -0,0 +1,7 @@
1
+ import type { ComplexTranslations, SimpleTranslations } from '../index.js';
2
+ export declare const buildI18nResources: (translations: ComplexTranslations) => Record<string, Record<string, Record<string, string>>>;
3
+ export declare const buildSimpleI18nResources: (translations: SimpleTranslations) => Record<string, Record<string, Record<string, string>>>;
4
+ export declare const initI18n: (translations: SimpleTranslations | ComplexTranslations) => void;
5
+ export declare const updateI18nResources: (translations: ComplexTranslations) => void;
6
+ export declare const i18n: (key: string, params?: Record<string, any>, lng?: string, ns?: string) => string;
7
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../src/utils/i18n.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAK3E,eAAO,MAAM,kBAAkB,GAC7B,cAAc,mBAAmB,2DAmBlC,CAAC;AAEF,eAAO,MAAM,wBAAwB,GACnC,cAAc,kBAAkB,2DAmBjC,CAAC;AAEF,eAAO,MAAM,QAAQ,GACnB,cAAc,kBAAkB,GAAG,mBAAmB,SAoCvD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,cAAc,mBAAmB,SAelC,CAAC;AAEF,eAAO,MAAM,IAAI,GACf,KAAK,MAAM,EACX,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC5B,MAAM,MAAM,EACZ,KAAK,MAAM,KACV,MAUF,CAAC"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * Copyright (c) 2025-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import { init, t } from 'i18next';
5
+ let initialized = false;
6
+ let currentResources = {};
7
+ export const buildI18nResources = (translations)=>{
8
+ const resources = {};
9
+ for(const key in translations){
10
+ const { locale, value, namespace } = translations[key];
11
+ const lang = locale || 'en';
12
+ const ns = namespace || 'translations';
13
+ if (!resources[lang]) {
14
+ resources[lang] = {};
15
+ }
16
+ if (!resources[lang][ns]) {
17
+ resources[lang][ns] = {};
18
+ }
19
+ resources[lang][ns][key] = value;
20
+ }
21
+ return resources;
22
+ };
23
+ export const buildSimpleI18nResources = (translations)=>{
24
+ const resources = {};
25
+ for(const key in translations){
26
+ const value = translations[key];
27
+ const lang = 'en'; // Default to English
28
+ const ns = 'translations'; // Default namespace
29
+ if (!resources[lang]) {
30
+ resources[lang] = {};
31
+ }
32
+ if (!resources[lang][ns]) {
33
+ resources[lang][ns] = {};
34
+ }
35
+ resources[lang][ns][key] = value;
36
+ }
37
+ return resources;
38
+ };
39
+ export const initI18n = (translations)=>{
40
+ if (initialized) {
41
+ return;
42
+ }
43
+ let resources = {};
44
+ // Check if it's a simple key-value format or complex format
45
+ if (translations && Object.keys(translations).length > 0) {
46
+ const firstKey = Object.keys(translations)[0];
47
+ const firstValue = translations[firstKey];
48
+ if (typeof firstValue === 'string') {
49
+ // Simple key-value format
50
+ resources = buildSimpleI18nResources(translations);
51
+ } else {
52
+ // Complex format with locale and namespace
53
+ resources = buildI18nResources(translations);
54
+ }
55
+ }
56
+ currentResources = resources;
57
+ const defaultLang = Object.keys(resources)[0] || 'en';
58
+ const namespaces = Object.keys(resources[defaultLang] || {});
59
+ init({
60
+ defaultNS: 'translations',
61
+ fallbackLng: defaultLang,
62
+ interpolation: {
63
+ escapeValue: false
64
+ },
65
+ lng: defaultLang,
66
+ ns: namespaces,
67
+ resources
68
+ });
69
+ initialized = true;
70
+ };
71
+ export const updateI18nResources = (translations)=>{
72
+ const newResources = buildI18nResources(translations);
73
+ Object.entries(newResources).forEach(([lng, namespaces])=>{
74
+ Object.entries(namespaces).forEach(([ns, keys])=>{
75
+ if (!currentResources[lng]) {
76
+ currentResources[lng] = {};
77
+ }
78
+ if (!currentResources[lng][ns]) {
79
+ currentResources[lng][ns] = {};
80
+ }
81
+ Object.assign(currentResources[lng][ns], keys);
82
+ });
83
+ });
84
+ };
85
+ export const i18n = (key, params, lng, ns)=>{
86
+ if (!initialized) {
87
+ return key;
88
+ }
89
+ return t(key, {
90
+ ...params || {},
91
+ lng,
92
+ ns: ns || 'translations'
93
+ });
94
+ };
95
+
96
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvaTE4bi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyNS1QcmVzZW50LCBOaXRyb2dlbiBMYWJzLCBJbmMuXG4gKiBDb3B5cmlnaHRzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgTGljZW5zZS4gU2VlIHRoZSBhY2NvbXBhbnlpbmcgTElDRU5TRSBmaWxlIGZvciB0ZXJtcy5cbiAqL1xuaW1wb3J0IHsgaW5pdCwgdCB9IGZyb20gJ2kxOG5leHQnO1xuXG4vLyBJbXBvcnQgdHlwZXMgZnJvbSB0aGUgbWFpbiBpbmRleFxuaW1wb3J0IHR5cGUgeyBDb21wbGV4VHJhbnNsYXRpb25zLCBTaW1wbGVUcmFuc2xhdGlvbnMgfSBmcm9tICcuLi9pbmRleC5qcyc7XG5cbmxldCBpbml0aWFsaXplZCA9IGZhbHNlO1xubGV0IGN1cnJlbnRSZXNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+PiA9IHt9O1xuXG5leHBvcnQgY29uc3QgYnVpbGRJMThuUmVzb3VyY2VzID0gKFxuICB0cmFuc2xhdGlvbnM6IENvbXBsZXhUcmFuc2xhdGlvbnNcbikgPT4ge1xuICBjb25zdCByZXNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+PiA9IHt9O1xuXG4gIGZvcihjb25zdCBrZXkgaW4gdHJhbnNsYXRpb25zKSB7XG4gICAgY29uc3Qge2xvY2FsZSwgdmFsdWUsIG5hbWVzcGFjZX0gPSB0cmFuc2xhdGlvbnNba2V5XTtcbiAgICBjb25zdCBsYW5nID0gbG9jYWxlIHx8ICdlbic7XG4gICAgY29uc3QgbnMgPSBuYW1lc3BhY2UgfHwgJ3RyYW5zbGF0aW9ucyc7XG5cbiAgICBpZighcmVzb3VyY2VzW2xhbmddKSB7XG4gICAgICByZXNvdXJjZXNbbGFuZ10gPSB7fTtcbiAgICB9XG4gICAgaWYoIXJlc291cmNlc1tsYW5nXVtuc10pIHtcbiAgICAgIHJlc291cmNlc1tsYW5nXVtuc10gPSB7fTtcbiAgICB9XG4gICAgcmVzb3VyY2VzW2xhbmddW25zXVtrZXldID0gdmFsdWU7XG4gIH1cblxuICByZXR1cm4gcmVzb3VyY2VzO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkU2ltcGxlSTE4blJlc291cmNlcyA9IChcbiAgdHJhbnNsYXRpb25zOiBTaW1wbGVUcmFuc2xhdGlvbnNcbikgPT4ge1xuICBjb25zdCByZXNvdXJjZXM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHN0cmluZz4+PiA9IHt9O1xuXG4gIGZvcihjb25zdCBrZXkgaW4gdHJhbnNsYXRpb25zKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0cmFuc2xhdGlvbnNba2V5XTtcbiAgICBjb25zdCBsYW5nID0gJ2VuJzsgLy8gRGVmYXVsdCB0byBFbmdsaXNoXG4gICAgY29uc3QgbnMgPSAndHJhbnNsYXRpb25zJzsgLy8gRGVmYXVsdCBuYW1lc3BhY2VcblxuICAgIGlmKCFyZXNvdXJjZXNbbGFuZ10pIHtcbiAgICAgIHJlc291cmNlc1tsYW5nXSA9IHt9O1xuICAgIH1cbiAgICBpZighcmVzb3VyY2VzW2xhbmddW25zXSkge1xuICAgICAgcmVzb3VyY2VzW2xhbmddW25zXSA9IHt9O1xuICAgIH1cbiAgICByZXNvdXJjZXNbbGFuZ11bbnNdW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiByZXNvdXJjZXM7XG59O1xuXG5leHBvcnQgY29uc3QgaW5pdEkxOG4gPSAoXG4gIHRyYW5zbGF0aW9uczogU2ltcGxlVHJhbnNsYXRpb25zIHwgQ29tcGxleFRyYW5zbGF0aW9uc1xuKSA9PiB7XG4gIGlmKGluaXRpYWxpemVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgbGV0IHJlc291cmNlczogUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgUmVjb3JkPHN0cmluZywgc3RyaW5nPj4+ID0ge307XG5cbiAgLy8gQ2hlY2sgaWYgaXQncyBhIHNpbXBsZSBrZXktdmFsdWUgZm9ybWF0IG9yIGNvbXBsZXggZm9ybWF0XG4gIGlmICh0cmFuc2xhdGlvbnMgJiYgT2JqZWN0LmtleXModHJhbnNsYXRpb25zKS5sZW5ndGggPiAwKSB7XG4gICAgY29uc3QgZmlyc3RLZXkgPSBPYmplY3Qua2V5cyh0cmFuc2xhdGlvbnMpWzBdO1xuICAgIGNvbnN0IGZpcnN0VmFsdWUgPSB0cmFuc2xhdGlvbnNbZmlyc3RLZXldO1xuXG4gICAgaWYgKHR5cGVvZiBmaXJzdFZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gU2ltcGxlIGtleS12YWx1ZSBmb3JtYXRcbiAgICAgIHJlc291cmNlcyA9IGJ1aWxkU2ltcGxlSTE4blJlc291cmNlcyh0cmFuc2xhdGlvbnMgYXMgU2ltcGxlVHJhbnNsYXRpb25zKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ29tcGxleCBmb3JtYXQgd2l0aCBsb2NhbGUgYW5kIG5hbWVzcGFjZVxuICAgICAgcmVzb3VyY2VzID0gYnVpbGRJMThuUmVzb3VyY2VzKHRyYW5zbGF0aW9ucyBhcyBDb21wbGV4VHJhbnNsYXRpb25zKTtcbiAgICB9XG4gIH1cblxuICBjdXJyZW50UmVzb3VyY2VzID0gcmVzb3VyY2VzO1xuICBjb25zdCBkZWZhdWx0TGFuZyA9IE9iamVjdC5rZXlzKHJlc291cmNlcylbMF0gfHwgJ2VuJztcbiAgY29uc3QgbmFtZXNwYWNlcyA9IE9iamVjdC5rZXlzKHJlc291cmNlc1tkZWZhdWx0TGFuZ10gfHwge30pO1xuXG4gIGluaXQoe1xuICAgIGRlZmF1bHROUzogJ3RyYW5zbGF0aW9ucycsXG4gICAgZmFsbGJhY2tMbmc6IGRlZmF1bHRMYW5nLFxuICAgIGludGVycG9sYXRpb246IHtlc2NhcGVWYWx1ZTogZmFsc2V9LFxuICAgIGxuZzogZGVmYXVsdExhbmcsXG4gICAgbnM6IG5hbWVzcGFjZXMsXG4gICAgcmVzb3VyY2VzXG4gIH0pO1xuXG4gIGluaXRpYWxpemVkID0gdHJ1ZTtcbn07XG5cbmV4cG9ydCBjb25zdCB1cGRhdGVJMThuUmVzb3VyY2VzID0gKFxuICB0cmFuc2xhdGlvbnM6IENvbXBsZXhUcmFuc2xhdGlvbnNcbikgPT4ge1xuICBjb25zdCBuZXdSZXNvdXJjZXMgPSBidWlsZEkxOG5SZXNvdXJjZXModHJhbnNsYXRpb25zKTtcblxuICBPYmplY3QuZW50cmllcyhuZXdSZXNvdXJjZXMpLmZvckVhY2goKFtsbmcsIG5hbWVzcGFjZXNdKSA9PiB7XG4gICAgT2JqZWN0LmVudHJpZXMobmFtZXNwYWNlcykuZm9yRWFjaCgoW25zLCBrZXlzXSkgPT4ge1xuICAgICAgaWYoIWN1cnJlbnRSZXNvdXJjZXNbbG5nXSkge1xuICAgICAgICBjdXJyZW50UmVzb3VyY2VzW2xuZ10gPSB7fTtcbiAgICAgIH1cbiAgICAgIGlmKCFjdXJyZW50UmVzb3VyY2VzW2xuZ11bbnNdKSB7XG4gICAgICAgIGN1cnJlbnRSZXNvdXJjZXNbbG5nXVtuc10gPSB7fTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5hc3NpZ24oY3VycmVudFJlc291cmNlc1tsbmddW25zXSwga2V5cyk7XG4gICAgfSk7XG4gIH0pO1xufTtcblxuZXhwb3J0IGNvbnN0IGkxOG4gPSAoXG4gIGtleTogc3RyaW5nLFxuICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICBsbmc/OiBzdHJpbmcsXG4gIG5zPzogc3RyaW5nXG4pOiBzdHJpbmcgPT4ge1xuICBpZighaW5pdGlhbGl6ZWQpIHtcbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgcmV0dXJuIHQoa2V5LCB7XG4gICAgLi4uKHBhcmFtcyB8fCB7fSksXG4gICAgbG5nLFxuICAgIG5zOiBucyB8fCAndHJhbnNsYXRpb25zJ1xuICB9KTtcbn07Il0sIm5hbWVzIjpbImluaXQiLCJ0IiwiaW5pdGlhbGl6ZWQiLCJjdXJyZW50UmVzb3VyY2VzIiwiYnVpbGRJMThuUmVzb3VyY2VzIiwidHJhbnNsYXRpb25zIiwicmVzb3VyY2VzIiwia2V5IiwibG9jYWxlIiwidmFsdWUiLCJuYW1lc3BhY2UiLCJsYW5nIiwibnMiLCJidWlsZFNpbXBsZUkxOG5SZXNvdXJjZXMiLCJpbml0STE4biIsIk9iamVjdCIsImtleXMiLCJsZW5ndGgiLCJmaXJzdEtleSIsImZpcnN0VmFsdWUiLCJkZWZhdWx0TGFuZyIsIm5hbWVzcGFjZXMiLCJkZWZhdWx0TlMiLCJmYWxsYmFja0xuZyIsImludGVycG9sYXRpb24iLCJlc2NhcGVWYWx1ZSIsImxuZyIsInVwZGF0ZUkxOG5SZXNvdXJjZXMiLCJuZXdSZXNvdXJjZXMiLCJlbnRyaWVzIiwiZm9yRWFjaCIsImFzc2lnbiIsImkxOG4iLCJwYXJhbXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Q0FHQyxHQUNELFNBQVNBLElBQUksRUFBRUMsQ0FBQyxRQUFRLFVBQVU7QUFLbEMsSUFBSUMsY0FBYztBQUNsQixJQUFJQyxtQkFBMkUsQ0FBQztBQUVoRixPQUFPLE1BQU1DLHFCQUFxQixDQUNoQ0M7SUFFQSxNQUFNQyxZQUFvRSxDQUFDO0lBRTNFLElBQUksTUFBTUMsT0FBT0YsYUFBYztRQUM3QixNQUFNLEVBQUNHLE1BQU0sRUFBRUMsS0FBSyxFQUFFQyxTQUFTLEVBQUMsR0FBR0wsWUFBWSxDQUFDRSxJQUFJO1FBQ3BELE1BQU1JLE9BQU9ILFVBQVU7UUFDdkIsTUFBTUksS0FBS0YsYUFBYTtRQUV4QixJQUFHLENBQUNKLFNBQVMsQ0FBQ0ssS0FBSyxFQUFFO1lBQ25CTCxTQUFTLENBQUNLLEtBQUssR0FBRyxDQUFDO1FBQ3JCO1FBQ0EsSUFBRyxDQUFDTCxTQUFTLENBQUNLLEtBQUssQ0FBQ0MsR0FBRyxFQUFFO1lBQ3ZCTixTQUFTLENBQUNLLEtBQUssQ0FBQ0MsR0FBRyxHQUFHLENBQUM7UUFDekI7UUFDQU4sU0FBUyxDQUFDSyxLQUFLLENBQUNDLEdBQUcsQ0FBQ0wsSUFBSSxHQUFHRTtJQUM3QjtJQUVBLE9BQU9IO0FBQ1QsRUFBRTtBQUVGLE9BQU8s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
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */
5
+ export { appMutation, appQuery, getGraphql, publicMutation, publicQuery, refreshSession, uploadImage, type ApiResultsType, type ReaktorDbCollection, type SessionType } from './api.js';
6
+ export { createAction, createActions, createAllActions, type ActionOptions, type ActionReturnType, type ActionType, type ActionTypes } from './actionFactory.js';
7
+ export { createBaseActions, type BaseActionOptions } from './baseActionFactory.js';
8
+ export { createValidatorFactory, createValidatorManager, type BaseAdapterOptions } from './validatorFactory.js';
9
+ export { MetropolisContext, MetropolisProvider } from './MetropolisProvider.js';
10
+ export { PermissionGuard, PermissionLevel, usePermissions, type Permission, type PermissionGuardProps, type UsePermissionsReturn } from './permissionUtils.js';
11
+ export { useMetropolis } from './useMetropolis.js';
12
+ export { useConversationTyping, type ConversationTypingOptions, type UseConversationTypingOptions } from './useConversationTyping.js';
13
+ export { useTranslations } from './useTranslations.js';
14
+ export * from './app.js';
15
+ export * from './dateUtils.js';
16
+ export * from './file.js';
17
+ export * from './i18n.js';
18
+ export * from './location.js';
19
+ export * from './session.js';
20
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EACL,WAAW,EACX,QAAQ,EACR,UAAU,EACV,cAAc,EACd,WAAW,EACX,cAAc,EACd,WAAW,EACX,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,KAAK,WAAW,EACjB,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,YAAY,EACZ,aAAa,EACb,gBAAgB,EAChB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,WAAW,EACjB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,iBAAiB,EACjB,KAAK,iBAAiB,EACvB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EACL,sBAAsB,EACtB,sBAAsB,EACtB,KAAK,kBAAkB,EACxB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAC,iBAAiB,EAAE,kBAAkB,EAAC,MAAM,yBAAyB,CAAC;AAC9E,OAAO,EACL,eAAe,EACf,eAAe,EACf,cAAc,EACd,KAAK,UAAU,EACf,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,EAC1B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAC,aAAa,EAAC,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAC,qBAAqB,EAAE,KAAK,yBAAyB,EAAE,KAAK,4BAA4B,EAAC,MAAM,4BAA4B,CAAC;AACpI,OAAO,EAAC,eAAe,EAAC,MAAM,sBAAsB,CAAC;AAGrD,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Copyright (c) 2019-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ // Export API utilities
5
+ export { appMutation, appQuery, getGraphql, publicMutation, publicQuery, refreshSession, uploadImage } from './api.js';
6
+ // Export action factory
7
+ export { createAction, createActions, createAllActions } from './actionFactory.js';
8
+ // Export base action factory
9
+ export { createBaseActions } from './baseActionFactory.js';
10
+ // Export validator factory
11
+ export { createValidatorFactory, createValidatorManager } from './validatorFactory.js';
12
+ // Export React hooks
13
+ export { MetropolisContext, MetropolisProvider } from './MetropolisProvider.js';
14
+ export { PermissionGuard, PermissionLevel, usePermissions } from './permissionUtils.js';
15
+ export { useMetropolis } from './useMetropolis.js';
16
+ export { useConversationTyping } from './useConversationTyping.js';
17
+ export { useTranslations } from './useTranslations.js';
18
+ // Export utility functions
19
+ export * from './app.js';
20
+ export * from './dateUtils.js';
21
+ export * from './file.js';
22
+ export * from './i18n.js';
23
+ export * from './location.js';
24
+ export * from './session.js';
25
+
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvaW5kZXgudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTktUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cblxuLy8gRXhwb3J0IEFQSSB1dGlsaXRpZXNcbmV4cG9ydCB7XG4gIGFwcE11dGF0aW9uLFxuICBhcHBRdWVyeSxcbiAgZ2V0R3JhcGhxbCxcbiAgcHVibGljTXV0YXRpb24sXG4gIHB1YmxpY1F1ZXJ5LFxuICByZWZyZXNoU2Vzc2lvbixcbiAgdXBsb2FkSW1hZ2UsXG4gIHR5cGUgQXBpUmVzdWx0c1R5cGUsXG4gIHR5cGUgUmVha3RvckRiQ29sbGVjdGlvbixcbiAgdHlwZSBTZXNzaW9uVHlwZVxufSBmcm9tICcuL2FwaS5qcyc7XG5cbi8vIEV4cG9ydCBhY3Rpb24gZmFjdG9yeVxuZXhwb3J0IHtcbiAgY3JlYXRlQWN0aW9uLFxuICBjcmVhdGVBY3Rpb25zLFxuICBjcmVhdGVBbGxBY3Rpb25zLFxuICB0eXBlIEFjdGlvbk9wdGlvbnMsXG4gIHR5cGUgQWN0aW9uUmV0dXJuVHlwZSxcbiAgdHlwZSBBY3Rpb25UeXBlLFxuICB0eXBlIEFjdGlvblR5cGVzXG59IGZyb20gJy4vYWN0aW9uRmFjdG9yeS5qcyc7XG5cbi8vIEV4cG9ydCBiYXNlIGFjdGlvbiBmYWN0b3J5XG5leHBvcnQge1xuICBjcmVhdGVCYXNlQWN0aW9ucyxcbiAgdHlwZSBCYXNlQWN0aW9uT3B0aW9uc1xufSBmcm9tICcuL2Jhc2VBY3Rpb25GYWN0b3J5LmpzJztcblxuLy8gRXhwb3J0IHZhbGlkYXRvciBmYWN0b3J5XG5leHBvcnQge1xuICBjcmVhdGVWYWxpZGF0b3JGYWN0b3J5LFxuICBjcmVhdGVWYWxpZGF0b3JNYW5hZ2VyLFxuICB0eXBlIEJhc2VBZGFwdGVyT3B0aW9uc1xufSBmcm9tICcuL3ZhbGlkYXRvckZhY3RvcnkuanMnO1xuXG4vLyBFeHBvcnQgUmVhY3QgaG9va3NcbmV4cG9ydCB7TWV0cm9wb2xpc0NvbnRleHQsIE1ldHJvcG9saXNQcm92aWRlcn0gZnJvbSAnLi9NZXRyb3BvbGlzUHJvdmlkZXIuanMnO1xuZXhwb3J0IHtcbiAgUGVybWlzc2lvbkd1YXJkLFxuICBQZXJtaXNzaW9uTGV2ZWwsXG4gIHVzZVBlcm1pc3Npb25zLFxuICB0eXBlIFBlcm1pc3Npb24sXG4gIHR5cGUgUGVybWlzc2lvbkd1YXJkUHJvcHMsXG4gIHR5cGUgVXNlUGVybWlzc2lvbnNSZXR1cm5cbn0gZnJvbSAnLi9wZXJtaXNzaW9uVXRpbHMuanMnO1xuZXhwb3J0IHt1c2VNZXRyb3BvbGlzfSBmcm9tICcuL3VzZU1ldHJvcG9saXMuanMnO1xuZXhwb3J0IHt1c2VDb252ZXJzYXRpb25UeXBpbmcsIHR5cGUgQ29udmVyc2F0aW9uVHlwaW5nT3B0aW9ucywgdHlwZSBVc2VDb252ZXJzYXRpb25UeXBpbmdPcHRpb25zfSBmcm9tICcuL3VzZUNvbnZlcnNhdGlvblR5cGluZy5qcyc7XG5leHBvcnQge3VzZVRyYW5zbGF0aW9uc30gZnJvbSAnLi91c2VUcmFuc2xhdGlvbnMuanMnO1xuXG4vLyBFeHBvcnQgdXRpbGl0eSBmdW5jdGlvbnNcbmV4cG9ydCAqIGZyb20gJy4vYXBwLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZGF0ZVV0aWxzLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vZmlsZS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL2kxOG4uanMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2NhdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Nlc3Npb24uanMnO1xuXG4iXSwibmFtZXMiOlsiYXBwTXV0YXRpb24iLCJhcHBRdWVyeSIsImdldEdyYXBocWwiLCJwdWJsaWNNdXRhdGlvbiIsInB1YmxpY1F1ZXJ5IiwicmVmcmVzaFNlc3Npb24iLCJ1cGxvYWRJbWFnZSIsImNyZWF0ZUFjdGlvbiIsImNyZWF0ZUFjdGlvbnMiLCJjcmVhdGVBbGxBY3Rpb25zIiwiY3JlYXRlQmFzZUFjdGlvbnMiLCJjcmVhdGVWYWxpZGF0b3JGYWN0b3J5IiwiY3JlYXRlVmFsaWRhdG9yTWFuYWdlciIsIk1ldHJvcG9saXNDb250ZXh0IiwiTWV0cm9wb2xpc1Byb3ZpZGVyIiwiUGVybWlzc2lvbkd1YXJkIiwiUGVybWlzc2lvbkxldmVsIiwidXNlUGVybWlzc2lvbnMiLCJ1c2VNZXRyb3BvbGlzIiwidXNlQ29udmVyc2F0aW9uVHlwaW5nIiwidXNlVHJhbnNsYXRpb25zIl0sIm1hcHBpbmdzIjoiQUFBQTs7O0NBR0MsR0FFRCx1QkFBdUI7QUFDdkIsU0FDRUEsV0FBVyxFQUNYQyxRQUFRLEVBQ1JDLFVBQVUsRUFDVkMsY0FBYyxFQUNkQyxXQUFXLEVBQ1hDLGNBQWMsRUFDZEMsV0FBVyxRQUlOLFdBQVc7QUFFbEIsd0JBQXdCO0FBQ3hCLFNBQ0VDLFlBQVksRUFDWkMsYUFBYSxFQUNiQyxnQkFBZ0IsUUFLWCxxQkFBcUI7QUFFNUIsNkJBQTZCO0FBQzdCLFNBQ0VDLGlCQUFpQixRQUVaLHlCQUF5QjtBQUVoQywyQkFBMkI7QUFDM0IsU0FDRUMsc0JBQXNCLEVBQ3RCQyxzQkFBc0IsUUFFakIsd0JBQXdCO0FBRS9CLHFCQUFxQjtBQUNyQixTQUFRQyxpQkFBaUIsRUFBRUMsa0JBQWtCLFFBQU8sMEJBQTBCO0FBQzlFLFNBQ0VDLGVBQWUsRUFDZkMsZUFBZSxFQUNmQyxjQUFjLFFBSVQsdUJBQXVCO0FBQzlCLFNBQVFDLGFBQWEsUUFBTyxxQkFBcUI7QUFDakQsU0FBUUMscUJBQXFCLFFBQTBFLDZCQUE2QjtBQUNwSSxTQUFRQyxlQUFlLFFBQU8sdUJBQXVCO0FBRXJELDJCQUEyQjtBQUMzQixjQUFjLFdBQVc7QUFDekIsY0FBYyxpQkFBaUI7QUFDL0IsY0FBYyxZQUFZO0FBQzFCLGNBQWMsWUFBWTtBQUMxQixjQUFjLGdCQUFnQjtBQUM5QixjQUFjLGVBQWUifQ==
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Copyright (c) 2012-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */
5
+ import { FluxFramework } from '@nlabs/arkhamjs';
6
+ import { parseLocation } from '../adapters/locationAdapter/locationAdapter.js';
7
+ import type { LocationType } from '../adapters/locationAdapter/locationAdapter.js';
8
+ export declare const autoCompleteLocation: (this: unknown, flux: FluxFramework, address: string, latitude?: number, longitude?: number, locationProps?: string[], CustomClass?: (location: LocationType) => LocationType) => Promise<LocationType[]>;
9
+ export declare const searchLocations: (flux: FluxFramework, address: string, latitude?: number, longitude?: number, locationProps?: string[], CustomClass?: typeof parseLocation) => Promise<LocationType[]>;
10
+ //# sourceMappingURL=location.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"location.d.ts","sourceRoot":"","sources":["../../src/utils/location.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,OAAO,EAAE,aAAa,EAAE,MAAM,gDAAgD,CAAC;AAG/E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AAKnF,eAAO,MAAM,oBAAoB,2MA4C1B,CAAC;AAER,eAAO,MAAM,eAAe,GAC1B,MAAM,aAAa,EACnB,SAAS,MAAM,EACf,WAAW,MAAM,EACjB,YAAY,MAAM,EAClB,gBAAe,MAAM,EAAO,EAC5B,cAAa,OAAO,aAA6B,KAChD,OAAO,CAAC,YAAY,EAAE,CAqCxB,CAAC"}
@@ -0,0 +1,82 @@
1
+ /**
2
+ * Copyright (c) 2012-Present, Nitrogen Labs, Inc.
3
+ * Copyrights licensed under the MIT License. See the accompanying LICENSE file for terms.
4
+ */ import { isEmpty } from '@nlabs/utils';
5
+ import pDebounce from 'p-debounce';
6
+ import { parseLocation } from '../adapters/locationAdapter/locationAdapter.js';
7
+ import { appQuery } from '../utils/api.js';
8
+ const DATA_TYPE = 'locations';
9
+ export const autoCompleteLocation = pDebounce(async (flux, address, latitude, longitude, locationProps = [], CustomClass = parseLocation)=>{
10
+ if (isEmpty(address)) {
11
+ return [];
12
+ }
13
+ try {
14
+ const queryVariables = {
15
+ address: {
16
+ type: 'String',
17
+ value: address
18
+ },
19
+ latitude: {
20
+ type: 'Float',
21
+ value: latitude
22
+ },
23
+ longitude: {
24
+ type: 'Float',
25
+ value: longitude
26
+ }
27
+ };
28
+ const { autoCompleteLocation = [] } = await appQuery(flux, 'autoCompleteLocation', DATA_TYPE, queryVariables, [
29
+ 'address',
30
+ 'city',
31
+ 'country',
32
+ 'latitude',
33
+ 'location',
34
+ 'longitude',
35
+ 'state',
36
+ 'street',
37
+ 'zip',
38
+ ...locationProps
39
+ ]);
40
+ return autoCompleteLocation.map((item)=>CustomClass(item));
41
+ } catch (_error) {
42
+ return [];
43
+ }
44
+ }, 500);
45
+ export const searchLocations = async (flux, address, latitude, longitude, locationProps = [], CustomClass = parseLocation)=>{
46
+ if (isEmpty(address)) {
47
+ return [];
48
+ }
49
+ try {
50
+ const queryVariables = {
51
+ address: {
52
+ type: 'String',
53
+ value: address
54
+ },
55
+ latitude: {
56
+ type: 'Float',
57
+ value: latitude
58
+ },
59
+ longitude: {
60
+ type: 'Float',
61
+ value: longitude
62
+ }
63
+ };
64
+ const { autoCompleteLocation = [] } = await appQuery(flux, 'autoCompleteLocation', DATA_TYPE, queryVariables, [
65
+ 'address',
66
+ 'city',
67
+ 'country',
68
+ 'latitude',
69
+ 'location',
70
+ 'longitude',
71
+ 'state',
72
+ 'street',
73
+ 'zip',
74
+ ...locationProps
75
+ ]);
76
+ return autoCompleteLocation.map((item)=>CustomClass(item));
77
+ } catch (_error) {
78
+ return [];
79
+ }
80
+ };
81
+
82
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9uaXRyb2c3L0RldmVsb3BtZW50L21ldHJvcG9saXNqcy9zcmMvdXRpbHMvbG9jYXRpb24udHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBDb3B5cmlnaHQgKGMpIDIwMTItUHJlc2VudCwgTml0cm9nZW4gTGFicywgSW5jLlxuICogQ29weXJpZ2h0cyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIExpY2Vuc2UuIFNlZSB0aGUgYWNjb21wYW55aW5nIExJQ0VOU0UgZmlsZSBmb3IgdGVybXMuXG4gKi9cbmltcG9ydCB7IEZsdXhGcmFtZXdvcmsgfSBmcm9tICdAbmxhYnMvYXJraGFtanMnO1xuaW1wb3J0IHsgaXNFbXB0eSB9IGZyb20gJ0BubGFicy91dGlscyc7XG5pbXBvcnQgcERlYm91bmNlIGZyb20gJ3AtZGVib3VuY2UnO1xuXG5pbXBvcnQgeyBwYXJzZUxvY2F0aW9uIH0gZnJvbSAnLi4vYWRhcHRlcnMvbG9jYXRpb25BZGFwdGVyL2xvY2F0aW9uQWRhcHRlci5qcyc7XG5pbXBvcnQgeyBhcHBRdWVyeSB9IGZyb20gJy4uL3V0aWxzL2FwaS5qcyc7XG5cbmltcG9ydCB0eXBlIHsgTG9jYXRpb25UeXBlIH0gZnJvbSAnLi4vYWRhcHRlcnMvbG9jYXRpb25BZGFwdGVyL2xvY2F0aW9uQWRhcHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlYWt0b3JEYkNvbGxlY3Rpb24gfSBmcm9tICcuLi91dGlscy9hcGkuanMnO1xuXG5jb25zdCBEQVRBX1RZUEU6IFJlYWt0b3JEYkNvbGxlY3Rpb24gPSAnbG9jYXRpb25zJztcblxuZXhwb3J0IGNvbnN0IGF1dG9Db21wbGV0ZUxvY2F0aW9uID0gcERlYm91bmNlKGFzeW5jIChcbiAgZmx1eDogRmx1eEZyYW1ld29yayxcbiAgYWRkcmVzczogc3RyaW5nLFxuICBsYXRpdHVkZT86IG51bWJlcixcbiAgbG9uZ2l0dWRlPzogbnVtYmVyLFxuICBsb2NhdGlvblByb3BzOiBzdHJpbmdbXSA9IFtdLFxuICBDdXN0b21DbGFzczogdHlwZW9mIHBhcnNlTG9jYXRpb24gPSBwYXJzZUxvY2F0aW9uXG4pOiBQcm9taXNlPExvY2F0aW9uVHlwZVtdPiA9PiB7XG4gIGlmKGlzRW1wdHkoYWRkcmVzcykpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IHF1ZXJ5VmFyaWFibGVzID0ge1xuICAgICAgYWRkcmVzczoge1xuICAgICAgICB0eXBlOiAnU3RyaW5nJyxcbiAgICAgICAgdmFsdWU6IGFkZHJlc3NcbiAgICAgIH0sXG4gICAgICBsYXRpdHVkZToge1xuICAgICAgICB0eXBlOiAnRmxvYXQnLFxuICAgICAgICB2YWx1ZTogbGF0aXR1ZGVcbiAgICAgIH0sXG4gICAgICBsb25naXR1ZGU6IHtcbiAgICAgICAgdHlwZTogJ0Zsb2F0JyxcbiAgICAgICAgdmFsdWU6IGxvbmdpdHVkZVxuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCB7YXV0b0NvbXBsZXRlTG9jYXRpb24gPSBbXX0gPSBhd2FpdCBhcHBRdWVyeShmbHV4LCAnYXV0b0NvbXBsZXRlTG9jYXRpb24nLCBEQVRBX1RZUEUsIHF1ZXJ5VmFyaWFibGVzLCBbXG4gICAgICAnYWRkcmVzcycsXG4gICAgICAnY2l0eScsXG4gICAgICAnY291bnRyeScsXG4gICAgICAnbGF0aXR1ZGUnLFxuICAgICAgJ2xvY2F0aW9uJyxcbiAgICAgICdsb25naXR1ZGUnLFxuICAgICAgJ3N0YXRlJyxcbiAgICAgICdzdHJlZXQnLFxuICAgICAgJ3ppcCcsXG4gICAgICAuLi5sb2NhdGlvblByb3BzXG4gICAgXSkgYXMge2F1dG9Db21wbGV0ZUxvY2F0aW9uOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPltdfTtcbiAgICByZXR1cm4gYXV0b0NvbXBsZXRlTG9jYXRpb24ubWFwKChpdGVtKSA9PiBDdXN0b21DbGFzcyhpdGVtKSk7XG4gIH0gY2F0Y2goX2Vycm9yKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG59LCA1MDApO1xuXG5leHBvcnQgY29uc3Qgc2VhcmNoTG9jYXRpb25zID0gYXN5bmMgKFxuICBmbHV4OiBGbHV4RnJhbWV3b3JrLFxuICBhZGRyZXNzOiBzdHJpbmcsXG4gIGxhdGl0dWRlPzogbnVtYmVyLFxuICBsb25naXR1ZGU/OiBudW1iZXIsXG4gIGxvY2F0aW9uUHJvcHM6IHN0cmluZ1tdID0gW10sXG4gIEN1c3RvbUNsYXNzOiB0eXBlb2YgcGFyc2VMb2NhdGlvbiA9IHBhcnNlTG9jYXRpb25cbik6IFByb21pc2U8TG9jYXRpb25UeXBlW10+ID0+IHtcbiAgaWYoaXNFbXB0eShhZGRyZXNzKSkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgcXVlcnlWYXJpYWJsZXMgPSB7XG4gICAgICBhZGRyZXNzOiB7XG4gICAgICAgIHR5cGU6ICdTdHJpbmcnLFxuICAgICAgICB2YWx1ZTogYWRkcmVzc1xuICAgICAgfSxcbiAgICAgIGxhdGl0dWRlOiB7XG4gICAgICAgIHR5cGU6ICdGbG9hdCcsXG4gICAgICAgIHZhbHVlOiBsYXRpdHVkZVxuICAgICAgfSxcbiAgICAgIGxvbmdpdHVkZToge1xuICAgICAgICB0eXBlOiAnRmxvYXQnLFxuICAgICAgICB2YWx1ZTogbG9uZ2l0dWRlXG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IHthdXRvQ29tcGxldGVMb2NhdGlvbiA9IFtdfSA9IGF3YWl0IGFwcFF1ZXJ5KGZsdXgsICdhdXRvQ29tcGxldGVMb2NhdGlvbicsIERBVEFfVFlQRSwgcXVlcnlWYXJpYWJsZXMsIFtcbiAgICAgICdhZGRyZXNzJyxcbiAgICAgICdjaXR5JyxcbiAgICAgICdjb3VudHJ5JyxcbiAgICAgICdsYXRpdHVkZScsXG4gICAgICAnbG9jYXRpb24nLFxuICAgICAgJ2xvbmdpdHVkZScsXG4gICAgICAnc3RhdGUnLFxuICAgICAgJ3N0cmVldCcsXG4gICAgICAnemlwJyxcbiAgICAgIC4uLmxvY2F0aW9uUHJvcHNcbiAgICBdKSBhcyB7YXV0b0NvbXBsZXRlTG9jYXRpb246IFJlY29yZDxzdHJpbmcsIHVua25vd24+W119O1xuICAgIHJldHVybiBhdXRvQ29tcGxldGVMb2NhdGlvbi5tYXAoKGl0ZW0pID0+IEN1c3RvbUNsYXNzKGl0ZW0pKTtcbiAgfSBjYXRjaChfZXJyb3IpIHtcbiAgICByZXR1cm4gW107XG4gIH1cbn07XG4iXSwibmFtZXMiOlsiaXNFbXB0eSIsInBEZWJvdW5jZSIsInBhcnNlTG9jYXRpb24iLCJhcHBRdWVyeSIsIkRBVEFfVFlQRSIsImF1dG9Db21wbGV0ZUxvY2F0aW9uIiwiZmx1eCIsImFkZHJlc3MiLCJsYXRpdHVkZSIsImxvbmdpdHVkZSIsImxvY2F0aW9uUHJvcHMiLCJDdXN0b21DbGFzcyIsInF1ZXJ5VmFyaWFibGVzIiwidHlwZSIsInZhbHVlIiwibWFwIiwiaXRlbSIsIl9lcnJvciIsInNlYXJjaExvY2F0aW9ucyJdLCJtYXBwaW5ncyI6IkFBQUE7OztDQUdDLEdBRUQsU0FBU0EsT0FBTyxRQUFRLGVBQWU7QUFDdkMsT0FBT0MsZUFBZSxhQUFhO0FBRW5DLFNBQVNDLGFBQWEsUUFBUSxpREFBaUQ7QUFDL0UsU0FBU0MsUUFBUSxRQUFRLGtCQUFrQjtBQUszQyxNQUFNQyxZQUFpQztBQUV2QyxPQUFPLE1BQU1DLHVCQUF1QkosVUFBVSxPQUM1Q0ssTUFDQUMsU0FDQUMsVUFDQUMsV0FDQUMsZ0JBQTBCLEVBQUUsRUFDNUJDLGNBQW9DVCxhQUFhO0lBRWpELElBQUdGLFFBQVFPLFVBQVU7UUFDbkIsT0FBTyxFQUFFO0lBQ1g7SUFFQSxJQUFJO1FBQ0YsTUFBTUssaUJBQWlCO1lBQ3JCTCxTQUFTO2dCQUNQTSxNQUFNO2dCQUNOQyxPQUFPUDtZQUNUO1lBQ0FDLFVBQVU7Z0JBQ1JLLE1BQU07Z0JBQ05DLE9BQU9OO1lBQ1Q7WUFDQUMsV0FBVztnQkFDVEksTUFBTTtnQkFDTkMsT0FBT0w7WUFDVDtRQUNGO1FBRUEsTUFBTSxFQUFDSix1QkFBdUIsRUFBRSxFQUFDLEdBQUcsTUFBTUYsU0FBU0csTUFBTSx3QkFBd0JGLFdBQVdRLGdCQUFnQjtZQUMxRztZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7ZUFDR0Y7U0FDSjtRQUNELE9BQU9MLHFCQUFxQlUsR0FBRyxDQUFDLENBQUNDLE9BQVNMLFlBQVlLO0lBQ3hELEVBQUUsT0FBTUMsUUFBUTtRQUNkLE9BQU8sRUFBRTtJQUNYO0FBQ0YsR0FBRyxLQUFLO0FBRVIsT0FBTyxNQUFNQyxrQkFBa0IsT0FDN0JaLE1BQ0FDLFNBQ0FDLFVBQ0FDLFdBQ0FDLGdCQUEwQixFQUFFLEVBQzVCQyxjQUFvQ1QsYUFBYTtJQUVqRCxJQUFHRixRQUFRTyxVQUFVO1FBQ25CLE9BQU8sRUFBRTtJQUNYO0lBRUEsSUFBSTtRQUNGLE1BQU1LLGlCQUFpQjtZQUNyQkwsU0FBUztnQkFDUE0sTUFBTTtnQkFDTkMsT0FBT1A7WUFDVDtZQUNBQyxVQUFVO2dCQUNSSyxNQUFNO2dCQUNOQyxPQUFPTjtZQUNUO1lBQ0FDLFdBQVc7Z0JBQ1RJLE1BQU07Z0JBQ05DLE9BQU9MO1lBQ1Q7UUFDRjtRQUVBLE1BQU0sRUFBQ0osdUJBQXVCLEVBQUUsRUFBQyxHQUFHLE1BQU1GLFNBQVNHLE1BQU0sd0JBQXdCRixXQUFXUSxnQkFBZ0I7WUFDMUc7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO1lBQ0E7WUFDQTtZQUNBO2VBQ0dGO1NBQ0o7UUFDRCxPQUFPTCxxQkFBcUJVLEdBQUcsQ0FBQyxDQUFDQyxPQUFTTCxZQUFZSztJQUN4RCxFQUFFLE9BQU1DLFFBQVE7UUFDZCxPQUFPLEVBQUU7SUFDWDtBQUNGLEVBQUUifQ==
@@ -0,0 +1,22 @@
1
+ import { PermissionLevel } from '../adapters/permissionAdapter/permissionAdapter.js';
2
+ export interface PermissionGuardProps {
3
+ requiredLevel: PermissionLevel;
4
+ resource?: string;
5
+ fallback?: React.ReactNode;
6
+ children: React.ReactNode;
7
+ }
8
+ export interface UsePermissionsReturn {
9
+ userLevel: number;
10
+ hasPermission: (requiredLevel: PermissionLevel) => boolean;
11
+ isGuest: boolean;
12
+ isUser: boolean;
13
+ isModerator: boolean;
14
+ isAdmin: boolean;
15
+ isSuperAdmin: boolean;
16
+ checkResource: (resource: string, requiredLevel: PermissionLevel) => boolean;
17
+ }
18
+ export declare const usePermissions: () => UsePermissionsReturn;
19
+ export declare const PermissionGuard: React.FC<PermissionGuardProps>;
20
+ export { PermissionLevel } from '../adapters/permissionAdapter/permissionAdapter.js';
21
+ export type { Permission } from '../adapters/permissionAdapter/permissionAdapter.js';
22
+ //# sourceMappingURL=permissionUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissionUtils.d.ts","sourceRoot":"","sources":["../../src/utils/permissionUtils.tsx"],"names":[],"mappings":"AAOA,OAAO,EAOL,eAAe,EAChB,MAAM,oDAAoD,CAAC;AAI5D,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,CAAC,aAAa,EAAE,eAAe,KAAK,OAAO,CAAC;IAC3D,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,eAAe,KAAK,OAAO,CAAC;CAC9E;AAED,eAAO,MAAM,cAAc,QAAO,oBAyDjC,CAAC;AAEF,eAAO,MAAM,eAAe,EAAE,KAAK,CAAC,EAAE,CAAC,oBAAoB,CAiB1D,CAAC;AAEF,OAAO,EAAC,eAAe,EAAC,MAAM,oDAAoD,CAAC;AACnF,YAAY,EAAC,UAAU,EAAC,MAAM,oDAAoD,CAAC"}