@carlonicora/nextjs-jsonapi 6.24.0 → 6.25.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 (246) hide show
  1. package/dist/{BlockNoteEditor-MONT74RQ.js → BlockNoteEditor-TNX77GCD.js} +28 -25
  2. package/dist/BlockNoteEditor-TNX77GCD.js.map +1 -0
  3. package/dist/{BlockNoteEditor-ENDOVTAW.mjs → BlockNoteEditor-Z5LDF47Z.mjs} +13 -10
  4. package/dist/{BlockNoteEditor-ENDOVTAW.mjs.map → BlockNoteEditor-Z5LDF47Z.mjs.map} +1 -1
  5. package/dist/{BlockNoteViewer-K2HBF3IP.js → BlockNoteViewer-6KQJODNF.js} +9 -7
  6. package/dist/BlockNoteViewer-6KQJODNF.js.map +1 -0
  7. package/dist/{BlockNoteViewer-2TJZ6JET.mjs → BlockNoteViewer-TQ452ZYW.mjs} +8 -6
  8. package/dist/{BlockNoteViewer-2TJZ6JET.mjs.map → BlockNoteViewer-TQ452ZYW.mjs.map} +1 -1
  9. package/dist/JsonApiRequest-OKNQZLS6.js +26 -0
  10. package/dist/{JsonApiRequest-KC6DOHKT.js.map → JsonApiRequest-OKNQZLS6.js.map} +1 -1
  11. package/dist/{JsonApiRequest-ADLBJ5RX.mjs → JsonApiRequest-WNPDS356.mjs} +2 -2
  12. package/dist/billing/index.js +504 -517
  13. package/dist/billing/index.js.map +1 -1
  14. package/dist/billing/index.mjs +20 -33
  15. package/dist/billing/index.mjs.map +1 -1
  16. package/dist/{chunk-VNUT2D27.mjs → chunk-2PWYG2WJ.mjs} +2 -2
  17. package/dist/{chunk-W4ML6D2X.mjs → chunk-3U7YJ73T.mjs} +7 -7
  18. package/dist/{chunk-BQ2WAG4K.js → chunk-3VNDFKT7.js} +19 -19
  19. package/dist/{chunk-BQ2WAG4K.js.map → chunk-3VNDFKT7.js.map} +1 -1
  20. package/dist/{chunk-BE6UMM5X.mjs → chunk-47HNJQ7U.mjs} +3 -3
  21. package/dist/chunk-5T2AQMQ2.mjs +90 -0
  22. package/dist/chunk-5T2AQMQ2.mjs.map +1 -0
  23. package/dist/{chunk-A5M3MORY.js → chunk-5WM72MLE.js} +3 -3
  24. package/dist/{chunk-A5M3MORY.js.map → chunk-5WM72MLE.js.map} +1 -1
  25. package/dist/{chunk-S7SPAC6X.mjs → chunk-73NKUBMP.mjs} +3 -3
  26. package/dist/chunk-743M4TIB.mjs +76 -0
  27. package/dist/chunk-743M4TIB.mjs.map +1 -0
  28. package/dist/{chunk-HN7L6RRW.js → chunk-CSBQAPHD.js} +903 -955
  29. package/dist/chunk-CSBQAPHD.js.map +1 -0
  30. package/dist/{chunk-YTDGYI62.mjs → chunk-DWPHHUMV.mjs} +3 -3
  31. package/dist/{chunk-53SD4YRF.js → chunk-FBHUUPRV.js} +5 -5
  32. package/dist/{chunk-53SD4YRF.js.map → chunk-FBHUUPRV.js.map} +1 -1
  33. package/dist/{chunk-T6G2F2BK.mjs → chunk-HJT7TXGG.mjs} +16 -68
  34. package/dist/chunk-HJT7TXGG.mjs.map +1 -0
  35. package/dist/chunk-HROKKUBQ.js +156 -0
  36. package/dist/chunk-HROKKUBQ.js.map +1 -0
  37. package/dist/{chunk-TMV7TL7O.mjs → chunk-JELEQV5T.mjs} +8 -6
  38. package/dist/{chunk-TMV7TL7O.mjs.map → chunk-JELEQV5T.mjs.map} +1 -1
  39. package/dist/{chunk-TNTCLVUR.js → chunk-JGL4P3DS.js} +17 -15
  40. package/dist/chunk-JGL4P3DS.js.map +1 -0
  41. package/dist/{chunk-7OIWOPM5.mjs → chunk-K7KLUYS7.mjs} +4 -3
  42. package/dist/chunk-K7KLUYS7.mjs.map +1 -0
  43. package/dist/{chunk-OZADFYE7.mjs → chunk-KVYYPKRO.mjs} +308 -241
  44. package/dist/chunk-KVYYPKRO.mjs.map +1 -0
  45. package/dist/{chunk-RCOKQ3R4.js → chunk-LNO2JLU3.js} +2 -2
  46. package/dist/{chunk-RCOKQ3R4.js.map → chunk-LNO2JLU3.js.map} +1 -1
  47. package/dist/{chunk-BDWV4KYR.js → chunk-M6SNTMK6.js} +1386 -1319
  48. package/dist/chunk-M6SNTMK6.js.map +1 -0
  49. package/dist/{chunk-GMMDXINC.js → chunk-N3NQS7X6.js} +12 -12
  50. package/dist/{chunk-GMMDXINC.js.map → chunk-N3NQS7X6.js.map} +1 -1
  51. package/dist/chunk-NP3AFULU.js +76 -0
  52. package/dist/chunk-NP3AFULU.js.map +1 -0
  53. package/dist/{chunk-SO3YUCL6.js → chunk-OOM54Z5Z.js} +6 -5
  54. package/dist/chunk-OOM54Z5Z.js.map +1 -0
  55. package/dist/{chunk-YSE2Z4RB.js → chunk-PQQFOONG.js} +12 -12
  56. package/dist/{chunk-YSE2Z4RB.js.map → chunk-PQQFOONG.js.map} +1 -1
  57. package/dist/chunk-RW6XZGZG.mjs +156 -0
  58. package/dist/chunk-RW6XZGZG.mjs.map +1 -0
  59. package/dist/chunk-SYMI4IDW.js +90 -0
  60. package/dist/chunk-SYMI4IDW.js.map +1 -0
  61. package/dist/{chunk-N2BFT7KI.mjs → chunk-W7U6O3OE.mjs} +2 -71
  62. package/dist/chunk-W7U6O3OE.mjs.map +1 -0
  63. package/dist/{chunk-YMCL3JXZ.mjs → chunk-YPBIPE2B.mjs} +2 -2
  64. package/dist/{chunk-P7L6OFX5.js → chunk-Z6T2575A.js} +12 -81
  65. package/dist/chunk-Z6T2575A.js.map +1 -0
  66. package/dist/client/index.js +13 -10
  67. package/dist/client/index.js.map +1 -1
  68. package/dist/client/index.mjs +17 -14
  69. package/dist/components/forms/DatePickerPopover.d.ts.map +1 -1
  70. package/dist/components/forms/DateRangeSelector.d.ts.map +1 -1
  71. package/dist/components/forms/FormDate.d.ts.map +1 -1
  72. package/dist/components/forms/FormDateTime.d.ts.map +1 -1
  73. package/dist/components/forms/time-cycle.d.ts +14 -0
  74. package/dist/components/forms/time-cycle.d.ts.map +1 -0
  75. package/dist/components/index.js +11 -8
  76. package/dist/components/index.js.map +1 -1
  77. package/dist/components/index.mjs +10 -7
  78. package/dist/components/tables/cells/cell.date.d.ts.map +1 -1
  79. package/dist/components/tables/cells/cell.dateTime.d.ts.map +1 -1
  80. package/dist/contexts/DateLocaleContext.d.ts +56 -0
  81. package/dist/contexts/DateLocaleContext.d.ts.map +1 -0
  82. package/dist/contexts/index.d.ts +1 -0
  83. package/dist/contexts/index.d.ts.map +1 -1
  84. package/dist/contexts/index.js +24 -8
  85. package/dist/contexts/index.js.map +1 -1
  86. package/dist/contexts/index.mjs +23 -7
  87. package/dist/core/index.js +17 -6
  88. package/dist/core/index.js.map +1 -1
  89. package/dist/core/index.mjs +19 -8
  90. package/dist/date-locale/index.d.ts +2 -0
  91. package/dist/date-locale/index.d.ts.map +1 -0
  92. package/dist/date-locale/index.js +21 -0
  93. package/dist/date-locale/index.js.map +1 -0
  94. package/dist/date-locale/index.mjs +21 -0
  95. package/dist/email-automations/index.js +131 -123
  96. package/dist/email-automations/index.js.map +1 -1
  97. package/dist/email-automations/index.mjs +23 -15
  98. package/dist/email-automations/index.mjs.map +1 -1
  99. package/dist/features/account-deletion/components/AccountDeletionAdminTrigger.d.ts.map +1 -1
  100. package/dist/features/analytics/components/AnalyticsJourneyContainer.d.ts.map +1 -1
  101. package/dist/features/analytics/components/AnalyticsSessionsTable.d.ts.map +1 -1
  102. package/dist/features/analytics/index.js +154 -147
  103. package/dist/features/analytics/index.js.map +1 -1
  104. package/dist/features/analytics/index.mjs +32 -25
  105. package/dist/features/analytics/index.mjs.map +1 -1
  106. package/dist/features/analytics/server.js +11 -9
  107. package/dist/features/analytics/server.js.map +1 -1
  108. package/dist/features/analytics/server.mjs +9 -7
  109. package/dist/features/analytics/server.mjs.map +1 -1
  110. package/dist/features/billing/components/utils/date.d.ts +3 -3
  111. package/dist/features/billing/components/utils/format-options.d.ts +6 -4
  112. package/dist/features/billing/components/utils/format-options.d.ts.map +1 -1
  113. package/dist/features/billing/components/utils/useBillingFormatOptions.d.ts +5 -1
  114. package/dist/features/billing/components/utils/useBillingFormatOptions.d.ts.map +1 -1
  115. package/dist/features/billing/stripe-usage/components/details/UsageSummaryCard.d.ts.map +1 -1
  116. package/dist/features/billing/stripe-usage/components/lists/UsageHistoryTable.d.ts.map +1 -1
  117. package/dist/features/blog/components/admin/BlogTranslationStatus.d.ts.map +1 -1
  118. package/dist/features/blog/components/public/BlogPostMeta.d.ts.map +1 -1
  119. package/dist/features/blog/hooks/useBlogPostTableStructure.d.ts.map +1 -1
  120. package/dist/features/blog/index.js +168 -162
  121. package/dist/features/blog/index.js.map +1 -1
  122. package/dist/features/blog/index.mjs +25 -19
  123. package/dist/features/blog/index.mjs.map +1 -1
  124. package/dist/features/blog/server.js +29 -27
  125. package/dist/features/blog/server.js.map +1 -1
  126. package/dist/features/blog/server.mjs +8 -6
  127. package/dist/features/blog/server.mjs.map +1 -1
  128. package/dist/features/email-automation/hooks/useEmailAutomationEnrollmentTableStructure.d.ts.map +1 -1
  129. package/dist/features/handbook/components/parts/HandbookIndexStatus.d.ts.map +1 -1
  130. package/dist/features/help/components/HelpArticleBody.d.ts.map +1 -1
  131. package/dist/features/help/index.js +48 -43
  132. package/dist/features/help/index.js.map +1 -1
  133. package/dist/features/help/index.mjs +15 -10
  134. package/dist/features/help/index.mjs.map +1 -1
  135. package/dist/features/notification/components/notifications/Notification.d.ts +2 -1
  136. package/dist/features/notification/components/notifications/Notification.d.ts.map +1 -1
  137. package/dist/features/notification/contexts/NotificationContext.d.ts.map +1 -1
  138. package/dist/features/notification/hooks/useNotificationTableStructure.d.ts.map +1 -1
  139. package/dist/features/oauth/components/OAuthClientCard.d.ts.map +1 -1
  140. package/dist/features/oauth/components/OAuthClientDetail.d.ts.map +1 -1
  141. package/dist/features/tokenusage/index.js +133 -130
  142. package/dist/features/tokenusage/index.js.map +1 -1
  143. package/dist/features/tokenusage/index.mjs +10 -7
  144. package/dist/features/tokenusage/index.mjs.map +1 -1
  145. package/dist/features/tokenusage/lib/formatters.d.ts +6 -3
  146. package/dist/features/tokenusage/lib/formatters.d.ts.map +1 -1
  147. package/dist/index.js +19 -7
  148. package/dist/index.js.map +1 -1
  149. package/dist/index.mjs +23 -11
  150. package/dist/local-transport-AT4TE264.js +15 -0
  151. package/dist/{local-transport-MJPOKPTU.js.map → local-transport-AT4TE264.js.map} +1 -1
  152. package/dist/{local-transport-RVD4FZGA.mjs → local-transport-KWEUZ4GX.mjs} +5 -5
  153. package/dist/offline/index.js +56 -54
  154. package/dist/offline/index.js.map +1 -1
  155. package/dist/offline/index.mjs +23 -21
  156. package/dist/offline/index.mjs.map +1 -1
  157. package/dist/{request-4AWGPIGH.mjs → request-6GAIWWTG.mjs} +2 -2
  158. package/dist/{request-H5FZBZA2.js → request-BWO4Y434.js} +3 -3
  159. package/dist/{request-H5FZBZA2.js.map → request-BWO4Y434.js.map} +1 -1
  160. package/dist/server/ServerSession.d.ts +2 -0
  161. package/dist/server/ServerSession.d.ts.map +1 -1
  162. package/dist/server/index.js +10 -8
  163. package/dist/server/index.js.map +1 -1
  164. package/dist/server/index.mjs +9 -7
  165. package/dist/utils/date-formatter.d.ts +45 -4
  166. package/dist/utils/date-formatter.d.ts.map +1 -1
  167. package/dist/utils/index.d.ts +1 -1
  168. package/dist/utils/index.d.ts.map +1 -1
  169. package/dist/write-through-KNRI5L4V.mjs +15 -0
  170. package/dist/write-through-KNRI5L4V.mjs.map +1 -0
  171. package/dist/write-through-MYHQ6GJU.js +15 -0
  172. package/dist/{write-through-HE2QSOVI.js.map → write-through-MYHQ6GJU.js.map} +1 -1
  173. package/messages/en.json +1 -0
  174. package/messages/it.json +1 -0
  175. package/package.json +6 -1
  176. package/src/components/forms/DatePickerPopover.tsx +5 -3
  177. package/src/components/forms/DateRangeSelector.tsx +9 -7
  178. package/src/components/forms/FormDate.tsx +5 -3
  179. package/src/components/forms/FormDateTime.tsx +75 -39
  180. package/src/components/forms/__tests__/time-cycle.spec.ts +37 -0
  181. package/src/components/forms/time-cycle.ts +27 -0
  182. package/src/components/tables/cells/cell.date.tsx +3 -5
  183. package/src/components/tables/cells/cell.dateTime.tsx +3 -7
  184. package/src/contexts/DateLocaleContext.tsx +106 -0
  185. package/src/contexts/__tests__/DateLocaleContext.spec.tsx +175 -0
  186. package/src/contexts/index.ts +1 -0
  187. package/src/date-locale/index.ts +12 -0
  188. package/src/features/account-deletion/components/AccountDeletionAdminTrigger.tsx +3 -4
  189. package/src/features/analytics/components/AnalyticsJourneyContainer.tsx +8 -8
  190. package/src/features/analytics/components/AnalyticsSessionsTable.tsx +4 -6
  191. package/src/features/auth/components/two-factor/PasskeyList.tsx +3 -3
  192. package/src/features/auth/components/two-factor/TotpAuthenticatorList.tsx +3 -3
  193. package/src/features/billing/components/utils/__tests__/billing-formatters.spec.ts +14 -6
  194. package/src/features/billing/components/utils/date.ts +5 -5
  195. package/src/features/billing/components/utils/format-options.ts +6 -4
  196. package/src/features/billing/components/utils/useBillingFormatOptions.ts +8 -2
  197. package/src/features/billing/stripe-usage/components/details/UsageSummaryCard.tsx +4 -12
  198. package/src/features/billing/stripe-usage/components/lists/UsageHistoryTable.tsx +4 -17
  199. package/src/features/blog/components/admin/BlogTranslationStatus.tsx +3 -2
  200. package/src/features/blog/components/public/BlogPostMeta.tsx +5 -4
  201. package/src/features/blog/components/public/__tests__/BlogList.spec.tsx +1 -2
  202. package/src/features/blog/components/public/__tests__/BlogPostView.spec.tsx +2 -3
  203. package/src/features/blog/hooks/useBlogPostTableStructure.tsx +4 -8
  204. package/src/features/email-automation/hooks/useEmailAutomationEnrollmentTableStructure.tsx +11 -5
  205. package/src/features/email-blast/components/containers/EmailBlastContainer.tsx +3 -3
  206. package/src/features/email-blast/hooks/useEmailBlastTableStructure.tsx +4 -4
  207. package/src/features/handbook/components/parts/HandbookIndexStatus.tsx +4 -3
  208. package/src/features/help/components/HelpArticleBody.tsx +4 -3
  209. package/src/features/notification/components/notifications/Notification.tsx +38 -7
  210. package/src/features/notification/contexts/NotificationContext.tsx +6 -3
  211. package/src/features/notification/hooks/useNotificationTableStructure.tsx +6 -5
  212. package/src/features/oauth/components/OAuthClientCard.tsx +8 -5
  213. package/src/features/oauth/components/OAuthClientDetail.tsx +3 -6
  214. package/src/features/tokenusage/lib/__tests__/formatters.spec.ts +19 -0
  215. package/src/features/tokenusage/lib/formatters.ts +11 -6
  216. package/src/features/waitlist/hooks/useWaitlistTableStructure.tsx +5 -5
  217. package/src/server/ServerSession.ts +3 -0
  218. package/src/server/__tests__/ServerSession.read.spec.ts +18 -1
  219. package/src/utils/__tests__/date-formatter.spec.ts +134 -10
  220. package/src/utils/date-formatter.ts +200 -44
  221. package/src/utils/index.ts +11 -1
  222. package/dist/BlockNoteEditor-MONT74RQ.js.map +0 -1
  223. package/dist/BlockNoteViewer-K2HBF3IP.js.map +0 -1
  224. package/dist/JsonApiRequest-KC6DOHKT.js +0 -26
  225. package/dist/chunk-7OIWOPM5.mjs.map +0 -1
  226. package/dist/chunk-BDWV4KYR.js.map +0 -1
  227. package/dist/chunk-HN7L6RRW.js.map +0 -1
  228. package/dist/chunk-N2BFT7KI.mjs.map +0 -1
  229. package/dist/chunk-OZADFYE7.mjs.map +0 -1
  230. package/dist/chunk-P7L6OFX5.js.map +0 -1
  231. package/dist/chunk-SO3YUCL6.js.map +0 -1
  232. package/dist/chunk-T6G2F2BK.mjs.map +0 -1
  233. package/dist/chunk-TNTCLVUR.js.map +0 -1
  234. package/dist/local-transport-MJPOKPTU.js +0 -15
  235. package/dist/write-through-7I3LA2WN.mjs +0 -15
  236. package/dist/write-through-HE2QSOVI.js +0 -15
  237. /package/dist/{JsonApiRequest-ADLBJ5RX.mjs.map → JsonApiRequest-WNPDS356.mjs.map} +0 -0
  238. /package/dist/{chunk-VNUT2D27.mjs.map → chunk-2PWYG2WJ.mjs.map} +0 -0
  239. /package/dist/{chunk-W4ML6D2X.mjs.map → chunk-3U7YJ73T.mjs.map} +0 -0
  240. /package/dist/{chunk-BE6UMM5X.mjs.map → chunk-47HNJQ7U.mjs.map} +0 -0
  241. /package/dist/{chunk-S7SPAC6X.mjs.map → chunk-73NKUBMP.mjs.map} +0 -0
  242. /package/dist/{chunk-YTDGYI62.mjs.map → chunk-DWPHHUMV.mjs.map} +0 -0
  243. /package/dist/{chunk-YMCL3JXZ.mjs.map → chunk-YPBIPE2B.mjs.map} +0 -0
  244. /package/dist/{local-transport-RVD4FZGA.mjs.map → date-locale/index.mjs.map} +0 -0
  245. /package/dist/{request-4AWGPIGH.mjs.map → local-transport-KWEUZ4GX.mjs.map} +0 -0
  246. /package/dist/{write-through-7I3LA2WN.mjs.map → request-6GAIWWTG.mjs.map} +0 -0
@@ -8,7 +8,7 @@ import {
8
8
  ENV,
9
9
  JsonApiDataFactory,
10
10
  translateResponse
11
- } from "./chunk-YMCL3JXZ.mjs";
11
+ } from "./chunk-YPBIPE2B.mjs";
12
12
  import {
13
13
  __name
14
14
  } from "./chunk-PAWJFY3S.mjs";
@@ -201,4 +201,4 @@ export {
201
201
  ServerJsonApiPatch,
202
202
  ServerJsonApiDelete
203
203
  };
204
- //# sourceMappingURL=chunk-VNUT2D27.mjs.map
204
+ //# sourceMappingURL=chunk-2PWYG2WJ.mjs.map
@@ -1,8 +1,3 @@
1
- import {
2
- cacheArtworkImage,
3
- imageUrlOf,
4
- isRootLocked
5
- } from "./chunk-4RPGFQBA.mjs";
6
1
  import {
7
2
  linkKindFor,
8
3
  linkKindsOf,
@@ -10,7 +5,12 @@ import {
10
5
  matchPattern,
11
6
  rootIdForResource,
12
7
  splitApiUrl
13
- } from "./chunk-YTDGYI62.mjs";
8
+ } from "./chunk-DWPHHUMV.mjs";
9
+ import {
10
+ cacheArtworkImage,
11
+ imageUrlOf,
12
+ isRootLocked
13
+ } from "./chunk-4RPGFQBA.mjs";
14
14
  import {
15
15
  OfflineUnavailableError,
16
16
  getOfflineConfig,
@@ -230,4 +230,4 @@ export {
230
230
  waitingRecordKeys,
231
231
  writeThrough
232
232
  };
233
- //# sourceMappingURL=chunk-W4ML6D2X.mjs.map
233
+ //# sourceMappingURL=chunk-3U7YJ73T.mjs.map
@@ -1,12 +1,12 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
2
2
 
3
- var _chunkA5M3MORYjs = require('./chunk-A5M3MORY.js');
3
+ var _chunk5WM72MLEjs = require('./chunk-5WM72MLE.js');
4
4
 
5
5
 
6
6
 
7
7
 
8
8
 
9
- var _chunkRCOKQ3R4js = require('./chunk-RCOKQ3R4.js');
9
+ var _chunkLNO2JLU3js = require('./chunk-LNO2JLU3.js');
10
10
 
11
11
 
12
12
  var _chunkLXKSUWAVjs = require('./chunk-LXKSUWAV.js');
@@ -22,7 +22,7 @@ var _clientConfig = null;
22
22
  function configureClientJsonApi(config) {
23
23
  _clientConfig = config;
24
24
  if (config.bootstrapper) {
25
- _chunkRCOKQ3R4js.setBootstrapper.call(void 0, config.bootstrapper);
25
+ _chunkLNO2JLU3js.setBootstrapper.call(void 0, config.bootstrapper);
26
26
  config.bootstrapper();
27
27
  }
28
28
  }
@@ -31,7 +31,7 @@ function getClientApiUrl() {
31
31
  if (_optionalChain([_clientConfig, 'optionalAccess', _ => _.apiUrl])) {
32
32
  return _clientConfig.apiUrl;
33
33
  }
34
- const envUrl = _chunkRCOKQ3R4js.ENV.API_URL;
34
+ const envUrl = _chunkLNO2JLU3js.ENV.API_URL;
35
35
  if (!envUrl) {
36
36
  throw new Error(
37
37
  "API URL not configured. Use configureClientJsonApi() or set NEXT_PUBLIC_API_URL environment variable."
@@ -44,7 +44,7 @@ function getClientAppUrl() {
44
44
  if (_optionalChain([_clientConfig, 'optionalAccess', _2 => _2.appUrl])) {
45
45
  return _clientConfig.appUrl;
46
46
  }
47
- const envUrl = _chunkRCOKQ3R4js.ENV.APP_URL;
47
+ const envUrl = _chunkLNO2JLU3js.ENV.APP_URL;
48
48
  if (!envUrl) {
49
49
  throw new Error(
50
50
  "App URL not configured. Use configureClientJsonApi({ appUrl }) or set NEXT_PUBLIC_ADDRESS environment variable."
@@ -72,7 +72,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, buildClientUrl, "buildClientUrl");
72
72
  async function ClientJsonApiGet(params) {
73
73
  runClientBootstrapper();
74
74
  const token = await _chunkLXKSUWAVjs.getClientToken.call(void 0, );
75
- const apiResponse = await _chunkA5M3MORYjs.directFetch.call(void 0, {
75
+ const apiResponse = await _chunk5WM72MLEjs.directFetch.call(void 0, {
76
76
  method: "GET",
77
77
  url: buildClientUrl(params.endpoint, params.baseUrl),
78
78
  token,
@@ -81,7 +81,7 @@ async function ClientJsonApiGet(params) {
81
81
  additionalHeaders: _optionalChain([_clientConfig, 'optionalAccess', _5 => _5.additionalHeaders]),
82
82
  credentials: params.credentials
83
83
  });
84
- return _chunkRCOKQ3R4js.translateResponse.call(void 0, {
84
+ return _chunkLNO2JLU3js.translateResponse.call(void 0, {
85
85
  classKey: params.classKey,
86
86
  apiResponse,
87
87
  companyId: params.companyId,
@@ -103,9 +103,9 @@ async function ClientJsonApiPost(params) {
103
103
  if (!body) {
104
104
  body = {};
105
105
  } else if (params.overridesJsonApiCreation !== true) {
106
- body = _chunkRCOKQ3R4js.JsonApiDataFactory.create(params.classKey, body);
106
+ body = _chunkLNO2JLU3js.JsonApiDataFactory.create(params.classKey, body);
107
107
  }
108
- const apiResponse = await _chunkA5M3MORYjs.directFetch.call(void 0, {
108
+ const apiResponse = await _chunk5WM72MLEjs.directFetch.call(void 0, {
109
109
  method: "POST",
110
110
  url: buildClientUrl(params.endpoint, params.baseUrl),
111
111
  token,
@@ -116,7 +116,7 @@ async function ClientJsonApiPost(params) {
116
116
  additionalHeaders: _optionalChain([_clientConfig, 'optionalAccess', _6 => _6.additionalHeaders]),
117
117
  credentials: params.credentials
118
118
  });
119
- return _chunkRCOKQ3R4js.translateResponse.call(void 0, {
119
+ return _chunkLNO2JLU3js.translateResponse.call(void 0, {
120
120
  classKey: _nullishCoalesce(params.responseType, () => ( params.classKey)),
121
121
  apiResponse,
122
122
  companyId: params.companyId,
@@ -131,9 +131,9 @@ async function ClientJsonApiPut(params) {
131
131
  if (!body) {
132
132
  body = {};
133
133
  } else {
134
- body = _chunkRCOKQ3R4js.JsonApiDataFactory.create(params.classKey, body);
134
+ body = _chunkLNO2JLU3js.JsonApiDataFactory.create(params.classKey, body);
135
135
  }
136
- const apiResponse = await _chunkA5M3MORYjs.directFetch.call(void 0, {
136
+ const apiResponse = await _chunk5WM72MLEjs.directFetch.call(void 0, {
137
137
  method: "PUT",
138
138
  url: buildClientUrl(params.endpoint, params.baseUrl),
139
139
  token,
@@ -144,7 +144,7 @@ async function ClientJsonApiPut(params) {
144
144
  additionalHeaders: _optionalChain([_clientConfig, 'optionalAccess', _7 => _7.additionalHeaders]),
145
145
  credentials: params.credentials
146
146
  });
147
- return _chunkRCOKQ3R4js.translateResponse.call(void 0, {
147
+ return _chunkLNO2JLU3js.translateResponse.call(void 0, {
148
148
  classKey: _nullishCoalesce(params.responseType, () => ( params.classKey)),
149
149
  apiResponse,
150
150
  companyId: params.companyId,
@@ -159,9 +159,9 @@ async function ClientJsonApiPatch(params) {
159
159
  if (!body) {
160
160
  body = {};
161
161
  } else if (params.overridesJsonApiCreation !== true) {
162
- body = _chunkRCOKQ3R4js.JsonApiDataFactory.create(params.classKey, body);
162
+ body = _chunkLNO2JLU3js.JsonApiDataFactory.create(params.classKey, body);
163
163
  }
164
- const apiResponse = await _chunkA5M3MORYjs.directFetch.call(void 0, {
164
+ const apiResponse = await _chunk5WM72MLEjs.directFetch.call(void 0, {
165
165
  method: "PATCH",
166
166
  url: buildClientUrl(params.endpoint, params.baseUrl),
167
167
  token,
@@ -172,7 +172,7 @@ async function ClientJsonApiPatch(params) {
172
172
  additionalHeaders: _optionalChain([_clientConfig, 'optionalAccess', _8 => _8.additionalHeaders]),
173
173
  credentials: params.credentials
174
174
  });
175
- return _chunkRCOKQ3R4js.translateResponse.call(void 0, {
175
+ return _chunkLNO2JLU3js.translateResponse.call(void 0, {
176
176
  classKey: _nullishCoalesce(params.responseType, () => ( params.classKey)),
177
177
  apiResponse,
178
178
  companyId: params.companyId,
@@ -183,7 +183,7 @@ _chunk7QVYU63Ejs.__name.call(void 0, ClientJsonApiPatch, "ClientJsonApiPatch");
183
183
  async function ClientJsonApiDelete(params) {
184
184
  runClientBootstrapper();
185
185
  const token = await _chunkLXKSUWAVjs.getClientToken.call(void 0, );
186
- const apiResponse = await _chunkA5M3MORYjs.directFetch.call(void 0, {
186
+ const apiResponse = await _chunk5WM72MLEjs.directFetch.call(void 0, {
187
187
  method: "DELETE",
188
188
  url: buildClientUrl(params.endpoint, params.baseUrl),
189
189
  token,
@@ -192,7 +192,7 @@ async function ClientJsonApiDelete(params) {
192
192
  additionalHeaders: _optionalChain([_clientConfig, 'optionalAccess', _9 => _9.additionalHeaders]),
193
193
  credentials: params.credentials
194
194
  });
195
- return _chunkRCOKQ3R4js.translateResponse.call(void 0, {
195
+ return _chunkLNO2JLU3js.translateResponse.call(void 0, {
196
196
  classKey: _nullishCoalesce(params.responseType, () => ( params.classKey)),
197
197
  apiResponse,
198
198
  companyId: params.companyId,
@@ -214,4 +214,4 @@ _chunk7QVYU63Ejs.__name.call(void 0, ClientJsonApiDelete, "ClientJsonApiDelete")
214
214
 
215
215
 
216
216
  exports.CURRENT_USER_STORAGE_KEY = CURRENT_USER_STORAGE_KEY; exports.configureClientJsonApi = configureClientJsonApi; exports.getClientApiUrl = getClientApiUrl; exports.getClientAppUrl = getClientAppUrl; exports.getClientTrackablePages = getClientTrackablePages; exports.buildClientUrl = buildClientUrl; exports.ClientJsonApiGet = ClientJsonApiGet; exports.ClientJsonApiPost = ClientJsonApiPost; exports.ClientJsonApiPut = ClientJsonApiPut; exports.ClientJsonApiPatch = ClientJsonApiPatch; exports.ClientJsonApiDelete = ClientJsonApiDelete;
217
- //# sourceMappingURL=chunk-BQ2WAG4K.js.map
217
+ //# sourceMappingURL=chunk-3VNDFKT7.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-BQ2WAG4K.js","../src/features/user/data/user.storage.ts","../src/client/JsonApiClient.ts"],"names":[],"mappings":"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","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-BQ2WAG4K.js","sourcesContent":[null,"/**\n * localStorage key backing the `CurrentUserProvider` atom.\n *\n * Owned by this library, not by the apps that consume it: `<Logout />` clears\n * it on every sign-out. Kept in its own module so both the provider that writes\n * it and the component that clears it can reference the same constant without\n * importing each other.\n */\nexport const CURRENT_USER_STORAGE_KEY = \"user\";\n","\"use client\";\n\nimport { ENV } from \"../core/env\";\nimport { JsonApiDataFactory } from \"../core/factories/JsonApiDataFactory\";\nimport { ApiRequestDataTypeInterface } from \"../core/interfaces/ApiRequestDataTypeInterface\";\nimport { ApiResponseInterface } from \"../core/interfaces/ApiResponseInterface\";\nimport { setBootstrapper } from \"../core/registry/bootstrapStore\";\nimport { translateResponse } from \"../core/utils/translateResponse\";\nimport { ModuleWithPermissions } from \"../permissions/types\";\nimport { directFetch } from \"./request\";\nimport { getClientToken } from \"./token\";\n\n// Config storage for client contexts\nlet _clientConfig: {\n apiUrl: string;\n appUrl?: string;\n trackablePages?: ModuleWithPermissions[];\n bootstrapper?: () => void;\n additionalHeaders?: Record<string, string>;\n} | null = null;\n\n/**\n * Configure the JSON:API client for browser contexts.\n * Call this in your client-side initialization or use JsonApiProvider.\n */\nexport function configureClientJsonApi(config: {\n apiUrl: string;\n appUrl?: string;\n trackablePages?: ModuleWithPermissions[];\n bootstrapper?: () => void;\n additionalHeaders?: Record<string, string>;\n}): void {\n _clientConfig = config;\n if (config.bootstrapper) {\n setBootstrapper(config.bootstrapper);\n config.bootstrapper();\n }\n}\n\nexport function getClientApiUrl(): string {\n if (_clientConfig?.apiUrl) {\n return _clientConfig.apiUrl;\n }\n const envUrl = ENV.API_URL;\n if (!envUrl) {\n throw new Error(\n \"API URL not configured. Use configureClientJsonApi() or set NEXT_PUBLIC_API_URL environment variable.\",\n );\n }\n return envUrl;\n}\n\nexport function getClientAppUrl(): string {\n if (_clientConfig?.appUrl) {\n return _clientConfig.appUrl;\n }\n const envUrl = ENV.APP_URL;\n if (!envUrl) {\n throw new Error(\n \"App URL not configured. Use configureClientJsonApi({ appUrl }) or set NEXT_PUBLIC_ADDRESS environment variable.\",\n );\n }\n return envUrl.trim().replace(/\\/+$/, \"\");\n}\n\nexport function getClientTrackablePages(): ModuleWithPermissions[] {\n return _clientConfig?.trackablePages ?? [];\n}\n\nfunction runClientBootstrapper(): void {\n if (_clientConfig?.bootstrapper) {\n _clientConfig.bootstrapper();\n }\n}\n\n/**\n * Resolve the final request URL for an endpoint (client-side variant of `buildUrl`\n * in `unified/JsonApiRequest.ts` — kept in lockstep with it).\n *\n * - `endpoint` starting with \"http\" is always passed through unchanged (existing behaviour).\n * - Otherwise, an explicit `baseUrl` (per-call override) takes precedence over the global\n * `getClientApiUrl()` resolution. Omitting `baseUrl` preserves today's behaviour exactly.\n */\nexport function buildClientUrl(endpoint: string, baseUrl?: string): string {\n if (endpoint.startsWith(\"http\")) return endpoint;\n const apiUrl = baseUrl ?? getClientApiUrl();\n return `${apiUrl}${endpoint}`;\n}\n\nexport async function ClientJsonApiGet(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n language: string;\n baseUrl?: string;\n credentials?: RequestCredentials;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n const apiResponse = await directFetch({\n method: \"GET\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n credentials: params.credentials,\n });\n\n return translateResponse({\n classKey: params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n paginationHandler: async (endpoint: string) =>\n ClientJsonApiGet({\n classKey: params.classKey,\n endpoint,\n companyId: params.companyId,\n language: params.language,\n baseUrl: params.baseUrl,\n }),\n });\n}\n\nexport async function ClientJsonApiPost(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n overridesJsonApiCreation?: boolean;\n files?: { [key: string]: File | Blob } | File | Blob;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n baseUrl?: string;\n credentials?: RequestCredentials;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else if (params.overridesJsonApiCreation !== true) {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await directFetch({\n method: \"POST\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n credentials: params.credentials,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function ClientJsonApiPut(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n baseUrl?: string;\n credentials?: RequestCredentials;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await directFetch({\n method: \"PUT\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n credentials: params.credentials,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function ClientJsonApiPatch(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n overridesJsonApiCreation?: boolean;\n responseType?: ApiRequestDataTypeInterface;\n language: string;\n baseUrl?: string;\n credentials?: RequestCredentials;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else if (params.overridesJsonApiCreation !== true) {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await directFetch({\n method: \"PATCH\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n credentials: params.credentials,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function ClientJsonApiDelete(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n baseUrl?: string;\n credentials?: RequestCredentials;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n const apiResponse = await directFetch({\n method: \"DELETE\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n credentials: params.credentials,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-3VNDFKT7.js","../src/features/user/data/user.storage.ts","../src/client/JsonApiClient.ts"],"names":[],"mappings":"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","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-3VNDFKT7.js","sourcesContent":[null,"/**\n * localStorage key backing the `CurrentUserProvider` atom.\n *\n * Owned by this library, not by the apps that consume it: `<Logout />` clears\n * it on every sign-out. Kept in its own module so both the provider that writes\n * it and the component that clears it can reference the same constant without\n * importing each other.\n */\nexport const CURRENT_USER_STORAGE_KEY = \"user\";\n","\"use client\";\n\nimport { ENV } from \"../core/env\";\nimport { JsonApiDataFactory } from \"../core/factories/JsonApiDataFactory\";\nimport { ApiRequestDataTypeInterface } from \"../core/interfaces/ApiRequestDataTypeInterface\";\nimport { ApiResponseInterface } from \"../core/interfaces/ApiResponseInterface\";\nimport { setBootstrapper } from \"../core/registry/bootstrapStore\";\nimport { translateResponse } from \"../core/utils/translateResponse\";\nimport { ModuleWithPermissions } from \"../permissions/types\";\nimport { directFetch } from \"./request\";\nimport { getClientToken } from \"./token\";\n\n// Config storage for client contexts\nlet _clientConfig: {\n apiUrl: string;\n appUrl?: string;\n trackablePages?: ModuleWithPermissions[];\n bootstrapper?: () => void;\n additionalHeaders?: Record<string, string>;\n} | null = null;\n\n/**\n * Configure the JSON:API client for browser contexts.\n * Call this in your client-side initialization or use JsonApiProvider.\n */\nexport function configureClientJsonApi(config: {\n apiUrl: string;\n appUrl?: string;\n trackablePages?: ModuleWithPermissions[];\n bootstrapper?: () => void;\n additionalHeaders?: Record<string, string>;\n}): void {\n _clientConfig = config;\n if (config.bootstrapper) {\n setBootstrapper(config.bootstrapper);\n config.bootstrapper();\n }\n}\n\nexport function getClientApiUrl(): string {\n if (_clientConfig?.apiUrl) {\n return _clientConfig.apiUrl;\n }\n const envUrl = ENV.API_URL;\n if (!envUrl) {\n throw new Error(\n \"API URL not configured. Use configureClientJsonApi() or set NEXT_PUBLIC_API_URL environment variable.\",\n );\n }\n return envUrl;\n}\n\nexport function getClientAppUrl(): string {\n if (_clientConfig?.appUrl) {\n return _clientConfig.appUrl;\n }\n const envUrl = ENV.APP_URL;\n if (!envUrl) {\n throw new Error(\n \"App URL not configured. Use configureClientJsonApi({ appUrl }) or set NEXT_PUBLIC_ADDRESS environment variable.\",\n );\n }\n return envUrl.trim().replace(/\\/+$/, \"\");\n}\n\nexport function getClientTrackablePages(): ModuleWithPermissions[] {\n return _clientConfig?.trackablePages ?? [];\n}\n\nfunction runClientBootstrapper(): void {\n if (_clientConfig?.bootstrapper) {\n _clientConfig.bootstrapper();\n }\n}\n\n/**\n * Resolve the final request URL for an endpoint (client-side variant of `buildUrl`\n * in `unified/JsonApiRequest.ts` — kept in lockstep with it).\n *\n * - `endpoint` starting with \"http\" is always passed through unchanged (existing behaviour).\n * - Otherwise, an explicit `baseUrl` (per-call override) takes precedence over the global\n * `getClientApiUrl()` resolution. Omitting `baseUrl` preserves today's behaviour exactly.\n */\nexport function buildClientUrl(endpoint: string, baseUrl?: string): string {\n if (endpoint.startsWith(\"http\")) return endpoint;\n const apiUrl = baseUrl ?? getClientApiUrl();\n return `${apiUrl}${endpoint}`;\n}\n\nexport async function ClientJsonApiGet(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n language: string;\n baseUrl?: string;\n credentials?: RequestCredentials;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n const apiResponse = await directFetch({\n method: \"GET\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n credentials: params.credentials,\n });\n\n return translateResponse({\n classKey: params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n paginationHandler: async (endpoint: string) =>\n ClientJsonApiGet({\n classKey: params.classKey,\n endpoint,\n companyId: params.companyId,\n language: params.language,\n baseUrl: params.baseUrl,\n }),\n });\n}\n\nexport async function ClientJsonApiPost(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n overridesJsonApiCreation?: boolean;\n files?: { [key: string]: File | Blob } | File | Blob;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n baseUrl?: string;\n credentials?: RequestCredentials;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else if (params.overridesJsonApiCreation !== true) {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await directFetch({\n method: \"POST\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n credentials: params.credentials,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function ClientJsonApiPut(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n baseUrl?: string;\n credentials?: RequestCredentials;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await directFetch({\n method: \"PUT\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n credentials: params.credentials,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function ClientJsonApiPatch(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n overridesJsonApiCreation?: boolean;\n responseType?: ApiRequestDataTypeInterface;\n language: string;\n baseUrl?: string;\n credentials?: RequestCredentials;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n let body = params.body;\n if (!body) {\n body = {};\n } else if (params.overridesJsonApiCreation !== true) {\n body = JsonApiDataFactory.create(params.classKey, body);\n }\n\n const apiResponse = await directFetch({\n method: \"PATCH\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n body,\n files: params.files,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n credentials: params.credentials,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n\nexport async function ClientJsonApiDelete(params: {\n classKey: ApiRequestDataTypeInterface;\n endpoint: string;\n companyId?: string;\n language: string;\n responseType?: ApiRequestDataTypeInterface;\n baseUrl?: string;\n credentials?: RequestCredentials;\n}): Promise<ApiResponseInterface> {\n runClientBootstrapper();\n const token = await getClientToken();\n\n const apiResponse = await directFetch({\n method: \"DELETE\",\n url: buildClientUrl(params.endpoint, params.baseUrl),\n token,\n companyId: params.companyId,\n language: params.language,\n additionalHeaders: _clientConfig?.additionalHeaders,\n credentials: params.credentials,\n });\n\n return translateResponse({\n classKey: params.responseType ?? params.classKey,\n apiResponse,\n companyId: params.companyId,\n language: params.language,\n });\n}\n"]}
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  directFetch
3
- } from "./chunk-S7SPAC6X.mjs";
3
+ } from "./chunk-73NKUBMP.mjs";
4
4
  import {
5
5
  ENV,
6
6
  JsonApiDataFactory,
7
7
  setBootstrapper,
8
8
  translateResponse
9
- } from "./chunk-YMCL3JXZ.mjs";
9
+ } from "./chunk-YPBIPE2B.mjs";
10
10
  import {
11
11
  getClientToken
12
12
  } from "./chunk-AUXK7QSA.mjs";
@@ -214,4 +214,4 @@ export {
214
214
  ClientJsonApiPatch,
215
215
  ClientJsonApiDelete
216
216
  };
217
- //# sourceMappingURL=chunk-BE6UMM5X.mjs.map
217
+ //# sourceMappingURL=chunk-47HNJQ7U.mjs.map
@@ -0,0 +1,90 @@
1
+ import {
2
+ formatDateStyle,
3
+ formatRelativeDate,
4
+ resolveDateLocale,
5
+ usesTwelveHourClock
6
+ } from "./chunk-RW6XZGZG.mjs";
7
+ import {
8
+ useI18nLocale
9
+ } from "./chunk-743M4TIB.mjs";
10
+ import {
11
+ __name
12
+ } from "./chunk-PAWJFY3S.mjs";
13
+
14
+ // src/contexts/DateLocaleContext.tsx
15
+ import * as React from "react";
16
+
17
+ // src/utils/map-thenable.ts
18
+ function mapThenable(thenable, map) {
19
+ return new Promise((resolve, reject) => {
20
+ thenable.then((value) => resolve(map(value)), reject);
21
+ });
22
+ }
23
+ __name(mapThenable, "mapThenable");
24
+
25
+ // src/contexts/DateLocaleContext.tsx
26
+ import { jsx } from "react/jsx-runtime";
27
+ var DateLocaleContext = React.createContext(null);
28
+ function DateLocaleProvider(props) {
29
+ const { session, children } = props;
30
+ const value = React.useMemo(
31
+ () => props.mode === "public" || !session ? { mode: "public" } : { mode: "session", acceptLanguage: mapThenable(session, (snapshot) => snapshot.acceptLanguage) },
32
+ // Created once, like ViewportProvider's seed.
33
+ []
34
+ );
35
+ return /* @__PURE__ */ jsx(DateLocaleContext.Provider, { value, children });
36
+ }
37
+ __name(DateLocaleProvider, "DateLocaleProvider");
38
+ function useDateLocaleSource() {
39
+ return React.useContext(DateLocaleContext);
40
+ }
41
+ __name(useDateLocaleSource, "useDateLocaleSource");
42
+ function DateLocaleSourceProvider({
43
+ value,
44
+ children
45
+ }) {
46
+ return /* @__PURE__ */ jsx(DateLocaleContext.Provider, { value, children });
47
+ }
48
+ __name(DateLocaleSourceProvider, "DateLocaleSourceProvider");
49
+ function useDateLocale() {
50
+ const source = React.useContext(DateLocaleContext);
51
+ const appLocale = useI18nLocale();
52
+ const acceptLanguage = source?.mode === "session" ? React.use(source.acceptLanguage) : void 0;
53
+ const isPublic = source?.mode === "public";
54
+ const locale = source?.mode === "session" ? resolveDateLocale({ appLocale, acceptLanguage }) : appLocale;
55
+ return React.useMemo(() => ({ locale, isPublic }), [locale, isPublic]);
56
+ }
57
+ __name(useDateLocale, "useDateLocale");
58
+ function useDateFormatter() {
59
+ const { locale, isPublic } = useDateLocale();
60
+ return React.useMemo(
61
+ () => ({
62
+ locale,
63
+ isPublic,
64
+ format: /* @__PURE__ */ __name((date, style, options) => formatDateStyle({ date, style, locale, timeZone: options?.timeZone, isPublic }), "format"),
65
+ relative: /* @__PURE__ */ __name((date, options) => formatRelativeDate({ date, locale, now: options.now }), "relative"),
66
+ twelveHourClock: usesTwelveHourClock(locale)
67
+ }),
68
+ [locale, isPublic]
69
+ );
70
+ }
71
+ __name(useDateFormatter, "useDateFormatter");
72
+ function useMountedNow() {
73
+ const [now, setNow] = React.useState(void 0);
74
+ React.useEffect(() => {
75
+ setNow(/* @__PURE__ */ new Date());
76
+ }, []);
77
+ return now;
78
+ }
79
+ __name(useMountedNow, "useMountedNow");
80
+
81
+ export {
82
+ mapThenable,
83
+ DateLocaleProvider,
84
+ useDateLocaleSource,
85
+ DateLocaleSourceProvider,
86
+ useDateLocale,
87
+ useDateFormatter,
88
+ useMountedNow
89
+ };
90
+ //# sourceMappingURL=chunk-5T2AQMQ2.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/contexts/DateLocaleContext.tsx","../src/utils/map-thenable.ts"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { useI18nLocale } from \"../i18n/config\";\nimport type { SessionSnapshot } from \"../server/ServerSession\";\nimport {\n type DateFormatStyle,\n formatDateStyle,\n formatRelativeDate,\n resolveDateLocale,\n usesTwelveHourClock,\n} from \"../utils/date-formatter\";\nimport { mapThenable } from \"../utils/map-thenable\";\n\n/**\n * The locale every real-world date is formatted in.\n *\n * Signed-in shells pass the request's session promise: the provider maps it to\n * the `Accept-Language` header once and never awaits it, so its children render\n * at once; only `useDateLocale()` callers suspend until it settles (the shape of\n * `ViewportProvider`). Public layouts pass `mode=\"public\"`: the app language,\n * with all-numeric styles spelled out. Without a provider: the app language.\n *\n * THIS LIVES IN `contexts/` for the same reason as `ViewportProvider`: the\n * server layouts render it directly, so it needs the \"use client\" boundary that\n * tsup stamps onto `dist/contexts/*`.\n */\nexport type DateLocaleSource = { mode: \"session\"; acceptLanguage: Promise<string | undefined> } | { mode: \"public\" };\n\nconst DateLocaleContext = React.createContext<DateLocaleSource | null>(null);\n\nexport function DateLocaleProvider(\n props:\n | { session: Promise<SessionSnapshot>; mode?: \"session\"; children: React.ReactNode }\n | { mode: \"public\"; session?: never; children: React.ReactNode },\n) {\n const { session, children } = props;\n const value = React.useMemo<DateLocaleSource>(\n () =>\n props.mode === \"public\" || !session\n ? { mode: \"public\" }\n : { mode: \"session\", acceptLanguage: mapThenable(session, (snapshot) => snapshot.acceptLanguage) },\n // Created once, like ViewportProvider's seed.\n [],\n );\n\n return <DateLocaleContext.Provider value={value}>{children}</DateLocaleContext.Provider>;\n}\n\n/** The provider's raw context value (mapped thenable + mode), read WITHOUT suspending — for re-providing it to a tree rendered outside the provider (sonner toasts). */\nexport function useDateLocaleSource(): DateLocaleSource | null {\n return React.useContext(DateLocaleContext);\n}\n\nexport function DateLocaleSourceProvider({\n value,\n children,\n}: {\n value: DateLocaleSource | null;\n children: React.ReactNode;\n}) {\n return <DateLocaleContext.Provider value={value}>{children}</DateLocaleContext.Provider>;\n}\n\nexport type DateLocale = { locale: string; isPublic: boolean };\n\n/** Suspends on the session (put the caller behind its own `<Suspense>`) when a session provider is above it. */\nexport function useDateLocale(): DateLocale {\n const source = React.useContext(DateLocaleContext);\n const appLocale = useI18nLocale();\n const acceptLanguage = source?.mode === \"session\" ? React.use(source.acceptLanguage) : undefined;\n const isPublic = source?.mode === \"public\";\n const locale = source?.mode === \"session\" ? resolveDateLocale({ appLocale, acceptLanguage }) : appLocale;\n\n return React.useMemo(() => ({ locale, isPublic }), [locale, isPublic]);\n}\n\nexport type DateFormatter = DateLocale & {\n format(date: Date | string | undefined, style: DateFormatStyle, options?: { timeZone?: string }): string;\n relative(date: Date | string, options: { now: Date }): string;\n twelveHourClock: boolean;\n};\n\nexport function useDateFormatter(): DateFormatter {\n const { locale, isPublic } = useDateLocale();\n\n return React.useMemo<DateFormatter>(\n () => ({\n locale,\n isPublic,\n format: (date, style, options) => formatDateStyle({ date, style, locale, timeZone: options?.timeZone, isPublic }),\n relative: (date, options) => formatRelativeDate({ date, locale, now: options.now }),\n twelveHourClock: usesTwelveHourClock(locale),\n }),\n [locale, isPublic],\n );\n}\n\n/** undefined on the server render and the first client render; the current time after mount (set in useEffect). */\nexport function useMountedNow(): Date | undefined {\n const [now, setNow] = React.useState<Date | undefined>(undefined);\n React.useEffect(() => {\n setNow(new Date());\n }, []);\n return now;\n}\n","/**\n * Derives a native Promise from a thenable.\n *\n * A promise passed from a Server Component to a Client Component arrives as\n * React's deserialised chunk. It inherits from Promise.prototype, but its\n * `then()` only registers callbacks and returns undefined, so\n * `session.then(fn)` yields undefined and `Promise.resolve(session)` hands the\n * same chunk back. Wrapping it in `new Promise` adopts it and gives a real\n * promise to chain, store in context or pass to `use()`.\n */\nexport function mapThenable<T, R>(thenable: PromiseLike<T>, map: (value: T) => R): Promise<R> {\n return new Promise<R>((resolve, reject) => {\n thenable.then((value) => resolve(map(value)), reject);\n });\n}\n"],"mappings":";;;;;;;;;;;;;;AAEA,YAAY,WAAW;;;ACQhB,SAAS,YAAkB,UAA0B,KAAkC;AAC5F,SAAO,IAAI,QAAW,CAAC,SAAS,WAAW;AACzC,aAAS,KAAK,CAAC,UAAU,QAAQ,IAAI,KAAK,CAAC,GAAG,MAAM;AAAA,EACtD,CAAC;AACH;AAJgB;;;ADoCP;AAjBT,IAAM,oBAA0B,oBAAuC,IAAI;AAEpE,SAAS,mBACd,OAGA;AACA,QAAM,EAAE,SAAS,SAAS,IAAI;AAC9B,QAAM,QAAc;AAAA,IAClB,MACE,MAAM,SAAS,YAAY,CAAC,UACxB,EAAE,MAAM,SAAS,IACjB,EAAE,MAAM,WAAW,gBAAgB,YAAY,SAAS,CAAC,aAAa,SAAS,cAAc,EAAE;AAAA;AAAA,IAErG,CAAC;AAAA,EACH;AAEA,SAAO,oBAAC,kBAAkB,UAAlB,EAA2B,OAAe,UAAS;AAC7D;AAhBgB;AAmBT,SAAS,sBAA+C;AAC7D,SAAa,iBAAW,iBAAiB;AAC3C;AAFgB;AAIT,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AACF,GAGG;AACD,SAAO,oBAAC,kBAAkB,UAAlB,EAA2B,OAAe,UAAS;AAC7D;AARgB;AAaT,SAAS,gBAA4B;AAC1C,QAAM,SAAe,iBAAW,iBAAiB;AACjD,QAAM,YAAY,cAAc;AAChC,QAAM,iBAAiB,QAAQ,SAAS,YAAkB,UAAI,OAAO,cAAc,IAAI;AACvF,QAAM,WAAW,QAAQ,SAAS;AAClC,QAAM,SAAS,QAAQ,SAAS,YAAY,kBAAkB,EAAE,WAAW,eAAe,CAAC,IAAI;AAE/F,SAAa,cAAQ,OAAO,EAAE,QAAQ,SAAS,IAAI,CAAC,QAAQ,QAAQ,CAAC;AACvE;AARgB;AAgBT,SAAS,mBAAkC;AAChD,QAAM,EAAE,QAAQ,SAAS,IAAI,cAAc;AAE3C,SAAa;AAAA,IACX,OAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ,wBAAC,MAAM,OAAO,YAAY,gBAAgB,EAAE,MAAM,OAAO,QAAQ,UAAU,SAAS,UAAU,SAAS,CAAC,GAAxG;AAAA,MACR,UAAU,wBAAC,MAAM,YAAY,mBAAmB,EAAE,MAAM,QAAQ,KAAK,QAAQ,IAAI,CAAC,GAAxE;AAAA,MACV,iBAAiB,oBAAoB,MAAM;AAAA,IAC7C;AAAA,IACA,CAAC,QAAQ,QAAQ;AAAA,EACnB;AACF;AAbgB;AAgBT,SAAS,gBAAkC;AAChD,QAAM,CAAC,KAAK,MAAM,IAAU,eAA2B,MAAS;AAChE,EAAM,gBAAU,MAAM;AACpB,WAAO,oBAAI,KAAK,CAAC;AAAA,EACnB,GAAG,CAAC,CAAC;AACL,SAAO;AACT;AANgB;","names":[]}
@@ -21,7 +21,7 @@ async function directFetch(params) {
21
21
  return answerLocally(params);
22
22
  }
23
23
  if (offline && response.ok && params.method.toUpperCase() !== "GET") {
24
- const { writeThrough } = await Promise.resolve().then(() => _interopRequireWildcard(require("./write-through-HE2QSOVI.js")));
24
+ const { writeThrough } = await Promise.resolve().then(() => _interopRequireWildcard(require("./write-through-MYHQ6GJU.js")));
25
25
  await writeThrough({ method: params.method, url: params.url }, response);
26
26
  }
27
27
  return response;
@@ -33,7 +33,7 @@ function hasReplayHeader(headers) {
33
33
  }
34
34
  _chunk7QVYU63Ejs.__name.call(void 0, hasReplayHeader, "hasReplayHeader");
35
35
  async function answerLocally(params) {
36
- const { localTransport } = await Promise.resolve().then(() => _interopRequireWildcard(require("./local-transport-MJPOKPTU.js")));
36
+ const { localTransport } = await Promise.resolve().then(() => _interopRequireWildcard(require("./local-transport-AT4TE264.js")));
37
37
  return localTransport({ method: params.method, url: params.url, body: params.body, files: params.files });
38
38
  }
39
39
  _chunk7QVYU63Ejs.__name.call(void 0, answerLocally, "answerLocally");
@@ -113,4 +113,4 @@ _chunk7QVYU63Ejs.__name.call(void 0, fetchFromApi, "fetchFromApi");
113
113
 
114
114
 
115
115
  exports.directFetch = directFetch;
116
- //# sourceMappingURL=chunk-A5M3MORY.js.map
116
+ //# sourceMappingURL=chunk-5WM72MLE.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-A5M3MORY.js","../src/client/request.ts"],"names":[],"mappings":"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","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-A5M3MORY.js","sourcesContent":[null,"\"use client\";\n\nimport { ApiData } from \"../core/interfaces/ApiData\";\nimport { isOfflineConfigured } from \"../offline/config\";\nimport { getOfflineState, reachesNetworkWhileOffline, setOfflineState } from \"../offline/state\";\nimport { OFFLINE_REPLAY_HEADER } from \"../offline/types\";\n\nexport interface DirectFetchParams {\n method: string;\n url: string;\n token?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n companyId?: string;\n language: string;\n additionalHeaders?: Record<string, string>;\n /**\n * Optional `fetch` credentials mode (e.g. \"include\" so the browser stores a cookie the API sets).\n * Omitted => no `credentials` option is passed, unchanged behaviour.\n */\n credentials?: RequestCredentials;\n}\n\n/**\n * Client-side direct fetch to bypass server action overhead.\n * Use this for client-side API calls.\n */\nexport async function directFetch(params: DirectFetchParams): Promise<ApiData> {\n // Offline mode is opt-in (`configureOffline`). Without it nothing below loads or runs. A request\n // the server runs as an offline replay always goes to the network, and so do the reads and the\n // change-set request of a reconnect attempt (the session stays offline until its sync succeeds).\n const offline = isOfflineConfigured() && !hasReplayHeader(params.additionalHeaders);\n if (offline && !getOfflineState().online && !reachesNetworkWhileOffline(params.method, params.url)) {\n return answerLocally(params);\n }\n\n const response = await fetchFromApi(params);\n\n if (offline && response.networkError) {\n setOfflineState({ online: false });\n return answerLocally(params);\n }\n if (offline && response.ok && params.method.toUpperCase() !== \"GET\") {\n const { writeThrough } = await import(\"../offline/write-through\");\n await writeThrough({ method: params.method, url: params.url }, response);\n }\n\n return response;\n}\n\nfunction hasReplayHeader(headers?: Record<string, string>): boolean {\n if (!headers) return false;\n return Object.keys(headers).some((key) => key.toLowerCase() === OFFLINE_REPLAY_HEADER);\n}\n\nasync function answerLocally(params: DirectFetchParams): Promise<ApiData> {\n const { localTransport } = await import(\"../offline/local-transport\");\n return localTransport({ method: params.method, url: params.url, body: params.body, files: params.files });\n}\n\nasync function fetchFromApi(params: DirectFetchParams): Promise<ApiData> {\n const response: ApiData = {\n data: undefined,\n ok: false,\n status: 0,\n statusText: \"\",\n };\n\n const additionalHeaders: Record<string, string> = { ...params.additionalHeaders };\n\n if (params.companyId) {\n additionalHeaders[\"x-companyid\"] = params.companyId;\n }\n additionalHeaders[\"x-language\"] = params.language;\n\n let requestBody: BodyInit | undefined = undefined;\n\n if (params.files) {\n const formData = new FormData();\n if (params.body && typeof params.body === \"object\") {\n for (const key in params.body) {\n if (Object.prototype.hasOwnProperty.call(params.body, key)) {\n formData.append(\n key,\n typeof params.body[key] === \"object\" ? JSON.stringify(params.body[key]) : params.body[key],\n );\n }\n }\n }\n\n if (params.files instanceof Blob) {\n formData.append(\"file\", params.files);\n } else if (typeof params.files === \"object\" && params.files !== null) {\n for (const key in params.files) {\n if (Object.prototype.hasOwnProperty.call(params.files, key)) {\n formData.append(key, params.files[key]);\n }\n }\n }\n\n requestBody = formData;\n } else if (params.body !== undefined) {\n requestBody = JSON.stringify(params.body);\n additionalHeaders[\"Content-Type\"] = \"application/json\";\n }\n\n const options: RequestInit = {\n method: params.method,\n headers: { Accept: \"application/json\", ...additionalHeaders },\n };\n\n if (requestBody !== undefined) {\n options.body = requestBody;\n }\n\n if (params.credentials) {\n options.credentials = params.credentials;\n }\n\n if (params.token) {\n options.headers = { ...options.headers, Authorization: `Bearer ${params.token}` };\n }\n\n try {\n const apiResponse = await fetch(params.url, options);\n\n response.ok = apiResponse.ok;\n response.status = apiResponse.status;\n response.statusText = apiResponse.statusText;\n try {\n response.data = await apiResponse.json();\n } catch {\n response.data = undefined;\n }\n } catch {\n // fetch() only throws when the API could not be reached at all (server\n // down, DNS, connection refused). Report it as 503 so consumers can tell\n // \"API unreachable\" apart from a 500 the API actually returned.\n response.ok = false;\n response.status = 503;\n response.statusText = \"Service Unavailable\";\n response.data = undefined;\n response.networkError = true;\n }\n\n return response;\n}\n"]}
1
+ {"version":3,"sources":["/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-5WM72MLE.js","../src/client/request.ts"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACA;ACgBA,MAAA,SAAsB,WAAA,CAAY,MAAA,EAA6C;AAI7E,EAAA,MAAM,QAAA,EAAU,kDAAA,EAAoB,GAAK,CAAC,eAAA,CAAgB,MAAA,CAAO,iBAAiB,CAAA;AAClF,EAAA,GAAA,CAAI,QAAA,GAAW,CAAC,8CAAA,CAAgB,CAAE,OAAA,GAAU,CAAC,yDAAA,MAA2B,CAAO,MAAA,EAAQ,MAAA,CAAO,GAAG,CAAA,EAAG;AAClG,IAAA,OAAO,aAAA,CAAc,MAAM,CAAA;AAAA,EAC7B;AAEA,EAAA,MAAM,SAAA,EAAW,MAAM,YAAA,CAAa,MAAM,CAAA;AAE1C,EAAA,GAAA,CAAI,QAAA,GAAW,QAAA,CAAS,YAAA,EAAc;AACpC,IAAA,8CAAA,EAAkB,MAAA,EAAQ,MAAM,CAAC,CAAA;AACjC,IAAA,OAAO,aAAA,CAAc,MAAM,CAAA;AAAA,EAC7B;AACA,EAAA,GAAA,CAAI,QAAA,GAAW,QAAA,CAAS,GAAA,GAAM,MAAA,CAAO,MAAA,CAAO,WAAA,CAAY,EAAA,IAAM,KAAA,EAAO;AACnE,IAAA,MAAM,EAAE,aAAa,EAAA,EAAI,MAAM,4DAAA,CAAO,6BAA0B,GAAA;AAChE,IAAA,MAAM,YAAA,CAAa,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,GAAA,EAAK,MAAA,CAAO,IAAI,CAAA,EAAG,QAAQ,CAAA;AAAA,EACzE;AAEA,EAAA,OAAO,QAAA;AACT;AArBsB,qCAAA,WAAA,EAAA,aAAA,CAAA;AAuBtB,SAAS,eAAA,CAAgB,OAAA,EAA2C;AAClE,EAAA,GAAA,CAAI,CAAC,OAAA,EAAS,OAAO,KAAA;AACrB,EAAA,OAAO,MAAA,CAAO,IAAA,CAAK,OAAO,CAAA,CAAE,IAAA,CAAK,CAAC,GAAA,EAAA,GAAQ,GAAA,CAAI,WAAA,CAAY,EAAA,IAAM,sCAAqB,CAAA;AACvF;AAHS,qCAAA,eAAA,EAAA,iBAAA,CAAA;AAKT,MAAA,SAAe,aAAA,CAAc,MAAA,EAA6C;AACxE,EAAA,MAAM,EAAE,eAAe,EAAA,EAAI,MAAM,4DAAA,CAAO,+BAA4B,GAAA;AACpE,EAAA,OAAO,cAAA,CAAe,EAAE,MAAA,EAAQ,MAAA,CAAO,MAAA,EAAQ,GAAA,EAAK,MAAA,CAAO,GAAA,EAAK,IAAA,EAAM,MAAA,CAAO,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,MAAM,CAAC,CAAA;AAC1G;AAHe,qCAAA,aAAA,EAAA,eAAA,CAAA;AAKf,MAAA,SAAe,YAAA,CAAa,MAAA,EAA6C;AACvE,EAAA,MAAM,SAAA,EAAoB;AAAA,IACxB,IAAA,EAAM,KAAA,CAAA;AAAA,IACN,EAAA,EAAI,KAAA;AAAA,IACJ,MAAA,EAAQ,CAAA;AAAA,IACR,UAAA,EAAY;AAAA,EACd,CAAA;AAEA,EAAA,MAAM,kBAAA,EAA4C,EAAE,GAAG,MAAA,CAAO,kBAAkB,CAAA;AAEhF,EAAA,GAAA,CAAI,MAAA,CAAO,SAAA,EAAW;AACpB,IAAA,iBAAA,CAAkB,aAAa,EAAA,EAAI,MAAA,CAAO,SAAA;AAAA,EAC5C;AACA,EAAA,iBAAA,CAAkB,YAAY,EAAA,EAAI,MAAA,CAAO,QAAA;AAEzC,EAAA,IAAI,YAAA,EAAoC,KAAA,CAAA;AAExC,EAAA,GAAA,CAAI,MAAA,CAAO,KAAA,EAAO;AAChB,IAAA,MAAM,SAAA,EAAW,IAAI,QAAA,CAAS,CAAA;AAC9B,IAAA,GAAA,CAAI,MAAA,CAAO,KAAA,GAAQ,OAAO,MAAA,CAAO,KAAA,IAAS,QAAA,EAAU;AAClD,MAAA,IAAA,CAAA,MAAW,IAAA,GAAO,MAAA,CAAO,IAAA,EAAM;AAC7B,QAAA,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,GAAG,CAAA,EAAG;AAC1D,UAAA,QAAA,CAAS,MAAA;AAAA,YACP,GAAA;AAAA,YACA,OAAO,MAAA,CAAO,IAAA,CAAK,GAAG,EAAA,IAAM,SAAA,EAAW,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAA,CAAK,GAAG,CAAC,EAAA,EAAI,MAAA,CAAO,IAAA,CAAK,GAAG;AAAA,UAC3F,CAAA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,IAAA,GAAA,CAAI,MAAA,CAAO,MAAA,WAAiB,IAAA,EAAM;AAChC,MAAA,QAAA,CAAS,MAAA,CAAO,MAAA,EAAQ,MAAA,CAAO,KAAK,CAAA;AAAA,IACtC,EAAA,KAAA,GAAA,CAAW,OAAO,MAAA,CAAO,MAAA,IAAU,SAAA,GAAY,MAAA,CAAO,MAAA,IAAU,IAAA,EAAM;AACpE,MAAA,IAAA,CAAA,MAAW,IAAA,GAAO,MAAA,CAAO,KAAA,EAAO;AAC9B,QAAA,GAAA,CAAI,MAAA,CAAO,SAAA,CAAU,cAAA,CAAe,IAAA,CAAK,MAAA,CAAO,KAAA,EAAO,GAAG,CAAA,EAAG;AAC3D,UAAA,QAAA,CAAS,MAAA,CAAO,GAAA,EAAK,MAAA,CAAO,KAAA,CAAM,GAAG,CAAC,CAAA;AAAA,QACxC;AAAA,MACF;AAAA,IACF;AAEA,IAAA,YAAA,EAAc,QAAA;AAAA,EAChB,EAAA,KAAA,GAAA,CAAW,MAAA,CAAO,KAAA,IAAS,KAAA,CAAA,EAAW;AACpC,IAAA,YAAA,EAAc,IAAA,CAAK,SAAA,CAAU,MAAA,CAAO,IAAI,CAAA;AACxC,IAAA,iBAAA,CAAkB,cAAc,EAAA,EAAI,kBAAA;AAAA,EACtC;AAEA,EAAA,MAAM,QAAA,EAAuB;AAAA,IAC3B,MAAA,EAAQ,MAAA,CAAO,MAAA;AAAA,IACf,OAAA,EAAS,EAAE,MAAA,EAAQ,kBAAA,EAAoB,GAAG,kBAAkB;AAAA,EAC9D,CAAA;AAEA,EAAA,GAAA,CAAI,YAAA,IAAgB,KAAA,CAAA,EAAW;AAC7B,IAAA,OAAA,CAAQ,KAAA,EAAO,WAAA;AAAA,EACjB;AAEA,EAAA,GAAA,CAAI,MAAA,CAAO,WAAA,EAAa;AACtB,IAAA,OAAA,CAAQ,YAAA,EAAc,MAAA,CAAO,WAAA;AAAA,EAC/B;AAEA,EAAA,GAAA,CAAI,MAAA,CAAO,KAAA,EAAO;AAChB,IAAA,OAAA,CAAQ,QAAA,EAAU,EAAE,GAAG,OAAA,CAAQ,OAAA,EAAS,aAAA,EAAe,CAAA,OAAA,EAAU,MAAA,CAAO,KAAK,CAAA,EAAA;AAC/E,EAAA;AAEI,EAAA;AACiD,IAAA;AAEzB,IAAA;AACI,IAAA;AACI,IAAA;AAC9B,IAAA;AACqC,MAAA;AACjC,IAAA;AACU,MAAA;AAClB,IAAA;AACM,EAAA;AAIQ,IAAA;AACI,IAAA;AACI,IAAA;AACN,IAAA;AACQ,IAAA;AAC1B,EAAA;AAEO,EAAA;AACT;AAtFe;ADmDmE;AACA;AACA;AACA","file":"/home/runner/work/nextjs-jsonapi/nextjs-jsonapi/dist/chunk-5WM72MLE.js","sourcesContent":[null,"\"use client\";\n\nimport { ApiData } from \"../core/interfaces/ApiData\";\nimport { isOfflineConfigured } from \"../offline/config\";\nimport { getOfflineState, reachesNetworkWhileOffline, setOfflineState } from \"../offline/state\";\nimport { OFFLINE_REPLAY_HEADER } from \"../offline/types\";\n\nexport interface DirectFetchParams {\n method: string;\n url: string;\n token?: string;\n body?: any;\n files?: { [key: string]: File | Blob } | File | Blob;\n companyId?: string;\n language: string;\n additionalHeaders?: Record<string, string>;\n /**\n * Optional `fetch` credentials mode (e.g. \"include\" so the browser stores a cookie the API sets).\n * Omitted => no `credentials` option is passed, unchanged behaviour.\n */\n credentials?: RequestCredentials;\n}\n\n/**\n * Client-side direct fetch to bypass server action overhead.\n * Use this for client-side API calls.\n */\nexport async function directFetch(params: DirectFetchParams): Promise<ApiData> {\n // Offline mode is opt-in (`configureOffline`). Without it nothing below loads or runs. A request\n // the server runs as an offline replay always goes to the network, and so do the reads and the\n // change-set request of a reconnect attempt (the session stays offline until its sync succeeds).\n const offline = isOfflineConfigured() && !hasReplayHeader(params.additionalHeaders);\n if (offline && !getOfflineState().online && !reachesNetworkWhileOffline(params.method, params.url)) {\n return answerLocally(params);\n }\n\n const response = await fetchFromApi(params);\n\n if (offline && response.networkError) {\n setOfflineState({ online: false });\n return answerLocally(params);\n }\n if (offline && response.ok && params.method.toUpperCase() !== \"GET\") {\n const { writeThrough } = await import(\"../offline/write-through\");\n await writeThrough({ method: params.method, url: params.url }, response);\n }\n\n return response;\n}\n\nfunction hasReplayHeader(headers?: Record<string, string>): boolean {\n if (!headers) return false;\n return Object.keys(headers).some((key) => key.toLowerCase() === OFFLINE_REPLAY_HEADER);\n}\n\nasync function answerLocally(params: DirectFetchParams): Promise<ApiData> {\n const { localTransport } = await import(\"../offline/local-transport\");\n return localTransport({ method: params.method, url: params.url, body: params.body, files: params.files });\n}\n\nasync function fetchFromApi(params: DirectFetchParams): Promise<ApiData> {\n const response: ApiData = {\n data: undefined,\n ok: false,\n status: 0,\n statusText: \"\",\n };\n\n const additionalHeaders: Record<string, string> = { ...params.additionalHeaders };\n\n if (params.companyId) {\n additionalHeaders[\"x-companyid\"] = params.companyId;\n }\n additionalHeaders[\"x-language\"] = params.language;\n\n let requestBody: BodyInit | undefined = undefined;\n\n if (params.files) {\n const formData = new FormData();\n if (params.body && typeof params.body === \"object\") {\n for (const key in params.body) {\n if (Object.prototype.hasOwnProperty.call(params.body, key)) {\n formData.append(\n key,\n typeof params.body[key] === \"object\" ? JSON.stringify(params.body[key]) : params.body[key],\n );\n }\n }\n }\n\n if (params.files instanceof Blob) {\n formData.append(\"file\", params.files);\n } else if (typeof params.files === \"object\" && params.files !== null) {\n for (const key in params.files) {\n if (Object.prototype.hasOwnProperty.call(params.files, key)) {\n formData.append(key, params.files[key]);\n }\n }\n }\n\n requestBody = formData;\n } else if (params.body !== undefined) {\n requestBody = JSON.stringify(params.body);\n additionalHeaders[\"Content-Type\"] = \"application/json\";\n }\n\n const options: RequestInit = {\n method: params.method,\n headers: { Accept: \"application/json\", ...additionalHeaders },\n };\n\n if (requestBody !== undefined) {\n options.body = requestBody;\n }\n\n if (params.credentials) {\n options.credentials = params.credentials;\n }\n\n if (params.token) {\n options.headers = { ...options.headers, Authorization: `Bearer ${params.token}` };\n }\n\n try {\n const apiResponse = await fetch(params.url, options);\n\n response.ok = apiResponse.ok;\n response.status = apiResponse.status;\n response.statusText = apiResponse.statusText;\n try {\n response.data = await apiResponse.json();\n } catch {\n response.data = undefined;\n }\n } catch {\n // fetch() only throws when the API could not be reached at all (server\n // down, DNS, connection refused). Report it as 503 so consumers can tell\n // \"API unreachable\" apart from a 500 the API actually returned.\n response.ok = false;\n response.status = 503;\n response.statusText = \"Service Unavailable\";\n response.data = undefined;\n response.networkError = true;\n }\n\n return response;\n}\n"]}
@@ -21,7 +21,7 @@ async function directFetch(params) {
21
21
  return answerLocally(params);
22
22
  }
23
23
  if (offline && response.ok && params.method.toUpperCase() !== "GET") {
24
- const { writeThrough } = await import("./write-through-7I3LA2WN.mjs");
24
+ const { writeThrough } = await import("./write-through-KNRI5L4V.mjs");
25
25
  await writeThrough({ method: params.method, url: params.url }, response);
26
26
  }
27
27
  return response;
@@ -33,7 +33,7 @@ function hasReplayHeader(headers) {
33
33
  }
34
34
  __name(hasReplayHeader, "hasReplayHeader");
35
35
  async function answerLocally(params) {
36
- const { localTransport } = await import("./local-transport-RVD4FZGA.mjs");
36
+ const { localTransport } = await import("./local-transport-KWEUZ4GX.mjs");
37
37
  return localTransport({ method: params.method, url: params.url, body: params.body, files: params.files });
38
38
  }
39
39
  __name(answerLocally, "answerLocally");
@@ -113,4 +113,4 @@ __name(fetchFromApi, "fetchFromApi");
113
113
  export {
114
114
  directFetch
115
115
  };
116
- //# sourceMappingURL=chunk-S7SPAC6X.mjs.map
116
+ //# sourceMappingURL=chunk-73NKUBMP.mjs.map
@@ -0,0 +1,76 @@
1
+ import {
2
+ __name
3
+ } from "./chunk-PAWJFY3S.mjs";
4
+
5
+ // src/i18n/config.ts
6
+ var _config = null;
7
+ function configureI18n(config) {
8
+ _config = config;
9
+ }
10
+ __name(configureI18n, "configureI18n");
11
+ function useI18nRouter() {
12
+ if (!_config?.useRouter) {
13
+ throw new Error("i18n not configured. Call configureI18n() at app startup.");
14
+ }
15
+ return _config.useRouter();
16
+ }
17
+ __name(useI18nRouter, "useI18nRouter");
18
+ function useI18nTranslations(namespace) {
19
+ if (!_config?.useTranslations) {
20
+ return (key) => key;
21
+ }
22
+ return _config.useTranslations(namespace);
23
+ }
24
+ __name(useI18nTranslations, "useI18nTranslations");
25
+ function getI18nLink() {
26
+ if (!_config?.Link) {
27
+ throw new Error("i18n not configured. Call configureI18n() at app startup.");
28
+ }
29
+ return _config.Link;
30
+ }
31
+ __name(getI18nLink, "getI18nLink");
32
+ function useI18nLocale() {
33
+ if (_config?.useLocale) {
34
+ return _config.useLocale();
35
+ }
36
+ return "en";
37
+ }
38
+ __name(useI18nLocale, "useI18nLocale");
39
+ async function getI18nServerLocale() {
40
+ if (!_config?.getLocale) {
41
+ throw new Error("i18n not configured. Call configureI18n() with getLocale at app startup.");
42
+ }
43
+ return _config.getLocale();
44
+ }
45
+ __name(getI18nServerLocale, "getI18nServerLocale");
46
+ function useI18nDateFnsLocale() {
47
+ if (_config?.useDateFnsLocale) {
48
+ return _config.useDateFnsLocale();
49
+ }
50
+ return void 0;
51
+ }
52
+ __name(useI18nDateFnsLocale, "useI18nDateFnsLocale");
53
+ function getI18nSupportedLocales() {
54
+ if (_config?.supportedLocales && _config.supportedLocales.length > 0) {
55
+ return _config.supportedLocales;
56
+ }
57
+ return ["en"];
58
+ }
59
+ __name(getI18nSupportedLocales, "getI18nSupportedLocales");
60
+ function getI18nDefaultLocale() {
61
+ return getI18nSupportedLocales()[0];
62
+ }
63
+ __name(getI18nDefaultLocale, "getI18nDefaultLocale");
64
+
65
+ export {
66
+ configureI18n,
67
+ useI18nRouter,
68
+ useI18nTranslations,
69
+ getI18nLink,
70
+ useI18nLocale,
71
+ getI18nServerLocale,
72
+ useI18nDateFnsLocale,
73
+ getI18nSupportedLocales,
74
+ getI18nDefaultLocale
75
+ };
76
+ //# sourceMappingURL=chunk-743M4TIB.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/i18n/config.ts"],"sourcesContent":["import { ComponentType } from \"react\";\n\n// Types for injected hooks\nexport interface I18nRouter {\n push: (href: string) => void;\n replace: (href: string) => void;\n back: () => void;\n forward: () => void;\n refresh: () => void;\n prefetch: (href: string) => void;\n}\n\nexport type UseRouterHook = () => I18nRouter;\nexport type UseTranslationsHook = (namespace?: string) => (key: string, values?: Record<string, any>) => string;\nexport type UseLocaleHook = () => string;\nexport type GetLocaleFunction = () => Promise<string>;\n\nexport type UseDateFnsLocaleHook = () => any; // date-fns Locale type\nexport type LinkComponent = ComponentType<{ href: string; children: React.ReactNode; [key: string]: any }>;\n\nexport interface I18nConfig {\n useRouter: UseRouterHook;\n useTranslations: UseTranslationsHook;\n useLocale?: UseLocaleHook;\n useDateFnsLocale?: UseDateFnsLocaleHook;\n Link: LinkComponent;\n usePathname: () => string;\n /**\n * Server-side locale for API requests (pass next-intl's `getLocale` from `next-intl/server`).\n *\n * The library never imports next-intl itself: instrumentation loads the library, and\n * next-intl's `getLocale` pulls in the app's `i18n/request.ts`, which reads\n * `next/root-params` — a module only allowed inside the app directory.\n */\n getLocale: GetLocaleFunction;\n /**\n * Locales the app supports. The first entry is the fallback.\n * Defaults to `[\"en\"]` when omitted.\n */\n supportedLocales?: string[];\n}\n\n// Private storage\nlet _config: I18nConfig | null = null;\n\n// Configuration function (called by app at startup)\nexport function configureI18n(config: I18nConfig): void {\n _config = config;\n}\n\n// Hooks for library components to use\nexport function useI18nRouter(): I18nRouter {\n if (!_config?.useRouter) {\n throw new Error(\"i18n not configured. Call configureI18n() at app startup.\");\n }\n return _config.useRouter();\n}\n\nexport function useI18nTranslations(namespace?: string): (key: string, values?: Record<string, any>) => string {\n if (!_config?.useTranslations) {\n // Fallback: return key as-is (safe for server/client)\n return (key: string) => key;\n }\n return _config.useTranslations(namespace);\n}\n\nexport function getI18nLink(): LinkComponent {\n if (!_config?.Link) {\n throw new Error(\"i18n not configured. Call configureI18n() at app startup.\");\n }\n return _config.Link;\n}\n\nexport function useI18nLocale(): string {\n if (_config?.useLocale) {\n return _config.useLocale();\n }\n // Fallback to English (safe for server/client)\n return \"en\";\n}\n\n/** The server-side locale from the app's `getLocale`. Throws when `configureI18n` has not run. */\nexport async function getI18nServerLocale(): Promise<string> {\n if (!_config?.getLocale) {\n throw new Error(\"i18n not configured. Call configureI18n() with getLocale at app startup.\");\n }\n return _config.getLocale();\n}\n\nexport function useI18nDateFnsLocale(): any {\n if (_config?.useDateFnsLocale) {\n return _config.useDateFnsLocale();\n }\n // Fallback to undefined (Calendar will use default)\n return undefined;\n}\n\n/** The app's supported locales. Defaults to `[\"en\"]` when not configured. */\nexport function getI18nSupportedLocales(): string[] {\n if (_config?.supportedLocales && _config.supportedLocales.length > 0) {\n return _config.supportedLocales;\n }\n return [\"en\"];\n}\n\n/** The app's default locale: the first supported locale (`\"en\"` when not configured). */\nexport function getI18nDefaultLocale(): string {\n return getI18nSupportedLocales()[0];\n}\n"],"mappings":";;;;;AA2CA,IAAI,UAA6B;AAG1B,SAAS,cAAc,QAA0B;AACtD,YAAU;AACZ;AAFgB;AAKT,SAAS,gBAA4B;AAC1C,MAAI,CAAC,SAAS,WAAW;AACvB,UAAM,IAAI,MAAM,2DAA2D;AAAA,EAC7E;AACA,SAAO,QAAQ,UAAU;AAC3B;AALgB;AAOT,SAAS,oBAAoB,WAA2E;AAC7G,MAAI,CAAC,SAAS,iBAAiB;AAE7B,WAAO,CAAC,QAAgB;AAAA,EAC1B;AACA,SAAO,QAAQ,gBAAgB,SAAS;AAC1C;AANgB;AAQT,SAAS,cAA6B;AAC3C,MAAI,CAAC,SAAS,MAAM;AAClB,UAAM,IAAI,MAAM,2DAA2D;AAAA,EAC7E;AACA,SAAO,QAAQ;AACjB;AALgB;AAOT,SAAS,gBAAwB;AACtC,MAAI,SAAS,WAAW;AACtB,WAAO,QAAQ,UAAU;AAAA,EAC3B;AAEA,SAAO;AACT;AANgB;AAShB,eAAsB,sBAAuC;AAC3D,MAAI,CAAC,SAAS,WAAW;AACvB,UAAM,IAAI,MAAM,0EAA0E;AAAA,EAC5F;AACA,SAAO,QAAQ,UAAU;AAC3B;AALsB;AAOf,SAAS,uBAA4B;AAC1C,MAAI,SAAS,kBAAkB;AAC7B,WAAO,QAAQ,iBAAiB;AAAA,EAClC;AAEA,SAAO;AACT;AANgB;AAST,SAAS,0BAAoC;AAClD,MAAI,SAAS,oBAAoB,QAAQ,iBAAiB,SAAS,GAAG;AACpE,WAAO,QAAQ;AAAA,EACjB;AACA,SAAO,CAAC,IAAI;AACd;AALgB;AAQT,SAAS,uBAA+B;AAC7C,SAAO,wBAAwB,EAAE,CAAC;AACpC;AAFgB;","names":[]}