@ryuzaki13/react-foundation-lib 2.31.0 → 2.31.3
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.
- package/README.md +17 -5
- package/dist/analytical-table/definition/analyticalDefinitionConstants.d.ts +17 -0
- package/dist/analytical-table/definition/analyticalDefinitionConstants.d.ts.map +1 -0
- package/dist/analytical-table/definition/compileAnalyticalTableDefinition.d.ts.map +1 -1
- package/dist/analytical-table/definition/types.d.ts +6 -5
- package/dist/analytical-table/definition/types.d.ts.map +1 -1
- package/dist/analytical-table/dynamic-columns/analyticalDateColumnConstants.d.ts +7 -0
- package/dist/analytical-table/dynamic-columns/analyticalDateColumnConstants.d.ts.map +1 -0
- package/dist/analytical-table/dynamic-columns/dateColumns.d.ts.map +1 -1
- package/dist/analytical-table/dynamic-columns/types.d.ts +2 -1
- package/dist/analytical-table/dynamic-columns/types.d.ts.map +1 -1
- package/dist/analytical-table/index.js +124 -113
- package/dist/analytical-table/index.js.map +1 -1
- package/dist/analytical-table/projections/analyticalExportConstants.d.ts +7 -0
- package/dist/analytical-table/projections/analyticalExportConstants.d.ts.map +1 -0
- package/dist/analytical-table/projections/expansion.d.ts +2 -1
- package/dist/analytical-table/projections/expansion.d.ts.map +1 -1
- package/dist/analytical-table/projections/exportProjection.d.ts.map +1 -1
- package/dist/analytical-table/projections/types.d.ts +3 -2
- package/dist/analytical-table/projections/types.d.ts.map +1 -1
- package/dist/analytical-table/runtime/aggregation.d.ts.map +1 -1
- package/dist/analytical-table/runtime/analyticalRowConstants.d.ts +4 -0
- package/dist/analytical-table/runtime/analyticalRowConstants.d.ts.map +1 -0
- package/dist/analytical-table/runtime/analyticalViewConstants.d.ts +16 -0
- package/dist/analytical-table/runtime/analyticalViewConstants.d.ts.map +1 -0
- package/dist/analytical-table/runtime/buildGroupedModel.d.ts.map +1 -1
- package/dist/analytical-table/runtime/filtering.d.ts.map +1 -1
- package/dist/analytical-table/runtime/grouping.d.ts.map +1 -1
- package/dist/analytical-table/runtime/hierarchy.d.ts +2 -1
- package/dist/analytical-table/runtime/hierarchy.d.ts.map +1 -1
- package/dist/analytical-table/runtime/totals.d.ts +2 -2
- package/dist/analytical-table/runtime/totals.d.ts.map +1 -1
- package/dist/analytical-table/runtime/types.d.ts +5 -3
- package/dist/analytical-table/runtime/types.d.ts.map +1 -1
- package/dist/analytical-table/runtime/valueComparison.d.ts.map +1 -1
- package/dist/array/index.js +1 -1
- package/dist/array/reorder.d.ts +6 -1
- package/dist/array/reorder.d.ts.map +1 -1
- package/dist/async-task-runner/createCoalescingTaskRunner.d.ts.map +1 -1
- package/dist/async-task-runner/createDeadlineTimer.d.ts.map +1 -1
- package/dist/async-task-runner/index.js +39 -36
- package/dist/async-task-runner/index.js.map +1 -1
- package/dist/async-task-runner/nativeTimerConstants.d.ts +3 -0
- package/dist/async-task-runner/nativeTimerConstants.d.ts.map +1 -0
- package/dist/binary/base64Constants.d.ts +6 -0
- package/dist/binary/base64Constants.d.ts.map +1 -0
- package/dist/binary/binaryToBlob.d.ts.map +1 -1
- package/dist/binary/getBase64DecodedSize.d.ts.map +1 -1
- package/dist/binary/index.js +95 -70
- package/dist/binary/index.js.map +1 -1
- package/dist/browser-notifications/browserNotificationConstants.d.ts +3 -0
- package/dist/browser-notifications/browserNotificationConstants.d.ts.map +1 -0
- package/dist/browser-notifications/browserNotificationTypes.d.ts +2 -1
- package/dist/browser-notifications/browserNotificationTypes.d.ts.map +1 -1
- package/dist/browser-notifications/createBrowserNotificationPresenter.d.ts.map +1 -1
- package/dist/browser-notifications/index.js +38 -37
- package/dist/browser-notifications/index.js.map +1 -1
- package/dist/chunks/{array-D-_yMMUK.js → array-bd7LYFto.js} +1 -3
- package/dist/chunks/{array-D-_yMMUK.js.map → array-bd7LYFto.js.map} +1 -1
- package/dist/chunks/{dom-BK22UmgF.js → dom-ZSeWZ0Gg.js} +103 -98
- package/dist/chunks/dom-ZSeWZ0Gg.js.map +1 -0
- package/dist/chunks/formatDate-CNPcfNte.js +133 -0
- package/dist/chunks/formatDate-CNPcfNte.js.map +1 -0
- package/dist/chunks/{formatters-CZnnbdud.js → formatters-CO40zvVB.js} +496 -496
- package/dist/chunks/formatters-CO40zvVB.js.map +1 -0
- package/dist/chunks/{formulas-BXT_XBWI.js → formulas-Y0HOcFhe.js} +90 -86
- package/dist/chunks/formulas-Y0HOcFhe.js.map +1 -0
- package/dist/chunks/hasSignatureBytes-D2wO_Myl.js +11 -0
- package/dist/chunks/hasSignatureBytes-D2wO_Myl.js.map +1 -0
- package/dist/chunks/keyboardConstants-BZKskWsm.js +6 -0
- package/dist/chunks/keyboardConstants-BZKskWsm.js.map +1 -0
- package/dist/chunks/media-imBOXWwa.js +192 -0
- package/dist/chunks/media-imBOXWwa.js.map +1 -0
- package/dist/chunks/mimeTypeConstants-BzONV-b1.js +6 -0
- package/dist/chunks/mimeTypeConstants-BzONV-b1.js.map +1 -0
- package/dist/chunks/{query-client-CVRfrYZM.js → query-client-D0HQZ84w.js} +142 -142
- package/dist/chunks/query-client-D0HQZ84w.js.map +1 -0
- package/dist/chunks/scalarTypeClassification-D4YcGxtQ.js +766 -0
- package/dist/chunks/scalarTypeClassification-D4YcGxtQ.js.map +1 -0
- package/dist/chunks/scalarTypeConstants-CnSsjpGO.js +6 -0
- package/dist/chunks/scalarTypeConstants-CnSsjpGO.js.map +1 -0
- package/dist/chunks/utils-DW0Yso1Q.js +210 -0
- package/dist/chunks/utils-DW0Yso1Q.js.map +1 -0
- package/dist/chunks/{uuid-CUJPAbRY.js → uuid-izDzLv18.js} +1 -2
- package/dist/chunks/uuid-izDzLv18.js.map +1 -0
- package/dist/chunks/validate-8URYKKly.js +613 -0
- package/dist/chunks/validate-8URYKKly.js.map +1 -0
- package/dist/copy/index.js +5 -5
- package/dist/copy/index.js.map +1 -1
- package/dist/copy/useCopyFeedback.d.ts.map +1 -1
- package/dist/crypto/hashString.d.ts.map +1 -1
- package/dist/crypto/hexadecimalConstants.d.ts +3 -0
- package/dist/crypto/hexadecimalConstants.d.ts.map +1 -0
- package/dist/crypto/index.js +25 -24
- package/dist/crypto/index.js.map +1 -1
- package/dist/crypto/uuid.d.ts.map +1 -1
- package/dist/date-segments/index.js +81 -81
- package/dist/date-segments/index.js.map +1 -1
- package/dist/date-segments/mask.d.ts +13 -3
- package/dist/date-segments/mask.d.ts.map +1 -1
- package/dist/decimal/decimalConstants.d.ts +3 -0
- package/dist/decimal/decimalConstants.d.ts.map +1 -0
- package/dist/decimal/index.js +0 -2
- package/dist/decimal/index.js.map +1 -1
- package/dist/decimal/normalizeDecimal.d.ts.map +1 -1
- package/dist/decimal/normalizeDecimalLiteral.d.ts.map +1 -1
- package/dist/decimal/resolveDecimalMaxLength.d.ts.map +1 -1
- package/dist/decimal/sumDecimals.d.ts.map +1 -1
- package/dist/decimal/writeDecimalParts.d.ts.map +1 -1
- package/dist/dom/document-scroll/acquireDocumentScrollLock.d.ts.map +1 -1
- package/dist/dom/document-scroll/attachDocumentTouchScrollGuard.d.ts.map +1 -1
- package/dist/dom/document-scroll/canConsumeVerticalTouchScroll.d.ts.map +1 -1
- package/dist/dom/domEventConstants.d.ts +4 -0
- package/dist/dom/domEventConstants.d.ts.map +1 -0
- package/dist/dom/domScrollConstants.d.ts +3 -0
- package/dist/dom/domScrollConstants.d.ts.map +1 -0
- package/dist/dom/index.js +1 -1
- package/dist/dom/installFaviconOverride.d.ts.map +1 -1
- package/dist/dom/overlayFocusConstants.d.ts +4 -0
- package/dist/dom/overlayFocusConstants.d.ts.map +1 -0
- package/dist/dom/scroll-anchor/captureScrollAnchor.d.ts.map +1 -1
- package/dist/dom/useClickOutside.d.ts +1 -1
- package/dist/dom/useClickOutside.d.ts.map +1 -1
- package/dist/dom/useEscapeDismiss.d.ts +1 -1
- package/dist/dom/useEscapeDismiss.d.ts.map +1 -1
- package/dist/dom/useFocusTrap.d.ts.map +1 -1
- package/dist/dom/useIsTouchDevice.d.ts.map +1 -1
- package/dist/dom/useOverlayFocus.d.ts +3 -2
- package/dist/dom/useOverlayFocus.d.ts.map +1 -1
- package/dist/dom/visual-viewport/attachVisualViewportFrame.d.ts.map +1 -1
- package/dist/error-report/breadcrumbs.d.ts.map +1 -1
- package/dist/error-report/capture.d.ts.map +1 -1
- package/dist/error-report/captureOptions.d.ts +3 -2
- package/dist/error-report/captureOptions.d.ts.map +1 -1
- package/dist/error-report/capturePolicyConstants.d.ts +4 -0
- package/dist/error-report/capturePolicyConstants.d.ts.map +1 -0
- package/dist/error-report/dataPreview.d.ts.map +1 -1
- package/dist/error-report/diagnostics.d.ts.map +1 -1
- package/dist/error-report/drafts.d.ts.map +1 -1
- package/dist/error-report/environment.d.ts.map +1 -1
- package/dist/error-report/errorInfo.d.ts.map +1 -1
- package/dist/error-report/errorReportCaptureLimits.d.ts +26 -0
- package/dist/error-report/errorReportCaptureLimits.d.ts.map +1 -0
- package/dist/error-report/errorReportContractConstants.d.ts +32 -0
- package/dist/error-report/errorReportContractConstants.d.ts.map +1 -0
- package/dist/error-report/index.js +586 -587
- package/dist/error-report/index.js.map +1 -1
- package/dist/error-report/payload.d.ts.map +1 -1
- package/dist/error-report/queue.d.ts.map +1 -1
- package/dist/error-report/queueContract.d.ts +7 -6
- package/dist/error-report/queueContract.d.ts.map +1 -1
- package/dist/error-report/queueRecord.d.ts.map +1 -1
- package/dist/error-report/queueResultConstants.d.ts +14 -0
- package/dist/error-report/queueResultConstants.d.ts.map +1 -0
- package/dist/error-report/runtimeDeduplication.d.ts +2 -1
- package/dist/error-report/runtimeDeduplication.d.ts.map +1 -1
- package/dist/error-report/safeValue.d.ts.map +1 -1
- package/dist/error-report/safeValueMarkerConstants.d.ts +16 -0
- package/dist/error-report/safeValueMarkerConstants.d.ts.map +1 -0
- package/dist/error-report/schema.d.ts.map +1 -1
- package/dist/error-report/types.d.ts +10 -8
- package/dist/error-report/types.d.ts.map +1 -1
- package/dist/error-report-source-maps/archive.d.ts.map +1 -1
- package/dist/error-report-source-maps/artifact.d.ts.map +1 -1
- package/dist/error-report-source-maps/index.js +238 -238
- package/dist/error-report-source-maps/index.js.map +1 -1
- package/dist/error-report-source-maps/manifest.d.ts.map +1 -1
- package/dist/error-report-source-maps/package.d.ts.map +1 -1
- package/dist/error-report-source-maps/sourceMapArtifactConstants.d.ts +11 -0
- package/dist/error-report-source-maps/sourceMapArtifactConstants.d.ts.map +1 -0
- package/dist/error-report-source-maps/symbolicate.d.ts.map +1 -1
- package/dist/error-report-source-maps/symbolicationResultConstants.d.ts +6 -0
- package/dist/error-report-source-maps/symbolicationResultConstants.d.ts.map +1 -0
- package/dist/error-report-source-maps/types.d.ts +4 -2
- package/dist/error-report-source-maps/types.d.ts.map +1 -1
- package/dist/excel/excel.d.ts.map +1 -1
- package/dist/excel/excelWorkbookConstants.d.ts +6 -0
- package/dist/excel/excelWorkbookConstants.d.ts.map +1 -0
- package/dist/excel/index.js +121 -120
- package/dist/excel/index.js.map +1 -1
- package/dist/excel/matrixWorkbook.d.ts +6 -1
- package/dist/excel/matrixWorkbook.d.ts.map +1 -1
- package/dist/excel/tableExport.d.ts +2 -2
- package/dist/excel/tableExport.d.ts.map +1 -1
- package/dist/file/checkFileSignature.d.ts.map +1 -1
- package/dist/file/contentDisposition.d.ts.map +1 -1
- package/dist/file/fileSignatureConstants.d.ts +14 -18
- package/dist/file/fileSignatureConstants.d.ts.map +1 -1
- package/dist/file/fileSignatureTypes.d.ts +3 -3
- package/dist/file/fileSignatureTypes.d.ts.map +1 -1
- package/dist/file/image/imageReadConstants.d.ts +3 -0
- package/dist/file/image/imageReadConstants.d.ts.map +1 -0
- package/dist/file/image/readImageFile.d.ts +3 -2
- package/dist/file/image/readImageFile.d.ts.map +1 -1
- package/dist/file/image/types.d.ts +5 -3
- package/dist/file/image/types.d.ts.map +1 -1
- package/dist/file/index.js +139 -165
- package/dist/file/index.js.map +1 -1
- package/dist/file/mimeType.d.ts.map +1 -1
- package/dist/file/mimeTypeConstants.d.ts +18 -0
- package/dist/file/mimeTypeConstants.d.ts.map +1 -0
- package/dist/file/read-file/assert.d.ts.map +1 -1
- package/dist/file/read-file/readFile.d.ts +3 -11
- package/dist/file/read-file/readFile.d.ts.map +1 -1
- package/dist/file/read-file/readFileConstants.d.ts +13 -0
- package/dist/file/read-file/readFileConstants.d.ts.map +1 -0
- package/dist/file/read-file/types.d.ts +7 -6
- package/dist/file/read-file/types.d.ts.map +1 -1
- package/dist/file/signature/checkArchiveSignature.d.ts.map +1 -1
- package/dist/file-system/fileSystemConstants.d.ts +5 -0
- package/dist/file-system/fileSystemConstants.d.ts.map +1 -0
- package/dist/file-system/fileSystemTypes.d.ts +2 -1
- package/dist/file-system/fileSystemTypes.d.ts.map +1 -1
- package/dist/file-system/index.js +11 -10
- package/dist/file-system/index.js.map +1 -1
- package/dist/file-system/resolvePathInsideRoot.d.ts.map +1 -1
- package/dist/formatters/boolean/parseAbapBoolean.d.ts.map +1 -1
- package/dist/formatters/boolean/toAbapBoolean.d.ts.map +1 -1
- package/dist/formatters/date/calendarDate.d.ts.map +1 -1
- package/dist/formatters/date/calendarDateConstants.d.ts +13 -0
- package/dist/formatters/date/calendarDateConstants.d.ts.map +1 -0
- package/dist/formatters/date/calendarPeriod.d.ts +11 -2
- package/dist/formatters/date/calendarPeriod.d.ts.map +1 -1
- package/dist/formatters/date/dateFormatConstants.d.ts +17 -0
- package/dist/formatters/date/dateFormatConstants.d.ts.map +1 -0
- package/dist/formatters/date/datePatternConstants.d.ts +16 -0
- package/dist/formatters/date/datePatternConstants.d.ts.map +1 -0
- package/dist/formatters/date/datePresetNameConstants.d.ts +27 -0
- package/dist/formatters/date/datePresetNameConstants.d.ts.map +1 -0
- package/dist/formatters/date/dateRange.d.ts +3 -1
- package/dist/formatters/date/dateRange.d.ts.map +1 -1
- package/dist/formatters/date/dateValueConstants.d.ts +15 -0
- package/dist/formatters/date/dateValueConstants.d.ts.map +1 -0
- package/dist/formatters/date/educationDate.d.ts.map +1 -1
- package/dist/formatters/date/formatDate.d.ts.map +1 -1
- package/dist/formatters/date/formatInstantDateTime.d.ts.map +1 -1
- package/dist/formatters/date/parseDate.d.ts.map +1 -1
- package/dist/formatters/date/pattern.d.ts.map +1 -1
- package/dist/formatters/date/presets.d.ts.map +1 -1
- package/dist/formatters/date/types.d.ts +8 -6
- package/dist/formatters/date/types.d.ts.map +1 -1
- package/dist/formatters/formatDurationMinutes.d.ts.map +1 -1
- package/dist/formatters/formatFileSize.d.ts.map +1 -1
- package/dist/formatters/formatPhone.d.ts.map +1 -1
- package/dist/formatters/index.js +6 -5
- package/dist/formatters/normalizeLeadingZeros.d.ts.map +1 -1
- package/dist/formatters/number/compact.d.ts.map +1 -1
- package/dist/formatters/number/formatCompactNumber.d.ts.map +1 -1
- package/dist/formatters/number/formatNumber.d.ts.map +1 -1
- package/dist/formatters/number/numberFormatConstants.d.ts +11 -0
- package/dist/formatters/number/numberFormatConstants.d.ts.map +1 -0
- package/dist/formatters/number/numberPresetNameConstants.d.ts +16 -0
- package/dist/formatters/number/numberPresetNameConstants.d.ts.map +1 -0
- package/dist/formatters/number/parseNumber.d.ts.map +1 -1
- package/dist/formatters/number/presets.d.ts.map +1 -1
- package/dist/formatters/number/types.d.ts +2 -1
- package/dist/formatters/number/types.d.ts.map +1 -1
- package/dist/formatters/pipeline/clone.d.ts.map +1 -1
- package/dist/formatters/pipeline/definitions.d.ts.map +1 -1
- package/dist/formatters/pipeline/dependencies.d.ts.map +1 -1
- package/dist/formatters/pipeline/execute.d.ts +4 -1
- package/dist/formatters/pipeline/execute.d.ts.map +1 -1
- package/dist/formatters/pipeline/formattersPipelineConstants.d.ts +19 -0
- package/dist/formatters/pipeline/formattersPipelineConstants.d.ts.map +1 -0
- package/dist/formatters/pipeline/normalize.d.ts.map +1 -1
- package/dist/formatters/pipeline/pipelineValidationConstants.d.ts +40 -0
- package/dist/formatters/pipeline/pipelineValidationConstants.d.ts.map +1 -0
- package/dist/formatters/pipeline/registry.d.ts +1 -1
- package/dist/formatters/pipeline/registry.d.ts.map +1 -1
- package/dist/formatters/pipeline/rekey.d.ts.map +1 -1
- package/dist/formatters/pipeline/runtime.d.ts.map +1 -1
- package/dist/formatters/pipeline/types.d.ts +28 -25
- package/dist/formatters/pipeline/types.d.ts.map +1 -1
- package/dist/formatters/pipeline/validate.d.ts +2 -1
- package/dist/formatters/pipeline/validate.d.ts.map +1 -1
- package/dist/formatters/strings/spaceCharacterConstants.d.ts +5 -0
- package/dist/formatters/strings/spaceCharacterConstants.d.ts.map +1 -0
- package/dist/formatters/strings/stripInnerSpaces.d.ts.map +1 -1
- package/dist/formatters/strings/stripLeadingZeros.d.ts.map +1 -1
- package/dist/formatters/valueState/fixedValueStateResolver.d.ts.map +1 -1
- package/dist/formatters/valueState/presentation.d.ts.map +1 -1
- package/dist/formatters/valueState/resolveValueStateClassName.d.ts.map +1 -1
- package/dist/formatters/valueState/thresholdValueStateResolver.d.ts.map +1 -1
- package/dist/formatters/valueState/types.d.ts +2 -1
- package/dist/formatters/valueState/types.d.ts.map +1 -1
- package/dist/formatters/valueState/valueStateRegistry.d.ts.map +1 -1
- package/dist/formatters/valueState/valueStateResolverConstants.d.ts +6 -0
- package/dist/formatters/valueState/valueStateResolverConstants.d.ts.map +1 -0
- package/dist/formulas/execute.d.ts +3 -2
- package/dist/formulas/execute.d.ts.map +1 -1
- package/dist/formulas/index.js +1 -1
- package/dist/formulas/isTableFormulaDependency.d.ts.map +1 -1
- package/dist/formulas/tableFormulaConstants.d.ts +12 -0
- package/dist/formulas/tableFormulaConstants.d.ts.map +1 -0
- package/dist/formulas/types.d.ts +2 -1
- package/dist/formulas/types.d.ts.map +1 -1
- package/dist/formulas/validate.d.ts +2 -1
- package/dist/formulas/validate.d.ts.map +1 -1
- package/dist/hooks/index.js +110 -107
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useBlockBrowserZoom.d.ts.map +1 -1
- package/dist/hooks/useDndSortableSensors.d.ts.map +1 -1
- package/dist/hooks/useFloatingListbox.d.ts +15 -33
- package/dist/hooks/useFloatingListbox.d.ts.map +1 -1
- package/dist/http/index.js +8 -7
- package/dist/http/index.js.map +1 -1
- package/dist/http/textResponse.d.ts.map +1 -1
- package/dist/indexed-records/createIndexedRecordsSchema.d.ts.map +1 -1
- package/dist/indexed-records/schema.js +24 -23
- package/dist/indexed-records/schema.js.map +1 -1
- package/dist/media/breakpointConstants.d.ts +5 -0
- package/dist/media/breakpointConstants.d.ts.map +1 -0
- package/dist/media/breakpoints.d.ts +2 -1
- package/dist/media/breakpoints.d.ts.map +1 -1
- package/dist/media/createNotificationTonePlayer.d.ts.map +1 -1
- package/dist/media/getCurrentFontSize.d.ts.map +1 -1
- package/dist/media/index.js +1 -1
- package/dist/media/mediaQueryConstants.d.ts +3 -0
- package/dist/media/mediaQueryConstants.d.ts.map +1 -0
- package/dist/media/responsive.d.ts +1 -1
- package/dist/media/responsive.d.ts.map +1 -1
- package/dist/media/useMatchMedia.d.ts.map +1 -1
- package/dist/media/useMediaQuery.d.ts.map +1 -1
- package/dist/metadata/baseMetaTypes.d.ts +7 -0
- package/dist/metadata/baseMetaTypes.d.ts.map +1 -0
- package/dist/metadata/metadataTypes.d.ts +17 -0
- package/dist/metadata/metadataTypes.d.ts.map +1 -0
- package/dist/metadata/scalarTypeClassification.d.ts +8 -0
- package/dist/metadata/scalarTypeClassification.d.ts.map +1 -0
- package/dist/metadata/scalarTypeConstants.d.ts +21 -0
- package/dist/metadata/scalarTypeConstants.d.ts.map +1 -0
- package/dist/notifications/index.js +62 -62
- package/dist/notifications/index.js.map +1 -1
- package/dist/notifications/notificationTypeConstants.d.ts +6 -0
- package/dist/notifications/notificationTypeConstants.d.ts.map +1 -0
- package/dist/notifications/notify.d.ts.map +1 -1
- package/dist/notifications/store.d.ts.map +1 -1
- package/dist/notifications/types.d.ts +2 -1
- package/dist/notifications/types.d.ts.map +1 -1
- package/dist/number-scale/index.js +47 -46
- package/dist/number-scale/index.js.map +1 -1
- package/dist/number-scale/marksPositionConstants.d.ts +4 -0
- package/dist/number-scale/marksPositionConstants.d.ts.map +1 -0
- package/dist/number-scale/numberScale.d.ts +1 -1
- package/dist/number-scale/numberScale.d.ts.map +1 -1
- package/dist/number-scale/types.d.ts +2 -1
- package/dist/number-scale/types.d.ts.map +1 -1
- package/dist/odata-service/baseTypes.d.ts +1 -5
- package/dist/odata-service/baseTypes.d.ts.map +1 -1
- package/dist/odata-service/builder.d.ts.map +1 -1
- package/dist/odata-service/columns.d.ts.map +1 -1
- package/dist/odata-service/entityOperationConstants.d.ts +4 -0
- package/dist/odata-service/entityOperationConstants.d.ts.map +1 -0
- package/dist/odata-service/filterDefinitionConstants.d.ts +24 -0
- package/dist/odata-service/filterDefinitionConstants.d.ts.map +1 -0
- package/dist/odata-service/filterDefinitions.d.ts +19 -17
- package/dist/odata-service/filterDefinitions.d.ts.map +1 -1
- package/dist/odata-service/filterOperationConstants.d.ts +14 -0
- package/dist/odata-service/filterOperationConstants.d.ts.map +1 -0
- package/dist/odata-service/filters.d.ts.map +1 -1
- package/dist/odata-service/formatters.d.ts +1 -2
- package/dist/odata-service/formatters.d.ts.map +1 -1
- package/dist/odata-service/index.js +1317 -2
- package/dist/odata-service/index.js.map +1 -0
- package/dist/odata-service/odataMetadataConstants.d.ts +8 -0
- package/dist/odata-service/odataMetadataConstants.d.ts.map +1 -0
- package/dist/odata-service/parser.d.ts +1 -3
- package/dist/odata-service/parser.d.ts.map +1 -1
- package/dist/odata-service/schema.d.ts.map +1 -1
- package/dist/odata-service/sorts.d.ts.map +1 -1
- package/dist/odata-service/sqlFilters.d.ts +10 -5
- package/dist/odata-service/sqlFilters.d.ts.map +1 -1
- package/dist/odata-service/types.d.ts +13 -14
- package/dist/odata-service/types.d.ts.map +1 -1
- package/dist/odata-service/typesValidation.d.ts +1 -5
- package/dist/odata-service/typesValidation.d.ts.map +1 -1
- package/dist/pwa/index.js +72 -71
- package/dist/pwa/index.js.map +1 -1
- package/dist/pwa/sw-cache-policy.js +47 -47
- package/dist/pwa/sw-cache-policy.js.map +1 -1
- package/dist/pwa/swCachePolicy.d.ts +5 -1
- package/dist/pwa/swCachePolicy.d.ts.map +1 -1
- package/dist/pwa/useBrowserOnlineStatus.d.ts.map +1 -1
- package/dist/query-client/broadcast.d.ts +4 -3
- package/dist/query-client/broadcast.d.ts.map +1 -1
- package/dist/query-client/createQueryRestoreSchedulerGuard.d.ts.map +1 -1
- package/dist/query-client/createQueryRestoreStorage.d.ts.map +1 -1
- package/dist/query-client/index.js +1 -1
- package/dist/query-client/invalidationBroadcast.d.ts +2 -1
- package/dist/query-client/invalidationBroadcast.d.ts.map +1 -1
- package/dist/query-client/persistence.d.ts +9 -6
- package/dist/query-client/persistence.d.ts.map +1 -1
- package/dist/query-client/queryCacheEventConstants.d.ts +11 -0
- package/dist/query-client/queryCacheEventConstants.d.ts.map +1 -0
- package/dist/query-client/queryClient.d.ts +2 -1
- package/dist/query-client/queryClient.d.ts.map +1 -1
- package/dist/query-client/queryMeta.d.ts.map +1 -1
- package/dist/query-client/sessionPersistenceConstants.d.ts +5 -0
- package/dist/query-client/sessionPersistenceConstants.d.ts.map +1 -0
- package/dist/query-client/sessionScoped.d.ts.map +1 -1
- package/dist/query-client/sessionScopedResetConstants.d.ts +4 -0
- package/dist/query-client/sessionScopedResetConstants.d.ts.map +1 -0
- package/dist/query-client/sessionScopedResetLifecycleTypes.d.ts +2 -1
- package/dist/query-client/sessionScopedResetLifecycleTypes.d.ts.map +1 -1
- package/dist/seo/index.js +0 -1
- package/dist/seo/index.js.map +1 -1
- package/dist/seo/seo.d.ts +3 -2
- package/dist/seo/seo.d.ts.map +1 -1
- package/dist/seo/seoContentTypeConstants.d.ts +6 -0
- package/dist/seo/seoContentTypeConstants.d.ts.map +1 -0
- package/dist/seo/types.d.ts +2 -1
- package/dist/seo/types.d.ts.map +1 -1
- package/dist/session-storage/index.js +1 -1
- package/dist/table/cellSelection.d.ts.map +1 -1
- package/dist/table/index.js +83 -79
- package/dist/table/index.js.map +1 -1
- package/dist/table/odataAdapter.d.ts +3 -3
- package/dist/table/odataAdapter.d.ts.map +1 -1
- package/dist/table/selection.d.ts +2 -2
- package/dist/table/selection.d.ts.map +1 -1
- package/dist/table/tableColumnConstants.d.ts +5 -0
- package/dist/table/tableColumnConstants.d.ts.map +1 -0
- package/dist/table/tableSelectionConstants.d.ts +8 -0
- package/dist/table/tableSelectionConstants.d.ts.map +1 -0
- package/dist/table/tanStackFeatures.d.ts +8 -8
- package/dist/table/types.d.ts +5 -3
- package/dist/table/types.d.ts.map +1 -1
- package/dist/table/useTableRowSelection.d.ts +2 -2
- package/dist/table/useTableRowSelection.d.ts.map +1 -1
- package/dist/table-document/index.js +88 -87
- package/dist/table-document/index.js.map +1 -1
- package/dist/table-document/insertTableDocumentAxis.d.ts +2 -1
- package/dist/table-document/insertTableDocumentAxis.d.ts.map +1 -1
- package/dist/table-document/tableDocument.d.ts +2 -1
- package/dist/table-document/tableDocument.d.ts.map +1 -1
- package/dist/table-document/tableDocumentAxisGroups.d.ts +4 -3
- package/dist/table-document/tableDocumentAxisGroups.d.ts.map +1 -1
- package/dist/table-document/tableDocumentConstants.d.ts +8 -0
- package/dist/table-document/tableDocumentConstants.d.ts.map +1 -0
- package/dist/table-document/tableDocumentGeometry.d.ts.map +1 -1
- package/dist/three-scene/index.js +32 -32
- package/dist/three-scene/index.js.map +1 -1
- package/dist/three-scene/threeSceneAvailability.d.ts +4 -3
- package/dist/three-scene/threeSceneAvailability.d.ts.map +1 -1
- package/dist/three-scene/threeSceneConstants.d.ts +14 -0
- package/dist/three-scene/threeSceneConstants.d.ts.map +1 -0
- package/dist/three-scene/useThreeSceneAvailability.d.ts.map +1 -1
- package/dist/tree-table/index.js +1 -1
- package/dist/types/abapBooleanConstants.d.ts +4 -0
- package/dist/types/abapBooleanConstants.d.ts.map +1 -0
- package/dist/types/index.js.map +1 -1
- package/dist/types/types.d.ts +4 -2
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/valueStateConstants.d.ts +8 -0
- package/dist/types/valueStateConstants.d.ts.map +1 -0
- package/dist/utils/cloneFunctionStrategyConstants.d.ts +4 -0
- package/dist/utils/cloneFunctionStrategyConstants.d.ts.map +1 -0
- package/dist/utils/createLazyComponent.d.ts.map +1 -1
- package/dist/utils/deepCloneWithoutFunctions.d.ts +2 -1
- package/dist/utils/deepCloneWithoutFunctions.d.ts.map +1 -1
- package/dist/utils/deepCopyWithoutFunctions.d.ts +2 -1
- package/dist/utils/deepCopyWithoutFunctions.d.ts.map +1 -1
- package/dist/utils/index.js +2 -209
- package/dist/utils/keyboard.d.ts +2 -1
- package/dist/utils/keyboard.d.ts.map +1 -1
- package/dist/utils/keyboardConstants.d.ts +16 -0
- package/dist/utils/keyboardConstants.d.ts.map +1 -0
- package/dist/validators/index.js +3 -3
- package/dist/validators/index.js.map +1 -1
- package/dist/validators/validateUrl.d.ts.map +1 -1
- package/dist/value-transformers/execute.d.ts.map +1 -1
- package/dist/value-transformers/index.js +9 -6
- package/dist/value-transformers/index.js.map +1 -1
- package/dist/value-transformers/types.d.ts +3 -2
- package/dist/value-transformers/types.d.ts.map +1 -1
- package/dist/value-transformers/valueTransformerConstants.d.ts +4 -0
- package/dist/value-transformers/valueTransformerConstants.d.ts.map +1 -0
- package/package.json +6 -5
- package/src/binary/README.mdx +1 -1
- package/src/dom/README.mdx +1 -1
- package/src/formatters/README.mdx +5 -0
- package/src/foundationLib.mdx +8 -0
- package/src/metadata/README.md +35 -0
- package/src/odata-service/README.mdx +36 -1
- package/src/query-client/README.mdx +4 -4
- package/dist/chunks/dom-BK22UmgF.js.map +0 -1
- package/dist/chunks/formatters-CZnnbdud.js.map +0 -1
- package/dist/chunks/formulas-BXT_XBWI.js.map +0 -1
- package/dist/chunks/media-WK38KtMl.js +0 -191
- package/dist/chunks/media-WK38KtMl.js.map +0 -1
- package/dist/chunks/odata-service-tp2U5yIr.js +0 -2211
- package/dist/chunks/odata-service-tp2U5yIr.js.map +0 -1
- package/dist/chunks/query-client-CVRfrYZM.js.map +0 -1
- package/dist/chunks/uuid-CUJPAbRY.js.map +0 -1
- package/dist/chunks/validate-CEQHqevt.js +0 -608
- package/dist/chunks/validate-CEQHqevt.js.map +0 -1
- package/dist/utils/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"query-client-CVRfrYZM.js","names":[],"sources":["../../src/query-client/broadcast.ts","../../src/query-client/invalidationBroadcast.ts","../../src/query-client/createQueryRestoreSchedulerGuard.ts","../../src/query-client/createQueryRestoreStorage.ts","../../src/query-client/queryMeta.ts","../../src/query-client/queryPersistenceAdapter.ts","../../src/query-client/persistence.ts","../../src/query-client/queryClient.ts","../../src/query-client/sessionScopedResetLifecycle.ts","../../src/query-client/sessionScoped.ts"],"sourcesContent":["import { broadcastQueryClient } from \"@tanstack/query-broadcast-client-experimental\";\n\nimport { uuidv4 } from \"../crypto\";\nimport { isRecord } from \"../validators\";\n\nimport type { QueryClient, QueryKey } from \"@tanstack/react-query\";\n\ntype CacheSyncEvent =\n\t| { type: \"invalidate\"; keys: QueryKey[]; refetchType?: \"none\" | \"all\" | \"active\" | \"inactive\" }\n\t| { type: \"setQueryData\"; key: QueryKey; data: unknown };\n\ntype InstallBroadcastOptions = {\n\tqueriesChannel: string;\n\teventsChannel: string;\n};\n\ntype InstalledReactQueryBroadcast = {\n\tbroadcast: (event: CacheSyncEvent) => void;\n\tcleanup: () => void;\n};\n\ntype WireMessage = {\n\ttabId: string;\n\tevent: CacheSyncEvent;\n};\n\nlet broadcastFn: ((event: CacheSyncEvent) => void) | null = null;\n\nexport function setBroadcastFn(fn: (event: CacheSyncEvent) => void) {\n\tbroadcastFn = fn;\n}\n\nexport function broadcastCacheEvent(event: CacheSyncEvent) {\n\tbroadcastFn?.(event);\n}\n\nexport function installReactQueryBroadcast(queryClient: QueryClient, opts: InstallBroadcastOptions): InstalledReactQueryBroadcast {\n\tif (typeof window === \"undefined\") {\n\t\treturn { broadcast: () => {}, cleanup: () => {} };\n\t}\n\n\tlet isApplyingRemoteEvent = false;\n\n\t// 1) Sync query cache (data/state)\n\tconst cleanupQueryBroadcast = broadcastQueryClient({\n\t\tqueryClient,\n\t\tbroadcastChannel: opts.queriesChannel\n\t});\n\n\t// 2) Sync \"events\" (invalidate/setQueryData)\n\tconst tabId = uuidv4();\n\tconst bc = new BroadcastChannel(opts.eventsChannel);\n\tconst unsubscribeInvalidationBroadcast = queryClient.getQueryCache().subscribe((queryEvent) => {\n\t\tif (isApplyingRemoteEvent) return;\n\t\tif (queryEvent.type !== \"updated\" || queryEvent.action.type !== \"invalidate\") return;\n\n\t\tbroadcast({\n\t\t\ttype: \"invalidate\",\n\t\t\tkeys: [queryEvent.query.queryKey],\n\t\t\trefetchType: \"none\"\n\t\t});\n\t});\n\n\tbc.onmessage = (ev: MessageEvent) => {\n\t\t// MessageEvent.data: unknown -> делаем безопасное сужение без any\n\t\tconst data: unknown = ev.data;\n\t\tif (!isWireMessage(data)) return;\n\t\tif (data.tabId === tabId) return;\n\n\t\tconst e = data.event;\n\t\tisApplyingRemoteEvent = true;\n\n\t\ttry {\n\t\t\tif (e.type === \"invalidate\") {\n\t\t\t\tconst refetchType = e.refetchType ?? \"none\";\n\t\t\t\tfor (const key of e.keys) {\n\t\t\t\t\tqueryClient.invalidateQueries({ queryKey: key, refetchType });\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (e.type === \"setQueryData\") {\n\t\t\t\tqueryClient.setQueryData(e.key, e.data);\n\t\t\t\treturn;\n\t\t\t}\n\t\t} finally {\n\t\t\tisApplyingRemoteEvent = false;\n\t\t}\n\t};\n\n\tfunction broadcast(event: CacheSyncEvent) {\n\t\tconst msg: WireMessage = { tabId, event };\n\t\tbc.postMessage(msg);\n\t}\n\n\treturn {\n\t\tbroadcast,\n\t\tcleanup: () => {\n\t\t\tunsubscribeInvalidationBroadcast();\n\t\t\tcleanupQueryBroadcast();\n\t\t\tbc.close();\n\t\t}\n\t};\n}\n\nfunction isWireMessage(v: unknown): v is WireMessage {\n\tif (!isRecord(v)) return false;\n\tif (typeof v.tabId !== \"string\") return false;\n\tif (!(\"event\" in v)) return false;\n\treturn isCacheSyncEvent(v.event);\n}\n\nfunction isCacheSyncEvent(v: unknown): v is CacheSyncEvent {\n\tif (!isRecord(v)) return false;\n\tif (v.type === \"invalidate\") {\n\t\t// keys: QueryKey[] — runtime мы не сможем валидировать “идеально”,\n\t\t// но проверим что это массив, а refetchType — допустимое значение\n\t\tif (!Array.isArray(v.keys)) return false;\n\t\tif (v.refetchType === undefined) return true;\n\t\treturn v.refetchType === \"none\" || v.refetchType === \"active\" || v.refetchType === \"inactive\" || v.refetchType === \"all\";\n\t}\n\tif (v.type === \"setQueryData\") {\n\t\t// key должен быть массивом или строкой — QueryKey в рантайме обычно массив\n\t\t// проверим хотя бы наличие поля\n\t\treturn \"key\" in v && \"data\" in v;\n\t}\n\treturn false;\n}\n","import { uuidv4 } from \"../crypto\";\nimport { isRecord } from \"../validators\";\n\nimport type { QueryClient, QueryKey } from \"@tanstack/react-query\";\n\nexport type QueryInvalidationBroadcastOptions = {\n\t/** Уникальное в пределах origin имя канала приложения. */\n\treadonly channelName: string;\n\t/** Ограничивает как исходящие, так и входящие Query keys. */\n\treadonly matchesQuery: (queryKey: QueryKey) => boolean;\n\t/** Определяет, какие queries получающей вкладки будут перезапрошены сразу. */\n\treadonly refetchType?: \"none\" | \"active\" | \"inactive\" | \"all\";\n};\n\nexport type InstalledQueryInvalidationBroadcast = {\n\t/** Явно передаёт точечную инвалидацию без изменения локального QueryClient. */\n\treadonly broadcast: (queryKey: QueryKey) => void;\n\treadonly cleanup: () => void;\n};\n\ntype QueryInvalidationWireMessage = {\n\treadonly type: \"query.invalidate\";\n\treadonly senderId: string;\n\treadonly queryKey: QueryKey;\n};\n\nfunction isQueryInvalidationWireMessage(value: unknown): value is QueryInvalidationWireMessage {\n\treturn isRecord(value) && value.type === \"query.invalidate\" && typeof value.senderId === \"string\" && Array.isArray(value.queryKey);\n}\n\n/**\n * Передаёт между вкладками только факт инвалидации выбранного Query key.\n * Server data остаётся у QueryClient каждой вкладки и заново читается её queryFn.\n */\nexport function installQueryInvalidationBroadcast(\n\tqueryClient: QueryClient,\n\toptions: QueryInvalidationBroadcastOptions\n): InstalledQueryInvalidationBroadcast {\n\tif (typeof window === \"undefined\" || typeof BroadcastChannel === \"undefined\") {\n\t\treturn { broadcast: () => undefined, cleanup: () => undefined };\n\t}\n\n\tconst senderId = uuidv4();\n\tconst channel = new BroadcastChannel(options.channelName);\n\tlet applyingRemoteInvalidation = false;\n\tlet closed = false;\n\n\tconst broadcast = (queryKey: QueryKey) => {\n\t\tif (closed || !options.matchesQuery(queryKey)) return;\n\t\tchannel.postMessage({ type: \"query.invalidate\", senderId, queryKey } satisfies QueryInvalidationWireMessage);\n\t};\n\n\tconst unsubscribe = queryClient.getQueryCache().subscribe((event) => {\n\t\tif (applyingRemoteInvalidation || event.type !== \"updated\" || event.action.type !== \"invalidate\") return;\n\t\tbroadcast(event.query.queryKey);\n\t});\n\n\tchannel.onmessage = (event: MessageEvent<unknown>) => {\n\t\tconst message = event.data;\n\t\tif (closed || !isQueryInvalidationWireMessage(message) || message.senderId === senderId || !options.matchesQuery(message.queryKey))\n\t\t\treturn;\n\n\t\tapplyingRemoteInvalidation = true;\n\t\ttry {\n\t\t\t// Первый GET без data иначе присоединяется к refetch и может вернуть\n\t\t\t// состояние до чужой записи. cancelQueries отменяет retryer синхронно:\n\t\t\t// не оставляем await-окна между отменой и точечной invalidation.\n\t\t\tvoid queryClient.cancelQueries({ queryKey: message.queryKey, exact: true });\n\t\t\tvoid queryClient.invalidateQueries({\n\t\t\t\tqueryKey: message.queryKey,\n\t\t\t\texact: true,\n\t\t\t\trefetchType: options.refetchType ?? \"active\"\n\t\t\t});\n\t\t} finally {\n\t\t\tapplyingRemoteInvalidation = false;\n\t\t}\n\t};\n\n\treturn {\n\t\tbroadcast,\n\t\tcleanup() {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\tunsubscribe();\n\t\t\tchannel.close();\n\t\t}\n\t};\n}\n","import { isCancelledError, type Query } from \"@tanstack/react-query\";\n\nimport { type QueryRestoreSchedulerGuardOptions } from \"./queryRestoreSchedulerTypes\";\n\n/**\n * Upstream schedules timestamp/refetch до завершения persisterFn. Отмена между\n * parser и публикацией не разрешает этой macrotask восстановить отменённую Query.\n * Façade существует только внутри одного обращения и не передаётся в QueryCache.\n */\nexport function createQueryRestoreSchedulerGuard({ query, assertCurrentRestore }: QueryRestoreSchedulerGuardOptions): Query {\n\tconst isCurrent = () => {\n\t\ttry {\n\t\t\tassertCurrentRestore();\n\t\t\treturn true;\n\t\t} catch (error) {\n\t\t\tif (!isCancelledError(error)) throw error;\n\t\t\treturn false;\n\t\t}\n\t};\n\tconst setState: Query[\"setState\"] = (...args) => {\n\t\tif (isCurrent()) query.setState(...args);\n\t};\n\tconst fetch: Query[\"fetch\"] = (...args) => {\n\t\t// Фоновый callback upstream не ждёт fetch result; resolved no-op\n\t\t// предотвращает повторную работу и unhandled rejection после отмены.\n\t\treturn isCurrent() ? query.fetch(...args) : Promise.resolve();\n\t};\n\treturn new Proxy(query, {\n\t\tget: (target, property) => {\n\t\t\tif (property === \"setState\") return setState;\n\t\t\tif (property === \"fetch\") return fetch;\n\t\t\t// Query использует private fields. Остальные методы выполняются с\n\t\t\t// исходным instance как this, а не с Proxy.\n\t\t\tconst value: unknown = Reflect.get(target, property, target);\n\t\t\treturn typeof value === \"function\" ? value.bind(target) : value;\n\t\t}\n\t});\n}\n","import { type AsyncStorage, type PersistedQuery } from \"@tanstack/query-persist-client-core\";\nimport { isCancelledError } from \"@tanstack/react-query\";\n\nimport { type QueryRestoreStorageOptions } from \"./queryRestoreStorageTypes\";\n\n/**\n * Проверяет только адресное чтение пригодной persisted записи. Сбой возникает\n * до upstream timestamp/refetch scheduler; remove и network fallback остаются\n * у persister. Обход storage entries и GC сохраняют прежнее поведение.\n */\nexport function createQueryRestoreStorage({\n\tstorage,\n\tqueryHash,\n\tprefix,\n\tbuster,\n\tmaxAge,\n\tparser,\n\tassertCurrentRestore\n}: QueryRestoreStorageOptions): AsyncStorage<PersistedQuery> {\n\treturn {\n\t\t...storage,\n\t\tremoveItem: (key) => {\n\t\t\ttry {\n\t\t\t\tassertCurrentRestore();\n\t\t\t} catch (error) {\n\t\t\t\t// Upstream удаляет запись при любой restore error. Отмена потребителя\n\t\t\t\t// не доказывает повреждение и не должна уничтожать рабочий снимок.\n\t\t\t\tif (isCancelledError(error)) return;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\treturn storage.removeItem(key);\n\t\t},\n\t\tgetItem: async (key) => {\n\t\t\tconst stored = await storage.getItem(key);\n\t\t\tif (!stored) return stored;\n\t\t\tassertCurrentRestore();\n\t\t\tif (key !== `${prefix}-${queryHash}` || stored.queryHash !== queryHash) {\n\t\t\t\tthrow new Error(\"Persisted запись не соответствует восстанавливаемой Query identity.\");\n\t\t\t}\n\t\t\tconst updatedAt = stored.state?.dataUpdatedAt;\n\t\t\t// Два скалярных условия совпадают с upstream eligibility gate. Истёкшее\n\t\t\t// содержимое не проходит дорогой parser; удалением владеет persister.\n\t\t\tif (!updatedAt || Date.now() - updatedAt > maxAge || stored.buster !== buster) return stored;\n\t\t\tif (typeof updatedAt !== \"number\" || !Number.isFinite(updatedAt)) {\n\t\t\t\tthrow new Error(\"Persisted запись содержит некорректное время обновления.\");\n\t\t\t}\n\t\t\tconst parsed = parser(stored.state.data);\n\t\t\tconst isThenable =\n\t\t\t\t(typeof parsed === \"object\" || typeof parsed === \"function\") &&\n\t\t\t\tparsed !== null &&\n\t\t\t\ttypeof Reflect.get(parsed, \"then\") === \"function\";\n\t\t\tif (isThenable) {\n\t\t\t\t// Недопустимая async работа могла уже начаться. Её rejection поглощён,\n\t\t\t\t// а нарушение sync-контракта передаётся persister как обычная ошибка.\n\t\t\t\tvoid Promise.resolve(parsed).catch(() => undefined);\n\t\t\t\tthrow new TypeError(\"Parser восстановленных Query data должен синхронно вернуть значение.\");\n\t\t\t}\n\t\t\tif (parsed === undefined) {\n\t\t\t\tthrow new TypeError(\"Parser восстановленных Query data должен синхронно вернуть значение.\");\n\t\t\t}\n\t\t\tassertCurrentRestore();\n\t\t\t// Копируются только оболочки, записи остаются результатом одного parser.\n\t\t\treturn { ...stored, state: { ...stored.state, data: parsed } };\n\t\t}\n\t};\n}\n","import { type QueryMeta } from \"@tanstack/react-query\";\n\n/**\n * Проверяет недоверенное восстановленное значение до публикации в Query.\n * Parser синхронно возвращает каноническую форму либо бросает ошибку: тогда\n * повреждённая запись удаляется и обычный queryFn получает свежие данные.\n */\nexport type QueryRestoredDataParser = (data: unknown) => unknown;\n\n/**\n * Symbol сохраняется при spread metadata, но не переносит callback в SSR wire\n * или IndexedDB. Consumer вновь задаёт parser своими Query options в браузере.\n */\nexport const QUERY_RESTORED_DATA_PARSER = Symbol(\"query-restored-data-parser\");\n\nexport type SessionQueryPersistencePolicy = {\n\t/** Устойчивое предметно независимое имя bounded-кэша внутри текущей сессии. */\n\treadonly cacheName: string;\n\t/** Максимальное число последних успешно полученных query в этом кэше. */\n\treadonly maxEntries: number;\n\t/**\n\t * По умолчанию восстановленный snapshot сразу перепроверяется полным queryFn.\n\t * `false` допустим только при наличии отдельной лёгкой проверки актуальности.\n\t */\n\treadonly refetchOnRestore?: boolean;\n\t/**\n\t * Поле верхнего уровня query data с неотрицательной целочисленной ревизией.\n\t * При наличии поля IndexedDB атомарно отклоняет запоздавшую запись меньшей\n\t * ревизии, поэтому параллельная вкладка не может откатить сохранённый snapshot.\n\t */\n\treadonly monotonicRevisionField?: string;\n};\n\n/**\n * Общие признаки query, которые управляют инфраструктурой клиентского кеша.\n *\n * `persist` разрешает долговременное хранение публичных справочных данных,\n * а `sessionScoped` помечает данные, доступность или содержимое которых зависит\n * от текущей серверной сессии. Эти признаки нельзя совмещать. Отдельный\n * `sessionPersistence` разрешает bounded storage только внутри активного scope.\n */\nexport type AppQueryMeta = {\n\treadonly persist?: boolean;\n\treadonly sessionScoped?: boolean;\n\treadonly sessionPersistence?: SessionQueryPersistencePolicy;\n\t/** Вызывается один раз только при фактическом чтении пригодной persisted записи. */\n\treadonly [QUERY_RESTORED_DATA_PARSER]?: QueryRestoredDataParser;\n} & Record<string, unknown>;\n\ndeclare module \"@tanstack/react-query\" {\n\tinterface Register {\n\t\tqueryMeta: AppQueryMeta;\n\t}\n}\n\n/** Разрешает сохранять публичную query в долговременном хранилище. */\nexport const persistedQueryMeta = { persist: true } as const satisfies QueryMeta;\n\n/** Помечает query для сброса при изменении серверной сессии. */\nexport const sessionScopedQueryMeta = { sessionScoped: true } as const satisfies QueryMeta;\n\n/**\n * Разрешает bounded persistence только внутри явно установленной server-session identity.\n * Scope и его срок жизни задаются отдельно через `setSessionQueryPersistenceScope`,\n * поэтому query contract не хранит идентификатор пользователя или сессии.\n */\nexport function createSessionQueryPersistenceMeta(policy: SessionQueryPersistencePolicy) {\n\tconst cacheName = policy.cacheName.trim();\n\tif (!/^[a-z0-9][a-z0-9_-]{0,63}$/u.test(cacheName)) {\n\t\tthrow new Error(\"Имя session query cache должно содержать только строчные латинские буквы, цифры, _ и -\");\n\t}\n\tif (!Number.isSafeInteger(policy.maxEntries) || policy.maxEntries < 1 || policy.maxEntries > 5_000) {\n\t\tthrow new Error(\"Лимит session query cache должен быть целым числом от 1 до 5000\");\n\t}\n\tif (policy.refetchOnRestore !== undefined && typeof policy.refetchOnRestore !== \"boolean\") {\n\t\tthrow new Error(\"Политика refetch после восстановления должна быть boolean\");\n\t}\n\tconst monotonicRevisionField = policy.monotonicRevisionField?.trim();\n\tif (monotonicRevisionField !== undefined && !/^[A-Za-z][A-Za-z0-9_]{0,63}$/u.test(monotonicRevisionField)) {\n\t\tthrow new Error(\"Имя поля монотонной ревизии должно быть JavaScript-идентификатором длиной до 64 символов\");\n\t}\n\n\treturn {\n\t\tsessionScoped: true,\n\t\tsessionPersistence: {\n\t\t\tcacheName,\n\t\t\tmaxEntries: policy.maxEntries,\n\t\t\t...(policy.refetchOnRestore === undefined ? {} : { refetchOnRestore: policy.refetchOnRestore }),\n\t\t\t...(monotonicRevisionField === undefined ? {} : { monotonicRevisionField })\n\t\t}\n\t} as const satisfies QueryMeta;\n}\n","export type QueryPersistenceProjectAdapter = {\n\tpersistenceBuster?: string;\n\tresolveSystemIdentifier?: () => string | null | undefined;\n};\n\nlet queryPersistenceProjectAdapter: QueryPersistenceProjectAdapter = {};\n\nexport function configureQueryPersistenceProjectAdapter(adapter: QueryPersistenceProjectAdapter) {\n\tqueryPersistenceProjectAdapter = adapter;\n}\n\nexport function getQueryPersistenceProjectAdapter() {\n\treturn queryPersistenceProjectAdapter;\n}\n","import { experimental_createQueryPersister, type AsyncStorage, type PersistedQuery } from \"@tanstack/query-persist-client-core\";\nimport { CancelledError, type Query, type QueryFunction, type QueryFunctionContext, type QueryKey } from \"@tanstack/react-query\";\n\nimport { createQueryRestoreSchedulerGuard } from \"./createQueryRestoreSchedulerGuard\";\nimport { createQueryRestoreStorage } from \"./createQueryRestoreStorage\";\nimport { QUERY_RESTORED_DATA_PARSER } from \"./queryMeta\";\nimport { getQueryPersistenceProjectAdapter } from \"./queryPersistenceAdapter\";\n\nconst STORE_NAME = \"queries\";\nconst SESSION_PERSISTENCE_MARKER = \"session\";\n\nexport const REACT_QUERY_PERSISTENCE_BUSTER = __REACT_QUERY_PERSISTENCE_BUSTER__;\nexport const REACT_QUERY_PERSISTENCE_MAX_AGE = 90 * 24 * 60 * 60 * 1000;\n\ntype IndexedDbQueryStorageOptions = {\n\tdbName?: string;\n\tstoreName?: string;\n\tindexedDB?: IDBFactory;\n};\n\nexport type SessionQueryPersistenceScope = {\n\t/** Публичная identity серверной сессии; cookie secret или access token здесь недопустимы. */\n\treadonly id: string;\n\t/** Абсолютная граница, после которой snapshots этой сессии нельзя читать или записывать. */\n\treadonly expiresAt: string;\n};\n\nlet activeSessionPersistenceScope: SessionQueryPersistenceScope | null = null;\n\n/**\n * Описывает итог синхронного преобразования записи внутри одной IndexedDB-транзакции.\n * Отдельный result позволяет вернуть вызывающему коду вычисленный снимок только после commit.\n */\nexport type IndexedDbAtomicUpdateDecision<TStorageValue, TResult> =\n\t| { readonly action: \"keep\"; readonly result: TResult }\n\t| { readonly action: \"set\"; readonly value: TStorageValue; readonly result: TResult }\n\t| { readonly action: \"remove\"; readonly result: TResult };\n\nexport type IndexedDbQueryStorage<TStorageValue> = AsyncStorage<TStorageValue> & {\n\t/** Перечисляет записи object store для garbage collection и bounded persistence. */\n\treadonly entries: () => Promise<Array<[key: string, value: TStorageValue]>>;\n\t/**\n\t * Читает и изменяет одну запись в общей readwrite-транзакции, поэтому параллельные\n\t * вкладки не могут потерять уже зафиксированное изменение между get и set.\n\t * Callback должен быть синхронным: IndexedDB закрывает неактивную транзакцию до\n\t * завершения произвольной асинхронной работы.\n\t */\n\treadonly updateItem: <TResult>(\n\t\tkey: string,\n\t\tupdate: (value: TStorageValue | undefined) => IndexedDbAtomicUpdateDecision<TStorageValue, TResult>\n\t) => Promise<TResult>;\n};\n\nfunction resolveIndexedDbFactory(factory?: IDBFactory): IDBFactory | undefined {\n\tif (factory) return factory;\n\ttry {\n\t\treturn globalThis.indexedDB;\n\t} catch {\n\t\t// Сам getter может выбросить SecurityError из-за политики браузера.\n\t\t// Недоступный необязательный кэш не должен срывать создание QueryClient;\n\t\t// ошибки операций уже полученной фабрики по-прежнему передаются потребителю.\n\t\treturn undefined;\n\t}\n}\n\nfunction requestToPromise<T>(request: IDBRequest<T>) {\n\treturn new Promise<T>((resolve, reject) => {\n\t\trequest.onsuccess = () => resolve(request.result);\n\t\trequest.onerror = () => reject(request.error);\n\t});\n}\n\nfunction getSystemIdentifier() {\n\tif (__DEV__) {\n\t\treturn `dev:${__APP_ID__}`;\n\t}\n\n\tconst projectIdentifier = getQueryPersistenceProjectAdapter().resolveSystemIdentifier?.();\n\tif (projectIdentifier) return projectIdentifier;\n\n\tconst hostname = typeof window === \"undefined\" ? \"server\" : window.location.hostname;\n\treturn `${__APP_ID__}:${hostname}`;\n}\n\nfunction getPersistencePrefix() {\n\tconst system = getSystemIdentifier();\n\treturn `${system}`;\n}\n\nfunction encodePersistenceSegment(value: string) {\n\treturn encodeURIComponent(value);\n}\n\nfunction getSessionPersistenceRootPrefix() {\n\treturn `${getPersistencePrefix()}-${SESSION_PERSISTENCE_MARKER}-`;\n}\n\nfunction getSessionPersistenceScopePrefix(scopeId: string) {\n\treturn `${getSessionPersistenceRootPrefix()}${encodePersistenceSegment(scopeId)}-`;\n}\n\nfunction getSessionPersistenceCachePrefix(scopeId: string, cacheName: string) {\n\treturn `${getSessionPersistenceScopePrefix(scopeId)}${encodePersistenceSegment(cacheName)}`;\n}\n\nfunction isSessionPersistenceScopeValid(scope: SessionQueryPersistenceScope | null): scope is SessionQueryPersistenceScope {\n\treturn (\n\t\tBoolean(scope?.id.trim()) && Number.isFinite(Date.parse(scope?.expiresAt ?? \"\")) && Date.parse(scope?.expiresAt ?? \"\") > Date.now()\n\t);\n}\n\n/** Возвращает текущую browser-session identity, которой разрешено читать приватные persisted query. */\nexport function getSessionQueryPersistenceScope(): SessionQueryPersistenceScope | null {\n\treturn isSessionPersistenceScopeValid(activeSessionPersistenceScope) ? activeSessionPersistenceScope : null;\n}\n\nasync function removeSessionPersistenceEntries(predicate: (key: string) => boolean) {\n\tconst storage = createIndexedDbQueryStorage<PersistedQuery>();\n\tif (!storage?.entries) return;\n\n\tconst entries = await storage.entries();\n\tawait Promise.all(entries.filter(([key]) => predicate(key)).map(([key]) => storage.removeItem(key)));\n}\n\n/** Удаляет persisted query одной сессии или всех сессий текущего приложения. */\nexport async function clearSessionQueryPersistence(scopeId?: string): Promise<void> {\n\tconst prefix = scopeId === undefined ? getSessionPersistenceRootPrefix() : getSessionPersistenceScopePrefix(scopeId);\n\tawait removeSessionPersistenceEntries((key) => key.startsWith(prefix));\n}\n\n/**\n * Устанавливает единственную активную server-session identity и сразу исключает\n * чтение старого scope. Browser storage очищается асинхронно уже после смены\n * in-memory границы, поэтому параллельный query не может записаться старому пользователю.\n */\nexport async function setSessionQueryPersistenceScope(scope: SessionQueryPersistenceScope | null): Promise<void> {\n\tconst normalized = scope && isSessionPersistenceScopeValid(scope) ? { id: scope.id.trim(), expiresAt: scope.expiresAt } : null;\n\tactiveSessionPersistenceScope = normalized;\n\n\tif (!normalized) {\n\t\tawait clearSessionQueryPersistence();\n\t\treturn;\n\t}\n\n\tconst activePrefix = getSessionPersistenceScopePrefix(normalized.id);\n\tawait removeSessionPersistenceEntries((key) => key.startsWith(getSessionPersistenceRootPrefix()) && !key.startsWith(activePrefix));\n}\n\nexport function shouldPersistQuery(query: Pick<Query, \"meta\">) {\n\treturn query.meta?.persist === true && query.meta.sessionScoped !== true;\n}\n\nfunction readSessionQueryPersistencePolicy(query: Pick<Query, \"meta\">) {\n\tconst policy = query.meta?.sessionPersistence;\n\tif (query.meta?.sessionScoped !== true || !policy || typeof policy !== \"object\") return null;\n\tif (!(\"cacheName\" in policy) || !(\"maxEntries\" in policy)) return null;\n\tif (typeof policy.cacheName !== \"string\" || !/^[a-z0-9][a-z0-9_-]{0,63}$/u.test(policy.cacheName)) return null;\n\tif (!Number.isSafeInteger(policy.maxEntries) || policy.maxEntries < 1 || policy.maxEntries > 5_000) return null;\n\tconst refetchOnRestore = \"refetchOnRestore\" in policy ? policy.refetchOnRestore : undefined;\n\tif (refetchOnRestore !== undefined && typeof refetchOnRestore !== \"boolean\") return null;\n\tconst monotonicRevisionField = \"monotonicRevisionField\" in policy ? policy.monotonicRevisionField : undefined;\n\tif (\n\t\tmonotonicRevisionField !== undefined &&\n\t\t(typeof monotonicRevisionField !== \"string\" || !/^[A-Za-z][A-Za-z0-9_]{0,63}$/u.test(monotonicRevisionField))\n\t) {\n\t\treturn null;\n\t}\n\treturn { cacheName: policy.cacheName, maxEntries: policy.maxEntries, refetchOnRestore, monotonicRevisionField } as const;\n}\n\nfunction readMonotonicDecimalRevision(query: PersistedQuery, field: string): string | null {\n\tconst data = query.state.data;\n\tif (typeof data !== \"object\" || data === null || Array.isArray(data)) return null;\n\tconst revision = Reflect.get(data, field);\n\tif (typeof revision !== \"string\" || !/^\\d+$/u.test(revision)) return null;\n\treturn revision.replace(/^0+(?=\\d)/u, \"\");\n}\n\nfunction compareDecimalRevisions(left: string, right: string): number {\n\tif (left.length !== right.length) return left.length - right.length;\n\tif (left === right) return 0;\n\treturn left < right ? -1 : 1;\n}\n\nexport function createIndexedDbQueryStorage<TStorageValue = unknown>(\n\toptions: IndexedDbQueryStorageOptions = {}\n): IndexedDbQueryStorage<TStorageValue> | undefined {\n\tconst factory = resolveIndexedDbFactory(options.indexedDB);\n\tif (!factory) return undefined;\n\n\tconst idb = factory;\n\tconst dbName = options.dbName ?? getSystemIdentifier();\n\tconst storeName = options.storeName ?? STORE_NAME;\n\tlet dbPromise: Promise<IDBDatabase> | null = null;\n\n\tfunction openDb() {\n\t\tif (dbPromise) return dbPromise;\n\n\t\tdbPromise = new Promise<IDBDatabase>((resolve, reject) => {\n\t\t\tconst request = idb.open(dbName, 1);\n\n\t\t\trequest.onupgradeneeded = () => {\n\t\t\t\tconst db = request.result;\n\t\t\t\tif (!db.objectStoreNames.contains(storeName)) {\n\t\t\t\t\tdb.createObjectStore(storeName);\n\t\t\t\t}\n\t\t\t};\n\n\t\t\trequest.onsuccess = () => resolve(request.result);\n\t\t\trequest.onerror = () => reject(request.error);\n\t\t\trequest.onblocked = () => reject(request.error ?? new Error(\"Открытие IndexedDB заблокировано\"));\n\t\t});\n\n\t\treturn dbPromise;\n\t}\n\n\tasync function runTransaction<T>(mode: IDBTransactionMode, action: (store: IDBObjectStore) => IDBRequest<T>) {\n\t\tconst db = await openDb();\n\t\tconst tx = db.transaction(storeName, mode);\n\t\tconst store = tx.objectStore(storeName);\n\t\tconst request = action(store);\n\t\treturn requestToPromise(request);\n\t}\n\n\tasync function runWrite(mode: IDBTransactionMode, action: (store: IDBObjectStore) => void) {\n\t\tconst db = await openDb();\n\n\t\treturn new Promise<void>((resolve, reject) => {\n\t\t\tconst tx = db.transaction(storeName, mode);\n\t\t\tconst store = tx.objectStore(storeName);\n\n\t\t\ttx.oncomplete = () => resolve();\n\t\t\ttx.onerror = () => reject(tx.error);\n\t\t\ttx.onabort = () => reject(tx.error);\n\n\t\t\ttry {\n\t\t\t\taction(store);\n\t\t\t} catch (error) {\n\t\t\t\ttx.abort();\n\t\t\t\treject(error);\n\t\t\t}\n\t\t});\n\t}\n\n\tasync function updateItem<TResult>(\n\t\tkey: string,\n\t\tupdate: (value: TStorageValue | undefined) => IndexedDbAtomicUpdateDecision<TStorageValue, TResult>\n\t) {\n\t\tconst db = await openDb();\n\t\treturn new Promise<TResult>((resolve, reject) => {\n\t\t\tconst tx = db.transaction(storeName, \"readwrite\");\n\t\t\tconst store = tx.objectStore(storeName);\n\t\t\tconst request = store.get(key);\n\t\t\tlet result: TResult;\n\t\t\tlet hasResult = false;\n\n\t\t\ttx.oncomplete = () => {\n\t\t\t\tif (hasResult) resolve(result);\n\t\t\t\telse reject(new Error(\"IndexedDB-транзакция завершилась без результата обновления\"));\n\t\t\t};\n\t\t\ttx.onerror = () => reject(tx.error);\n\t\t\ttx.onabort = () => reject(tx.error);\n\t\t\trequest.onerror = () => {\n\t\t\t\ttx.abort();\n\t\t\t\treject(request.error);\n\t\t\t};\n\t\t\trequest.onsuccess = () => {\n\t\t\t\ttry {\n\t\t\t\t\tconst decision = update(request.result as TStorageValue | undefined);\n\t\t\t\t\tresult = decision.result;\n\t\t\t\t\thasResult = true;\n\t\t\t\t\tif (decision.action === \"set\") store.put(decision.value, key);\n\t\t\t\t\telse if (decision.action === \"remove\") store.delete(key);\n\t\t\t\t} catch (error) {\n\t\t\t\t\ttx.abort();\n\t\t\t\t\treject(error);\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n\treturn {\n\t\tgetItem: (key) => runTransaction<TStorageValue | undefined>(\"readonly\", (store) => store.get(key)),\n\t\tsetItem: (key, value) => runWrite(\"readwrite\", (store) => store.put(value, key)),\n\t\tremoveItem: (key) => runWrite(\"readwrite\", (store) => store.delete(key)),\n\t\tupdateItem,\n\t\tentries: async () => {\n\t\t\tconst db = await openDb();\n\n\t\t\treturn new Promise<Array<[key: string, value: TStorageValue]>>((resolve, reject) => {\n\t\t\t\tconst tx = db.transaction(storeName, \"readonly\");\n\t\t\t\tconst store = tx.objectStore(storeName);\n\t\t\t\tconst request = store.openCursor();\n\t\t\t\tconst entries: Array<[key: string, value: TStorageValue]> = [];\n\n\t\t\t\ttx.oncomplete = () => resolve(entries);\n\t\t\t\ttx.onerror = () => reject(tx.error);\n\t\t\t\ttx.onabort = () => reject(tx.error);\n\n\t\t\t\trequest.onsuccess = () => {\n\t\t\t\t\tconst cursor = request.result;\n\t\t\t\t\tif (!cursor) return;\n\n\t\t\t\t\tentries.push([String(cursor.key), cursor.value as TStorageValue]);\n\t\t\t\t\tcursor.continue();\n\t\t\t\t};\n\t\t\t\trequest.onerror = () => reject(request.error);\n\t\t\t});\n\t\t}\n\t};\n}\n\nexport function createReactQueryPersister() {\n\tconst storage = createIndexedDbQueryStorage<PersistedQuery>();\n\tif (!storage) return undefined;\n\tconst indexedDbStorage = storage;\n\n\tconst publicPersister = experimental_createQueryPersister<PersistedQuery>({\n\t\tstorage: indexedDbStorage,\n\t\tserialize: (query) => query,\n\t\tdeserialize: (query) => query,\n\t\tprefix: getPersistencePrefix(),\n\t\tbuster: getQueryPersistenceProjectAdapter().persistenceBuster ?? REACT_QUERY_PERSISTENCE_BUSTER,\n\t\tmaxAge: REACT_QUERY_PERSISTENCE_MAX_AGE,\n\t\trefetchOnRestore: true,\n\t\tfilters: { predicate: shouldPersistQuery }\n\t});\n\tconst sessionPersisters = new Map<\n\t\tstring,\n\t\tReadonly<{\n\t\t\tpersister: ReturnType<typeof experimental_createQueryPersister<PersistedQuery>>;\n\t\t\tstorage: AsyncStorage<PersistedQuery>;\n\t\t\tprefix: string;\n\t\t}>\n\t>();\n\t// Token относится только к opt-in операции. WeakMap не удерживает удалённые\n\t// Query и не хранит callbacks/data; поздний scheduler узнаёт новую операцию.\n\tconst restoreOperations = new WeakMap<Query, object>();\n\n\tfunction getSessionPersister(\n\t\tscope: SessionQueryPersistenceScope,\n\t\tcacheName: string,\n\t\tmaxEntries: number,\n\t\trefetchOnRestore = true,\n\t\tmonotonicRevisionField?: string\n\t) {\n\t\tconst prefix = getSessionPersistenceCachePrefix(scope.id, cacheName);\n\t\tconst identity = `${prefix}:${maxEntries}:${refetchOnRestore}:${monotonicRevisionField ?? \"\"}:${scope.expiresAt}`;\n\t\tconst existing = sessionPersisters.get(identity);\n\t\tif (existing) return existing;\n\n\t\tlet pruneQueue = Promise.resolve();\n\t\tconst boundedStorage: AsyncStorage<PersistedQuery> = {\n\t\t\tgetItem: (key) => {\n\t\t\t\tconst activeScope = getSessionQueryPersistenceScope();\n\t\t\t\treturn activeScope?.id === scope.id ? indexedDbStorage.getItem(key) : undefined;\n\t\t\t},\n\t\t\tremoveItem: (key) => indexedDbStorage.removeItem(key),\n\t\t\tentries: () => indexedDbStorage.entries(),\n\t\t\tsetItem: async (key, value) => {\n\t\t\t\tconst activeScope = getSessionQueryPersistenceScope();\n\t\t\t\tif (activeScope?.id !== scope.id) return;\n\n\t\t\t\tif (monotonicRevisionField === undefined) {\n\t\t\t\t\tawait indexedDbStorage.setItem(key, value);\n\t\t\t\t} else {\n\t\t\t\t\tawait indexedDbStorage.updateItem(key, (stored) => {\n\t\t\t\t\t\tif (!stored || stored.buster !== value.buster) return { action: \"set\", value, result: undefined };\n\t\t\t\t\t\tconst storedRevision = readMonotonicDecimalRevision(stored, monotonicRevisionField);\n\t\t\t\t\t\tconst nextRevision = readMonotonicDecimalRevision(value, monotonicRevisionField);\n\t\t\t\t\t\tif (storedRevision !== null && nextRevision !== null && compareDecimalRevisions(storedRevision, nextRevision) > 0) {\n\t\t\t\t\t\t\treturn { action: \"keep\", result: undefined };\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { action: \"set\", value, result: undefined };\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tpruneQueue = pruneQueue.then(async () => {\n\t\t\t\t\tconst entries = (await indexedDbStorage.entries()).filter(([entryKey]) => entryKey.startsWith(`${prefix}-`));\n\t\t\t\t\tentries.sort((left, right) => (right[1].state.dataUpdatedAt ?? 0) - (left[1].state.dataUpdatedAt ?? 0));\n\t\t\t\t\tawait Promise.all(entries.slice(maxEntries).map(([entryKey]) => indexedDbStorage.removeItem(entryKey)));\n\t\t\t\t});\n\t\t\t\tawait pruneQueue;\n\t\t\t}\n\t\t};\n\t\tconst persister = experimental_createQueryPersister<PersistedQuery>({\n\t\t\tstorage: boundedStorage,\n\t\t\tserialize: (query) => query,\n\t\t\tdeserialize: (query) => query,\n\t\t\tprefix,\n\t\t\tbuster: getQueryPersistenceProjectAdapter().persistenceBuster ?? REACT_QUERY_PERSISTENCE_BUSTER,\n\t\t\tmaxAge: REACT_QUERY_PERSISTENCE_MAX_AGE,\n\t\t\trefetchOnRestore,\n\t\t\tfilters: {\n\t\t\t\tpredicate: (query) => readSessionQueryPersistencePolicy(query)?.cacheName === cacheName\n\t\t\t}\n\t\t});\n\t\tconst entry = { persister, storage: boundedStorage, prefix };\n\t\tsessionPersisters.set(identity, entry);\n\t\treturn entry;\n\t}\n\n\treturn {\n\t\t...publicPersister,\n\t\tasync persisterFn<T, TQueryKey extends QueryKey>(\n\t\t\tqueryFn: QueryFunction<T, TQueryKey>,\n\t\t\tcontext: QueryFunctionContext<TQueryKey>,\n\t\t\tquery: Query\n\t\t): Promise<T> {\n\t\t\tconst policy = readSessionQueryPersistencePolicy(query);\n\t\t\tconst scope = getSessionQueryPersistenceScope();\n\t\t\tif (policy && !scope) return Promise.resolve(queryFn(context));\n\t\t\tconst source =\n\t\t\t\tpolicy && scope\n\t\t\t\t\t? getSessionPersister(\n\t\t\t\t\t\t\tscope,\n\t\t\t\t\t\t\tpolicy.cacheName,\n\t\t\t\t\t\t\tpolicy.maxEntries,\n\t\t\t\t\t\t\tpolicy.refetchOnRestore,\n\t\t\t\t\t\t\tpolicy.monotonicRevisionField\n\t\t\t\t\t\t)\n\t\t\t\t\t: { persister: publicPersister, storage: indexedDbStorage, prefix: getPersistencePrefix() };\n\t\t\tconst parser = query.meta?.[QUERY_RESTORED_DATA_PARSER];\n\t\t\tif (parser === undefined) {\n\t\t\t\trestoreOperations.delete(query);\n\t\t\t\treturn source.persister.persisterFn(queryFn, context, query);\n\t\t\t}\n\t\t\tif (typeof parser !== \"function\") throw new TypeError(\"Parser восстановленных Query data должен быть функцией.\");\n\n\t\t\tconst operation = {};\n\t\t\trestoreOperations.set(query, operation);\n\t\t\tconst assertCurrentRestore = () => {\n\t\t\t\tif (\n\t\t\t\t\tcontext.signal.aborted ||\n\t\t\t\t\trestoreOperations.get(query) !== operation ||\n\t\t\t\t\t(policy && getSessionQueryPersistenceScope()?.id !== scope?.id)\n\t\t\t\t) {\n\t\t\t\t\tthrow new CancelledError({ revert: true });\n\t\t\t\t}\n\t\t\t};\n\t\t\tconst buster = getQueryPersistenceProjectAdapter().persistenceBuster ?? REACT_QUERY_PERSISTENCE_BUSTER;\n\t\t\t// Adapter принадлежит одному обращению, а общий storage продолжает владеть\n\t\t\t// monotonic writes и pruneQueue. Callback не сохраняется в session factory.\n\t\t\tconst restoreStorage = createQueryRestoreStorage({\n\t\t\t\tstorage: source.storage,\n\t\t\t\tqueryHash: query.queryHash,\n\t\t\t\tprefix: source.prefix,\n\t\t\t\tbuster,\n\t\t\t\tmaxAge: REACT_QUERY_PERSISTENCE_MAX_AGE,\n\t\t\t\tparser,\n\t\t\t\tassertCurrentRestore\n\t\t\t});\n\t\t\tconst restorePersister = experimental_createQueryPersister<PersistedQuery>({\n\t\t\t\tstorage: restoreStorage,\n\t\t\t\tserialize: (stored) => stored,\n\t\t\t\tdeserialize: (stored) => stored,\n\t\t\t\tprefix: source.prefix,\n\t\t\t\tbuster,\n\t\t\t\tmaxAge: REACT_QUERY_PERSISTENCE_MAX_AGE,\n\t\t\t\trefetchOnRestore: policy?.refetchOnRestore ?? true,\n\t\t\t\tfilters: policy\n\t\t\t\t\t? { predicate: (target) => readSessionQueryPersistencePolicy(target)?.cacheName === policy.cacheName }\n\t\t\t\t\t: { predicate: shouldPersistQuery }\n\t\t\t});\n\t\t\tconst result = await restorePersister.persisterFn(\n\t\t\t\t(currentContext) => {\n\t\t\t\t\t// Upstream превращает restore errors в обычный fallback. После cancel\n\t\t\t\t\t// или смены сессии этот fallback не должен запускать старый queryFn.\n\t\t\t\t\tassertCurrentRestore();\n\t\t\t\t\treturn queryFn(currentContext);\n\t\t\t\t},\n\t\t\t\tcontext,\n\t\t\t\tcreateQueryRestoreSchedulerGuard({ query, assertCurrentRestore })\n\t\t\t);\n\t\t\t// Await внутри upstream открывает новую microtask boundary. Scope мог\n\t\t\t// смениться уже после последней проверки в storage/parser.\n\t\t\tassertCurrentRestore();\n\t\t\treturn result;\n\t\t}\n\t};\n}\n","import {\n\tDefaultError,\n\tMutation,\n\tMutationCache,\n\tMutationFunctionContext,\n\tQuery,\n\tQueryCache,\n\tQueryClient,\n\tQueryKey\n} from \"@tanstack/react-query\";\n\nimport { createReactQueryPersister } from \"./persistence\";\n\nexport type QueryBroadcastOptions = {\n\tonQueryError?: (error: DefaultError, query: Query<unknown, unknown, unknown>) => void;\n\tonMutationError?: (\n\t\terror: DefaultError,\n\t\tvariables: unknown,\n\t\tonMutateResult: unknown,\n\t\tmutation: Mutation<unknown, unknown, unknown>,\n\t\tcontext: MutationFunctionContext\n\t) => Promise<unknown> | unknown;\n};\n\n/**\n * Создаёт настроенный QueryClient. Singleton lifecycle обеспечивает host-приложение.\n */\nexport function createQueryClient({ onQueryError, onMutationError }: QueryBroadcastOptions) {\n\tconst queryPersister = createReactQueryPersister();\n\n\tconst queryClient = new QueryClient({\n\t\tqueryCache: new QueryCache({ onError: onQueryError }),\n\t\tmutationCache: new MutationCache({ onError: onMutationError }),\n\t\tdefaultOptions: {\n\t\t\t// TODO: Vite env\n\t\t\tqueries: {\n\t\t\t\tstaleTime: 10 * 60 * 1000,\n\t\t\t\tgcTime: 30 * 60 * 1000,\n\t\t\t\tthrowOnError: false,\n\t\t\t\tretry: false,\n\t\t\t\t...(queryPersister ? { persister: queryPersister.persisterFn } : {})\n\t\t\t},\n\t\t\tmutations: {\n\t\t\t\tthrowOnError: false,\n\t\t\t\tretry: false\n\t\t\t}\n\t\t}\n\t});\n\n\treturn queryClient;\n}\n\n/**\n * Контекст, возвращаемый из `onMutateOptimistic`.\n * Содержит снапшот кеша до оптимистичного обновления.\n * Передаётся в `onError`, `onSuccess`, `onSettled` через TanStack Query.\n */\nexport type OptimisticContext<TQueryCacheData> = {\n\tprevious: TQueryCacheData | undefined;\n};\n\n/**\n * _Оптимистичное обновление — это когда мы моментально меняем локальный кэш (и UI) до ответа сервера,\n * чтобы интерфейс был отзывчивым. Если сервер вернул ошибку — откатываем изменения.\n * Если сервер подтвердил — либо принимаем ответ сервера,\n * либо оставляем оптимистичное состояние (в зависимости от ситуации)._\n *\n * Обработчик `onMutate` для оптимистичного обновления.\n *\n * Выполняет три шага:\n * 1. Отменяет активные запросы по ключу — предотвращает гонку с сервером.\n * 2. Сохраняет снапшот текущего состояния кеша.\n * 3. Применяет оптимистичный патч через `patcher`.\n *\n * Возвращает {@link OptimisticContext} — передаётся в `onError` для отката.\n *\n * @example\n * // Обновление точечных данных в списке объектов\n * useMutation({\n * mutationFn: (data: SomeType) => { ... },\n * onMutate: async (data) =>\n * onMutateOptimistic(queryClient, someQueryKey, (old) => {\n * if (!old) return old;\n * return old.map((item) =>\n * item.id === data.id ? { ...item, visible: data.visible } : item\n * );\n * }),\n * onError: (_err, _vars, context) =>\n * onErrorOptimistic(queryClient, someQueryKey, context),\n * onSettled: () =>\n * onSettledOptimistic(queryClient, someQueryKey),\n * })\n */\nexport async function onMutateOptimistic<TQueryCacheData>(\n\tqc: QueryClient,\n\tqueryKey: QueryKey,\n\tpatcher: (oldCache: TQueryCacheData | undefined) => TQueryCacheData | undefined\n): Promise<OptimisticContext<TQueryCacheData>> {\n\t// 1) Отменяем запросы по ключу, чтобы не было гонки с сервером\n\tawait qc.cancelQueries({ queryKey });\n\n\t// 2) Сохраняем снапшот кеша для возможного отката\n\tconst previous = qc.getQueryData<TQueryCacheData>(queryKey);\n\n\t// 3) Применяем оптимистичный патч\n\tqc.setQueryData<TQueryCacheData>(queryKey, patcher);\n\n\treturn { previous };\n}\n\n/**\n * Обработчик `onError` для оптимистичного обновления.\n *\n * Откатывает кеш к снапшоту, сохранённому в {@link OptimisticContext}.\n * Если `context` не определён (например, `onMutate` сам выбросил ошибку) — безопасно ничего не делает.\n *\n * @example\n * onError: (_err, _vars, context) =>\n * onErrorOptimistic(queryClient, someQueryKey, context),\n */\nexport function onErrorOptimistic<TQueryCacheData>(\n\tqc: QueryClient,\n\tqueryKey: QueryKey,\n\tcontext: OptimisticContext<TQueryCacheData> | undefined\n): void {\n\tif (context?.previous !== undefined) {\n\t\tqc.setQueryData<TQueryCacheData>(queryKey, context.previous);\n\t}\n}\n\n/**\n * Обработчик `onSuccess` для оптимистичного обновления — применяет данные сервера в кеш.\n *\n * Используется, когда сервер вернул авторитетные данные, которые нужно слить\n * с текущим состоянием кеша (или заменить его целиком).\n *\n * Если сервер вернул `void` — эту функцию вызывать не нужно:\n * оптимистичное состояние в кеше остаётся без изменений.\n *\n * @param qc - экземпляр `QueryClient`\n * @param queryKey - ключ кеша\n * @param serverData - данные, вернувшиеся от сервера\n * @param merger - функция слияния: получает текущий кеш и ответ сервера, возвращает новое состояние\n *\n * @example\n * // Полная замена кеша ответом сервера\n * onSuccess: (data) =>\n * onSuccessOptimistic(queryClient, someQueryKey, data, (_cache, serverData) => serverData),\n *\n * @example\n * // Точечное обновление одного элемента в списке\n * onSuccess: (updatedItem) =>\n * onSuccessOptimistic(queryClient, someQueryKey, updatedItem,\n * (cache, item) => cache?.map((i) => (i.id === item.id ? item : i))\n * ),\n */\nexport function onSuccessOptimistic<TQueryCacheData, TServerData>(\n\tqc: QueryClient,\n\tqueryKey: QueryKey,\n\tserverData: TServerData,\n\tmerger: (cache: TQueryCacheData | undefined, serverData: TServerData) => TQueryCacheData | undefined\n): void {\n\tqc.setQueryData<TQueryCacheData>(queryKey, (old) => merger(old, serverData));\n}\n\n/**\n * Параметры для {@link onSettledOptimistic}.\n */\nexport type OnSettledOptimisticOptions = {\n\t/**\n\t * Тип рефетча при инвалидации.\n\t * - `\"none\"` (по умолчанию) — помечает кеш устаревшим, но не запускает рефетч немедленно.\n\t * - `\"active\"` — немедленно перезапрашивает активные подписчики.\n\t * - `\"inactive\"` — перезапрашивает неактивные (фоновые) запросы.\n\t * - `\"all\"` — перезапрашивает все подходящие запросы.\n\t */\n\trefetchType?: \"none\" | \"active\" | \"inactive\" | \"all\";\n};\n\n/**\n * Обработчик `onSettled` для оптимистичного обновления.\n *\n * Инвалидирует один или несколько query-ключей после завершения мутации\n * (выполняется и при успехе, и при ошибке).\n *\n * По умолчанию использует `refetchType: \"none\"` — помечает кеш устаревшим,\n * но не запускает немедленный рефетч. Это безопасный вариант при оптимистике:\n * данные в кеше уже актуальны (подтверждены или откатаны), а рефетч произойдёт\n * при следующем монтировании или явном запросе.\n *\n * Broadcast в другие вкладки — ответственность вызывающего кода через `broadcastCacheEvent`.\n *\n * @example\n * onSettled: () =>\n * onSettledOptimistic(queryClient, someQueryKey),\n *\n * @example\n * // С принудительным рефетчем активных подписчиков\n * onSettled: () =>\n * onSettledOptimistic(queryClient, [queryKeyA, queryKeyB], { refetchType: \"active\" }),\n */\nexport async function onSettledOptimistic(\n\tqc: QueryClient,\n\tqueryKeys: QueryKey | QueryKey[],\n\toptions?: OnSettledOptimisticOptions\n): Promise<void> {\n\tconst refetchType = options?.refetchType ?? \"none\";\n\t// Нормализуем одиночный ключ к массиву для единообразной обработки\n\tconst keys: QueryKey[] = isNestedQueryKey(queryKeys) ? queryKeys : [queryKeys];\n\n\tawait Promise.all(keys.map((queryKey) => qc.invalidateQueries({ queryKey, refetchType })));\n}\n\n/**\n * Определяет, является ли значение массивом query-ключей (QueryKey[]),\n * а не одиночным QueryKey.\n *\n * QueryKey в TanStack Query — это `string | readonly unknown[]`.\n * Чтобы отличить `QueryKey[]` от `QueryKey` типа `readonly unknown[]`,\n * проверяем, содержит ли массив хотя бы один вложенный массив или строку на верхнем уровне.\n */\nfunction isNestedQueryKey(value: QueryKey | QueryKey[]): value is QueryKey[] {\n\tif (!Array.isArray(value)) return false;\n\t// Если первый элемент сам является массивом — это QueryKey[]\n\treturn Array.isArray(value[0]);\n}\n","import { type QueryClient } from \"@tanstack/react-query\";\n\nimport {\n\ttype InstalledSessionScopedQueryResetLifecycle,\n\ttype SessionScopedQueryResetLifecycle,\n\ttype SessionScopedQueryResetOutcome\n} from \"./sessionScopedResetLifecycleTypes\";\n\ntype SessionScopedQueryResetRegistrationState = {\n\tregistrations: Set<SessionScopedQueryResetLifecycle>;\n\tactiveResets: number;\n};\n\ntype SessionScopedQueryResetBoundary = Readonly<{\n\tretirement: Promise<readonly unknown[]> | null;\n\tcomplete: (outcome: SessionScopedQueryResetOutcome) => Promise<readonly unknown[]>;\n}>;\n\n// WeakMap содержит только subscriptions и число вызовов, а не второй auth/Query snapshot.\nconst registrationsByClient = new WeakMap<QueryClient, SessionScopedQueryResetRegistrationState>();\n\nfunction getRegistrationState(queryClient: QueryClient): SessionScopedQueryResetRegistrationState {\n\tconst existing = registrationsByClient.get(queryClient);\n\tif (existing) return existing;\n\tconst state = { registrations: new Set<SessionScopedQueryResetLifecycle>(), activeResets: 0 };\n\tregistrationsByClient.set(queryClient, state);\n\treturn state;\n}\n\nfunction releaseEmptyRegistrationState(queryClient: QueryClient, state: SessionScopedQueryResetRegistrationState): void {\n\tif (state.activeResets === 0 && state.registrations.size === 0 && registrationsByClient.get(queryClient) === state) {\n\t\tregistrationsByClient.delete(queryClient);\n\t}\n}\n\n/**\n * Устанавливать до запуска session-bound runtime на весь срок жизни QueryClient.\n * Поздняя регистрация не может восстановить пропущенный before: вместо частичной\n * защиты она синхронно отклоняется до startup нового consumer.\n */\nexport function installSessionScopedQueryResetLifecycle(\n\tqueryClient: QueryClient,\n\tlifecycle: SessionScopedQueryResetLifecycle\n): InstalledSessionScopedQueryResetLifecycle {\n\tconst state = getRegistrationState(queryClient);\n\tif (state.activeResets > 0) throw new Error(\"Lifecycle session-scoped Query нельзя установить во время сброса\");\n\tconst registration = { beforeReset: lifecycle.beforeReset, afterReset: lifecycle.afterReset };\n\tstate.registrations.add(registration);\n\tlet closed = false;\n\treturn {\n\t\tcleanup() {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\tstate.registrations.delete(registration);\n\t\t\treleaseEmptyRegistrationState(queryClient, state);\n\t\t}\n\t};\n}\n\n/** Приватная пара одного reset: перекрывающиеся вызовы не объединяются и не меняют прежний Query flow. */\nexport function beginSessionScopedQueryReset(queryClient: QueryClient): SessionScopedQueryResetBoundary {\n\tconst state = getRegistrationState(queryClient);\n\t// Marker публикуется даже без callbacks и раньше любого reentrant before/Query notification.\n\tstate.activeResets += 1;\n\tconst captured = [...state.registrations];\n\tconst retirements = captured.map(({ beforeReset }) => {\n\t\ttry {\n\t\t\treturn Promise.resolve(beforeReset());\n\t\t} catch (error) {\n\t\t\treturn Promise.reject(error);\n\t\t}\n\t});\n\treturn {\n\t\t// Без listeners cancelQueries начинается в прежнем синхронном проходе вызова reset.\n\t\tretirement: captured.length === 0 ? null : collectResetCallbackFailures(retirements),\n\t\tasync complete(outcome) {\n\t\t\ttry {\n\t\t\t\tconst completions = captured.map(({ afterReset }) => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\treturn Promise.resolve(afterReset(outcome));\n\t\t\t\t\t} catch (error) {\n\t\t\t\t\t\treturn Promise.reject(error);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\treturn await collectResetCallbackFailures(completions);\n\t\t\t} finally {\n\t\t\t\tstate.activeResets -= 1;\n\t\t\t\treleaseEmptyRegistrationState(queryClient, state);\n\t\t\t}\n\t\t}\n\t};\n}\n\n/** Все callbacks завершаются независимо; порядок ошибок совпадает с порядком регистрации. */\nasync function collectResetCallbackFailures(operations: readonly Promise<void>[]): Promise<readonly unknown[]> {\n\tconst results = await Promise.allSettled(operations);\n\treturn results.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n}\n","import { type Query, type QueryClient } from \"@tanstack/react-query\";\n\nimport { beginSessionScopedQueryReset } from \"./sessionScopedResetLifecycle\";\nimport {\n\ttype InstalledSessionScopedQueryReset,\n\ttype InstallSessionScopedQueryResetOptions,\n\ttype ResetSessionScopedQueriesOptions\n} from \"./sessionScopedTypes\";\n\nconst SESSION_SCOPED_QUERY_CACHE_RESET_EVENT = \"session-scoped-query-cache-reset\";\n\ntype SessionScopedQueryCacheResetEvent = {\n\treadonly type: typeof SESSION_SCOPED_QUERY_CACHE_RESET_EVENT;\n};\n\nlet broadcastSessionScopedQueryReset: (() => void) | undefined;\n\n/** Проверяет, относится ли query к данным текущей серверной сессии. */\nexport function isSessionScopedQuery(query: Pick<Query, \"meta\">): boolean {\n\treturn query.meta?.sessionScoped === true;\n}\n\n/**\n * Сбрасывает все session-scoped query после входа, выхода, обновления сессии\n * или потери авторизации.\n *\n * Сначала отменяются незавершённые запросы старой сессии, затем TanStack Query\n * очищает их состояние и повторно запрашивает только активные query. Обычные\n * публичные данные при этом остаются в кеше. По умолчанию отдельная команда\n * сброса отправляется другим вкладкам без передачи содержимого кеша или токенов.\n */\nexport async function resetSessionScopedQueries(queryClient: QueryClient, options: ResetSessionScopedQueriesOptions = {}): Promise<void> {\n\tconst boundary = beginSessionScopedQueryReset(queryClient);\n\tconst filters = { predicate: isSessionScopedQuery } as const;\n\tconst failures: unknown[] = [];\n\ttry {\n\t\tif (boundary.retirement) failures.push(...(await boundary.retirement));\n\t\ttry {\n\t\t\tawait queryClient.cancelQueries(filters);\n\t\t} catch (error) {\n\t\t\tfailures.push(error);\n\t\t}\n\n\t\t// Отказ retirement не оставляет доступным прежний snapshot и не допускает\n\t\t// новые чтения. Ошибка одного observer также не прерывает очистку остальных.\n\t\tconst matchedQueries = queryClient.getQueryCache().findAll(filters);\n\t\tfor (const query of matchedQueries) {\n\t\t\ttry {\n\t\t\t\tif (query.getObserversCount() === 0) {\n\t\t\t\t\tqueryClient.getQueryCache().remove(query);\n\t\t\t\t} else {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tquery.reset();\n\t\t\t\t\t} finally {\n\t\t\t\t\t\t// Hydration сохраняет SSR initialData: обычный reset мог бы вернуть старую сессию.\n\t\t\t\t\t\tquery.setState({ data: undefined, dataUpdatedAt: 0 });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tfailures.push(error);\n\t\t\t}\n\t\t}\n\n\t\tif (failures.length === 0) {\n\t\t\tawait queryClient.refetchQueries(\n\t\t\t\t{\n\t\t\t\t\tpredicate: (query) => isSessionScopedQuery(query) && query.getObserversCount() > 0,\n\t\t\t\t\ttype: \"active\"\n\t\t\t\t},\n\t\t\t\t{ cancelRefetch: true }\n\t\t\t);\n\n\t\t\tif (options.broadcast !== false) broadcastSessionScopedQueryReset?.();\n\t\t}\n\t} catch (error) {\n\t\tfailures.push(error);\n\t} finally {\n\t\tfailures.push(...(await boundary.complete({ status: failures.length === 0 ? \"completed\" : \"failed\" })));\n\t}\n\tif (failures.length === 1) throw failures[0];\n\tif (failures.length > 1) throw new AggregateError(failures, \"Не удалось завершить сброс session-scoped Query\");\n}\n\n/**\n * Подключает безопасную межвкладочную синхронизацию смены сессии.\n *\n * Канал передаёт только команду сброса. В отличие от полной синхронизации\n * Query cache, он не публикует данные query и потому подходит для auth-зависимых\n * ответов. На сервере и в браузерах без BroadcastChannel возвращается no-op.\n */\nexport function installSessionScopedQueryReset(\n\tqueryClient: QueryClient,\n\toptions: InstallSessionScopedQueryResetOptions\n): InstalledSessionScopedQueryReset {\n\tif (typeof window === \"undefined\" || typeof BroadcastChannel === \"undefined\") {\n\t\treturn { cleanup: () => undefined };\n\t}\n\n\tconst channel = new BroadcastChannel(options.channelName);\n\tconst broadcast = () => {\n\t\tconst event: SessionScopedQueryCacheResetEvent = {\n\t\t\ttype: SESSION_SCOPED_QUERY_CACHE_RESET_EVENT\n\t\t};\n\t\tchannel.postMessage(event);\n\t};\n\n\tbroadcastSessionScopedQueryReset = broadcast;\n\tchannel.onmessage = (event: MessageEvent<unknown>) => {\n\t\tif (!isSessionScopedQueryCacheResetEvent(event.data)) return;\n\t\tvoid resetSessionScopedQueries(queryClient, { broadcast: false }).catch(async (error: unknown) => {\n\t\t\tif (!options.onError) {\n\t\t\t\tconsole.error(\"Не удалось обработать межвкладочный сброс session-scoped Query\", error);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttry {\n\t\t\t\tawait options.onError(error);\n\t\t\t} catch (reportingError) {\n\t\t\t\tconsole.error(\n\t\t\t\t\t\"Не удалось сообщить об ошибке межвкладочного сброса session-scoped Query\",\n\t\t\t\t\tnew AggregateError([error, reportingError], \"Ошибка сброса и её обработчика\")\n\t\t\t\t);\n\t\t\t}\n\t\t});\n\t};\n\n\tlet closed = false;\n\treturn {\n\t\tcleanup: () => {\n\t\t\tif (closed) return;\n\t\t\tclosed = true;\n\t\t\tchannel.onmessage = null;\n\t\t\tchannel.close();\n\t\t\tif (broadcastSessionScopedQueryReset === broadcast) {\n\t\t\t\tbroadcastSessionScopedQueryReset = undefined;\n\t\t\t}\n\t\t}\n\t};\n}\n\n/** Защищает обработчик канала от посторонних или устаревших сообщений. */\nfunction isSessionScopedQueryCacheResetEvent(value: unknown): value is SessionScopedQueryCacheResetEvent {\n\treturn typeof value === \"object\" && value !== null && \"type\" in value && value.type === SESSION_SCOPED_QUERY_CACHE_RESET_EVENT;\n}\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uuid-CUJPAbRY.js","names":[],"sources":["../../src/crypto/uuid.ts"],"sourcesContent":["/**\n * UUID v4 (RFC 4122)\n */\nexport function uuidv4(): string {\n\tif (crypto.randomUUID) {\n\t\treturn crypto.randomUUID();\n\t}\n\n\tconst bytes = new Uint8Array(16);\n\tcrypto.getRandomValues(bytes);\n\n\t// Версия 4\n\tbytes[6] = (bytes[6] & 0x0f) | 0x40;\n\t// Вариант RFC 4122\n\tbytes[8] = (bytes[8] & 0x3f) | 0x80;\n\n\tconst hex = new Array<string>(256);\n\tfor (let i = 0; i < 256; i++) {\n\t\thex[i] = (i + 0x100).toString(16).slice(1);\n\t}\n\n\treturn (\n\t\thex[bytes[0]] +\n\t\thex[bytes[1]] +\n\t\thex[bytes[2]] +\n\t\thex[bytes[3]] +\n\t\t\"-\" +\n\t\thex[bytes[4]] +\n\t\thex[bytes[5]] +\n\t\t\"-\" +\n\t\thex[bytes[6]] +\n\t\thex[bytes[7]] +\n\t\t\"-\" +\n\t\thex[bytes[8]] +\n\t\thex[bytes[9]] +\n\t\t\"-\" +\n\t\thex[bytes[10]] +\n\t\thex[bytes[11]] +\n\t\thex[bytes[12]] +\n\t\thex[bytes[13]] +\n\t\thex[bytes[14]] +\n\t\thex[bytes[15]]\n\t);\n}\n"],"mappings":";AAGA,SAAgB,IAAiB;CAChC,IAAI,OAAO,YACV,OAAO,OAAO,WAAW;CAG1B,IAAM,oBAAQ,IAAI,WAAW,EAAE;CAM/B,AALA,OAAO,gBAAgB,CAAK,GAG5B,EAAM,KAAM,EAAM,KAAK,KAAQ,IAE/B,EAAM,KAAM,EAAM,KAAK,KAAQ;CAE/B,IAAM,IAAU,MAAc,GAAG;CACjC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KACxB,EAAI,MAAM,IAAI,IAAA,CAAO,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;CAG1C,OACC,EAAI,EAAM,MACV,EAAI,EAAM,MACV,EAAI,EAAM,MACV,EAAI,EAAM,MACV,MACA,EAAI,EAAM,MACV,EAAI,EAAM,MACV,MACA,EAAI,EAAM,MACV,EAAI,EAAM,MACV,MACA,EAAI,EAAM,MACV,EAAI,EAAM,MACV,MACA,EAAI,EAAM,OACV,EAAI,EAAM,OACV,EAAI,EAAM,OACV,EAAI,EAAM,OACV,EAAI,EAAM,OACV,EAAI,EAAM;AAEZ"}
|