@ryuzaki13/react-foundation-lib 2.31.1 → 2.32.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 -114
- 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-rxriDRPk.js → formatters-CO40zvVB.js} +496 -497
- 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 +117 -116
- 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.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 -6
- 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 +24 -21
- 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.map +1 -1
- package/dist/metadata/metadataTypes.d.ts +8 -7
- package/dist/metadata/metadataTypes.d.ts.map +1 -1
- package/dist/metadata/scalarTypeClassification.d.ts.map +1 -1
- 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/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.map +1 -1
- package/dist/odata-service/index.js +439 -433
- package/dist/odata-service/index.js.map +1 -1
- 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 +5 -3
- package/dist/odata-service/types.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/columnSizing.d.ts +11 -3
- package/dist/table/columnSizing.d.ts.map +1 -1
- package/dist/table/index.d.ts +1 -0
- package/dist/table/index.d.ts.map +1 -1
- package/dist/table/index.js +102 -92
- 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/resolveTableColumnsWidth.d.ts +9 -0
- package/dist/table/resolveTableColumnsWidth.d.ts.map +1 -0
- 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 +6 -4
- 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/query-client/README.mdx +4 -4
- package/src/table/README.mdx +49 -23
- package/dist/chunks/dom-BK22UmgF.js.map +0 -1
- package/dist/chunks/formatDate-BUvpRI7H.js +0 -133
- package/dist/chunks/formatDate-BUvpRI7H.js.map +0 -1
- package/dist/chunks/formatters-rxriDRPk.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/query-client-CVRfrYZM.js.map +0 -1
- package/dist/chunks/scalarTypeClassification-BZcFmIyR.js +0 -764
- package/dist/chunks/scalarTypeClassification-BZcFmIyR.js.map +0 -1
- package/dist/chunks/uuid-CUJPAbRY.js.map +0 -1
- package/dist/chunks/validate-DsUR-bFF.js +0 -608
- package/dist/chunks/validate-DsUR-bFF.js.map +0 -1
- package/dist/utils/index.js.map +0 -1
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Семантика code/text-пар принадлежит метаданным источника, а не value-state. */
|
|
2
|
+
export declare const ODATA_COLUMN_SEMANTIC_NONE = "none";
|
|
3
|
+
export declare const ODATA_COLUMN_SEMANTIC_CODE = "code";
|
|
4
|
+
export declare const ODATA_COLUMN_SEMANTIC_TEXT = "text";
|
|
5
|
+
/** Поддержанные навигации результата связывают parser с контрактом EntityMetadata. */
|
|
6
|
+
export declare const ODATA_RESULT_NAVIGATION_SET = "Set";
|
|
7
|
+
export declare const ODATA_RESULT_NAVIGATION_RESULTS = "Results";
|
|
8
|
+
//# sourceMappingURL=odataMetadataConstants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"odataMetadataConstants.d.ts","sourceRoot":"","sources":["../../src/odata-service/odataMetadataConstants.ts"],"names":[],"mappings":"AAAA,kFAAkF;AAClF,eAAO,MAAM,0BAA0B,SAAS,CAAC;AACjD,eAAO,MAAM,0BAA0B,SAAS,CAAC;AACjD,eAAO,MAAM,0BAA0B,SAAS,CAAC;AAEjD,sFAAsF;AACtF,eAAO,MAAM,2BAA2B,QAAQ,CAAC;AACjD,eAAO,MAAM,+BAA+B,YAAY,CAAC"}
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Парсер метаданных OData V2
|
|
3
|
-
*/
|
|
1
|
+
/** Парсер метаданных OData V2. */
|
|
4
2
|
import { EntityColumnProperty, ServiceMetadata } from "./types";
|
|
5
3
|
export declare const FORCED_CODE_TEXT_IDS: ReadonlySet<string>;
|
|
6
4
|
/** Возвращает label metadata-колонки с fallback на технический id. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/odata-service/parser.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/odata-service/parser.ts"],"names":[],"mappings":"AAAA,kCAAkC;AA4BlC,OAAO,EACN,oBAAoB,EAKpB,eAAe,EACf,MAAM,SAAS,CAAC;AAmBjB,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAA8B,CAAC;AAgBpF,sEAAsE;AACtE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,oBAAoB,EAAE,IAAI,GAAG,OAAO,CAAC,GAAG,MAAM,CAErG;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAUnE;AA6eD;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CA2CrE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/odata-service/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/odata-service/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAK7C,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,UAAU,CAchE,CAAC;AAQF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE5D;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE5D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,OAAO,CAE9D;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,IAAI,CAExD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sorts.d.ts","sourceRoot":"","sources":["../../src/odata-service/sorts.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"sorts.d.ts","sourceRoot":"","sources":["../../src/odata-service/sorts.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,IAAI,CAAC,CAAC;IACtB,GAAG,EAAE,CAAC,CAAC;IACP;;OAEG;IACH,IAAI,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,MAAM,CAE9E;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,CAEnE;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAmBrG;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,SAAS,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAMrH;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,MAAM,GAAG,SAAS,CAKxG;AAED,wBAAgB,gBAAgB,CAAC,CAAC,EACjC,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAC,EAAE,EACrB,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,EACxB,KAAK,EAAE,MAAM,CAAC,GACZ;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,CAWjF"}
|
|
@@ -1,10 +1,14 @@
|
|
|
1
|
+
import { type FILTER_LOGICAL_AND, FILTER_LOGICAL_OR } from "./filterOperationConstants";
|
|
2
|
+
declare const SQL_FILTER_OPERATION_EQ = "eq";
|
|
3
|
+
declare const SQL_FILTER_OPERATION_IN = "in";
|
|
4
|
+
declare const SQL_FILTER_OPERATION_GROUP = "group";
|
|
1
5
|
export type SqlFilterScalarValue = string | number | boolean;
|
|
2
|
-
export type SqlFilterOperation =
|
|
6
|
+
export type SqlFilterOperation = typeof SQL_FILTER_OPERATION_EQ | typeof SQL_FILTER_OPERATION_IN;
|
|
3
7
|
export type SqlFilterEqualCondition = {
|
|
4
8
|
/** Имя SQL-поля после всех доменных маппингов. */
|
|
5
9
|
fieldId: string;
|
|
6
10
|
/** Оператор строгого равенства. */
|
|
7
|
-
operation:
|
|
11
|
+
operation: typeof SQL_FILTER_OPERATION_EQ;
|
|
8
12
|
/** Исходное значение фильтра. Неподдерживаемые и пустые значения не сериализуются. */
|
|
9
13
|
value: unknown;
|
|
10
14
|
};
|
|
@@ -12,19 +16,19 @@ export type SqlFilterInCondition = {
|
|
|
12
16
|
/** Имя SQL-поля после всех доменных маппингов. */
|
|
13
17
|
fieldId: string;
|
|
14
18
|
/** Оператор включения в список значений. */
|
|
15
|
-
operation:
|
|
19
|
+
operation: typeof SQL_FILTER_OPERATION_IN;
|
|
16
20
|
/** Исходные значения фильтра. Неподдерживаемые и пустые значения не сериализуются. */
|
|
17
21
|
values: readonly unknown[] | null | undefined;
|
|
18
22
|
};
|
|
19
23
|
export type SqlFilterCondition = SqlFilterEqualCondition | SqlFilterInCondition;
|
|
20
|
-
export type SqlFilterConjunction =
|
|
24
|
+
export type SqlFilterConjunction = typeof FILTER_LOGICAL_AND | typeof FILTER_LOGICAL_OR;
|
|
21
25
|
/**
|
|
22
26
|
* Явная группа SQL-like выражений с собственным логическим оператором.
|
|
23
27
|
* Группа всегда сериализуется в скобках, чтобы её границы сохранялись при
|
|
24
28
|
* объединении с соседними выражениями верхнего уровня через `AND`.
|
|
25
29
|
*/
|
|
26
30
|
export type SqlFilterGroup = {
|
|
27
|
-
operation:
|
|
31
|
+
operation: typeof SQL_FILTER_OPERATION_GROUP;
|
|
28
32
|
conjunction: SqlFilterConjunction;
|
|
29
33
|
expressions: readonly SqlFilterExpression[];
|
|
30
34
|
};
|
|
@@ -48,4 +52,5 @@ export declare function createSqlFilterGroup(expressions: readonly SqlFilterExpr
|
|
|
48
52
|
* простые имена полей и строковые литералы с экранированными одинарными кавычками.
|
|
49
53
|
*/
|
|
50
54
|
export declare function buildSqlFilter(expressions: readonly SqlFilterExpression[] | undefined): string;
|
|
55
|
+
export {};
|
|
51
56
|
//# sourceMappingURL=sqlFilters.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sqlFilters.d.ts","sourceRoot":"","sources":["../../src/odata-service/sqlFilters.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7D,MAAM,MAAM,kBAAkB,GAAG,
|
|
1
|
+
{"version":3,"file":"sqlFilters.d.ts","sourceRoot":"","sources":["../../src/odata-service/sqlFilters.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGxF,QAAA,MAAM,uBAAuB,OAAO,CAAC;AACrC,QAAA,MAAM,uBAAuB,OAAO,CAAC;AACrC,QAAA,MAAM,0BAA0B,UAAU,CAAC;AAG3C,MAAM,MAAM,oBAAoB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7D,MAAM,MAAM,kBAAkB,GAAG,OAAO,uBAAuB,GAAG,OAAO,uBAAuB,CAAC;AAEjG,MAAM,MAAM,uBAAuB,GAAG;IACrC,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,SAAS,EAAE,OAAO,uBAAuB,CAAC;IAC1C,sFAAsF;IACtF,KAAK,EAAE,OAAO,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IAClC,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,SAAS,EAAE,OAAO,uBAAuB,CAAC;IAC1C,sFAAsF;IACtF,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,CAAC;CAC9C,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG,uBAAuB,GAAG,oBAAoB,CAAC;AAEhF,MAAM,MAAM,oBAAoB,GAAG,OAAO,kBAAkB,GAAG,OAAO,iBAAiB,CAAC;AAExF;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG;IAC5B,SAAS,EAAE,OAAO,0BAA0B,CAAC;IAC7C,WAAW,EAAE,oBAAoB,CAAC;IAClC,WAAW,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC5C,CAAC;AAEF,iFAAiF;AACjF,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,GAAG,cAAc,CAAC;AAItE,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,oBAAoB,CAEpF;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI5D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,uBAAuB,CAE7F;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,OAAO,EAAE,GAAG,IAAI,GAAG,SAAS,GAAG,oBAAoB,CAEtH;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,EAAE,WAAW,EAAE,oBAAoB,GAAG,cAAc,CAEnI;AA6CD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,GAAG,SAAS,GAAG,MAAM,CAO9F"}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { type BooleanMetaType, type ColumnRole, type DateMetaType, type IntegerMetaType, type NumericMetaType, type ScalarMetaType, type StringMetaType } from "../metadata/metadataTypes";
|
|
2
2
|
import { type BaseType, type InputType } from "../types";
|
|
3
|
+
import { type ODATA_OPERATION_CREATE, type ODATA_OPERATION_QUERY } from "./entityOperationConstants";
|
|
4
|
+
import { type ODATA_COLUMN_SEMANTIC_CODE, type ODATA_COLUMN_SEMANTIC_NONE, type ODATA_COLUMN_SEMANTIC_TEXT, type ODATA_RESULT_NAVIGATION_RESULTS, type ODATA_RESULT_NAVIGATION_SET } from "./odataMetadataConstants";
|
|
3
5
|
export { type BaseMetaType, type ColumnRole } from "../metadata/metadataTypes";
|
|
4
6
|
export type ODataBooleanType = BooleanMetaType;
|
|
5
7
|
export type ODataNumericType = NumericMetaType;
|
|
@@ -7,7 +9,7 @@ export type ODataIntegerType = IntegerMetaType;
|
|
|
7
9
|
export type ODataDateType = DateMetaType;
|
|
8
10
|
export type ODataStringType = StringMetaType;
|
|
9
11
|
export type BaseMethod = "GET" | "POST" | "PUT" | "DELETE";
|
|
10
|
-
export type ODataOperationMethod =
|
|
12
|
+
export type ODataOperationMethod = typeof ODATA_OPERATION_CREATE | "update" | "delete" | "read" | typeof ODATA_OPERATION_QUERY | "fi";
|
|
11
13
|
/**
|
|
12
14
|
* Типы данных сервисов OData (параметры, поля)
|
|
13
15
|
*/
|
|
@@ -122,7 +124,7 @@ export type EntityColumnProperty = Omit<EntityParameterProperty, "nullable" | "m
|
|
|
122
124
|
/** Связанная колонка в паре code <-> text */
|
|
123
125
|
linkedColumnId?: string;
|
|
124
126
|
/** Семантика колонки относительно пары code/text */
|
|
125
|
-
semanticType:
|
|
127
|
+
semanticType: typeof ODATA_COLUMN_SEMANTIC_NONE | typeof ODATA_COLUMN_SEMANTIC_CODE | typeof ODATA_COLUMN_SEMANTIC_TEXT;
|
|
126
128
|
/** Можно ли сортировать */
|
|
127
129
|
sortable: boolean;
|
|
128
130
|
/** Можно ли фильтровать */
|
|
@@ -140,7 +142,7 @@ export type EntityMetadata = {
|
|
|
140
142
|
columns: EntityColumnProperty[];
|
|
141
143
|
/** Параметры сущности (если есть) */
|
|
142
144
|
parameters?: EntityParameterProperty[];
|
|
143
|
-
result?:
|
|
145
|
+
result?: typeof ODATA_RESULT_NAVIGATION_SET | typeof ODATA_RESULT_NAVIGATION_RESULTS;
|
|
144
146
|
};
|
|
145
147
|
export type ServiceEntities = Record<string, EntityMetadata>;
|
|
146
148
|
export type FunctionImportMetadata = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/odata-service/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE/E,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAC/C,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAC/C,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAC/C,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC;AACzC,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAC3D,MAAM,MAAM,oBAAoB,GAAG,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/odata-service/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,eAAe,EACpB,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAEzD,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AACrG,OAAO,EACN,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,0BAA0B,EAC/B,KAAK,+BAA+B,EACpC,KAAK,2BAA2B,EAChC,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,KAAK,YAAY,EAAE,KAAK,UAAU,EAAE,MAAM,2BAA2B,CAAC;AAE/E,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAC/C,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAC/C,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAC/C,MAAM,MAAM,aAAa,GAAG,YAAY,CAAC;AACzC,MAAM,MAAM,eAAe,GAAG,cAAc,CAAC;AAE7C,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAC3D,MAAM,MAAM,oBAAoB,GAAG,OAAO,sBAAsB,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,qBAAqB,GAAG,IAAI,CAAC;AAEtI;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC;AAE3C,MAAM,MAAM,gBAAgB,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,MAAM,CAAC;AAC9D,MAAM,MAAM,yBAAyB,GAAG;IACvC,EAAE,EAAE,MAAM,CAAC;IAEX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,gBAAgB,CAAC;CAMrB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,QAAQ,EAAE,CAAC;AAExD;;;;;;GAMG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,mBAAmB,GAAG,mBAAmB,IAAI;IAC7E,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,IAAI;IACzD,KAAK,EAAE,CAAC,CAAC;IACT,SAAS,CAAC,EAAE,gBAAgB,CAAC;CAC7B,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;AAC3E,MAAM,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AAEjE;;;;;;GAMG;AACH,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,mBAAmB,CAAC,CAAC,CAAC;AACrF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,mBAAmB,CAAC,CAAC,SAAS,wBAAwB,IAAI;KACpE,CAAC,IAAI,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;CAKnD,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,qBAAqB,CAAC,CAAC,SAAS,sBAAsB,IAAI;KACpE,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;CAC7B,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAClC;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,kBAAkB,GAAG;IAChC,8BAA8B;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,kBAAkB,GAAG;IAC7D,iBAAiB;IACjB,IAAI,EAAE,aAAa,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG,0BAA0B,GAAG;IAClE,+BAA+B;IAC/B,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,IAAI,CAAC;IACvB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,4BAA4B;IAC5B,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,gCAAgC;IAChC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kDAAkD;IAClD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,EAAE,UAAU,GAAG,WAAW,CAAC,GAAG;IAC5F,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,YAAY,EAAE,OAAO,0BAA0B,GAAG,OAAO,0BAA0B,GAAG,OAAO,0BAA0B,CAAC;IACxH,2BAA2B;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,2BAA2B;IAC3B,UAAU,EAAE,OAAO,CAAC;IACpB,uBAAuB;IACvB,IAAI,EAAE,UAAU,CAAC;CACjB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG;IAC5B,yBAAyB;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,uBAAuB;IACvB,OAAO,EAAE,oBAAoB,EAAE,CAAC;IAChC,qCAAqC;IACrC,UAAU,CAAC,EAAE,uBAAuB,EAAE,CAAC;IAEvC,MAAM,CAAC,EAAE,OAAO,2BAA2B,GAAG,OAAO,+BAA+B,CAAC;CACrF,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AAC7D,MAAM,MAAM,sBAAsB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,UAAU,CAAC;IACxB,UAAU,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,CAAC;AAC5E,MAAM,MAAM,mBAAmB,GAAG,cAAc,GAAG,sBAAsB,CAAC;AAE1E;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG;IAC7B,2BAA2B;IAC3B,QAAQ,EAAE,eAAe,CAAC;IAC1B,eAAe,EAAE,sBAAsB,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC;AAChE,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC"}
|
package/dist/pwa/index.js
CHANGED
|
@@ -1,149 +1,150 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { l as e } from "../chunks/utils-DW0Yso1Q.js";
|
|
2
|
+
import { i as t } from "../chunks/isRecord-DXDTW-jA.js";
|
|
3
3
|
import { buildSwCachePolicyValue as n, normalizeSwCacheName as r, parseSwCachePolicy as i, resolveSwCacheCacheNameByPolicy as a } from "./sw-cache-policy.js";
|
|
4
4
|
import { useCallback as o, useEffect as s, useState as c, useSyncExternalStore as l } from "react";
|
|
5
5
|
//#region src/pwa/useBrowserOnlineStatus.ts
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
6
|
+
var u = "online", d = "offline";
|
|
7
|
+
function f(e) {
|
|
8
|
+
return window.addEventListener(u, e), window.addEventListener(d, e), () => {
|
|
9
|
+
window.removeEventListener(u, e), window.removeEventListener(d, e);
|
|
9
10
|
};
|
|
10
11
|
}
|
|
11
|
-
function
|
|
12
|
+
function p() {
|
|
12
13
|
return navigator.onLine;
|
|
13
14
|
}
|
|
14
|
-
function
|
|
15
|
+
function m() {
|
|
15
16
|
return !0;
|
|
16
17
|
}
|
|
17
|
-
function
|
|
18
|
-
return l(
|
|
18
|
+
function h() {
|
|
19
|
+
return l(f, p, m);
|
|
19
20
|
}
|
|
20
21
|
//#endregion
|
|
21
22
|
//#region src/pwa/serviceWorker.ts
|
|
22
|
-
var
|
|
23
|
-
function
|
|
24
|
-
return e
|
|
23
|
+
var g = __SERVICE_WORKER_SCOPE__, _ = __SERVICE_WORKER_URL__, v = "SW_ACTIVATED_BY_CLIENT", y = __SERVICE_WORKER_UPDATE_RELOAD_COUNT_KEY__, b = __SERVICE_WORKER_MAX_AUTO_UPDATE_RELOADS__, x = /* @__PURE__ */ new WeakSet(), S = /* @__PURE__ */ new Set(), C = null, w = !1, T = !1, E = !1, D = !1;
|
|
24
|
+
function O(e) {
|
|
25
|
+
return t(e) && e.type === v ? { type: v } : null;
|
|
25
26
|
}
|
|
26
|
-
function
|
|
27
|
+
function k() {
|
|
27
28
|
try {
|
|
28
|
-
let e = window.sessionStorage.getItem(
|
|
29
|
+
let e = window.sessionStorage.getItem(y), t = Number(e);
|
|
29
30
|
return Number.isInteger(t) && t > 0 ? t : 0;
|
|
30
31
|
} catch {
|
|
31
32
|
return 0;
|
|
32
33
|
}
|
|
33
34
|
}
|
|
34
|
-
function
|
|
35
|
+
function A() {
|
|
35
36
|
try {
|
|
36
|
-
let e = Math.min(
|
|
37
|
-
window.sessionStorage.setItem(
|
|
37
|
+
let e = Math.min(k() + 1, b);
|
|
38
|
+
window.sessionStorage.setItem(y, String(e));
|
|
38
39
|
} catch {}
|
|
39
40
|
}
|
|
40
|
-
function
|
|
41
|
-
return
|
|
41
|
+
function j() {
|
|
42
|
+
return k() < b;
|
|
42
43
|
}
|
|
43
|
-
function
|
|
44
|
+
function M() {
|
|
44
45
|
try {
|
|
45
|
-
window.sessionStorage.removeItem(
|
|
46
|
+
window.sessionStorage.removeItem(y);
|
|
46
47
|
} catch {}
|
|
47
48
|
}
|
|
48
|
-
function
|
|
49
|
-
|
|
49
|
+
function N() {
|
|
50
|
+
w || (w = !0, window.location.reload());
|
|
50
51
|
}
|
|
51
|
-
function
|
|
52
|
-
|
|
53
|
-
|
|
52
|
+
function P() {
|
|
53
|
+
E || (E = !0, navigator.serviceWorker.addEventListener("controllerchange", () => {
|
|
54
|
+
T && N();
|
|
54
55
|
}));
|
|
55
56
|
}
|
|
56
|
-
function
|
|
57
|
-
|
|
58
|
-
|
|
57
|
+
function F() {
|
|
58
|
+
D || (D = !0, navigator.serviceWorker.addEventListener("message", (e) => {
|
|
59
|
+
O(e.data) && (w || (A(), N()));
|
|
59
60
|
}));
|
|
60
61
|
}
|
|
61
|
-
function
|
|
62
|
-
for (let t of
|
|
62
|
+
function I(e) {
|
|
63
|
+
for (let t of S) t(e);
|
|
63
64
|
}
|
|
64
|
-
function
|
|
65
|
-
|
|
65
|
+
function L(e) {
|
|
66
|
+
x.has(e) || (x.add(e), e.addEventListener("updatefound", () => {
|
|
66
67
|
let t = e.installing;
|
|
67
68
|
t && t.addEventListener("statechange", () => {
|
|
68
|
-
t.state === "installed" && navigator.serviceWorker.controller && (
|
|
69
|
+
t.state === "installed" && navigator.serviceWorker.controller && (C = e, I(e));
|
|
69
70
|
});
|
|
70
|
-
}),
|
|
71
|
+
}), P(), F());
|
|
71
72
|
}
|
|
72
|
-
async function
|
|
73
|
+
async function R(t = {}) {
|
|
73
74
|
if (!("serviceWorker" in navigator)) return null;
|
|
74
|
-
|
|
75
|
+
t.onUpdate && S.add(t.onUpdate);
|
|
75
76
|
try {
|
|
76
|
-
let
|
|
77
|
-
scope:
|
|
77
|
+
let e = C ?? await navigator.serviceWorker.getRegistration(g) ?? await navigator.serviceWorker.register(_, {
|
|
78
|
+
scope: g,
|
|
78
79
|
updateViaCache: "none"
|
|
79
80
|
});
|
|
80
|
-
return
|
|
81
|
-
} catch (
|
|
82
|
-
return
|
|
81
|
+
return C = e, L(e), t.onReady?.(e), e;
|
|
82
|
+
} catch (t) {
|
|
83
|
+
return e("[SW] registration failed:", t), null;
|
|
83
84
|
}
|
|
84
85
|
}
|
|
85
|
-
function
|
|
86
|
-
|
|
86
|
+
function z(e) {
|
|
87
|
+
S.delete(e);
|
|
87
88
|
}
|
|
88
|
-
function
|
|
89
|
+
function B(e) {
|
|
89
90
|
return !!e?.waiting;
|
|
90
91
|
}
|
|
91
|
-
function
|
|
92
|
+
function V(e = C) {
|
|
92
93
|
let t = e?.waiting;
|
|
93
|
-
return t ? (
|
|
94
|
+
return t ? (T = !0, A(), t.postMessage({ type: "SKIP_WAITING" }), !0) : !1;
|
|
94
95
|
}
|
|
95
|
-
function
|
|
96
|
-
return
|
|
96
|
+
function H() {
|
|
97
|
+
return A(), N(), !0;
|
|
97
98
|
}
|
|
98
|
-
async function
|
|
99
|
+
async function U() {
|
|
99
100
|
if (!("serviceWorker" in navigator)) return null;
|
|
100
101
|
try {
|
|
101
|
-
let e =
|
|
102
|
-
return e ? (
|
|
103
|
-
} catch (
|
|
104
|
-
return
|
|
102
|
+
let e = C ?? await navigator.serviceWorker.getRegistration(g);
|
|
103
|
+
return e ? (C = e, L(e), await e.update(), e) : null;
|
|
104
|
+
} catch (t) {
|
|
105
|
+
return e("[SW] update check failed:", t), null;
|
|
105
106
|
}
|
|
106
107
|
}
|
|
107
108
|
//#endregion
|
|
108
109
|
//#region src/pwa/useServiceWorkerUpdate.ts
|
|
109
|
-
var
|
|
110
|
-
function
|
|
110
|
+
var W = 3e5, G = 3e4;
|
|
111
|
+
function K() {
|
|
111
112
|
let [e] = performance.getEntriesByType("navigation");
|
|
112
113
|
return e?.type === "reload" || e?.type === "navigate";
|
|
113
114
|
}
|
|
114
|
-
function
|
|
115
|
-
let [e, t] = c(null), n = e !== null, r = o(() =>
|
|
115
|
+
function q() {
|
|
116
|
+
let [e, t] = c(null), n = e !== null, r = o(() => V(e) ? !0 : e ? H() : !1, [e]), i = o(() => {
|
|
116
117
|
t(null);
|
|
117
118
|
}, []);
|
|
118
119
|
return s(() => {
|
|
119
120
|
if (__DEV__) return;
|
|
120
|
-
let e = !0, n = Date.now(), r = null, i = !1, a = () =>
|
|
121
|
+
let e = !0, n = Date.now(), r = null, i = !1, a = () => K() && Date.now() - n <= G && j(), o = (e) => {
|
|
121
122
|
if (i) return !0;
|
|
122
123
|
if (!a()) return !1;
|
|
123
|
-
let t =
|
|
124
|
+
let t = V(e);
|
|
124
125
|
return i = t, t;
|
|
125
126
|
}, s = () => {
|
|
126
|
-
let t = Date.now() - n, i = Math.max(
|
|
127
|
+
let t = Date.now() - n, i = Math.max(G - t, 0);
|
|
127
128
|
r = window.setTimeout(() => {
|
|
128
|
-
e &&
|
|
129
|
+
e && M();
|
|
129
130
|
}, i);
|
|
130
131
|
}, c = (n) => {
|
|
131
132
|
e && (o(n) || t(n));
|
|
132
133
|
};
|
|
133
134
|
async function l() {
|
|
134
|
-
let n = await
|
|
135
|
-
if (!e ||
|
|
136
|
-
let r = await
|
|
137
|
-
e && (i ||
|
|
135
|
+
let n = await R({ onUpdate: c });
|
|
136
|
+
if (!e || B(n) && o(n)) return;
|
|
137
|
+
let r = await U();
|
|
138
|
+
e && (i || B(r) && o(r) || (B(r) && t(r), s()));
|
|
138
139
|
}
|
|
139
140
|
l();
|
|
140
141
|
let u = window.setInterval(() => {
|
|
141
|
-
|
|
142
|
-
e &&
|
|
142
|
+
U().then((n) => {
|
|
143
|
+
e && B(n) && t(n);
|
|
143
144
|
});
|
|
144
|
-
},
|
|
145
|
+
}, W);
|
|
145
146
|
return () => {
|
|
146
|
-
e = !1, r !== null && window.clearTimeout(r), window.clearInterval(u),
|
|
147
|
+
e = !1, r !== null && window.clearTimeout(r), window.clearInterval(u), z(c);
|
|
147
148
|
};
|
|
148
149
|
}, []), {
|
|
149
150
|
hasUpdate: n,
|
|
@@ -152,6 +153,6 @@ function G() {
|
|
|
152
153
|
};
|
|
153
154
|
}
|
|
154
155
|
//#endregion
|
|
155
|
-
export { n as buildSwCachePolicyValue, r as normalizeSwCacheName, i as parseSwCachePolicy, a as resolveSwCacheCacheNameByPolicy,
|
|
156
|
+
export { n as buildSwCachePolicyValue, r as normalizeSwCacheName, i as parseSwCachePolicy, a as resolveSwCacheCacheNameByPolicy, h as useBrowserOnlineStatus, q as useServiceWorkerUpdate };
|
|
156
157
|
|
|
157
158
|
//# sourceMappingURL=index.js.map
|
package/dist/pwa/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/pwa/useBrowserOnlineStatus.ts","../../src/pwa/serviceWorker.ts","../../src/pwa/useServiceWorkerUpdate.ts"],"sourcesContent":["import { useSyncExternalStore } from \"react\";\n\nfunction subscribe(onStoreChange: () => void) {\n\twindow.addEventListener(\"online\", onStoreChange);\n\twindow.addEventListener(\"offline\", onStoreChange);\n\treturn () => {\n\t\twindow.removeEventListener(\"online\", onStoreChange);\n\t\twindow.removeEventListener(\"offline\", onStoreChange);\n\t};\n}\n\nfunction getSnapshot() {\n\treturn navigator.onLine;\n}\n\nfunction getServerSnapshot() {\n\treturn true;\n}\n\n/** Наблюдает browser online hint без попытки подменить им проверку доступности конкретного сервера. */\nexport function useBrowserOnlineStatus() {\n\treturn useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n","import { logError } from \"../utils\";\nimport { isRecord } from \"../validators\";\n\nconst SW_SCOPE = __SERVICE_WORKER_SCOPE__;\nconst SW_URL = __SERVICE_WORKER_URL__;\nconst SW_ACTIVATED_BY_CLIENT_MESSAGE_TYPE = \"SW_ACTIVATED_BY_CLIENT\";\nconst SW_UPDATE_RELOAD_COUNT_KEY = __SERVICE_WORKER_UPDATE_RELOAD_COUNT_KEY__;\nconst MAX_SW_AUTO_UPDATE_RELOADS = __SERVICE_WORKER_MAX_AUTO_UPDATE_RELOADS__;\n\ntype SWUpdateHandler = (reg: ServiceWorkerRegistration) => void;\n\ntype ServiceWorkerClientMessage = {\n\ttype: typeof SW_ACTIVATED_BY_CLIENT_MESSAGE_TYPE;\n};\n\ntype RegisterSWOptions = {\n\t/**\n\t * Вызывается, когда новый SW установлен и ждёт активации.\n\t */\n\tonUpdate?: SWUpdateHandler;\n\n\t/**\n\t * Вызывается после успешной регистрации.\n\t */\n\tonReady?: (reg: ServiceWorkerRegistration) => void;\n};\n\nconst observedRegistrations = new WeakSet<ServiceWorkerRegistration>();\nconst updateHandlers = new Set<SWUpdateHandler>();\n\nlet latestRegistration: ServiceWorkerRegistration | null = null;\nlet refreshing = false;\nlet updateRequested = false;\nlet controllerChangeSubscribed = false;\nlet serviceWorkerMessageSubscribed = false;\n\nfunction readServiceWorkerClientMessage(value: unknown): ServiceWorkerClientMessage | null {\n\tif (!isRecord(value)) return null;\n\n\treturn value.type === SW_ACTIVATED_BY_CLIENT_MESSAGE_TYPE ? { type: SW_ACTIVATED_BY_CLIENT_MESSAGE_TYPE } : null;\n}\n\nfunction readServiceWorkerUpdateReloadCount(): number {\n\ttry {\n\t\tconst value = window.sessionStorage.getItem(SW_UPDATE_RELOAD_COUNT_KEY);\n\t\tconst count = Number(value);\n\n\t\treturn Number.isInteger(count) && count > 0 ? count : 0;\n\t} catch {\n\t\treturn 0;\n\t}\n}\n\nexport function recordServiceWorkerUpdateReload() {\n\ttry {\n\t\tconst nextCount = Math.min(readServiceWorkerUpdateReloadCount() + 1, MAX_SW_AUTO_UPDATE_RELOADS);\n\t\twindow.sessionStorage.setItem(SW_UPDATE_RELOAD_COUNT_KEY, String(nextCount));\n\t} catch {\n\t\t/**\n\t\t * sessionStorage может быть недоступен в приватном режиме или при\n\t\t * жёстких browser policy. Обновление всё равно должно продолжиться.\n\t\t */\n\t}\n}\n\nexport function canAutoApplyServiceWorkerUpdate(): boolean {\n\treturn readServiceWorkerUpdateReloadCount() < MAX_SW_AUTO_UPDATE_RELOADS;\n}\n\nexport function clearServiceWorkerUpdateReloadChain() {\n\ttry {\n\t\twindow.sessionStorage.removeItem(SW_UPDATE_RELOAD_COUNT_KEY);\n\t} catch {\n\t\t/**\n\t\t * Очистка маркера не критична: максимум пользователь увидит обычный\n\t\t * баннер вместо автоматического продолжения цепочки обновлений.\n\t\t */\n\t}\n}\n\nfunction reloadPage() {\n\tif (refreshing) return;\n\n\trefreshing = true;\n\twindow.location.reload();\n}\n\nfunction subscribeControllerChangeReload() {\n\tif (controllerChangeSubscribed) return;\n\n\tcontrollerChangeSubscribed = true;\n\n\tnavigator.serviceWorker.addEventListener(\"controllerchange\", () => {\n\t\t/**\n\t\t * Не перезагружаем страницу от любого controllerchange.\n\t\t * Перезагрузка нужна только когда мы сами вызвали SKIP_WAITING.\n\t\t */\n\t\tif (!updateRequested) return;\n\n\t\treloadPage();\n\t});\n}\n\nfunction subscribeServiceWorkerMessages() {\n\tif (serviceWorkerMessageSubscribed) return;\n\n\tserviceWorkerMessageSubscribed = true;\n\n\tnavigator.serviceWorker.addEventListener(\"message\", (event) => {\n\t\tconst message = readServiceWorkerClientMessage(event.data);\n\t\tif (!message) return;\n\t\tif (refreshing) return;\n\n\t\trecordServiceWorkerUpdateReload();\n\t\treloadPage();\n\t});\n}\n\nfunction emitUpdate(reg: ServiceWorkerRegistration) {\n\tfor (const handler of updateHandlers) {\n\t\thandler(reg);\n\t}\n}\n\nfunction observeRegistration(reg: ServiceWorkerRegistration) {\n\tif (observedRegistrations.has(reg)) return;\n\n\tobservedRegistrations.add(reg);\n\n\treg.addEventListener(\"updatefound\", () => {\n\t\tconst newWorker = reg.installing;\n\t\tif (!newWorker) return;\n\n\t\tnewWorker.addEventListener(\"statechange\", () => {\n\t\t\t/**\n\t\t\t * installed + есть controller = новая версия установлена,\n\t\t\t * но текущая страница всё ещё под старым SW.\n\t\t\t */\n\t\t\tif (newWorker.state === \"installed\" && navigator.serviceWorker.controller) {\n\t\t\t\tlatestRegistration = reg;\n\t\t\t\temitUpdate(reg);\n\t\t\t}\n\t\t});\n\t});\n\n\tsubscribeControllerChangeReload();\n\tsubscribeServiceWorkerMessages();\n}\n\nexport async function getServiceWorkerRegistration(): Promise<ServiceWorkerRegistration | null> {\n\tif (!(\"serviceWorker\" in navigator)) return null;\n\n\ttry {\n\t\tconst reg = latestRegistration ?? (await navigator.serviceWorker.getRegistration(SW_SCOPE));\n\n\t\tif (!reg) return null;\n\n\t\tlatestRegistration = reg;\n\t\tobserveRegistration(reg);\n\n\t\treturn reg;\n\t} catch (err) {\n\t\tlogError(\"[SW] get registration failed:\", err);\n\t\treturn null;\n\t}\n}\n\nexport async function registerServiceWorker(options: RegisterSWOptions = {}) {\n\tif (!(\"serviceWorker\" in navigator)) return null;\n\n\tif (options.onUpdate) {\n\t\tupdateHandlers.add(options.onUpdate);\n\t}\n\n\ttry {\n\t\tconst existingRegistration = latestRegistration ?? (await navigator.serviceWorker.getRegistration(SW_SCOPE));\n\n\t\tconst reg =\n\t\t\texistingRegistration ??\n\t\t\t(await navigator.serviceWorker.register(SW_URL, {\n\t\t\t\tscope: SW_SCOPE,\n\t\t\t\tupdateViaCache: \"none\"\n\t\t\t}));\n\n\t\tlatestRegistration = reg;\n\t\tobserveRegistration(reg);\n\n\t\toptions.onReady?.(reg);\n\n\t\treturn reg;\n\t} catch (err) {\n\t\tlogError(\"[SW] registration failed:\", err);\n\t\treturn null;\n\t}\n}\n\nexport function unsubscribeServiceWorkerUpdate(handler: SWUpdateHandler) {\n\tupdateHandlers.delete(handler);\n}\n\nexport function hasWaitingServiceWorker(reg: ServiceWorkerRegistration | null | undefined): reg is ServiceWorkerRegistration {\n\treturn Boolean(reg?.waiting);\n}\n\nexport function applyServiceWorkerUpdate(reg: ServiceWorkerRegistration | null = latestRegistration) {\n\tconst waiting = reg?.waiting;\n\tif (!waiting) return false;\n\n\tupdateRequested = true;\n\trecordServiceWorkerUpdateReload();\n\n\twaiting.postMessage({ type: \"SKIP_WAITING\" });\n\n\treturn true;\n}\n\nexport function reloadPageForServiceWorkerUpdate() {\n\trecordServiceWorkerUpdateReload();\n\treloadPage();\n\n\treturn true;\n}\n\nexport async function checkServiceWorkerUpdate() {\n\tif (!(\"serviceWorker\" in navigator)) return null;\n\n\ttry {\n\t\tconst reg = latestRegistration ?? (await navigator.serviceWorker.getRegistration(SW_SCOPE));\n\t\tif (!reg) return null;\n\n\t\tlatestRegistration = reg;\n\t\tobserveRegistration(reg);\n\n\t\tawait reg.update();\n\n\t\treturn reg;\n\t} catch (err) {\n\t\tlogError(\"[SW] update check failed:\", err);\n\t\treturn null;\n\t}\n}\n\n/**\n * Очищает SW-кеш OData для указанной политики.\n *\n * Примеры: `\"ttl=24h;name=ref\"`, `\"ttl=10m;max=200;name=ui\"`.\n *\n * После вызова следующий запрос с той же политикой пойдёт в сеть.\n */\nexport function invalidateSwCacheProfile(profile: string) {\n\tnavigator.serviceWorker?.controller?.postMessage({\n\t\ttype: \"invalidateProfile\",\n\t\tprofile\n\t});\n}\n","import { useCallback, useEffect, useState } from \"react\";\n\nimport {\n\tapplyServiceWorkerUpdate,\n\tcanAutoApplyServiceWorkerUpdate,\n\tcheckServiceWorkerUpdate,\n\tclearServiceWorkerUpdateReloadChain,\n\thasWaitingServiceWorker,\n\tregisterServiceWorker,\n\treloadPageForServiceWorkerUpdate,\n\tunsubscribeServiceWorkerUpdate\n} from \"./serviceWorker\";\n\n// TODO: Vite env\nconst SW_UPDATE_CHECK_INTERVAL_MS = 5 * 60 * 1000;\n// TODO: Vite env\nconst SW_STARTUP_AUTO_UPDATE_GRACE_MS = 30 * 1000;\n\nfunction isStartupNavigationForAutoUpdate(): boolean {\n\tconst [entry] = performance.getEntriesByType(\"navigation\") as PerformanceNavigationTiming[];\n\n\t/**\n\t * reload — пользователь явно обновил страницу.\n\t * navigate — пользователь открыл страницу по ссылке/закладке.\n\t */\n\treturn entry?.type === \"reload\" || entry?.type === \"navigate\";\n}\n\nexport function useServiceWorkerUpdate() {\n\tconst [waitingRegistration, setWaitingRegistration] = useState<ServiceWorkerRegistration | null>(null);\n\n\tconst hasUpdate = waitingRegistration !== null;\n\n\tconst applyUpdate = useCallback(() => {\n\t\tif (applyServiceWorkerUpdate(waitingRegistration)) return true;\n\t\tif (!waitingRegistration) return false;\n\n\t\t/**\n\t\t * Если другой клиент уже активировал waiting worker, в текущей вкладке\n\t\t * registration.waiting станет пустым, но баннер ещё может быть видимым.\n\t\t */\n\t\treturn reloadPageForServiceWorkerUpdate();\n\t}, [waitingRegistration]);\n\n\tconst dismiss = useCallback(() => {\n\t\tsetWaitingRegistration(null);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (__DEV__) return;\n\n\t\tlet isActive = true;\n\t\tconst startupStartedAt = Date.now();\n\t\tlet startupResetTimerId: number | null = null;\n\t\tlet startupUpdateApplied = false;\n\n\t\tconst canApplyStartupUpdate = () =>\n\t\t\tisStartupNavigationForAutoUpdate() &&\n\t\t\tDate.now() - startupStartedAt <= SW_STARTUP_AUTO_UPDATE_GRACE_MS &&\n\t\t\tcanAutoApplyServiceWorkerUpdate();\n\n\t\tconst tryApplyStartupUpdate = (reg: ServiceWorkerRegistration) => {\n\t\t\tif (startupUpdateApplied) return true;\n\t\t\tif (!canApplyStartupUpdate()) return false;\n\n\t\t\tconst applied = applyServiceWorkerUpdate(reg);\n\t\t\tstartupUpdateApplied = applied;\n\n\t\t\treturn applied;\n\t\t};\n\n\t\tconst scheduleStartupChainReset = () => {\n\t\t\tconst elapsedMs = Date.now() - startupStartedAt;\n\t\t\tconst timeoutMs = Math.max(SW_STARTUP_AUTO_UPDATE_GRACE_MS - elapsedMs, 0);\n\n\t\t\tstartupResetTimerId = window.setTimeout(() => {\n\t\t\t\tif (!isActive) return;\n\n\t\t\t\tclearServiceWorkerUpdateReloadChain();\n\t\t\t}, timeoutMs);\n\t\t};\n\n\t\tconst handleUpdate = (reg: ServiceWorkerRegistration) => {\n\t\t\tif (!isActive) return;\n\n\t\t\t/**\n\t\t\t * Если update найден вскоре после reload/navigate, применяем его\n\t\t\t * автоматически. Это закрывает цепочку из нескольких деплоев,\n\t\t\t * накопленных во время простоя вкладки.\n\t\t\t */\n\t\t\tif (tryApplyStartupUpdate(reg)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Если update найден уже во время активной сессии —\n\t\t\t * показываем баннер.\n\t\t\t */\n\t\t\tsetWaitingRegistration(reg);\n\t\t};\n\n\t\tasync function init() {\n\t\t\tconst reg = await registerServiceWorker({\n\t\t\t\tonUpdate: handleUpdate\n\t\t\t});\n\n\t\t\tif (!isActive) return;\n\n\t\t\t/**\n\t\t\t * Важный сценарий:\n\t\t\t * пользователь перезагрузил страницу, а новый SW уже был в waiting.\n\t\t\t * В этом случае не показываем баннер, а применяем update сразу.\n\t\t\t */\n\t\t\tif (hasWaitingServiceWorker(reg) && tryApplyStartupUpdate(reg)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst checkedReg = await checkServiceWorkerUpdate();\n\n\t\t\tif (!isActive) return;\n\t\t\tif (startupUpdateApplied) return;\n\n\t\t\tif (hasWaitingServiceWorker(checkedReg) && tryApplyStartupUpdate(checkedReg)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (hasWaitingServiceWorker(checkedReg)) {\n\t\t\t\tsetWaitingRegistration(checkedReg);\n\t\t\t}\n\n\t\t\tscheduleStartupChainReset();\n\t\t}\n\n\t\tvoid init();\n\n\t\tconst intervalId = window.setInterval(() => {\n\t\t\tvoid checkServiceWorkerUpdate().then((reg) => {\n\t\t\t\tif (!isActive) return;\n\n\t\t\t\tif (hasWaitingServiceWorker(reg)) {\n\t\t\t\t\tsetWaitingRegistration(reg);\n\t\t\t\t}\n\t\t\t});\n\t\t}, SW_UPDATE_CHECK_INTERVAL_MS);\n\n\t\treturn () => {\n\t\t\tisActive = false;\n\t\t\tif (startupResetTimerId !== null) {\n\t\t\t\twindow.clearTimeout(startupResetTimerId);\n\t\t\t}\n\t\t\twindow.clearInterval(intervalId);\n\t\t\tunsubscribeServiceWorkerUpdate(handleUpdate);\n\t\t};\n\t}, []);\n\n\treturn {\n\t\thasUpdate,\n\t\tapplyUpdate,\n\t\tdismiss\n\t};\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/pwa/useBrowserOnlineStatus.ts","../../src/pwa/serviceWorker.ts","../../src/pwa/useServiceWorkerUpdate.ts"],"sourcesContent":["import { useSyncExternalStore } from \"react\";\n\nconst ONLINE_EVENT = \"online\";\nconst OFFLINE_EVENT = \"offline\";\n\nfunction subscribe(onStoreChange: () => void) {\n\twindow.addEventListener(ONLINE_EVENT, onStoreChange);\n\twindow.addEventListener(OFFLINE_EVENT, onStoreChange);\n\treturn () => {\n\t\twindow.removeEventListener(ONLINE_EVENT, onStoreChange);\n\t\twindow.removeEventListener(OFFLINE_EVENT, onStoreChange);\n\t};\n}\n\nfunction getSnapshot() {\n\treturn navigator.onLine;\n}\n\nfunction getServerSnapshot() {\n\treturn true;\n}\n\n/** Наблюдает browser online hint без попытки подменить им проверку доступности конкретного сервера. */\nexport function useBrowserOnlineStatus() {\n\treturn useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n","import { logError } from \"../utils\";\nimport { isRecord } from \"../validators\";\n\nconst SW_SCOPE = __SERVICE_WORKER_SCOPE__;\nconst SW_URL = __SERVICE_WORKER_URL__;\nconst SW_ACTIVATED_BY_CLIENT_MESSAGE_TYPE = \"SW_ACTIVATED_BY_CLIENT\";\nconst SW_UPDATE_RELOAD_COUNT_KEY = __SERVICE_WORKER_UPDATE_RELOAD_COUNT_KEY__;\nconst MAX_SW_AUTO_UPDATE_RELOADS = __SERVICE_WORKER_MAX_AUTO_UPDATE_RELOADS__;\n\ntype SWUpdateHandler = (reg: ServiceWorkerRegistration) => void;\n\ntype ServiceWorkerClientMessage = {\n\ttype: typeof SW_ACTIVATED_BY_CLIENT_MESSAGE_TYPE;\n};\n\ntype RegisterSWOptions = {\n\t/**\n\t * Вызывается, когда новый SW установлен и ждёт активации.\n\t */\n\tonUpdate?: SWUpdateHandler;\n\n\t/**\n\t * Вызывается после успешной регистрации.\n\t */\n\tonReady?: (reg: ServiceWorkerRegistration) => void;\n};\n\nconst observedRegistrations = new WeakSet<ServiceWorkerRegistration>();\nconst updateHandlers = new Set<SWUpdateHandler>();\n\nlet latestRegistration: ServiceWorkerRegistration | null = null;\nlet refreshing = false;\nlet updateRequested = false;\nlet controllerChangeSubscribed = false;\nlet serviceWorkerMessageSubscribed = false;\n\nfunction readServiceWorkerClientMessage(value: unknown): ServiceWorkerClientMessage | null {\n\tif (!isRecord(value)) return null;\n\n\treturn value.type === SW_ACTIVATED_BY_CLIENT_MESSAGE_TYPE ? { type: SW_ACTIVATED_BY_CLIENT_MESSAGE_TYPE } : null;\n}\n\nfunction readServiceWorkerUpdateReloadCount(): number {\n\ttry {\n\t\tconst value = window.sessionStorage.getItem(SW_UPDATE_RELOAD_COUNT_KEY);\n\t\tconst count = Number(value);\n\n\t\treturn Number.isInteger(count) && count > 0 ? count : 0;\n\t} catch {\n\t\treturn 0;\n\t}\n}\n\nexport function recordServiceWorkerUpdateReload() {\n\ttry {\n\t\tconst nextCount = Math.min(readServiceWorkerUpdateReloadCount() + 1, MAX_SW_AUTO_UPDATE_RELOADS);\n\t\twindow.sessionStorage.setItem(SW_UPDATE_RELOAD_COUNT_KEY, String(nextCount));\n\t} catch {\n\t\t/**\n\t\t * sessionStorage может быть недоступен в приватном режиме или при\n\t\t * жёстких browser policy. Обновление всё равно должно продолжиться.\n\t\t */\n\t}\n}\n\nexport function canAutoApplyServiceWorkerUpdate(): boolean {\n\treturn readServiceWorkerUpdateReloadCount() < MAX_SW_AUTO_UPDATE_RELOADS;\n}\n\nexport function clearServiceWorkerUpdateReloadChain() {\n\ttry {\n\t\twindow.sessionStorage.removeItem(SW_UPDATE_RELOAD_COUNT_KEY);\n\t} catch {\n\t\t/**\n\t\t * Очистка маркера не критична: максимум пользователь увидит обычный\n\t\t * баннер вместо автоматического продолжения цепочки обновлений.\n\t\t */\n\t}\n}\n\nfunction reloadPage() {\n\tif (refreshing) return;\n\n\trefreshing = true;\n\twindow.location.reload();\n}\n\nfunction subscribeControllerChangeReload() {\n\tif (controllerChangeSubscribed) return;\n\n\tcontrollerChangeSubscribed = true;\n\n\tnavigator.serviceWorker.addEventListener(\"controllerchange\", () => {\n\t\t/**\n\t\t * Не перезагружаем страницу от любого controllerchange.\n\t\t * Перезагрузка нужна только когда мы сами вызвали SKIP_WAITING.\n\t\t */\n\t\tif (!updateRequested) return;\n\n\t\treloadPage();\n\t});\n}\n\nfunction subscribeServiceWorkerMessages() {\n\tif (serviceWorkerMessageSubscribed) return;\n\n\tserviceWorkerMessageSubscribed = true;\n\n\tnavigator.serviceWorker.addEventListener(\"message\", (event) => {\n\t\tconst message = readServiceWorkerClientMessage(event.data);\n\t\tif (!message) return;\n\t\tif (refreshing) return;\n\n\t\trecordServiceWorkerUpdateReload();\n\t\treloadPage();\n\t});\n}\n\nfunction emitUpdate(reg: ServiceWorkerRegistration) {\n\tfor (const handler of updateHandlers) {\n\t\thandler(reg);\n\t}\n}\n\nfunction observeRegistration(reg: ServiceWorkerRegistration) {\n\tif (observedRegistrations.has(reg)) return;\n\n\tobservedRegistrations.add(reg);\n\n\treg.addEventListener(\"updatefound\", () => {\n\t\tconst newWorker = reg.installing;\n\t\tif (!newWorker) return;\n\n\t\tnewWorker.addEventListener(\"statechange\", () => {\n\t\t\t/**\n\t\t\t * installed + есть controller = новая версия установлена,\n\t\t\t * но текущая страница всё ещё под старым SW.\n\t\t\t */\n\t\t\tif (newWorker.state === \"installed\" && navigator.serviceWorker.controller) {\n\t\t\t\tlatestRegistration = reg;\n\t\t\t\temitUpdate(reg);\n\t\t\t}\n\t\t});\n\t});\n\n\tsubscribeControllerChangeReload();\n\tsubscribeServiceWorkerMessages();\n}\n\nexport async function getServiceWorkerRegistration(): Promise<ServiceWorkerRegistration | null> {\n\tif (!(\"serviceWorker\" in navigator)) return null;\n\n\ttry {\n\t\tconst reg = latestRegistration ?? (await navigator.serviceWorker.getRegistration(SW_SCOPE));\n\n\t\tif (!reg) return null;\n\n\t\tlatestRegistration = reg;\n\t\tobserveRegistration(reg);\n\n\t\treturn reg;\n\t} catch (err) {\n\t\tlogError(\"[SW] get registration failed:\", err);\n\t\treturn null;\n\t}\n}\n\nexport async function registerServiceWorker(options: RegisterSWOptions = {}) {\n\tif (!(\"serviceWorker\" in navigator)) return null;\n\n\tif (options.onUpdate) {\n\t\tupdateHandlers.add(options.onUpdate);\n\t}\n\n\ttry {\n\t\tconst existingRegistration = latestRegistration ?? (await navigator.serviceWorker.getRegistration(SW_SCOPE));\n\n\t\tconst reg =\n\t\t\texistingRegistration ??\n\t\t\t(await navigator.serviceWorker.register(SW_URL, {\n\t\t\t\tscope: SW_SCOPE,\n\t\t\t\tupdateViaCache: \"none\"\n\t\t\t}));\n\n\t\tlatestRegistration = reg;\n\t\tobserveRegistration(reg);\n\n\t\toptions.onReady?.(reg);\n\n\t\treturn reg;\n\t} catch (err) {\n\t\tlogError(\"[SW] registration failed:\", err);\n\t\treturn null;\n\t}\n}\n\nexport function unsubscribeServiceWorkerUpdate(handler: SWUpdateHandler) {\n\tupdateHandlers.delete(handler);\n}\n\nexport function hasWaitingServiceWorker(reg: ServiceWorkerRegistration | null | undefined): reg is ServiceWorkerRegistration {\n\treturn Boolean(reg?.waiting);\n}\n\nexport function applyServiceWorkerUpdate(reg: ServiceWorkerRegistration | null = latestRegistration) {\n\tconst waiting = reg?.waiting;\n\tif (!waiting) return false;\n\n\tupdateRequested = true;\n\trecordServiceWorkerUpdateReload();\n\n\twaiting.postMessage({ type: \"SKIP_WAITING\" });\n\n\treturn true;\n}\n\nexport function reloadPageForServiceWorkerUpdate() {\n\trecordServiceWorkerUpdateReload();\n\treloadPage();\n\n\treturn true;\n}\n\nexport async function checkServiceWorkerUpdate() {\n\tif (!(\"serviceWorker\" in navigator)) return null;\n\n\ttry {\n\t\tconst reg = latestRegistration ?? (await navigator.serviceWorker.getRegistration(SW_SCOPE));\n\t\tif (!reg) return null;\n\n\t\tlatestRegistration = reg;\n\t\tobserveRegistration(reg);\n\n\t\tawait reg.update();\n\n\t\treturn reg;\n\t} catch (err) {\n\t\tlogError(\"[SW] update check failed:\", err);\n\t\treturn null;\n\t}\n}\n\n/**\n * Очищает SW-кеш OData для указанной политики.\n *\n * Примеры: `\"ttl=24h;name=ref\"`, `\"ttl=10m;max=200;name=ui\"`.\n *\n * После вызова следующий запрос с той же политикой пойдёт в сеть.\n */\nexport function invalidateSwCacheProfile(profile: string) {\n\tnavigator.serviceWorker?.controller?.postMessage({\n\t\ttype: \"invalidateProfile\",\n\t\tprofile\n\t});\n}\n","import { useCallback, useEffect, useState } from \"react\";\n\nimport {\n\tapplyServiceWorkerUpdate,\n\tcanAutoApplyServiceWorkerUpdate,\n\tcheckServiceWorkerUpdate,\n\tclearServiceWorkerUpdateReloadChain,\n\thasWaitingServiceWorker,\n\tregisterServiceWorker,\n\treloadPageForServiceWorkerUpdate,\n\tunsubscribeServiceWorkerUpdate\n} from \"./serviceWorker\";\n\n// TODO: Vite env\nconst SW_UPDATE_CHECK_INTERVAL_MS = 5 * 60 * 1000;\n// TODO: Vite env\nconst SW_STARTUP_AUTO_UPDATE_GRACE_MS = 30 * 1000;\n\nfunction isStartupNavigationForAutoUpdate(): boolean {\n\tconst [entry] = performance.getEntriesByType(\"navigation\") as PerformanceNavigationTiming[];\n\n\t/**\n\t * reload — пользователь явно обновил страницу.\n\t * navigate — пользователь открыл страницу по ссылке/закладке.\n\t */\n\treturn entry?.type === \"reload\" || entry?.type === \"navigate\";\n}\n\nexport function useServiceWorkerUpdate() {\n\tconst [waitingRegistration, setWaitingRegistration] = useState<ServiceWorkerRegistration | null>(null);\n\n\tconst hasUpdate = waitingRegistration !== null;\n\n\tconst applyUpdate = useCallback(() => {\n\t\tif (applyServiceWorkerUpdate(waitingRegistration)) return true;\n\t\tif (!waitingRegistration) return false;\n\n\t\t/**\n\t\t * Если другой клиент уже активировал waiting worker, в текущей вкладке\n\t\t * registration.waiting станет пустым, но баннер ещё может быть видимым.\n\t\t */\n\t\treturn reloadPageForServiceWorkerUpdate();\n\t}, [waitingRegistration]);\n\n\tconst dismiss = useCallback(() => {\n\t\tsetWaitingRegistration(null);\n\t}, []);\n\n\tuseEffect(() => {\n\t\tif (__DEV__) return;\n\n\t\tlet isActive = true;\n\t\tconst startupStartedAt = Date.now();\n\t\tlet startupResetTimerId: number | null = null;\n\t\tlet startupUpdateApplied = false;\n\n\t\tconst canApplyStartupUpdate = () =>\n\t\t\tisStartupNavigationForAutoUpdate() &&\n\t\t\tDate.now() - startupStartedAt <= SW_STARTUP_AUTO_UPDATE_GRACE_MS &&\n\t\t\tcanAutoApplyServiceWorkerUpdate();\n\n\t\tconst tryApplyStartupUpdate = (reg: ServiceWorkerRegistration) => {\n\t\t\tif (startupUpdateApplied) return true;\n\t\t\tif (!canApplyStartupUpdate()) return false;\n\n\t\t\tconst applied = applyServiceWorkerUpdate(reg);\n\t\t\tstartupUpdateApplied = applied;\n\n\t\t\treturn applied;\n\t\t};\n\n\t\tconst scheduleStartupChainReset = () => {\n\t\t\tconst elapsedMs = Date.now() - startupStartedAt;\n\t\t\tconst timeoutMs = Math.max(SW_STARTUP_AUTO_UPDATE_GRACE_MS - elapsedMs, 0);\n\n\t\t\tstartupResetTimerId = window.setTimeout(() => {\n\t\t\t\tif (!isActive) return;\n\n\t\t\t\tclearServiceWorkerUpdateReloadChain();\n\t\t\t}, timeoutMs);\n\t\t};\n\n\t\tconst handleUpdate = (reg: ServiceWorkerRegistration) => {\n\t\t\tif (!isActive) return;\n\n\t\t\t/**\n\t\t\t * Если update найден вскоре после reload/navigate, применяем его\n\t\t\t * автоматически. Это закрывает цепочку из нескольких деплоев,\n\t\t\t * накопленных во время простоя вкладки.\n\t\t\t */\n\t\t\tif (tryApplyStartupUpdate(reg)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * Если update найден уже во время активной сессии —\n\t\t\t * показываем баннер.\n\t\t\t */\n\t\t\tsetWaitingRegistration(reg);\n\t\t};\n\n\t\tasync function init() {\n\t\t\tconst reg = await registerServiceWorker({\n\t\t\t\tonUpdate: handleUpdate\n\t\t\t});\n\n\t\t\tif (!isActive) return;\n\n\t\t\t/**\n\t\t\t * Важный сценарий:\n\t\t\t * пользователь перезагрузил страницу, а новый SW уже был в waiting.\n\t\t\t * В этом случае не показываем баннер, а применяем update сразу.\n\t\t\t */\n\t\t\tif (hasWaitingServiceWorker(reg) && tryApplyStartupUpdate(reg)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst checkedReg = await checkServiceWorkerUpdate();\n\n\t\t\tif (!isActive) return;\n\t\t\tif (startupUpdateApplied) return;\n\n\t\t\tif (hasWaitingServiceWorker(checkedReg) && tryApplyStartupUpdate(checkedReg)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (hasWaitingServiceWorker(checkedReg)) {\n\t\t\t\tsetWaitingRegistration(checkedReg);\n\t\t\t}\n\n\t\t\tscheduleStartupChainReset();\n\t\t}\n\n\t\tvoid init();\n\n\t\tconst intervalId = window.setInterval(() => {\n\t\t\tvoid checkServiceWorkerUpdate().then((reg) => {\n\t\t\t\tif (!isActive) return;\n\n\t\t\t\tif (hasWaitingServiceWorker(reg)) {\n\t\t\t\t\tsetWaitingRegistration(reg);\n\t\t\t\t}\n\t\t\t});\n\t\t}, SW_UPDATE_CHECK_INTERVAL_MS);\n\n\t\treturn () => {\n\t\t\tisActive = false;\n\t\t\tif (startupResetTimerId !== null) {\n\t\t\t\twindow.clearTimeout(startupResetTimerId);\n\t\t\t}\n\t\t\twindow.clearInterval(intervalId);\n\t\t\tunsubscribeServiceWorkerUpdate(handleUpdate);\n\t\t};\n\t}, []);\n\n\treturn {\n\t\thasUpdate,\n\t\tapplyUpdate,\n\t\tdismiss\n\t};\n}\n"],"mappings":";;;;;AAEA,IAAM,IAAe,UACf,IAAgB;AAEtB,SAAS,EAAU,GAA2B;CAG7C,OAFA,OAAO,iBAAiB,GAAc,CAAa,GACnD,OAAO,iBAAiB,GAAe,CAAa,SACvC;EAEZ,AADA,OAAO,oBAAoB,GAAc,CAAa,GACtD,OAAO,oBAAoB,GAAe,CAAa;CACxD;AACD;AAEA,SAAS,IAAc;CACtB,OAAO,UAAU;AAClB;AAEA,SAAS,IAAoB;CAC5B,OAAO;AACR;AAGA,SAAgB,IAAyB;CACxC,OAAO,EAAqB,GAAW,GAAa,CAAiB;AACtE;;;ACtBA,IAAM,IAAW,0BACX,IAAS,wBACT,IAAsC,0BACtC,IAA6B,4CAC7B,IAA6B,4CAoB7B,oBAAwB,IAAI,QAAmC,GAC/D,oBAAiB,IAAI,IAAqB,GAE5C,IAAuD,MACvD,IAAa,IACb,IAAkB,IAClB,IAA6B,IAC7B,IAAiC;AAErC,SAAS,EAA+B,GAAmD;CAG1F,OAFK,EAAS,CAAK,KAEZ,EAAM,SAAS,IAAsC,EAAE,MAAM,EAAoC,IAAI;AAC7G;AAEA,SAAS,IAA6C;CACrD,IAAI;EACH,IAAM,IAAQ,OAAO,eAAe,QAAQ,CAA0B,GAChE,IAAQ,OAAO,CAAK;EAE1B,OAAO,OAAO,UAAU,CAAK,KAAK,IAAQ,IAAI,IAAQ;CACvD,QAAQ;EACP,OAAO;CACR;AACD;AAEA,SAAgB,IAAkC;CACjD,IAAI;EACH,IAAM,IAAY,KAAK,IAAI,EAAmC,IAAI,GAAG,CAA0B;EAC/F,OAAO,eAAe,QAAQ,GAA4B,OAAO,CAAS,CAAC;CAC5E,QAAQ,CAKR;AACD;AAEA,SAAgB,IAA2C;CAC1D,OAAO,EAAmC,IAAI;AAC/C;AAEA,SAAgB,IAAsC;CACrD,IAAI;EACH,OAAO,eAAe,WAAW,CAA0B;CAC5D,QAAQ,CAKR;AACD;AAEA,SAAS,IAAa;CACjB,MAEJ,IAAa,IACb,OAAO,SAAS,OAAO;AACxB;AAEA,SAAS,IAAkC;CACtC,MAEJ,IAA6B,IAE7B,UAAU,cAAc,iBAAiB,0BAA0B;EAK7D,KAEL,EAAW;CACZ,CAAC;AACF;AAEA,SAAS,IAAiC;CACrC,MAEJ,IAAiC,IAEjC,UAAU,cAAc,iBAAiB,YAAY,MAAU;EAC9C,EAA+B,EAAM,IAChD,MACD,MAEJ,EAAgC,GAChC,EAAW;CACZ,CAAC;AACF;AAEA,SAAS,EAAW,GAAgC;CACnD,KAAK,IAAM,KAAW,GACrB,EAAQ,CAAG;AAEb;AAEA,SAAS,EAAoB,GAAgC;CACxD,EAAsB,IAAI,CAAG,MAEjC,EAAsB,IAAI,CAAG,GAE7B,EAAI,iBAAiB,qBAAqB;EACzC,IAAM,IAAY,EAAI;EACjB,KAEL,EAAU,iBAAiB,qBAAqB;GAK/C,AAAI,EAAU,UAAU,eAAe,UAAU,cAAc,eAC9D,IAAqB,GACrB,EAAW,CAAG;EAEhB,CAAC;CACF,CAAC,GAED,EAAgC,GAChC,EAA+B;AAChC;AAoBA,eAAsB,EAAsB,IAA6B,CAAC,GAAG;CAC5E,IAAI,EAAE,mBAAmB,YAAY,OAAO;CAE5C,AAAI,EAAQ,YACX,EAAe,IAAI,EAAQ,QAAQ;CAGpC,IAAI;EAGH,IAAM,IAFuB,KAAuB,MAAM,UAAU,cAAc,gBAAgB,CAAQ,KAIxG,MAAM,UAAU,cAAc,SAAS,GAAQ;GAC/C,OAAO;GACP,gBAAgB;EACjB,CAAC;EAOF,OALA,IAAqB,GACrB,EAAoB,CAAG,GAEvB,EAAQ,UAAU,CAAG,GAEd;CACR,SAAS,GAAK;EAEb,OADA,EAAS,6BAA6B,CAAG,GAClC;CACR;AACD;AAEA,SAAgB,EAA+B,GAA0B;CACxE,EAAe,OAAO,CAAO;AAC9B;AAEA,SAAgB,EAAwB,GAAqF;CAC5H,OAAO,EAAQ,GAAK;AACrB;AAEA,SAAgB,EAAyB,IAAwC,GAAoB;CACpG,IAAM,IAAU,GAAK;CAQrB,OAPK,KAEL,IAAkB,IAClB,EAAgC,GAEhC,EAAQ,YAAY,EAAE,MAAM,eAAe,CAAC,GAErC,MAPc;AAQtB;AAEA,SAAgB,IAAmC;CAIlD,OAHA,EAAgC,GAChC,EAAW,GAEJ;AACR;AAEA,eAAsB,IAA2B;CAChD,IAAI,EAAE,mBAAmB,YAAY,OAAO;CAE5C,IAAI;EACH,IAAM,IAAM,KAAuB,MAAM,UAAU,cAAc,gBAAgB,CAAQ;EAQzF,OAPK,KAEL,IAAqB,GACrB,EAAoB,CAAG,GAEvB,MAAM,EAAI,OAAO,GAEV,KAPU;CAQlB,SAAS,GAAK;EAEb,OADA,EAAS,6BAA6B,CAAG,GAClC;CACR;AACD;;;AClOA,IAAM,IAA8B,KAE9B,IAAkC;AAExC,SAAS,IAA4C;CACpD,IAAM,CAAC,KAAS,YAAY,iBAAiB,YAAY;CAMzD,OAAO,GAAO,SAAS,YAAY,GAAO,SAAS;AACpD;AAEA,SAAgB,IAAyB;CACxC,IAAM,CAAC,GAAqB,KAA0B,EAA2C,IAAI,GAE/F,IAAY,MAAwB,MAEpC,IAAc,QACf,EAAyB,CAAmB,IAAU,KACrD,IAME,EAAiC,IANP,IAO/B,CAAC,CAAmB,CAAC,GAElB,IAAU,QAAkB;EACjC,EAAuB,IAAI;CAC5B,GAAG,CAAC,CAAC;CA6GL,OA3GA,QAAgB;EACf,IAAI,SAAS;EAEb,IAAI,IAAW,IACT,IAAmB,KAAK,IAAI,GAC9B,IAAqC,MACrC,IAAuB,IAErB,UACL,EAAiC,KACjC,KAAK,IAAI,IAAI,KAAoB,KACjC,EAAgC,GAE3B,KAAyB,MAAmC;GACjE,IAAI,GAAsB,OAAO;GACjC,IAAI,CAAC,EAAsB,GAAG,OAAO;GAErC,IAAM,IAAU,EAAyB,CAAG;GAG5C,OAFA,IAAuB,GAEhB;EACR,GAEM,UAAkC;GACvC,IAAM,IAAY,KAAK,IAAI,IAAI,GACzB,IAAY,KAAK,IAAI,IAAkC,GAAW,CAAC;GAEzE,IAAsB,OAAO,iBAAiB;IACxC,KAEL,EAAoC;GACrC,GAAG,CAAS;EACb,GAEM,KAAgB,MAAmC;GACnD,MAOD,EAAsB,CAAG,KAQ7B,EAAuB,CAAG;EAC3B;EAEA,eAAe,IAAO;GACrB,IAAM,IAAM,MAAM,EAAsB,EACvC,UAAU,EACX,CAAC;GASD,IAPI,CAAC,KAOD,EAAwB,CAAG,KAAK,EAAsB,CAAG,GAC5D;GAGD,IAAM,IAAa,MAAM,EAAyB;GAE7C,MACD,KAEA,EAAwB,CAAU,KAAK,EAAsB,CAAU,MAIvE,EAAwB,CAAU,KACrC,EAAuB,CAAU,GAGlC,EAA0B;EAC3B;EAEA,EAAU;EAEV,IAAM,IAAa,OAAO,kBAAkB;GAC3C,EAA8B,CAAC,CAAC,MAAM,MAAQ;IACxC,KAED,EAAwB,CAAG,KAC9B,EAAuB,CAAG;GAE5B,CAAC;EACF,GAAG,CAA2B;EAE9B,aAAa;GAMZ,AALA,IAAW,IACP,MAAwB,QAC3B,OAAO,aAAa,CAAmB,GAExC,OAAO,cAAc,CAAU,GAC/B,EAA+B,CAAY;EAC5C;CACD,GAAG,CAAC,CAAC,GAEE;EACN;EACA;EACA;CACD;AACD"}
|
|
@@ -1,70 +1,70 @@
|
|
|
1
1
|
//#region src/pwa/swCachePolicy.ts
|
|
2
|
-
var e = 5e3;
|
|
3
|
-
function
|
|
2
|
+
var e = "bust", t = "forever", n = 5e3;
|
|
3
|
+
function r(e) {
|
|
4
4
|
return e?.trim().toLowerCase().replace(/[^a-z0-9_-]+/g, "-").replace(/^-+|-+$/g, "") || void 0;
|
|
5
5
|
}
|
|
6
|
-
function
|
|
7
|
-
let
|
|
8
|
-
if (
|
|
9
|
-
durationLabel:
|
|
6
|
+
function i(e) {
|
|
7
|
+
let n = e.trim().toLowerCase();
|
|
8
|
+
if (n === t) return {
|
|
9
|
+
durationLabel: t,
|
|
10
10
|
ttlMs: Infinity
|
|
11
11
|
};
|
|
12
|
-
let
|
|
13
|
-
if (!
|
|
14
|
-
let
|
|
15
|
-
if (!Number.isFinite(
|
|
16
|
-
let
|
|
12
|
+
let r = n.match(/^(\d+(?:\.\d+)?)(ms|s|m|h|d)$/);
|
|
13
|
+
if (!r) return;
|
|
14
|
+
let i = Number(r[1]), a = r[2];
|
|
15
|
+
if (!Number.isFinite(i) || i <= 0) return;
|
|
16
|
+
let o = Math.round(i * {
|
|
17
17
|
ms: 1,
|
|
18
18
|
s: 1e3,
|
|
19
19
|
m: 6e4,
|
|
20
20
|
h: 36e5,
|
|
21
21
|
d: 864e5
|
|
22
|
-
}[
|
|
23
|
-
if (!(!Number.isFinite(
|
|
24
|
-
durationLabel: `${
|
|
25
|
-
amount:
|
|
26
|
-
unit:
|
|
27
|
-
ttlMs:
|
|
22
|
+
}[a]);
|
|
23
|
+
if (!(!Number.isFinite(o) || o <= 0 || o > 31536e6)) return {
|
|
24
|
+
durationLabel: `${r[1]}${a}`.replace(".", "_"),
|
|
25
|
+
amount: i,
|
|
26
|
+
unit: a,
|
|
27
|
+
ttlMs: o
|
|
28
28
|
};
|
|
29
29
|
}
|
|
30
|
-
function
|
|
31
|
-
if (!
|
|
32
|
-
let
|
|
33
|
-
if (!(!Number.isInteger(
|
|
30
|
+
function a(e) {
|
|
31
|
+
if (!e) return;
|
|
32
|
+
let t = Number(e.trim());
|
|
33
|
+
if (!(!Number.isInteger(t) || t <= 0)) return Math.min(t, n);
|
|
34
34
|
}
|
|
35
|
-
function
|
|
35
|
+
function o(e, t, n) {
|
|
36
36
|
return `odata-${t ? `${t}-${e.durationLabel}` : e.durationLabel}${n ? `-max${n}` : ""}`;
|
|
37
37
|
}
|
|
38
|
-
function
|
|
39
|
-
let
|
|
40
|
-
if (!
|
|
41
|
-
if (
|
|
42
|
-
let [
|
|
43
|
-
if (
|
|
44
|
-
let
|
|
45
|
-
if (!
|
|
46
|
-
let
|
|
38
|
+
function s(t) {
|
|
39
|
+
let n = t?.trim();
|
|
40
|
+
if (!n) return;
|
|
41
|
+
if (n.toLowerCase() === "off") return { mode: "off" };
|
|
42
|
+
let [s, ...c] = n.split(/[;,]/).map((e) => e.trim()).filter(Boolean), [l, u] = s?.split("=", 2) ?? [], d = l?.toLowerCase();
|
|
43
|
+
if (d !== "ttl" && d !== e || !u) return;
|
|
44
|
+
let f = i(u);
|
|
45
|
+
if (!f) return;
|
|
46
|
+
let p = new Map(c.map((e) => e.split("=", 2).map((e) => e.trim())).map(([e, t]) => [e.toLowerCase(), t]).filter(([e, t]) => !!(e && t))), m = a(p.get("maxentries") ?? p.get("max") ?? p.get("entries")), h = r(p.get("cachename") ?? p.get("cache") ?? p.get("name")), g = m ?? 100;
|
|
47
47
|
return {
|
|
48
|
-
mode:
|
|
49
|
-
amount:
|
|
50
|
-
unit:
|
|
51
|
-
name:
|
|
52
|
-
maxEntries:
|
|
53
|
-
resolvedMaxEntries:
|
|
54
|
-
ttlMs:
|
|
55
|
-
cacheName:
|
|
48
|
+
mode: d,
|
|
49
|
+
amount: f.amount,
|
|
50
|
+
unit: f.unit,
|
|
51
|
+
name: h,
|
|
52
|
+
maxEntries: m,
|
|
53
|
+
resolvedMaxEntries: g,
|
|
54
|
+
ttlMs: f.ttlMs,
|
|
55
|
+
cacheName: o(f, h, m)
|
|
56
56
|
};
|
|
57
57
|
}
|
|
58
|
-
function
|
|
59
|
-
let
|
|
60
|
-
return
|
|
58
|
+
function c(t) {
|
|
59
|
+
let n = s(t);
|
|
60
|
+
return n?.mode === "ttl" || n?.mode === e ? n.cacheName : void 0;
|
|
61
61
|
}
|
|
62
|
-
function
|
|
63
|
-
if (
|
|
64
|
-
let
|
|
65
|
-
return `${
|
|
62
|
+
function l(e) {
|
|
63
|
+
if (e.mode === "off") return "off";
|
|
64
|
+
let t = typeof e.amount == "number" && Number.isFinite(e.amount) && e.amount > 0 ? e.amount : 24, i = e.unit ?? "h", a = typeof e.maxEntries == "number" && Number.isInteger(e.maxEntries) && e.maxEntries > 0 ? Math.min(e.maxEntries, n) : void 0, o = r(e.name), s = [a ? `max=${a}` : void 0, o ? `name=${o}` : void 0].filter(Boolean);
|
|
65
|
+
return `${e.mode}=${t}${i}${s.length ? `;${s.join(";")}` : ""}`;
|
|
66
66
|
}
|
|
67
67
|
//#endregion
|
|
68
|
-
export {
|
|
68
|
+
export { l as buildSwCachePolicyValue, r as normalizeSwCacheName, s as parseSwCachePolicy, c as resolveSwCacheCacheNameByPolicy };
|
|
69
69
|
|
|
70
70
|
//# sourceMappingURL=sw-cache-policy.js.map
|