@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.
Files changed (494) hide show
  1. package/README.md +17 -5
  2. package/dist/analytical-table/definition/analyticalDefinitionConstants.d.ts +17 -0
  3. package/dist/analytical-table/definition/analyticalDefinitionConstants.d.ts.map +1 -0
  4. package/dist/analytical-table/definition/compileAnalyticalTableDefinition.d.ts.map +1 -1
  5. package/dist/analytical-table/definition/types.d.ts +6 -5
  6. package/dist/analytical-table/definition/types.d.ts.map +1 -1
  7. package/dist/analytical-table/dynamic-columns/analyticalDateColumnConstants.d.ts +7 -0
  8. package/dist/analytical-table/dynamic-columns/analyticalDateColumnConstants.d.ts.map +1 -0
  9. package/dist/analytical-table/dynamic-columns/dateColumns.d.ts.map +1 -1
  10. package/dist/analytical-table/dynamic-columns/types.d.ts +2 -1
  11. package/dist/analytical-table/dynamic-columns/types.d.ts.map +1 -1
  12. package/dist/analytical-table/index.js +124 -114
  13. package/dist/analytical-table/index.js.map +1 -1
  14. package/dist/analytical-table/projections/analyticalExportConstants.d.ts +7 -0
  15. package/dist/analytical-table/projections/analyticalExportConstants.d.ts.map +1 -0
  16. package/dist/analytical-table/projections/expansion.d.ts +2 -1
  17. package/dist/analytical-table/projections/expansion.d.ts.map +1 -1
  18. package/dist/analytical-table/projections/exportProjection.d.ts.map +1 -1
  19. package/dist/analytical-table/projections/types.d.ts +3 -2
  20. package/dist/analytical-table/projections/types.d.ts.map +1 -1
  21. package/dist/analytical-table/runtime/aggregation.d.ts.map +1 -1
  22. package/dist/analytical-table/runtime/analyticalRowConstants.d.ts +4 -0
  23. package/dist/analytical-table/runtime/analyticalRowConstants.d.ts.map +1 -0
  24. package/dist/analytical-table/runtime/analyticalViewConstants.d.ts +16 -0
  25. package/dist/analytical-table/runtime/analyticalViewConstants.d.ts.map +1 -0
  26. package/dist/analytical-table/runtime/buildGroupedModel.d.ts.map +1 -1
  27. package/dist/analytical-table/runtime/filtering.d.ts.map +1 -1
  28. package/dist/analytical-table/runtime/grouping.d.ts.map +1 -1
  29. package/dist/analytical-table/runtime/hierarchy.d.ts +2 -1
  30. package/dist/analytical-table/runtime/hierarchy.d.ts.map +1 -1
  31. package/dist/analytical-table/runtime/totals.d.ts +2 -2
  32. package/dist/analytical-table/runtime/totals.d.ts.map +1 -1
  33. package/dist/analytical-table/runtime/types.d.ts +5 -3
  34. package/dist/analytical-table/runtime/types.d.ts.map +1 -1
  35. package/dist/analytical-table/runtime/valueComparison.d.ts.map +1 -1
  36. package/dist/array/index.js +1 -1
  37. package/dist/array/reorder.d.ts +6 -1
  38. package/dist/array/reorder.d.ts.map +1 -1
  39. package/dist/async-task-runner/createCoalescingTaskRunner.d.ts.map +1 -1
  40. package/dist/async-task-runner/createDeadlineTimer.d.ts.map +1 -1
  41. package/dist/async-task-runner/index.js +39 -36
  42. package/dist/async-task-runner/index.js.map +1 -1
  43. package/dist/async-task-runner/nativeTimerConstants.d.ts +3 -0
  44. package/dist/async-task-runner/nativeTimerConstants.d.ts.map +1 -0
  45. package/dist/binary/base64Constants.d.ts +6 -0
  46. package/dist/binary/base64Constants.d.ts.map +1 -0
  47. package/dist/binary/binaryToBlob.d.ts.map +1 -1
  48. package/dist/binary/getBase64DecodedSize.d.ts.map +1 -1
  49. package/dist/binary/index.js +95 -70
  50. package/dist/binary/index.js.map +1 -1
  51. package/dist/browser-notifications/browserNotificationConstants.d.ts +3 -0
  52. package/dist/browser-notifications/browserNotificationConstants.d.ts.map +1 -0
  53. package/dist/browser-notifications/browserNotificationTypes.d.ts +2 -1
  54. package/dist/browser-notifications/browserNotificationTypes.d.ts.map +1 -1
  55. package/dist/browser-notifications/createBrowserNotificationPresenter.d.ts.map +1 -1
  56. package/dist/browser-notifications/index.js +38 -37
  57. package/dist/browser-notifications/index.js.map +1 -1
  58. package/dist/chunks/{array-D-_yMMUK.js → array-bd7LYFto.js} +1 -3
  59. package/dist/chunks/{array-D-_yMMUK.js.map → array-bd7LYFto.js.map} +1 -1
  60. package/dist/chunks/{dom-BK22UmgF.js → dom-ZSeWZ0Gg.js} +103 -98
  61. package/dist/chunks/dom-ZSeWZ0Gg.js.map +1 -0
  62. package/dist/chunks/formatDate-CNPcfNte.js +133 -0
  63. package/dist/chunks/formatDate-CNPcfNte.js.map +1 -0
  64. package/dist/chunks/{formatters-rxriDRPk.js → formatters-CO40zvVB.js} +496 -497
  65. package/dist/chunks/formatters-CO40zvVB.js.map +1 -0
  66. package/dist/chunks/{formulas-BXT_XBWI.js → formulas-Y0HOcFhe.js} +90 -86
  67. package/dist/chunks/formulas-Y0HOcFhe.js.map +1 -0
  68. package/dist/chunks/hasSignatureBytes-D2wO_Myl.js +11 -0
  69. package/dist/chunks/hasSignatureBytes-D2wO_Myl.js.map +1 -0
  70. package/dist/chunks/keyboardConstants-BZKskWsm.js +6 -0
  71. package/dist/chunks/keyboardConstants-BZKskWsm.js.map +1 -0
  72. package/dist/chunks/media-imBOXWwa.js +192 -0
  73. package/dist/chunks/media-imBOXWwa.js.map +1 -0
  74. package/dist/chunks/mimeTypeConstants-BzONV-b1.js +6 -0
  75. package/dist/chunks/mimeTypeConstants-BzONV-b1.js.map +1 -0
  76. package/dist/chunks/{query-client-CVRfrYZM.js → query-client-D0HQZ84w.js} +142 -142
  77. package/dist/chunks/query-client-D0HQZ84w.js.map +1 -0
  78. package/dist/chunks/scalarTypeClassification-D4YcGxtQ.js +766 -0
  79. package/dist/chunks/scalarTypeClassification-D4YcGxtQ.js.map +1 -0
  80. package/dist/chunks/scalarTypeConstants-CnSsjpGO.js +6 -0
  81. package/dist/chunks/scalarTypeConstants-CnSsjpGO.js.map +1 -0
  82. package/dist/chunks/utils-DW0Yso1Q.js +210 -0
  83. package/dist/chunks/utils-DW0Yso1Q.js.map +1 -0
  84. package/dist/chunks/{uuid-CUJPAbRY.js → uuid-izDzLv18.js} +1 -2
  85. package/dist/chunks/uuid-izDzLv18.js.map +1 -0
  86. package/dist/chunks/validate-8URYKKly.js +613 -0
  87. package/dist/chunks/validate-8URYKKly.js.map +1 -0
  88. package/dist/copy/index.js +5 -5
  89. package/dist/copy/index.js.map +1 -1
  90. package/dist/copy/useCopyFeedback.d.ts.map +1 -1
  91. package/dist/crypto/hashString.d.ts.map +1 -1
  92. package/dist/crypto/hexadecimalConstants.d.ts +3 -0
  93. package/dist/crypto/hexadecimalConstants.d.ts.map +1 -0
  94. package/dist/crypto/index.js +25 -24
  95. package/dist/crypto/index.js.map +1 -1
  96. package/dist/crypto/uuid.d.ts.map +1 -1
  97. package/dist/date-segments/index.js +81 -81
  98. package/dist/date-segments/index.js.map +1 -1
  99. package/dist/date-segments/mask.d.ts +13 -3
  100. package/dist/date-segments/mask.d.ts.map +1 -1
  101. package/dist/decimal/decimalConstants.d.ts +3 -0
  102. package/dist/decimal/decimalConstants.d.ts.map +1 -0
  103. package/dist/decimal/index.js +0 -2
  104. package/dist/decimal/index.js.map +1 -1
  105. package/dist/decimal/normalizeDecimal.d.ts.map +1 -1
  106. package/dist/decimal/normalizeDecimalLiteral.d.ts.map +1 -1
  107. package/dist/decimal/resolveDecimalMaxLength.d.ts.map +1 -1
  108. package/dist/decimal/sumDecimals.d.ts.map +1 -1
  109. package/dist/decimal/writeDecimalParts.d.ts.map +1 -1
  110. package/dist/dom/document-scroll/acquireDocumentScrollLock.d.ts.map +1 -1
  111. package/dist/dom/document-scroll/attachDocumentTouchScrollGuard.d.ts.map +1 -1
  112. package/dist/dom/document-scroll/canConsumeVerticalTouchScroll.d.ts.map +1 -1
  113. package/dist/dom/domEventConstants.d.ts +4 -0
  114. package/dist/dom/domEventConstants.d.ts.map +1 -0
  115. package/dist/dom/domScrollConstants.d.ts +3 -0
  116. package/dist/dom/domScrollConstants.d.ts.map +1 -0
  117. package/dist/dom/index.js +1 -1
  118. package/dist/dom/installFaviconOverride.d.ts.map +1 -1
  119. package/dist/dom/overlayFocusConstants.d.ts +4 -0
  120. package/dist/dom/overlayFocusConstants.d.ts.map +1 -0
  121. package/dist/dom/scroll-anchor/captureScrollAnchor.d.ts.map +1 -1
  122. package/dist/dom/useClickOutside.d.ts +1 -1
  123. package/dist/dom/useClickOutside.d.ts.map +1 -1
  124. package/dist/dom/useEscapeDismiss.d.ts +1 -1
  125. package/dist/dom/useEscapeDismiss.d.ts.map +1 -1
  126. package/dist/dom/useFocusTrap.d.ts.map +1 -1
  127. package/dist/dom/useIsTouchDevice.d.ts.map +1 -1
  128. package/dist/dom/useOverlayFocus.d.ts +3 -2
  129. package/dist/dom/useOverlayFocus.d.ts.map +1 -1
  130. package/dist/dom/visual-viewport/attachVisualViewportFrame.d.ts.map +1 -1
  131. package/dist/error-report/breadcrumbs.d.ts.map +1 -1
  132. package/dist/error-report/capture.d.ts.map +1 -1
  133. package/dist/error-report/captureOptions.d.ts +3 -2
  134. package/dist/error-report/captureOptions.d.ts.map +1 -1
  135. package/dist/error-report/capturePolicyConstants.d.ts +4 -0
  136. package/dist/error-report/capturePolicyConstants.d.ts.map +1 -0
  137. package/dist/error-report/dataPreview.d.ts.map +1 -1
  138. package/dist/error-report/diagnostics.d.ts.map +1 -1
  139. package/dist/error-report/drafts.d.ts.map +1 -1
  140. package/dist/error-report/environment.d.ts.map +1 -1
  141. package/dist/error-report/errorInfo.d.ts.map +1 -1
  142. package/dist/error-report/errorReportCaptureLimits.d.ts +26 -0
  143. package/dist/error-report/errorReportCaptureLimits.d.ts.map +1 -0
  144. package/dist/error-report/errorReportContractConstants.d.ts +32 -0
  145. package/dist/error-report/errorReportContractConstants.d.ts.map +1 -0
  146. package/dist/error-report/index.js +586 -587
  147. package/dist/error-report/index.js.map +1 -1
  148. package/dist/error-report/payload.d.ts.map +1 -1
  149. package/dist/error-report/queue.d.ts.map +1 -1
  150. package/dist/error-report/queueContract.d.ts +7 -6
  151. package/dist/error-report/queueContract.d.ts.map +1 -1
  152. package/dist/error-report/queueRecord.d.ts.map +1 -1
  153. package/dist/error-report/queueResultConstants.d.ts +14 -0
  154. package/dist/error-report/queueResultConstants.d.ts.map +1 -0
  155. package/dist/error-report/runtimeDeduplication.d.ts +2 -1
  156. package/dist/error-report/runtimeDeduplication.d.ts.map +1 -1
  157. package/dist/error-report/safeValue.d.ts.map +1 -1
  158. package/dist/error-report/safeValueMarkerConstants.d.ts +16 -0
  159. package/dist/error-report/safeValueMarkerConstants.d.ts.map +1 -0
  160. package/dist/error-report/schema.d.ts.map +1 -1
  161. package/dist/error-report/types.d.ts +10 -8
  162. package/dist/error-report/types.d.ts.map +1 -1
  163. package/dist/error-report-source-maps/archive.d.ts.map +1 -1
  164. package/dist/error-report-source-maps/artifact.d.ts.map +1 -1
  165. package/dist/error-report-source-maps/index.js +238 -238
  166. package/dist/error-report-source-maps/index.js.map +1 -1
  167. package/dist/error-report-source-maps/manifest.d.ts.map +1 -1
  168. package/dist/error-report-source-maps/package.d.ts.map +1 -1
  169. package/dist/error-report-source-maps/sourceMapArtifactConstants.d.ts +11 -0
  170. package/dist/error-report-source-maps/sourceMapArtifactConstants.d.ts.map +1 -0
  171. package/dist/error-report-source-maps/symbolicate.d.ts.map +1 -1
  172. package/dist/error-report-source-maps/symbolicationResultConstants.d.ts +6 -0
  173. package/dist/error-report-source-maps/symbolicationResultConstants.d.ts.map +1 -0
  174. package/dist/error-report-source-maps/types.d.ts +4 -2
  175. package/dist/error-report-source-maps/types.d.ts.map +1 -1
  176. package/dist/excel/excel.d.ts.map +1 -1
  177. package/dist/excel/excelWorkbookConstants.d.ts +6 -0
  178. package/dist/excel/excelWorkbookConstants.d.ts.map +1 -0
  179. package/dist/excel/index.js +117 -116
  180. package/dist/excel/index.js.map +1 -1
  181. package/dist/excel/matrixWorkbook.d.ts +6 -1
  182. package/dist/excel/matrixWorkbook.d.ts.map +1 -1
  183. package/dist/excel/tableExport.d.ts.map +1 -1
  184. package/dist/file/checkFileSignature.d.ts.map +1 -1
  185. package/dist/file/contentDisposition.d.ts.map +1 -1
  186. package/dist/file/fileSignatureConstants.d.ts +14 -18
  187. package/dist/file/fileSignatureConstants.d.ts.map +1 -1
  188. package/dist/file/fileSignatureTypes.d.ts +3 -3
  189. package/dist/file/fileSignatureTypes.d.ts.map +1 -1
  190. package/dist/file/image/imageReadConstants.d.ts +3 -0
  191. package/dist/file/image/imageReadConstants.d.ts.map +1 -0
  192. package/dist/file/image/readImageFile.d.ts +3 -2
  193. package/dist/file/image/readImageFile.d.ts.map +1 -1
  194. package/dist/file/image/types.d.ts +5 -3
  195. package/dist/file/image/types.d.ts.map +1 -1
  196. package/dist/file/index.js +139 -165
  197. package/dist/file/index.js.map +1 -1
  198. package/dist/file/mimeType.d.ts.map +1 -1
  199. package/dist/file/mimeTypeConstants.d.ts +18 -0
  200. package/dist/file/mimeTypeConstants.d.ts.map +1 -0
  201. package/dist/file/read-file/assert.d.ts.map +1 -1
  202. package/dist/file/read-file/readFile.d.ts +3 -11
  203. package/dist/file/read-file/readFile.d.ts.map +1 -1
  204. package/dist/file/read-file/readFileConstants.d.ts +13 -0
  205. package/dist/file/read-file/readFileConstants.d.ts.map +1 -0
  206. package/dist/file/read-file/types.d.ts +7 -6
  207. package/dist/file/read-file/types.d.ts.map +1 -1
  208. package/dist/file/signature/checkArchiveSignature.d.ts.map +1 -1
  209. package/dist/file-system/fileSystemConstants.d.ts +5 -0
  210. package/dist/file-system/fileSystemConstants.d.ts.map +1 -0
  211. package/dist/file-system/fileSystemTypes.d.ts +2 -1
  212. package/dist/file-system/fileSystemTypes.d.ts.map +1 -1
  213. package/dist/file-system/index.js +11 -10
  214. package/dist/file-system/index.js.map +1 -1
  215. package/dist/file-system/resolvePathInsideRoot.d.ts.map +1 -1
  216. package/dist/formatters/boolean/parseAbapBoolean.d.ts.map +1 -1
  217. package/dist/formatters/boolean/toAbapBoolean.d.ts.map +1 -1
  218. package/dist/formatters/date/calendarDate.d.ts.map +1 -1
  219. package/dist/formatters/date/calendarDateConstants.d.ts +13 -0
  220. package/dist/formatters/date/calendarDateConstants.d.ts.map +1 -0
  221. package/dist/formatters/date/calendarPeriod.d.ts +11 -2
  222. package/dist/formatters/date/calendarPeriod.d.ts.map +1 -1
  223. package/dist/formatters/date/dateFormatConstants.d.ts +17 -0
  224. package/dist/formatters/date/dateFormatConstants.d.ts.map +1 -0
  225. package/dist/formatters/date/datePatternConstants.d.ts +16 -0
  226. package/dist/formatters/date/datePatternConstants.d.ts.map +1 -0
  227. package/dist/formatters/date/datePresetNameConstants.d.ts +27 -0
  228. package/dist/formatters/date/datePresetNameConstants.d.ts.map +1 -0
  229. package/dist/formatters/date/dateRange.d.ts +3 -1
  230. package/dist/formatters/date/dateRange.d.ts.map +1 -1
  231. package/dist/formatters/date/dateValueConstants.d.ts +15 -0
  232. package/dist/formatters/date/dateValueConstants.d.ts.map +1 -0
  233. package/dist/formatters/date/educationDate.d.ts.map +1 -1
  234. package/dist/formatters/date/formatDate.d.ts.map +1 -1
  235. package/dist/formatters/date/formatInstantDateTime.d.ts.map +1 -1
  236. package/dist/formatters/date/parseDate.d.ts.map +1 -1
  237. package/dist/formatters/date/pattern.d.ts.map +1 -1
  238. package/dist/formatters/date/presets.d.ts.map +1 -1
  239. package/dist/formatters/date/types.d.ts +8 -6
  240. package/dist/formatters/date/types.d.ts.map +1 -1
  241. package/dist/formatters/formatDurationMinutes.d.ts.map +1 -1
  242. package/dist/formatters/formatFileSize.d.ts.map +1 -1
  243. package/dist/formatters/formatPhone.d.ts.map +1 -1
  244. package/dist/formatters/index.js +6 -6
  245. package/dist/formatters/normalizeLeadingZeros.d.ts.map +1 -1
  246. package/dist/formatters/number/compact.d.ts.map +1 -1
  247. package/dist/formatters/number/formatCompactNumber.d.ts.map +1 -1
  248. package/dist/formatters/number/formatNumber.d.ts.map +1 -1
  249. package/dist/formatters/number/numberFormatConstants.d.ts +11 -0
  250. package/dist/formatters/number/numberFormatConstants.d.ts.map +1 -0
  251. package/dist/formatters/number/numberPresetNameConstants.d.ts +16 -0
  252. package/dist/formatters/number/numberPresetNameConstants.d.ts.map +1 -0
  253. package/dist/formatters/number/parseNumber.d.ts.map +1 -1
  254. package/dist/formatters/number/presets.d.ts.map +1 -1
  255. package/dist/formatters/number/types.d.ts +2 -1
  256. package/dist/formatters/number/types.d.ts.map +1 -1
  257. package/dist/formatters/pipeline/clone.d.ts.map +1 -1
  258. package/dist/formatters/pipeline/definitions.d.ts.map +1 -1
  259. package/dist/formatters/pipeline/dependencies.d.ts.map +1 -1
  260. package/dist/formatters/pipeline/execute.d.ts +4 -1
  261. package/dist/formatters/pipeline/execute.d.ts.map +1 -1
  262. package/dist/formatters/pipeline/formattersPipelineConstants.d.ts +19 -0
  263. package/dist/formatters/pipeline/formattersPipelineConstants.d.ts.map +1 -0
  264. package/dist/formatters/pipeline/normalize.d.ts.map +1 -1
  265. package/dist/formatters/pipeline/pipelineValidationConstants.d.ts +40 -0
  266. package/dist/formatters/pipeline/pipelineValidationConstants.d.ts.map +1 -0
  267. package/dist/formatters/pipeline/registry.d.ts +1 -1
  268. package/dist/formatters/pipeline/registry.d.ts.map +1 -1
  269. package/dist/formatters/pipeline/rekey.d.ts.map +1 -1
  270. package/dist/formatters/pipeline/runtime.d.ts.map +1 -1
  271. package/dist/formatters/pipeline/types.d.ts +24 -21
  272. package/dist/formatters/pipeline/types.d.ts.map +1 -1
  273. package/dist/formatters/pipeline/validate.d.ts +2 -1
  274. package/dist/formatters/pipeline/validate.d.ts.map +1 -1
  275. package/dist/formatters/strings/spaceCharacterConstants.d.ts +5 -0
  276. package/dist/formatters/strings/spaceCharacterConstants.d.ts.map +1 -0
  277. package/dist/formatters/strings/stripInnerSpaces.d.ts.map +1 -1
  278. package/dist/formatters/strings/stripLeadingZeros.d.ts.map +1 -1
  279. package/dist/formatters/valueState/fixedValueStateResolver.d.ts.map +1 -1
  280. package/dist/formatters/valueState/presentation.d.ts.map +1 -1
  281. package/dist/formatters/valueState/resolveValueStateClassName.d.ts.map +1 -1
  282. package/dist/formatters/valueState/thresholdValueStateResolver.d.ts.map +1 -1
  283. package/dist/formatters/valueState/types.d.ts +2 -1
  284. package/dist/formatters/valueState/types.d.ts.map +1 -1
  285. package/dist/formatters/valueState/valueStateRegistry.d.ts.map +1 -1
  286. package/dist/formatters/valueState/valueStateResolverConstants.d.ts +6 -0
  287. package/dist/formatters/valueState/valueStateResolverConstants.d.ts.map +1 -0
  288. package/dist/formulas/execute.d.ts +3 -2
  289. package/dist/formulas/execute.d.ts.map +1 -1
  290. package/dist/formulas/index.js +1 -1
  291. package/dist/formulas/isTableFormulaDependency.d.ts.map +1 -1
  292. package/dist/formulas/tableFormulaConstants.d.ts +12 -0
  293. package/dist/formulas/tableFormulaConstants.d.ts.map +1 -0
  294. package/dist/formulas/types.d.ts +2 -1
  295. package/dist/formulas/types.d.ts.map +1 -1
  296. package/dist/formulas/validate.d.ts +2 -1
  297. package/dist/formulas/validate.d.ts.map +1 -1
  298. package/dist/hooks/index.js +110 -107
  299. package/dist/hooks/index.js.map +1 -1
  300. package/dist/hooks/useBlockBrowserZoom.d.ts.map +1 -1
  301. package/dist/hooks/useDndSortableSensors.d.ts.map +1 -1
  302. package/dist/hooks/useFloatingListbox.d.ts +15 -33
  303. package/dist/hooks/useFloatingListbox.d.ts.map +1 -1
  304. package/dist/http/index.js +8 -7
  305. package/dist/http/index.js.map +1 -1
  306. package/dist/http/textResponse.d.ts.map +1 -1
  307. package/dist/indexed-records/createIndexedRecordsSchema.d.ts.map +1 -1
  308. package/dist/indexed-records/schema.js +24 -23
  309. package/dist/indexed-records/schema.js.map +1 -1
  310. package/dist/media/breakpointConstants.d.ts +5 -0
  311. package/dist/media/breakpointConstants.d.ts.map +1 -0
  312. package/dist/media/breakpoints.d.ts +2 -1
  313. package/dist/media/breakpoints.d.ts.map +1 -1
  314. package/dist/media/createNotificationTonePlayer.d.ts.map +1 -1
  315. package/dist/media/getCurrentFontSize.d.ts.map +1 -1
  316. package/dist/media/index.js +1 -1
  317. package/dist/media/mediaQueryConstants.d.ts +3 -0
  318. package/dist/media/mediaQueryConstants.d.ts.map +1 -0
  319. package/dist/media/responsive.d.ts +1 -1
  320. package/dist/media/responsive.d.ts.map +1 -1
  321. package/dist/media/useMatchMedia.d.ts.map +1 -1
  322. package/dist/media/useMediaQuery.d.ts.map +1 -1
  323. package/dist/metadata/baseMetaTypes.d.ts.map +1 -1
  324. package/dist/metadata/metadataTypes.d.ts +8 -7
  325. package/dist/metadata/metadataTypes.d.ts.map +1 -1
  326. package/dist/metadata/scalarTypeClassification.d.ts.map +1 -1
  327. package/dist/metadata/scalarTypeConstants.d.ts +21 -0
  328. package/dist/metadata/scalarTypeConstants.d.ts.map +1 -0
  329. package/dist/notifications/index.js +62 -62
  330. package/dist/notifications/index.js.map +1 -1
  331. package/dist/notifications/notificationTypeConstants.d.ts +6 -0
  332. package/dist/notifications/notificationTypeConstants.d.ts.map +1 -0
  333. package/dist/notifications/notify.d.ts.map +1 -1
  334. package/dist/notifications/store.d.ts.map +1 -1
  335. package/dist/notifications/types.d.ts +2 -1
  336. package/dist/notifications/types.d.ts.map +1 -1
  337. package/dist/number-scale/index.js +47 -46
  338. package/dist/number-scale/index.js.map +1 -1
  339. package/dist/number-scale/marksPositionConstants.d.ts +4 -0
  340. package/dist/number-scale/marksPositionConstants.d.ts.map +1 -0
  341. package/dist/number-scale/numberScale.d.ts +1 -1
  342. package/dist/number-scale/numberScale.d.ts.map +1 -1
  343. package/dist/number-scale/types.d.ts +2 -1
  344. package/dist/number-scale/types.d.ts.map +1 -1
  345. package/dist/odata-service/builder.d.ts.map +1 -1
  346. package/dist/odata-service/columns.d.ts.map +1 -1
  347. package/dist/odata-service/entityOperationConstants.d.ts +4 -0
  348. package/dist/odata-service/entityOperationConstants.d.ts.map +1 -0
  349. package/dist/odata-service/filterDefinitionConstants.d.ts +24 -0
  350. package/dist/odata-service/filterDefinitionConstants.d.ts.map +1 -0
  351. package/dist/odata-service/filterDefinitions.d.ts +19 -17
  352. package/dist/odata-service/filterDefinitions.d.ts.map +1 -1
  353. package/dist/odata-service/filterOperationConstants.d.ts +14 -0
  354. package/dist/odata-service/filterOperationConstants.d.ts.map +1 -0
  355. package/dist/odata-service/filters.d.ts.map +1 -1
  356. package/dist/odata-service/formatters.d.ts.map +1 -1
  357. package/dist/odata-service/index.js +439 -433
  358. package/dist/odata-service/index.js.map +1 -1
  359. package/dist/odata-service/odataMetadataConstants.d.ts +8 -0
  360. package/dist/odata-service/odataMetadataConstants.d.ts.map +1 -0
  361. package/dist/odata-service/parser.d.ts +1 -3
  362. package/dist/odata-service/parser.d.ts.map +1 -1
  363. package/dist/odata-service/schema.d.ts.map +1 -1
  364. package/dist/odata-service/sorts.d.ts.map +1 -1
  365. package/dist/odata-service/sqlFilters.d.ts +10 -5
  366. package/dist/odata-service/sqlFilters.d.ts.map +1 -1
  367. package/dist/odata-service/types.d.ts +5 -3
  368. package/dist/odata-service/types.d.ts.map +1 -1
  369. package/dist/pwa/index.js +72 -71
  370. package/dist/pwa/index.js.map +1 -1
  371. package/dist/pwa/sw-cache-policy.js +47 -47
  372. package/dist/pwa/sw-cache-policy.js.map +1 -1
  373. package/dist/pwa/swCachePolicy.d.ts +5 -1
  374. package/dist/pwa/swCachePolicy.d.ts.map +1 -1
  375. package/dist/pwa/useBrowserOnlineStatus.d.ts.map +1 -1
  376. package/dist/query-client/broadcast.d.ts +4 -3
  377. package/dist/query-client/broadcast.d.ts.map +1 -1
  378. package/dist/query-client/createQueryRestoreSchedulerGuard.d.ts.map +1 -1
  379. package/dist/query-client/createQueryRestoreStorage.d.ts.map +1 -1
  380. package/dist/query-client/index.js +1 -1
  381. package/dist/query-client/invalidationBroadcast.d.ts +2 -1
  382. package/dist/query-client/invalidationBroadcast.d.ts.map +1 -1
  383. package/dist/query-client/persistence.d.ts +9 -6
  384. package/dist/query-client/persistence.d.ts.map +1 -1
  385. package/dist/query-client/queryCacheEventConstants.d.ts +11 -0
  386. package/dist/query-client/queryCacheEventConstants.d.ts.map +1 -0
  387. package/dist/query-client/queryClient.d.ts +2 -1
  388. package/dist/query-client/queryClient.d.ts.map +1 -1
  389. package/dist/query-client/queryMeta.d.ts.map +1 -1
  390. package/dist/query-client/sessionPersistenceConstants.d.ts +5 -0
  391. package/dist/query-client/sessionPersistenceConstants.d.ts.map +1 -0
  392. package/dist/query-client/sessionScoped.d.ts.map +1 -1
  393. package/dist/query-client/sessionScopedResetConstants.d.ts +4 -0
  394. package/dist/query-client/sessionScopedResetConstants.d.ts.map +1 -0
  395. package/dist/query-client/sessionScopedResetLifecycleTypes.d.ts +2 -1
  396. package/dist/query-client/sessionScopedResetLifecycleTypes.d.ts.map +1 -1
  397. package/dist/seo/index.js +0 -1
  398. package/dist/seo/index.js.map +1 -1
  399. package/dist/seo/seo.d.ts +3 -2
  400. package/dist/seo/seo.d.ts.map +1 -1
  401. package/dist/seo/seoContentTypeConstants.d.ts +6 -0
  402. package/dist/seo/seoContentTypeConstants.d.ts.map +1 -0
  403. package/dist/seo/types.d.ts +2 -1
  404. package/dist/seo/types.d.ts.map +1 -1
  405. package/dist/session-storage/index.js +1 -1
  406. package/dist/table/cellSelection.d.ts.map +1 -1
  407. package/dist/table/columnSizing.d.ts +11 -3
  408. package/dist/table/columnSizing.d.ts.map +1 -1
  409. package/dist/table/index.d.ts +1 -0
  410. package/dist/table/index.d.ts.map +1 -1
  411. package/dist/table/index.js +102 -92
  412. package/dist/table/index.js.map +1 -1
  413. package/dist/table/odataAdapter.d.ts +3 -3
  414. package/dist/table/odataAdapter.d.ts.map +1 -1
  415. package/dist/table/resolveTableColumnsWidth.d.ts +9 -0
  416. package/dist/table/resolveTableColumnsWidth.d.ts.map +1 -0
  417. package/dist/table/selection.d.ts +2 -2
  418. package/dist/table/selection.d.ts.map +1 -1
  419. package/dist/table/tableColumnConstants.d.ts +5 -0
  420. package/dist/table/tableColumnConstants.d.ts.map +1 -0
  421. package/dist/table/tableSelectionConstants.d.ts +8 -0
  422. package/dist/table/tableSelectionConstants.d.ts.map +1 -0
  423. package/dist/table/tanStackFeatures.d.ts +8 -8
  424. package/dist/table/types.d.ts +6 -4
  425. package/dist/table/types.d.ts.map +1 -1
  426. package/dist/table/useTableRowSelection.d.ts +2 -2
  427. package/dist/table/useTableRowSelection.d.ts.map +1 -1
  428. package/dist/table-document/index.js +88 -87
  429. package/dist/table-document/index.js.map +1 -1
  430. package/dist/table-document/insertTableDocumentAxis.d.ts +2 -1
  431. package/dist/table-document/insertTableDocumentAxis.d.ts.map +1 -1
  432. package/dist/table-document/tableDocument.d.ts +2 -1
  433. package/dist/table-document/tableDocument.d.ts.map +1 -1
  434. package/dist/table-document/tableDocumentAxisGroups.d.ts +4 -3
  435. package/dist/table-document/tableDocumentAxisGroups.d.ts.map +1 -1
  436. package/dist/table-document/tableDocumentConstants.d.ts +8 -0
  437. package/dist/table-document/tableDocumentConstants.d.ts.map +1 -0
  438. package/dist/table-document/tableDocumentGeometry.d.ts.map +1 -1
  439. package/dist/three-scene/index.js +32 -32
  440. package/dist/three-scene/index.js.map +1 -1
  441. package/dist/three-scene/threeSceneAvailability.d.ts +4 -3
  442. package/dist/three-scene/threeSceneAvailability.d.ts.map +1 -1
  443. package/dist/three-scene/threeSceneConstants.d.ts +14 -0
  444. package/dist/three-scene/threeSceneConstants.d.ts.map +1 -0
  445. package/dist/three-scene/useThreeSceneAvailability.d.ts.map +1 -1
  446. package/dist/tree-table/index.js +1 -1
  447. package/dist/types/abapBooleanConstants.d.ts +4 -0
  448. package/dist/types/abapBooleanConstants.d.ts.map +1 -0
  449. package/dist/types/index.js.map +1 -1
  450. package/dist/types/types.d.ts +4 -2
  451. package/dist/types/types.d.ts.map +1 -1
  452. package/dist/types/valueStateConstants.d.ts +8 -0
  453. package/dist/types/valueStateConstants.d.ts.map +1 -0
  454. package/dist/utils/cloneFunctionStrategyConstants.d.ts +4 -0
  455. package/dist/utils/cloneFunctionStrategyConstants.d.ts.map +1 -0
  456. package/dist/utils/createLazyComponent.d.ts.map +1 -1
  457. package/dist/utils/deepCloneWithoutFunctions.d.ts +2 -1
  458. package/dist/utils/deepCloneWithoutFunctions.d.ts.map +1 -1
  459. package/dist/utils/deepCopyWithoutFunctions.d.ts +2 -1
  460. package/dist/utils/deepCopyWithoutFunctions.d.ts.map +1 -1
  461. package/dist/utils/index.js +2 -209
  462. package/dist/utils/keyboard.d.ts +2 -1
  463. package/dist/utils/keyboard.d.ts.map +1 -1
  464. package/dist/utils/keyboardConstants.d.ts +16 -0
  465. package/dist/utils/keyboardConstants.d.ts.map +1 -0
  466. package/dist/validators/index.js +3 -3
  467. package/dist/validators/index.js.map +1 -1
  468. package/dist/validators/validateUrl.d.ts.map +1 -1
  469. package/dist/value-transformers/execute.d.ts.map +1 -1
  470. package/dist/value-transformers/index.js +9 -6
  471. package/dist/value-transformers/index.js.map +1 -1
  472. package/dist/value-transformers/types.d.ts +3 -2
  473. package/dist/value-transformers/types.d.ts.map +1 -1
  474. package/dist/value-transformers/valueTransformerConstants.d.ts +4 -0
  475. package/dist/value-transformers/valueTransformerConstants.d.ts.map +1 -0
  476. package/package.json +6 -5
  477. package/src/binary/README.mdx +1 -1
  478. package/src/dom/README.mdx +1 -1
  479. package/src/query-client/README.mdx +4 -4
  480. package/src/table/README.mdx +49 -23
  481. package/dist/chunks/dom-BK22UmgF.js.map +0 -1
  482. package/dist/chunks/formatDate-BUvpRI7H.js +0 -133
  483. package/dist/chunks/formatDate-BUvpRI7H.js.map +0 -1
  484. package/dist/chunks/formatters-rxriDRPk.js.map +0 -1
  485. package/dist/chunks/formulas-BXT_XBWI.js.map +0 -1
  486. package/dist/chunks/media-WK38KtMl.js +0 -191
  487. package/dist/chunks/media-WK38KtMl.js.map +0 -1
  488. package/dist/chunks/query-client-CVRfrYZM.js.map +0 -1
  489. package/dist/chunks/scalarTypeClassification-BZcFmIyR.js +0 -764
  490. package/dist/chunks/scalarTypeClassification-BZcFmIyR.js.map +0 -1
  491. package/dist/chunks/uuid-CUJPAbRY.js.map +0 -1
  492. package/dist/chunks/validate-DsUR-bFF.js +0 -608
  493. package/dist/chunks/validate-DsUR-bFF.js.map +0 -1
  494. package/dist/utils/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/file/fileSignatureConstants.ts","../../src/file/signature/hasSignatureBytes.ts","../../src/file/signature/checkArchiveSignature.ts","../../src/file/signature/checkPdfSignature.ts","../../src/file/checkFileSignature.ts","../../src/file/contentDisposition.ts","../../src/file/read-file/types.ts","../../src/file/read-file/assert.ts","../../src/file/read-file/readFile.ts","../../src/file/image/types.ts","../../src/file/image/readImageFile.ts","../../src/file/mimeType.ts"],"sourcesContent":["/** Приватный словарь результатов; значения сохраняют публичный string union. */\nexport const FILE_SIGNATURE_RESULT = {\n\tMATCH: \"match\",\n\tMISMATCH: \"mismatch\",\n\tUNSUPPORTED: \"unsupported\"\n} as const;\n\n/** Только dispatch поддержанных проверок; это не предметный allowlist caller. */\nexport const FILE_SIGNATURE_EXTENSION = {\n\tPNG: \"png\",\n\tJPG: \"jpg\",\n\tJPEG: \"jpeg\",\n\tBMP: \"bmp\",\n\tPSD: \"psd\",\n\tRTF: \"rtf\",\n\tRAR: \"rar\",\n\tZIP: \"zip\",\n\tSEVEN_ZIP: \"7z\",\n\tPDF: \"pdf\"\n} as const;\n","/** Читаем только переданный view: соседние bytes его backing buffer не участвуют. */\nexport function hasSignatureBytes(bytes: Uint8Array, signature: readonly number[], offset = 0): boolean {\n\tif (offset + signature.length > bytes.length) return false;\n\treturn signature.every((value, index) => bytes[offset + index] === value);\n}\n\n/** Точный оборванный prefix отличаем от неизвестного представления/SFX. */\nexport function isTruncatedSignature(bytes: Uint8Array, signature: readonly number[]): boolean {\n\treturn bytes.length < signature.length && bytes.every((value, index) => value === signature[index]);\n}\n","import { FILE_SIGNATURE_EXTENSION, FILE_SIGNATURE_RESULT } from \"../fileSignatureConstants\";\nimport { type ArchiveFileSignatureExtension, type FileSignatureCheckResult } from \"../fileSignatureTypes\";\n\nimport { hasSignatureBytes, isTruncatedSignature } from \"./hasSignatureBytes\";\n\nconst RAR_FAMILY = [0x52, 0x61, 0x72, 0x21];\nconst RAR_MARKER_SUFFIX = [0x1a, 0x07];\nconst RAR4_VERSION = 0;\nconst RAR5_VERSION = 1;\nconst RAR5_MARKER_END = 0;\nconst ZIP_FAMILY = [0x50, 0x4b];\nconst ZIP_LOCAL_FILE_MARKER = [0x03, 0x04];\nconst ZIP_END_OF_CENTRAL_DIRECTORY_MARKER = [0x05, 0x06];\nconst ZIP_LOCAL_FILE_HEADER_BYTES = 30;\nconst ZIP_END_OF_CENTRAL_DIRECTORY_BYTES = 22;\nconst SEVEN_ZIP_FAMILY = [0x37, 0x7a];\nconst SEVEN_ZIP_SIGNATURE = [0x37, 0x7a, 0xbc, 0xaf, 0x27, 0x1c];\nconst SEVEN_ZIP_VERSION_BYTES = 2;\nconst SEVEN_ZIP_SUPPORTED_MAJOR_VERSION = 0;\nconst SEVEN_ZIP_SIGNATURE_HEADER_BYTES = 32;\n\n/**\n * RARLAB marker распознаёт RAR4/5 без main/encryption header. Не ищем marker\n * внутри SFX: отсутствие начального семейства не доказывает неверный архив.\n */\nfunction checkRarSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (isTruncatedSignature(bytes, RAR_FAMILY)) return FILE_SIGNATURE_RESULT.MISMATCH;\n\tif (!hasSignatureBytes(bytes, RAR_FAMILY)) return FILE_SIGNATURE_RESULT.UNSUPPORTED;\n\tconst versionOffset = RAR_FAMILY.length + RAR_MARKER_SUFFIX.length;\n\tif (bytes.length <= versionOffset || !hasSignatureBytes(bytes, RAR_MARKER_SUFFIX, RAR_FAMILY.length))\n\t\treturn FILE_SIGNATURE_RESULT.MISMATCH;\n\tif (bytes[versionOffset] === RAR4_VERSION) return FILE_SIGNATURE_RESULT.MATCH;\n\tif (bytes[versionOffset] !== RAR5_VERSION) return FILE_SIGNATURE_RESULT.UNSUPPORTED;\n\treturn bytes[versionOffset + 1] === RAR5_MARKER_END ? FILE_SIGNATURE_RESULT.MATCH : FILE_SIGNATURE_RESULT.MISMATCH;\n}\n\n/** PKWARE fixed header не проверяет payload, central directory, CRC или parts. */\nfunction checkZipSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (isTruncatedSignature(bytes, ZIP_FAMILY)) return FILE_SIGNATURE_RESULT.MISMATCH;\n\tif (!hasSignatureBytes(bytes, ZIP_FAMILY)) return FILE_SIGNATURE_RESULT.UNSUPPORTED;\n\tconst recordOffset = ZIP_FAMILY.length;\n\tif (bytes.length <= recordOffset) return FILE_SIGNATURE_RESULT.MISMATCH;\n\tif (bytes[recordOffset] === ZIP_LOCAL_FILE_MARKER[0]) {\n\t\treturn bytes.length >= ZIP_LOCAL_FILE_HEADER_BYTES && hasSignatureBytes(bytes, ZIP_LOCAL_FILE_MARKER, recordOffset)\n\t\t\t? FILE_SIGNATURE_RESULT.MATCH\n\t\t\t: FILE_SIGNATURE_RESULT.MISMATCH;\n\t}\n\tif (bytes[recordOffset] === ZIP_END_OF_CENTRAL_DIRECTORY_MARKER[0]) {\n\t\treturn bytes.length >= ZIP_END_OF_CENTRAL_DIRECTORY_BYTES &&\n\t\t\thasSignatureBytes(bytes, ZIP_END_OF_CENTRAL_DIRECTORY_MARKER, recordOffset)\n\t\t\t? FILE_SIGNATURE_RESULT.MATCH\n\t\t\t: FILE_SIGNATURE_RESULT.MISMATCH;\n\t}\n\t// Split/spanning, SFX и прочие records не подтверждаем как обычный start header.\n\treturn FILE_SIGNATURE_RESULT.UNSUPPORTED;\n}\n\n/** SignatureHeader 7-Zip занимает 32 bytes; NextHeader и CRC здесь не проверяются. */\nfunction checkSevenZipSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (isTruncatedSignature(bytes, SEVEN_ZIP_SIGNATURE)) return FILE_SIGNATURE_RESULT.MISMATCH;\n\tif (!hasSignatureBytes(bytes, SEVEN_ZIP_SIGNATURE)) {\n\t\treturn hasSignatureBytes(bytes, SEVEN_ZIP_FAMILY) ? FILE_SIGNATURE_RESULT.MISMATCH : FILE_SIGNATURE_RESULT.UNSUPPORTED;\n\t}\n\tif (bytes.length < SEVEN_ZIP_SIGNATURE.length + SEVEN_ZIP_VERSION_BYTES) return FILE_SIGNATURE_RESULT.MISMATCH;\n\t// У официального reader major=0; minor не является запретом новой версии.\n\tif (bytes[SEVEN_ZIP_SIGNATURE.length] !== SEVEN_ZIP_SUPPORTED_MAJOR_VERSION) return FILE_SIGNATURE_RESULT.UNSUPPORTED;\n\treturn bytes.length >= SEVEN_ZIP_SIGNATURE_HEADER_BYTES ? FILE_SIGNATURE_RESULT.MATCH : FILE_SIGNATURE_RESULT.MISMATCH;\n}\n\nexport function checkArchiveSignature(extension: ArchiveFileSignatureExtension, bytes: Uint8Array): FileSignatureCheckResult {\n\tif (extension === FILE_SIGNATURE_EXTENSION.RAR) return checkRarSignature(bytes);\n\tif (extension === FILE_SIGNATURE_EXTENSION.ZIP) return checkZipSignature(bytes);\n\treturn checkSevenZipSignature(bytes);\n}\n","import { FILE_SIGNATURE_RESULT } from \"../fileSignatureConstants\";\nimport { type FileSignatureCheckResult } from \"../fileSignatureTypes\";\n\nimport { hasSignatureBytes, isTruncatedSignature } from \"./hasSignatureBytes\";\n\nconst PDF_FAMILY = [0x25, 0x50, 0x44, 0x46];\nconst PDF_SCAN_LIMIT = 1024;\n// Позиции относятся к локальному %PDF-x.y header, а не ко всему документу.\nconst PDF_HEADER_BYTES = 8;\nconst PDF_FAMILY_SEPARATOR_OFFSET = 4;\nconst PDF_FAMILY_SEPARATOR = 0x2d;\nconst PDF_MAJOR_VERSION_OFFSET = 5;\nconst PDF_VERSION_SEPARATOR_OFFSET = 6;\nconst PDF_VERSION_SEPARATOR = 0x2e;\nconst PDF_MINOR_VERSION_OFFSET = 7;\nconst PDF_VERSION_DIGIT_FIRST = 0x30;\nconst PDF_VERSION_DIGIT_LAST = 0x39;\nconst PDF_VERSION_1_MAJOR = 0x31;\nconst PDF_VERSION_1_MINOR_LAST = 0x37;\nconst PDF_VERSION_2_MAJOR = 0x32;\nconst PDF_VERSION_2_MINOR = 0x30;\n\n/**\n * Adobe документирует header с ненулевым offset. Проверяем только первые 1024\n * bytes без копии/полного scan; альтернативный PS header и неизвестные версии\n * не объявляем mismatch. Версия в header не доказывает структуру документа.\n */\nexport function checkPdfSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (isTruncatedSignature(bytes, PDF_FAMILY)) return FILE_SIGNATURE_RESULT.MISMATCH;\n\tconst limit = Math.min(bytes.length, PDF_SCAN_LIMIT);\n\tlet malformedHeader = false;\n\tlet unknownRepresentation = false;\n\n\tfor (let offset = 0; offset + PDF_FAMILY.length <= limit; offset += 1) {\n\t\tif (!hasSignatureBytes(bytes, PDF_FAMILY, offset)) continue;\n\t\tif (offset + PDF_HEADER_BYTES > limit) {\n\t\t\t// EOF доказывает усечение; граница scan не является концом файла.\n\t\t\tif (offset + PDF_HEADER_BYTES > bytes.length) malformedHeader = true;\n\t\t\telse unknownRepresentation = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst major = bytes[offset + PDF_MAJOR_VERSION_OFFSET];\n\t\tconst minor = bytes[offset + PDF_MINOR_VERSION_OFFSET];\n\t\tif (\n\t\t\tbytes[offset + PDF_FAMILY_SEPARATOR_OFFSET] !== PDF_FAMILY_SEPARATOR ||\n\t\t\tbytes[offset + PDF_VERSION_SEPARATOR_OFFSET] !== PDF_VERSION_SEPARATOR ||\n\t\t\tmajor < PDF_VERSION_DIGIT_FIRST ||\n\t\t\tmajor > PDF_VERSION_DIGIT_LAST ||\n\t\t\tminor < PDF_VERSION_DIGIT_FIRST ||\n\t\t\tminor > PDF_VERSION_DIGIT_LAST\n\t\t) {\n\t\t\tmalformedHeader = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\t(major === PDF_VERSION_1_MAJOR && minor <= PDF_VERSION_1_MINOR_LAST) ||\n\t\t\t(major === PDF_VERSION_2_MAJOR && minor === PDF_VERSION_2_MINOR)\n\t\t)\n\t\t\treturn FILE_SIGNATURE_RESULT.MATCH;\n\t\tunknownRepresentation = true;\n\t}\n\n\treturn unknownRepresentation\n\t\t? FILE_SIGNATURE_RESULT.UNSUPPORTED\n\t\t: malformedHeader\n\t\t\t? FILE_SIGNATURE_RESULT.MISMATCH\n\t\t\t: FILE_SIGNATURE_RESULT.UNSUPPORTED;\n}\n","import { FILE_SIGNATURE_EXTENSION, FILE_SIGNATURE_RESULT } from \"./fileSignatureConstants\";\nimport { type FileSignatureCheckOptions, type FileSignatureCheckResult } from \"./fileSignatureTypes\";\nimport { checkArchiveSignature } from \"./signature/checkArchiveSignature\";\nimport { checkPdfSignature } from \"./signature/checkPdfSignature\";\nimport { hasSignatureBytes, isTruncatedSignature } from \"./signature/hasSignatureBytes\";\n\nconst PNG_SIGNATURE = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];\nconst JPEG_MARKER_PREFIX = 0xff;\nconst JPEG_START_OF_IMAGE_MARKER = 0xd8;\n// Ограничение работы checker, а не максимальная длина fill bytes формата JPEG.\nconst JPEG_MARKER_SCAN_BYTES = 32;\nconst BITMAP_SIGNATURE = [0x42, 0x4d];\nconst BITMAP_FILE_HEADER_BYTES = 14;\nconst BITMAP_RESERVED_OFFSET = 6;\nconst BITMAP_RESERVED_BYTES = [0, 0, 0, 0];\nconst PSD_SIGNATURE = [0x38, 0x42, 0x50, 0x53];\nconst PSD_SUPPORTED_VERSION = [0, 1];\nconst PSD_RESERVED_BYTES = [0, 0, 0, 0, 0, 0];\nconst RTF_FAMILY = [0x7b, 0x5c, 0x72, 0x74, 0x66];\nconst RTF_SIGNATURE = [0x7b, 0x5c, 0x72, 0x74, 0x66, 0x31];\n// Цифра или буква продолжает control word вместо завершения версии rtf1.\nconst RTF_CONTROL_WORD_RANGES = {\n\tdigit: [0x30, 0x39],\n\tuppercase: [0x41, 0x5a],\n\tlowercase: [0x61, 0x7a]\n} as const;\n\nfunction checkJpegSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (bytes[0] !== JPEG_MARKER_PREFIX) return FILE_SIGNATURE_RESULT.MISMATCH;\n\tlet offset = 1;\n\t// T.81 допускает FF fill перед marker. Длинный prefix не превращаем в scan файла.\n\twhile (offset < Math.min(bytes.length, JPEG_MARKER_SCAN_BYTES) && bytes[offset] === JPEG_MARKER_PREFIX) offset += 1;\n\tif (offset === JPEG_MARKER_SCAN_BYTES && bytes.length > offset) return FILE_SIGNATURE_RESULT.UNSUPPORTED;\n\treturn bytes[offset] === JPEG_START_OF_IMAGE_MARKER ? FILE_SIGNATURE_RESULT.MATCH : FILE_SIGNATURE_RESULT.MISMATCH;\n}\n\nfunction checkBitmapSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (isTruncatedSignature(bytes, BITMAP_SIGNATURE)) return FILE_SIGNATURE_RESULT.MISMATCH;\n\t// OS/2/DIB и неизвестные альтернативы не запрещаем по Windows BM header.\n\tif (!hasSignatureBytes(bytes, BITMAP_SIGNATURE)) return FILE_SIGNATURE_RESULT.UNSUPPORTED;\n\tif (bytes.length < BITMAP_FILE_HEADER_BYTES) return FILE_SIGNATURE_RESULT.MISMATCH;\n\treturn hasSignatureBytes(bytes, BITMAP_RESERVED_BYTES, BITMAP_RESERVED_OFFSET)\n\t\t? FILE_SIGNATURE_RESULT.MATCH\n\t\t: FILE_SIGNATURE_RESULT.MISMATCH;\n}\n\nfunction checkPhotoshopSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (!hasSignatureBytes(bytes, PSD_SIGNATURE)) return FILE_SIGNATURE_RESULT.MISMATCH;\n\tconst reservedOffset = PSD_SIGNATURE.length + PSD_SUPPORTED_VERSION.length;\n\tif (bytes.length < reservedOffset) return FILE_SIGNATURE_RESULT.MISMATCH;\n\t// PSB=2 и неизвестные версии имеют общее семейство, но не подтверждают PSD=1.\n\tif (!hasSignatureBytes(bytes, PSD_SUPPORTED_VERSION, PSD_SIGNATURE.length)) return FILE_SIGNATURE_RESULT.UNSUPPORTED;\n\treturn hasSignatureBytes(bytes, PSD_RESERVED_BYTES, reservedOffset) ? FILE_SIGNATURE_RESULT.MATCH : FILE_SIGNATURE_RESULT.MISMATCH;\n}\n\nfunction checkRtfSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (isTruncatedSignature(bytes, RTF_SIGNATURE)) return FILE_SIGNATURE_RESULT.MISMATCH;\n\tif (!hasSignatureBytes(bytes, RTF_FAMILY)) return FILE_SIGNATURE_RESULT.UNSUPPORTED;\n\tif (!hasSignatureBytes(bytes, RTF_SIGNATURE) || bytes.length <= RTF_SIGNATURE.length) return FILE_SIGNATURE_RESULT.MISMATCH;\n\tconst delimiter = bytes[RTF_SIGNATURE.length];\n\t// Полный control word не совпадает с \\rtf10 или \\rtf1abc.\n\treturn (delimiter >= RTF_CONTROL_WORD_RANGES.digit[0] && delimiter <= RTF_CONTROL_WORD_RANGES.digit[1]) ||\n\t\t(delimiter >= RTF_CONTROL_WORD_RANGES.uppercase[0] && delimiter <= RTF_CONTROL_WORD_RANGES.uppercase[1]) ||\n\t\t(delimiter >= RTF_CONTROL_WORD_RANGES.lowercase[0] && delimiter <= RTF_CONTROL_WORD_RANGES.lowercase[1])\n\t\t? FILE_SIGNATURE_RESULT.MISMATCH\n\t\t: FILE_SIGNATURE_RESULT.MATCH;\n}\n\n/**\n * Частичная pure-проверка fixed headers: нет FileReader, Node API, декодирования,\n * распаковки или чтения всего файла. Любой match относится только к header.\n * Общий ZIP/OLE marker не подтверждает Office/ODF/XFL; allowlist принадлежит caller.\n */\nexport function checkFileSignature({ extension, bytes }: FileSignatureCheckOptions): FileSignatureCheckResult {\n\tconst normalizedExtension = extension.trim().toLowerCase();\n\tswitch (normalizedExtension) {\n\t\tcase FILE_SIGNATURE_EXTENSION.PNG:\n\t\t\treturn hasSignatureBytes(bytes, PNG_SIGNATURE) ? FILE_SIGNATURE_RESULT.MATCH : FILE_SIGNATURE_RESULT.MISMATCH;\n\t\tcase FILE_SIGNATURE_EXTENSION.JPG:\n\t\tcase FILE_SIGNATURE_EXTENSION.JPEG:\n\t\t\treturn checkJpegSignature(bytes);\n\t\tcase FILE_SIGNATURE_EXTENSION.BMP:\n\t\t\treturn checkBitmapSignature(bytes);\n\t\tcase FILE_SIGNATURE_EXTENSION.PSD:\n\t\t\treturn checkPhotoshopSignature(bytes);\n\t\tcase FILE_SIGNATURE_EXTENSION.RTF:\n\t\t\treturn checkRtfSignature(bytes);\n\t\tcase FILE_SIGNATURE_EXTENSION.RAR:\n\t\tcase FILE_SIGNATURE_EXTENSION.ZIP:\n\t\tcase FILE_SIGNATURE_EXTENSION.SEVEN_ZIP:\n\t\t\treturn checkArchiveSignature(normalizedExtension, bytes);\n\t\tcase FILE_SIGNATURE_EXTENSION.PDF:\n\t\t\treturn checkPdfSignature(bytes);\n\t\tdefault:\n\t\t\treturn FILE_SIGNATURE_RESULT.UNSUPPORTED;\n\t}\n}\n","export type ContentDispositionKind = \"inline\" | \"attachment\";\n\nexport type ContentDispositionOptions = {\n\treadonly disposition: ContentDispositionKind;\n\treadonly filename: string;\n\treadonly asciiFallback?: string;\n};\n\nexport function sanitizeFileName(value: string, fallback = \"file\"): string {\n\tconst normalized = value\n\t\t.replace(/[\\r\\n]/g, \" \")\n\t\t.replace(/\"/g, \"'\")\n\t\t.trim();\n\n\treturn normalized.length > 0 ? normalized : fallback;\n}\n\nexport function encodeFilenameRFC5987(value: string): string {\n\treturn encodeURIComponent(value)\n\t\t.replace(/['()]/g, (char) => `%${char.charCodeAt(0).toString(16).toUpperCase()}`)\n\t\t.replace(/\\*/g, \"%2A\");\n}\n\nexport function createAsciiFilenameFallback(value: string, fallback = \"file.bin\"): string {\n\tconst asciiValue = value\n\t\t.replace(/[\\r\\n]/g, \" \")\n\t\t.replace(/[\"\\\\]/g, \"_\")\n\t\t.replace(/[^\\x20-\\x7E]/g, \"_\")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\n\treturn asciiValue.length > 0 ? asciiValue : fallback;\n}\n\nexport function createContentDispositionHeader({ disposition, filename, asciiFallback = \"file.bin\" }: ContentDispositionOptions): string {\n\tconst sanitizedFilename = sanitizeFileName(filename, asciiFallback);\n\tconst asciiFilename = createAsciiFilenameFallback(sanitizedFilename, asciiFallback);\n\tconst encodedFilename = encodeFilenameRFC5987(sanitizedFilename);\n\n\treturn `${disposition}; filename=\"${asciiFilename}\"; filename*=UTF-8''${encodedFilename}`;\n}\n","export type ReadMode = \"data-url\" | \"array-buffer\";\n\nexport type ReadFileErrorCode = \"NO_FILE\" | \"MIME_NOT_ALLOWED\" | \"FILE_TOO_LARGE\" | \"READ_ABORTED\" | \"READ_FAILED\";\n\nexport class ReadFileError extends Error {\n\tpublic readonly code: ReadFileErrorCode;\n\tpublic readonly cause?: unknown;\n\n\tconstructor(code: ReadFileErrorCode, message?: string, cause?: unknown) {\n\t\tsuper(message ?? code);\n\t\tthis.name = \"ReadFileError\";\n\t\tthis.code = code;\n\t\tthis.cause = cause;\n\t}\n}\n\nexport type FileMeta = {\n\tmime: string;\n\tsize: number;\n\tname: string;\n\tlastModified: number;\n};\n\nexport type ReadFileOptionsBase = {\n\taccept?: readonly string[];\n\t/** Ограничение по MIME (если не указано — любые файлы) */\n\tallowedMime?: readonly string[];\n\t/** Ограничение по размеру файла (байты) */\n\tmaxBytes?: number;\n\t/** AbortController для отмены */\n\tsignal?: AbortSignal;\n};\n\nexport type ReadFileAsDataUrlOptions = ReadFileOptionsBase & {\n\tmode?: \"data-url\";\n};\n\nexport type ReadFileAsArrayBufferOptions = ReadFileOptionsBase & {\n\tmode: \"array-buffer\";\n};\n\nexport type ReadFileOptions = ReadFileAsDataUrlOptions | ReadFileAsArrayBufferOptions;\n\nexport type ReadFileAsDataUrlResult = {\n\tmode: \"data-url\";\n\tmeta: FileMeta;\n\tdataUrl: string;\n\tfile: File;\n};\n\nexport type ReadFileAsArrayBufferResult = {\n\tmode: \"array-buffer\";\n\tmeta: FileMeta;\n\tbuffer: ArrayBuffer;\n\tfile: File;\n};\n\nexport type ReadFileResult = ReadFileAsDataUrlResult | ReadFileAsArrayBufferResult;\n","import { ReadFileError } from \"./types\";\n\nconst MIME_PART_PATTERN = \"[a-z0-9!#$&^_.+-]+\";\nconst STRICT_MIME_PATTERN = new RegExp(`^${MIME_PART_PATTERN}\\\\/${MIME_PART_PATTERN}$`, \"i\");\nconst ACCEPT_MIME_PATTERN = new RegExp(`^${MIME_PART_PATTERN}\\\\/(?:${MIME_PART_PATTERN}|\\\\*)$`, \"i\");\nconst ACCEPT_EXTENSION_PATTERN = /^\\.[^\\s,]+$/;\n\nexport function assertValidAllowedMime(allowedMime?: readonly string[]): void {\n\tif (!allowedMime) return;\n\n\tfor (const [index, mime] of allowedMime.entries()) {\n\t\tif (!STRICT_MIME_PATTERN.test(mime)) {\n\t\t\tthrow new Error(\n\t\t\t\t`DropZone: некорректный allowedMime[${index}]=\"${mime}\". Ожидается полный MIME-тип вида \"application/pdf\" без wildcard и параметров.`\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport function assertValidAccept(accept?: readonly string[]): void {\n\tif (!accept) return;\n\n\tfor (const [index, specifier] of accept.entries()) {\n\t\tconst isValidSpecifier = ACCEPT_EXTENSION_PATTERN.test(specifier) || ACCEPT_MIME_PATTERN.test(specifier);\n\n\t\tif (!isValidSpecifier) {\n\t\t\tthrow new Error(\n\t\t\t\t`DropZone: некорректный accept[${index}]=\"${specifier}\". Ожидается расширение вида \".pdf\" или MIME-тип вида \"application/pdf\" / \"image/*\".`\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport function assertNotAborted(signal?: AbortSignal): void {\n\tif (signal?.aborted) {\n\t\tthrow new ReadFileError(\"READ_ABORTED\", \"Прервано по сигналу\");\n\t}\n}\n","import { assertNotAborted } from \"./assert\";\nimport { FileMeta, ReadFileError, ReadFileOptions, ReadFileResult, ReadMode } from \"./types\";\n\nfunction normalizeMime(mime?: string): string {\n\treturn mime?.trim().toLowerCase() ?? \"\";\n}\n\nfunction getFileExtension(fileName: string): string {\n\tconst extension = fileName.split(\".\").pop();\n\treturn normalizeMime(extension);\n}\n\nexport function buildMeta(file: File): FileMeta {\n\treturn {\n\t\tmime: file.type,\n\t\tsize: file.size,\n\t\tname: file.name,\n\t\tlastModified: file.lastModified\n\t};\n}\n\nexport function attachAbort(signal: AbortSignal | undefined, reader: FileReader): (() => void) | undefined {\n\tif (!signal) return undefined;\n\n\tconst onAbort = () => {\n\t\ttry {\n\t\t\treader.abort();\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\t};\n\n\tsignal.addEventListener(\"abort\", onAbort, { once: true });\n\treturn () => signal.removeEventListener(\"abort\", onAbort);\n}\n\nfunction validateFile(file: File, opts: ReadFileOptions): void {\n\tif (opts.allowedMime && opts.allowedMime.length > 0) {\n\t\tconst allowed = new Set(opts.allowedMime.map((mime) => normalizeMime(mime)));\n\t\tconst fileMime = normalizeMime(file.type);\n\t\tif (!allowed.has(fileMime)) {\n\t\t\tthrow new ReadFileError(\"MIME_NOT_ALLOWED\", `Неподдерживаемый MIME тип: ${file.type}`);\n\t\t}\n\t} else if (opts.accept && opts.accept.length > 0) {\n\t\t// Берём расширение файла, если его нет, пытаемся вытащить из MIME\n\t\tconst fileMime = getFileExtension(file.name) || file.type.split(\"/\").pop();\n\t\tif (!fileMime) {\n\t\t\t// NOTE: Если неизвестный mime и нет расширения? Пока запретить такой сценарий\n\t\t\tthrow new ReadFileError(\"MIME_NOT_ALLOWED\", `Неопределенный MIME тип`);\n\t\t}\n\n\t\tconst allowed = opts.accept.map((mime) => normalizeMime(mime));\n\t\tconst isAllowed = allowed.some((mime) => mime.includes(fileMime));\n\n\t\tif (!isAllowed) {\n\t\t\tthrow new ReadFileError(\"MIME_NOT_ALLOWED\", `Неподдерживаемый MIME тип: ${fileMime}`);\n\t\t}\n\t}\n\n\tif (typeof opts.maxBytes === \"number\" && file.size > opts.maxBytes) {\n\t\tthrow new ReadFileError(\"FILE_TOO_LARGE\", `Файл слишком большой: ${file.size} > ${opts.maxBytes}`);\n\t}\n}\n\nfunction readAsDataUrl(file: File, opts: ReadFileOptions): Promise<string> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst reader = new FileReader();\n\n\t\tconst detachAbort = attachAbort(opts.signal, reader);\n\n\t\treader.onerror = () => {\n\t\t\tdetachAbort?.();\n\t\t\treject(new ReadFileError(\"READ_FAILED\", \"Не удалось прочитать файл как DataURL\", reader.error));\n\t\t};\n\n\t\treader.onabort = () => {\n\t\t\tdetachAbort?.();\n\t\t\treject(new ReadFileError(\"READ_ABORTED\", \"Чтение файла прервано\"));\n\t\t};\n\n\t\treader.onload = () => {\n\t\t\tdetachAbort?.();\n\t\t\tconst result = reader.result;\n\t\t\tif (typeof result !== \"string\") {\n\t\t\t\treject(new ReadFileError(\"READ_FAILED\", \"Неожиданный тип результата FileReader\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve(result);\n\t\t};\n\n\t\ttry {\n\t\t\treader.readAsDataURL(file);\n\t\t} catch (cause) {\n\t\t\tdetachAbort?.();\n\t\t\treject(new ReadFileError(\"READ_FAILED\", \"При чтении DataURL функция FileReader выдала ошибку\", cause));\n\t\t}\n\t});\n}\n\nfunction readAsArrayBuffer(file: File, opts: ReadFileOptions): Promise<ArrayBuffer> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst reader = new FileReader();\n\n\t\tconst detachAbort = attachAbort(opts.signal, reader);\n\n\t\treader.onerror = () => {\n\t\t\tdetachAbort?.();\n\t\t\treject(new ReadFileError(\"READ_FAILED\", \"Не удалось прочитать файл как ArrayBuffer.\", reader.error));\n\t\t};\n\n\t\treader.onabort = () => {\n\t\t\tdetachAbort?.();\n\t\t\treject(new ReadFileError(\"READ_ABORTED\", \"Чтение файла прервано\"));\n\t\t};\n\n\t\treader.onload = () => {\n\t\t\tdetachAbort?.();\n\t\t\tconst result = reader.result;\n\t\t\tif (!(result instanceof ArrayBuffer)) {\n\t\t\t\treject(new ReadFileError(\"READ_FAILED\", \"Неожиданный тип результата FileReader\"));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve(result);\n\t\t};\n\n\t\ttry {\n\t\t\treader.readAsArrayBuffer(file);\n\t\t} catch (cause) {\n\t\t\tdetachAbort?.();\n\t\t\treject(new ReadFileError(\"READ_FAILED\", \"При чтении ArrayBuffer возникла ошибка FileReader\", cause));\n\t\t}\n\t});\n}\n\n// Перегрузки для строгой типизации результата\n\nexport async function readFile(\n\tfile: File,\n\topts?: Omit<ReadFileOptions, \"mode\"> & { mode?: \"data-url\" }\n): Promise<Extract<ReadFileResult, { mode: \"data-url\" }>>;\nexport async function readFile(\n\tfile: File,\n\topts: Omit<ReadFileOptions, \"mode\"> & { mode: \"array-buffer\" }\n): Promise<Extract<ReadFileResult, { mode: \"array-buffer\" }>>;\n\nexport async function readFile(file: File, opts: ReadFileOptions = {}): Promise<ReadFileResult> {\n\tassertNotAborted(opts.signal);\n\tvalidateFile(file, opts);\n\n\tconst mode: ReadMode = opts.mode ?? \"data-url\";\n\tconst meta = buildMeta(file);\n\n\tif (mode === \"array-buffer\") {\n\t\tconst buffer = await readAsArrayBuffer(file, opts);\n\t\treturn { mode: \"array-buffer\", meta, buffer, file };\n\t}\n\n\tconst dataUrl = await readAsDataUrl(file, opts);\n\treturn { mode: \"data-url\", meta, dataUrl, file };\n}\n","import type { ReadFileAsArrayBufferResult, ReadFileAsDataUrlResult, ReadFileErrorCode, ReadFileOptionsBase } from \"../read-file\";\n\nexport type ImageMime = \"image/png\" | \"image/jpeg\" | \"image/webp\" | \"image/gif\" | \"image/svg+xml\" | \"image/avif\";\n\nexport type ReadImageErrorCode = ReadFileErrorCode | \"NOT_AN_IMAGE\" | \"IMAGE_DECODE_FAILED\";\n\nexport class ReadImageError extends Error {\n\tpublic readonly code: ReadImageErrorCode;\n\tpublic readonly cause?: unknown;\n\n\tconstructor(code: ReadImageErrorCode, message?: string, cause?: unknown) {\n\t\tsuper(message ?? code);\n\t\tthis.name = \"ReadImageError\";\n\t\tthis.code = code;\n\t\tthis.cause = cause;\n\t}\n}\n\nexport type ReadImageOptionsBase = Omit<ReadFileOptionsBase, \"allowedMime\"> & {\n\t/** Ограничение по MIME (если не указано — любые image/*) */\n\tallowedMime?: readonly ImageMime[];\n};\n\nexport type ReadImageAsDataUrlOptions = ReadImageOptionsBase & {\n\tmode?: \"data-url\";\n};\n\nexport type ReadImageAsArrayBufferOptions = ReadImageOptionsBase & {\n\tmode: \"array-buffer\";\n};\n\nexport type ReadImageOptions = ReadImageAsDataUrlOptions | ReadImageAsArrayBufferOptions;\n\nexport type ImageDimensions = {\n\twidth: number;\n\theight: number;\n};\n\nexport type ReadImageAsDataUrlResult = ReadFileAsDataUrlResult & {\n\t/** безопасно вытащенные размеры (через decode) */\n\tdimensions?: ImageDimensions;\n};\n\nexport type ReadImageAsArrayBufferResult = ReadFileAsArrayBufferResult;\n\nexport type ReadImageResult = ReadImageAsDataUrlResult | ReadImageAsArrayBufferResult;\n","import { assertNotAborted, readFile } from \"../read-file\";\n\nimport { ReadImageError } from \"./types\";\n\nimport type { ImageDimensions, ReadImageAsArrayBufferResult, ReadImageAsDataUrlResult, ReadImageOptions } from \"./types\";\n\nfunction isImageMime(mime: string): boolean {\n\treturn mime.startsWith(\"image/\");\n}\n\nasync function decodeImageDimensions(dataUrl: string, signal?: AbortSignal): Promise<ImageDimensions> {\n\tassertNotAborted(signal);\n\n\tconst img = new Image();\n\timg.decoding = \"async\";\n\timg.src = dataUrl;\n\n\t// decode() поддерживается в современных браузерах; fallback на onload\n\t// NOTE: большого размера png падают...\n\t// if (typeof img.decode === \"function\") {\n\t// \ttry {\n\t// \t\tawait img.decode();\n\t// \t\tassertNotAborted(signal);\n\t// \t\treturn { width: img.naturalWidth, height: img.naturalHeight };\n\t// \t} catch (cause) {\n\t// \t\tthrow new ReadImageError(\"IMAGE_DECODE_FAILED\", \"Не удалось декодировать изображение\", cause);\n\t// \t}\n\t// }\n\n\tawait new Promise<void>((resolve, reject) => {\n\t\tconst cleanup = () => {\n\t\t\timg.onload = null;\n\t\t\timg.onerror = null;\n\t\t};\n\n\t\timg.onload = () => {\n\t\t\tcleanup();\n\t\t\tresolve();\n\t\t};\n\t\timg.onerror = (ev) => {\n\t\t\tcleanup();\n\t\t\treject(ev);\n\t\t};\n\t});\n\n\tassertNotAborted(signal);\n\treturn { width: img.naturalWidth, height: img.naturalHeight };\n}\n\n// Перегрузки для строгой типизации результата\n\nexport async function readImageFile(\n\tfile: File,\n\topts?: Omit<ReadImageOptions, \"mode\"> & { mode?: \"data-url\" }\n): Promise<ReadImageAsDataUrlResult>;\nexport async function readImageFile(\n\tfile: File,\n\topts: Omit<ReadImageOptions, \"mode\"> & { mode: \"array-buffer\" }\n): Promise<ReadImageAsArrayBufferResult>;\n\nexport async function readImageFile(\n\tfile: File,\n\topts: ReadImageOptions = {}\n): Promise<ReadImageAsDataUrlResult | ReadImageAsArrayBufferResult> {\n\tif (!isImageMime(file.type)) {\n\t\tthrow new ReadImageError(\"NOT_AN_IMAGE\", `Файл не является изображением. mime=${file.type || \"unknown\"}`);\n\t}\n\n\tconst baseOpts = { allowedMime: opts.allowedMime, maxBytes: opts.maxBytes, signal: opts.signal };\n\n\tif (opts.mode === \"array-buffer\") {\n\t\treturn readFile(file, { ...baseOpts, mode: \"array-buffer\" });\n\t}\n\n\tconst result = await readFile(file, baseOpts);\n\tconst dimensions = await decodeImageDimensions(result.dataUrl, opts.signal);\n\n\treturn { ...result, dimensions };\n}\n","const EXTENSION_CONTENT_TYPE: Readonly<Record<string, string>> = {\n\tpdf: \"application/pdf\",\n\tdoc: \"application/msword\",\n\tdocx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\",\n\txls: \"application/vnd.ms-excel\",\n\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n\tppt: \"application/vnd.ms-powerpoint\",\n\tpptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\",\n\ttxt: \"text/plain; charset=UTF-8\",\n\trtf: \"application/rtf\",\n\todt: \"application/vnd.oasis.opendocument.text\",\n\tzip: \"application/zip\",\n\trar: \"application/vnd.rar\",\n\tjpg: \"image/jpeg\",\n\tjpeg: \"image/jpeg\",\n\tpng: \"image/png\",\n\tgif: \"image/gif\",\n\twebp: \"image/webp\"\n};\n\nexport function resolveMimeTypeByExtension(extension: string): string {\n\tconst normalizedExtension = extension.trim().toLowerCase();\n\n\treturn EXTENSION_CONTENT_TYPE[normalizedExtension] ?? \"application/octet-stream\";\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/file/fileSignatureConstants.ts","../../src/file/signature/checkArchiveSignature.ts","../../src/file/signature/checkPdfSignature.ts","../../src/file/checkFileSignature.ts","../../src/file/contentDisposition.ts","../../src/file/read-file/readFileConstants.ts","../../src/file/read-file/types.ts","../../src/file/read-file/assert.ts","../../src/file/read-file/readFile.ts","../../src/file/image/imageReadConstants.ts","../../src/file/image/types.ts","../../src/file/image/readImageFile.ts","../../src/file/mimeType.ts"],"sourcesContent":["/** Приватные результаты проверок сохраняют значения публичного string union. */\nexport const FILE_SIGNATURE_RESULT_MATCH = \"match\";\nexport const FILE_SIGNATURE_RESULT_MISMATCH = \"mismatch\";\nexport const FILE_SIGNATURE_RESULT_UNSUPPORTED = \"unsupported\";\n\n/** Только dispatch поддержанных проверок; это не предметный allowlist caller. */\nexport const FILE_SIGNATURE_EXTENSION_PNG = \"png\";\nexport const FILE_SIGNATURE_EXTENSION_JPG = \"jpg\";\nexport const FILE_SIGNATURE_EXTENSION_JPEG = \"jpeg\";\nexport const FILE_SIGNATURE_EXTENSION_BMP = \"bmp\";\nexport const FILE_SIGNATURE_EXTENSION_PSD = \"psd\";\nexport const FILE_SIGNATURE_EXTENSION_RTF = \"rtf\";\nexport const FILE_SIGNATURE_EXTENSION_RAR = \"rar\";\nexport const FILE_SIGNATURE_EXTENSION_ZIP = \"zip\";\nexport const FILE_SIGNATURE_EXTENSION_SEVEN_ZIP = \"7z\";\nexport const FILE_SIGNATURE_EXTENSION_PDF = \"pdf\";\n","import {\n\tFILE_SIGNATURE_EXTENSION_RAR,\n\tFILE_SIGNATURE_EXTENSION_ZIP,\n\tFILE_SIGNATURE_RESULT_MATCH,\n\tFILE_SIGNATURE_RESULT_MISMATCH,\n\tFILE_SIGNATURE_RESULT_UNSUPPORTED\n} from \"../fileSignatureConstants\";\nimport { type ArchiveFileSignatureExtension, type FileSignatureCheckResult } from \"../fileSignatureTypes\";\n\nimport { hasSignatureBytes, isTruncatedSignature } from \"./hasSignatureBytes\";\n\nconst RAR_FAMILY = [0x52, 0x61, 0x72, 0x21];\nconst RAR_MARKER_SUFFIX = [0x1a, 0x07];\nconst RAR4_VERSION = 0;\nconst RAR5_VERSION = 1;\nconst RAR5_MARKER_END = 0;\nconst ZIP_FAMILY = [0x50, 0x4b];\nconst ZIP_LOCAL_FILE_MARKER = [0x03, 0x04];\nconst ZIP_END_OF_CENTRAL_DIRECTORY_MARKER = [0x05, 0x06];\nconst ZIP_LOCAL_FILE_HEADER_BYTES = 30;\nconst ZIP_END_OF_CENTRAL_DIRECTORY_BYTES = 22;\nconst SEVEN_ZIP_FAMILY = [0x37, 0x7a];\nconst SEVEN_ZIP_SIGNATURE = [0x37, 0x7a, 0xbc, 0xaf, 0x27, 0x1c];\nconst SEVEN_ZIP_VERSION_BYTES = 2;\nconst SEVEN_ZIP_SUPPORTED_MAJOR_VERSION = 0;\nconst SEVEN_ZIP_SIGNATURE_HEADER_BYTES = 32;\n\n/**\n * RARLAB marker распознаёт RAR4/5 без main/encryption header. Не ищем marker\n * внутри SFX: отсутствие начального семейства не доказывает неверный архив.\n */\nfunction checkRarSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (isTruncatedSignature(bytes, RAR_FAMILY)) return FILE_SIGNATURE_RESULT_MISMATCH;\n\tif (!hasSignatureBytes(bytes, RAR_FAMILY)) return FILE_SIGNATURE_RESULT_UNSUPPORTED;\n\tconst versionOffset = RAR_FAMILY.length + RAR_MARKER_SUFFIX.length;\n\tif (bytes.length <= versionOffset || !hasSignatureBytes(bytes, RAR_MARKER_SUFFIX, RAR_FAMILY.length))\n\t\treturn FILE_SIGNATURE_RESULT_MISMATCH;\n\tif (bytes[versionOffset] === RAR4_VERSION) return FILE_SIGNATURE_RESULT_MATCH;\n\tif (bytes[versionOffset] !== RAR5_VERSION) return FILE_SIGNATURE_RESULT_UNSUPPORTED;\n\treturn bytes[versionOffset + 1] === RAR5_MARKER_END ? FILE_SIGNATURE_RESULT_MATCH : FILE_SIGNATURE_RESULT_MISMATCH;\n}\n\n/** PKWARE fixed header не проверяет payload, central directory, CRC или parts. */\nfunction checkZipSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (isTruncatedSignature(bytes, ZIP_FAMILY)) return FILE_SIGNATURE_RESULT_MISMATCH;\n\tif (!hasSignatureBytes(bytes, ZIP_FAMILY)) return FILE_SIGNATURE_RESULT_UNSUPPORTED;\n\tconst recordOffset = ZIP_FAMILY.length;\n\tif (bytes.length <= recordOffset) return FILE_SIGNATURE_RESULT_MISMATCH;\n\tif (bytes[recordOffset] === ZIP_LOCAL_FILE_MARKER[0]) {\n\t\treturn bytes.length >= ZIP_LOCAL_FILE_HEADER_BYTES && hasSignatureBytes(bytes, ZIP_LOCAL_FILE_MARKER, recordOffset)\n\t\t\t? FILE_SIGNATURE_RESULT_MATCH\n\t\t\t: FILE_SIGNATURE_RESULT_MISMATCH;\n\t}\n\tif (bytes[recordOffset] === ZIP_END_OF_CENTRAL_DIRECTORY_MARKER[0]) {\n\t\treturn bytes.length >= ZIP_END_OF_CENTRAL_DIRECTORY_BYTES &&\n\t\t\thasSignatureBytes(bytes, ZIP_END_OF_CENTRAL_DIRECTORY_MARKER, recordOffset)\n\t\t\t? FILE_SIGNATURE_RESULT_MATCH\n\t\t\t: FILE_SIGNATURE_RESULT_MISMATCH;\n\t}\n\t// Split/spanning, SFX и прочие records не подтверждаем как обычный start header.\n\treturn FILE_SIGNATURE_RESULT_UNSUPPORTED;\n}\n\n/** SignatureHeader 7-Zip занимает 32 bytes; NextHeader и CRC здесь не проверяются. */\nfunction checkSevenZipSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (isTruncatedSignature(bytes, SEVEN_ZIP_SIGNATURE)) return FILE_SIGNATURE_RESULT_MISMATCH;\n\tif (!hasSignatureBytes(bytes, SEVEN_ZIP_SIGNATURE)) {\n\t\treturn hasSignatureBytes(bytes, SEVEN_ZIP_FAMILY) ? FILE_SIGNATURE_RESULT_MISMATCH : FILE_SIGNATURE_RESULT_UNSUPPORTED;\n\t}\n\tif (bytes.length < SEVEN_ZIP_SIGNATURE.length + SEVEN_ZIP_VERSION_BYTES) return FILE_SIGNATURE_RESULT_MISMATCH;\n\t// У официального reader major=0; minor не является запретом новой версии.\n\tif (bytes[SEVEN_ZIP_SIGNATURE.length] !== SEVEN_ZIP_SUPPORTED_MAJOR_VERSION) return FILE_SIGNATURE_RESULT_UNSUPPORTED;\n\treturn bytes.length >= SEVEN_ZIP_SIGNATURE_HEADER_BYTES ? FILE_SIGNATURE_RESULT_MATCH : FILE_SIGNATURE_RESULT_MISMATCH;\n}\n\nexport function checkArchiveSignature(extension: ArchiveFileSignatureExtension, bytes: Uint8Array): FileSignatureCheckResult {\n\tif (extension === FILE_SIGNATURE_EXTENSION_RAR) return checkRarSignature(bytes);\n\tif (extension === FILE_SIGNATURE_EXTENSION_ZIP) return checkZipSignature(bytes);\n\treturn checkSevenZipSignature(bytes);\n}\n","import { FILE_SIGNATURE_RESULT_MATCH, FILE_SIGNATURE_RESULT_MISMATCH, FILE_SIGNATURE_RESULT_UNSUPPORTED } from \"../fileSignatureConstants\";\nimport { type FileSignatureCheckResult } from \"../fileSignatureTypes\";\n\nimport { hasSignatureBytes, isTruncatedSignature } from \"./hasSignatureBytes\";\n\nconst PDF_FAMILY = [0x25, 0x50, 0x44, 0x46];\nconst PDF_SCAN_LIMIT = 1024;\n// Позиции относятся к локальному %PDF-x.y header, а не ко всему документу.\nconst PDF_HEADER_BYTES = 8;\nconst PDF_FAMILY_SEPARATOR_OFFSET = 4;\nconst PDF_FAMILY_SEPARATOR = 0x2d;\nconst PDF_MAJOR_VERSION_OFFSET = 5;\nconst PDF_VERSION_SEPARATOR_OFFSET = 6;\nconst PDF_VERSION_SEPARATOR = 0x2e;\nconst PDF_MINOR_VERSION_OFFSET = 7;\nconst PDF_VERSION_DIGIT_FIRST = 0x30;\nconst PDF_VERSION_DIGIT_LAST = 0x39;\nconst PDF_VERSION_1_MAJOR = 0x31;\nconst PDF_VERSION_1_MINOR_LAST = 0x37;\nconst PDF_VERSION_2_MAJOR = 0x32;\nconst PDF_VERSION_2_MINOR = 0x30;\n\n/**\n * Adobe документирует header с ненулевым offset. Проверяем только первые 1024\n * bytes без копии/полного scan; альтернативный PS header и неизвестные версии\n * не объявляем mismatch. Версия в header не доказывает структуру документа.\n */\nexport function checkPdfSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (isTruncatedSignature(bytes, PDF_FAMILY)) return FILE_SIGNATURE_RESULT_MISMATCH;\n\tconst limit = Math.min(bytes.length, PDF_SCAN_LIMIT);\n\tlet malformedHeader = false;\n\tlet unknownRepresentation = false;\n\n\tfor (let offset = 0; offset + PDF_FAMILY.length <= limit; offset += 1) {\n\t\tif (!hasSignatureBytes(bytes, PDF_FAMILY, offset)) continue;\n\t\tif (offset + PDF_HEADER_BYTES > limit) {\n\t\t\t// EOF доказывает усечение; граница scan не является концом файла.\n\t\t\tif (offset + PDF_HEADER_BYTES > bytes.length) malformedHeader = true;\n\t\t\telse unknownRepresentation = true;\n\t\t\tcontinue;\n\t\t}\n\t\tconst major = bytes[offset + PDF_MAJOR_VERSION_OFFSET];\n\t\tconst minor = bytes[offset + PDF_MINOR_VERSION_OFFSET];\n\t\tif (\n\t\t\tbytes[offset + PDF_FAMILY_SEPARATOR_OFFSET] !== PDF_FAMILY_SEPARATOR ||\n\t\t\tbytes[offset + PDF_VERSION_SEPARATOR_OFFSET] !== PDF_VERSION_SEPARATOR ||\n\t\t\tmajor < PDF_VERSION_DIGIT_FIRST ||\n\t\t\tmajor > PDF_VERSION_DIGIT_LAST ||\n\t\t\tminor < PDF_VERSION_DIGIT_FIRST ||\n\t\t\tminor > PDF_VERSION_DIGIT_LAST\n\t\t) {\n\t\t\tmalformedHeader = true;\n\t\t\tcontinue;\n\t\t}\n\t\tif (\n\t\t\t(major === PDF_VERSION_1_MAJOR && minor <= PDF_VERSION_1_MINOR_LAST) ||\n\t\t\t(major === PDF_VERSION_2_MAJOR && minor === PDF_VERSION_2_MINOR)\n\t\t)\n\t\t\treturn FILE_SIGNATURE_RESULT_MATCH;\n\t\tunknownRepresentation = true;\n\t}\n\n\treturn unknownRepresentation\n\t\t? FILE_SIGNATURE_RESULT_UNSUPPORTED\n\t\t: malformedHeader\n\t\t\t? FILE_SIGNATURE_RESULT_MISMATCH\n\t\t\t: FILE_SIGNATURE_RESULT_UNSUPPORTED;\n}\n","import {\n\tFILE_SIGNATURE_EXTENSION_BMP,\n\tFILE_SIGNATURE_EXTENSION_JPEG,\n\tFILE_SIGNATURE_EXTENSION_JPG,\n\tFILE_SIGNATURE_EXTENSION_PDF,\n\tFILE_SIGNATURE_EXTENSION_PNG,\n\tFILE_SIGNATURE_EXTENSION_PSD,\n\tFILE_SIGNATURE_EXTENSION_RAR,\n\tFILE_SIGNATURE_EXTENSION_RTF,\n\tFILE_SIGNATURE_EXTENSION_SEVEN_ZIP,\n\tFILE_SIGNATURE_EXTENSION_ZIP,\n\tFILE_SIGNATURE_RESULT_MATCH,\n\tFILE_SIGNATURE_RESULT_MISMATCH,\n\tFILE_SIGNATURE_RESULT_UNSUPPORTED\n} from \"./fileSignatureConstants\";\nimport { type FileSignatureCheckOptions, type FileSignatureCheckResult } from \"./fileSignatureTypes\";\nimport { checkArchiveSignature } from \"./signature/checkArchiveSignature\";\nimport { checkPdfSignature } from \"./signature/checkPdfSignature\";\nimport { hasSignatureBytes, isTruncatedSignature } from \"./signature/hasSignatureBytes\";\n\nconst PNG_SIGNATURE = [0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a];\nconst JPEG_MARKER_PREFIX = 0xff;\nconst JPEG_START_OF_IMAGE_MARKER = 0xd8;\n// Ограничение работы checker, а не максимальная длина fill bytes формата JPEG.\nconst JPEG_MARKER_SCAN_BYTES = 32;\nconst BITMAP_SIGNATURE = [0x42, 0x4d];\nconst BITMAP_FILE_HEADER_BYTES = 14;\nconst BITMAP_RESERVED_OFFSET = 6;\nconst BITMAP_RESERVED_BYTES = [0, 0, 0, 0];\nconst PSD_SIGNATURE = [0x38, 0x42, 0x50, 0x53];\nconst PSD_SUPPORTED_VERSION = [0, 1];\nconst PSD_RESERVED_BYTES = [0, 0, 0, 0, 0, 0];\nconst RTF_FAMILY = [0x7b, 0x5c, 0x72, 0x74, 0x66];\nconst RTF_SIGNATURE = [0x7b, 0x5c, 0x72, 0x74, 0x66, 0x31];\n// Цифра или буква продолжает control word вместо завершения версии rtf1.\nconst RTF_CONTROL_WORD_DIGIT_FIRST = 0x30;\nconst RTF_CONTROL_WORD_DIGIT_LAST = 0x39;\nconst RTF_CONTROL_WORD_UPPERCASE_FIRST = 0x41;\nconst RTF_CONTROL_WORD_UPPERCASE_LAST = 0x5a;\nconst RTF_CONTROL_WORD_LOWERCASE_FIRST = 0x61;\nconst RTF_CONTROL_WORD_LOWERCASE_LAST = 0x7a;\n\nfunction checkJpegSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (bytes[0] !== JPEG_MARKER_PREFIX) return FILE_SIGNATURE_RESULT_MISMATCH;\n\tlet offset = 1;\n\t// T.81 допускает FF fill перед marker. Длинный prefix не превращаем в scan файла.\n\twhile (offset < Math.min(bytes.length, JPEG_MARKER_SCAN_BYTES) && bytes[offset] === JPEG_MARKER_PREFIX) offset += 1;\n\tif (offset === JPEG_MARKER_SCAN_BYTES && bytes.length > offset) return FILE_SIGNATURE_RESULT_UNSUPPORTED;\n\treturn bytes[offset] === JPEG_START_OF_IMAGE_MARKER ? FILE_SIGNATURE_RESULT_MATCH : FILE_SIGNATURE_RESULT_MISMATCH;\n}\n\nfunction checkBitmapSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (isTruncatedSignature(bytes, BITMAP_SIGNATURE)) return FILE_SIGNATURE_RESULT_MISMATCH;\n\t// OS/2/DIB и неизвестные альтернативы не запрещаем по Windows BM header.\n\tif (!hasSignatureBytes(bytes, BITMAP_SIGNATURE)) return FILE_SIGNATURE_RESULT_UNSUPPORTED;\n\tif (bytes.length < BITMAP_FILE_HEADER_BYTES) return FILE_SIGNATURE_RESULT_MISMATCH;\n\treturn hasSignatureBytes(bytes, BITMAP_RESERVED_BYTES, BITMAP_RESERVED_OFFSET)\n\t\t? FILE_SIGNATURE_RESULT_MATCH\n\t\t: FILE_SIGNATURE_RESULT_MISMATCH;\n}\n\nfunction checkPhotoshopSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (!hasSignatureBytes(bytes, PSD_SIGNATURE)) return FILE_SIGNATURE_RESULT_MISMATCH;\n\tconst reservedOffset = PSD_SIGNATURE.length + PSD_SUPPORTED_VERSION.length;\n\tif (bytes.length < reservedOffset) return FILE_SIGNATURE_RESULT_MISMATCH;\n\t// PSB=2 и неизвестные версии имеют общее семейство, но не подтверждают PSD=1.\n\tif (!hasSignatureBytes(bytes, PSD_SUPPORTED_VERSION, PSD_SIGNATURE.length)) return FILE_SIGNATURE_RESULT_UNSUPPORTED;\n\treturn hasSignatureBytes(bytes, PSD_RESERVED_BYTES, reservedOffset) ? FILE_SIGNATURE_RESULT_MATCH : FILE_SIGNATURE_RESULT_MISMATCH;\n}\n\nfunction checkRtfSignature(bytes: Uint8Array): FileSignatureCheckResult {\n\tif (isTruncatedSignature(bytes, RTF_SIGNATURE)) return FILE_SIGNATURE_RESULT_MISMATCH;\n\tif (!hasSignatureBytes(bytes, RTF_FAMILY)) return FILE_SIGNATURE_RESULT_UNSUPPORTED;\n\tif (!hasSignatureBytes(bytes, RTF_SIGNATURE) || bytes.length <= RTF_SIGNATURE.length) return FILE_SIGNATURE_RESULT_MISMATCH;\n\tconst delimiter = bytes[RTF_SIGNATURE.length];\n\t// Полный control word не совпадает с \\rtf10 или \\rtf1abc.\n\treturn (delimiter >= RTF_CONTROL_WORD_DIGIT_FIRST && delimiter <= RTF_CONTROL_WORD_DIGIT_LAST) ||\n\t\t(delimiter >= RTF_CONTROL_WORD_UPPERCASE_FIRST && delimiter <= RTF_CONTROL_WORD_UPPERCASE_LAST) ||\n\t\t(delimiter >= RTF_CONTROL_WORD_LOWERCASE_FIRST && delimiter <= RTF_CONTROL_WORD_LOWERCASE_LAST)\n\t\t? FILE_SIGNATURE_RESULT_MISMATCH\n\t\t: FILE_SIGNATURE_RESULT_MATCH;\n}\n\n/**\n * Частичная pure-проверка fixed headers: нет FileReader, Node API, декодирования,\n * распаковки или чтения всего файла. Любой match относится только к header.\n * Общий ZIP/OLE marker не подтверждает Office/ODF/XFL; allowlist принадлежит caller.\n */\nexport function checkFileSignature({ extension, bytes }: FileSignatureCheckOptions): FileSignatureCheckResult {\n\tconst normalizedExtension = extension.trim().toLowerCase();\n\tswitch (normalizedExtension) {\n\t\tcase FILE_SIGNATURE_EXTENSION_PNG:\n\t\t\treturn hasSignatureBytes(bytes, PNG_SIGNATURE) ? FILE_SIGNATURE_RESULT_MATCH : FILE_SIGNATURE_RESULT_MISMATCH;\n\t\tcase FILE_SIGNATURE_EXTENSION_JPG:\n\t\tcase FILE_SIGNATURE_EXTENSION_JPEG:\n\t\t\treturn checkJpegSignature(bytes);\n\t\tcase FILE_SIGNATURE_EXTENSION_BMP:\n\t\t\treturn checkBitmapSignature(bytes);\n\t\tcase FILE_SIGNATURE_EXTENSION_PSD:\n\t\t\treturn checkPhotoshopSignature(bytes);\n\t\tcase FILE_SIGNATURE_EXTENSION_RTF:\n\t\t\treturn checkRtfSignature(bytes);\n\t\tcase FILE_SIGNATURE_EXTENSION_RAR:\n\t\tcase FILE_SIGNATURE_EXTENSION_ZIP:\n\t\tcase FILE_SIGNATURE_EXTENSION_SEVEN_ZIP:\n\t\t\treturn checkArchiveSignature(normalizedExtension, bytes);\n\t\tcase FILE_SIGNATURE_EXTENSION_PDF:\n\t\t\treturn checkPdfSignature(bytes);\n\t\tdefault:\n\t\t\treturn FILE_SIGNATURE_RESULT_UNSUPPORTED;\n\t}\n}\n","// ASCII fallback одинаков для отдельной подготовки имени и формирования заголовка.\nconst DEFAULT_ASCII_FILENAME = \"file.bin\";\n\nexport type ContentDispositionKind = \"inline\" | \"attachment\";\n\nexport type ContentDispositionOptions = {\n\treadonly disposition: ContentDispositionKind;\n\treadonly filename: string;\n\treadonly asciiFallback?: string;\n};\n\nexport function sanitizeFileName(value: string, fallback = \"file\"): string {\n\tconst normalized = value\n\t\t.replace(/[\\r\\n]/g, \" \")\n\t\t.replace(/\"/g, \"'\")\n\t\t.trim();\n\n\treturn normalized.length > 0 ? normalized : fallback;\n}\n\nexport function encodeFilenameRFC5987(value: string): string {\n\treturn encodeURIComponent(value)\n\t\t.replace(/['()]/g, (char) => `%${char.charCodeAt(0).toString(16).toUpperCase()}`)\n\t\t.replace(/\\*/g, \"%2A\");\n}\n\nexport function createAsciiFilenameFallback(value: string, fallback = DEFAULT_ASCII_FILENAME): string {\n\tconst asciiValue = value\n\t\t.replace(/[\\r\\n]/g, \" \")\n\t\t.replace(/[\"\\\\]/g, \"_\")\n\t\t.replace(/[^\\x20-\\x7E]/g, \"_\")\n\t\t.replace(/\\s+/g, \" \")\n\t\t.trim();\n\n\treturn asciiValue.length > 0 ? asciiValue : fallback;\n}\n\nexport function createContentDispositionHeader({\n\tdisposition,\n\tfilename,\n\tasciiFallback = DEFAULT_ASCII_FILENAME\n}: ContentDispositionOptions): string {\n\tconst sanitizedFilename = sanitizeFileName(filename, asciiFallback);\n\tconst asciiFilename = createAsciiFilenameFallback(sanitizedFilename, asciiFallback);\n\tconst encodedFilename = encodeFilenameRFC5987(sanitizedFilename);\n\n\treturn `${disposition}; filename=\"${asciiFilename}\"; filename*=UTF-8''${encodedFilename}`;\n}\n","/**\n * Приватные режимы чтения и типов options/result. Отдельные константы позволяют\n * минификатору сокращать идентификаторы без сохранения имён свойств объекта.\n */\nexport const READ_FILE_MODE_DATA_URL = \"data-url\";\nexport const READ_FILE_MODE_ARRAY_BUFFER = \"array-buffer\";\n\n/** Значения сохраняют публичный контракт ошибок; тип выводится из этих же констант. */\nexport const READ_FILE_ERROR_NO_FILE = \"NO_FILE\";\nexport const READ_FILE_ERROR_MIME_NOT_ALLOWED = \"MIME_NOT_ALLOWED\";\nexport const READ_FILE_ERROR_FILE_TOO_LARGE = \"FILE_TOO_LARGE\";\nexport const READ_FILE_ERROR_READ_ABORTED = \"READ_ABORTED\";\nexport const READ_FILE_ERROR_READ_FAILED = \"READ_FAILED\";\n","import {\n\ttype READ_FILE_ERROR_FILE_TOO_LARGE,\n\ttype READ_FILE_ERROR_MIME_NOT_ALLOWED,\n\ttype READ_FILE_ERROR_NO_FILE,\n\ttype READ_FILE_ERROR_READ_ABORTED,\n\ttype READ_FILE_ERROR_READ_FAILED,\n\ttype READ_FILE_MODE_ARRAY_BUFFER,\n\ttype READ_FILE_MODE_DATA_URL\n} from \"./readFileConstants\";\n\nexport type ReadMode = typeof READ_FILE_MODE_DATA_URL | typeof READ_FILE_MODE_ARRAY_BUFFER;\n\nexport type ReadFileErrorCode =\n\t| typeof READ_FILE_ERROR_NO_FILE\n\t| typeof READ_FILE_ERROR_MIME_NOT_ALLOWED\n\t| typeof READ_FILE_ERROR_FILE_TOO_LARGE\n\t| typeof READ_FILE_ERROR_READ_ABORTED\n\t| typeof READ_FILE_ERROR_READ_FAILED;\n\nexport class ReadFileError extends Error {\n\tpublic readonly code: ReadFileErrorCode;\n\tpublic readonly cause?: unknown;\n\n\tconstructor(code: ReadFileErrorCode, message?: string, cause?: unknown) {\n\t\tsuper(message ?? code);\n\t\tthis.name = \"ReadFileError\";\n\t\tthis.code = code;\n\t\tthis.cause = cause;\n\t}\n}\n\nexport type FileMeta = {\n\tmime: string;\n\tsize: number;\n\tname: string;\n\tlastModified: number;\n};\n\nexport type ReadFileOptionsBase = {\n\taccept?: readonly string[];\n\t/** Ограничение по MIME (если не указано — любые файлы) */\n\tallowedMime?: readonly string[];\n\t/** Ограничение по размеру файла (байты) */\n\tmaxBytes?: number;\n\t/** AbortController для отмены */\n\tsignal?: AbortSignal;\n};\n\nexport type ReadFileAsDataUrlOptions = ReadFileOptionsBase & {\n\tmode?: typeof READ_FILE_MODE_DATA_URL;\n};\n\nexport type ReadFileAsArrayBufferOptions = ReadFileOptionsBase & {\n\tmode: typeof READ_FILE_MODE_ARRAY_BUFFER;\n};\n\nexport type ReadFileOptions = ReadFileAsDataUrlOptions | ReadFileAsArrayBufferOptions;\n\nexport type ReadFileAsDataUrlResult = {\n\tmode: typeof READ_FILE_MODE_DATA_URL;\n\tmeta: FileMeta;\n\tdataUrl: string;\n\tfile: File;\n};\n\nexport type ReadFileAsArrayBufferResult = {\n\tmode: typeof READ_FILE_MODE_ARRAY_BUFFER;\n\tmeta: FileMeta;\n\tbuffer: ArrayBuffer;\n\tfile: File;\n};\n\nexport type ReadFileResult = ReadFileAsDataUrlResult | ReadFileAsArrayBufferResult;\n","import { READ_FILE_ERROR_READ_ABORTED } from \"./readFileConstants\";\nimport { ReadFileError } from \"./types\";\n\nconst MIME_PART_PATTERN = \"[a-z0-9!#$&^_.+-]+\";\nconst STRICT_MIME_PATTERN = new RegExp(`^${MIME_PART_PATTERN}\\\\/${MIME_PART_PATTERN}$`, \"i\");\nconst ACCEPT_MIME_PATTERN = new RegExp(`^${MIME_PART_PATTERN}\\\\/(?:${MIME_PART_PATTERN}|\\\\*)$`, \"i\");\nconst ACCEPT_EXTENSION_PATTERN = /^\\.[^\\s,]+$/;\n\nexport function assertValidAllowedMime(allowedMime?: readonly string[]): void {\n\tif (!allowedMime) return;\n\n\tfor (const [index, mime] of allowedMime.entries()) {\n\t\tif (!STRICT_MIME_PATTERN.test(mime)) {\n\t\t\tthrow new Error(\n\t\t\t\t`DropZone: некорректный allowedMime[${index}]=\"${mime}\". Ожидается полный MIME-тип вида \"application/pdf\" без wildcard и параметров.`\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport function assertValidAccept(accept?: readonly string[]): void {\n\tif (!accept) return;\n\n\tfor (const [index, specifier] of accept.entries()) {\n\t\tconst isValidSpecifier = ACCEPT_EXTENSION_PATTERN.test(specifier) || ACCEPT_MIME_PATTERN.test(specifier);\n\n\t\tif (!isValidSpecifier) {\n\t\t\tthrow new Error(\n\t\t\t\t`DropZone: некорректный accept[${index}]=\"${specifier}\". Ожидается расширение вида \".pdf\" или MIME-тип вида \"application/pdf\" / \"image/*\".`\n\t\t\t);\n\t\t}\n\t}\n}\n\nexport function assertNotAborted(signal?: AbortSignal): void {\n\tif (signal?.aborted) {\n\t\tthrow new ReadFileError(READ_FILE_ERROR_READ_ABORTED, \"Прервано по сигналу\");\n\t}\n}\n","import { assertNotAborted } from \"./assert\";\nimport {\n\tREAD_FILE_ERROR_FILE_TOO_LARGE,\n\tREAD_FILE_ERROR_MIME_NOT_ALLOWED,\n\tREAD_FILE_ERROR_READ_ABORTED,\n\tREAD_FILE_ERROR_READ_FAILED,\n\tREAD_FILE_MODE_ARRAY_BUFFER,\n\tREAD_FILE_MODE_DATA_URL\n} from \"./readFileConstants\";\nimport {\n\ttype FileMeta,\n\ttype ReadFileAsArrayBufferOptions,\n\ttype ReadFileAsArrayBufferResult,\n\ttype ReadFileAsDataUrlOptions,\n\ttype ReadFileAsDataUrlResult,\n\tReadFileError,\n\ttype ReadFileOptions,\n\ttype ReadFileResult,\n\ttype ReadMode\n} from \"./types\";\n\nconst ABORT_EVENT = \"abort\";\n// Одинаковые причины отказа сохраняют общие сообщения в обоих режимах чтения.\nconst READ_ABORTED_MESSAGE = \"Чтение файла прервано\";\nconst UNEXPECTED_READER_RESULT_MESSAGE = \"Неожиданный тип результата FileReader\";\n\nfunction normalizeMime(mime?: string): string {\n\treturn mime?.trim().toLowerCase() ?? \"\";\n}\n\nfunction getFileExtension(fileName: string): string {\n\tconst extension = fileName.split(\".\").pop();\n\treturn normalizeMime(extension);\n}\n\nexport function buildMeta(file: File): FileMeta {\n\treturn {\n\t\tmime: file.type,\n\t\tsize: file.size,\n\t\tname: file.name,\n\t\tlastModified: file.lastModified\n\t};\n}\n\nexport function attachAbort(signal: AbortSignal | undefined, reader: FileReader): (() => void) | undefined {\n\tif (!signal) return undefined;\n\n\tconst onAbort = () => {\n\t\ttry {\n\t\t\treader.abort();\n\t\t} catch {\n\t\t\t// ignore\n\t\t}\n\t};\n\n\tsignal.addEventListener(ABORT_EVENT, onAbort, { once: true });\n\treturn () => signal.removeEventListener(ABORT_EVENT, onAbort);\n}\n\nfunction validateFile(file: File, opts: ReadFileOptions): void {\n\tif (opts.allowedMime && opts.allowedMime.length > 0) {\n\t\tconst allowed = new Set(opts.allowedMime.map((mime) => normalizeMime(mime)));\n\t\tconst fileMime = normalizeMime(file.type);\n\t\tif (!allowed.has(fileMime)) {\n\t\t\tthrow new ReadFileError(READ_FILE_ERROR_MIME_NOT_ALLOWED, `Неподдерживаемый MIME тип: ${file.type}`);\n\t\t}\n\t} else if (opts.accept && opts.accept.length > 0) {\n\t\t// Берём расширение файла, если его нет, пытаемся вытащить из MIME\n\t\tconst fileMime = getFileExtension(file.name) || file.type.split(\"/\").pop();\n\t\tif (!fileMime) {\n\t\t\t// NOTE: Если неизвестный mime и нет расширения? Пока запретить такой сценарий\n\t\t\tthrow new ReadFileError(READ_FILE_ERROR_MIME_NOT_ALLOWED, `Неопределенный MIME тип`);\n\t\t}\n\n\t\tconst allowed = opts.accept.map((mime) => normalizeMime(mime));\n\t\tconst isAllowed = allowed.some((mime) => mime.includes(fileMime));\n\n\t\tif (!isAllowed) {\n\t\t\tthrow new ReadFileError(READ_FILE_ERROR_MIME_NOT_ALLOWED, `Неподдерживаемый MIME тип: ${fileMime}`);\n\t\t}\n\t}\n\n\tif (typeof opts.maxBytes === \"number\" && file.size > opts.maxBytes) {\n\t\tthrow new ReadFileError(READ_FILE_ERROR_FILE_TOO_LARGE, `Файл слишком большой: ${file.size} > ${opts.maxBytes}`);\n\t}\n}\n\nfunction readAsDataUrl(file: File, opts: ReadFileOptions): Promise<string> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst reader = new FileReader();\n\n\t\tconst detachAbort = attachAbort(opts.signal, reader);\n\n\t\treader.onerror = () => {\n\t\t\tdetachAbort?.();\n\t\t\treject(new ReadFileError(READ_FILE_ERROR_READ_FAILED, \"Не удалось прочитать файл как DataURL\", reader.error));\n\t\t};\n\n\t\treader.onabort = () => {\n\t\t\tdetachAbort?.();\n\t\t\treject(new ReadFileError(READ_FILE_ERROR_READ_ABORTED, READ_ABORTED_MESSAGE));\n\t\t};\n\n\t\treader.onload = () => {\n\t\t\tdetachAbort?.();\n\t\t\tconst result = reader.result;\n\t\t\tif (typeof result !== \"string\") {\n\t\t\t\treject(new ReadFileError(READ_FILE_ERROR_READ_FAILED, UNEXPECTED_READER_RESULT_MESSAGE));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve(result);\n\t\t};\n\n\t\ttry {\n\t\t\treader.readAsDataURL(file);\n\t\t} catch (cause) {\n\t\t\tdetachAbort?.();\n\t\t\treject(new ReadFileError(READ_FILE_ERROR_READ_FAILED, \"При чтении DataURL функция FileReader выдала ошибку\", cause));\n\t\t}\n\t});\n}\n\nfunction readAsArrayBuffer(file: File, opts: ReadFileOptions): Promise<ArrayBuffer> {\n\treturn new Promise((resolve, reject) => {\n\t\tconst reader = new FileReader();\n\n\t\tconst detachAbort = attachAbort(opts.signal, reader);\n\n\t\treader.onerror = () => {\n\t\t\tdetachAbort?.();\n\t\t\treject(new ReadFileError(READ_FILE_ERROR_READ_FAILED, \"Не удалось прочитать файл как ArrayBuffer.\", reader.error));\n\t\t};\n\n\t\treader.onabort = () => {\n\t\t\tdetachAbort?.();\n\t\t\treject(new ReadFileError(READ_FILE_ERROR_READ_ABORTED, READ_ABORTED_MESSAGE));\n\t\t};\n\n\t\treader.onload = () => {\n\t\t\tdetachAbort?.();\n\t\t\tconst result = reader.result;\n\t\t\tif (!(result instanceof ArrayBuffer)) {\n\t\t\t\treject(new ReadFileError(READ_FILE_ERROR_READ_FAILED, UNEXPECTED_READER_RESULT_MESSAGE));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tresolve(result);\n\t\t};\n\n\t\ttry {\n\t\t\treader.readAsArrayBuffer(file);\n\t\t} catch (cause) {\n\t\t\tdetachAbort?.();\n\t\t\treject(new ReadFileError(READ_FILE_ERROR_READ_FAILED, \"При чтении ArrayBuffer возникла ошибка FileReader\", cause));\n\t\t}\n\t});\n}\n\n// Перегрузки для строгой типизации результата\n\nexport async function readFile(file: File, opts?: ReadFileAsDataUrlOptions): Promise<ReadFileAsDataUrlResult>;\nexport async function readFile(file: File, opts: ReadFileAsArrayBufferOptions): Promise<ReadFileAsArrayBufferResult>;\n\nexport async function readFile(file: File, opts: ReadFileOptions = {}): Promise<ReadFileResult> {\n\tassertNotAborted(opts.signal);\n\tvalidateFile(file, opts);\n\n\tconst mode: ReadMode = opts.mode ?? READ_FILE_MODE_DATA_URL;\n\tconst meta = buildMeta(file);\n\n\tif (mode === READ_FILE_MODE_ARRAY_BUFFER) {\n\t\tconst buffer = await readAsArrayBuffer(file, opts);\n\t\treturn { mode: READ_FILE_MODE_ARRAY_BUFFER, meta, buffer, file };\n\t}\n\n\tconst dataUrl = await readAsDataUrl(file, opts);\n\treturn { mode: READ_FILE_MODE_DATA_URL, meta, dataUrl, file };\n}\n","/** Код отказа до декодирования изображения сохраняет строковый контракт ReadImageError. */\nexport const READ_IMAGE_ERROR_NOT_AN_IMAGE = \"NOT_AN_IMAGE\";\n","import { type READ_FILE_MODE_ARRAY_BUFFER, type READ_FILE_MODE_DATA_URL } from \"../read-file/readFileConstants\";\n\nimport { type READ_IMAGE_ERROR_NOT_AN_IMAGE } from \"./imageReadConstants\";\n\nimport type { ReadFileAsArrayBufferResult, ReadFileAsDataUrlResult, ReadFileErrorCode, ReadFileOptionsBase } from \"../read-file\";\n\nexport type ImageMime = \"image/png\" | \"image/jpeg\" | \"image/webp\" | \"image/gif\" | \"image/svg+xml\" | \"image/avif\";\n\nexport type ReadImageErrorCode = ReadFileErrorCode | typeof READ_IMAGE_ERROR_NOT_AN_IMAGE | \"IMAGE_DECODE_FAILED\";\n\nexport class ReadImageError extends Error {\n\tpublic readonly code: ReadImageErrorCode;\n\tpublic readonly cause?: unknown;\n\n\tconstructor(code: ReadImageErrorCode, message?: string, cause?: unknown) {\n\t\tsuper(message ?? code);\n\t\tthis.name = \"ReadImageError\";\n\t\tthis.code = code;\n\t\tthis.cause = cause;\n\t}\n}\n\nexport type ReadImageOptionsBase = Omit<ReadFileOptionsBase, \"allowedMime\"> & {\n\t/** Ограничение по MIME (если не указано — любые image/*) */\n\tallowedMime?: readonly ImageMime[];\n};\n\nexport type ReadImageAsDataUrlOptions = ReadImageOptionsBase & {\n\tmode?: typeof READ_FILE_MODE_DATA_URL;\n};\n\nexport type ReadImageAsArrayBufferOptions = ReadImageOptionsBase & {\n\tmode: typeof READ_FILE_MODE_ARRAY_BUFFER;\n};\n\nexport type ReadImageOptions = ReadImageAsDataUrlOptions | ReadImageAsArrayBufferOptions;\n\nexport type ImageDimensions = {\n\twidth: number;\n\theight: number;\n};\n\nexport type ReadImageAsDataUrlResult = ReadFileAsDataUrlResult & {\n\t/** безопасно вытащенные размеры (через decode) */\n\tdimensions?: ImageDimensions;\n};\n\nexport type ReadImageAsArrayBufferResult = ReadFileAsArrayBufferResult;\n\nexport type ReadImageResult = ReadImageAsDataUrlResult | ReadImageAsArrayBufferResult;\n","import { assertNotAborted, readFile } from \"../read-file\";\nimport { READ_FILE_MODE_ARRAY_BUFFER, type READ_FILE_MODE_DATA_URL } from \"../read-file/readFileConstants\";\n\nimport { READ_IMAGE_ERROR_NOT_AN_IMAGE } from \"./imageReadConstants\";\nimport { ReadImageError } from \"./types\";\n\nimport type { ImageDimensions, ReadImageAsArrayBufferResult, ReadImageAsDataUrlResult, ReadImageOptions } from \"./types\";\n\nfunction isImageMime(mime: string): boolean {\n\treturn mime.startsWith(\"image/\");\n}\n\nasync function decodeImageDimensions(dataUrl: string, signal?: AbortSignal): Promise<ImageDimensions> {\n\tassertNotAborted(signal);\n\n\tconst img = new Image();\n\timg.decoding = \"async\";\n\timg.src = dataUrl;\n\n\t// decode() поддерживается в современных браузерах; fallback на onload\n\t// NOTE: большого размера png падают...\n\t// if (typeof img.decode === \"function\") {\n\t// \ttry {\n\t// \t\tawait img.decode();\n\t// \t\tassertNotAborted(signal);\n\t// \t\treturn { width: img.naturalWidth, height: img.naturalHeight };\n\t// \t} catch (cause) {\n\t// \t\tthrow new ReadImageError(\"IMAGE_DECODE_FAILED\", \"Не удалось декодировать изображение\", cause);\n\t// \t}\n\t// }\n\n\tawait new Promise<void>((resolve, reject) => {\n\t\tconst cleanup = () => {\n\t\t\timg.onload = null;\n\t\t\timg.onerror = null;\n\t\t};\n\n\t\timg.onload = () => {\n\t\t\tcleanup();\n\t\t\tresolve();\n\t\t};\n\t\timg.onerror = (ev) => {\n\t\t\tcleanup();\n\t\t\treject(ev);\n\t\t};\n\t});\n\n\tassertNotAborted(signal);\n\treturn { width: img.naturalWidth, height: img.naturalHeight };\n}\n\n// Перегрузки для строгой типизации результата\n\nexport async function readImageFile(\n\tfile: File,\n\topts?: Omit<ReadImageOptions, \"mode\"> & { mode?: typeof READ_FILE_MODE_DATA_URL }\n): Promise<ReadImageAsDataUrlResult>;\nexport async function readImageFile(\n\tfile: File,\n\topts: Omit<ReadImageOptions, \"mode\"> & { mode: typeof READ_FILE_MODE_ARRAY_BUFFER }\n): Promise<ReadImageAsArrayBufferResult>;\n\nexport async function readImageFile(\n\tfile: File,\n\topts: ReadImageOptions = {}\n): Promise<ReadImageAsDataUrlResult | ReadImageAsArrayBufferResult> {\n\tif (!isImageMime(file.type)) {\n\t\tthrow new ReadImageError(READ_IMAGE_ERROR_NOT_AN_IMAGE, `Файл не является изображением. mime=${file.type || \"unknown\"}`);\n\t}\n\n\tconst baseOpts = { allowedMime: opts.allowedMime, maxBytes: opts.maxBytes, signal: opts.signal };\n\n\tif (opts.mode === READ_FILE_MODE_ARRAY_BUFFER) {\n\t\treturn readFile(file, { ...baseOpts, mode: READ_FILE_MODE_ARRAY_BUFFER });\n\t}\n\n\tconst result = await readFile(file, baseOpts);\n\tconst dimensions = await decodeImageDimensions(result.dataUrl, opts.signal);\n\n\treturn { ...result, dimensions };\n}\n","import {\n\tMIME_TYPE_DOCX,\n\tMIME_TYPE_IMAGE_GIF,\n\tMIME_TYPE_IMAGE_JPEG,\n\tMIME_TYPE_IMAGE_PNG,\n\tMIME_TYPE_IMAGE_WEBP,\n\tMIME_TYPE_MSWORD,\n\tMIME_TYPE_OCTET_STREAM,\n\tMIME_TYPE_PDF,\n\tMIME_TYPE_PPT,\n\tMIME_TYPE_PPTX,\n\tMIME_TYPE_TEXT_PLAIN_UTF8,\n\tMIME_TYPE_XLS,\n\tMIME_TYPE_XLSX,\n\tMIME_TYPE_ZIP\n} from \"./mimeTypeConstants\";\n\nconst EXTENSION_CONTENT_TYPE: Readonly<Record<string, string>> = {\n\tpdf: MIME_TYPE_PDF,\n\tdoc: MIME_TYPE_MSWORD,\n\tdocx: MIME_TYPE_DOCX,\n\txls: MIME_TYPE_XLS,\n\txlsx: MIME_TYPE_XLSX,\n\tppt: MIME_TYPE_PPT,\n\tpptx: MIME_TYPE_PPTX,\n\ttxt: MIME_TYPE_TEXT_PLAIN_UTF8,\n\trtf: \"application/rtf\",\n\todt: \"application/vnd.oasis.opendocument.text\",\n\tzip: MIME_TYPE_ZIP,\n\trar: \"application/vnd.rar\",\n\tjpg: MIME_TYPE_IMAGE_JPEG,\n\tjpeg: MIME_TYPE_IMAGE_JPEG,\n\tpng: MIME_TYPE_IMAGE_PNG,\n\tgif: MIME_TYPE_IMAGE_GIF,\n\twebp: MIME_TYPE_IMAGE_WEBP\n};\n\nexport function resolveMimeTypeByExtension(extension: string): string {\n\tconst normalizedExtension = extension.trim().toLowerCase();\n\n\treturn EXTENSION_CONTENT_TYPE[normalizedExtension] ?? MIME_TYPE_OCTET_STREAM;\n}\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mimeType.d.ts","sourceRoot":"","sources":["../../src/file/mimeType.ts"],"names":[],"mappings":"AAoBA,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIpE"}
1
+ {"version":3,"file":"mimeType.d.ts","sourceRoot":"","sources":["../../src/file/mimeType.ts"],"names":[],"mappings":"AAqCA,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAIpE"}
@@ -0,0 +1,18 @@
1
+ /** MIME-значения общие для extension lookup, бинарного определения типа и HTTP-заголовков. */
2
+ export declare const MIME_TYPE_OCTET_STREAM = "application/octet-stream";
3
+ export declare const MIME_TYPE_PDF = "application/pdf";
4
+ export declare const MIME_TYPE_MSWORD = "application/msword";
5
+ export declare const MIME_TYPE_DOCX = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";
6
+ export declare const MIME_TYPE_XLS = "application/vnd.ms-excel";
7
+ export declare const MIME_TYPE_XLSX = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
8
+ export declare const MIME_TYPE_PPT = "application/vnd.ms-powerpoint";
9
+ export declare const MIME_TYPE_PPTX = "application/vnd.openxmlformats-officedocument.presentationml.presentation";
10
+ export declare const MIME_TYPE_ZIP = "application/zip";
11
+ export declare const MIME_TYPE_XML = "application/xml";
12
+ export declare const MIME_TYPE_TEXT_PLAIN_UTF8 = "text/plain; charset=UTF-8";
13
+ export declare const MIME_TYPE_IMAGE_JPEG = "image/jpeg";
14
+ export declare const MIME_TYPE_IMAGE_PNG = "image/png";
15
+ export declare const MIME_TYPE_IMAGE_GIF = "image/gif";
16
+ export declare const MIME_TYPE_IMAGE_WEBP = "image/webp";
17
+ export declare const MIME_TYPE_IMAGE_TIFF = "image/tiff";
18
+ //# sourceMappingURL=mimeTypeConstants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mimeTypeConstants.d.ts","sourceRoot":"","sources":["../../src/file/mimeTypeConstants.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAC9F,eAAO,MAAM,sBAAsB,6BAA6B,CAAC;AACjE,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAC/C,eAAO,MAAM,gBAAgB,uBAAuB,CAAC;AACrD,eAAO,MAAM,cAAc,4EAA4E,CAAC;AACxG,eAAO,MAAM,aAAa,6BAA6B,CAAC;AACxD,eAAO,MAAM,cAAc,sEAAsE,CAAC;AAClG,eAAO,MAAM,aAAa,kCAAkC,CAAC;AAC7D,eAAO,MAAM,cAAc,8EAA8E,CAAC;AAC1G,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAC/C,eAAO,MAAM,aAAa,oBAAoB,CAAC;AAC/C,eAAO,MAAM,yBAAyB,8BAA8B,CAAC;AACrE,eAAO,MAAM,oBAAoB,eAAe,CAAC;AACjD,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,mBAAmB,cAAc,CAAC;AAC/C,eAAO,MAAM,oBAAoB,eAAe,CAAC;AACjD,eAAO,MAAM,oBAAoB,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../src/file/read-file/assert.ts"],"names":[],"mappings":"AAOA,wBAAgB,sBAAsB,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAU5E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAYlE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAI3D"}
1
+ {"version":3,"file":"assert.d.ts","sourceRoot":"","sources":["../../../src/file/read-file/assert.ts"],"names":[],"mappings":"AAQA,wBAAgB,sBAAsB,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAU5E;AAED,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAYlE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,IAAI,CAI3D"}
@@ -1,14 +1,6 @@
1
- import { FileMeta, ReadFileOptions, ReadFileResult } from "./types";
1
+ import { type FileMeta, type ReadFileAsArrayBufferOptions, type ReadFileAsArrayBufferResult, type ReadFileAsDataUrlOptions, type ReadFileAsDataUrlResult } from "./types";
2
2
  export declare function buildMeta(file: File): FileMeta;
3
3
  export declare function attachAbort(signal: AbortSignal | undefined, reader: FileReader): (() => void) | undefined;
4
- export declare function readFile(file: File, opts?: Omit<ReadFileOptions, "mode"> & {
5
- mode?: "data-url";
6
- }): Promise<Extract<ReadFileResult, {
7
- mode: "data-url";
8
- }>>;
9
- export declare function readFile(file: File, opts: Omit<ReadFileOptions, "mode"> & {
10
- mode: "array-buffer";
11
- }): Promise<Extract<ReadFileResult, {
12
- mode: "array-buffer";
13
- }>>;
4
+ export declare function readFile(file: File, opts?: ReadFileAsDataUrlOptions): Promise<ReadFileAsDataUrlResult>;
5
+ export declare function readFile(file: File, opts: ReadFileAsArrayBufferOptions): Promise<ReadFileAsArrayBufferResult>;
14
6
  //# sourceMappingURL=readFile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"readFile.d.ts","sourceRoot":"","sources":["../../../src/file/read-file/readFile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAiB,eAAe,EAAE,cAAc,EAAY,MAAM,SAAS,CAAC;AAW7F,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAO9C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAazG;AAsGD,wBAAsB,QAAQ,CAC7B,IAAI,EAAE,IAAI,EACV,IAAI,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,UAAU,CAAA;CAAE,GAC1D,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC,CAAC,CAAC;AAC1D,wBAAsB,QAAQ,CAC7B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,GAC5D,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"readFile.d.ts","sourceRoot":"","sources":["../../../src/file/read-file/readFile.ts"],"names":[],"mappings":"AASA,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAK5B,MAAM,SAAS,CAAC;AAgBjB,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,QAAQ,CAO9C;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS,CAazG;AAsGD,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAC9G,wBAAsB,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,4BAA4B,GAAG,OAAO,CAAC,2BAA2B,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Приватные режимы чтения и типов options/result. Отдельные константы позволяют
3
+ * минификатору сокращать идентификаторы без сохранения имён свойств объекта.
4
+ */
5
+ export declare const READ_FILE_MODE_DATA_URL = "data-url";
6
+ export declare const READ_FILE_MODE_ARRAY_BUFFER = "array-buffer";
7
+ /** Значения сохраняют публичный контракт ошибок; тип выводится из этих же констант. */
8
+ export declare const READ_FILE_ERROR_NO_FILE = "NO_FILE";
9
+ export declare const READ_FILE_ERROR_MIME_NOT_ALLOWED = "MIME_NOT_ALLOWED";
10
+ export declare const READ_FILE_ERROR_FILE_TOO_LARGE = "FILE_TOO_LARGE";
11
+ export declare const READ_FILE_ERROR_READ_ABORTED = "READ_ABORTED";
12
+ export declare const READ_FILE_ERROR_READ_FAILED = "READ_FAILED";
13
+ //# sourceMappingURL=readFileConstants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readFileConstants.d.ts","sourceRoot":"","sources":["../../../src/file/read-file/readFileConstants.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,uBAAuB,aAAa,CAAC;AAClD,eAAO,MAAM,2BAA2B,iBAAiB,CAAC;AAE1D,uFAAuF;AACvF,eAAO,MAAM,uBAAuB,YAAY,CAAC;AACjD,eAAO,MAAM,gCAAgC,qBAAqB,CAAC;AACnE,eAAO,MAAM,8BAA8B,mBAAmB,CAAC;AAC/D,eAAO,MAAM,4BAA4B,iBAAiB,CAAC;AAC3D,eAAO,MAAM,2BAA2B,gBAAgB,CAAC"}
@@ -1,5 +1,6 @@
1
- export type ReadMode = "data-url" | "array-buffer";
2
- export type ReadFileErrorCode = "NO_FILE" | "MIME_NOT_ALLOWED" | "FILE_TOO_LARGE" | "READ_ABORTED" | "READ_FAILED";
1
+ import { type READ_FILE_ERROR_FILE_TOO_LARGE, type READ_FILE_ERROR_MIME_NOT_ALLOWED, type READ_FILE_ERROR_NO_FILE, type READ_FILE_ERROR_READ_ABORTED, type READ_FILE_ERROR_READ_FAILED, type READ_FILE_MODE_ARRAY_BUFFER, type READ_FILE_MODE_DATA_URL } from "./readFileConstants";
2
+ export type ReadMode = typeof READ_FILE_MODE_DATA_URL | typeof READ_FILE_MODE_ARRAY_BUFFER;
3
+ export type ReadFileErrorCode = typeof READ_FILE_ERROR_NO_FILE | typeof READ_FILE_ERROR_MIME_NOT_ALLOWED | typeof READ_FILE_ERROR_FILE_TOO_LARGE | typeof READ_FILE_ERROR_READ_ABORTED | typeof READ_FILE_ERROR_READ_FAILED;
3
4
  export declare class ReadFileError extends Error {
4
5
  readonly code: ReadFileErrorCode;
5
6
  readonly cause?: unknown;
@@ -21,20 +22,20 @@ export type ReadFileOptionsBase = {
21
22
  signal?: AbortSignal;
22
23
  };
23
24
  export type ReadFileAsDataUrlOptions = ReadFileOptionsBase & {
24
- mode?: "data-url";
25
+ mode?: typeof READ_FILE_MODE_DATA_URL;
25
26
  };
26
27
  export type ReadFileAsArrayBufferOptions = ReadFileOptionsBase & {
27
- mode: "array-buffer";
28
+ mode: typeof READ_FILE_MODE_ARRAY_BUFFER;
28
29
  };
29
30
  export type ReadFileOptions = ReadFileAsDataUrlOptions | ReadFileAsArrayBufferOptions;
30
31
  export type ReadFileAsDataUrlResult = {
31
- mode: "data-url";
32
+ mode: typeof READ_FILE_MODE_DATA_URL;
32
33
  meta: FileMeta;
33
34
  dataUrl: string;
34
35
  file: File;
35
36
  };
36
37
  export type ReadFileAsArrayBufferResult = {
37
- mode: "array-buffer";
38
+ mode: typeof READ_FILE_MODE_ARRAY_BUFFER;
38
39
  meta: FileMeta;
39
40
  buffer: ArrayBuffer;
40
41
  file: File;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/file/read-file/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,cAAc,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GAAG,SAAS,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,cAAc,GAAG,aAAa,CAAC;AAEnH,qBAAa,aAAc,SAAQ,KAAK;IACvC,SAAgB,IAAI,EAAE,iBAAiB,CAAC;IACxC,SAAgB,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEpB,IAAI,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAMtE;AAED,MAAM,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,0DAA0D;IAC1D,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,GAAG;IAC5D,IAAI,CAAC,EAAE,UAAU,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,mBAAmB,GAAG;IAChE,IAAI,EAAE,cAAc,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,wBAAwB,GAAG,4BAA4B,CAAC;AAEtF,MAAM,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,UAAU,CAAC;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACzC,IAAI,EAAE,cAAc,CAAC;IACrB,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,uBAAuB,GAAG,2BAA2B,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/file/read-file/types.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,8BAA8B,EACnC,KAAK,gCAAgC,EACrC,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,uBAAuB,EAC5B,MAAM,qBAAqB,CAAC;AAE7B,MAAM,MAAM,QAAQ,GAAG,OAAO,uBAAuB,GAAG,OAAO,2BAA2B,CAAC;AAE3F,MAAM,MAAM,iBAAiB,GAC1B,OAAO,uBAAuB,GAC9B,OAAO,gCAAgC,GACvC,OAAO,8BAA8B,GACrC,OAAO,4BAA4B,GACnC,OAAO,2BAA2B,CAAC;AAEtC,qBAAa,aAAc,SAAQ,KAAK;IACvC,SAAgB,IAAI,EAAE,iBAAiB,CAAC;IACxC,SAAgB,KAAK,CAAC,EAAE,OAAO,CAAC;gBAEpB,IAAI,EAAE,iBAAiB,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAMtE;AAED,MAAM,MAAM,QAAQ,GAAG;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IACjC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,0DAA0D;IAC1D,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iCAAiC;IACjC,MAAM,CAAC,EAAE,WAAW,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,mBAAmB,GAAG;IAC5D,IAAI,CAAC,EAAE,OAAO,uBAAuB,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,4BAA4B,GAAG,mBAAmB,GAAG;IAChE,IAAI,EAAE,OAAO,2BAA2B,CAAC;CACzC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,wBAAwB,GAAG,4BAA4B,CAAC;AAEtF,MAAM,MAAM,uBAAuB,GAAG;IACrC,IAAI,EAAE,OAAO,uBAAuB,CAAC;IACrC,IAAI,EAAE,QAAQ,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG;IACzC,IAAI,EAAE,OAAO,2BAA2B,CAAC;IACzC,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,EAAE,WAAW,CAAC;IACpB,IAAI,EAAE,IAAI,CAAC;CACX,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG,uBAAuB,GAAG,2BAA2B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"checkArchiveSignature.d.ts","sourceRoot":"","sources":["../../../src/file/signature/checkArchiveSignature.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,6BAA6B,EAAE,KAAK,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAoE1G,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,6BAA6B,EAAE,KAAK,EAAE,UAAU,GAAG,wBAAwB,CAI3H"}
1
+ {"version":3,"file":"checkArchiveSignature.d.ts","sourceRoot":"","sources":["../../../src/file/signature/checkArchiveSignature.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,6BAA6B,EAAE,KAAK,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAoE1G,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,6BAA6B,EAAE,KAAK,EAAE,UAAU,GAAG,wBAAwB,CAI3H"}
@@ -0,0 +1,5 @@
1
+ /** Режимы realpath общие для публичного типа и выбора фактической проверки пути. */
2
+ export declare const PATH_REALPATH_TARGET = "target";
3
+ export declare const PATH_REALPATH_PARENT = "parent";
4
+ export declare const PATH_REALPATH_NONE = "none";
5
+ //# sourceMappingURL=fileSystemConstants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fileSystemConstants.d.ts","sourceRoot":"","sources":["../../src/file-system/fileSystemConstants.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAC7C,eAAO,MAAM,oBAAoB,WAAW,CAAC;AAC7C,eAAO,MAAM,kBAAkB,SAAS,CAAC"}
@@ -1,5 +1,6 @@
1
+ import { type PATH_REALPATH_NONE, type PATH_REALPATH_PARENT, type PATH_REALPATH_TARGET } from "./fileSystemConstants";
1
2
  /** Определяет, какую существующую часть пути дополнительно проверить через Node.js realpath. */
2
- export type PathRealpathMode = "none" | "parent" | "target";
3
+ export type PathRealpathMode = typeof PATH_REALPATH_NONE | typeof PATH_REALPATH_PARENT | typeof PATH_REALPATH_TARGET;
3
4
  /** Root принадлежит серверной конфигурации; сегменты обозначают только путь внутри него. */
4
5
  export type ResolvePathInsideRootOptions = Readonly<{
5
6
  rootPath: string;
@@ -1 +1 @@
1
- {"version":3,"file":"fileSystemTypes.d.ts","sourceRoot":"","sources":["../../src/file-system/fileSystemTypes.ts"],"names":[],"mappings":"AAAA,gGAAgG;AAChG,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAE5D,4FAA4F;AAC5F,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,kFAAkF;IAClF,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAChC,CAAC,CAAC"}
1
+ {"version":3,"file":"fileSystemTypes.d.ts","sourceRoot":"","sources":["../../src/file-system/fileSystemTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,kBAAkB,EAAE,KAAK,oBAAoB,EAAE,KAAK,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAEtH,gGAAgG;AAChG,MAAM,MAAM,gBAAgB,GAAG,OAAO,kBAAkB,GAAG,OAAO,oBAAoB,GAAG,OAAO,oBAAoB,CAAC;AAErH,4FAA4F;AAC5F,MAAM,MAAM,4BAA4B,GAAG,QAAQ,CAAC;IACnD,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,SAAS,MAAM,EAAE,CAAC;IAChC,kFAAkF;IAClF,YAAY,CAAC,EAAE,gBAAgB,CAAC;CAChC,CAAC,CAAC"}
@@ -6,17 +6,18 @@ function s(t) {
6
6
  return e(t) ? t.code === "ENOENT" || t.code === "ENOTDIR" : !1;
7
7
  }
8
8
  //#endregion
9
- //#region src/file-system/resolvePathInsideRoot.ts
10
- function c(e) {
9
+ //#region src/file-system/fileSystemConstants.ts
10
+ var c = "target", l = "Путь выходит за пределы корневой папки хранилища.";
11
+ function u(e) {
11
12
  let t = e.trim();
12
13
  if (!t) throw Error("Корневая папка хранилища не задана.");
13
14
  return a(t);
14
15
  }
15
- function l(e, t) {
16
+ function d(e, t) {
16
17
  let n = i(e, t);
17
18
  return n === "" || n !== ".." && !n.startsWith(`..${o}`) && !r(n);
18
19
  }
19
- async function u(e, r, i) {
20
+ async function f(e, r, i) {
20
21
  let a;
21
22
  try {
22
23
  a = await t(e);
@@ -24,14 +25,14 @@ async function u(e, r, i) {
24
25
  throw Error("Корневая папка хранилища недоступна.", { cause: e });
25
26
  }
26
27
  let o = i === "parent" ? n(r) : r, s = await t(o);
27
- if (!l(a, s)) throw Error("Путь выходит за пределы корневой папки хранилища.");
28
+ if (!d(a, s)) throw Error(l);
28
29
  }
29
- async function d({ rootPath: e, pathSegments: t, realpathMode: n = "target" }) {
30
- let r = c(e), i = a(r, ...t);
31
- if (!l(r, i)) throw Error("Путь выходит за пределы корневой папки хранилища.");
32
- return n !== "none" && await u(r, i, n), i;
30
+ async function p({ rootPath: e, pathSegments: t, realpathMode: n = c }) {
31
+ let r = u(e), i = a(r, ...t);
32
+ if (!d(r, i)) throw Error(l);
33
+ return n !== "none" && await f(r, i, n), i;
33
34
  }
34
35
  //#endregion
35
- export { s as isFileSystemNotFoundError, d as resolvePathInsideRoot };
36
+ export { s as isFileSystemNotFoundError, p as resolvePathInsideRoot };
36
37
 
37
38
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/file-system/isFileSystemNotFoundError.ts","../../src/file-system/resolvePathInsideRoot.ts"],"sourcesContent":["import { isRecord } from \"../validators\";\n\n/** Отличает отсутствующий путь от ошибок доступа и I/O, которые вызывающий код обязан обработать отдельно. */\nexport function isFileSystemNotFoundError(error: unknown): boolean {\n\tif (!isRecord(error)) return false;\n\treturn error.code === \"ENOENT\" || error.code === \"ENOTDIR\";\n}\n","import { type PathRealpathMode, type ResolvePathInsideRootOptions } from \"./fileSystemTypes\";\n\nimport { realpath } from \"node:fs/promises\";\nimport { dirname, isAbsolute, relative, resolve, sep } from \"node:path\";\n\nfunction resolveStorageRoot(rootPath: string): string {\n\tconst normalizedRootPath = rootPath.trim();\n\tif (!normalizedRootPath) {\n\t\tthrow new Error(\"Корневая папка хранилища не задана.\");\n\t}\n\treturn resolve(normalizedRootPath);\n}\n\nfunction isResolvedPathInsideRoot(rootPath: string, candidatePath: string): boolean {\n\tconst relativePath = relative(rootPath, candidatePath);\n\t// Проверяется сегмент родителя, а не префикс имени: '..metadata' является допустимым файлом внутри root.\n\treturn relativePath === \"\" || (relativePath !== \"..\" && !relativePath.startsWith(`..${sep}`) && !isAbsolute(relativePath));\n}\n\nasync function assertRealPathInsideRoot(\n\trootPath: string,\n\tcandidatePath: string,\n\trealpathMode: Exclude<PathRealpathMode, \"none\">\n): Promise<void> {\n\tlet realRootPath: string;\n\ttry {\n\t\trealRootPath = await realpath(rootPath);\n\t} catch (error) {\n\t\tthrow new Error(\"Корневая папка хранилища недоступна.\", { cause: error });\n\t}\n\tconst pathForRealCheck = realpathMode === \"parent\" ? dirname(candidatePath) : candidatePath;\n\tconst realCandidatePath = await realpath(pathForRealCheck);\n\tif (!isResolvedPathInsideRoot(realRootPath, realCandidatePath)) {\n\t\tthrow new Error(\"Путь выходит за пределы корневой папки хранилища.\");\n\t}\n}\n\n/**\n * Нормализует абсолютный путь и запрещает выход за доверенный root.\n * 'target' проверяет существующий файл, 'parent' — каталог перед созданием файла,\n * 'none' выполняет только лексическую проверку и не защищает от символических ссылок.\n * Проверка не открывает файл: защиту от смены пути между проверкой и I/O обеспечивает вызывающий код.\n */\nexport async function resolvePathInsideRoot({\n\trootPath,\n\tpathSegments,\n\trealpathMode = \"target\"\n}: ResolvePathInsideRootOptions): Promise<string> {\n\tconst resolvedRootPath = resolveStorageRoot(rootPath);\n\tconst resolvedCandidatePath = resolve(resolvedRootPath, ...pathSegments);\n\tif (!isResolvedPathInsideRoot(resolvedRootPath, resolvedCandidatePath)) {\n\t\tthrow new Error(\"Путь выходит за пределы корневой папки хранилища.\");\n\t}\n\tif (realpathMode !== \"none\") {\n\t\tawait assertRealPathInsideRoot(resolvedRootPath, resolvedCandidatePath, realpathMode);\n\t}\n\treturn resolvedCandidatePath;\n}\n"],"mappings":";;;;AAGA,SAAgB,EAA0B,GAAyB;CAElE,OADK,EAAS,CAAK,IACZ,EAAM,SAAS,YAAY,EAAM,SAAS,YADpB;AAE9B;;;ACDA,SAAS,EAAmB,GAA0B;CACrD,IAAM,IAAqB,EAAS,KAAK;CACzC,IAAI,CAAC,GACJ,MAAU,MAAM,qCAAqC;CAEtD,OAAO,EAAQ,CAAkB;AAClC;AAEA,SAAS,EAAyB,GAAkB,GAAgC;CACnF,IAAM,IAAe,EAAS,GAAU,CAAa;CAErD,OAAO,MAAiB,MAAO,MAAiB,QAAQ,CAAC,EAAa,WAAW,KAAK,GAAK,KAAK,CAAC,EAAW,CAAY;AACzH;AAEA,eAAe,EACd,GACA,GACA,GACgB;CAChB,IAAI;CACJ,IAAI;EACH,IAAe,MAAM,EAAS,CAAQ;CACvC,SAAS,GAAO;EACf,MAAU,MAAM,wCAAwC,EAAE,OAAO,EAAM,CAAC;CACzE;CACA,IAAM,IAAmB,MAAiB,WAAW,EAAQ,CAAa,IAAI,GACxE,IAAoB,MAAM,EAAS,CAAgB;CACzD,IAAI,CAAC,EAAyB,GAAc,CAAiB,GAC5D,MAAU,MAAM,mDAAmD;AAErE;AAQA,eAAsB,EAAsB,EAC3C,aACA,iBACA,kBAAe,YACkC;CACjD,IAAM,IAAmB,EAAmB,CAAQ,GAC9C,IAAwB,EAAQ,GAAkB,GAAG,CAAY;CACvE,IAAI,CAAC,EAAyB,GAAkB,CAAqB,GACpE,MAAU,MAAM,mDAAmD;CAKpE,OAHI,MAAiB,UACpB,MAAM,EAAyB,GAAkB,GAAuB,CAAY,GAE9E;AACR"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/file-system/isFileSystemNotFoundError.ts","../../src/file-system/fileSystemConstants.ts","../../src/file-system/resolvePathInsideRoot.ts"],"sourcesContent":["import { isRecord } from \"../validators\";\n\n/** Отличает отсутствующий путь от ошибок доступа и I/O, которые вызывающий код обязан обработать отдельно. */\nexport function isFileSystemNotFoundError(error: unknown): boolean {\n\tif (!isRecord(error)) return false;\n\treturn error.code === \"ENOENT\" || error.code === \"ENOTDIR\";\n}\n","/** Режимы realpath общие для публичного типа и выбора фактической проверки пути. */\nexport const PATH_REALPATH_TARGET = \"target\";\nexport const PATH_REALPATH_PARENT = \"parent\";\nexport const PATH_REALPATH_NONE = \"none\";\n","import { PATH_REALPATH_TARGET, PATH_REALPATH_PARENT, PATH_REALPATH_NONE } from \"./fileSystemConstants\";\nimport { type PathRealpathMode, type ResolvePathInsideRootOptions } from \"./fileSystemTypes\";\n\nimport { realpath } from \"node:fs/promises\";\nimport { dirname, isAbsolute, relative, resolve, sep } from \"node:path\";\n\n// Лексическая и realpath-проверка сообщают об одном нарушении границ хранилища.\nconst PATH_OUTSIDE_ROOT_MESSAGE = \"Путь выходит за пределы корневой папки хранилища.\";\n\nfunction resolveStorageRoot(rootPath: string): string {\n\tconst normalizedRootPath = rootPath.trim();\n\tif (!normalizedRootPath) {\n\t\tthrow new Error(\"Корневая папка хранилища не задана.\");\n\t}\n\treturn resolve(normalizedRootPath);\n}\n\nfunction isResolvedPathInsideRoot(rootPath: string, candidatePath: string): boolean {\n\tconst relativePath = relative(rootPath, candidatePath);\n\t// Проверяется сегмент родителя, а не префикс имени: '..metadata' является допустимым файлом внутри root.\n\treturn relativePath === \"\" || (relativePath !== \"..\" && !relativePath.startsWith(`..${sep}`) && !isAbsolute(relativePath));\n}\n\nasync function assertRealPathInsideRoot(\n\trootPath: string,\n\tcandidatePath: string,\n\trealpathMode: Exclude<PathRealpathMode, typeof PATH_REALPATH_NONE>\n): Promise<void> {\n\tlet realRootPath: string;\n\ttry {\n\t\trealRootPath = await realpath(rootPath);\n\t} catch (error) {\n\t\tthrow new Error(\"Корневая папка хранилища недоступна.\", { cause: error });\n\t}\n\tconst pathForRealCheck = realpathMode === PATH_REALPATH_PARENT ? dirname(candidatePath) : candidatePath;\n\tconst realCandidatePath = await realpath(pathForRealCheck);\n\tif (!isResolvedPathInsideRoot(realRootPath, realCandidatePath)) {\n\t\tthrow new Error(PATH_OUTSIDE_ROOT_MESSAGE);\n\t}\n}\n\n/**\n * Нормализует абсолютный путь и запрещает выход за доверенный root.\n * 'target' проверяет существующий файл, 'parent' — каталог перед созданием файла,\n * 'none' выполняет только лексическую проверку и не защищает от символических ссылок.\n * Проверка не открывает файл: защиту от смены пути между проверкой и I/O обеспечивает вызывающий код.\n */\nexport async function resolvePathInsideRoot({\n\trootPath,\n\tpathSegments,\n\trealpathMode = PATH_REALPATH_TARGET\n}: ResolvePathInsideRootOptions): Promise<string> {\n\tconst resolvedRootPath = resolveStorageRoot(rootPath);\n\tconst resolvedCandidatePath = resolve(resolvedRootPath, ...pathSegments);\n\tif (!isResolvedPathInsideRoot(resolvedRootPath, resolvedCandidatePath)) {\n\t\tthrow new Error(PATH_OUTSIDE_ROOT_MESSAGE);\n\t}\n\tif (realpathMode !== PATH_REALPATH_NONE) {\n\t\tawait assertRealPathInsideRoot(resolvedRootPath, resolvedCandidatePath, realpathMode);\n\t}\n\treturn resolvedCandidatePath;\n}\n"],"mappings":";;;;AAGA,SAAgB,EAA0B,GAAyB;CAElE,OADK,EAAS,CAAK,IACZ,EAAM,SAAS,YAAY,EAAM,SAAS,YADpB;AAE9B;;;ACLA,IAAa,IAAuB,UCM9B,IAA4B;AAElC,SAAS,EAAmB,GAA0B;CACrD,IAAM,IAAqB,EAAS,KAAK;CACzC,IAAI,CAAC,GACJ,MAAU,MAAM,qCAAqC;CAEtD,OAAO,EAAQ,CAAkB;AAClC;AAEA,SAAS,EAAyB,GAAkB,GAAgC;CACnF,IAAM,IAAe,EAAS,GAAU,CAAa;CAErD,OAAO,MAAiB,MAAO,MAAiB,QAAQ,CAAC,EAAa,WAAW,KAAK,GAAK,KAAK,CAAC,EAAW,CAAY;AACzH;AAEA,eAAe,EACd,GACA,GACA,GACgB;CAChB,IAAI;CACJ,IAAI;EACH,IAAe,MAAM,EAAS,CAAQ;CACvC,SAAS,GAAO;EACf,MAAU,MAAM,wCAAwC,EAAE,OAAO,EAAM,CAAC;CACzE;CACA,IAAM,IAAmB,MAAA,WAAwC,EAAQ,CAAa,IAAI,GACpF,IAAoB,MAAM,EAAS,CAAgB;CACzD,IAAI,CAAC,EAAyB,GAAc,CAAiB,GAC5D,MAAU,MAAM,CAAyB;AAE3C;AAQA,eAAsB,EAAsB,EAC3C,aACA,iBACA,kBAAe,KACkC;CACjD,IAAM,IAAmB,EAAmB,CAAQ,GAC9C,IAAwB,EAAQ,GAAkB,GAAG,CAAY;CACvE,IAAI,CAAC,EAAyB,GAAkB,CAAqB,GACpE,MAAU,MAAM,CAAyB;CAK1C,OAHI,MAAA,UACH,MAAM,EAAyB,GAAkB,GAAuB,CAAY,GAE9E;AACR"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolvePathInsideRoot.d.ts","sourceRoot":"","sources":["../../src/file-system/resolvePathInsideRoot.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAqC7F;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,EAC3C,QAAQ,EACR,YAAY,EACZ,YAAuB,EACvB,EAAE,4BAA4B,GAAG,OAAO,CAAC,MAAM,CAAC,CAUhD"}
1
+ {"version":3,"file":"resolvePathInsideRoot.d.ts","sourceRoot":"","sources":["../../src/file-system/resolvePathInsideRoot.ts"],"names":[],"mappings":"AACA,OAAO,EAAyB,KAAK,4BAA4B,EAAE,MAAM,mBAAmB,CAAC;AAwC7F;;;;;GAKG;AACH,wBAAsB,qBAAqB,CAAC,EAC3C,QAAQ,EACR,YAAY,EACZ,YAAmC,EACnC,EAAE,4BAA4B,GAAG,OAAO,CAAC,MAAM,CAAC,CAUhD"}
@@ -1 +1 @@
1
- {"version":3,"file":"parseAbapBoolean.d.ts","sourceRoot":"","sources":["../../../src/formatters/boolean/parseAbapBoolean.ts"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGxD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMpD"}
1
+ {"version":3,"file":"parseAbapBoolean.d.ts","sourceRoot":"","sources":["../../../src/formatters/boolean/parseAbapBoolean.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAGxD;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAMpD"}
@@ -1 +1 @@
1
- {"version":3,"file":"toAbapBoolean.d.ts","sourceRoot":"","sources":["../../../src/formatters/boolean/toAbapBoolean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAKzD"}
1
+ {"version":3,"file":"toAbapBoolean.d.ts","sourceRoot":"","sources":["../../../src/formatters/boolean/toAbapBoolean.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG1C,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,WAAW,CAKzD"}
@@ -1 +1 @@
1
- {"version":3,"file":"calendarDate.d.ts","sourceRoot":"","sources":["../../../src/formatters/date/calendarDate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAI,EAAE,MAAM,SAAI,EAAE,MAAM,SAAI,EAAE,WAAW,SAAI,GAAG,IAAI,CAEzI;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAE9C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAE5C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAEhD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAE/C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,SAAI,GAAG,IAAI,CAMjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAEhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAElE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAIxG"}
1
+ {"version":3,"file":"calendarDate.d.ts","sourceRoot":"","sources":["../../../src/formatters/date/calendarDate.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,SAAI,EAAE,MAAM,SAAI,EAAE,MAAM,SAAI,EAAE,WAAW,SAAI,GAAG,IAAI,CAEzI;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAE9C;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAU5C;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAEhD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAE/C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,SAAI,GAAG,IAAI,CAQjE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAEhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAElE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAEjE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAIxG"}
@@ -0,0 +1,13 @@
1
+ /** Календарные границы и единицы времени общие для проверок компонентов и вычисления длительностей. */
2
+ export declare const CALENDAR_DAYS_PER_WEEK = 7;
3
+ export declare const CALENDAR_MONTHS_PER_YEAR = 12;
4
+ export declare const CALENDAR_LAST_HOUR = 23;
5
+ export declare const CALENDAR_LAST_MINUTE = 59;
6
+ export declare const CALENDAR_LAST_SECOND = 59;
7
+ export declare const SECONDS_PER_MINUTE = 60;
8
+ export declare const SECONDS_PER_HOUR = 3600;
9
+ export declare const MS_IN_SECOND = 1000;
10
+ export declare const MS_IN_MINUTE = 60000;
11
+ export declare const MS_IN_HOUR = 3600000;
12
+ export declare const MS_IN_DAY = 86400000;
13
+ //# sourceMappingURL=calendarDateConstants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendarDateConstants.d.ts","sourceRoot":"","sources":["../../../src/formatters/date/calendarDateConstants.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,eAAO,MAAM,sBAAsB,IAAI,CAAC;AACxC,eAAO,MAAM,wBAAwB,KAAK,CAAC;AAC3C,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,gBAAgB,OAAQ,CAAC;AACtC,eAAO,MAAM,YAAY,OAAQ,CAAC;AAClC,eAAO,MAAM,YAAY,QAAS,CAAC;AACnC,eAAO,MAAM,UAAU,UAAY,CAAC;AACpC,eAAO,MAAM,SAAS,WAAa,CAAC"}
@@ -1,5 +1,13 @@
1
- export type CalendarPeriodSelectionMode = "day" | "week" | "month" | "year";
2
- export type CalendarWeekEndDay = "friday" | "saturday" | "sunday";
1
+ /** Значения выбора периода отделены от точности его текстового представления. */
2
+ declare const CALENDAR_PERIOD_MODE_DAY = "day";
3
+ declare const CALENDAR_PERIOD_MODE_WEEK = "week";
4
+ declare const CALENDAR_PERIOD_MODE_MONTH = "month";
5
+ declare const CALENDAR_PERIOD_MODE_YEAR = "year";
6
+ declare const CALENDAR_WEEK_END_FRIDAY = "friday";
7
+ declare const CALENDAR_WEEK_END_SATURDAY = "saturday";
8
+ declare const CALENDAR_WEEK_END_SUNDAY = "sunday";
9
+ export type CalendarPeriodSelectionMode = typeof CALENDAR_PERIOD_MODE_DAY | typeof CALENDAR_PERIOD_MODE_WEEK | typeof CALENDAR_PERIOD_MODE_MONTH | typeof CALENDAR_PERIOD_MODE_YEAR;
10
+ export type CalendarWeekEndDay = typeof CALENDAR_WEEK_END_FRIDAY | typeof CALENDAR_WEEK_END_SATURDAY | typeof CALENDAR_WEEK_END_SUNDAY;
3
11
  export interface CalendarPeriodOptions {
4
12
  /**
5
13
  * Определяет размер выбираемого календарного периода.
@@ -30,4 +38,5 @@ export declare function isDateInsideCalendarPeriod(value: Date | null | undefine
30
38
  * Проверяет, что весь период укладывается в заданные календарные границы выбора.
31
39
  */
32
40
  export declare function isCalendarPeriodWithinDateBounds(period: CalendarPeriod | null | undefined, bounds?: CalendarPeriodDateBounds): boolean;
41
+ export {};
33
42
  //# sourceMappingURL=calendarPeriod.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"calendarPeriod.d.ts","sourceRoot":"","sources":["../../../src/formatters/date/calendarPeriod.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,2BAA2B,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAC5E,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,CAAC;AAElE,MAAM,WAAW,qBAAqB;IACrC;;OAEG;IACH,aAAa,CAAC,EAAE,2BAA2B,CAAC;IAC5C;;OAEG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;CACxB;AAoBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,GAAE,qBAA0B,GAAG,cAAc,GAAG,IAAI,CA4C5H;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAK7H;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC/C,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EACzC,MAAM,GAAE,wBAA6B,GACnC,OAAO,CAOT"}
1
+ {"version":3,"file":"calendarPeriod.d.ts","sourceRoot":"","sources":["../../../src/formatters/date/calendarPeriod.ts"],"names":[],"mappings":"AAaA,iFAAiF;AACjF,QAAA,MAAM,wBAAwB,QAAQ,CAAC;AACvC,QAAA,MAAM,yBAAyB,SAAS,CAAC;AACzC,QAAA,MAAM,0BAA0B,UAAU,CAAC;AAC3C,QAAA,MAAM,yBAAyB,SAAS,CAAC;AACzC,QAAA,MAAM,wBAAwB,WAAW,CAAC;AAC1C,QAAA,MAAM,0BAA0B,aAAa,CAAC;AAC9C,QAAA,MAAM,wBAAwB,WAAW,CAAC;AAE1C,MAAM,MAAM,2BAA2B,GACpC,OAAO,wBAAwB,GAC/B,OAAO,yBAAyB,GAChC,OAAO,0BAA0B,GACjC,OAAO,yBAAyB,CAAC;AACpC,MAAM,MAAM,kBAAkB,GAAG,OAAO,wBAAwB,GAAG,OAAO,0BAA0B,GAAG,OAAO,wBAAwB,CAAC;AAEvI,MAAM,WAAW,qBAAqB;IACrC;;OAEG;IACH,aAAa,CAAC,EAAE,2BAA2B,CAAC;IAC5C;;OAEG;IACH,UAAU,CAAC,EAAE,kBAAkB,CAAC;CAChC;AAED,MAAM,WAAW,cAAc;IAC9B,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,wBAAwB;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;CACxB;AAoBD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,OAAO,GAAE,qBAA0B,GAAG,cAAc,GAAG,IAAI,CA4C5H;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,IAAI,GAAG,IAAI,GAAG,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAK7H;AAED;;GAEG;AACH,wBAAgB,gCAAgC,CAC/C,MAAM,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,EACzC,MAAM,GAAE,wBAA6B,GACnC,OAAO,CAOT"}
@@ -0,0 +1,17 @@
1
+ /** Точность и детализация форматирования сохраняют единые значения для пресетов, проверок и типов. */
2
+ export declare const DATE_FORMAT_PRECISION_DAY = "day";
3
+ export declare const DATE_FORMAT_PRECISION_MONTH = "month";
4
+ export declare const DATE_FORMAT_PRECISION_YEAR = "year";
5
+ export declare const DATE_FORMAT_STYLE_SHORT = "short";
6
+ export declare const DATE_FORMAT_STYLE_MEDIUM = "medium";
7
+ export declare const DATE_FORMAT_STYLE_LONG = "long";
8
+ export declare const INTL_DATE_PART_TWO_DIGIT = "2-digit";
9
+ export declare const INTL_DATE_PART_NUMERIC = "numeric";
10
+ export declare const INTL_DATE_HOUR_CYCLE_23 = "h23";
11
+ export declare const DEFAULT_DATE_LOCALE = "ru-RU";
12
+ /** Текстовый месяц и части formatToParts имеют собственную семантику относительно style-пресетов. */
13
+ export declare const INTL_DATE_MONTH_SHORT = "short";
14
+ export declare const INTL_DATE_MONTH_LONG = "long";
15
+ export declare const INTL_DATE_PART_MONTH = "month";
16
+ export declare const INTL_DATE_PART_YEAR = "year";
17
+ //# sourceMappingURL=dateFormatConstants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dateFormatConstants.d.ts","sourceRoot":"","sources":["../../../src/formatters/date/dateFormatConstants.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,eAAO,MAAM,yBAAyB,QAAQ,CAAC;AAC/C,eAAO,MAAM,2BAA2B,UAAU,CAAC;AACnD,eAAO,MAAM,0BAA0B,SAAS,CAAC;AACjD,eAAO,MAAM,uBAAuB,UAAU,CAAC;AAC/C,eAAO,MAAM,wBAAwB,WAAW,CAAC;AACjD,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAC7C,eAAO,MAAM,wBAAwB,YAAY,CAAC;AAClD,eAAO,MAAM,sBAAsB,YAAY,CAAC;AAChD,eAAO,MAAM,uBAAuB,QAAQ,CAAC;AAC7C,eAAO,MAAM,mBAAmB,UAAU,CAAC;AAE3C,qGAAqG;AACrG,eAAO,MAAM,qBAAqB,UAAU,CAAC;AAC7C,eAAO,MAAM,oBAAoB,SAAS,CAAC;AAC3C,eAAO,MAAM,oBAAoB,UAAU,CAAC;AAC5C,eAAO,MAAM,mBAAmB,SAAS,CAAC"}
@@ -0,0 +1,16 @@
1
+ /** Токены и повторяемые полные шаблоны связывают распознавание ввода с компиляцией форматтеров. */
2
+ export declare const DATE_PATTERN_TOKEN_YEAR = "yyyy";
3
+ export declare const DATE_PATTERN_TOKEN_SHORT_YEAR = "yy";
4
+ export declare const DATE_PATTERN_TOKEN_MONTH = "MM";
5
+ export declare const DATE_PATTERN_TOKEN_DAY = "dd";
6
+ export declare const DATE_PATTERN_TOKEN_HOURS = "HH";
7
+ export declare const DATE_PATTERN_TOKEN_MINUTES = "mm";
8
+ export declare const DATE_PATTERN_TOKEN_SECONDS = "ss";
9
+ export declare const DATE_PATTERN_DAY_MONTH_YEAR_DOTTED = "dd.MM.yyyy";
10
+ export declare const DATE_PATTERN_TIME_MINUTES = "HH:mm";
11
+ export declare const DATE_PATTERN_TIME_SECONDS = "HH:mm:ss";
12
+ export declare const DATE_PATTERN_ABAP_DATE = "yyyyMMdd";
13
+ export declare const DATE_PATTERN_ABAP_DATE_TIME = "yyyyMMddHHmmss";
14
+ export declare const DATE_PATTERN_ISO_DATE = "yyyy-MM-dd";
15
+ export declare const DATE_PATTERN_ISO_DATE_TIME = "yyyy-MM-ddTHH:mm:ss";
16
+ //# sourceMappingURL=datePatternConstants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"datePatternConstants.d.ts","sourceRoot":"","sources":["../../../src/formatters/date/datePatternConstants.ts"],"names":[],"mappings":"AAAA,mGAAmG;AACnG,eAAO,MAAM,uBAAuB,SAAS,CAAC;AAC9C,eAAO,MAAM,6BAA6B,OAAO,CAAC;AAClD,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,sBAAsB,OAAO,CAAC;AAC3C,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAC7C,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAC/C,eAAO,MAAM,kCAAkC,eAAe,CAAC;AAC/D,eAAO,MAAM,yBAAyB,UAAU,CAAC;AACjD,eAAO,MAAM,yBAAyB,aAAa,CAAC;AACpD,eAAO,MAAM,sBAAsB,aAAa,CAAC;AACjD,eAAO,MAAM,2BAA2B,mBAAmB,CAAC;AAC5D,eAAO,MAAM,qBAAqB,eAAe,CAAC;AAClD,eAAO,MAAM,0BAA0B,wBAAwB,CAAC"}