@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.
- package/LICENSE +21 -0
- package/README.md +654 -0
- package/dist/array/array.d.ts +30 -0
- package/dist/array/array.d.ts.map +1 -0
- package/dist/array/index.d.ts +3 -0
- package/dist/array/index.d.ts.map +1 -0
- package/dist/array/index.js +2 -0
- package/dist/array/reorder.d.ts +10 -0
- package/dist/array/reorder.d.ts.map +1 -0
- package/dist/auth/getClientFingerprint.d.ts +2 -0
- package/dist/auth/getClientFingerprint.d.ts.map +1 -0
- package/dist/binary/binaryToBlob.d.ts +13 -0
- package/dist/binary/binaryToBlob.d.ts.map +1 -0
- package/dist/binary/index.d.ts +3 -0
- package/dist/binary/index.d.ts.map +1 -0
- package/dist/binary/index.js +126 -0
- package/dist/binary/index.js.map +1 -0
- package/dist/binary/useBinaryFile.d.ts +8 -0
- package/dist/binary/useBinaryFile.d.ts.map +1 -0
- package/dist/bounded-copy-stack/boundedCopyStack.d.ts +26 -0
- package/dist/bounded-copy-stack/boundedCopyStack.d.ts.map +1 -0
- package/dist/bounded-copy-stack/index.d.ts +2 -0
- package/dist/bounded-copy-stack/index.d.ts.map +1 -0
- package/dist/bounded-copy-stack/index.js +26 -0
- package/dist/bounded-copy-stack/index.js.map +1 -0
- package/dist/chunks/array-BBSjoTRy.js +146 -0
- package/dist/chunks/array-BBSjoTRy.js.map +1 -0
- package/dist/chunks/dateUtils-D9dpdTl7.js +760 -0
- package/dist/chunks/dateUtils-D9dpdTl7.js.map +1 -0
- package/dist/chunks/formatters-CQppb89D.js +1234 -0
- package/dist/chunks/formatters-CQppb89D.js.map +1 -0
- package/dist/chunks/formulas-BxcH5Zjt.js +279 -0
- package/dist/chunks/formulas-BxcH5Zjt.js.map +1 -0
- package/dist/chunks/isRecord-DXDTW-jA.js +18 -0
- package/dist/chunks/isRecord-DXDTW-jA.js.map +1 -0
- package/dist/chunks/odata-service-BAYf08WI.js +1223 -0
- package/dist/chunks/odata-service-BAYf08WI.js.map +1 -0
- package/dist/chunks/string-comparison-BKT7PXmq.js +20 -0
- package/dist/chunks/string-comparison-BKT7PXmq.js.map +1 -0
- package/dist/chunks/validate-BChpTW6y.js +468 -0
- package/dist/chunks/validate-BChpTW6y.js.map +1 -0
- package/dist/context-menu/anchor.d.ts +19 -0
- package/dist/context-menu/anchor.d.ts.map +1 -0
- package/dist/context-menu/index.d.ts +4 -0
- package/dist/context-menu/index.d.ts.map +1 -0
- package/dist/context-menu/index.js +57 -0
- package/dist/context-menu/index.js.map +1 -0
- package/dist/context-menu/state.d.ts +6 -0
- package/dist/context-menu/state.d.ts.map +1 -0
- package/dist/context-menu/types.d.ts +25 -0
- package/dist/context-menu/types.d.ts.map +1 -0
- package/dist/copy/index.d.ts +5 -0
- package/dist/copy/index.d.ts.map +1 -0
- package/dist/copy/index.js +56 -0
- package/dist/copy/index.js.map +1 -0
- package/dist/copy/useCopyElementText.d.ts +6 -0
- package/dist/copy/useCopyElementText.d.ts.map +1 -0
- package/dist/copy/useCopyFeedback.d.ts +11 -0
- package/dist/copy/useCopyFeedback.d.ts.map +1 -0
- package/dist/copy/useCopyText.d.ts +4 -0
- package/dist/copy/useCopyText.d.ts.map +1 -0
- package/dist/copy/useElementText.d.ts +5 -0
- package/dist/copy/useElementText.d.ts.map +1 -0
- package/dist/crypto/hashString.d.ts +5 -0
- package/dist/crypto/hashString.d.ts.map +1 -0
- package/dist/crypto/index.d.ts +3 -0
- package/dist/crypto/index.d.ts.map +1 -0
- package/dist/crypto/index.js +62 -0
- package/dist/crypto/index.js.map +1 -0
- package/dist/crypto/uuid.d.ts +5 -0
- package/dist/crypto/uuid.d.ts.map +1 -0
- package/dist/currency/currency.d.ts +8 -0
- package/dist/currency/currency.d.ts.map +1 -0
- package/dist/currency/index.d.ts +2 -0
- package/dist/currency/index.d.ts.map +1 -0
- package/dist/currency/index.js +16 -0
- package/dist/currency/index.js.map +1 -0
- package/dist/date-segments/index.d.ts +3 -0
- package/dist/date-segments/index.d.ts.map +1 -0
- package/dist/date-segments/index.js +160 -0
- package/dist/date-segments/index.js.map +1 -0
- package/dist/date-segments/mask.d.ts +54 -0
- package/dist/date-segments/mask.d.ts.map +1 -0
- package/dist/dom/downloadFile.d.ts +4 -0
- package/dist/dom/downloadFile.d.ts.map +1 -0
- package/dist/dom/getOrCreatePortalRoot.d.ts +2 -0
- package/dist/dom/getOrCreatePortalRoot.d.ts.map +1 -0
- package/dist/dom/index.d.ts +10 -0
- package/dist/dom/index.d.ts.map +1 -0
- package/dist/dom/index.js +159 -0
- package/dist/dom/index.js.map +1 -0
- package/dist/dom/useClickOutside.d.ts +3 -0
- package/dist/dom/useClickOutside.d.ts.map +1 -0
- package/dist/dom/useElementHeightObserver.d.ts +3 -0
- package/dist/dom/useElementHeightObserver.d.ts.map +1 -0
- package/dist/dom/useEscapeDismiss.d.ts +14 -0
- package/dist/dom/useEscapeDismiss.d.ts.map +1 -0
- package/dist/dom/useFocusTrap.d.ts +5 -0
- package/dist/dom/useFocusTrap.d.ts.map +1 -0
- package/dist/dom/useIntersectionObserver.d.ts +4 -0
- package/dist/dom/useIntersectionObserver.d.ts.map +1 -0
- package/dist/dom/useIsTouchDevice.d.ts +2 -0
- package/dist/dom/useIsTouchDevice.d.ts.map +1 -0
- package/dist/dom/useOverlayFocus.d.ts +14 -0
- package/dist/dom/useOverlayFocus.d.ts.map +1 -0
- package/dist/error/index.d.ts +2 -0
- package/dist/error/index.d.ts.map +1 -0
- package/dist/error/index.js +20 -0
- package/dist/error/index.js.map +1 -0
- package/dist/error/missingContextError.d.ts +14 -0
- package/dist/error/missingContextError.d.ts.map +1 -0
- package/dist/error-report/breadcrumbs.d.ts +11 -0
- package/dist/error-report/breadcrumbs.d.ts.map +1 -0
- package/dist/error-report/capture.d.ts +6 -0
- package/dist/error-report/capture.d.ts.map +1 -0
- package/dist/error-report/diagnostics.d.ts +29 -0
- package/dist/error-report/diagnostics.d.ts.map +1 -0
- package/dist/error-report/drafts.d.ts +25 -0
- package/dist/error-report/drafts.d.ts.map +1 -0
- package/dist/error-report/environment.d.ts +19 -0
- package/dist/error-report/environment.d.ts.map +1 -0
- package/dist/error-report/errorInfo.d.ts +7 -0
- package/dist/error-report/errorInfo.d.ts.map +1 -0
- package/dist/error-report/index.d.ts +11 -0
- package/dist/error-report/index.d.ts.map +1 -0
- package/dist/error-report/index.js +464 -0
- package/dist/error-report/index.js.map +1 -0
- package/dist/error-report/runtime.d.ts +26 -0
- package/dist/error-report/runtime.d.ts.map +1 -0
- package/dist/error-report/safeValue.d.ts +14 -0
- package/dist/error-report/safeValue.d.ts.map +1 -0
- package/dist/error-report/transport.d.ts +32 -0
- package/dist/error-report/transport.d.ts.map +1 -0
- package/dist/error-report/types.d.ts +123 -0
- package/dist/error-report/types.d.ts.map +1 -0
- package/dist/excel/excel.d.ts +52 -0
- package/dist/excel/excel.d.ts.map +1 -0
- package/dist/excel/index.d.ts +3 -0
- package/dist/excel/index.d.ts.map +1 -0
- package/dist/excel/index.js +139 -0
- package/dist/excel/index.js.map +1 -0
- package/dist/excel/tableExport.d.ts +26 -0
- package/dist/excel/tableExport.d.ts.map +1 -0
- package/dist/file/contentDisposition.d.ts +11 -0
- package/dist/file/contentDisposition.d.ts.map +1 -0
- package/dist/file/image/index.d.ts +3 -0
- package/dist/file/image/index.d.ts.map +1 -0
- package/dist/file/image/readImageFile.d.ts +8 -0
- package/dist/file/image/readImageFile.d.ts.map +1 -0
- package/dist/file/image/types.d.ts +30 -0
- package/dist/file/image/types.d.ts.map +1 -0
- package/dist/file/index.d.ts +5 -0
- package/dist/file/index.d.ts.map +1 -0
- package/dist/file/index.js +211 -0
- package/dist/file/index.js.map +1 -0
- package/dist/file/mimeType.d.ts +2 -0
- package/dist/file/mimeType.d.ts.map +1 -0
- package/dist/file/read-file/assert.d.ts +4 -0
- package/dist/file/read-file/assert.d.ts.map +1 -0
- package/dist/file/read-file/index.d.ts +4 -0
- package/dist/file/read-file/index.d.ts.map +1 -0
- package/dist/file/read-file/readFile.d.ts +14 -0
- package/dist/file/read-file/readFile.d.ts.map +1 -0
- package/dist/file/read-file/types.d.ts +43 -0
- package/dist/file/read-file/types.d.ts.map +1 -0
- package/dist/form/formErrors.d.ts +2 -0
- package/dist/form/formErrors.d.ts.map +1 -0
- package/dist/form/index.d.ts +2 -0
- package/dist/form/index.d.ts.map +1 -0
- package/dist/form/index.js +19 -0
- package/dist/form/index.js.map +1 -0
- package/dist/formatters/boolean/index.d.ts +3 -0
- package/dist/formatters/boolean/index.d.ts.map +1 -0
- package/dist/formatters/boolean/parseAbapBoolean.d.ts +3 -0
- package/dist/formatters/boolean/parseAbapBoolean.d.ts.map +1 -0
- package/dist/formatters/boolean/toAbapBoolean.d.ts +3 -0
- package/dist/formatters/boolean/toAbapBoolean.d.ts.map +1 -0
- package/dist/formatters/date/calendarDate.d.ts +48 -0
- package/dist/formatters/date/calendarDate.d.ts.map +1 -0
- package/dist/formatters/date/calendarPeriod.d.ts +33 -0
- package/dist/formatters/date/calendarPeriod.d.ts.map +1 -0
- package/dist/formatters/date/dateRange.d.ts +25 -0
- package/dist/formatters/date/dateRange.d.ts.map +1 -0
- package/dist/formatters/date/educationDate.d.ts +79 -0
- package/dist/formatters/date/educationDate.d.ts.map +1 -0
- package/dist/formatters/date/formatDate.d.ts +98 -0
- package/dist/formatters/date/formatDate.d.ts.map +1 -0
- package/dist/formatters/date/index.d.ts +14 -0
- package/dist/formatters/date/index.d.ts.map +1 -0
- package/dist/formatters/date/parseDate.d.ts +44 -0
- package/dist/formatters/date/parseDate.d.ts.map +1 -0
- package/dist/formatters/date/pattern.d.ts +38 -0
- package/dist/formatters/date/pattern.d.ts.map +1 -0
- package/dist/formatters/date/presets.d.ts +108 -0
- package/dist/formatters/date/presets.d.ts.map +1 -0
- package/dist/formatters/date/relativeRanges.d.ts +35 -0
- package/dist/formatters/date/relativeRanges.d.ts.map +1 -0
- package/dist/formatters/date/types.d.ts +70 -0
- package/dist/formatters/date/types.d.ts.map +1 -0
- package/dist/formatters/formatName.d.ts +13 -0
- package/dist/formatters/formatName.d.ts.map +1 -0
- package/dist/formatters/formatPhone.d.ts +3 -0
- package/dist/formatters/formatPhone.d.ts.map +1 -0
- package/dist/formatters/formatTagAsHashtag.d.ts +6 -0
- package/dist/formatters/formatTagAsHashtag.d.ts.map +1 -0
- package/dist/formatters/index.d.ts +11 -0
- package/dist/formatters/index.d.ts.map +1 -0
- package/dist/formatters/index.js +6 -0
- package/dist/formatters/normalizeLeadingZeros.d.ts +27 -0
- package/dist/formatters/normalizeLeadingZeros.d.ts.map +1 -0
- package/dist/formatters/number/compact.d.ts +10 -0
- package/dist/formatters/number/compact.d.ts.map +1 -0
- package/dist/formatters/number/formatCompactNumber.d.ts +49 -0
- package/dist/formatters/number/formatCompactNumber.d.ts.map +1 -0
- package/dist/formatters/number/formatNumber.d.ts +93 -0
- package/dist/formatters/number/formatNumber.d.ts.map +1 -0
- package/dist/formatters/number/index.d.ts +6 -0
- package/dist/formatters/number/index.d.ts.map +1 -0
- package/dist/formatters/number/isZeroValue.d.ts +5 -0
- package/dist/formatters/number/isZeroValue.d.ts.map +1 -0
- package/dist/formatters/number/parseNumber.d.ts +12 -0
- package/dist/formatters/number/parseNumber.d.ts.map +1 -0
- package/dist/formatters/number/presets.d.ts +24 -0
- package/dist/formatters/number/presets.d.ts.map +1 -0
- package/dist/formatters/number/types.d.ts +46 -0
- package/dist/formatters/number/types.d.ts.map +1 -0
- package/dist/formatters/pipeline/clone.d.ts +15 -0
- package/dist/formatters/pipeline/clone.d.ts.map +1 -0
- package/dist/formatters/pipeline/definitions.d.ts +14 -0
- package/dist/formatters/pipeline/definitions.d.ts.map +1 -0
- package/dist/formatters/pipeline/dependencies.d.ts +38 -0
- package/dist/formatters/pipeline/dependencies.d.ts.map +1 -0
- package/dist/formatters/pipeline/execute.d.ts +21 -0
- package/dist/formatters/pipeline/execute.d.ts.map +1 -0
- package/dist/formatters/pipeline/index.d.ts +10 -0
- package/dist/formatters/pipeline/index.d.ts.map +1 -0
- package/dist/formatters/pipeline/normalize.d.ts +3 -0
- package/dist/formatters/pipeline/normalize.d.ts.map +1 -0
- package/dist/formatters/pipeline/registry.d.ts +11 -0
- package/dist/formatters/pipeline/registry.d.ts.map +1 -0
- package/dist/formatters/pipeline/rekey.d.ts +11 -0
- package/dist/formatters/pipeline/rekey.d.ts.map +1 -0
- package/dist/formatters/pipeline/runtime.d.ts +17 -0
- package/dist/formatters/pipeline/runtime.d.ts.map +1 -0
- package/dist/formatters/pipeline/types.d.ts +379 -0
- package/dist/formatters/pipeline/types.d.ts.map +1 -0
- package/dist/formatters/pipeline/validate.d.ts +29 -0
- package/dist/formatters/pipeline/validate.d.ts.map +1 -0
- package/dist/formatters/rowBased/context.d.ts +9 -0
- package/dist/formatters/rowBased/context.d.ts.map +1 -0
- package/dist/formatters/rowBased/definitions/index.d.ts +6 -0
- package/dist/formatters/rowBased/definitions/index.d.ts.map +1 -0
- package/dist/formatters/rowBased/index.d.ts +4 -0
- package/dist/formatters/rowBased/index.d.ts.map +1 -0
- package/dist/formatters/rowBased/registry.d.ts +19 -0
- package/dist/formatters/rowBased/registry.d.ts.map +1 -0
- package/dist/formatters/rowBased/types.d.ts +29 -0
- package/dist/formatters/rowBased/types.d.ts.map +1 -0
- package/dist/formatters/strings/index.d.ts +6 -0
- package/dist/formatters/strings/index.d.ts.map +1 -0
- package/dist/formatters/strings/normalizeText.d.ts +11 -0
- package/dist/formatters/strings/normalizeText.d.ts.map +1 -0
- package/dist/formatters/strings/startsWithIgnoringZeros.d.ts +2 -0
- package/dist/formatters/strings/startsWithIgnoringZeros.d.ts.map +1 -0
- package/dist/formatters/strings/stripInnerSpaces.d.ts +6 -0
- package/dist/formatters/strings/stripInnerSpaces.d.ts.map +1 -0
- package/dist/formatters/strings/stripLeadingZeros.d.ts +10 -0
- package/dist/formatters/strings/stripLeadingZeros.d.ts.map +1 -0
- package/dist/formatters/strings/truncateText.d.ts +2 -0
- package/dist/formatters/strings/truncateText.d.ts.map +1 -0
- package/dist/formatters/valueState/fixedValueStateResolver.d.ts +41 -0
- package/dist/formatters/valueState/fixedValueStateResolver.d.ts.map +1 -0
- package/dist/formatters/valueState/index.d.ts +7 -0
- package/dist/formatters/valueState/index.d.ts.map +1 -0
- package/dist/formatters/valueState/presentation.d.ts +4 -0
- package/dist/formatters/valueState/presentation.d.ts.map +1 -0
- package/dist/formatters/valueState/resolveValueStateClassName.d.ts +3 -0
- package/dist/formatters/valueState/resolveValueStateClassName.d.ts.map +1 -0
- package/dist/formatters/valueState/thresholdValueStateResolver.d.ts +40 -0
- package/dist/formatters/valueState/thresholdValueStateResolver.d.ts.map +1 -0
- package/dist/formatters/valueState/types.d.ts +35 -0
- package/dist/formatters/valueState/types.d.ts.map +1 -0
- package/dist/formatters/valueState/valueStateRegistry.d.ts +45 -0
- package/dist/formatters/valueState/valueStateRegistry.d.ts.map +1 -0
- package/dist/formulas/definitions/base.d.ts +7 -0
- package/dist/formulas/definitions/base.d.ts.map +1 -0
- package/dist/formulas/definitions/index.d.ts +3 -0
- package/dist/formulas/definitions/index.d.ts.map +1 -0
- package/dist/formulas/definitions/sales.d.ts +7 -0
- package/dist/formulas/definitions/sales.d.ts.map +1 -0
- package/dist/formulas/execute.d.ts +36 -0
- package/dist/formulas/execute.d.ts.map +1 -0
- package/dist/formulas/index.d.ts +5 -0
- package/dist/formulas/index.d.ts.map +1 -0
- package/dist/formulas/index.js +2 -0
- package/dist/formulas/perf.runtime.d.ts +48 -0
- package/dist/formulas/perf.runtime.d.ts.map +1 -0
- package/dist/formulas/registry.d.ts +10 -0
- package/dist/formulas/registry.d.ts.map +1 -0
- package/dist/formulas/types.d.ts +16 -0
- package/dist/formulas/types.d.ts.map +1 -0
- package/dist/formulas/validate.d.ts +22 -0
- package/dist/formulas/validate.d.ts.map +1 -0
- package/dist/hooks/index.d.ts +11 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +291 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/types.d.ts +4 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/useBlockBrowserZoom.d.ts +7 -0
- package/dist/hooks/useBlockBrowserZoom.d.ts.map +1 -0
- package/dist/hooks/useDebounce.d.ts +2 -0
- package/dist/hooks/useDebounce.d.ts.map +1 -0
- package/dist/hooks/useDebounceCallback.d.ts +22 -0
- package/dist/hooks/useDebounceCallback.d.ts.map +1 -0
- package/dist/hooks/useDndSortableSensors.d.ts +13 -0
- package/dist/hooks/useDndSortableSensors.d.ts.map +1 -0
- package/dist/hooks/useFloatingListbox.d.ts +61 -0
- package/dist/hooks/useFloatingListbox.d.ts.map +1 -0
- package/dist/hooks/useLazyComponent.d.ts +28 -0
- package/dist/hooks/useLazyComponent.d.ts.map +1 -0
- package/dist/hooks/useReferenceTrace.d.ts +2 -0
- package/dist/hooks/useReferenceTrace.d.ts.map +1 -0
- package/dist/hooks/useSearchLink.d.ts +5 -0
- package/dist/hooks/useSearchLink.d.ts.map +1 -0
- package/dist/hooks/useSearchParams.d.ts +8 -0
- package/dist/hooks/useSearchParams.d.ts.map +1 -0
- package/dist/hooks/useThrottledCallback.d.ts +43 -0
- package/dist/hooks/useThrottledCallback.d.ts.map +1 -0
- package/dist/http/httpHeaders.d.ts +3 -0
- package/dist/http/httpHeaders.d.ts.map +1 -0
- package/dist/http/index.d.ts +3 -0
- package/dist/http/index.d.ts.map +1 -0
- package/dist/http/index.js +18 -0
- package/dist/http/index.js.map +1 -0
- package/dist/http/textResponse.d.ts +7 -0
- package/dist/http/textResponse.d.ts.map +1 -0
- package/dist/media/breakpoints.d.ts +9 -0
- package/dist/media/breakpoints.d.ts.map +1 -0
- package/dist/media/getCurrentFontSize.d.ts +4 -0
- package/dist/media/getCurrentFontSize.d.ts.map +1 -0
- package/dist/media/index.d.ts +7 -0
- package/dist/media/index.d.ts.map +1 -0
- package/dist/media/index.js +147 -0
- package/dist/media/index.js.map +1 -0
- package/dist/media/pxToEm.d.ts +2 -0
- package/dist/media/pxToEm.d.ts.map +1 -0
- package/dist/media/responsive.d.ts +29 -0
- package/dist/media/responsive.d.ts.map +1 -0
- package/dist/media/useMatchMedia.d.ts +15 -0
- package/dist/media/useMatchMedia.d.ts.map +1 -0
- package/dist/media/useMediaQuery.d.ts +10 -0
- package/dist/media/useMediaQuery.d.ts.map +1 -0
- package/dist/notifications/index.d.ts +4 -0
- package/dist/notifications/index.d.ts.map +1 -0
- package/dist/notifications/index.js +124 -0
- package/dist/notifications/index.js.map +1 -0
- package/dist/notifications/notify.d.ts +32 -0
- package/dist/notifications/notify.d.ts.map +1 -0
- package/dist/notifications/store.d.ts +31 -0
- package/dist/notifications/store.d.ts.map +1 -0
- package/dist/notifications/types.d.ts +19 -0
- package/dist/notifications/types.d.ts.map +1 -0
- package/dist/number-scale/index.d.ts +3 -0
- package/dist/number-scale/index.d.ts.map +1 -0
- package/dist/number-scale/index.js +99 -0
- package/dist/number-scale/index.js.map +1 -0
- package/dist/number-scale/numberScale.d.ts +52 -0
- package/dist/number-scale/numberScale.d.ts.map +1 -0
- package/dist/number-scale/types.d.ts +44 -0
- package/dist/number-scale/types.d.ts.map +1 -0
- package/dist/odata/buildSeparatedArrays.d.ts +10 -0
- package/dist/odata/buildSeparatedArrays.d.ts.map +1 -0
- package/dist/odata/dateUtils.d.ts +14 -0
- package/dist/odata/dateUtils.d.ts.map +1 -0
- package/dist/odata/findCollectionPairs.d.ts +11 -0
- package/dist/odata/findCollectionPairs.d.ts.map +1 -0
- package/dist/odata/index.d.ts +6 -0
- package/dist/odata/index.d.ts.map +1 -0
- package/dist/odata/index.js +102 -0
- package/dist/odata/index.js.map +1 -0
- package/dist/odata/store.d.ts +42 -0
- package/dist/odata/store.d.ts.map +1 -0
- package/dist/odata/types.d.ts +12 -0
- package/dist/odata/types.d.ts.map +1 -0
- package/dist/odata-service/baseTypes.d.ts +6 -0
- package/dist/odata-service/baseTypes.d.ts.map +1 -0
- package/dist/odata-service/builder.d.ts +33 -0
- package/dist/odata-service/builder.d.ts.map +1 -0
- package/dist/odata-service/columns.d.ts +10 -0
- package/dist/odata-service/columns.d.ts.map +1 -0
- package/dist/odata-service/filterDefinitions.d.ts +113 -0
- package/dist/odata-service/filterDefinitions.d.ts.map +1 -0
- package/dist/odata-service/filters.d.ts +75 -0
- package/dist/odata-service/filters.d.ts.map +1 -0
- package/dist/odata-service/formatters.d.ts +33 -0
- package/dist/odata-service/formatters.d.ts.map +1 -0
- package/dist/odata-service/index.d.ts +16 -0
- package/dist/odata-service/index.d.ts.map +1 -0
- package/dist/odata-service/index.js +2 -0
- package/dist/odata-service/parser.d.ts +14 -0
- package/dist/odata-service/parser.d.ts.map +1 -0
- package/dist/odata-service/schema.d.ts +8 -0
- package/dist/odata-service/schema.d.ts.map +1 -0
- package/dist/odata-service/sorts.d.ts +26 -0
- package/dist/odata-service/sorts.d.ts.map +1 -0
- package/dist/odata-service/sqlFilters.d.ts +32 -0
- package/dist/odata-service/sqlFilters.d.ts.map +1 -0
- package/dist/odata-service/types.d.ts +166 -0
- package/dist/odata-service/types.d.ts.map +1 -0
- package/dist/odata-service/typesValidation.d.ts +6 -0
- package/dist/odata-service/typesValidation.d.ts.map +1 -0
- package/dist/odata-service/unwrapODataQueryResult.d.ts +22 -0
- package/dist/odata-service/unwrapODataQueryResult.d.ts.map +1 -0
- package/dist/odata-service/utils.d.ts +5 -0
- package/dist/odata-service/utils.d.ts.map +1 -0
- package/dist/odata-service/wrapParams.d.ts +7 -0
- package/dist/odata-service/wrapParams.d.ts.map +1 -0
- package/dist/presets/index.d.ts +2 -0
- package/dist/presets/index.d.ts.map +1 -0
- package/dist/presets/index.js +23 -0
- package/dist/presets/index.js.map +1 -0
- package/dist/presets/presets.d.ts +20 -0
- package/dist/presets/presets.d.ts.map +1 -0
- package/dist/pwa/index.d.ts +3 -0
- package/dist/pwa/index.d.ts.map +1 -0
- package/dist/pwa/index.js +206 -0
- package/dist/pwa/index.js.map +1 -0
- package/dist/pwa/serviceWorker.d.ts +31 -0
- package/dist/pwa/serviceWorker.d.ts.map +1 -0
- package/dist/pwa/swCachePolicy.d.ts +24 -0
- package/dist/pwa/swCachePolicy.d.ts.map +1 -0
- package/dist/pwa/useServiceWorkerUpdate.d.ts +6 -0
- package/dist/pwa/useServiceWorkerUpdate.d.ts.map +1 -0
- package/dist/query-client/broadcast.d.ts +23 -0
- package/dist/query-client/broadcast.d.ts.map +1 -0
- package/dist/query-client/index.d.ts +5 -0
- package/dist/query-client/index.d.ts.map +1 -0
- package/dist/query-client/index.js +204 -0
- package/dist/query-client/index.js.map +1 -0
- package/dist/query-client/persistence.d.ts +33 -0
- package/dist/query-client/persistence.d.ts.map +1 -0
- package/dist/query-client/queryClient.d.ts +127 -0
- package/dist/query-client/queryClient.d.ts.map +1 -0
- package/dist/query-client/queryPersistenceAdapter.d.ts +7 -0
- package/dist/query-client/queryPersistenceAdapter.d.ts.map +1 -0
- package/dist/range-output/index.d.ts +2 -0
- package/dist/range-output/index.d.ts.map +1 -0
- package/dist/range-output/index.js +22 -0
- package/dist/range-output/index.js.map +1 -0
- package/dist/range-output/rangeOutput.d.ts +15 -0
- package/dist/range-output/rangeOutput.d.ts.map +1 -0
- package/dist/seo/index.d.ts +3 -0
- package/dist/seo/index.d.ts.map +1 -0
- package/dist/seo/index.js +125 -0
- package/dist/seo/index.js.map +1 -0
- package/dist/seo/seo.d.ts +16 -0
- package/dist/seo/seo.d.ts.map +1 -0
- package/dist/seo/types.d.ts +28 -0
- package/dist/seo/types.d.ts.map +1 -0
- package/dist/session-storage/index.d.ts +2 -0
- package/dist/session-storage/index.d.ts.map +1 -0
- package/dist/session-storage/index.js +17 -0
- package/dist/session-storage/index.js.map +1 -0
- package/dist/session-storage/sessionId.d.ts +8 -0
- package/dist/session-storage/sessionId.d.ts.map +1 -0
- package/dist/string-comparison/compareStrings.d.ts +9 -0
- package/dist/string-comparison/compareStrings.d.ts.map +1 -0
- package/dist/string-comparison/index.d.ts +2 -0
- package/dist/string-comparison/index.d.ts.map +1 -0
- package/dist/string-comparison/index.js +2 -0
- package/dist/table/columnLayout.d.ts +23 -0
- package/dist/table/columnLayout.d.ts.map +1 -0
- package/dist/table/columnOrder.d.ts +21 -0
- package/dist/table/columnOrder.d.ts.map +1 -0
- package/dist/table/columnSizing.d.ts +7 -0
- package/dist/table/columnSizing.d.ts.map +1 -0
- package/dist/table/index.d.ts +9 -0
- package/dist/table/index.d.ts.map +1 -0
- package/dist/table/index.js +229 -0
- package/dist/table/index.js.map +1 -0
- package/dist/table/odataAdapter.d.ts +63 -0
- package/dist/table/odataAdapter.d.ts.map +1 -0
- package/dist/table/selection.d.ts +16 -0
- package/dist/table/selection.d.ts.map +1 -0
- package/dist/table/types.d.ts +60 -0
- package/dist/table/types.d.ts.map +1 -0
- package/dist/table/useTableRowSelection.d.ts +19 -0
- package/dist/table/useTableRowSelection.d.ts.map +1 -0
- package/dist/table/utils.d.ts +20 -0
- package/dist/table/utils.d.ts.map +1 -0
- package/dist/three-scene/index.d.ts +3 -0
- package/dist/three-scene/index.d.ts.map +1 -0
- package/dist/three-scene/index.js +84 -0
- package/dist/three-scene/index.js.map +1 -0
- package/dist/three-scene/threeSceneAvailability.d.ts +15 -0
- package/dist/three-scene/threeSceneAvailability.d.ts.map +1 -0
- package/dist/three-scene/useThreeSceneAvailability.d.ts +8 -0
- package/dist/three-scene/useThreeSceneAvailability.d.ts.map +1 -0
- package/dist/tree-table/buildTreeTableRows.d.ts +9 -0
- package/dist/tree-table/buildTreeTableRows.d.ts.map +1 -0
- package/dist/tree-table/index.d.ts +4 -0
- package/dist/tree-table/index.d.ts.map +1 -0
- package/dist/tree-table/index.js +126 -0
- package/dist/tree-table/index.js.map +1 -0
- package/dist/tree-table/transposeFlatRowsToTreeTableRows.d.ts +11 -0
- package/dist/tree-table/transposeFlatRowsToTreeTableRows.d.ts.map +1 -0
- package/dist/tree-table/types.d.ts +87 -0
- package/dist/tree-table/types.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +8 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/types.d.ts +12 -0
- package/dist/types/types.d.ts.map +1 -0
- package/dist/utils/childrenCount.d.ts +3 -0
- package/dist/utils/childrenCount.d.ts.map +1 -0
- package/dist/utils/cn.d.ts +6 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/createLazyComponent.d.ts +22 -0
- package/dist/utils/createLazyComponent.d.ts.map +1 -0
- package/dist/utils/deepCloneWithoutFunctions.d.ts +20 -0
- package/dist/utils/deepCloneWithoutFunctions.d.ts.map +1 -0
- package/dist/utils/deepCopyWithoutFunctions.d.ts +10 -0
- package/dist/utils/deepCopyWithoutFunctions.d.ts.map +1 -0
- package/dist/utils/index.d.ts +17 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +209 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/keyboard.d.ts +36 -0
- package/dist/utils/keyboard.d.ts.map +1 -0
- package/dist/utils/logger.d.ts +2 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/selectNavigation.d.ts +8 -0
- package/dist/utils/selectNavigation.d.ts.map +1 -0
- package/dist/utils/stableStringify.d.ts +8 -0
- package/dist/utils/stableStringify.d.ts.map +1 -0
- package/dist/utils/toBase64.d.ts +3 -0
- package/dist/utils/toBase64.d.ts.map +1 -0
- package/dist/utils/treeNode.d.ts +9 -0
- package/dist/utils/treeNode.d.ts.map +1 -0
- package/dist/validators/index.d.ts +7 -0
- package/dist/validators/index.d.ts.map +1 -0
- package/dist/validators/index.js +54 -0
- package/dist/validators/index.js.map +1 -0
- package/dist/validators/isDomReference.d.ts +3 -0
- package/dist/validators/isDomReference.d.ts.map +1 -0
- package/dist/validators/isImageExtension.d.ts +3 -0
- package/dist/validators/isImageExtension.d.ts.map +1 -0
- package/dist/validators/isRecord.d.ts +5 -0
- package/dist/validators/isRecord.d.ts.map +1 -0
- package/dist/validators/isSafe.d.ts +2 -0
- package/dist/validators/isSafe.d.ts.map +1 -0
- package/dist/validators/positiveInteger.d.ts +2 -0
- package/dist/validators/positiveInteger.d.ts.map +1 -0
- package/dist/validators/validateUrl.d.ts +10 -0
- package/dist/validators/validateUrl.d.ts.map +1 -0
- package/dist/virtualizer/index.d.ts +2 -0
- package/dist/virtualizer/index.d.ts.map +1 -0
- package/dist/virtualizer/index.js +19 -0
- package/dist/virtualizer/index.js.map +1 -0
- package/dist/virtualizer/useFetchNextPageEffect.d.ts +8 -0
- package/dist/virtualizer/useFetchNextPageEffect.d.ts.map +1 -0
- package/dist/xml/index.d.ts +2 -0
- package/dist/xml/index.d.ts.map +1 -0
- package/dist/xml/index.js +17 -0
- package/dist/xml/index.js.map +1 -0
- package/dist/xml/xml.d.ts +5 -0
- package/dist/xml/xml.d.ts.map +1 -0
- package/package.json +428 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/query-client/broadcast.ts","../../src/query-client/queryPersistenceAdapter.ts","../../src/query-client/persistence.ts","../../src/query-client/queryClient.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","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\";\n\nimport { getQueryPersistenceProjectAdapter } from \"./queryPersistenceAdapter\";\n\nimport type { Query, QueryMeta } from \"@tanstack/react-query\";\n\nexport type AppQueryMeta = {\n\tpersist?: boolean;\n} & Record<string, unknown>;\n\ndeclare module \"@tanstack/react-query\" {\n\tinterface Register {\n\t\tqueryMeta: AppQueryMeta;\n\t}\n}\n\nconst STORE_NAME = \"queries\";\n\nexport const REACT_QUERY_PERSISTENCE_BUSTER = __REACT_QUERY_PERSISTENCE_BUSTER__;\nexport const REACT_QUERY_PERSISTENCE_MAX_AGE = 90 * 24 * 60 * 60 * 1000;\n\nexport const persistedQueryMeta = { persist: true } as const satisfies QueryMeta;\n\ntype IndexedDbQueryStorageOptions = {\n\tdbName?: string;\n\tstoreName?: string;\n\tindexedDB?: IDBFactory;\n};\n\nfunction resolveIndexedDbFactory(factory?: IDBFactory) {\n\tif (factory) return factory;\n\tif (typeof globalThis.indexedDB === \"undefined\") return undefined;\n\treturn globalThis.indexedDB;\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\nexport function shouldPersistQuery(query: Pick<Query, \"meta\">) {\n\treturn query.meta?.persist === true;\n}\n\nexport function createIndexedDbQueryStorage<TStorageValue = unknown>(\n\toptions: IndexedDbQueryStorageOptions = {}\n): AsyncStorage<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\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\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\n\treturn experimental_createQueryPersister<PersistedQuery>({\n\t\tstorage,\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}\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 * Создаёт singleton QueryClient (SPA).\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 * ### не использвать, только планируется реализация\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"],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { type AsyncStorage, type PersistedQuery } from "@tanstack/query-persist-client-core";
|
|
2
|
+
import type { Query } from "@tanstack/react-query";
|
|
3
|
+
export type AppQueryMeta = {
|
|
4
|
+
persist?: boolean;
|
|
5
|
+
} & Record<string, unknown>;
|
|
6
|
+
declare module "@tanstack/react-query" {
|
|
7
|
+
interface Register {
|
|
8
|
+
queryMeta: AppQueryMeta;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export declare const REACT_QUERY_PERSISTENCE_BUSTER: string;
|
|
12
|
+
export declare const REACT_QUERY_PERSISTENCE_MAX_AGE: number;
|
|
13
|
+
export declare const persistedQueryMeta: {
|
|
14
|
+
readonly persist: true;
|
|
15
|
+
};
|
|
16
|
+
type IndexedDbQueryStorageOptions = {
|
|
17
|
+
dbName?: string;
|
|
18
|
+
storeName?: string;
|
|
19
|
+
indexedDB?: IDBFactory;
|
|
20
|
+
};
|
|
21
|
+
export declare function shouldPersistQuery(query: Pick<Query, "meta">): boolean;
|
|
22
|
+
export declare function createIndexedDbQueryStorage<TStorageValue = unknown>(options?: IndexedDbQueryStorageOptions): AsyncStorage<TStorageValue> | undefined;
|
|
23
|
+
export declare function createReactQueryPersister(): {
|
|
24
|
+
persisterFn: <T, TQueryKey extends import("@tanstack/query-core").QueryKey>(queryFn: (context: import("@tanstack/query-core").QueryFunctionContext<TQueryKey>) => T | Promise<T>, ctx: import("@tanstack/query-core").QueryFunctionContext<TQueryKey>, query: Query) => Promise<T>;
|
|
25
|
+
persistQuery: (query: Query) => Promise<void>;
|
|
26
|
+
persistQueryByKey: (queryKey: import("@tanstack/query-core").QueryKey, queryClient: import("@tanstack/query-core").QueryClient) => Promise<void>;
|
|
27
|
+
retrieveQuery: <T>(queryHash: string, afterRestoreMacroTask?: (persistedQuery: PersistedQuery) => void) => Promise<T | undefined>;
|
|
28
|
+
persisterGc: () => Promise<void>;
|
|
29
|
+
restoreQueries: (queryClient: import("@tanstack/query-core").QueryClient, filters?: Pick<import("@tanstack/query-core").QueryFilters, "queryKey" | "exact">) => Promise<void>;
|
|
30
|
+
removeQueries: (filters?: Pick<import("@tanstack/query-core").QueryFilters, "queryKey" | "exact">) => Promise<void>;
|
|
31
|
+
} | undefined;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=persistence.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistence.d.ts","sourceRoot":"","sources":["../../src/query-client/persistence.ts"],"names":[],"mappings":"AAAA,OAAO,EAAqC,KAAK,YAAY,EAAE,KAAK,cAAc,EAAE,MAAM,qCAAqC,CAAC;AAIhI,OAAO,KAAK,EAAE,KAAK,EAAa,MAAM,uBAAuB,CAAC;AAE9D,MAAM,MAAM,YAAY,GAAG;IAC1B,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5B,OAAO,QAAQ,uBAAuB,CAAC;IACtC,UAAU,QAAQ;QACjB,SAAS,EAAE,YAAY,CAAC;KACxB;CACD;AAID,eAAO,MAAM,8BAA8B,QAAqC,CAAC;AACjF,eAAO,MAAM,+BAA+B,QAA2B,CAAC;AAExE,eAAO,MAAM,kBAAkB;;CAAiD,CAAC;AAEjF,KAAK,4BAA4B,GAAG;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,UAAU,CAAC;CACvB,CAAC;AAgCF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,WAE5D;AAED,wBAAgB,2BAA2B,CAAC,aAAa,GAAG,OAAO,EAClE,OAAO,GAAE,4BAAiC,GACxC,YAAY,CAAC,aAAa,CAAC,GAAG,SAAS,CAsFzC;AAED,wBAAgB,yBAAyB;;;;+DAzFjB,CAAC;;qFAKrB,CAAC;2BAEU,CAAC;cAgGf"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { DefaultError, Mutation, MutationFunctionContext, Query, QueryClient, QueryKey } from "@tanstack/react-query";
|
|
2
|
+
export type QueryBroadcastOptions = {
|
|
3
|
+
onQueryError?: (error: DefaultError, query: Query<unknown, unknown, unknown>) => void;
|
|
4
|
+
onMutationError?: (error: DefaultError, variables: unknown, onMutateResult: unknown, mutation: Mutation<unknown, unknown, unknown>, context: MutationFunctionContext) => Promise<unknown> | unknown;
|
|
5
|
+
};
|
|
6
|
+
/**
|
|
7
|
+
* Создаёт singleton QueryClient (SPA).
|
|
8
|
+
*/
|
|
9
|
+
export declare function createQueryClient({ onQueryError, onMutationError }: QueryBroadcastOptions): QueryClient;
|
|
10
|
+
/**
|
|
11
|
+
* Контекст, возвращаемый из `onMutateOptimistic`.
|
|
12
|
+
* Содержит снапшот кеша до оптимистичного обновления.
|
|
13
|
+
* Передаётся в `onError`, `onSuccess`, `onSettled` через TanStack Query.
|
|
14
|
+
*/
|
|
15
|
+
export type OptimisticContext<TQueryCacheData> = {
|
|
16
|
+
previous: TQueryCacheData | undefined;
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* ### не использвать, только планируется реализация
|
|
20
|
+
*
|
|
21
|
+
* _Оптимистичное обновление — это когда мы моментально меняем локальный кэш (и UI) до ответа сервера,
|
|
22
|
+
* чтобы интерфейс был отзывчивым. Если сервер вернул ошибку — откатываем изменения.
|
|
23
|
+
* Если сервер подтвердил — либо принимаем ответ сервера,
|
|
24
|
+
* либо оставляем оптимистичное состояние (в зависимости от ситуации)._
|
|
25
|
+
*
|
|
26
|
+
* Обработчик `onMutate` для оптимистичного обновления.
|
|
27
|
+
*
|
|
28
|
+
* Выполняет три шага:
|
|
29
|
+
* 1. Отменяет активные запросы по ключу — предотвращает гонку с сервером.
|
|
30
|
+
* 2. Сохраняет снапшот текущего состояния кеша.
|
|
31
|
+
* 3. Применяет оптимистичный патч через `patcher`.
|
|
32
|
+
*
|
|
33
|
+
* Возвращает {@link OptimisticContext} — передаётся в `onError` для отката.
|
|
34
|
+
*
|
|
35
|
+
* @example
|
|
36
|
+
* // Обновление точечных данных в списке объектов
|
|
37
|
+
* useMutation({
|
|
38
|
+
* mutationFn: (data: SomeType) => { ... },
|
|
39
|
+
* onMutate: async (data) =>
|
|
40
|
+
* onMutateOptimistic(queryClient, someQueryKey, (old) => {
|
|
41
|
+
* if (!old) return old;
|
|
42
|
+
* return old.map((item) =>
|
|
43
|
+
* item.id === data.id ? { ...item, visible: data.visible } : item
|
|
44
|
+
* );
|
|
45
|
+
* }),
|
|
46
|
+
* onError: (_err, _vars, context) =>
|
|
47
|
+
* onErrorOptimistic(queryClient, someQueryKey, context),
|
|
48
|
+
* onSettled: () =>
|
|
49
|
+
* onSettledOptimistic(queryClient, someQueryKey),
|
|
50
|
+
* })
|
|
51
|
+
*/
|
|
52
|
+
export declare function onMutateOptimistic<TQueryCacheData>(qc: QueryClient, queryKey: QueryKey, patcher: (oldCache: TQueryCacheData | undefined) => TQueryCacheData | undefined): Promise<OptimisticContext<TQueryCacheData>>;
|
|
53
|
+
/**
|
|
54
|
+
* Обработчик `onError` для оптимистичного обновления.
|
|
55
|
+
*
|
|
56
|
+
* Откатывает кеш к снапшоту, сохранённому в {@link OptimisticContext}.
|
|
57
|
+
* Если `context` не определён (например, `onMutate` сам выбросил ошибку) — безопасно ничего не делает.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* onError: (_err, _vars, context) =>
|
|
61
|
+
* onErrorOptimistic(queryClient, someQueryKey, context),
|
|
62
|
+
*/
|
|
63
|
+
export declare function onErrorOptimistic<TQueryCacheData>(qc: QueryClient, queryKey: QueryKey, context: OptimisticContext<TQueryCacheData> | undefined): void;
|
|
64
|
+
/**
|
|
65
|
+
* Обработчик `onSuccess` для оптимистичного обновления — применяет данные сервера в кеш.
|
|
66
|
+
*
|
|
67
|
+
* Используется, когда сервер вернул авторитетные данные, которые нужно слить
|
|
68
|
+
* с текущим состоянием кеша (или заменить его целиком).
|
|
69
|
+
*
|
|
70
|
+
* Если сервер вернул `void` — эту функцию вызывать не нужно:
|
|
71
|
+
* оптимистичное состояние в кеше остаётся без изменений.
|
|
72
|
+
*
|
|
73
|
+
* @param qc - экземпляр `QueryClient`
|
|
74
|
+
* @param queryKey - ключ кеша
|
|
75
|
+
* @param serverData - данные, вернувшиеся от сервера
|
|
76
|
+
* @param merger - функция слияния: получает текущий кеш и ответ сервера, возвращает новое состояние
|
|
77
|
+
*
|
|
78
|
+
* @example
|
|
79
|
+
* // Полная замена кеша ответом сервера
|
|
80
|
+
* onSuccess: (data) =>
|
|
81
|
+
* onSuccessOptimistic(queryClient, someQueryKey, data, (_cache, serverData) => serverData),
|
|
82
|
+
*
|
|
83
|
+
* @example
|
|
84
|
+
* // Точечное обновление одного элемента в списке
|
|
85
|
+
* onSuccess: (updatedItem) =>
|
|
86
|
+
* onSuccessOptimistic(queryClient, someQueryKey, updatedItem,
|
|
87
|
+
* (cache, item) => cache?.map((i) => (i.id === item.id ? item : i))
|
|
88
|
+
* ),
|
|
89
|
+
*/
|
|
90
|
+
export declare function onSuccessOptimistic<TQueryCacheData, TServerData>(qc: QueryClient, queryKey: QueryKey, serverData: TServerData, merger: (cache: TQueryCacheData | undefined, serverData: TServerData) => TQueryCacheData | undefined): void;
|
|
91
|
+
/**
|
|
92
|
+
* Параметры для {@link onSettledOptimistic}.
|
|
93
|
+
*/
|
|
94
|
+
export type OnSettledOptimisticOptions = {
|
|
95
|
+
/**
|
|
96
|
+
* Тип рефетча при инвалидации.
|
|
97
|
+
* - `"none"` (по умолчанию) — помечает кеш устаревшим, но не запускает рефетч немедленно.
|
|
98
|
+
* - `"active"` — немедленно перезапрашивает активные подписчики.
|
|
99
|
+
* - `"inactive"` — перезапрашивает неактивные (фоновые) запросы.
|
|
100
|
+
* - `"all"` — перезапрашивает все подходящие запросы.
|
|
101
|
+
*/
|
|
102
|
+
refetchType?: "none" | "active" | "inactive" | "all";
|
|
103
|
+
};
|
|
104
|
+
/**
|
|
105
|
+
* Обработчик `onSettled` для оптимистичного обновления.
|
|
106
|
+
*
|
|
107
|
+
* Инвалидирует один или несколько query-ключей после завершения мутации
|
|
108
|
+
* (выполняется и при успехе, и при ошибке).
|
|
109
|
+
*
|
|
110
|
+
* По умолчанию использует `refetchType: "none"` — помечает кеш устаревшим,
|
|
111
|
+
* но не запускает немедленный рефетч. Это безопасный вариант при оптимистике:
|
|
112
|
+
* данные в кеше уже актуальны (подтверждены или откатаны), а рефетч произойдёт
|
|
113
|
+
* при следующем монтировании или явном запросе.
|
|
114
|
+
*
|
|
115
|
+
* Broadcast в другие вкладки — ответственность вызывающего кода через `broadcastCacheEvent`.
|
|
116
|
+
*
|
|
117
|
+
* @example
|
|
118
|
+
* onSettled: () =>
|
|
119
|
+
* onSettledOptimistic(queryClient, someQueryKey),
|
|
120
|
+
*
|
|
121
|
+
* @example
|
|
122
|
+
* // С принудительным рефетчем активных подписчиков
|
|
123
|
+
* onSettled: () =>
|
|
124
|
+
* onSettledOptimistic(queryClient, [queryKeyA, queryKeyB], { refetchType: "active" }),
|
|
125
|
+
*/
|
|
126
|
+
export declare function onSettledOptimistic(qc: QueryClient, queryKeys: QueryKey | QueryKey[], options?: OnSettledOptimisticOptions): Promise<void>;
|
|
127
|
+
//# sourceMappingURL=queryClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryClient.d.ts","sourceRoot":"","sources":["../../src/query-client/queryClient.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,YAAY,EACZ,QAAQ,EAER,uBAAuB,EACvB,KAAK,EAEL,WAAW,EACX,QAAQ,EACR,MAAM,uBAAuB,CAAC;AAI/B,MAAM,MAAM,qBAAqB,GAAG;IACnC,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACtF,eAAe,CAAC,EAAE,CACjB,KAAK,EAAE,YAAY,EACnB,SAAS,EAAE,OAAO,EAClB,cAAc,EAAE,OAAO,EACvB,QAAQ,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAC7C,OAAO,EAAE,uBAAuB,KAC5B,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC;CAChC,CAAC;AAEF;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,qBAAqB,eAuBzF;AAED;;;;GAIG;AACH,MAAM,MAAM,iBAAiB,CAAC,eAAe,IAAI;IAChD,QAAQ,EAAE,eAAe,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,wBAAsB,kBAAkB,CAAC,eAAe,EACvD,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,CAAC,QAAQ,EAAE,eAAe,GAAG,SAAS,KAAK,eAAe,GAAG,SAAS,GAC7E,OAAO,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC,CAW7C;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,eAAe,EAChD,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,iBAAiB,CAAC,eAAe,CAAC,GAAG,SAAS,GACrD,IAAI,CAIN;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,mBAAmB,CAAC,eAAe,EAAE,WAAW,EAC/D,EAAE,EAAE,WAAW,EACf,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,WAAW,EACvB,MAAM,EAAE,CAAC,KAAK,EAAE,eAAe,GAAG,SAAS,EAAE,UAAU,EAAE,WAAW,KAAK,eAAe,GAAG,SAAS,GAClG,IAAI,CAEN;AAED;;GAEG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACxC;;;;;;OAMG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,KAAK,CAAC;CACrD,CAAC;AAEF;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAsB,mBAAmB,CACxC,EAAE,EAAE,WAAW,EACf,SAAS,EAAE,QAAQ,GAAG,QAAQ,EAAE,EAChC,OAAO,CAAC,EAAE,0BAA0B,GAClC,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type QueryPersistenceProjectAdapter = {
|
|
2
|
+
persistenceBuster?: string;
|
|
3
|
+
resolveSystemIdentifier?: () => string | null | undefined;
|
|
4
|
+
};
|
|
5
|
+
export declare function configureQueryPersistenceProjectAdapter(adapter: QueryPersistenceProjectAdapter): void;
|
|
6
|
+
export declare function getQueryPersistenceProjectAdapter(): QueryPersistenceProjectAdapter;
|
|
7
|
+
//# sourceMappingURL=queryPersistenceAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queryPersistenceAdapter.d.ts","sourceRoot":"","sources":["../../src/query-client/queryPersistenceAdapter.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,8BAA8B,GAAG;IAC5C,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,uBAAuB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CAC1D,CAAC;AAIF,wBAAgB,uCAAuC,CAAC,OAAO,EAAE,8BAA8B,QAE9F;AAED,wBAAgB,iCAAiC,mCAEhD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/range-output/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { i as e } from "../chunks/isRecord-DXDTW-jA.js";
|
|
2
|
+
//#region src/range-output/rangeOutput.ts
|
|
3
|
+
function t(t, n) {
|
|
4
|
+
if (!e(t)) return;
|
|
5
|
+
let r = t.outputValueFallback;
|
|
6
|
+
if (!e(r)) return;
|
|
7
|
+
let i = n(r.start), a = n(r.end);
|
|
8
|
+
if (!(i === void 0 && a === void 0)) return {
|
|
9
|
+
...i !== void 0 && { start: i },
|
|
10
|
+
...a !== void 0 && { end: a }
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
function n(e, t) {
|
|
14
|
+
return e === null ? t ?? null : e;
|
|
15
|
+
}
|
|
16
|
+
function r(e, t) {
|
|
17
|
+
return t ? [n(e[0], t.start), n(e[1], t.end)] : [e[0], e[1]];
|
|
18
|
+
}
|
|
19
|
+
//#endregion
|
|
20
|
+
export { t as readRangeOutputValueFallback, r as resolveRangeOutputValue };
|
|
21
|
+
|
|
22
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/range-output/rangeOutput.ts"],"sourcesContent":["import { isRecord } from \"../validators\";\n\nimport type { BaseType } from \"../types\";\n\nexport type RangeOutputValueFallback<TValue extends BaseType = BaseType> = {\n\tstart?: TValue | null;\n\tend?: TValue | null;\n};\n\nexport type RangeOutputFallbackEndpointParser<TValue extends BaseType> = (value: unknown) => TValue | null | undefined;\n\n/**\n * Читает сериализуемые подстановки открытых границ из объекта с `outputValueFallback`.\n */\nexport function readRangeOutputValueFallback<TValue extends BaseType>(\n\tprops: unknown,\n\tparseEndpoint: RangeOutputFallbackEndpointParser<TValue>\n): RangeOutputValueFallback<TValue> | undefined {\n\tif (!isRecord(props)) {\n\t\treturn undefined;\n\t}\n\n\tconst rawFallback = props.outputValueFallback;\n\tif (!isRecord(rawFallback)) {\n\t\treturn undefined;\n\t}\n\n\tconst start = parseEndpoint(rawFallback.start);\n\tconst end = parseEndpoint(rawFallback.end);\n\n\tif (start === undefined && end === undefined) {\n\t\treturn undefined;\n\t}\n\n\treturn {\n\t\t...(start !== undefined && { start }),\n\t\t...(end !== undefined && { end })\n\t};\n}\n\nfunction resolveRangeOutputEndpoint<TValue extends BaseType>(value: TValue | null, fallback: TValue | null | undefined) {\n\tif (value !== null) {\n\t\treturn value;\n\t}\n\n\treturn fallback ?? null;\n}\n\n/**\n * Возвращает range-значение для внешней сериализации, не меняя исходный UI-контракт с `null`.\n */\nexport function resolveRangeOutputValue<TValue extends BaseType>(\n\tvalue: readonly [TValue | null, TValue | null],\n\tfallback: RangeOutputValueFallback<TValue> | undefined\n): [TValue | null, TValue | null] {\n\tif (!fallback) {\n\t\treturn [value[0], value[1]];\n\t}\n\n\treturn [resolveRangeOutputEndpoint(value[0], fallback.start), resolveRangeOutputEndpoint(value[1], fallback.end)];\n}\n"],"mappings":";;AAcA,SAAgB,EACf,GACA,GAC+C;CAC/C,IAAI,CAAC,EAAS,CAAK,GAClB;CAGD,IAAM,IAAc,EAAM;CAC1B,IAAI,CAAC,EAAS,CAAW,GACxB;CAGD,IAAM,IAAQ,EAAc,EAAY,KAAK,GACvC,IAAM,EAAc,EAAY,GAAG;CAErC,YAAU,KAAA,KAAa,MAAQ,KAAA,IAInC,OAAO;EACN,GAAI,MAAU,KAAA,KAAa,EAAE,SAAM;EACnC,GAAI,MAAQ,KAAA,KAAa,EAAE,OAAI;CAChC;AACD;AAEA,SAAS,EAAoD,GAAsB,GAAqC;CAKvH,OAJI,MAAU,OAIP,KAAY,OAHX;AAIT;AAKA,SAAgB,EACf,GACA,GACiC;CAKjC,OAJK,IAIE,CAAC,EAA2B,EAAM,IAAI,EAAS,KAAK,GAAG,EAA2B,EAAM,IAAI,EAAS,GAAG,CAAC,IAHxG,CAAC,EAAM,IAAI,EAAM,EAAE;AAI5B"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { BaseType } from "../types";
|
|
2
|
+
export type RangeOutputValueFallback<TValue extends BaseType = BaseType> = {
|
|
3
|
+
start?: TValue | null;
|
|
4
|
+
end?: TValue | null;
|
|
5
|
+
};
|
|
6
|
+
export type RangeOutputFallbackEndpointParser<TValue extends BaseType> = (value: unknown) => TValue | null | undefined;
|
|
7
|
+
/**
|
|
8
|
+
* Читает сериализуемые подстановки открытых границ из объекта с `outputValueFallback`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function readRangeOutputValueFallback<TValue extends BaseType>(props: unknown, parseEndpoint: RangeOutputFallbackEndpointParser<TValue>): RangeOutputValueFallback<TValue> | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Возвращает range-значение для внешней сериализации, не меняя исходный UI-контракт с `null`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function resolveRangeOutputValue<TValue extends BaseType>(value: readonly [TValue | null, TValue | null], fallback: RangeOutputValueFallback<TValue> | undefined): [TValue | null, TValue | null];
|
|
15
|
+
//# sourceMappingURL=rangeOutput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rangeOutput.d.ts","sourceRoot":"","sources":["../../src/range-output/rangeOutput.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,MAAM,wBAAwB,CAAC,MAAM,SAAS,QAAQ,GAAG,QAAQ,IAAI;IAC1E,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,iCAAiC,CAAC,MAAM,SAAS,QAAQ,IAAI,CAAC,KAAK,EAAE,OAAO,KAAK,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;AAEvH;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,SAAS,QAAQ,EACnE,KAAK,EAAE,OAAO,EACd,aAAa,EAAE,iCAAiC,CAAC,MAAM,CAAC,GACtD,wBAAwB,CAAC,MAAM,CAAC,GAAG,SAAS,CAqB9C;AAUD;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,SAAS,QAAQ,EAC9D,KAAK,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,EAC9C,QAAQ,EAAE,wBAAwB,CAAC,MAAM,CAAC,GAAG,SAAS,GACpD,CAAC,MAAM,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,CAMhC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/seo/index.ts"],"names":[],"mappings":"AAAA,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
//#region src/seo/seo.ts
|
|
2
|
+
function e(e) {
|
|
3
|
+
return e === "Article" || e === "NewsArticle" ? "article" : "website";
|
|
4
|
+
}
|
|
5
|
+
function t(e, t) {
|
|
6
|
+
try {
|
|
7
|
+
return new URL(e).toString();
|
|
8
|
+
} catch {
|
|
9
|
+
return t === void 0 ? e : new URL(e, t).toString();
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function n(e) {
|
|
13
|
+
if (!e) return;
|
|
14
|
+
let t = new Date(e);
|
|
15
|
+
if (!Number.isNaN(t.getTime())) return t.toISOString();
|
|
16
|
+
}
|
|
17
|
+
function r(e, r) {
|
|
18
|
+
let i = {
|
|
19
|
+
"@context": "https://schema.org",
|
|
20
|
+
"@type": e.type,
|
|
21
|
+
mainEntityOfPage: {
|
|
22
|
+
"@type": "WebPage",
|
|
23
|
+
"@id": r
|
|
24
|
+
},
|
|
25
|
+
headline: e.caption,
|
|
26
|
+
description: e.description,
|
|
27
|
+
url: r,
|
|
28
|
+
inLanguage: "ru-RU"
|
|
29
|
+
}, a = n(e.publishedAt);
|
|
30
|
+
a && (i.datePublished = a);
|
|
31
|
+
let o = n(e.modifiedAt);
|
|
32
|
+
return o && (i.dateModified = o), e.keywords?.length && (i.keywords = e.keywords.join(", ")), e.image?.url && (i.image = {
|
|
33
|
+
"@type": "ImageObject",
|
|
34
|
+
url: t(e.image.url, e.baseUrl),
|
|
35
|
+
width: e.image.width,
|
|
36
|
+
height: e.image.height,
|
|
37
|
+
name: e.image.alt
|
|
38
|
+
}), {
|
|
39
|
+
type: "application/ld+json",
|
|
40
|
+
children: JSON.stringify(i)
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function i(n) {
|
|
44
|
+
let i = t(n.pathname, n.baseUrl), a = n.noIndex ? "noindex, nofollow" : "index, follow", o = n.image?.url ? t(n.image.url, n.baseUrl) : void 0, s = [
|
|
45
|
+
{ title: n.caption },
|
|
46
|
+
{
|
|
47
|
+
name: "description",
|
|
48
|
+
content: n.description
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
name: "robots",
|
|
52
|
+
content: a
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
property: "og:type",
|
|
56
|
+
content: e(n.type)
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
property: "og:title",
|
|
60
|
+
content: n.caption
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
property: "og:description",
|
|
64
|
+
content: n.description
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
property: "og:url",
|
|
68
|
+
content: i
|
|
69
|
+
},
|
|
70
|
+
{
|
|
71
|
+
property: "og:locale",
|
|
72
|
+
content: "ru_RU"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
name: "twitter:card",
|
|
76
|
+
content: o ? "summary_large_image" : "summary"
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
name: "twitter:title",
|
|
80
|
+
content: n.caption
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
name: "twitter:description",
|
|
84
|
+
content: n.description
|
|
85
|
+
}
|
|
86
|
+
];
|
|
87
|
+
return n.keywords?.length && s.push({
|
|
88
|
+
name: "keywords",
|
|
89
|
+
content: n.keywords.join(", ")
|
|
90
|
+
}), o && (s.push({
|
|
91
|
+
property: "og:image",
|
|
92
|
+
content: o
|
|
93
|
+
}), s.push({
|
|
94
|
+
name: "twitter:image",
|
|
95
|
+
content: o
|
|
96
|
+
}), n.image?.alt && s.push({
|
|
97
|
+
property: "og:image:alt",
|
|
98
|
+
content: n.image.alt
|
|
99
|
+
})), {
|
|
100
|
+
meta: s,
|
|
101
|
+
links: [{
|
|
102
|
+
rel: "canonical",
|
|
103
|
+
href: i
|
|
104
|
+
}],
|
|
105
|
+
scripts: [r(n, i)]
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
function a(e, t, n) {
|
|
109
|
+
return i({
|
|
110
|
+
pathname: t,
|
|
111
|
+
caption: n?.caption ?? "",
|
|
112
|
+
description: n?.description ?? "",
|
|
113
|
+
type: e,
|
|
114
|
+
image: n?.previewImage ? {
|
|
115
|
+
url: n.previewImage,
|
|
116
|
+
alt: n.previewImageAlt
|
|
117
|
+
} : void 0,
|
|
118
|
+
publishedAt: n?.created,
|
|
119
|
+
modifiedAt: n?.updated
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
//#endregion
|
|
123
|
+
export { a as createRouteHead, i as createSeoHead };
|
|
124
|
+
|
|
125
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/seo/seo.ts"],"sourcesContent":["import type { SeoContentType, SeoHeadOptions, SeoHeadParams } from \"./types\";\n\ntype MetaTag = Record<string, string>;\ntype LinkTag = Record<string, string>;\ntype ScriptTag = {\n\ttype: \"application/ld+json\";\n\tchildren: string;\n};\n\ntype SeoHeadResult = {\n\tmeta: MetaTag[];\n\tlinks: LinkTag[];\n\tscripts: ScriptTag[];\n};\n\nfunction toOpenGraphType(type: SeoHeadOptions[\"type\"]): \"website\" | \"article\" {\n\tif (type === \"Article\" || type === \"NewsArticle\") {\n\t\treturn \"article\";\n\t}\n\n\treturn \"website\";\n}\n\nfunction toAbsoluteUrl(pathOrUrl: string, baseUrl: string | undefined): string {\n\ttry {\n\t\treturn new URL(pathOrUrl).toString();\n\t} catch {\n\t\tif (baseUrl === undefined) {\n\t\t\treturn pathOrUrl;\n\t\t}\n\n\t\treturn new URL(pathOrUrl, baseUrl).toString();\n\t}\n}\n\nfunction toIsoDate(value: string | undefined): string | undefined {\n\tif (!value) {\n\t\treturn undefined;\n\t}\n\n\tconst date = new Date(value);\n\tif (Number.isNaN(date.getTime())) {\n\t\treturn undefined;\n\t}\n\n\treturn date.toISOString();\n}\n\nfunction buildJsonLd(options: SeoHeadOptions, canonicalUrl: string): ScriptTag {\n\tconst jsonLd: Record<string, unknown> = {\n\t\t\"@context\": \"https://schema.org\",\n\t\t\"@type\": options.type,\n\t\tmainEntityOfPage: {\n\t\t\t\"@type\": \"WebPage\",\n\t\t\t\"@id\": canonicalUrl\n\t\t},\n\t\theadline: options.caption,\n\t\tdescription: options.description,\n\t\turl: canonicalUrl,\n\t\tinLanguage: \"ru-RU\"\n\t};\n\n\tconst publishedAt = toIsoDate(options.publishedAt);\n\tif (publishedAt) {\n\t\tjsonLd.datePublished = publishedAt;\n\t}\n\n\tconst modifiedAt = toIsoDate(options.modifiedAt);\n\tif (modifiedAt) {\n\t\tjsonLd.dateModified = modifiedAt;\n\t}\n\n\tif (options.keywords?.length) {\n\t\tjsonLd.keywords = options.keywords.join(\", \");\n\t}\n\n\tif (options.image?.url) {\n\t\tjsonLd.image = {\n\t\t\t\"@type\": \"ImageObject\",\n\t\t\turl: toAbsoluteUrl(options.image.url, options.baseUrl),\n\t\t\twidth: options.image.width,\n\t\t\theight: options.image.height,\n\t\t\tname: options.image.alt\n\t\t};\n\t}\n\n\treturn {\n\t\ttype: \"application/ld+json\",\n\t\tchildren: JSON.stringify(jsonLd)\n\t};\n}\n\nexport function createSeoHead(options: SeoHeadOptions): SeoHeadResult {\n\tconst canonicalUrl = toAbsoluteUrl(options.pathname, options.baseUrl);\n\tconst robots = options.noIndex ? \"noindex, nofollow\" : \"index, follow\";\n\tconst absoluteImageUrl = options.image?.url ? toAbsoluteUrl(options.image.url, options.baseUrl) : undefined;\n\n\tconst meta: MetaTag[] = [\n\t\t{ title: options.caption },\n\t\t{ name: \"description\", content: options.description },\n\t\t{ name: \"robots\", content: robots },\n\t\t{ property: \"og:type\", content: toOpenGraphType(options.type) },\n\t\t{ property: \"og:title\", content: options.caption },\n\t\t{ property: \"og:description\", content: options.description },\n\t\t{ property: \"og:url\", content: canonicalUrl },\n\t\t{ property: \"og:locale\", content: \"ru_RU\" },\n\t\t{ name: \"twitter:card\", content: absoluteImageUrl ? \"summary_large_image\" : \"summary\" },\n\t\t{ name: \"twitter:title\", content: options.caption },\n\t\t{ name: \"twitter:description\", content: options.description }\n\t];\n\n\tif (options.keywords?.length) {\n\t\tmeta.push({ name: \"keywords\", content: options.keywords.join(\", \") });\n\t}\n\n\tif (absoluteImageUrl) {\n\t\tmeta.push({ property: \"og:image\", content: absoluteImageUrl });\n\t\tmeta.push({ name: \"twitter:image\", content: absoluteImageUrl });\n\n\t\tif (options.image?.alt) {\n\t\t\tmeta.push({ property: \"og:image:alt\", content: options.image.alt });\n\t\t}\n\t}\n\n\tconst links: LinkTag[] = [{ rel: \"canonical\", href: canonicalUrl }];\n\tconst scripts: ScriptTag[] = [buildJsonLd(options, canonicalUrl)];\n\n\treturn { meta, links, scripts };\n}\n\nexport function createRouteHead(type: SeoContentType, path: string, params: SeoHeadParams | undefined | null): SeoHeadResult {\n\tconst caption = params?.caption ?? \"\";\n\tconst description = params?.description ?? \"\";\n\n\treturn createSeoHead({\n\t\tpathname: path,\n\t\tcaption,\n\t\tdescription,\n\t\ttype,\n\t\timage: params?.previewImage\n\t\t\t? {\n\t\t\t\t\turl: params.previewImage,\n\t\t\t\t\talt: params.previewImageAlt\n\t\t\t\t}\n\t\t\t: undefined,\n\t\tpublishedAt: params?.created,\n\t\tmodifiedAt: params?.updated\n\t});\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SeoContentType, SeoHeadOptions, SeoHeadParams } from "./types";
|
|
2
|
+
type MetaTag = Record<string, string>;
|
|
3
|
+
type LinkTag = Record<string, string>;
|
|
4
|
+
type ScriptTag = {
|
|
5
|
+
type: "application/ld+json";
|
|
6
|
+
children: string;
|
|
7
|
+
};
|
|
8
|
+
type SeoHeadResult = {
|
|
9
|
+
meta: MetaTag[];
|
|
10
|
+
links: LinkTag[];
|
|
11
|
+
scripts: ScriptTag[];
|
|
12
|
+
};
|
|
13
|
+
export declare function createSeoHead(options: SeoHeadOptions): SeoHeadResult;
|
|
14
|
+
export declare function createRouteHead(type: SeoContentType, path: string, params: SeoHeadParams | undefined | null): SeoHeadResult;
|
|
15
|
+
export {};
|
|
16
|
+
//# sourceMappingURL=seo.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seo.d.ts","sourceRoot":"","sources":["../../src/seo/seo.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7E,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACtC,KAAK,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AACtC,KAAK,SAAS,GAAG;IAChB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,KAAK,aAAa,GAAG;IACpB,IAAI,EAAE,OAAO,EAAE,CAAC;IAChB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,OAAO,EAAE,SAAS,EAAE,CAAC;CACrB,CAAC;AA+EF,wBAAgB,aAAa,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CAoCpE;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,SAAS,GAAG,IAAI,GAAG,aAAa,CAkB3H"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export type SeoContentType = "WebSite" | "WebPage" | "Article" | "NewsArticle";
|
|
2
|
+
export type SeoImage = {
|
|
3
|
+
url: string;
|
|
4
|
+
alt?: string | null;
|
|
5
|
+
width?: number | null;
|
|
6
|
+
height?: number | null;
|
|
7
|
+
};
|
|
8
|
+
export type SeoHeadOptions = {
|
|
9
|
+
pathname: string;
|
|
10
|
+
caption: string;
|
|
11
|
+
description: string;
|
|
12
|
+
type: SeoContentType;
|
|
13
|
+
baseUrl?: string;
|
|
14
|
+
keywords?: string[];
|
|
15
|
+
image?: SeoImage;
|
|
16
|
+
publishedAt?: string;
|
|
17
|
+
modifiedAt?: string;
|
|
18
|
+
noIndex?: boolean;
|
|
19
|
+
};
|
|
20
|
+
export type SeoHeadParams = {
|
|
21
|
+
caption: string;
|
|
22
|
+
description: string;
|
|
23
|
+
previewImage: string | null;
|
|
24
|
+
previewImageAlt: string | null;
|
|
25
|
+
created: string;
|
|
26
|
+
updated: string;
|
|
27
|
+
};
|
|
28
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/seo/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,aAAa,CAAC;AAE/E,MAAM,MAAM,QAAQ,GAAG;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CAChB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/session-storage/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { uuidv4 as e } from "../crypto/index.js";
|
|
2
|
+
//#region src/session-storage/sessionId.ts
|
|
3
|
+
function t(t, n = e) {
|
|
4
|
+
if (typeof sessionStorage > "u") return n();
|
|
5
|
+
try {
|
|
6
|
+
let e = sessionStorage.getItem(t);
|
|
7
|
+
if (e) return e;
|
|
8
|
+
let r = n();
|
|
9
|
+
return sessionStorage.setItem(t, r), r;
|
|
10
|
+
} catch {
|
|
11
|
+
return n();
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { t as getSessionStorageId };
|
|
16
|
+
|
|
17
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/session-storage/sessionId.ts"],"sourcesContent":["import { uuidv4 } from \"../crypto\";\n\n/**\n * Возвращает стабильный идентификатор вкладочной сессии из sessionStorage.\n *\n * Helper общий для модулей, которым нужно сгруппировать события в рамках одной\n * вкладки без долгоживущего пользовательского идентификатора.\n */\nexport function getSessionStorageId(key: string, createId: () => string = uuidv4) {\n\tif (typeof sessionStorage === \"undefined\") return createId();\n\n\ttry {\n\t\tconst existing = sessionStorage.getItem(key);\n\t\tif (existing) return existing;\n\n\t\tconst next = createId();\n\t\tsessionStorage.setItem(key, next);\n\t\treturn next;\n\t} catch {\n\t\treturn createId();\n\t}\n}\n"],"mappings":";;AAQA,SAAgB,EAAoB,GAAa,IAAyB,GAAQ;CACjF,IAAI,OAAO,iBAAmB,KAAa,OAAO,EAAS;CAE3D,IAAI;EACH,IAAM,IAAW,eAAe,QAAQ,CAAG;EAC3C,IAAI,GAAU,OAAO;EAErB,IAAM,IAAO,EAAS;EAEtB,OADA,eAAe,QAAQ,GAAK,CAAI,GACzB;CACR,QAAQ;EACP,OAAO,EAAS;CACjB;AACD"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Возвращает стабильный идентификатор вкладочной сессии из sessionStorage.
|
|
3
|
+
*
|
|
4
|
+
* Helper общий для модулей, которым нужно сгруппировать события в рамках одной
|
|
5
|
+
* вкладки без долгоживущего пользовательского идентификатора.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getSessionStorageId(key: string, createId?: () => string): string;
|
|
8
|
+
//# sourceMappingURL=sessionId.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessionId.d.ts","sourceRoot":"","sources":["../../src/session-storage/sessionId.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,MAAe,UAa/E"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Сравнивает строки по единому проектному правилу без зависимости от default locale среды.
|
|
3
|
+
*
|
|
4
|
+
* Основной порядок задаёт фиксированная русская коллация: она подходит для UI-списков
|
|
5
|
+
* с кириллицей и естественно сортирует числовые суффиксы. Если коллатор считает строки
|
|
6
|
+
* равными, UTF-16 fallback фиксирует порядок для разных регистров и похожих символов.
|
|
7
|
+
*/
|
|
8
|
+
export declare function compareStrings(left: string, right: string): number;
|
|
9
|
+
//# sourceMappingURL=compareStrings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compareStrings.d.ts","sourceRoot":"","sources":["../../src/string-comparison/compareStrings.ts"],"names":[],"mappings":"AAiBA;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIlE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/string-comparison/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type TableColumnLayoutItem<TColumnId extends string = string, TWidth = number> = {
|
|
2
|
+
id: TColumnId;
|
|
3
|
+
width: TWidth;
|
|
4
|
+
};
|
|
5
|
+
export type ResolveTableColumnOrderArgs<TColumnId extends string = string> = {
|
|
6
|
+
ids: readonly TColumnId[];
|
|
7
|
+
order?: readonly string[];
|
|
8
|
+
};
|
|
9
|
+
export type BuildTableColumnLayoutArgs<TColumnId extends string = string, TWidth = number> = {
|
|
10
|
+
ids: readonly TColumnId[];
|
|
11
|
+
getWidth: (id: TColumnId) => TWidth;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Возвращает порядок колонок как в AnalyticalTable: сначала сохранённый order,
|
|
15
|
+
* затем новые или отсутствующие в order id. Ширины при этом остаются привязаны
|
|
16
|
+
* к columnId, а не к визуальной позиции.
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveTableColumnOrder<TColumnId extends string>({ ids, order }: ResolveTableColumnOrderArgs<TColumnId>): TColumnId[];
|
|
19
|
+
/**
|
|
20
|
+
* Строит layout колонок из уже вычисленного порядка и функции ширины по id.
|
|
21
|
+
*/
|
|
22
|
+
export declare function buildTableColumnLayout<TColumnId extends string, TWidth>({ ids, getWidth }: BuildTableColumnLayoutArgs<TColumnId, TWidth>): TableColumnLayoutItem<TColumnId, TWidth>[];
|
|
23
|
+
//# sourceMappingURL=columnLayout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"columnLayout.d.ts","sourceRoot":"","sources":["../../src/table/columnLayout.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,qBAAqB,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI;IACvF,EAAE,EAAE,SAAS,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,2BAA2B,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM,IAAI;IAC5E,GAAG,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,SAAS,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI;IAC5F,GAAG,EAAE,SAAS,SAAS,EAAE,CAAC;IAC1B,QAAQ,EAAE,CAAC,EAAE,EAAE,SAAS,KAAK,MAAM,CAAC;CACpC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,2BAA2B,CAAC,SAAS,CAAC,GAAG,SAAS,EAAE,CAErI;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,SAAS,MAAM,EAAE,MAAM,EAAE,EACxE,GAAG,EACH,QAAQ,EACR,EAAE,0BAA0B,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,EAAE,CAK5F"}
|