@ryuzaki13/react-foundation-lib 0.1.1

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 (570) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +654 -0
  3. package/dist/array/array.d.ts +30 -0
  4. package/dist/array/array.d.ts.map +1 -0
  5. package/dist/array/index.d.ts +3 -0
  6. package/dist/array/index.d.ts.map +1 -0
  7. package/dist/array/index.js +2 -0
  8. package/dist/array/reorder.d.ts +10 -0
  9. package/dist/array/reorder.d.ts.map +1 -0
  10. package/dist/auth/getClientFingerprint.d.ts +2 -0
  11. package/dist/auth/getClientFingerprint.d.ts.map +1 -0
  12. package/dist/binary/binaryToBlob.d.ts +13 -0
  13. package/dist/binary/binaryToBlob.d.ts.map +1 -0
  14. package/dist/binary/index.d.ts +3 -0
  15. package/dist/binary/index.d.ts.map +1 -0
  16. package/dist/binary/index.js +126 -0
  17. package/dist/binary/index.js.map +1 -0
  18. package/dist/binary/useBinaryFile.d.ts +8 -0
  19. package/dist/binary/useBinaryFile.d.ts.map +1 -0
  20. package/dist/bounded-copy-stack/boundedCopyStack.d.ts +26 -0
  21. package/dist/bounded-copy-stack/boundedCopyStack.d.ts.map +1 -0
  22. package/dist/bounded-copy-stack/index.d.ts +2 -0
  23. package/dist/bounded-copy-stack/index.d.ts.map +1 -0
  24. package/dist/bounded-copy-stack/index.js +26 -0
  25. package/dist/bounded-copy-stack/index.js.map +1 -0
  26. package/dist/chunks/array-BBSjoTRy.js +146 -0
  27. package/dist/chunks/array-BBSjoTRy.js.map +1 -0
  28. package/dist/chunks/dateUtils-D9dpdTl7.js +760 -0
  29. package/dist/chunks/dateUtils-D9dpdTl7.js.map +1 -0
  30. package/dist/chunks/formatters-CQppb89D.js +1234 -0
  31. package/dist/chunks/formatters-CQppb89D.js.map +1 -0
  32. package/dist/chunks/formulas-BxcH5Zjt.js +279 -0
  33. package/dist/chunks/formulas-BxcH5Zjt.js.map +1 -0
  34. package/dist/chunks/isRecord-DXDTW-jA.js +18 -0
  35. package/dist/chunks/isRecord-DXDTW-jA.js.map +1 -0
  36. package/dist/chunks/odata-service-BAYf08WI.js +1223 -0
  37. package/dist/chunks/odata-service-BAYf08WI.js.map +1 -0
  38. package/dist/chunks/string-comparison-BKT7PXmq.js +20 -0
  39. package/dist/chunks/string-comparison-BKT7PXmq.js.map +1 -0
  40. package/dist/chunks/validate-BChpTW6y.js +468 -0
  41. package/dist/chunks/validate-BChpTW6y.js.map +1 -0
  42. package/dist/context-menu/anchor.d.ts +19 -0
  43. package/dist/context-menu/anchor.d.ts.map +1 -0
  44. package/dist/context-menu/index.d.ts +4 -0
  45. package/dist/context-menu/index.d.ts.map +1 -0
  46. package/dist/context-menu/index.js +57 -0
  47. package/dist/context-menu/index.js.map +1 -0
  48. package/dist/context-menu/state.d.ts +6 -0
  49. package/dist/context-menu/state.d.ts.map +1 -0
  50. package/dist/context-menu/types.d.ts +25 -0
  51. package/dist/context-menu/types.d.ts.map +1 -0
  52. package/dist/copy/index.d.ts +5 -0
  53. package/dist/copy/index.d.ts.map +1 -0
  54. package/dist/copy/index.js +56 -0
  55. package/dist/copy/index.js.map +1 -0
  56. package/dist/copy/useCopyElementText.d.ts +6 -0
  57. package/dist/copy/useCopyElementText.d.ts.map +1 -0
  58. package/dist/copy/useCopyFeedback.d.ts +11 -0
  59. package/dist/copy/useCopyFeedback.d.ts.map +1 -0
  60. package/dist/copy/useCopyText.d.ts +4 -0
  61. package/dist/copy/useCopyText.d.ts.map +1 -0
  62. package/dist/copy/useElementText.d.ts +5 -0
  63. package/dist/copy/useElementText.d.ts.map +1 -0
  64. package/dist/crypto/hashString.d.ts +5 -0
  65. package/dist/crypto/hashString.d.ts.map +1 -0
  66. package/dist/crypto/index.d.ts +3 -0
  67. package/dist/crypto/index.d.ts.map +1 -0
  68. package/dist/crypto/index.js +62 -0
  69. package/dist/crypto/index.js.map +1 -0
  70. package/dist/crypto/uuid.d.ts +5 -0
  71. package/dist/crypto/uuid.d.ts.map +1 -0
  72. package/dist/currency/currency.d.ts +8 -0
  73. package/dist/currency/currency.d.ts.map +1 -0
  74. package/dist/currency/index.d.ts +2 -0
  75. package/dist/currency/index.d.ts.map +1 -0
  76. package/dist/currency/index.js +16 -0
  77. package/dist/currency/index.js.map +1 -0
  78. package/dist/date-segments/index.d.ts +3 -0
  79. package/dist/date-segments/index.d.ts.map +1 -0
  80. package/dist/date-segments/index.js +160 -0
  81. package/dist/date-segments/index.js.map +1 -0
  82. package/dist/date-segments/mask.d.ts +54 -0
  83. package/dist/date-segments/mask.d.ts.map +1 -0
  84. package/dist/dom/downloadFile.d.ts +4 -0
  85. package/dist/dom/downloadFile.d.ts.map +1 -0
  86. package/dist/dom/getOrCreatePortalRoot.d.ts +2 -0
  87. package/dist/dom/getOrCreatePortalRoot.d.ts.map +1 -0
  88. package/dist/dom/index.d.ts +10 -0
  89. package/dist/dom/index.d.ts.map +1 -0
  90. package/dist/dom/index.js +159 -0
  91. package/dist/dom/index.js.map +1 -0
  92. package/dist/dom/useClickOutside.d.ts +3 -0
  93. package/dist/dom/useClickOutside.d.ts.map +1 -0
  94. package/dist/dom/useElementHeightObserver.d.ts +3 -0
  95. package/dist/dom/useElementHeightObserver.d.ts.map +1 -0
  96. package/dist/dom/useEscapeDismiss.d.ts +14 -0
  97. package/dist/dom/useEscapeDismiss.d.ts.map +1 -0
  98. package/dist/dom/useFocusTrap.d.ts +5 -0
  99. package/dist/dom/useFocusTrap.d.ts.map +1 -0
  100. package/dist/dom/useIntersectionObserver.d.ts +4 -0
  101. package/dist/dom/useIntersectionObserver.d.ts.map +1 -0
  102. package/dist/dom/useIsTouchDevice.d.ts +2 -0
  103. package/dist/dom/useIsTouchDevice.d.ts.map +1 -0
  104. package/dist/dom/useOverlayFocus.d.ts +14 -0
  105. package/dist/dom/useOverlayFocus.d.ts.map +1 -0
  106. package/dist/error/index.d.ts +2 -0
  107. package/dist/error/index.d.ts.map +1 -0
  108. package/dist/error/index.js +20 -0
  109. package/dist/error/index.js.map +1 -0
  110. package/dist/error/missingContextError.d.ts +14 -0
  111. package/dist/error/missingContextError.d.ts.map +1 -0
  112. package/dist/error-report/breadcrumbs.d.ts +11 -0
  113. package/dist/error-report/breadcrumbs.d.ts.map +1 -0
  114. package/dist/error-report/capture.d.ts +6 -0
  115. package/dist/error-report/capture.d.ts.map +1 -0
  116. package/dist/error-report/diagnostics.d.ts +29 -0
  117. package/dist/error-report/diagnostics.d.ts.map +1 -0
  118. package/dist/error-report/drafts.d.ts +25 -0
  119. package/dist/error-report/drafts.d.ts.map +1 -0
  120. package/dist/error-report/environment.d.ts +19 -0
  121. package/dist/error-report/environment.d.ts.map +1 -0
  122. package/dist/error-report/errorInfo.d.ts +7 -0
  123. package/dist/error-report/errorInfo.d.ts.map +1 -0
  124. package/dist/error-report/index.d.ts +11 -0
  125. package/dist/error-report/index.d.ts.map +1 -0
  126. package/dist/error-report/index.js +464 -0
  127. package/dist/error-report/index.js.map +1 -0
  128. package/dist/error-report/runtime.d.ts +26 -0
  129. package/dist/error-report/runtime.d.ts.map +1 -0
  130. package/dist/error-report/safeValue.d.ts +14 -0
  131. package/dist/error-report/safeValue.d.ts.map +1 -0
  132. package/dist/error-report/transport.d.ts +32 -0
  133. package/dist/error-report/transport.d.ts.map +1 -0
  134. package/dist/error-report/types.d.ts +123 -0
  135. package/dist/error-report/types.d.ts.map +1 -0
  136. package/dist/excel/excel.d.ts +52 -0
  137. package/dist/excel/excel.d.ts.map +1 -0
  138. package/dist/excel/index.d.ts +3 -0
  139. package/dist/excel/index.d.ts.map +1 -0
  140. package/dist/excel/index.js +139 -0
  141. package/dist/excel/index.js.map +1 -0
  142. package/dist/excel/tableExport.d.ts +26 -0
  143. package/dist/excel/tableExport.d.ts.map +1 -0
  144. package/dist/file/contentDisposition.d.ts +11 -0
  145. package/dist/file/contentDisposition.d.ts.map +1 -0
  146. package/dist/file/image/index.d.ts +3 -0
  147. package/dist/file/image/index.d.ts.map +1 -0
  148. package/dist/file/image/readImageFile.d.ts +8 -0
  149. package/dist/file/image/readImageFile.d.ts.map +1 -0
  150. package/dist/file/image/types.d.ts +30 -0
  151. package/dist/file/image/types.d.ts.map +1 -0
  152. package/dist/file/index.d.ts +5 -0
  153. package/dist/file/index.d.ts.map +1 -0
  154. package/dist/file/index.js +211 -0
  155. package/dist/file/index.js.map +1 -0
  156. package/dist/file/mimeType.d.ts +2 -0
  157. package/dist/file/mimeType.d.ts.map +1 -0
  158. package/dist/file/read-file/assert.d.ts +4 -0
  159. package/dist/file/read-file/assert.d.ts.map +1 -0
  160. package/dist/file/read-file/index.d.ts +4 -0
  161. package/dist/file/read-file/index.d.ts.map +1 -0
  162. package/dist/file/read-file/readFile.d.ts +14 -0
  163. package/dist/file/read-file/readFile.d.ts.map +1 -0
  164. package/dist/file/read-file/types.d.ts +43 -0
  165. package/dist/file/read-file/types.d.ts.map +1 -0
  166. package/dist/form/formErrors.d.ts +2 -0
  167. package/dist/form/formErrors.d.ts.map +1 -0
  168. package/dist/form/index.d.ts +2 -0
  169. package/dist/form/index.d.ts.map +1 -0
  170. package/dist/form/index.js +19 -0
  171. package/dist/form/index.js.map +1 -0
  172. package/dist/formatters/boolean/index.d.ts +3 -0
  173. package/dist/formatters/boolean/index.d.ts.map +1 -0
  174. package/dist/formatters/boolean/parseAbapBoolean.d.ts +3 -0
  175. package/dist/formatters/boolean/parseAbapBoolean.d.ts.map +1 -0
  176. package/dist/formatters/boolean/toAbapBoolean.d.ts +3 -0
  177. package/dist/formatters/boolean/toAbapBoolean.d.ts.map +1 -0
  178. package/dist/formatters/date/calendarDate.d.ts +48 -0
  179. package/dist/formatters/date/calendarDate.d.ts.map +1 -0
  180. package/dist/formatters/date/calendarPeriod.d.ts +33 -0
  181. package/dist/formatters/date/calendarPeriod.d.ts.map +1 -0
  182. package/dist/formatters/date/dateRange.d.ts +25 -0
  183. package/dist/formatters/date/dateRange.d.ts.map +1 -0
  184. package/dist/formatters/date/educationDate.d.ts +79 -0
  185. package/dist/formatters/date/educationDate.d.ts.map +1 -0
  186. package/dist/formatters/date/formatDate.d.ts +98 -0
  187. package/dist/formatters/date/formatDate.d.ts.map +1 -0
  188. package/dist/formatters/date/index.d.ts +14 -0
  189. package/dist/formatters/date/index.d.ts.map +1 -0
  190. package/dist/formatters/date/parseDate.d.ts +44 -0
  191. package/dist/formatters/date/parseDate.d.ts.map +1 -0
  192. package/dist/formatters/date/pattern.d.ts +38 -0
  193. package/dist/formatters/date/pattern.d.ts.map +1 -0
  194. package/dist/formatters/date/presets.d.ts +108 -0
  195. package/dist/formatters/date/presets.d.ts.map +1 -0
  196. package/dist/formatters/date/relativeRanges.d.ts +35 -0
  197. package/dist/formatters/date/relativeRanges.d.ts.map +1 -0
  198. package/dist/formatters/date/types.d.ts +70 -0
  199. package/dist/formatters/date/types.d.ts.map +1 -0
  200. package/dist/formatters/formatName.d.ts +13 -0
  201. package/dist/formatters/formatName.d.ts.map +1 -0
  202. package/dist/formatters/formatPhone.d.ts +3 -0
  203. package/dist/formatters/formatPhone.d.ts.map +1 -0
  204. package/dist/formatters/formatTagAsHashtag.d.ts +6 -0
  205. package/dist/formatters/formatTagAsHashtag.d.ts.map +1 -0
  206. package/dist/formatters/index.d.ts +11 -0
  207. package/dist/formatters/index.d.ts.map +1 -0
  208. package/dist/formatters/index.js +6 -0
  209. package/dist/formatters/normalizeLeadingZeros.d.ts +27 -0
  210. package/dist/formatters/normalizeLeadingZeros.d.ts.map +1 -0
  211. package/dist/formatters/number/compact.d.ts +10 -0
  212. package/dist/formatters/number/compact.d.ts.map +1 -0
  213. package/dist/formatters/number/formatCompactNumber.d.ts +49 -0
  214. package/dist/formatters/number/formatCompactNumber.d.ts.map +1 -0
  215. package/dist/formatters/number/formatNumber.d.ts +93 -0
  216. package/dist/formatters/number/formatNumber.d.ts.map +1 -0
  217. package/dist/formatters/number/index.d.ts +6 -0
  218. package/dist/formatters/number/index.d.ts.map +1 -0
  219. package/dist/formatters/number/isZeroValue.d.ts +5 -0
  220. package/dist/formatters/number/isZeroValue.d.ts.map +1 -0
  221. package/dist/formatters/number/parseNumber.d.ts +12 -0
  222. package/dist/formatters/number/parseNumber.d.ts.map +1 -0
  223. package/dist/formatters/number/presets.d.ts +24 -0
  224. package/dist/formatters/number/presets.d.ts.map +1 -0
  225. package/dist/formatters/number/types.d.ts +46 -0
  226. package/dist/formatters/number/types.d.ts.map +1 -0
  227. package/dist/formatters/pipeline/clone.d.ts +15 -0
  228. package/dist/formatters/pipeline/clone.d.ts.map +1 -0
  229. package/dist/formatters/pipeline/definitions.d.ts +14 -0
  230. package/dist/formatters/pipeline/definitions.d.ts.map +1 -0
  231. package/dist/formatters/pipeline/dependencies.d.ts +38 -0
  232. package/dist/formatters/pipeline/dependencies.d.ts.map +1 -0
  233. package/dist/formatters/pipeline/execute.d.ts +21 -0
  234. package/dist/formatters/pipeline/execute.d.ts.map +1 -0
  235. package/dist/formatters/pipeline/index.d.ts +10 -0
  236. package/dist/formatters/pipeline/index.d.ts.map +1 -0
  237. package/dist/formatters/pipeline/normalize.d.ts +3 -0
  238. package/dist/formatters/pipeline/normalize.d.ts.map +1 -0
  239. package/dist/formatters/pipeline/registry.d.ts +11 -0
  240. package/dist/formatters/pipeline/registry.d.ts.map +1 -0
  241. package/dist/formatters/pipeline/rekey.d.ts +11 -0
  242. package/dist/formatters/pipeline/rekey.d.ts.map +1 -0
  243. package/dist/formatters/pipeline/runtime.d.ts +17 -0
  244. package/dist/formatters/pipeline/runtime.d.ts.map +1 -0
  245. package/dist/formatters/pipeline/types.d.ts +379 -0
  246. package/dist/formatters/pipeline/types.d.ts.map +1 -0
  247. package/dist/formatters/pipeline/validate.d.ts +29 -0
  248. package/dist/formatters/pipeline/validate.d.ts.map +1 -0
  249. package/dist/formatters/rowBased/context.d.ts +9 -0
  250. package/dist/formatters/rowBased/context.d.ts.map +1 -0
  251. package/dist/formatters/rowBased/definitions/index.d.ts +6 -0
  252. package/dist/formatters/rowBased/definitions/index.d.ts.map +1 -0
  253. package/dist/formatters/rowBased/index.d.ts +4 -0
  254. package/dist/formatters/rowBased/index.d.ts.map +1 -0
  255. package/dist/formatters/rowBased/registry.d.ts +19 -0
  256. package/dist/formatters/rowBased/registry.d.ts.map +1 -0
  257. package/dist/formatters/rowBased/types.d.ts +29 -0
  258. package/dist/formatters/rowBased/types.d.ts.map +1 -0
  259. package/dist/formatters/strings/index.d.ts +6 -0
  260. package/dist/formatters/strings/index.d.ts.map +1 -0
  261. package/dist/formatters/strings/normalizeText.d.ts +11 -0
  262. package/dist/formatters/strings/normalizeText.d.ts.map +1 -0
  263. package/dist/formatters/strings/startsWithIgnoringZeros.d.ts +2 -0
  264. package/dist/formatters/strings/startsWithIgnoringZeros.d.ts.map +1 -0
  265. package/dist/formatters/strings/stripInnerSpaces.d.ts +6 -0
  266. package/dist/formatters/strings/stripInnerSpaces.d.ts.map +1 -0
  267. package/dist/formatters/strings/stripLeadingZeros.d.ts +10 -0
  268. package/dist/formatters/strings/stripLeadingZeros.d.ts.map +1 -0
  269. package/dist/formatters/strings/truncateText.d.ts +2 -0
  270. package/dist/formatters/strings/truncateText.d.ts.map +1 -0
  271. package/dist/formatters/valueState/fixedValueStateResolver.d.ts +41 -0
  272. package/dist/formatters/valueState/fixedValueStateResolver.d.ts.map +1 -0
  273. package/dist/formatters/valueState/index.d.ts +7 -0
  274. package/dist/formatters/valueState/index.d.ts.map +1 -0
  275. package/dist/formatters/valueState/presentation.d.ts +4 -0
  276. package/dist/formatters/valueState/presentation.d.ts.map +1 -0
  277. package/dist/formatters/valueState/resolveValueStateClassName.d.ts +3 -0
  278. package/dist/formatters/valueState/resolveValueStateClassName.d.ts.map +1 -0
  279. package/dist/formatters/valueState/thresholdValueStateResolver.d.ts +40 -0
  280. package/dist/formatters/valueState/thresholdValueStateResolver.d.ts.map +1 -0
  281. package/dist/formatters/valueState/types.d.ts +35 -0
  282. package/dist/formatters/valueState/types.d.ts.map +1 -0
  283. package/dist/formatters/valueState/valueStateRegistry.d.ts +45 -0
  284. package/dist/formatters/valueState/valueStateRegistry.d.ts.map +1 -0
  285. package/dist/formulas/definitions/base.d.ts +7 -0
  286. package/dist/formulas/definitions/base.d.ts.map +1 -0
  287. package/dist/formulas/definitions/index.d.ts +3 -0
  288. package/dist/formulas/definitions/index.d.ts.map +1 -0
  289. package/dist/formulas/definitions/sales.d.ts +7 -0
  290. package/dist/formulas/definitions/sales.d.ts.map +1 -0
  291. package/dist/formulas/execute.d.ts +36 -0
  292. package/dist/formulas/execute.d.ts.map +1 -0
  293. package/dist/formulas/index.d.ts +5 -0
  294. package/dist/formulas/index.d.ts.map +1 -0
  295. package/dist/formulas/index.js +2 -0
  296. package/dist/formulas/perf.runtime.d.ts +48 -0
  297. package/dist/formulas/perf.runtime.d.ts.map +1 -0
  298. package/dist/formulas/registry.d.ts +10 -0
  299. package/dist/formulas/registry.d.ts.map +1 -0
  300. package/dist/formulas/types.d.ts +16 -0
  301. package/dist/formulas/types.d.ts.map +1 -0
  302. package/dist/formulas/validate.d.ts +22 -0
  303. package/dist/formulas/validate.d.ts.map +1 -0
  304. package/dist/hooks/index.d.ts +11 -0
  305. package/dist/hooks/index.d.ts.map +1 -0
  306. package/dist/hooks/index.js +291 -0
  307. package/dist/hooks/index.js.map +1 -0
  308. package/dist/hooks/types.d.ts +4 -0
  309. package/dist/hooks/types.d.ts.map +1 -0
  310. package/dist/hooks/useBlockBrowserZoom.d.ts +7 -0
  311. package/dist/hooks/useBlockBrowserZoom.d.ts.map +1 -0
  312. package/dist/hooks/useDebounce.d.ts +2 -0
  313. package/dist/hooks/useDebounce.d.ts.map +1 -0
  314. package/dist/hooks/useDebounceCallback.d.ts +22 -0
  315. package/dist/hooks/useDebounceCallback.d.ts.map +1 -0
  316. package/dist/hooks/useDndSortableSensors.d.ts +13 -0
  317. package/dist/hooks/useDndSortableSensors.d.ts.map +1 -0
  318. package/dist/hooks/useFloatingListbox.d.ts +61 -0
  319. package/dist/hooks/useFloatingListbox.d.ts.map +1 -0
  320. package/dist/hooks/useLazyComponent.d.ts +28 -0
  321. package/dist/hooks/useLazyComponent.d.ts.map +1 -0
  322. package/dist/hooks/useReferenceTrace.d.ts +2 -0
  323. package/dist/hooks/useReferenceTrace.d.ts.map +1 -0
  324. package/dist/hooks/useSearchLink.d.ts +5 -0
  325. package/dist/hooks/useSearchLink.d.ts.map +1 -0
  326. package/dist/hooks/useSearchParams.d.ts +8 -0
  327. package/dist/hooks/useSearchParams.d.ts.map +1 -0
  328. package/dist/hooks/useThrottledCallback.d.ts +43 -0
  329. package/dist/hooks/useThrottledCallback.d.ts.map +1 -0
  330. package/dist/http/httpHeaders.d.ts +3 -0
  331. package/dist/http/httpHeaders.d.ts.map +1 -0
  332. package/dist/http/index.d.ts +3 -0
  333. package/dist/http/index.d.ts.map +1 -0
  334. package/dist/http/index.js +18 -0
  335. package/dist/http/index.js.map +1 -0
  336. package/dist/http/textResponse.d.ts +7 -0
  337. package/dist/http/textResponse.d.ts.map +1 -0
  338. package/dist/media/breakpoints.d.ts +9 -0
  339. package/dist/media/breakpoints.d.ts.map +1 -0
  340. package/dist/media/getCurrentFontSize.d.ts +4 -0
  341. package/dist/media/getCurrentFontSize.d.ts.map +1 -0
  342. package/dist/media/index.d.ts +7 -0
  343. package/dist/media/index.d.ts.map +1 -0
  344. package/dist/media/index.js +147 -0
  345. package/dist/media/index.js.map +1 -0
  346. package/dist/media/pxToEm.d.ts +2 -0
  347. package/dist/media/pxToEm.d.ts.map +1 -0
  348. package/dist/media/responsive.d.ts +29 -0
  349. package/dist/media/responsive.d.ts.map +1 -0
  350. package/dist/media/useMatchMedia.d.ts +15 -0
  351. package/dist/media/useMatchMedia.d.ts.map +1 -0
  352. package/dist/media/useMediaQuery.d.ts +10 -0
  353. package/dist/media/useMediaQuery.d.ts.map +1 -0
  354. package/dist/notifications/index.d.ts +4 -0
  355. package/dist/notifications/index.d.ts.map +1 -0
  356. package/dist/notifications/index.js +124 -0
  357. package/dist/notifications/index.js.map +1 -0
  358. package/dist/notifications/notify.d.ts +32 -0
  359. package/dist/notifications/notify.d.ts.map +1 -0
  360. package/dist/notifications/store.d.ts +31 -0
  361. package/dist/notifications/store.d.ts.map +1 -0
  362. package/dist/notifications/types.d.ts +19 -0
  363. package/dist/notifications/types.d.ts.map +1 -0
  364. package/dist/number-scale/index.d.ts +3 -0
  365. package/dist/number-scale/index.d.ts.map +1 -0
  366. package/dist/number-scale/index.js +99 -0
  367. package/dist/number-scale/index.js.map +1 -0
  368. package/dist/number-scale/numberScale.d.ts +52 -0
  369. package/dist/number-scale/numberScale.d.ts.map +1 -0
  370. package/dist/number-scale/types.d.ts +44 -0
  371. package/dist/number-scale/types.d.ts.map +1 -0
  372. package/dist/odata/buildSeparatedArrays.d.ts +10 -0
  373. package/dist/odata/buildSeparatedArrays.d.ts.map +1 -0
  374. package/dist/odata/dateUtils.d.ts +14 -0
  375. package/dist/odata/dateUtils.d.ts.map +1 -0
  376. package/dist/odata/findCollectionPairs.d.ts +11 -0
  377. package/dist/odata/findCollectionPairs.d.ts.map +1 -0
  378. package/dist/odata/index.d.ts +6 -0
  379. package/dist/odata/index.d.ts.map +1 -0
  380. package/dist/odata/index.js +102 -0
  381. package/dist/odata/index.js.map +1 -0
  382. package/dist/odata/store.d.ts +42 -0
  383. package/dist/odata/store.d.ts.map +1 -0
  384. package/dist/odata/types.d.ts +12 -0
  385. package/dist/odata/types.d.ts.map +1 -0
  386. package/dist/odata-service/baseTypes.d.ts +6 -0
  387. package/dist/odata-service/baseTypes.d.ts.map +1 -0
  388. package/dist/odata-service/builder.d.ts +33 -0
  389. package/dist/odata-service/builder.d.ts.map +1 -0
  390. package/dist/odata-service/columns.d.ts +10 -0
  391. package/dist/odata-service/columns.d.ts.map +1 -0
  392. package/dist/odata-service/filterDefinitions.d.ts +113 -0
  393. package/dist/odata-service/filterDefinitions.d.ts.map +1 -0
  394. package/dist/odata-service/filters.d.ts +75 -0
  395. package/dist/odata-service/filters.d.ts.map +1 -0
  396. package/dist/odata-service/formatters.d.ts +33 -0
  397. package/dist/odata-service/formatters.d.ts.map +1 -0
  398. package/dist/odata-service/index.d.ts +16 -0
  399. package/dist/odata-service/index.d.ts.map +1 -0
  400. package/dist/odata-service/index.js +2 -0
  401. package/dist/odata-service/parser.d.ts +14 -0
  402. package/dist/odata-service/parser.d.ts.map +1 -0
  403. package/dist/odata-service/schema.d.ts +8 -0
  404. package/dist/odata-service/schema.d.ts.map +1 -0
  405. package/dist/odata-service/sorts.d.ts +26 -0
  406. package/dist/odata-service/sorts.d.ts.map +1 -0
  407. package/dist/odata-service/sqlFilters.d.ts +32 -0
  408. package/dist/odata-service/sqlFilters.d.ts.map +1 -0
  409. package/dist/odata-service/types.d.ts +166 -0
  410. package/dist/odata-service/types.d.ts.map +1 -0
  411. package/dist/odata-service/typesValidation.d.ts +6 -0
  412. package/dist/odata-service/typesValidation.d.ts.map +1 -0
  413. package/dist/odata-service/unwrapODataQueryResult.d.ts +22 -0
  414. package/dist/odata-service/unwrapODataQueryResult.d.ts.map +1 -0
  415. package/dist/odata-service/utils.d.ts +5 -0
  416. package/dist/odata-service/utils.d.ts.map +1 -0
  417. package/dist/odata-service/wrapParams.d.ts +7 -0
  418. package/dist/odata-service/wrapParams.d.ts.map +1 -0
  419. package/dist/presets/index.d.ts +2 -0
  420. package/dist/presets/index.d.ts.map +1 -0
  421. package/dist/presets/index.js +23 -0
  422. package/dist/presets/index.js.map +1 -0
  423. package/dist/presets/presets.d.ts +20 -0
  424. package/dist/presets/presets.d.ts.map +1 -0
  425. package/dist/pwa/index.d.ts +3 -0
  426. package/dist/pwa/index.d.ts.map +1 -0
  427. package/dist/pwa/index.js +206 -0
  428. package/dist/pwa/index.js.map +1 -0
  429. package/dist/pwa/serviceWorker.d.ts +31 -0
  430. package/dist/pwa/serviceWorker.d.ts.map +1 -0
  431. package/dist/pwa/swCachePolicy.d.ts +24 -0
  432. package/dist/pwa/swCachePolicy.d.ts.map +1 -0
  433. package/dist/pwa/useServiceWorkerUpdate.d.ts +6 -0
  434. package/dist/pwa/useServiceWorkerUpdate.d.ts.map +1 -0
  435. package/dist/query-client/broadcast.d.ts +23 -0
  436. package/dist/query-client/broadcast.d.ts.map +1 -0
  437. package/dist/query-client/index.d.ts +5 -0
  438. package/dist/query-client/index.d.ts.map +1 -0
  439. package/dist/query-client/index.js +204 -0
  440. package/dist/query-client/index.js.map +1 -0
  441. package/dist/query-client/persistence.d.ts +33 -0
  442. package/dist/query-client/persistence.d.ts.map +1 -0
  443. package/dist/query-client/queryClient.d.ts +127 -0
  444. package/dist/query-client/queryClient.d.ts.map +1 -0
  445. package/dist/query-client/queryPersistenceAdapter.d.ts +7 -0
  446. package/dist/query-client/queryPersistenceAdapter.d.ts.map +1 -0
  447. package/dist/range-output/index.d.ts +2 -0
  448. package/dist/range-output/index.d.ts.map +1 -0
  449. package/dist/range-output/index.js +22 -0
  450. package/dist/range-output/index.js.map +1 -0
  451. package/dist/range-output/rangeOutput.d.ts +15 -0
  452. package/dist/range-output/rangeOutput.d.ts.map +1 -0
  453. package/dist/seo/index.d.ts +3 -0
  454. package/dist/seo/index.d.ts.map +1 -0
  455. package/dist/seo/index.js +125 -0
  456. package/dist/seo/index.js.map +1 -0
  457. package/dist/seo/seo.d.ts +16 -0
  458. package/dist/seo/seo.d.ts.map +1 -0
  459. package/dist/seo/types.d.ts +28 -0
  460. package/dist/seo/types.d.ts.map +1 -0
  461. package/dist/session-storage/index.d.ts +2 -0
  462. package/dist/session-storage/index.d.ts.map +1 -0
  463. package/dist/session-storage/index.js +17 -0
  464. package/dist/session-storage/index.js.map +1 -0
  465. package/dist/session-storage/sessionId.d.ts +8 -0
  466. package/dist/session-storage/sessionId.d.ts.map +1 -0
  467. package/dist/string-comparison/compareStrings.d.ts +9 -0
  468. package/dist/string-comparison/compareStrings.d.ts.map +1 -0
  469. package/dist/string-comparison/index.d.ts +2 -0
  470. package/dist/string-comparison/index.d.ts.map +1 -0
  471. package/dist/string-comparison/index.js +2 -0
  472. package/dist/table/columnLayout.d.ts +23 -0
  473. package/dist/table/columnLayout.d.ts.map +1 -0
  474. package/dist/table/columnOrder.d.ts +21 -0
  475. package/dist/table/columnOrder.d.ts.map +1 -0
  476. package/dist/table/columnSizing.d.ts +7 -0
  477. package/dist/table/columnSizing.d.ts.map +1 -0
  478. package/dist/table/index.d.ts +9 -0
  479. package/dist/table/index.d.ts.map +1 -0
  480. package/dist/table/index.js +229 -0
  481. package/dist/table/index.js.map +1 -0
  482. package/dist/table/odataAdapter.d.ts +63 -0
  483. package/dist/table/odataAdapter.d.ts.map +1 -0
  484. package/dist/table/selection.d.ts +16 -0
  485. package/dist/table/selection.d.ts.map +1 -0
  486. package/dist/table/types.d.ts +60 -0
  487. package/dist/table/types.d.ts.map +1 -0
  488. package/dist/table/useTableRowSelection.d.ts +19 -0
  489. package/dist/table/useTableRowSelection.d.ts.map +1 -0
  490. package/dist/table/utils.d.ts +20 -0
  491. package/dist/table/utils.d.ts.map +1 -0
  492. package/dist/three-scene/index.d.ts +3 -0
  493. package/dist/three-scene/index.d.ts.map +1 -0
  494. package/dist/three-scene/index.js +84 -0
  495. package/dist/three-scene/index.js.map +1 -0
  496. package/dist/three-scene/threeSceneAvailability.d.ts +15 -0
  497. package/dist/three-scene/threeSceneAvailability.d.ts.map +1 -0
  498. package/dist/three-scene/useThreeSceneAvailability.d.ts +8 -0
  499. package/dist/three-scene/useThreeSceneAvailability.d.ts.map +1 -0
  500. package/dist/tree-table/buildTreeTableRows.d.ts +9 -0
  501. package/dist/tree-table/buildTreeTableRows.d.ts.map +1 -0
  502. package/dist/tree-table/index.d.ts +4 -0
  503. package/dist/tree-table/index.d.ts.map +1 -0
  504. package/dist/tree-table/index.js +126 -0
  505. package/dist/tree-table/index.js.map +1 -0
  506. package/dist/tree-table/transposeFlatRowsToTreeTableRows.d.ts +11 -0
  507. package/dist/tree-table/transposeFlatRowsToTreeTableRows.d.ts.map +1 -0
  508. package/dist/tree-table/types.d.ts +87 -0
  509. package/dist/tree-table/types.d.ts.map +1 -0
  510. package/dist/types/index.d.ts +2 -0
  511. package/dist/types/index.d.ts.map +1 -0
  512. package/dist/types/index.js +8 -0
  513. package/dist/types/index.js.map +1 -0
  514. package/dist/types/types.d.ts +12 -0
  515. package/dist/types/types.d.ts.map +1 -0
  516. package/dist/utils/childrenCount.d.ts +3 -0
  517. package/dist/utils/childrenCount.d.ts.map +1 -0
  518. package/dist/utils/cn.d.ts +6 -0
  519. package/dist/utils/cn.d.ts.map +1 -0
  520. package/dist/utils/createLazyComponent.d.ts +22 -0
  521. package/dist/utils/createLazyComponent.d.ts.map +1 -0
  522. package/dist/utils/deepCloneWithoutFunctions.d.ts +20 -0
  523. package/dist/utils/deepCloneWithoutFunctions.d.ts.map +1 -0
  524. package/dist/utils/deepCopyWithoutFunctions.d.ts +10 -0
  525. package/dist/utils/deepCopyWithoutFunctions.d.ts.map +1 -0
  526. package/dist/utils/index.d.ts +17 -0
  527. package/dist/utils/index.d.ts.map +1 -0
  528. package/dist/utils/index.js +209 -0
  529. package/dist/utils/index.js.map +1 -0
  530. package/dist/utils/keyboard.d.ts +36 -0
  531. package/dist/utils/keyboard.d.ts.map +1 -0
  532. package/dist/utils/logger.d.ts +2 -0
  533. package/dist/utils/logger.d.ts.map +1 -0
  534. package/dist/utils/selectNavigation.d.ts +8 -0
  535. package/dist/utils/selectNavigation.d.ts.map +1 -0
  536. package/dist/utils/stableStringify.d.ts +8 -0
  537. package/dist/utils/stableStringify.d.ts.map +1 -0
  538. package/dist/utils/toBase64.d.ts +3 -0
  539. package/dist/utils/toBase64.d.ts.map +1 -0
  540. package/dist/utils/treeNode.d.ts +9 -0
  541. package/dist/utils/treeNode.d.ts.map +1 -0
  542. package/dist/validators/index.d.ts +7 -0
  543. package/dist/validators/index.d.ts.map +1 -0
  544. package/dist/validators/index.js +54 -0
  545. package/dist/validators/index.js.map +1 -0
  546. package/dist/validators/isDomReference.d.ts +3 -0
  547. package/dist/validators/isDomReference.d.ts.map +1 -0
  548. package/dist/validators/isImageExtension.d.ts +3 -0
  549. package/dist/validators/isImageExtension.d.ts.map +1 -0
  550. package/dist/validators/isRecord.d.ts +5 -0
  551. package/dist/validators/isRecord.d.ts.map +1 -0
  552. package/dist/validators/isSafe.d.ts +2 -0
  553. package/dist/validators/isSafe.d.ts.map +1 -0
  554. package/dist/validators/positiveInteger.d.ts +2 -0
  555. package/dist/validators/positiveInteger.d.ts.map +1 -0
  556. package/dist/validators/validateUrl.d.ts +10 -0
  557. package/dist/validators/validateUrl.d.ts.map +1 -0
  558. package/dist/virtualizer/index.d.ts +2 -0
  559. package/dist/virtualizer/index.d.ts.map +1 -0
  560. package/dist/virtualizer/index.js +19 -0
  561. package/dist/virtualizer/index.js.map +1 -0
  562. package/dist/virtualizer/useFetchNextPageEffect.d.ts +8 -0
  563. package/dist/virtualizer/useFetchNextPageEffect.d.ts.map +1 -0
  564. package/dist/xml/index.d.ts +2 -0
  565. package/dist/xml/index.d.ts.map +1 -0
  566. package/dist/xml/index.js +17 -0
  567. package/dist/xml/index.js.map +1 -0
  568. package/dist/xml/xml.d.ts +5 -0
  569. package/dist/xml/xml.d.ts.map +1 -0
  570. package/package.json +428 -0
@@ -0,0 +1,23 @@
1
+ //#region src/presets/presets.ts
2
+ function e(e, t, n = []) {
3
+ if (!Array.isArray(e)) return [...n];
4
+ let r = [];
5
+ for (let n of e) !t(n) || r.includes(n) || r.push(n);
6
+ return r;
7
+ }
8
+ function t(e, t) {
9
+ let n = new Map(t.map((e) => [e.id, e])), r = [], i = /* @__PURE__ */ new Set();
10
+ for (let t of e) {
11
+ if (i.has(t)) continue;
12
+ let e = n.get(t);
13
+ e && (r.push(e), i.add(t));
14
+ }
15
+ return r;
16
+ }
17
+ function n(e, t) {
18
+ return e ? t.find((t) => t.id === e) ?? null : null;
19
+ }
20
+ //#endregion
21
+ export { n as getPresetOption, e as normalizePresetIds, t as resolvePresetOptionsByIds };
22
+
23
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/presets/presets.ts"],"sourcesContent":["/**\n * Минимальный контракт пресета для UI-контролов и чистых resolver-ов.\n */\nexport type PresetOption<TId extends string = string> = {\n\tid: TId;\n\tlabel: string;\n};\n\n/**\n * Нормализует сохраненный список id пресетов через доменный type guard.\n */\nexport function normalizePresetIds<TId extends string>(\n\tvalue: unknown,\n\tisPresetId: (value: unknown) => value is TId,\n\tfallbackIds: readonly TId[] = []\n): TId[] {\n\tif (!Array.isArray(value)) {\n\t\treturn [...fallbackIds];\n\t}\n\n\tconst presetIds: TId[] = [];\n\n\tfor (const item of value) {\n\t\tif (!isPresetId(item) || presetIds.includes(item)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tpresetIds.push(item);\n\t}\n\n\treturn presetIds;\n}\n\n/**\n * Формирует список пресетов по сохраненным id, сохраняя порядок и удаляя дубли.\n */\nexport function resolvePresetOptionsByIds<TOption extends PresetOption>(\n\tpresetIds: readonly TOption[\"id\"][],\n\toptions: readonly TOption[]\n): TOption[] {\n\tconst optionsById = new Map(options.map((option) => [option.id, option]));\n\tconst resolvedOptions: TOption[] = [];\n\tconst addedIds = new Set<TOption[\"id\"]>();\n\n\tfor (const presetId of presetIds) {\n\t\tif (addedIds.has(presetId)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst option = optionsById.get(presetId);\n\t\tif (!option) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tresolvedOptions.push(option);\n\t\taddedIds.add(presetId);\n\t}\n\n\treturn resolvedOptions;\n}\n\n/**\n * Ищет пресет по id.\n */\nexport function getPresetOption<TOption extends PresetOption>(\n\tid: TOption[\"id\"] | null | undefined,\n\toptions: readonly TOption[]\n): TOption | null {\n\tif (!id) return null;\n\treturn options.find((option) => option.id === id) ?? null;\n}\n"],"mappings":";AAWA,SAAgB,EACf,GACA,GACA,IAA8B,CAAC,GACvB;CACR,IAAI,CAAC,MAAM,QAAQ,CAAK,GACvB,OAAO,CAAC,GAAG,CAAW;CAGvB,IAAM,IAAmB,CAAC;CAE1B,KAAK,IAAM,KAAQ,GACd,CAAC,EAAW,CAAI,KAAK,EAAU,SAAS,CAAI,KAIhD,EAAU,KAAK,CAAI;CAGpB,OAAO;AACR;AAKA,SAAgB,EACf,GACA,GACY;CACZ,IAAM,IAAc,IAAI,IAAI,EAAQ,KAAK,MAAW,CAAC,EAAO,IAAI,CAAM,CAAC,CAAC,GAClE,IAA6B,CAAC,GAC9B,oBAAW,IAAI,IAAmB;CAExC,KAAK,IAAM,KAAY,GAAW;EACjC,IAAI,EAAS,IAAI,CAAQ,GACxB;EAGD,IAAM,IAAS,EAAY,IAAI,CAAQ;EAClC,MAIL,EAAgB,KAAK,CAAM,GAC3B,EAAS,IAAI,CAAQ;CACtB;CAEA,OAAO;AACR;AAKA,SAAgB,EACf,GACA,GACiB;CAEjB,OADK,IACE,EAAQ,MAAM,MAAW,EAAO,OAAO,CAAE,KAAK,OADrC;AAEjB"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Минимальный контракт пресета для UI-контролов и чистых resolver-ов.
3
+ */
4
+ export type PresetOption<TId extends string = string> = {
5
+ id: TId;
6
+ label: string;
7
+ };
8
+ /**
9
+ * Нормализует сохраненный список id пресетов через доменный type guard.
10
+ */
11
+ export declare function normalizePresetIds<TId extends string>(value: unknown, isPresetId: (value: unknown) => value is TId, fallbackIds?: readonly TId[]): TId[];
12
+ /**
13
+ * Формирует список пресетов по сохраненным id, сохраняя порядок и удаляя дубли.
14
+ */
15
+ export declare function resolvePresetOptionsByIds<TOption extends PresetOption>(presetIds: readonly TOption["id"][], options: readonly TOption[]): TOption[];
16
+ /**
17
+ * Ищет пресет по id.
18
+ */
19
+ export declare function getPresetOption<TOption extends PresetOption>(id: TOption["id"] | null | undefined, options: readonly TOption[]): TOption | null;
20
+ //# sourceMappingURL=presets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/presets/presets.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,GAAG,SAAS,MAAM,GAAG,MAAM,IAAI;IACvD,EAAE,EAAE,GAAG,CAAC;IACR,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAEF;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,SAAS,MAAM,EACpD,KAAK,EAAE,OAAO,EACd,UAAU,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,KAAK,IAAI,GAAG,EAC5C,WAAW,GAAE,SAAS,GAAG,EAAO,GAC9B,GAAG,EAAE,CAgBP;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,SAAS,YAAY,EACrE,SAAS,EAAE,SAAS,OAAO,CAAC,IAAI,CAAC,EAAE,EACnC,OAAO,EAAE,SAAS,OAAO,EAAE,GACzB,OAAO,EAAE,CAoBX;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,SAAS,YAAY,EAC3D,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,GAAG,SAAS,EACpC,OAAO,EAAE,SAAS,OAAO,EAAE,GACzB,OAAO,GAAG,IAAI,CAGhB"}
@@ -0,0 +1,3 @@
1
+ export * from "./swCachePolicy";
2
+ export * from "./useServiceWorkerUpdate";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/pwa/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC"}
@@ -0,0 +1,206 @@
1
+ import { i as e } from "../chunks/isRecord-DXDTW-jA.js";
2
+ import { logError as t } from "../utils/index.js";
3
+ import { useCallback as n, useEffect as r, useState as i } from "react";
4
+ //#region src/pwa/swCachePolicy.ts
5
+ var a = 100, o = 5e3, s = 365 * 24 * 60 * 60 * 1e3;
6
+ function c(e) {
7
+ return e?.trim().toLowerCase().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "") || void 0;
8
+ }
9
+ function l(e) {
10
+ let t = e.trim().toLowerCase();
11
+ if (t === "forever") return {
12
+ durationLabel: "forever",
13
+ ttlMs: Infinity
14
+ };
15
+ let n = t.match(/^(\d+(?:\.\d+)?)(ms|s|m|h|d)$/);
16
+ if (!n) return;
17
+ let r = Number(n[1]), i = n[2];
18
+ if (!Number.isFinite(r) || r <= 0) return;
19
+ let a = Math.round(r * {
20
+ ms: 1,
21
+ s: 1e3,
22
+ m: 60 * 1e3,
23
+ h: 3600 * 1e3,
24
+ d: 1440 * 60 * 1e3
25
+ }[i]);
26
+ if (!(!Number.isFinite(a) || a <= 0 || a > s)) return {
27
+ durationLabel: `${n[1]}${i}`.replace(".", "_"),
28
+ amount: r,
29
+ unit: i,
30
+ ttlMs: a
31
+ };
32
+ }
33
+ function u(e) {
34
+ if (!e) return;
35
+ let t = Number(e.trim());
36
+ if (!(!Number.isInteger(t) || t <= 0)) return Math.min(t, o);
37
+ }
38
+ function d(e, t, n) {
39
+ return `odata-${t ? `${t}-${e.durationLabel}` : e.durationLabel}${n ? `-max${n}` : ""}`;
40
+ }
41
+ function f(e) {
42
+ let t = e?.trim();
43
+ if (!t) return;
44
+ if (t.toLowerCase() === "off") return { mode: "off" };
45
+ let [n, ...r] = t.split(/[;,]/).map((e) => e.trim()).filter(Boolean), [i, o] = n?.split("=", 2) ?? [], s = i?.toLowerCase();
46
+ if (s !== "ttl" && s !== "bust" || !o) return;
47
+ let f = l(o);
48
+ if (!f) return;
49
+ let p = new Map(r.map((e) => e.split("=", 2).map((e) => e.trim())).map(([e, t]) => [e.toLowerCase(), t]).filter(([e, t]) => !!(e && t))), m = u(p.get("maxentries") ?? p.get("max") ?? p.get("entries")), h = c(p.get("cachename") ?? p.get("cache") ?? p.get("name")), g = m ?? a;
50
+ return {
51
+ mode: s,
52
+ amount: f.amount,
53
+ unit: f.unit,
54
+ name: h,
55
+ maxEntries: m,
56
+ resolvedMaxEntries: g,
57
+ ttlMs: f.ttlMs,
58
+ cacheName: d(f, h, m)
59
+ };
60
+ }
61
+ function p(e) {
62
+ let t = f(e);
63
+ return t?.mode === "ttl" || t?.mode === "bust" ? t.cacheName : void 0;
64
+ }
65
+ function m(e) {
66
+ if (e.mode === "off") return "off";
67
+ let t = typeof e.amount == "number" && Number.isFinite(e.amount) && e.amount > 0 ? e.amount : 24, n = e.unit ?? "h", r = typeof e.maxEntries == "number" && Number.isInteger(e.maxEntries) && e.maxEntries > 0 ? Math.min(e.maxEntries, o) : void 0, i = c(e.name), a = [r ? `max=${r}` : void 0, i ? `name=${i}` : void 0].filter(Boolean);
68
+ return `${e.mode}=${t}${n}${a.length ? `;${a.join(";")}` : ""}`;
69
+ }
70
+ //#endregion
71
+ //#region src/pwa/serviceWorker.ts
72
+ var h = "/arm/", g = `${h}sw.js`, _ = "SW_ACTIVATED_BY_CLIENT", v = "react-foundation-lib.service-worker.update-reload-count.v1", y = 5, b = /* @__PURE__ */ new WeakSet(), x = /* @__PURE__ */ new Set(), S = null, C = !1, w = !1, T = !1, E = !1;
73
+ function D(t) {
74
+ return e(t) && t.type === _ ? { type: _ } : null;
75
+ }
76
+ function O() {
77
+ try {
78
+ let e = window.sessionStorage.getItem(v), t = Number(e);
79
+ return Number.isInteger(t) && t > 0 ? t : 0;
80
+ } catch {
81
+ return 0;
82
+ }
83
+ }
84
+ function k() {
85
+ try {
86
+ let e = Math.min(O() + 1, y);
87
+ window.sessionStorage.setItem(v, String(e));
88
+ } catch {}
89
+ }
90
+ function A() {
91
+ return O() < y;
92
+ }
93
+ function j() {
94
+ try {
95
+ window.sessionStorage.removeItem(v);
96
+ } catch {}
97
+ }
98
+ function M() {
99
+ C || (C = !0, window.location.reload());
100
+ }
101
+ function N() {
102
+ T || (T = !0, navigator.serviceWorker.addEventListener("controllerchange", () => {
103
+ w && M();
104
+ }));
105
+ }
106
+ function P() {
107
+ E || (E = !0, navigator.serviceWorker.addEventListener("message", (e) => {
108
+ D(e.data) && (C || (k(), M()));
109
+ }));
110
+ }
111
+ function F(e) {
112
+ for (let t of x) t(e);
113
+ }
114
+ function I(e) {
115
+ b.has(e) || (b.add(e), e.addEventListener("updatefound", () => {
116
+ let t = e.installing;
117
+ t && t.addEventListener("statechange", () => {
118
+ t.state === "installed" && navigator.serviceWorker.controller && (S = e, F(e));
119
+ });
120
+ }), N(), P());
121
+ }
122
+ async function L(e = {}) {
123
+ if (!("serviceWorker" in navigator)) return null;
124
+ e.onUpdate && x.add(e.onUpdate);
125
+ try {
126
+ let t = S ?? await navigator.serviceWorker.getRegistration(h) ?? await navigator.serviceWorker.register(g, {
127
+ scope: h,
128
+ updateViaCache: "none"
129
+ });
130
+ return S = t, I(t), e.onReady?.(t), t;
131
+ } catch (e) {
132
+ return t("[SW] registration failed:", e), null;
133
+ }
134
+ }
135
+ function R(e) {
136
+ x.delete(e);
137
+ }
138
+ function z(e) {
139
+ return !!e?.waiting;
140
+ }
141
+ function B(e = S) {
142
+ let t = e?.waiting;
143
+ return t ? (w = !0, k(), t.postMessage({ type: "SKIP_WAITING" }), !0) : !1;
144
+ }
145
+ function V() {
146
+ return k(), M(), !0;
147
+ }
148
+ async function H() {
149
+ if (!("serviceWorker" in navigator)) return null;
150
+ try {
151
+ let e = S ?? await navigator.serviceWorker.getRegistration(h);
152
+ return e ? (S = e, I(e), await e.update(), e) : null;
153
+ } catch (e) {
154
+ return t("[SW] update check failed:", e), null;
155
+ }
156
+ }
157
+ //#endregion
158
+ //#region src/pwa/useServiceWorkerUpdate.ts
159
+ var U = 300 * 1e3, W = 30 * 1e3;
160
+ function G() {
161
+ let [e] = performance.getEntriesByType("navigation");
162
+ return e?.type === "reload" || e?.type === "navigate";
163
+ }
164
+ function K() {
165
+ let [e, t] = i(null), a = e !== null, o = n(() => B(e) ? !0 : e ? V() : !1, [e]), s = n(() => {
166
+ t(null);
167
+ }, []);
168
+ return r(() => {
169
+ let e = !0, n = Date.now(), r = null, i = !1, a = () => G() && Date.now() - n <= W && A(), o = (e) => {
170
+ if (i) return !0;
171
+ if (!a()) return !1;
172
+ let t = B(e);
173
+ return i = t, t;
174
+ }, s = () => {
175
+ let t = Date.now() - n, i = Math.max(W - t, 0);
176
+ r = window.setTimeout(() => {
177
+ e && j();
178
+ }, i);
179
+ }, c = (n) => {
180
+ e && (o(n) || t(n));
181
+ };
182
+ async function l() {
183
+ let n = await L({ onUpdate: c });
184
+ if (!e || z(n) && o(n)) return;
185
+ let r = await H();
186
+ e && (i || z(r) && o(r) || (z(r) && t(r), s()));
187
+ }
188
+ l();
189
+ let u = window.setInterval(() => {
190
+ H().then((n) => {
191
+ e && z(n) && t(n);
192
+ });
193
+ }, U);
194
+ return () => {
195
+ e = !1, r !== null && window.clearTimeout(r), window.clearInterval(u), R(c);
196
+ };
197
+ }, []), {
198
+ hasUpdate: a,
199
+ applyUpdate: o,
200
+ dismiss: s
201
+ };
202
+ }
203
+ //#endregion
204
+ export { m as buildSwCachePolicyValue, c as normalizeSwCacheName, f as parseSwCachePolicy, p as resolveSwCacheCacheNameByPolicy, K as useServiceWorkerUpdate };
205
+
206
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/pwa/swCachePolicy.ts","../../src/pwa/serviceWorker.ts","../../src/pwa/useServiceWorkerUpdate.ts"],"sourcesContent":["export type SwCachePolicyMode = \"off\" | \"ttl\" | \"bust\";\nexport type SwCacheDurationUnit = \"ms\" | \"s\" | \"m\" | \"h\" | \"d\";\n\nexport interface ParsedSwCachePolicy {\n\tmode: SwCachePolicyMode;\n\tamount?: number;\n\tunit?: SwCacheDurationUnit;\n\tname?: string;\n\tmaxEntries?: number;\n\tresolvedMaxEntries?: number;\n\tttlMs?: number;\n\tcacheName?: string;\n}\n\nexport interface SwCachePolicyDraft {\n\tmode: SwCachePolicyMode;\n\tamount?: number;\n\tunit?: SwCacheDurationUnit;\n\tname?: string;\n\tmaxEntries?: number;\n}\n\nconst DEFAULT_ODATA_CACHE_MAX_ENTRIES = 100;\nconst MAX_ODATA_CACHE_MAX_ENTRIES = 5000;\nconst MAX_ODATA_CACHE_TTL_MS = 365 * 24 * 60 * 60 * 1000;\n\ntype DurationParseResult = {\n\tdurationLabel: string;\n\tamount?: number;\n\tunit?: SwCacheDurationUnit;\n\tttlMs: number;\n};\n\nexport function normalizeSwCacheName(value: string | undefined): string | undefined {\n\tconst normalized = value\n\t\t?.trim()\n\t\t.toLowerCase()\n\t\t.replace(/[^a-z0-9_-]+/g, \"-\")\n\t\t.replace(/^-+|-+$/g, \"\");\n\treturn normalized || undefined;\n}\n\nfunction parseDurationToken(value: string): DurationParseResult | undefined {\n\tconst normalized = value.trim().toLowerCase();\n\tif (normalized === \"forever\") {\n\t\treturn {\n\t\t\tdurationLabel: \"forever\",\n\t\t\tttlMs: Infinity\n\t\t};\n\t}\n\n\tconst match = normalized.match(/^(\\d+(?:\\.\\d+)?)(ms|s|m|h|d)$/);\n\tif (!match) return undefined;\n\n\tconst amount = Number(match[1]);\n\tconst unit = match[2] as SwCacheDurationUnit;\n\tif (!Number.isFinite(amount) || amount <= 0) return undefined;\n\n\tconst multiplierByUnit: Record<SwCacheDurationUnit, number> = {\n\t\tms: 1,\n\t\ts: 1000,\n\t\tm: 60 * 1000,\n\t\th: 60 * 60 * 1000,\n\t\td: 24 * 60 * 60 * 1000\n\t};\n\tconst ttlMs = Math.round(amount * multiplierByUnit[unit]);\n\tif (!Number.isFinite(ttlMs) || ttlMs <= 0 || ttlMs > MAX_ODATA_CACHE_TTL_MS) return undefined;\n\n\tconst durationLabel = `${match[1]}${unit}`.replace(\".\", \"_\");\n\treturn {\n\t\tdurationLabel,\n\t\tamount,\n\t\tunit,\n\t\tttlMs\n\t};\n}\n\nfunction parseMaxEntries(value: string | undefined): number | undefined {\n\tif (!value) return undefined;\n\n\tconst parsed = Number(value.trim());\n\tif (!Number.isInteger(parsed) || parsed <= 0) return undefined;\n\n\treturn Math.min(parsed, MAX_ODATA_CACHE_MAX_ENTRIES);\n}\n\nfunction createCacheName(duration: DurationParseResult, name: string | undefined, maxEntries: number | undefined) {\n\tconst cacheLabel = name ? `${name}-${duration.durationLabel}` : duration.durationLabel;\n\treturn `odata-${cacheLabel}${maxEntries ? `-max${maxEntries}` : \"\"}`;\n}\n\nexport function parseSwCachePolicy(value: string | null | undefined): ParsedSwCachePolicy | undefined {\n\tconst normalized = value?.trim();\n\tif (!normalized) return undefined;\n\tif (normalized.toLowerCase() === \"off\") return { mode: \"off\" };\n\n\tconst parts = normalized\n\t\t.split(/[;,]/)\n\t\t.map((part) => part.trim())\n\t\t.filter(Boolean);\n\tconst [modePart, ...optionParts] = parts;\n\tconst [rawMode, rawDuration] = modePart?.split(\"=\", 2) ?? [];\n\tconst mode = rawMode?.toLowerCase();\n\tif ((mode !== \"ttl\" && mode !== \"bust\") || !rawDuration) return undefined;\n\n\tconst duration = parseDurationToken(rawDuration);\n\tif (!duration) return undefined;\n\n\tconst options = new Map(\n\t\toptionParts\n\t\t\t.map((part) => part.split(\"=\", 2).map((item) => item.trim()) as [string, string | undefined])\n\t\t\t.map(([key, optionValue]) => [key.toLowerCase(), optionValue] as [string, string | undefined])\n\t\t\t.filter(([key, optionValue]) => Boolean(key && optionValue))\n\t);\n\tconst maxEntries = parseMaxEntries(options.get(\"maxentries\") ?? options.get(\"max\") ?? options.get(\"entries\"));\n\tconst name = normalizeSwCacheName(options.get(\"cachename\") ?? options.get(\"cache\") ?? options.get(\"name\"));\n\tconst resolvedMaxEntries = maxEntries ?? DEFAULT_ODATA_CACHE_MAX_ENTRIES;\n\n\treturn {\n\t\tmode,\n\t\tamount: duration.amount,\n\t\tunit: duration.unit,\n\t\tname,\n\t\tmaxEntries,\n\t\tresolvedMaxEntries,\n\t\tttlMs: duration.ttlMs,\n\t\tcacheName: createCacheName(duration, name, maxEntries)\n\t};\n}\n\nexport function resolveSwCacheCacheNameByPolicy(value: string | undefined): string | undefined {\n\tconst parsed = parseSwCachePolicy(value);\n\treturn parsed?.mode === \"ttl\" || parsed?.mode === \"bust\" ? parsed.cacheName : undefined;\n}\n\nexport function buildSwCachePolicyValue(draft: SwCachePolicyDraft): string {\n\tif (draft.mode === \"off\") return \"off\";\n\n\tconst amount = typeof draft.amount === \"number\" && Number.isFinite(draft.amount) && draft.amount > 0 ? draft.amount : 24;\n\tconst unit = draft.unit ?? \"h\";\n\tconst maxEntries =\n\t\ttypeof draft.maxEntries === \"number\" && Number.isInteger(draft.maxEntries) && draft.maxEntries > 0\n\t\t\t? Math.min(draft.maxEntries, MAX_ODATA_CACHE_MAX_ENTRIES)\n\t\t\t: undefined;\n\tconst name = normalizeSwCacheName(draft.name);\n\tconst options = [maxEntries ? `max=${maxEntries}` : undefined, name ? `name=${name}` : undefined].filter(Boolean);\n\n\treturn `${draft.mode}=${amount}${unit}${options.length ? `;${options.join(\";\")}` : \"\"}`;\n}\n","import { logError } from \"../utils\";\nimport { isRecord } from \"../validators\";\n\nconst SW_BASE = __PREVIEW__ ? \"/\" : \"/arm/\";\nconst SW_URL = `${SW_BASE}sw.js`;\nconst SW_ACTIVATED_BY_CLIENT_MESSAGE_TYPE = \"SW_ACTIVATED_BY_CLIENT\";\n// TODO: Vite env\nconst SW_UPDATE_RELOAD_COUNT_KEY = `${__APP_ID__}.service-worker.update-reload-count.v1`;\n// TODO: Vite env\nconst MAX_SW_AUTO_UPDATE_RELOADS = 5;\n\ntype SWUpdateHandler = (reg: ServiceWorkerRegistration) => void;\n\ntype ServiceWorkerClientMessage = {\n\ttype: typeof SW_ACTIVATED_BY_CLIENT_MESSAGE_TYPE;\n};\n\ntype RegisterSWOptions = {\n\t/**\n\t * Вызывается, когда новый SW установлен и ждёт активации.\n\t */\n\tonUpdate?: SWUpdateHandler;\n\n\t/**\n\t * Вызывается после успешной регистрации.\n\t */\n\tonReady?: (reg: ServiceWorkerRegistration) => void;\n};\n\nconst observedRegistrations = new WeakSet<ServiceWorkerRegistration>();\nconst updateHandlers = new Set<SWUpdateHandler>();\n\nlet latestRegistration: ServiceWorkerRegistration | null = null;\nlet refreshing = false;\nlet updateRequested = false;\nlet controllerChangeSubscribed = false;\nlet serviceWorkerMessageSubscribed = false;\n\nfunction readServiceWorkerClientMessage(value: unknown): ServiceWorkerClientMessage | null {\n\tif (!isRecord(value)) return null;\n\n\treturn value.type === SW_ACTIVATED_BY_CLIENT_MESSAGE_TYPE ? { type: SW_ACTIVATED_BY_CLIENT_MESSAGE_TYPE } : null;\n}\n\nfunction readServiceWorkerUpdateReloadCount(): number {\n\ttry {\n\t\tconst value = window.sessionStorage.getItem(SW_UPDATE_RELOAD_COUNT_KEY);\n\t\tconst count = Number(value);\n\n\t\treturn Number.isInteger(count) && count > 0 ? count : 0;\n\t} catch {\n\t\treturn 0;\n\t}\n}\n\nexport function recordServiceWorkerUpdateReload() {\n\ttry {\n\t\tconst nextCount = Math.min(readServiceWorkerUpdateReloadCount() + 1, MAX_SW_AUTO_UPDATE_RELOADS);\n\t\twindow.sessionStorage.setItem(SW_UPDATE_RELOAD_COUNT_KEY, String(nextCount));\n\t} catch {\n\t\t/**\n\t\t * sessionStorage может быть недоступен в приватном режиме или при\n\t\t * жёстких browser policy. Обновление всё равно должно продолжиться.\n\t\t */\n\t}\n}\n\nexport function canAutoApplyServiceWorkerUpdate(): boolean {\n\treturn readServiceWorkerUpdateReloadCount() < MAX_SW_AUTO_UPDATE_RELOADS;\n}\n\nexport function clearServiceWorkerUpdateReloadChain() {\n\ttry {\n\t\twindow.sessionStorage.removeItem(SW_UPDATE_RELOAD_COUNT_KEY);\n\t} catch {\n\t\t/**\n\t\t * Очистка маркера не критична: максимум пользователь увидит обычный\n\t\t * баннер вместо автоматического продолжения цепочки обновлений.\n\t\t */\n\t}\n}\n\nfunction reloadPage() {\n\tif (refreshing) return;\n\n\trefreshing = true;\n\twindow.location.reload();\n}\n\nfunction subscribeControllerChangeReload() {\n\tif (controllerChangeSubscribed) return;\n\n\tcontrollerChangeSubscribed = true;\n\n\tnavigator.serviceWorker.addEventListener(\"controllerchange\", () => {\n\t\t/**\n\t\t * Не перезагружаем страницу от любого controllerchange.\n\t\t * Перезагрузка нужна только когда мы сами вызвали SKIP_WAITING.\n\t\t */\n\t\tif (!updateRequested) return;\n\n\t\treloadPage();\n\t});\n}\n\nfunction subscribeServiceWorkerMessages() {\n\tif (serviceWorkerMessageSubscribed) return;\n\n\tserviceWorkerMessageSubscribed = true;\n\n\tnavigator.serviceWorker.addEventListener(\"message\", (event) => {\n\t\tconst message = readServiceWorkerClientMessage(event.data);\n\t\tif (!message) return;\n\t\tif (refreshing) return;\n\n\t\trecordServiceWorkerUpdateReload();\n\t\treloadPage();\n\t});\n}\n\nfunction emitUpdate(reg: ServiceWorkerRegistration) {\n\tfor (const handler of updateHandlers) {\n\t\thandler(reg);\n\t}\n}\n\nfunction observeRegistration(reg: ServiceWorkerRegistration) {\n\tif (observedRegistrations.has(reg)) return;\n\n\tobservedRegistrations.add(reg);\n\n\treg.addEventListener(\"updatefound\", () => {\n\t\tconst newWorker = reg.installing;\n\t\tif (!newWorker) return;\n\n\t\tnewWorker.addEventListener(\"statechange\", () => {\n\t\t\t/**\n\t\t\t * installed + есть controller = новая версия установлена,\n\t\t\t * но текущая страница всё ещё под старым SW.\n\t\t\t */\n\t\t\tif (newWorker.state === \"installed\" && navigator.serviceWorker.controller) {\n\t\t\t\tlatestRegistration = reg;\n\t\t\t\temitUpdate(reg);\n\t\t\t}\n\t\t});\n\t});\n\n\tsubscribeControllerChangeReload();\n\tsubscribeServiceWorkerMessages();\n}\n\nexport async function getServiceWorkerRegistration(): Promise<ServiceWorkerRegistration | null> {\n\tif (!(\"serviceWorker\" in navigator)) return null;\n\n\ttry {\n\t\tconst reg = latestRegistration ?? (await navigator.serviceWorker.getRegistration(SW_BASE));\n\n\t\tif (!reg) return null;\n\n\t\tlatestRegistration = reg;\n\t\tobserveRegistration(reg);\n\n\t\treturn reg;\n\t} catch (err) {\n\t\tlogError(\"[SW] get registration failed:\", err);\n\t\treturn null;\n\t}\n}\n\nexport async function registerServiceWorker(options: RegisterSWOptions = {}) {\n\tif (!(\"serviceWorker\" in navigator)) return null;\n\n\tif (options.onUpdate) {\n\t\tupdateHandlers.add(options.onUpdate);\n\t}\n\n\ttry {\n\t\tconst existingRegistration = latestRegistration ?? (await navigator.serviceWorker.getRegistration(SW_BASE));\n\n\t\tconst reg =\n\t\t\texistingRegistration ??\n\t\t\t(await navigator.serviceWorker.register(SW_URL, {\n\t\t\t\tscope: SW_BASE,\n\t\t\t\tupdateViaCache: \"none\"\n\t\t\t}));\n\n\t\tlatestRegistration = reg;\n\t\tobserveRegistration(reg);\n\n\t\toptions.onReady?.(reg);\n\n\t\treturn reg;\n\t} catch (err) {\n\t\tlogError(\"[SW] registration failed:\", err);\n\t\treturn null;\n\t}\n}\n\nexport function unsubscribeServiceWorkerUpdate(handler: SWUpdateHandler) {\n\tupdateHandlers.delete(handler);\n}\n\nexport function hasWaitingServiceWorker(reg: ServiceWorkerRegistration | null | undefined): reg is ServiceWorkerRegistration {\n\treturn Boolean(reg?.waiting);\n}\n\nexport function applyServiceWorkerUpdate(reg: ServiceWorkerRegistration | null = latestRegistration) {\n\tconst waiting = reg?.waiting;\n\tif (!waiting) return false;\n\n\tupdateRequested = true;\n\trecordServiceWorkerUpdateReload();\n\n\twaiting.postMessage({ type: \"SKIP_WAITING\" });\n\n\treturn true;\n}\n\nexport function reloadPageForServiceWorkerUpdate() {\n\trecordServiceWorkerUpdateReload();\n\treloadPage();\n\n\treturn true;\n}\n\nexport async function checkServiceWorkerUpdate() {\n\tif (!(\"serviceWorker\" in navigator)) return null;\n\n\ttry {\n\t\tconst reg = latestRegistration ?? (await navigator.serviceWorker.getRegistration(SW_BASE));\n\t\tif (!reg) return null;\n\n\t\tlatestRegistration = reg;\n\t\tobserveRegistration(reg);\n\n\t\tawait reg.update();\n\n\t\treturn reg;\n\t} catch (err) {\n\t\tlogError(\"[SW] update check failed:\", err);\n\t\treturn null;\n\t}\n}\n\n/**\n * Очищает SW-кеш OData для указанной политики.\n *\n * Примеры: `\"ttl=24h;name=ref\"`, `\"ttl=10m;max=200;name=ui\"`.\n *\n * После вызова следующий запрос с той же политикой пойдёт в сеть.\n */\nexport function invalidateSwCacheProfile(profile: string) {\n\tnavigator.serviceWorker?.controller?.postMessage({\n\t\ttype: \"invalidateProfile\",\n\t\tprofile\n\t});\n}\n","import { useCallback, useEffect, useState } from \"react\";\n\nimport {\n\tapplyServiceWorkerUpdate,\n\tcanAutoApplyServiceWorkerUpdate,\n\tcheckServiceWorkerUpdate,\n\tclearServiceWorkerUpdateReloadChain,\n\thasWaitingServiceWorker,\n\tregisterServiceWorker,\n\treloadPageForServiceWorkerUpdate,\n\tunsubscribeServiceWorkerUpdate\n} from \"./serviceWorker\";\n\n// TODO: Vite env\nconst SW_UPDATE_CHECK_INTERVAL_MS = 5 * 60 * 1000;\n// TODO: Vite env\nconst SW_STARTUP_AUTO_UPDATE_GRACE_MS = 30 * 1000;\n\nfunction isStartupNavigationForAutoUpdate(): boolean {\n\tconst [entry] = performance.getEntriesByType(\"navigation\") as PerformanceNavigationTiming[];\n\n\t/**\n\t * reload — пользователь явно обновил страницу.\n\t * navigate — пользователь открыл страницу по ссылке/закладке.\n\t */\n\treturn entry?.type === \"reload\" || entry?.type === \"navigate\";\n}\n\nexport function useServiceWorkerUpdate() {\n\tconst [waitingRegistration, setWaitingRegistration] = useState<ServiceWorkerRegistration | null>(null);\n\n\tconst hasUpdate = waitingRegistration !== null;\n\n\tconst applyUpdate = useCallback(() => {\n\t\tif (applyServiceWorkerUpdate(waitingRegistration)) return true;\n\t\tif (!waitingRegistration) return false;\n\n\t\t/**\n\t\t * Если другой клиент уже активировал waiting worker, в текущей вкладке\n\t\t * registration.waiting станет пустым, но баннер ещё может быть видимым.\n\t\t */\n\t\treturn reloadPageForServiceWorkerUpdate();\n\t}, [waitingRegistration]);\n\n\tconst dismiss = useCallback(() => {\n\t\tsetWaitingRegistration(null);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (__DEV__) return;\n\n\t\tlet isActive = true;\n\t\tconst startupStartedAt = Date.now();\n\t\tlet startupResetTimerId: number | null = null;\n\t\tlet startupUpdateApplied = false;\n\n\t\tconst canApplyStartupUpdate = () =>\n\t\t\tisStartupNavigationForAutoUpdate() &&\n\t\t\tDate.now() - startupStartedAt <= SW_STARTUP_AUTO_UPDATE_GRACE_MS &&\n\t\t\tcanAutoApplyServiceWorkerUpdate();\n\n\t\tconst tryApplyStartupUpdate = (reg: ServiceWorkerRegistration) => {\n\t\t\tif (startupUpdateApplied) return true;\n\t\t\tif (!canApplyStartupUpdate()) return false;\n\n\t\t\tconst applied = applyServiceWorkerUpdate(reg);\n\t\t\tstartupUpdateApplied = applied;\n\n\t\t\treturn applied;\n\t\t};\n\n\t\tconst scheduleStartupChainReset = () => {\n\t\t\tconst elapsedMs = Date.now() - startupStartedAt;\n\t\t\tconst timeoutMs = Math.max(SW_STARTUP_AUTO_UPDATE_GRACE_MS - elapsedMs, 0);\n\n\t\t\tstartupResetTimerId = window.setTimeout(() => {\n\t\t\t\tif (!isActive) return;\n\n\t\t\t\tclearServiceWorkerUpdateReloadChain();\n\t\t\t}, timeoutMs);\n\t\t};\n\n\t\tconst handleUpdate = (reg: ServiceWorkerRegistration) => {\n\t\t\tif (!isActive) return;\n\n\t\t\t/**\n\t\t\t * Если update найден вскоре после reload/navigate, применяем его\n\t\t\t * автоматически. Это закрывает цепочку из нескольких деплоев,\n\t\t\t * накопленных во время простоя вкладки.\n\t\t\t */\n\t\t\tif (tryApplyStartupUpdate(reg)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Если update найден уже во время активной сессии —\n\t\t\t * показываем баннер.\n\t\t\t */\n\t\t\tsetWaitingRegistration(reg);\n\t\t};\n\n\t\tasync function init() {\n\t\t\tconst reg = await registerServiceWorker({\n\t\t\t\tonUpdate: handleUpdate\n\t\t\t});\n\n\t\t\tif (!isActive) return;\n\n\t\t\t/**\n\t\t\t * Важный сценарий:\n\t\t\t * пользователь перезагрузил страницу, а новый SW уже был в waiting.\n\t\t\t * В этом случае не показываем баннер, а применяем update сразу.\n\t\t\t */\n\t\t\tif (hasWaitingServiceWorker(reg) && tryApplyStartupUpdate(reg)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst checkedReg = await checkServiceWorkerUpdate();\n\n\t\t\tif (!isActive) return;\n\t\t\tif (startupUpdateApplied) return;\n\n\t\t\tif (hasWaitingServiceWorker(checkedReg) && tryApplyStartupUpdate(checkedReg)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (hasWaitingServiceWorker(checkedReg)) {\n\t\t\t\tsetWaitingRegistration(checkedReg);\n\t\t\t}\n\n\t\t\tscheduleStartupChainReset();\n\t\t}\n\n\t\tvoid init();\n\n\t\tconst intervalId = window.setInterval(() => {\n\t\t\tvoid checkServiceWorkerUpdate().then((reg) => {\n\t\t\t\tif (!isActive) return;\n\n\t\t\t\tif (hasWaitingServiceWorker(reg)) {\n\t\t\t\t\tsetWaitingRegistration(reg);\n\t\t\t\t}\n\t\t\t});\n\t\t}, SW_UPDATE_CHECK_INTERVAL_MS);\n\n\t\treturn () => {\n\t\t\tisActive = false;\n\t\t\tif (startupResetTimerId !== null) {\n\t\t\t\twindow.clearTimeout(startupResetTimerId);\n\t\t\t}\n\t\t\twindow.clearInterval(intervalId);\n\t\t\tunsubscribeServiceWorkerUpdate(handleUpdate);\n\t\t};\n\t}, []);\n\n\treturn {\n\t\thasUpdate,\n\t\tapplyUpdate,\n\t\tdismiss\n\t};\n}\n"],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ type SWUpdateHandler = (reg: ServiceWorkerRegistration) => void;
2
+ type RegisterSWOptions = {
3
+ /**
4
+ * Вызывается, когда новый SW установлен и ждёт активации.
5
+ */
6
+ onUpdate?: SWUpdateHandler;
7
+ /**
8
+ * Вызывается после успешной регистрации.
9
+ */
10
+ onReady?: (reg: ServiceWorkerRegistration) => void;
11
+ };
12
+ export declare function recordServiceWorkerUpdateReload(): void;
13
+ export declare function canAutoApplyServiceWorkerUpdate(): boolean;
14
+ export declare function clearServiceWorkerUpdateReloadChain(): void;
15
+ export declare function getServiceWorkerRegistration(): Promise<ServiceWorkerRegistration | null>;
16
+ export declare function registerServiceWorker(options?: RegisterSWOptions): Promise<ServiceWorkerRegistration | null>;
17
+ export declare function unsubscribeServiceWorkerUpdate(handler: SWUpdateHandler): void;
18
+ export declare function hasWaitingServiceWorker(reg: ServiceWorkerRegistration | null | undefined): reg is ServiceWorkerRegistration;
19
+ export declare function applyServiceWorkerUpdate(reg?: ServiceWorkerRegistration | null): boolean;
20
+ export declare function reloadPageForServiceWorkerUpdate(): boolean;
21
+ export declare function checkServiceWorkerUpdate(): Promise<ServiceWorkerRegistration | null>;
22
+ /**
23
+ * Очищает SW-кеш OData для указанной политики.
24
+ *
25
+ * Примеры: `"ttl=24h;name=ref"`, `"ttl=10m;max=200;name=ui"`.
26
+ *
27
+ * После вызова следующий запрос с той же политикой пойдёт в сеть.
28
+ */
29
+ export declare function invalidateSwCacheProfile(profile: string): void;
30
+ export {};
31
+ //# sourceMappingURL=serviceWorker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serviceWorker.d.ts","sourceRoot":"","sources":["../../src/pwa/serviceWorker.ts"],"names":[],"mappings":"AAWA,KAAK,eAAe,GAAG,CAAC,GAAG,EAAE,yBAAyB,KAAK,IAAI,CAAC;AAMhE,KAAK,iBAAiB,GAAG;IACxB;;OAEG;IACH,QAAQ,CAAC,EAAE,eAAe,CAAC;IAE3B;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,yBAAyB,KAAK,IAAI,CAAC;CACnD,CAAC;AA4BF,wBAAgB,+BAA+B,SAU9C;AAED,wBAAgB,+BAA+B,IAAI,OAAO,CAEzD;AAED,wBAAgB,mCAAmC,SASlD;AAuED,wBAAsB,4BAA4B,IAAI,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAgB9F;AAED,wBAAsB,qBAAqB,CAAC,OAAO,GAAE,iBAAsB,6CA2B1E;AAED,wBAAgB,8BAA8B,CAAC,OAAO,EAAE,eAAe,QAEtE;AAED,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,yBAAyB,GAAG,IAAI,GAAG,SAAS,GAAG,GAAG,IAAI,yBAAyB,CAE3H;AAED,wBAAgB,wBAAwB,CAAC,GAAG,GAAE,yBAAyB,GAAG,IAAyB,WAUlG;AAED,wBAAgB,gCAAgC,YAK/C;AAED,wBAAsB,wBAAwB,8CAiB7C;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,QAKvD"}
@@ -0,0 +1,24 @@
1
+ export type SwCachePolicyMode = "off" | "ttl" | "bust";
2
+ export type SwCacheDurationUnit = "ms" | "s" | "m" | "h" | "d";
3
+ export interface ParsedSwCachePolicy {
4
+ mode: SwCachePolicyMode;
5
+ amount?: number;
6
+ unit?: SwCacheDurationUnit;
7
+ name?: string;
8
+ maxEntries?: number;
9
+ resolvedMaxEntries?: number;
10
+ ttlMs?: number;
11
+ cacheName?: string;
12
+ }
13
+ export interface SwCachePolicyDraft {
14
+ mode: SwCachePolicyMode;
15
+ amount?: number;
16
+ unit?: SwCacheDurationUnit;
17
+ name?: string;
18
+ maxEntries?: number;
19
+ }
20
+ export declare function normalizeSwCacheName(value: string | undefined): string | undefined;
21
+ export declare function parseSwCachePolicy(value: string | null | undefined): ParsedSwCachePolicy | undefined;
22
+ export declare function resolveSwCacheCacheNameByPolicy(value: string | undefined): string | undefined;
23
+ export declare function buildSwCachePolicyValue(draft: SwCachePolicyDraft): string;
24
+ //# sourceMappingURL=swCachePolicy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swCachePolicy.d.ts","sourceRoot":"","sources":["../../src/pwa/swCachePolicy.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC;AACvD,MAAM,MAAM,mBAAmB,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAE/D,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IAClC,IAAI,EAAE,iBAAiB,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,mBAAmB,CAAC;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAOlF;AAmDD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,mBAAmB,GAAG,SAAS,CAqCpG;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAG7F;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,kBAAkB,GAAG,MAAM,CAazE"}
@@ -0,0 +1,6 @@
1
+ export declare function useServiceWorkerUpdate(): {
2
+ hasUpdate: boolean;
3
+ applyUpdate: () => boolean;
4
+ dismiss: () => void;
5
+ };
6
+ //# sourceMappingURL=useServiceWorkerUpdate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useServiceWorkerUpdate.d.ts","sourceRoot":"","sources":["../../src/pwa/useServiceWorkerUpdate.ts"],"names":[],"mappings":"AA4BA,wBAAgB,sBAAsB;;;;EAoIrC"}
@@ -0,0 +1,23 @@
1
+ import type { QueryClient, QueryKey } from "@tanstack/react-query";
2
+ type CacheSyncEvent = {
3
+ type: "invalidate";
4
+ keys: QueryKey[];
5
+ refetchType?: "none" | "all" | "active" | "inactive";
6
+ } | {
7
+ type: "setQueryData";
8
+ key: QueryKey;
9
+ data: unknown;
10
+ };
11
+ type InstallBroadcastOptions = {
12
+ queriesChannel: string;
13
+ eventsChannel: string;
14
+ };
15
+ type InstalledReactQueryBroadcast = {
16
+ broadcast: (event: CacheSyncEvent) => void;
17
+ cleanup: () => void;
18
+ };
19
+ export declare function setBroadcastFn(fn: (event: CacheSyncEvent) => void): void;
20
+ export declare function broadcastCacheEvent(event: CacheSyncEvent): void;
21
+ export declare function installReactQueryBroadcast(queryClient: QueryClient, opts: InstallBroadcastOptions): InstalledReactQueryBroadcast;
22
+ export {};
23
+ //# sourceMappingURL=broadcast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/query-client/broadcast.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEnE,KAAK,cAAc,GAChB;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,CAAA;CAAE,GAC9F;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,GAAG,EAAE,QAAQ,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC;AAE1D,KAAK,uBAAuB,GAAG;IAC9B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,4BAA4B,GAAG;IACnC,SAAS,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;CACpB,CAAC;AASF,wBAAgB,cAAc,CAAC,EAAE,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,QAEjE;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,QAExD;AAED,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,WAAW,EAAE,IAAI,EAAE,uBAAuB,GAAG,4BAA4B,CAmEhI"}
@@ -0,0 +1,5 @@
1
+ export * from "./broadcast";
2
+ export * from "./persistence";
3
+ export * from "./queryPersistenceAdapter";
4
+ export * from "./queryClient";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/query-client/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC"}
@@ -0,0 +1,204 @@
1
+ import { i as e } from "../chunks/isRecord-DXDTW-jA.js";
2
+ import { uuidv4 as t } from "../crypto/index.js";
3
+ import { broadcastQueryClient as n } from "@tanstack/query-broadcast-client-experimental";
4
+ import { experimental_createQueryPersister as r } from "@tanstack/query-persist-client-core";
5
+ import { MutationCache as i, QueryCache as a, QueryClient as o } from "@tanstack/react-query";
6
+ //#region src/query-client/broadcast.ts
7
+ var s = null;
8
+ function c(e) {
9
+ s = e;
10
+ }
11
+ function l(e) {
12
+ s?.(e);
13
+ }
14
+ function u(e, r) {
15
+ if (typeof window > "u") return {
16
+ broadcast: () => {},
17
+ cleanup: () => {}
18
+ };
19
+ let i = !1, a = n({
20
+ queryClient: e,
21
+ broadcastChannel: r.queriesChannel
22
+ }), o = t(), s = new BroadcastChannel(r.eventsChannel), c = e.getQueryCache().subscribe((e) => {
23
+ i || e.type !== "updated" || e.action.type !== "invalidate" || l({
24
+ type: "invalidate",
25
+ keys: [e.query.queryKey],
26
+ refetchType: "none"
27
+ });
28
+ });
29
+ s.onmessage = (t) => {
30
+ let n = t.data;
31
+ if (!d(n) || n.tabId === o) return;
32
+ let r = n.event;
33
+ i = !0;
34
+ try {
35
+ if (r.type === "invalidate") {
36
+ let t = r.refetchType ?? "none";
37
+ for (let n of r.keys) e.invalidateQueries({
38
+ queryKey: n,
39
+ refetchType: t
40
+ });
41
+ return;
42
+ }
43
+ if (r.type === "setQueryData") {
44
+ e.setQueryData(r.key, r.data);
45
+ return;
46
+ }
47
+ } finally {
48
+ i = !1;
49
+ }
50
+ };
51
+ function l(e) {
52
+ let t = {
53
+ tabId: o,
54
+ event: e
55
+ };
56
+ s.postMessage(t);
57
+ }
58
+ return {
59
+ broadcast: l,
60
+ cleanup: () => {
61
+ c(), a(), s.close();
62
+ }
63
+ };
64
+ }
65
+ function d(t) {
66
+ return !e(t) || typeof t.tabId != "string" || !("event" in t) ? !1 : f(t.event);
67
+ }
68
+ function f(t) {
69
+ return e(t) ? t.type === "invalidate" ? Array.isArray(t.keys) ? t.refetchType === void 0 ? !0 : t.refetchType === "none" || t.refetchType === "active" || t.refetchType === "inactive" || t.refetchType === "all" : !1 : t.type === "setQueryData" ? "key" in t && "data" in t : !1 : !1;
70
+ }
71
+ //#endregion
72
+ //#region src/query-client/queryPersistenceAdapter.ts
73
+ var p = {};
74
+ function m(e) {
75
+ p = e;
76
+ }
77
+ function h() {
78
+ return p;
79
+ }
80
+ //#endregion
81
+ //#region src/query-client/persistence.ts
82
+ var g = "queries", _ = "react-foundation-lib-query-v1", v = 2160 * 60 * 60 * 1e3, y = { persist: !0 };
83
+ function b(e) {
84
+ if (e) return e;
85
+ if (globalThis.indexedDB !== void 0) return globalThis.indexedDB;
86
+ }
87
+ function x(e) {
88
+ return new Promise((t, n) => {
89
+ e.onsuccess = () => t(e.result), e.onerror = () => n(e.error);
90
+ });
91
+ }
92
+ function S() {
93
+ return h().resolveSystemIdentifier?.() || `react-foundation-lib:${typeof window > "u" ? "server" : window.location.hostname}`;
94
+ }
95
+ function C() {
96
+ return `${S()}`;
97
+ }
98
+ function w(e) {
99
+ return e.meta?.persist === !0;
100
+ }
101
+ function T(e = {}) {
102
+ let t = b(e.indexedDB);
103
+ if (!t) return;
104
+ let n = t, r = e.dbName ?? S(), i = e.storeName ?? g, a = null;
105
+ function o() {
106
+ return a || (a = new Promise((e, t) => {
107
+ let a = n.open(r, 1);
108
+ a.onupgradeneeded = () => {
109
+ let e = a.result;
110
+ e.objectStoreNames.contains(i) || e.createObjectStore(i);
111
+ }, a.onsuccess = () => e(a.result), a.onerror = () => t(a.error), a.onblocked = () => t(a.error ?? /* @__PURE__ */ Error("Открытие IndexedDB заблокировано"));
112
+ }), a);
113
+ }
114
+ async function s(e, t) {
115
+ return x(t((await o()).transaction(i, e).objectStore(i)));
116
+ }
117
+ async function c(e, t) {
118
+ let n = await o();
119
+ return new Promise((r, a) => {
120
+ let o = n.transaction(i, e), s = o.objectStore(i);
121
+ o.oncomplete = () => r(), o.onerror = () => a(o.error), o.onabort = () => a(o.error);
122
+ try {
123
+ t(s);
124
+ } catch (e) {
125
+ o.abort(), a(e);
126
+ }
127
+ });
128
+ }
129
+ return {
130
+ getItem: (e) => s("readonly", (t) => t.get(e)),
131
+ setItem: (e, t) => c("readwrite", (n) => n.put(t, e)),
132
+ removeItem: (e) => c("readwrite", (t) => t.delete(e)),
133
+ entries: async () => {
134
+ let e = await o();
135
+ return new Promise((t, n) => {
136
+ let r = e.transaction(i, "readonly"), a = r.objectStore(i).openCursor(), o = [];
137
+ r.oncomplete = () => t(o), r.onerror = () => n(r.error), r.onabort = () => n(r.error), a.onsuccess = () => {
138
+ let e = a.result;
139
+ e && (o.push([String(e.key), e.value]), e.continue());
140
+ }, a.onerror = () => n(a.error);
141
+ });
142
+ }
143
+ };
144
+ }
145
+ function E() {
146
+ let e = T();
147
+ if (e) return r({
148
+ storage: e,
149
+ serialize: (e) => e,
150
+ deserialize: (e) => e,
151
+ prefix: C(),
152
+ buster: h().persistenceBuster ?? "react-foundation-lib-query-v1",
153
+ maxAge: v,
154
+ refetchOnRestore: !0,
155
+ filters: { predicate: w }
156
+ });
157
+ }
158
+ //#endregion
159
+ //#region src/query-client/queryClient.ts
160
+ function D({ onQueryError: e, onMutationError: t }) {
161
+ let n = E();
162
+ return new o({
163
+ queryCache: new a({ onError: e }),
164
+ mutationCache: new i({ onError: t }),
165
+ defaultOptions: {
166
+ queries: {
167
+ staleTime: 600 * 1e3,
168
+ gcTime: 1800 * 1e3,
169
+ throwOnError: !1,
170
+ retry: !1,
171
+ ...n ? { persister: n.persisterFn } : {}
172
+ },
173
+ mutations: {
174
+ throwOnError: !1,
175
+ retry: !1
176
+ }
177
+ }
178
+ });
179
+ }
180
+ async function O(e, t, n) {
181
+ await e.cancelQueries({ queryKey: t });
182
+ let r = e.getQueryData(t);
183
+ return e.setQueryData(t, n), { previous: r };
184
+ }
185
+ function k(e, t, n) {
186
+ n?.previous !== void 0 && e.setQueryData(t, n.previous);
187
+ }
188
+ function A(e, t, n, r) {
189
+ e.setQueryData(t, (e) => r(e, n));
190
+ }
191
+ async function j(e, t, n) {
192
+ let r = n?.refetchType ?? "none", i = M(t) ? t : [t];
193
+ await Promise.all(i.map((t) => e.invalidateQueries({
194
+ queryKey: t,
195
+ refetchType: r
196
+ })));
197
+ }
198
+ function M(e) {
199
+ return Array.isArray(e) ? Array.isArray(e[0]) : !1;
200
+ }
201
+ //#endregion
202
+ export { _ as REACT_QUERY_PERSISTENCE_BUSTER, v as REACT_QUERY_PERSISTENCE_MAX_AGE, l as broadcastCacheEvent, m as configureQueryPersistenceProjectAdapter, T as createIndexedDbQueryStorage, D as createQueryClient, E as createReactQueryPersister, h as getQueryPersistenceProjectAdapter, u as installReactQueryBroadcast, k as onErrorOptimistic, O as onMutateOptimistic, j as onSettledOptimistic, A as onSuccessOptimistic, y as persistedQueryMeta, c as setBroadcastFn, w as shouldPersistQuery };
203
+
204
+ //# sourceMappingURL=index.js.map