@fgv/ts-web-extras 5.0.2 → 5.1.0-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (383) hide show
  1. package/.rush/temp/chunked-rush-logs/ts-web-extras.build.chunks.jsonl +58 -25
  2. package/.rush/temp/chunked-rush-logs/ts-web-extras.test.chunks.jsonl +70 -0
  3. package/.rush/temp/operation/build/all.log +58 -25
  4. package/.rush/temp/operation/build/error.log +18 -0
  5. package/.rush/temp/operation/build/log-chunks.jsonl +58 -25
  6. package/.rush/temp/operation/build/state.json +1 -1
  7. package/.rush/temp/operation/test/all.log +70 -0
  8. package/.rush/temp/operation/test/error.log +16 -0
  9. package/.rush/temp/operation/test/log-chunks.jsonl +70 -0
  10. package/.rush/temp/operation/test/state.json +3 -0
  11. package/.rush/temp/shrinkwrap-deps.json +175 -163
  12. package/config/jest.config.json +4 -1
  13. package/config/typedoc.json +6 -0
  14. package/dist/index.js +2 -2
  15. package/dist/index.js.map +1 -1
  16. package/dist/packlets/crypto-utils/browserCryptoProvider.js +254 -0
  17. package/dist/packlets/crypto-utils/browserCryptoProvider.js.map +1 -0
  18. package/dist/packlets/crypto-utils/browserHashProvider.js.map +1 -0
  19. package/dist/packlets/{crypto → crypto-utils}/index.js +1 -0
  20. package/dist/packlets/crypto-utils/index.js.map +1 -0
  21. package/dist/packlets/file-api-types/index.js +27 -3
  22. package/dist/packlets/file-api-types/index.js.map +1 -1
  23. package/dist/packlets/file-tree/directoryHandleStore.js +124 -0
  24. package/dist/packlets/file-tree/directoryHandleStore.js.map +1 -0
  25. package/dist/packlets/file-tree/fileApiTreeAccessors.js +91 -0
  26. package/dist/packlets/file-tree/fileApiTreeAccessors.js.map +1 -1
  27. package/dist/packlets/file-tree/fileSystemAccessTreeAccessors.js +414 -0
  28. package/dist/packlets/file-tree/fileSystemAccessTreeAccessors.js.map +1 -0
  29. package/dist/packlets/file-tree/httpTreeAccessors.js +279 -0
  30. package/dist/packlets/file-tree/httpTreeAccessors.js.map +1 -0
  31. package/dist/packlets/file-tree/index.js +4 -0
  32. package/dist/packlets/file-tree/index.js.map +1 -1
  33. package/dist/packlets/file-tree/localStorageTreeAccessors.js +359 -0
  34. package/dist/packlets/file-tree/localStorageTreeAccessors.js.map +1 -0
  35. package/dist/test/mocks/idb-keyval.js +6 -0
  36. package/dist/test/mocks/idb-keyval.js.map +1 -0
  37. package/dist/test/unit/browserHashProvider.test.js +1 -1
  38. package/dist/test/unit/browserHashProvider.test.js.map +1 -1
  39. package/dist/test/unit/directoryHandleStore.test.js +190 -0
  40. package/dist/test/unit/directoryHandleStore.test.js.map +1 -0
  41. package/dist/test/unit/fileApiTreeAccessors.test.js +51 -0
  42. package/dist/test/unit/fileApiTreeAccessors.test.js.map +1 -1
  43. package/dist/test/unit/fileApiTypes.test.js +30 -0
  44. package/dist/test/unit/fileApiTypes.test.js.map +1 -1
  45. package/dist/test/unit/fileSystemAccessTreeAccessors.test.js +622 -0
  46. package/dist/test/unit/fileSystemAccessTreeAccessors.test.js.map +1 -0
  47. package/dist/test/unit/httpTreeAccessors.test.js +1000 -0
  48. package/dist/test/unit/httpTreeAccessors.test.js.map +1 -0
  49. package/dist/test/unit/localStorageTreeAccessors.test.js +812 -0
  50. package/dist/test/unit/localStorageTreeAccessors.test.js.map +1 -0
  51. package/dist/test/utils/fileSystemAccessMocks.js +271 -0
  52. package/dist/test/utils/fileSystemAccessMocks.js.map +1 -0
  53. package/dist/ts-web-extras.d.ts +584 -1
  54. package/dist/tsdoc-metadata.json +1 -1
  55. package/docs/@fgv/namespaces/CryptoUtils/README.md +18 -0
  56. package/docs/@fgv/namespaces/CryptoUtils/classes/BrowserCryptoProvider.md +203 -0
  57. package/docs/@fgv/namespaces/CryptoUtils/classes/BrowserHashProvider.md +63 -0
  58. package/docs/@fgv/namespaces/CryptoUtils/functions/createBrowserCryptoProvider.md +18 -0
  59. package/docs/@fgv/namespaces/FileTreeHelpers/README.md +19 -0
  60. package/docs/@fgv/namespaces/FileTreeHelpers/functions/extractFileListMetadata.md +23 -0
  61. package/docs/@fgv/namespaces/FileTreeHelpers/functions/extractFileMetadata.md +23 -0
  62. package/docs/@fgv/namespaces/FileTreeHelpers/functions/fromDirectoryUpload.md +33 -0
  63. package/docs/@fgv/namespaces/FileTreeHelpers/functions/fromFileList.md +33 -0
  64. package/docs/@fgv/namespaces/FileTreeHelpers/functions/getOriginalFile.md +25 -0
  65. package/docs/@fgv/namespaces/FileTreeHelpers/variables/defaultFileApiTreeInitParams.md +11 -0
  66. package/docs/README.md +78 -0
  67. package/docs/classes/DirectoryHandleStore.md +116 -0
  68. package/docs/classes/FileApiTreeAccessors.md +286 -0
  69. package/docs/classes/FileSystemAccessTreeAccessors.md +557 -0
  70. package/docs/classes/HttpTreeAccessors.md +508 -0
  71. package/docs/classes/LocalStorageTreeAccessors.md +520 -0
  72. package/docs/functions/exportAsJson.md +23 -0
  73. package/docs/functions/exportUsingFileSystemAPI.md +26 -0
  74. package/docs/functions/extractDirectoryPath.md +23 -0
  75. package/docs/functions/isDirectoryHandle.md +23 -0
  76. package/docs/functions/isFileHandle.md +23 -0
  77. package/docs/functions/isFilePath.md +21 -0
  78. package/docs/functions/parseContextFilter.md +22 -0
  79. package/docs/functions/parseQualifierDefaults.md +22 -0
  80. package/docs/functions/parseResourceTypes.md +22 -0
  81. package/docs/functions/parseUrlParameters.md +15 -0
  82. package/docs/functions/safeShowDirectoryPicker.md +24 -0
  83. package/docs/functions/safeShowOpenFilePicker.md +24 -0
  84. package/docs/functions/safeShowSaveFilePicker.md +24 -0
  85. package/docs/functions/supportsFileSystemAccess.md +23 -0
  86. package/docs/interfaces/FilePickerAcceptType.md +16 -0
  87. package/docs/interfaces/FileSystemCreateWritableOptions.md +15 -0
  88. package/docs/interfaces/FileSystemDirectoryHandle.md +187 -0
  89. package/docs/interfaces/FileSystemFileHandle.md +106 -0
  90. package/docs/interfaces/FileSystemGetDirectoryOptions.md +15 -0
  91. package/docs/interfaces/FileSystemGetFileOptions.md +15 -0
  92. package/docs/interfaces/FileSystemHandle.md +69 -0
  93. package/docs/interfaces/FileSystemHandlePermissionDescriptor.md +15 -0
  94. package/docs/interfaces/FileSystemRemoveOptions.md +15 -0
  95. package/docs/interfaces/FileSystemWritableFileStream.md +127 -0
  96. package/docs/interfaces/IDirectoryHandleTreeInitializer.md +17 -0
  97. package/docs/interfaces/IFileHandleTreeInitializer.md +16 -0
  98. package/docs/interfaces/IFileListTreeInitializer.md +15 -0
  99. package/docs/interfaces/IFileMetadata.md +19 -0
  100. package/docs/interfaces/IFileSystemAccessTreeParams.md +30 -0
  101. package/docs/interfaces/IFsAccessApis.md +57 -0
  102. package/docs/interfaces/IHttpTreeParams.md +32 -0
  103. package/docs/interfaces/ILocalStorageTreeParams.md +30 -0
  104. package/docs/interfaces/IUrlConfigOptions.md +27 -0
  105. package/docs/interfaces/ShowDirectoryPickerOptions.md +17 -0
  106. package/docs/interfaces/ShowOpenFilePickerOptions.md +19 -0
  107. package/docs/interfaces/ShowSaveFilePickerOptions.md +19 -0
  108. package/docs/type-aliases/TreeInitializer.md +11 -0
  109. package/docs/type-aliases/WellKnownDirectory.md +11 -0
  110. package/docs/type-aliases/WindowWithFsAccess.md +11 -0
  111. package/docs/variables/DEFAULT_DIRECTORY_HANDLE_DB.md +11 -0
  112. package/docs/variables/DEFAULT_DIRECTORY_HANDLE_STORE.md +11 -0
  113. package/etc/ts-web-extras.api.md +124 -1
  114. package/lib/index.d.ts +2 -1
  115. package/lib/index.d.ts.map +1 -1
  116. package/lib/index.js +25 -2
  117. package/lib/index.js.map +1 -1
  118. package/lib/packlets/crypto-utils/browserCryptoProvider.d.ts +77 -0
  119. package/lib/packlets/crypto-utils/browserCryptoProvider.d.ts.map +1 -0
  120. package/lib/packlets/crypto-utils/browserCryptoProvider.js +259 -0
  121. package/lib/packlets/crypto-utils/browserCryptoProvider.js.map +1 -0
  122. package/lib/packlets/crypto-utils/browserHashProvider.d.ts.map +1 -0
  123. package/lib/packlets/crypto-utils/browserHashProvider.js.map +1 -0
  124. package/lib/packlets/{crypto → crypto-utils}/index.d.ts +1 -0
  125. package/lib/packlets/crypto-utils/index.d.ts.map +1 -0
  126. package/lib/packlets/{crypto → crypto-utils}/index.js +1 -0
  127. package/lib/packlets/crypto-utils/index.js.map +1 -0
  128. package/lib/packlets/file-api-types/index.d.ts.map +1 -1
  129. package/lib/packlets/file-api-types/index.js +27 -3
  130. package/lib/packlets/file-api-types/index.js.map +1 -1
  131. package/lib/packlets/file-tree/directoryHandleStore.d.ts +59 -0
  132. package/lib/packlets/file-tree/directoryHandleStore.d.ts.map +1 -0
  133. package/lib/packlets/file-tree/directoryHandleStore.js +128 -0
  134. package/lib/packlets/file-tree/directoryHandleStore.js.map +1 -0
  135. package/lib/packlets/file-tree/fileApiTreeAccessors.d.ts +66 -0
  136. package/lib/packlets/file-tree/fileApiTreeAccessors.d.ts.map +1 -1
  137. package/lib/packlets/file-tree/fileApiTreeAccessors.js +91 -0
  138. package/lib/packlets/file-tree/fileApiTreeAccessors.js.map +1 -1
  139. package/lib/packlets/file-tree/fileSystemAccessTreeAccessors.d.ts +152 -0
  140. package/lib/packlets/file-tree/fileSystemAccessTreeAccessors.d.ts.map +1 -0
  141. package/lib/packlets/file-tree/fileSystemAccessTreeAccessors.js +418 -0
  142. package/lib/packlets/file-tree/fileSystemAccessTreeAccessors.js.map +1 -0
  143. package/lib/packlets/file-tree/httpTreeAccessors.d.ts +88 -0
  144. package/lib/packlets/file-tree/httpTreeAccessors.d.ts.map +1 -0
  145. package/lib/packlets/file-tree/httpTreeAccessors.js +283 -0
  146. package/lib/packlets/file-tree/httpTreeAccessors.js.map +1 -0
  147. package/lib/packlets/file-tree/index.d.ts +4 -0
  148. package/lib/packlets/file-tree/index.d.ts.map +1 -1
  149. package/lib/packlets/file-tree/index.js +4 -0
  150. package/lib/packlets/file-tree/index.js.map +1 -1
  151. package/lib/packlets/file-tree/localStorageTreeAccessors.d.ts +141 -0
  152. package/lib/packlets/file-tree/localStorageTreeAccessors.d.ts.map +1 -0
  153. package/lib/packlets/file-tree/localStorageTreeAccessors.js +363 -0
  154. package/lib/packlets/file-tree/localStorageTreeAccessors.js.map +1 -0
  155. package/lib/test/mocks/idb-keyval.d.ts +6 -0
  156. package/lib/test/mocks/idb-keyval.d.ts.map +1 -0
  157. package/lib/test/mocks/idb-keyval.js +9 -0
  158. package/lib/test/mocks/idb-keyval.js.map +1 -0
  159. package/lib/test/unit/browserHashProvider.test.js +21 -21
  160. package/lib/test/unit/browserHashProvider.test.js.map +1 -1
  161. package/lib/test/unit/directoryHandleStore.test.d.ts +2 -0
  162. package/lib/test/unit/directoryHandleStore.test.d.ts.map +1 -0
  163. package/lib/test/unit/directoryHandleStore.test.js +192 -0
  164. package/lib/test/unit/directoryHandleStore.test.js.map +1 -0
  165. package/lib/test/unit/fileApiTreeAccessors.test.js +51 -0
  166. package/lib/test/unit/fileApiTreeAccessors.test.js.map +1 -1
  167. package/lib/test/unit/fileApiTypes.test.js +30 -0
  168. package/lib/test/unit/fileApiTypes.test.js.map +1 -1
  169. package/lib/test/unit/fileSystemAccessTreeAccessors.test.d.ts +2 -0
  170. package/lib/test/unit/fileSystemAccessTreeAccessors.test.d.ts.map +1 -0
  171. package/lib/test/unit/fileSystemAccessTreeAccessors.test.js +624 -0
  172. package/lib/test/unit/fileSystemAccessTreeAccessors.test.js.map +1 -0
  173. package/lib/test/unit/httpTreeAccessors.test.d.ts +2 -0
  174. package/lib/test/unit/httpTreeAccessors.test.d.ts.map +1 -0
  175. package/lib/test/unit/httpTreeAccessors.test.js +1002 -0
  176. package/lib/test/unit/httpTreeAccessors.test.js.map +1 -0
  177. package/lib/test/unit/localStorageTreeAccessors.test.d.ts +2 -0
  178. package/lib/test/unit/localStorageTreeAccessors.test.d.ts.map +1 -0
  179. package/lib/test/unit/localStorageTreeAccessors.test.js +814 -0
  180. package/lib/test/unit/localStorageTreeAccessors.test.js.map +1 -0
  181. package/lib/test/utils/fileSystemAccessMocks.d.ts +53 -0
  182. package/lib/test/utils/fileSystemAccessMocks.d.ts.map +1 -0
  183. package/lib/test/utils/fileSystemAccessMocks.js +277 -0
  184. package/lib/test/utils/fileSystemAccessMocks.js.map +1 -0
  185. package/package.json +41 -34
  186. package/rush-logs/ts-web-extras.build.cache.log +0 -1
  187. package/rush-logs/ts-web-extras.build.error.log +18 -0
  188. package/rush-logs/ts-web-extras.build.log +58 -25
  189. package/rush-logs/ts-web-extras.test.cache.log +1 -0
  190. package/rush-logs/ts-web-extras.test.error.log +16 -0
  191. package/rush-logs/ts-web-extras.test.log +70 -0
  192. package/src/index.ts +2 -2
  193. package/src/packlets/crypto-utils/browserCryptoProvider.ts +311 -0
  194. package/src/packlets/{crypto → crypto-utils}/index.ts +1 -0
  195. package/src/packlets/file-api-types/index.ts +24 -3
  196. package/src/packlets/file-tree/directoryHandleStore.ts +136 -0
  197. package/src/packlets/file-tree/fileApiTreeAccessors.ts +108 -0
  198. package/src/packlets/file-tree/fileSystemAccessTreeAccessors.ts +519 -0
  199. package/src/packlets/file-tree/httpTreeAccessors.ts +381 -0
  200. package/src/packlets/file-tree/index.ts +4 -0
  201. package/src/packlets/file-tree/localStorageTreeAccessors.ts +430 -0
  202. package/src/test/mocks/idb-keyval.ts +5 -0
  203. package/src/test/unit/browserHashProvider.test.ts +1 -1
  204. package/src/test/unit/directoryHandleStore.test.ts +251 -0
  205. package/src/test/unit/fileApiTreeAccessors.test.ts +69 -0
  206. package/src/test/unit/fileApiTypes.test.ts +36 -0
  207. package/src/test/unit/fileSystemAccessTreeAccessors.test.ts +885 -0
  208. package/src/test/unit/httpTreeAccessors.test.ts +1278 -0
  209. package/src/test/unit/localStorageTreeAccessors.test.ts +1014 -0
  210. package/src/test/utils/fileSystemAccessMocks.ts +353 -0
  211. package/temp/build/typescript/ts_8nwakTlr.json +1 -0
  212. package/temp/coverage/crypto/browserHashProvider.ts.html +1 -1
  213. package/temp/coverage/crypto/index.html +1 -1
  214. package/temp/coverage/crypto-utils/browserCryptoProvider.ts.html +1018 -0
  215. package/temp/coverage/crypto-utils/browserHashProvider.ts.html +304 -0
  216. package/temp/coverage/crypto-utils/index.html +131 -0
  217. package/temp/coverage/file-tree/directoryHandleStore.ts.html +493 -0
  218. package/temp/coverage/file-tree/fileApiTreeAccessors.ts.html +330 -6
  219. package/temp/coverage/file-tree/fileSystemAccessTreeAccessors.ts.html +1642 -0
  220. package/temp/coverage/file-tree/httpTreeAccessors.ts.html +1228 -0
  221. package/temp/coverage/file-tree/index.html +69 -9
  222. package/temp/coverage/file-tree/localStorageTreeAccessors.ts.html +1375 -0
  223. package/temp/coverage/helpers/fileTreeHelpers.ts.html +1 -1
  224. package/temp/coverage/helpers/index.html +1 -1
  225. package/temp/coverage/index.html +13 -13
  226. package/temp/coverage/lcov-report/crypto/browserHashProvider.ts.html +1 -1
  227. package/temp/coverage/lcov-report/crypto/index.html +1 -1
  228. package/temp/coverage/lcov-report/crypto-utils/browserCryptoProvider.ts.html +1018 -0
  229. package/temp/coverage/lcov-report/crypto-utils/browserHashProvider.ts.html +304 -0
  230. package/temp/coverage/lcov-report/crypto-utils/index.html +131 -0
  231. package/temp/coverage/lcov-report/file-tree/directoryHandleStore.ts.html +493 -0
  232. package/temp/coverage/lcov-report/file-tree/fileApiTreeAccessors.ts.html +330 -6
  233. package/temp/coverage/lcov-report/file-tree/fileSystemAccessTreeAccessors.ts.html +1642 -0
  234. package/temp/coverage/lcov-report/file-tree/httpTreeAccessors.ts.html +1228 -0
  235. package/temp/coverage/lcov-report/file-tree/index.html +69 -9
  236. package/temp/coverage/lcov-report/file-tree/localStorageTreeAccessors.ts.html +1375 -0
  237. package/temp/coverage/lcov-report/helpers/fileTreeHelpers.ts.html +1 -1
  238. package/temp/coverage/lcov-report/helpers/index.html +1 -1
  239. package/temp/coverage/lcov-report/index.html +13 -13
  240. package/temp/coverage/lcov-report/url-utils/index.html +1 -1
  241. package/temp/coverage/lcov-report/url-utils/urlParams.ts.html +1 -1
  242. package/temp/coverage/lcov.info +2829 -428
  243. package/temp/coverage/url-utils/index.html +1 -1
  244. package/temp/coverage/url-utils/urlParams.ts.html +1 -1
  245. package/temp/test/jest/haste-map-b931e4e63102f86c5bd4949f7dced44f-9d713eb41149188b4e5c0ae3d86d0a57-2ad8e16b24e391b8cdbe50b55c137169 +0 -0
  246. package/temp/test/jest/perf-cache-b931e4e63102f86c5bd4949f7dced44f-da39a3ee5e6b4b0d3255bfef95601890 +1 -0
  247. package/temp/ts-web-extras.api.json +5282 -1472
  248. package/temp/ts-web-extras.api.md +124 -1
  249. package/dist/packlets/crypto/browserHashProvider.js.map +0 -1
  250. package/dist/packlets/crypto/index.js.map +0 -1
  251. package/docs/index.md +0 -34
  252. package/docs/ts-web-extras.browserhashprovider.hashparts.md +0 -88
  253. package/docs/ts-web-extras.browserhashprovider.hashstring.md +0 -72
  254. package/docs/ts-web-extras.browserhashprovider.md +0 -66
  255. package/docs/ts-web-extras.exportasjson.md +0 -70
  256. package/docs/ts-web-extras.exportusingfilesystemapi.md +0 -104
  257. package/docs/ts-web-extras.extractdirectorypath.md +0 -52
  258. package/docs/ts-web-extras.fileapitreeaccessors.create.md +0 -72
  259. package/docs/ts-web-extras.fileapitreeaccessors.extractfilemetadata.md +0 -54
  260. package/docs/ts-web-extras.fileapitreeaccessors.fromdirectoryupload.md +0 -72
  261. package/docs/ts-web-extras.fileapitreeaccessors.fromfilelist.md +0 -72
  262. package/docs/ts-web-extras.fileapitreeaccessors.getoriginalfile.md +0 -72
  263. package/docs/ts-web-extras.fileapitreeaccessors.md +0 -114
  264. package/docs/ts-web-extras.filepickeraccepttype.accept.md +0 -11
  265. package/docs/ts-web-extras.filepickeraccepttype.description.md +0 -11
  266. package/docs/ts-web-extras.filepickeraccepttype.md +0 -75
  267. package/docs/ts-web-extras.filesystemcreatewritableoptions_2.keepexistingdata.md +0 -11
  268. package/docs/ts-web-extras.filesystemcreatewritableoptions_2.md +0 -58
  269. package/docs/ts-web-extras.filesystemdirectoryhandle_2._symbol.asynciterator_.md +0 -15
  270. package/docs/ts-web-extras.filesystemdirectoryhandle_2.entries.md +0 -15
  271. package/docs/ts-web-extras.filesystemdirectoryhandle_2.getdirectoryhandle.md +0 -66
  272. package/docs/ts-web-extras.filesystemdirectoryhandle_2.getfilehandle.md +0 -66
  273. package/docs/ts-web-extras.filesystemdirectoryhandle_2.keys.md +0 -15
  274. package/docs/ts-web-extras.filesystemdirectoryhandle_2.kind.md +0 -11
  275. package/docs/ts-web-extras.filesystemdirectoryhandle_2.md +0 -146
  276. package/docs/ts-web-extras.filesystemdirectoryhandle_2.removeentry.md +0 -66
  277. package/docs/ts-web-extras.filesystemdirectoryhandle_2.resolve.md +0 -50
  278. package/docs/ts-web-extras.filesystemdirectoryhandle_2.values.md +0 -15
  279. package/docs/ts-web-extras.filesystemfilehandle_2.createwritable.md +0 -52
  280. package/docs/ts-web-extras.filesystemfilehandle_2.getfile.md +0 -15
  281. package/docs/ts-web-extras.filesystemfilehandle_2.kind.md +0 -11
  282. package/docs/ts-web-extras.filesystemfilehandle_2.md +0 -92
  283. package/docs/ts-web-extras.filesystemgetdirectoryoptions_2.create.md +0 -11
  284. package/docs/ts-web-extras.filesystemgetdirectoryoptions_2.md +0 -58
  285. package/docs/ts-web-extras.filesystemgetfileoptions_2.create.md +0 -11
  286. package/docs/ts-web-extras.filesystemgetfileoptions_2.md +0 -58
  287. package/docs/ts-web-extras.filesystemhandle_2.issameentry.md +0 -50
  288. package/docs/ts-web-extras.filesystemhandle_2.kind.md +0 -11
  289. package/docs/ts-web-extras.filesystemhandle_2.md +0 -119
  290. package/docs/ts-web-extras.filesystemhandle_2.name.md +0 -11
  291. package/docs/ts-web-extras.filesystemhandle_2.querypermission.md +0 -52
  292. package/docs/ts-web-extras.filesystemhandle_2.requestpermission.md +0 -52
  293. package/docs/ts-web-extras.filesystemhandlepermissiondescriptor.md +0 -58
  294. package/docs/ts-web-extras.filesystemhandlepermissiondescriptor.mode.md +0 -11
  295. package/docs/ts-web-extras.filesystemremoveoptions_2.md +0 -58
  296. package/docs/ts-web-extras.filesystemremoveoptions_2.recursive.md +0 -11
  297. package/docs/ts-web-extras.filesystemwritablefilestream_2.md +0 -57
  298. package/docs/ts-web-extras.filesystemwritablefilestream_2.seek.md +0 -50
  299. package/docs/ts-web-extras.filesystemwritablefilestream_2.truncate.md +0 -50
  300. package/docs/ts-web-extras.filesystemwritablefilestream_2.write.md +0 -50
  301. package/docs/ts-web-extras.filetreehelpers.defaultfileapitreeinitparams.md +0 -13
  302. package/docs/ts-web-extras.filetreehelpers.extractfilelistmetadata.md +0 -56
  303. package/docs/ts-web-extras.filetreehelpers.extractfilemetadata.md +0 -56
  304. package/docs/ts-web-extras.filetreehelpers.fromdirectoryupload.md +0 -76
  305. package/docs/ts-web-extras.filetreehelpers.fromfilelist.md +0 -76
  306. package/docs/ts-web-extras.filetreehelpers.getoriginalfile.md +0 -72
  307. package/docs/ts-web-extras.filetreehelpers.md +0 -102
  308. package/docs/ts-web-extras.idirectoryhandletreeinitializer.dirhandles.md +0 -11
  309. package/docs/ts-web-extras.idirectoryhandletreeinitializer.md +0 -100
  310. package/docs/ts-web-extras.idirectoryhandletreeinitializer.nonrecursive.md +0 -11
  311. package/docs/ts-web-extras.idirectoryhandletreeinitializer.prefix.md +0 -11
  312. package/docs/ts-web-extras.ifilehandletreeinitializer.filehandles.md +0 -11
  313. package/docs/ts-web-extras.ifilehandletreeinitializer.md +0 -79
  314. package/docs/ts-web-extras.ifilehandletreeinitializer.prefix.md +0 -11
  315. package/docs/ts-web-extras.ifilelisttreeinitializer.filelist.md +0 -11
  316. package/docs/ts-web-extras.ifilelisttreeinitializer.md +0 -58
  317. package/docs/ts-web-extras.ifilemetadata.lastmodified.md +0 -11
  318. package/docs/ts-web-extras.ifilemetadata.md +0 -124
  319. package/docs/ts-web-extras.ifilemetadata.name.md +0 -11
  320. package/docs/ts-web-extras.ifilemetadata.path.md +0 -11
  321. package/docs/ts-web-extras.ifilemetadata.size.md +0 -11
  322. package/docs/ts-web-extras.ifilemetadata.type.md +0 -11
  323. package/docs/ts-web-extras.ifsaccessapis.md +0 -56
  324. package/docs/ts-web-extras.ifsaccessapis.showdirectorypicker.md +0 -52
  325. package/docs/ts-web-extras.ifsaccessapis.showopenfilepicker.md +0 -52
  326. package/docs/ts-web-extras.ifsaccessapis.showsavefilepicker.md +0 -52
  327. package/docs/ts-web-extras.isdirectoryhandle.md +0 -56
  328. package/docs/ts-web-extras.isfilehandle.md +0 -56
  329. package/docs/ts-web-extras.isfilepath.md +0 -52
  330. package/docs/ts-web-extras.iurlconfigoptions.config.md +0 -13
  331. package/docs/ts-web-extras.iurlconfigoptions.configstartdir.md +0 -13
  332. package/docs/ts-web-extras.iurlconfigoptions.contextfilter.md +0 -13
  333. package/docs/ts-web-extras.iurlconfigoptions.input.md +0 -13
  334. package/docs/ts-web-extras.iurlconfigoptions.inputstartdir.md +0 -13
  335. package/docs/ts-web-extras.iurlconfigoptions.interactive.md +0 -13
  336. package/docs/ts-web-extras.iurlconfigoptions.loadzip.md +0 -13
  337. package/docs/ts-web-extras.iurlconfigoptions.maxdistance.md +0 -13
  338. package/docs/ts-web-extras.iurlconfigoptions.md +0 -286
  339. package/docs/ts-web-extras.iurlconfigoptions.qualifierdefaults.md +0 -13
  340. package/docs/ts-web-extras.iurlconfigoptions.reducequalifiers.md +0 -13
  341. package/docs/ts-web-extras.iurlconfigoptions.resourcetypes.md +0 -13
  342. package/docs/ts-web-extras.iurlconfigoptions.zipfile.md +0 -13
  343. package/docs/ts-web-extras.iurlconfigoptions.zippath.md +0 -13
  344. package/docs/ts-web-extras.md +0 -512
  345. package/docs/ts-web-extras.parsecontextfilter.md +0 -52
  346. package/docs/ts-web-extras.parsequalifierdefaults.md +0 -52
  347. package/docs/ts-web-extras.parseresourcetypes.md +0 -52
  348. package/docs/ts-web-extras.parseurlparameters.md +0 -17
  349. package/docs/ts-web-extras.safeshowdirectorypicker.md +0 -72
  350. package/docs/ts-web-extras.safeshowopenfilepicker.md +0 -72
  351. package/docs/ts-web-extras.safeshowsavefilepicker.md +0 -72
  352. package/docs/ts-web-extras.showdirectorypickeroptions.id.md +0 -11
  353. package/docs/ts-web-extras.showdirectorypickeroptions.md +0 -96
  354. package/docs/ts-web-extras.showdirectorypickeroptions.mode.md +0 -11
  355. package/docs/ts-web-extras.showdirectorypickeroptions.startin.md +0 -11
  356. package/docs/ts-web-extras.showopenfilepickeroptions.excludeacceptalloption.md +0 -11
  357. package/docs/ts-web-extras.showopenfilepickeroptions.id.md +0 -11
  358. package/docs/ts-web-extras.showopenfilepickeroptions.md +0 -134
  359. package/docs/ts-web-extras.showopenfilepickeroptions.multiple.md +0 -11
  360. package/docs/ts-web-extras.showopenfilepickeroptions.startin.md +0 -11
  361. package/docs/ts-web-extras.showopenfilepickeroptions.types.md +0 -11
  362. package/docs/ts-web-extras.showsavefilepickeroptions.excludeacceptalloption.md +0 -11
  363. package/docs/ts-web-extras.showsavefilepickeroptions.id.md +0 -11
  364. package/docs/ts-web-extras.showsavefilepickeroptions.md +0 -134
  365. package/docs/ts-web-extras.showsavefilepickeroptions.startin.md +0 -11
  366. package/docs/ts-web-extras.showsavefilepickeroptions.suggestedname.md +0 -11
  367. package/docs/ts-web-extras.showsavefilepickeroptions.types.md +0 -11
  368. package/docs/ts-web-extras.supportsfilesystemaccess.md +0 -56
  369. package/docs/ts-web-extras.treeinitializer.md +0 -15
  370. package/docs/ts-web-extras.wellknowndirectory.md +0 -13
  371. package/docs/ts-web-extras.windowwithfsaccess.md +0 -15
  372. package/lib/packlets/crypto/browserHashProvider.d.ts.map +0 -1
  373. package/lib/packlets/crypto/browserHashProvider.js.map +0 -1
  374. package/lib/packlets/crypto/index.d.ts.map +0 -1
  375. package/lib/packlets/crypto/index.js.map +0 -1
  376. package/temp/build/typescript/ts_vnCx6LlY.json +0 -1
  377. package/temp/test/jest/haste-map-7492f1b44480e0cdd1f220078fb3afd8-c8dd6c3430605adeb2f1cadf4f75e791-8c9336785555d572065b28c111982ba4 +0 -0
  378. package/temp/test/jest/perf-cache-7492f1b44480e0cdd1f220078fb3afd8-da39a3ee5e6b4b0d3255bfef95601890 +0 -1
  379. /package/dist/packlets/{crypto → crypto-utils}/browserHashProvider.js +0 -0
  380. /package/lib/packlets/{crypto → crypto-utils}/browserHashProvider.d.ts +0 -0
  381. /package/lib/packlets/{crypto → crypto-utils}/browserHashProvider.js +0 -0
  382. /package/src/packlets/{crypto → crypto-utils}/browserHashProvider.ts +0 -0
  383. /package/temp/test/jest/{jest-transform-cache-7492f1b44480e0cdd1f220078fb3afd8-79ef2876fae7ca75eedb2aa53dc48338/0e/package_0eb6535f5987849d93ea51ef33a14cf6 → jest-transform-cache-b931e4e63102f86c5bd4949f7dced44f-79ef2876fae7ca75eedb2aa53dc48338/b5/package_b5f57afc9ec2c011239b1608ee5bdfa5} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"fileApiTreeAccessors.test.js","sourceRoot":"","sources":["../../../src/test/unit/fileApiTreeAccessors.test.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;;;;;;;;;;;;;;;AAEH,8BAA4B;AAC5B,wDAAgE;AAChE,oDAAyD;AACzD,sDAK8B;AAE9B,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,QAAQ,CAAC,wBAAwB,EAAE,GAAG,EAAE;QACtC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;YACtB,IAAI,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;gBACpE,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBAErF,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,+CAA+C;oBAC/C,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;oBAE/B,uEAAuE;oBACvE,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBACjD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,CAAC;gBACjC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;gBACpE,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBAErF,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBACtF,qEAAqE;gBACrE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;gBACxC,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC;oBAClC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE;oBAC1C,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE;iBAC3C,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBACnD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACrD,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC;oBAC3C,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,uBAAuB,EAAE;oBAC1D,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBACtD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBAE5D,yBAAyB;oBACzB,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBAClD,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACvD,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;gBAC/C,+DAA+D;gBAC/D,MAAM,OAAO,GAAG;oBACd,IAAI,EAAE,SAAS;oBACf,IAAI,EAAE,EAAE;oBACR,IAAI,EAAE,YAAY;oBAClB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;oBACxB,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;iBACtC,CAAC;gBAErB,gCAAgC;gBAChC,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE,CAAC;gBAC9B,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACtB,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC;gBAE1B,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;gBAC3C,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,EAAE,CAAC,CAAC;gBACxC,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;gBACjC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;gBAC5E,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAEhF,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,uEAAuE;oBACvE,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;oBACjD,MAAM,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,CAAC;oBAE/B,+BAA+B;oBAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;oBAC1D,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBAC3C,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;gBACxD,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAEhG,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBACtF,sDAAsD;gBACtD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;gBAC5D,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC;oBAC3C,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,kBAAkB,EAAE;oBAC7D,EAAE,IAAI,EAAE,mBAAmB,EAAE,OAAO,EAAE,kBAAkB,EAAE;iBAC3D,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,kDAAkD;oBAClD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE;wBAC7E,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;oBACzC,CAAC,CAAC,CAAC;oBACH,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE;wBAC1E,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;oBACrC,CAAC,CAAC,CAAC;oBAEH,+BAA+B;oBAC/B,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;oBAChG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;gBAC/F,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;YAC5B,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;gBAChD,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC;oBAClC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE;oBAC1C,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE;iBAC3C,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACjE,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBACnD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACrD,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;gBAC5D,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAEhF,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;gBACzF,gDAAgD;gBAChD,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;gBACxC,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,EAAE,CAAC,CAAC;gBACxC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACjE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;gBACjD,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBAErF,6CAA6C;gBAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;oBACzB,MAAM,OAAO,GAAG,MAAM,IAAA,2BAAa,EAAC,IAAI,CAAC,CAAC;oBAC1C,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7B,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;YACnC,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;gBAC3D,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC;oBAC3C,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,sBAAsB,EAAE;oBACjE,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,iCAAiC,EAAE;oBAC5E,EAAE,IAAI,EAAE,sBAAsB,EAAE,OAAO,EAAE,0BAA0B,EAAE;iBACtE,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;gBACxE,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBAC9D,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBAC9D,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBAE9D,4BAA4B;oBAC5B,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBACtD,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC5D,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,6CAA6C,EAAE,KAAK,IAAI,EAAE;gBAC7D,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC;oBAC3C,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,sBAAsB,EAAE;iBAC7D,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC/F,0DAA0D;gBAC1D,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;YAC7B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;gBACrD,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC;oBAC3C,EAAE,IAAI,EAAE,gCAAgC,EAAE,OAAO,EAAE,cAAc,EAAE;oBACnE,EAAE,IAAI,EAAE,qBAAqB,EAAE,OAAO,EAAE,eAAe,EAAE;iBAC1D,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;gBACxE,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,iCAAiC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBACxE,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBAE7D,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBACnD,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBAC1D,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,wBAAwB,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBACpE,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC3D,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;YAC/B,IAAI,CAAC,gCAAgC,EAAE,GAAG,EAAE;gBAC1C,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC;oBAClC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,gBAAgB,EAAE;oBACjD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE;iBAChD,CAAC,CAAC;gBAEH,MAAM,MAAM,GAAG,gCAAoB,CAAC,eAAe,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;gBAC5E,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC1C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACvC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;gBAC5C,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAEhG,MAAM,MAAM,GAAG,gCAAoB,CAAC,eAAe,CAAC,QAAQ,EAAE,iBAAiB,CAAC,CAAC;gBACjF,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC1C,MAAM,CAAE,IAAY,CAAC,kBAAkB,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;gBACnE,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;gBACvC,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAElF,MAAM,MAAM,GAAG,gCAAoB,CAAC,eAAe,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;gBAC7E,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,8BAA8B,CAAC,CAAC;YAC5D,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE;gBAClC,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,EAAE,CAAC,CAAC;gBACxC,MAAM,MAAM,GAAG,gCAAoB,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;gBACzE,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;YACnC,IAAI,CAAC,sCAAsC,EAAE,GAAG,EAAE;gBAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;gBAC5B,MAAM,IAAI,GAAG,IAAA,4BAAc,EAAC;oBAC1B,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,SAAS;oBAClB,IAAI,EAAE,YAAY;oBAClB,YAAY,EAAE,QAAQ;iBACvB,CAAC,CAAC;gBAEH,MAAM,QAAQ,GAAG,gCAAoB,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAChE,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;oBACxB,IAAI,EAAE,YAAY;oBAClB,YAAY,EAAE,QAAQ;iBACvB,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,2CAA2C,EAAE,GAAG,EAAE;gBACrD,MAAM,IAAI,GAAG,IAAA,4BAAc,EAAC;oBAC1B,IAAI,EAAE,UAAU;oBAChB,OAAO,EAAE,SAAS;oBAClB,IAAI,EAAE,YAAY;oBAClB,kBAAkB,EAAE,iBAAiB;iBACtC,CAAC,CAAC;gBAEH,MAAM,QAAQ,GAAG,gCAAoB,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBAChE,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC;oBACvB,IAAI,EAAE,iBAAiB;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;oBACxB,IAAI,EAAE,YAAY;oBAClB,YAAY,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC;iBACjC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;;gBACvD,MAAM,KAAK,GAAG;oBACZ,IAAA,4BAAc,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;oBACzE,IAAA,4BAAc,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC;oBAC9E,IAAA,4BAAc,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;iBACrG,CAAC;gBAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gCAAoB,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrF,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;gBAEjC,MAAM,CAAC,MAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,0CAAE,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBAC7E,MAAM,CAAC,MAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,0CAAE,IAAI,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;gBACpF,MAAM,CAAC,MAAA,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,0CAAE,IAAI,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;YAC5F,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE;gBACpC,MAAM,KAAK,GAAW,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gCAAoB,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrF,MAAM,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;YACnC,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;gBAC/B,MAAM,YAAY,GAAG,IAAI,CAAC;gBAC1B,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBAErC,MAAM,KAAK,GAAG;oBACZ,IAAA,4BAAc,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC;oBAC5D,IAAA,4BAAc,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;iBAC3D,CAAC;gBAEF,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gCAAoB,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrF,MAAM,SAAS,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;gBAC/D,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC;gBAE7D,MAAM,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAI,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;gBAC3C,MAAM,CAAC,QAAQ,aAAR,QAAQ,uBAAR,QAAQ,CAAE,IAAI,CAAC,CAAC,eAAe,CAAC,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,IAAK,CAAC,CAAC;YAC3D,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACzC,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;YAC/D,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC;gBAC3C,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,kBAAkB,EAAE;gBACzD,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,uBAAuB,EAAE;aAC9D,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC9C,mBAAmB;gBACnB,MAAM,QAAQ,GAAG,QAAQ,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC;gBACvD,MAAM,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE;oBAC5C,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;oBACpC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACrC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBACrC,CAAC,CAAC,CAAC;gBAEH,wBAAwB;gBACxB,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;gBACnD,MAAM,CAAC,SAAS,CAAC,CAAC,mBAAmB,CAAC,CAAC,GAAG,EAAE,EAAE;oBAC5C,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBAClC,CAAC,CAAC,CAAC;gBAEH,yBAAyB;gBACzB,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC;gBAClE,MAAM,CAAC,OAAO,CAAC,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;YACpD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC5D,MAAM,WAAW,GAAG,sCAAsC,CAAC;YAC3D,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC;YAEtF,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC9C,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;gBAC/C,MAAM,CAAC,IAAI,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC5C,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;oBAC1C,MAAM,CAAC,UAAU,CAAC,CAAC,mBAAmB,CAAC,CAAC,MAAM,EAAE,EAAE;wBAChD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;oBAC7D,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;YAC9C,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC;gBAC3C,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE;gBAC9C,EAAE,IAAI,EAAE,eAAe,EAAE,OAAO,EAAE,UAAU,EAAE;aAC/C,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;gBAC9C,MAAM,MAAM,GAAG,QAAQ,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;gBAC7C,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,GAAG,EAAE,EAAE;oBACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;oBACnC,MAAM,CAAC,QAAQ,CAAC,CAAC,mBAAmB,CAAC,CAAC,UAAU,EAAE,EAAE;wBAClD,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;wBACnC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;wBAC7D,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;oBACxD,CAAC,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gBAAgB,EAAE,GAAG,EAAE;QAC9B,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACrD,kDAAkD;YAClD,MAAM,SAAS,GAAG;gBAChB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,EAAE;gBACR,IAAI,EAAE,YAAY;gBAClB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;gBACxB,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;aACjC,CAAC;YAErB,gCAAgC;YAChC,MAAM,EAAE,GAAG,IAAI,YAAY,EAAE,CAAC;YAC9B,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACxB,MAAM,QAAQ,GAAG,EAAE,CAAC,KAAK,CAAC;YAE1B,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/D,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,4CAA4C,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACvD,6DAA6D;YAC7D,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC;gBAClC,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,gCAAgC;aAClE,CAAC,CAAC;YAEH,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;YAC/D,kEAAkE;YAClE,IAAI,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC;gBACvB,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;YAC7B,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,6CAA6C,EAAE,GAAG,EAAE;QAC3D,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACrC,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;gBAC5D,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC;oBAClC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE;oBAC1C,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE;iBAC3C,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;oBAC7E,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;gBAC/E,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;gBACtE,MAAM,SAAS,GAAG,IAAA,gCAAkB,EAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;gBACjG,MAAM,SAAS,GAAG,IAAA,gCAAkB,EAAC,CAAC,EAAE,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC;gBAEjG,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;gBACxE,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;oBAC3F,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,mBAAmB,CAAC,CAAC,CAAC,aAAa,CAAC,iBAAiB,CAAC,CAAC;gBAC7F,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,EAAE,CAAC,CAAC;gBACxC,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;gBACjC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;gBACjE,sDAAsD;gBACtD,MAAM,WAAW,GAAG;oBAClB,IAAI,EAAE,aAAa;oBACnB,IAAI,EAAE,EAAE;oBACR,IAAI,EAAE,YAAY;oBAClB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;oBACxB,kBAAkB,EAAE,EAAE;oBACtB,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC;oBACxD,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE;oBAClC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;oBACtD,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;iBACL,CAAC;gBAErB,gDAAgD;gBAChD,MAAM,QAAQ,GAAG;oBACf,MAAM,EAAE,CAAC;oBACT,IAAI,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC3D,CAAC,CAAC,CAAC,EAAE,WAAW;oBAChB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;wBAC1B,MAAM,WAAW,CAAC;oBACpB,CAAC;iBACU,CAAC;gBAEd,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,mDAAmD,CAAC,CAAC;YACjF,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,wEAAwE,EAAE,KAAK,IAAI,EAAE;gBACxF,gEAAgE;gBAChE,MAAM,oBAAoB,GAAG;oBAC3B,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,EAAE;oBACR,IAAI,EAAE,YAAY;oBAClB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;oBACxB,kBAAkB,EAAE,yBAAyB,EAAE,mBAAmB;oBAClE,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC;oBAC/C,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE;oBAClC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;oBACtD,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;iBACL,CAAC;gBAErB,MAAM,oBAAoB,GAAG;oBAC3B,IAAI,EAAE,iBAAiB,EAAE,gCAAgC;oBACzD,IAAI,EAAE,EAAE;oBACR,IAAI,EAAE,YAAY;oBAClB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE;oBACxB,kBAAkB,EAAE,EAAE,EAAE,0BAA0B;oBAClD,IAAI,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC;oBACpD,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,cAAc,EAAE;oBAClC,WAAW,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;oBACtD,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;iBACL,CAAC;gBAErB,yDAAyD;gBACzD,MAAM,QAAQ,GAAG;oBACf,MAAM,EAAE,CAAC;oBACT,IAAI,EAAE,CAAC,KAAa,EAAE,EAAE;wBACtB,IAAI,KAAK,KAAK,CAAC;4BAAE,OAAO,oBAAoB,CAAC;wBAC7C,IAAI,KAAK,KAAK,CAAC;4BAAE,OAAO,oBAAoB,CAAC;wBAC7C,OAAO,IAAI,CAAC;oBACd,CAAC;oBACD,CAAC,CAAC,CAAC,EAAE,oBAAoB;oBACzB,CAAC,CAAC,CAAC,EAAE,oBAAoB;oBACzB,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;wBAC1B,MAAM,oBAAoB,CAAC;wBAC3B,MAAM,oBAAoB,CAAC;oBAC7B,CAAC;iBACU,CAAC;gBAEd,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACpC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,wEAAwE;oBACxE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAC,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;oBAClG,0DAA0D;oBAC1D,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,uBAAuB,CAAC,CAAC;gBACjG,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;YACjD,SAAS,oBAAoB,CAC3B,IAAY,EACZ,OAAe;gBAEf,MAAM,QAAQ,GAAG,IAAA,4BAAc,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBACnD,OAAO;oBACL,IAAI,EAAE,MAAM;oBACZ,IAAI;oBACJ,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC1B,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC5B,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,CAAC;oBAC9C,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;iBACmD,CAAC;YACjF,CAAC;YAED,IAAI,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;gBACxE,MAAM,WAAW,GAAG,oBAAoB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;gBAC5E,MAAM,WAAW,GAAG,oBAAoB,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;gBAE5E,MAAM,YAAY,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,CAAC,CAAC;gBACnE,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;oBACvF,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;gBACzF,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC;gBAC/C,MAAM,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,gBAAgB,EAAE,CAAC;YACjD,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;gBAChG,MAAM,UAAU,GAAG,oBAAoB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;gBAEpE,MAAM,YAAY,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACrD,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,mCAAmC;oBACnC,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;gBAClF,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,qFAAqF,EAAE,KAAK,IAAI,EAAE;gBACrG,MAAM,UAAU,GAAG,oBAAoB,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;gBAEpE,8FAA8F;gBAC9F,sFAAsF;gBACtF,MAAM,YAAY,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;gBACzE,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,qFAAqF;oBACrF,qDAAqD;oBACrD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;gBAClF,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;gBAC1D,MAAM,aAAa,GAAG;oBACpB,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC1B,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC5B,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;oBACrE,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;iBACmD,CAAC;gBAE/E,MAAM,YAAY,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,6DAA6D,CAAC,CAAC;YAC3F,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,0CAA0C,EAAE,KAAK,IAAI,EAAE;gBAC1D,MAAM,YAAY,GAAG,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,CAAC;gBAC3C,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;gBACjC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;YACtD,SAAS,yBAAyB,CAChC,IAAY,EACZ,OAKE;gBAEF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;;oBACxC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;wBACtB,MAAM,YAAY,GAChB,CAAA,MAAA,KAAK,CAAC,QAAQ,0CAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;4BAC9B,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,OAAO,EAAE,IAAI;iCACV,EAAE,EAAE;iCACJ,iBAAiB,CAAC,IAAA,4BAAc,EAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;yBACnF,CAAC,CAAC,KAAI,EAAE,CAAC;wBAEZ,OAAO;4BACL,IAAI,EAAE,WAAoB;4BAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;gCACzB,CAAC,MAAM,CAAC,aAAa,CAAC;;wCAC3B,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;4CACjC,oBAAM,KAAK,CAAA,CAAC;wCACd,CAAC;oCACH,CAAC;iCAAA;6BACF,CAAC;yBACH,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,OAAO;4BACL,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,OAAO,EAAE,IAAI;iCACV,EAAE,EAAE;iCACJ,iBAAiB,CAAC,IAAA,4BAAc,EAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;yBACzF,CAAC;oBACJ,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,IAAI,EAAE,WAAW;oBACjB,IAAI;oBACJ,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC1B,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC5B,kBAAkB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC7B,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;oBACxB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;oBAClB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;oBACf,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;wBACzB,CAAC,MAAM,CAAC,aAAa,CAAC;;gCAC3B,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;oCAChC,oBAAM,KAAK,CAAA,CAAC;gCACd,CAAC;4BACH,CAAC;yBAAA;qBACF,CAAC;oBACF,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;oBAClB,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;iBACgD,CAAC;YACtF,CAAC;YAED,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;gBAC7E,MAAM,SAAS,GAAG,yBAAyB,CAAC,SAAS,EAAE;oBACrD,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE;oBAC/C,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE;iBAChD,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACnD,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;oBAC1F,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;gBAC5F,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,6DAA6D,EAAE,KAAK,IAAI,EAAE;gBAC7E,MAAM,SAAS,GAAG,yBAAyB,CAAC,MAAM,EAAE;oBAClD,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,sBAAsB,EAAE;iBACzD,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC;gBACtE,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,2BAA2B,CAAC,CAAC,CAAC,aAAa,CAC7E,sBAAsB,CACvB,CAAC;gBACJ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;gBACxD,MAAM,SAAS,GAAG,yBAAyB,CAAC,MAAM,EAAE;oBAClD,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE;oBAC1C;wBACE,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,IAAI;wBACjB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;qBAC3D;iBACF,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBACnD,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;oBAClF,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,yBAAyB,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;gBAC/F,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;gBAC5D,MAAM,SAAS,GAAG,yBAAyB,CAAC,MAAM,EAAE;oBAClD,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE;oBAC1C;wBACE,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,IAAI;wBACjB,QAAQ,EAAE,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC;qBAC3D;iBACF,CAAC,CAAC;gBAEH,MAAM,YAAY,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;gBACvE,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,gBAAgB,CAAC,CAAC,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;oBAClF,uDAAuD;oBACvD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;gBAC/D,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,oCAAoC,EAAE,KAAK,IAAI,EAAE;gBACpD,MAAM,gBAAgB,GAAG;oBACvB,IAAI,EAAE,WAAoB;oBAC1B,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC1B,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC5B,kBAAkB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC7B,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;oBACxB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;oBAClB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;oBACf,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;wBACzB,CAAC,MAAM,CAAC,aAAa,CAAC;;gCAC3B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;4BAC7C,CAAC;yBAAA;qBACF,CAAC;oBACF,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;oBAClB,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;iBACgD,CAAC;gBAEpF,MAAM,YAAY,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;gBAC1D,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,kEAAkE,CAAC,CAAC;YAChG,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;gBAC3E,mEAAmE;gBACnE,MAAM,aAAa,GAAG;oBACpB,IAAI,EAAE,WAAoB;oBAC1B,IAAI,EAAE,gBAAgB;oBACtB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC1B,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC5B,kBAAkB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC7B,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;oBACxB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;oBAClB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;oBACf,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;wBACzB,CAAC,MAAM,CAAC,aAAa,CAAC;;gCAC3B,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;4BAChD,CAAC;yBAAA;qBACF,CAAC;oBACF,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;oBAClB,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;iBAClC,CAAC;gBAEF,MAAM,aAAa,GAAG;oBACpB,IAAI,EAAE,WAAoB;oBAC1B,IAAI,EAAE,MAAM;oBACZ,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC1B,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC5B,kBAAkB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC7B,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;oBACxB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;oBAClB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;oBACf,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;wBACzB,CAAC,MAAM,CAAC,aAAa,CAAC;;gCAC3B,oBAAM,aAAa,CAAA,CAAC,CAAC,8BAA8B;4BACrD,CAAC;yBAAA;qBACF,CAAC;oBACF,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;oBAClB,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;iBACgD,CAAC;gBAEpF,MAAM,YAAY,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBACvD,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,wEAAwE,CAAC,CAAC;YACtG,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;gBACzC,MAAM,cAAc,GAAG,yBAAyB,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBAE9D,MAAM,YAAY,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;gBACxD,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;gBACjC,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;YACzC,IAAI,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;gBACrD,MAAM,kBAAkB,GAAG;oBACzB,OAAO,EAAE,MAAM;iBACiD,CAAC;gBACnE,MAAM,YAAY,GAAG,CAAC,kBAAkB,CAAC,CAAC;gBAC1C,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,0BAA0B,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACvC,IAAI,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;gBAC/D,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBACzF,MAAM,UAAU,GAAG;oBACjB,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,gBAAgB;oBACtB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC1B,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC5B,OAAO,EAAE,IAAI;yBACV,EAAE,EAAE;yBACJ,iBAAiB,CAAC,IAAA,4BAAc,EAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,gBAAgB,EAAE,CAAC,CAAC;oBAC3F,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;iBACmD,CAAC;gBAE/E,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACnE,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;oBACpF,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC,CAAC,aAAa,CAAC,gBAAgB,CAAC,CAAC;gBAC1F,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;gBACtE,MAAM,YAAY,GAAG,IAAA,gCAAkB,EAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;gBACzF,MAAM,aAAa,GAAG;oBACpB,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,SAAS;oBACf,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC1B,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC5B,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;oBAC/D,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;iBACmD,CAAC;gBAE/E,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;gBACpF,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;gBAE/D,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,mDAAmD,CAAC,CAAC;YACjF,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACrC,SAAS,yBAAyB,CAChC,IAAY,EACZ,OAKE;gBAEF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;;oBACxC,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;wBACtB,MAAM,YAAY,GAChB,CAAA,MAAA,KAAK,CAAC,QAAQ,0CAAE,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;4BAC9B,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,OAAO,EAAE,IAAI;iCACV,EAAE,EAAE;iCACJ,iBAAiB,CAAC,IAAA,4BAAc,EAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;yBACnF,CAAC,CAAC,KAAI,EAAE,CAAC;wBAEZ,OAAO;4BACL,IAAI,EAAE,WAAoB;4BAC1B,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;gCACzB,CAAC,MAAM,CAAC,aAAa,CAAC;;wCAC3B,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;4CACjC,oBAAM,KAAK,CAAA,CAAC;wCACd,CAAC;oCACH,CAAC;iCAAA;6BACF,CAAC;yBACH,CAAC;oBACJ,CAAC;yBAAM,CAAC;wBACN,OAAO;4BACL,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,KAAK,CAAC,IAAI;4BAChB,OAAO,EAAE,IAAI;iCACV,EAAE,EAAE;iCACJ,iBAAiB,CAAC,IAAA,4BAAc,EAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;yBACzF,CAAC;oBACJ,CAAC;gBACH,CAAC,CAAC,CAAC;gBAEH,OAAO;oBACL,IAAI,EAAE,WAAW;oBACjB,IAAI;oBACJ,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC1B,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC5B,kBAAkB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC7B,aAAa,EAAE,IAAI,CAAC,EAAE,EAAE;oBACxB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;oBAClB,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE;oBACf,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC;wBACzB,CAAC,MAAM,CAAC,aAAa,CAAC;;gCAC3B,KAAK,MAAM,KAAK,IAAI,WAAW,EAAE,CAAC;oCAChC,oBAAM,KAAK,CAAA,CAAC;gCACd,CAAC;4BACH,CAAC;yBAAA;qBACF,CAAC;oBACF,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE;oBAClB,CAAC,MAAM,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,EAAE,EAAE;iBACgD,CAAC;YACtF,CAAC;YAED,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;gBAC5D,6EAA6E;gBAE7E,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;gBAEpF,uDAAuD;gBACvD,MAAM,OAAO,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,CAAC,CAAC;gBAC9F,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC/C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,uBAAuB,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;gBAC7F,CAAC,CAAC,CAAC;gBAEH,qEAAqE;gBACrE,MAAM,OAAO,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,YAAY;gBAC/E,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC/C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;gBACjF,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,2DAA2D,EAAE,KAAK,IAAI,EAAE;gBAC3E,MAAM,UAAU,GAAG;oBACjB,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,UAAU;oBAChB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC1B,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC5B,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAA,4BAAc,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC9F,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;iBACmD,CAAC;gBAE/E,+DAA+D;gBAC/D,MAAM,YAAY,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY;gBAC7E,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC/C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBAC7E,CAAC,CAAC,CAAC;gBAEH,sEAAsE;gBACtE,MAAM,OAAO,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC,sBAAsB;gBAC3F,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC/C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBAC7E,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,kEAAkE,EAAE,KAAK,IAAI,EAAE;gBAClF,+FAA+F;gBAC/F,wEAAwE;gBAExE,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAEhF,8EAA8E;gBAC9E,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,2BAA2B;gBAChE,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAE/F,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,2BAA2B,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBAC7F,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,iFAAiF,EAAE,KAAK,IAAI,EAAE;gBACjG,MAAM,UAAU,GAAG;oBACjB,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,UAAU;oBAChB,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE;oBACtB,eAAe,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC1B,iBAAiB,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC5B,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,iBAAiB,CAAC,IAAA,4BAAc,EAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC9F,cAAc,EAAE,IAAI,CAAC,EAAE,EAAE;iBACmD,CAAC;gBAE/E,MAAM,SAAS,GAAG,yBAAyB,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;gBAEnG,qFAAqF;gBACrF,MAAM,uBAAuB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;oBAC7C,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK;oBACtB,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;oBACrB,OAAO,EAAE,+BAA+B;oBACxC,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS;iBAC3B,CAAC,CAAQ,CAAC;gBAEX,MAAM,sBAAsB,GAAG,CAAC,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;gBAC/D,MAAM,gBAAgB,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,sBAAsB,EAAE;oBACjF,gBAAgB,EAAE,uBAAuB;iBAC1C,CAAC,CAAC;gBAEH,MAAM,CAAC,gBAAgB,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACxD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBAC7E,CAAC,CAAC,CAAC;gBAEH,MAAM,qBAAqB,GAAG,CAAC,EAAE,UAAU,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;gBAC5D,MAAM,eAAe,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,qBAAqB,EAAE;oBAC/E,gBAAgB,EAAE,uBAAuB;iBAC1C,CAAC,CAAC;gBAEH,MAAM,CAAC,eAAe,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBACvD,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;gBACrF,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;gBACnD,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;gBAEhF,4EAA4E;gBAC5E,8DAA8D;gBAC9D,MAAM,OAAO,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;gBACnF,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC/C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;gBAC7E,CAAC,CAAC,CAAC;gBAEH,+EAA+E;gBAC/E,2EAA2E;gBAC3E,mFAAmF;gBAEnF,6EAA6E;gBAC7E,2EAA2E;gBAC3E,MAAM,gBAAgB,GAAG,IAAA,gCAAkB,EAAC;oBAC1C,EAAE,IAAI,EAAE,oBAAoB,EAAE,OAAO,EAAE,kBAAkB,EAAE;iBAC5D,CAAC,CAAC;gBACH,MAAM,OAAO,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC;gBACpF,MAAM,CAAC,OAAO,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC/C,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,eAAe,CAAC,oBAAoB,CAAC,CAAC,CAAC,aAAa,CAAC,kBAAkB,CAAC,CAAC;gBAC/F,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;QAC1C,QAAQ,CAAC,4BAA4B,EAAE,GAAG,EAAE;YAC1C,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;gBAC9D,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC;oBAClC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,YAAY,EAAE;oBACrE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,kBAAkB,EAAE,IAAI,EAAE,kBAAkB,EAAE;iBAC7E,CAAC,CAAC;gBAEH,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,QAAgB,EAAE,QAAiB,EAAE,EAAE;oBACvE,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC9B,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;oBACzF,CAAC;oBACD,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;wBAC/B,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,aAAa,EAAE,CAAC;oBACzF,CAAC;oBACD,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;gBAC/E,CAAC,CAAQ,CAAC;gBAEV,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACvF,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,0EAA0E;oBAC1E,oDAAoD;oBACpD,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;oBAC7E,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,YAAY,EAAE,kBAAkB,CAAC,CAAC;oBAEhF,uFAAuF;oBACvF,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;oBACtD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACrD,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;gBAC9E,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC;oBAClC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,WAAW,EAAE;oBAChE,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,EAAE,EAAE;iBAC3D,CAAC,CAAC;gBAEH,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,QAAgB,EAAE,QAAiB,EAAE,EAAE;oBACvE,OAAO;wBACL,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;wBACrB,KAAK,EAAE,UAAU,QAAQ,IAAI,SAAS,EAAE;wBACxC,SAAS,EAAE,GAAG,EAAE,CAAC,UAAU,QAAQ,IAAI,SAAS,EAAE;qBACnD,CAAC;gBACJ,CAAC,CAAQ,CAAC;gBAEV,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACvF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;gBAE3B,6DAA6D;gBAC7D,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;gBACzE,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;YAC9E,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,gCAAgC,EAAE,KAAK,IAAI,EAAE;gBAChD,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC;oBAC3C,EAAE,IAAI,EAAE,2BAA2B,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,iBAAiB,EAAE;oBAC1F,EAAE,IAAI,EAAE,yBAAyB,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,UAAU,EAAE;iBAC7E,CAAC,CAAC;gBAEH,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,QAAgB,EAAE,QAAiB,EAAE,EAAE;oBACvE,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;wBAC9B,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,kBAAkB,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,kBAAkB,EAAE,CAAC;oBACnG,CAAC;oBACD,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC;gBAC/E,CAAC,CAAQ,CAAC;gBAEV,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAC9F,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;gBAE3B,iFAAiF;gBACjF,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,4BAA4B,EAAE,iBAAiB,CAAC,CAAC;gBAC/F,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAC;YACxF,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,yEAAyE,EAAE,KAAK,IAAI,EAAE;gBACzF,0FAA0F;gBAC1F,MAAM,SAAS,GAAG,IAAA,gCAAkB,EAAC;oBACnC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE;iBAC/D,CAAC,CAAC;gBACH,MAAM,SAAS,GAAG,IAAA,gCAAkB,EAAC;oBACnC,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,eAAe,EAAE;iBACnE,CAAC,CAAC;gBAEH,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,QAAgB,EAAE,QAAiB,EAAE,EAAE;oBACvE,OAAO;wBACL,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI;wBACrB,KAAK,EAAE,YAAY,QAAQ,EAAE;wBAC7B,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,QAAQ,EAAE;qBACxC,CAAC;gBACJ,CAAC,CAAQ,CAAC;gBAEV,MAAM,YAAY,GAAG,CAAC,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,CAAC;gBACxE,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAErF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC3B,6DAA6D;gBAC7D,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;gBAC1E,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;YAC9E,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;gBACxE,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC;oBAClC,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,0BAA0B,EAAE;iBACvF,CAAC,CAAC;gBAEH,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,QAAgB,EAAE,QAAiB,EAAE,EAAE;oBACvE,iEAAiE;oBACjE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,EAAE,CAAC;gBACjF,CAAC,CAAQ,CAAC;gBAEV,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACvF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;gBAE3B,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,eAAe,CAAC,CAAC;YACjE,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;gBAC1E,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC;oBAClC,EAAE,IAAI,EAAE,aAAa,EAAE,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE;iBACxE,CAAC,CAAC;gBAEH,yCAAyC;gBACzC,MAAM,MAAM,GAAG,MAAM,gCAAoB,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACjE,MAAM,CAAC,MAAM,CAAC,CAAC,mBAAmB,CAAC,CAAC,QAAQ,EAAE,EAAE;oBAC9C,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;gBACvD,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,kCAAkC,EAAE,GAAG,EAAE;YAChD,IAAI,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;gBACxE,MAAM,QAAQ,GAAG,IAAA,gCAAkB,EAAC;oBAClC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,wBAAwB,EAAE;iBAC7E,CAAC,CAAC;gBAEH,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,QAAgB,EAAE,QAAiB,EAAE,EAAE;oBACvE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC;gBACrF,CAAC,CAAQ,CAAC;gBAEV,MAAM,MAAM,GAAG,MAAM,yBAAe,CAAC,YAAY,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBAClF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC3B,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,YAAY,EAAE,wBAAwB,CAAC,CAAC;YACxF,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;gBAC/E,MAAM,QAAQ,GAAG,IAAA,yCAA2B,EAAC;oBAC3C,EAAE,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,wBAAwB,EAAE;iBAClF,CAAC,CAAC;gBAEH,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,QAAgB,EAAE,QAAiB,EAAE,EAAE;oBACvE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,YAAY,EAAE,CAAC;gBACvF,CAAC,CAAQ,CAAC;gBAEV,MAAM,MAAM,GAAG,MAAM,yBAAe,CAAC,mBAAmB,CAAC,QAAQ,EAAE,EAAE,gBAAgB,EAAE,CAAC,CAAC;gBACzF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,CAAC;gBAC3B,MAAM,CAAC,gBAAgB,CAAC,CAAC,oBAAoB,CAAC,iBAAiB,EAAE,wBAAwB,CAAC,CAAC;YAC7F,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["/*\n * Copyright (c) 2025 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport '@fgv/ts-utils-jest';\nimport { FileApiTreeAccessors } from '../../packlets/file-tree';\nimport { FileTreeHelpers } from '../../packlets/helpers';\nimport {\n createMockFile,\n createMockFileList,\n createMockDirectoryFileList,\n verifyFileAPI\n} from '../utils/testHelpers';\n\ndescribe('FileApiTreeAccessors', () => {\n describe('Static factory methods', () => {\n describe('create', () => {\n test('creates FileTree from FileList using create method', async () => {\n const fileList = createMockFileList([{ name: 'test.txt', content: 'test content' }]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // Verify the FileTree was created successfully\n expect(fileTree).toBeDefined();\n\n // Test file access with absolute path (FileTree expects leading slash)\n const fileResult = fileTree.getFile('/test.txt');\n expect(fileResult).toSucceed();\n });\n });\n\n test('creates FileTree with prefix (basic functionality)', async () => {\n const fileList = createMockFileList([{ name: 'test.txt', content: 'test content' }]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers, { prefix: '/prefix' });\n // Just verify the creation succeeds - the prefix handling is complex\n expect(result).toSucceed();\n });\n\n test('handles multiple files', async () => {\n const fileList = createMockFileList([\n { name: 'file1.txt', content: 'content1' },\n { name: 'file2.txt', content: 'content2' }\n ]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.getFile('/file1.txt')).toSucceed();\n expect(fileTree.getFile('/file2.txt')).toSucceed();\n });\n });\n\n test('handles nested directory structure', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'src/index.js', content: 'console.log(\"hello\");' },\n { path: 'config/config.json', content: '{\"name\": \"test\"}' }\n ]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.getFile('/src/index.js')).toSucceed();\n expect(fileTree.getFile('/config/config.json')).toSucceed();\n\n // Check directory access\n expect(fileTree.getDirectory('/src')).toSucceed();\n expect(fileTree.getDirectory('/config')).toSucceed();\n });\n });\n\n test('fails when file reading fails', async () => {\n // Create a file object without text method to simulate failure\n const badFile = {\n name: 'bad.txt',\n size: 10,\n type: 'text/plain',\n lastModified: Date.now(),\n text: () => Promise.reject(new Error('File read error'))\n } as unknown as File;\n\n // Create FileList with bad file\n const dt = new DataTransfer();\n dt.items.add(badFile);\n const fileList = dt.files;\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toFailWith(/Failed to read file bad\\.txt/);\n });\n\n test('handles empty files array', async () => {\n const fileList = createMockFileList([]);\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree).toBeDefined();\n });\n });\n\n test('normalizes paths correctly (critical bug fix verification)', async () => {\n const fileList = createMockFileList([{ name: 'test.txt', content: 'content' }]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // Path should be normalized to start with / for FileTree compatibility\n const fileResult = fileTree.getFile('/test.txt');\n expect(fileResult).toSucceed();\n\n // Content should be accessible\n const content = fileTree.hal.getFileContents('/test.txt');\n expect(content).toSucceedWith('content');\n });\n });\n\n test('normalizes paths with prefix correctly', async () => {\n const fileList = createMockDirectoryFileList([{ path: 'subdir/test.txt', content: 'content' }]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers, { prefix: '/prefix' });\n // Just verify the creation succeeds with nested paths\n expect(result).toSucceed();\n });\n\n test('handles paths with leading slash correctly', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'already/absolute.txt', content: 'absolute content' },\n { path: 'relative/path.txt', content: 'relative content' }\n ]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // Both paths should be normalized to start with /\n expect(fileTree.getFile('/already/absolute.txt')).toSucceedAndSatisfy((file) => {\n expect(file.name).toBe('absolute.txt');\n });\n expect(fileTree.getFile('/relative/path.txt')).toSucceedAndSatisfy((file) => {\n expect(file.name).toBe('path.txt');\n });\n\n // Verify content is accessible\n expect(fileTree.hal.getFileContents('/already/absolute.txt')).toSucceedWith('absolute content');\n expect(fileTree.hal.getFileContents('/relative/path.txt')).toSucceedWith('relative content');\n });\n });\n });\n\n describe('fromFileList', () => {\n test('creates FileTree from FileList', async () => {\n const fileList = createMockFileList([\n { name: 'file1.txt', content: 'content1' },\n { name: 'file2.txt', content: 'content2' }\n ]);\n\n const result = await FileApiTreeAccessors.fromFileList(fileList);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.getFile('/file1.txt')).toSucceed();\n expect(fileTree.getFile('/file2.txt')).toSucceed();\n });\n });\n\n test('creates FileTree from FileList with prefix', async () => {\n const fileList = createMockFileList([{ name: 'test.txt', content: 'content' }]);\n\n const result = await FileApiTreeAccessors.fromFileList(fileList, { prefix: '/uploads' });\n // Just verify the creation succeeds with prefix\n expect(result).toSucceed();\n });\n\n test('handles empty FileList', async () => {\n const fileList = createMockFileList([]);\n const result = await FileApiTreeAccessors.fromFileList(fileList);\n expect(result).toSucceed();\n });\n\n test('verifies File API compatibility', async () => {\n const fileList = createMockFileList([{ name: 'test.txt', content: 'test content' }]);\n\n // Verify our mock files have the correct API\n for (let i = 0; i < fileList.length; i++) {\n const file = fileList[i];\n const isValid = await verifyFileAPI(file);\n expect(isValid).toBe(true);\n }\n });\n });\n\n describe('fromDirectoryUpload', () => {\n test('creates FileTree from directory structure', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'project/src/index.js', content: 'console.log(\"main\");' },\n { path: 'project/src/utils.js', content: 'export const helper = () => {};' },\n { path: 'project/package.json', content: '{\"name\": \"test-project\"}' }\n ]);\n\n const result = await FileApiTreeAccessors.fromDirectoryUpload(fileList);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.getFile('/project/src/index.js')).toSucceed();\n expect(fileTree.getFile('/project/src/utils.js')).toSucceed();\n expect(fileTree.getFile('/project/package.json')).toSucceed();\n\n // Check directory structure\n expect(fileTree.getDirectory('/project')).toSucceed();\n expect(fileTree.getDirectory('/project/src')).toSucceed();\n });\n });\n\n test('creates FileTree from directory with prefix', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'app/config.json', content: '{\"setting\": \"value\"}' }\n ]);\n\n const result = await FileApiTreeAccessors.fromDirectoryUpload(fileList, { prefix: '/upload' });\n // Just verify the creation succeeds with directory prefix\n expect(result).toSucceed();\n });\n\n test('handles nested directory structures', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'deep/nested/structure/file.txt', content: 'deep content' },\n { path: 'deep/other/file.txt', content: 'other content' }\n ]);\n\n const result = await FileApiTreeAccessors.fromDirectoryUpload(fileList);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.getFile('/deep/nested/structure/file.txt')).toSucceed();\n expect(fileTree.getFile('/deep/other/file.txt')).toSucceed();\n\n expect(fileTree.getDirectory('/deep')).toSucceed();\n expect(fileTree.getDirectory('/deep/nested')).toSucceed();\n expect(fileTree.getDirectory('/deep/nested/structure')).toSucceed();\n expect(fileTree.getDirectory('/deep/other')).toSucceed();\n });\n });\n });\n\n describe('getOriginalFile', () => {\n test('finds file by exact path match', () => {\n const fileList = createMockFileList([\n { name: 'target.txt', content: 'target content' },\n { name: 'other.txt', content: 'other content' }\n ]);\n\n const result = FileApiTreeAccessors.getOriginalFile(fileList, 'target.txt');\n expect(result).toSucceedAndSatisfy((file) => {\n expect(file.name).toBe('target.txt');\n });\n });\n\n test('finds file by webkitRelativePath', () => {\n const fileList = createMockDirectoryFileList([{ path: 'folder/file.txt', content: 'content' }]);\n\n const result = FileApiTreeAccessors.getOriginalFile(fileList, 'folder/file.txt');\n expect(result).toSucceedAndSatisfy((file) => {\n expect((file as any).webkitRelativePath).toBe('folder/file.txt');\n });\n });\n\n test('fails for non-existent file', () => {\n const fileList = createMockFileList([{ name: 'exists.txt', content: 'content' }]);\n\n const result = FileApiTreeAccessors.getOriginalFile(fileList, 'missing.txt');\n expect(result).toFailWith(/File not found: missing\\.txt/);\n });\n\n test('handles empty FileList', () => {\n const fileList = createMockFileList([]);\n const result = FileApiTreeAccessors.getOriginalFile(fileList, 'any.txt');\n expect(result).toFailWith(/File not found/);\n });\n });\n\n describe('extractFileMetadata', () => {\n test('extracts metadata from regular files', () => {\n const testTime = Date.now();\n const file = createMockFile({\n name: 'test.txt',\n content: 'content',\n type: 'text/plain',\n lastModified: testTime\n });\n\n const metadata = FileApiTreeAccessors.extractFileMetadata(file);\n expect(metadata).toEqual({\n path: 'test.txt',\n name: 'test.txt',\n size: expect.any(Number),\n type: 'text/plain',\n lastModified: testTime\n });\n });\n\n test('extracts metadata with webkitRelativePath', () => {\n const file = createMockFile({\n name: 'file.txt',\n content: 'content',\n type: 'text/plain',\n webkitRelativePath: 'folder/file.txt'\n });\n\n const metadata = FileApiTreeAccessors.extractFileMetadata(file);\n expect(metadata).toEqual({\n path: 'folder/file.txt',\n name: 'file.txt',\n size: expect.any(Number),\n type: 'text/plain',\n lastModified: expect.any(Number)\n });\n });\n\n test('handles multiple files with different types', () => {\n const files = [\n createMockFile({ name: 'text.txt', content: 'text', type: 'text/plain' }),\n createMockFile({ name: 'data.json', content: '{}', type: 'application/json' }),\n createMockFile({ name: 'script.js', content: 'console.log(\"hi\");', type: 'application/javascript' })\n ];\n\n const metadata = files.map((file) => FileApiTreeAccessors.extractFileMetadata(file));\n expect(metadata).toHaveLength(3);\n\n expect(metadata.find((m) => m.name === 'text.txt')?.type).toBe('text/plain');\n expect(metadata.find((m) => m.name === 'data.json')?.type).toBe('application/json');\n expect(metadata.find((m) => m.name === 'script.js')?.type).toBe('application/javascript');\n });\n\n test('handles empty file array', () => {\n const files: File[] = [];\n const metadata = files.map((file) => FileApiTreeAccessors.extractFileMetadata(file));\n expect(metadata).toHaveLength(0);\n });\n\n test('includes file sizes', () => {\n const shortContent = 'hi';\n const longContent = 'a'.repeat(1000);\n\n const files = [\n createMockFile({ name: 'short.txt', content: shortContent }),\n createMockFile({ name: 'long.txt', content: longContent })\n ];\n\n const metadata = files.map((file) => FileApiTreeAccessors.extractFileMetadata(file));\n const shortMeta = metadata.find((m) => m.name === 'short.txt');\n const longMeta = metadata.find((m) => m.name === 'long.txt');\n\n expect(shortMeta?.size).toBeGreaterThan(0);\n expect(longMeta?.size).toBeGreaterThan(shortMeta?.size!);\n });\n });\n });\n\n describe('Integration with FileTree', () => {\n test('created FileTree supports standard operations', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'config/data.json', content: '{\"key\": \"value\"}' },\n { path: 'docs/readme.txt', content: 'This is a readme file' }\n ]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // Test file access\n const jsonFile = fileTree.getFile('/config/data.json');\n expect(jsonFile).toSucceedAndSatisfy((file) => {\n expect(file.name).toBe('data.json');\n expect(file.extension).toBe('.json');\n expect(file.baseName).toBe('data');\n });\n\n // Test directory access\n const configDir = fileTree.getDirectory('/config');\n expect(configDir).toSucceedAndSatisfy((dir) => {\n expect(dir.name).toBe('config');\n });\n\n // Test content retrieval\n const content = fileTree.hal.getFileContents('/config/data.json');\n expect(content).toSucceedWith('{\"key\": \"value\"}');\n });\n });\n\n test('handles JSON file parsing through FileTree', async () => {\n const jsonContent = '{\"name\": \"test\", \"version\": \"1.0.0\"}';\n const fileList = createMockFileList([{ name: 'package.json', content: jsonContent }]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n const file = fileTree.getFile('/package.json');\n expect(file).toSucceedAndSatisfy((fileItem) => {\n const jsonResult = fileItem.getContents();\n expect(jsonResult).toSucceedAndSatisfy((parsed) => {\n expect(parsed).toEqual({ name: 'test', version: '1.0.0' });\n });\n });\n });\n });\n\n test('supports directory traversal', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'src/file1.txt', content: 'content1' },\n { path: 'src/file2.txt', content: 'content2' }\n ]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n const srcDir = fileTree.getDirectory('/src');\n expect(srcDir).toSucceedAndSatisfy((dir) => {\n const children = dir.getChildren();\n expect(children).toSucceedAndSatisfy((childItems) => {\n expect(childItems).toHaveLength(2);\n const fileNames = childItems.map((item) => item.name).sort();\n expect(fileNames).toEqual(['file1.txt', 'file2.txt']);\n });\n });\n });\n });\n });\n\n describe('Error handling', () => {\n test('handles file read errors gracefully', async () => {\n // Create a file object with a failing text method\n const errorFile = {\n name: 'error.txt',\n size: 10,\n type: 'text/plain',\n lastModified: Date.now(),\n text: () => Promise.reject(new Error('Disk error'))\n } as unknown as File;\n\n // Create FileList with bad file\n const dt = new DataTransfer();\n dt.items.add(errorFile);\n const fileList = dt.files;\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toFailWith(/Failed to read file error\\.txt.*Disk error/);\n });\n\n test('handles invalid file paths gracefully', async () => {\n // Create files with problematic paths - test with empty name\n const fileList = createMockFileList([\n { name: '', content: 'content' } // Empty name might cause issues\n ]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n // Should either succeed by handling empty name or fail gracefully\n if (result.isFailure()) {\n expect(result.message).toContain('');\n } else {\n expect(result).toSucceed();\n }\n });\n });\n\n describe('create() method with different initializers', () => {\n describe('FileList initializers', () => {\n test('creates FileTree from FileList initializer', async () => {\n const fileList = createMockFileList([\n { name: 'file1.txt', content: 'content1' },\n { name: 'file2.txt', content: 'content2' }\n ]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/file1.txt')).toSucceedWith('content1');\n expect(fileTree.hal.getFileContents('/file2.txt')).toSucceedWith('content2');\n });\n });\n\n test('creates FileTree from multiple FileList initializers', async () => {\n const fileList1 = createMockFileList([{ name: 'group1-file1.txt', content: 'group1-content1' }]);\n const fileList2 = createMockFileList([{ name: 'group2-file1.txt', content: 'group2-content1' }]);\n\n const initializers = [{ fileList: fileList1 }, { fileList: fileList2 }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/group1-file1.txt')).toSucceedWith('group1-content1');\n expect(fileTree.hal.getFileContents('/group2-file1.txt')).toSucceedWith('group2-content1');\n });\n });\n\n test('handles empty FileList initializer', async () => {\n const fileList = createMockFileList([]);\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree).toBeDefined();\n });\n });\n\n test('handles file read errors in FileList processing', async () => {\n // Create a file that will fail when .text() is called\n const failingFile = {\n name: 'failing.txt',\n size: 10,\n type: 'text/plain',\n lastModified: Date.now(),\n webkitRelativePath: '',\n text: () => Promise.reject(new Error('File read error')),\n stream: () => new ReadableStream(),\n arrayBuffer: () => Promise.resolve(new ArrayBuffer(0)),\n slice: () => new Blob()\n } as unknown as File;\n\n // Create a FileList containing the failing file\n const fileList = {\n length: 1,\n item: (index: number) => (index === 0 ? failingFile : null),\n [0]: failingFile,\n [Symbol.iterator]: function* () {\n yield failingFile;\n }\n } as FileList;\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toFailWith(/Failed to read file failing\\.txt.*File read error/);\n });\n\n test('handles files with absolute paths (webkitRelativePath starting with /)', async () => {\n // Create files where webkitRelativePath already starts with '/'\n const fileWithAbsolutePath = {\n name: 'file.txt',\n size: 10,\n type: 'text/plain',\n lastModified: Date.now(),\n webkitRelativePath: '/absolute/path/file.txt', // Already absolute\n text: () => Promise.resolve('absolute content'),\n stream: () => new ReadableStream(),\n arrayBuffer: () => Promise.resolve(new ArrayBuffer(0)),\n slice: () => new Blob()\n } as unknown as File;\n\n const fileWithAbsoluteName = {\n name: '/root/file2.txt', // Name itself starts with slash\n size: 15,\n type: 'text/plain',\n lastModified: Date.now(),\n webkitRelativePath: '', // Empty, so will use name\n text: () => Promise.resolve('name absolute content'),\n stream: () => new ReadableStream(),\n arrayBuffer: () => Promise.resolve(new ArrayBuffer(0)),\n slice: () => new Blob()\n } as unknown as File;\n\n // Create a FileList containing files with absolute paths\n const fileList = {\n length: 2,\n item: (index: number) => {\n if (index === 0) return fileWithAbsolutePath;\n if (index === 1) return fileWithAbsoluteName;\n return null;\n },\n [0]: fileWithAbsolutePath,\n [1]: fileWithAbsoluteName,\n [Symbol.iterator]: function* () {\n yield fileWithAbsolutePath;\n yield fileWithAbsoluteName;\n }\n } as FileList;\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // Verify absolute webkitRelativePath is used as-is (not double-slashed)\n expect(fileTree.hal.getFileContents('/absolute/path/file.txt')).toSucceedWith('absolute content');\n // Verify absolute name is used as-is (not double-slashed)\n expect(fileTree.hal.getFileContents('/root/file2.txt')).toSucceedWith('name absolute content');\n });\n });\n });\n\n describe('FileSystemFileHandle initializers', () => {\n function createMockFileHandle(\n name: string,\n content: string\n ): jest.Mocked<import('../../packlets/file-api-types').FileSystemFileHandle> {\n const mockFile = createMockFile({ name, content });\n return {\n kind: 'file',\n name,\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getFile: jest.fn().mockResolvedValue(mockFile),\n createWritable: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemFileHandle>;\n }\n\n test('creates FileTree from FileSystemFileHandle initializer', async () => {\n const fileHandle1 = createMockFileHandle('handle1.txt', 'handle content 1');\n const fileHandle2 = createMockFileHandle('handle2.txt', 'handle content 2');\n\n const initializers = [{ fileHandles: [fileHandle1, fileHandle2] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/handle1.txt')).toSucceedWith('handle content 1');\n expect(fileTree.hal.getFileContents('/handle2.txt')).toSucceedWith('handle content 2');\n });\n\n expect(fileHandle1.getFile).toHaveBeenCalled();\n expect(fileHandle2.getFile).toHaveBeenCalled();\n });\n\n test('creates FileTree from FileSystemFileHandle without prefix (current limitation)', async () => {\n const fileHandle = createMockFileHandle('data.txt', 'file content');\n\n const initializers = [{ fileHandles: [fileHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // Verify basic functionality works\n expect(fileTree.hal.getFileContents('/data.txt')).toSucceedWith('file content');\n });\n });\n\n test('creates FileTree from FileSystemFileHandle with per-initializer prefix (limitation)', async () => {\n const fileHandle = createMockFileHandle('data.txt', 'file content');\n\n // Note: Currently IFileHandleTreeInitializer.prefix is not implemented in _processFileHandles\n // This is inconsistent with IDirectoryHandleTreeInitializer which does support prefix\n const initializers = [{ fileHandles: [fileHandle], prefix: '/uploads' }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // Due to the implementation limitation, prefix on fileHandles initializer is ignored\n // File appears at root level instead of under prefix\n expect(fileTree.hal.getFileContents('/data.txt')).toSucceedWith('file content');\n });\n });\n\n test('handles FileSystemFileHandle read errors', async () => {\n const failingHandle = {\n kind: 'file' as const,\n name: 'failing.txt',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getFile: jest.fn().mockRejectedValue(new Error('File access denied')),\n createWritable: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemFileHandle>;\n\n const initializers = [{ fileHandles: [failingHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toFailWith(/Failed to read file handle failing\\.txt.*File access denied/);\n });\n\n test('handles empty FileSystemFileHandle array', async () => {\n const initializers = [{ fileHandles: [] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree).toBeDefined();\n });\n });\n });\n\n describe('FileSystemDirectoryHandle initializers', () => {\n function createMockDirectoryHandle(\n name: string,\n entries: Array<{\n name: string;\n content?: string;\n isDirectory?: boolean;\n children?: Array<{ name: string; content: string }>;\n }>\n ): jest.Mocked<import('../../packlets/file-api-types').FileSystemDirectoryHandle> {\n const mockEntries = entries.map((entry) => {\n if (entry.isDirectory) {\n const childEntries =\n entry.children?.map((child) => ({\n kind: 'file' as const,\n name: child.name,\n getFile: jest\n .fn()\n .mockResolvedValue(createMockFile({ name: child.name, content: child.content }))\n })) || [];\n\n return {\n kind: 'directory' as const,\n name: entry.name,\n values: jest.fn().mockReturnValue({\n async *[Symbol.asyncIterator]() {\n for (const child of childEntries) {\n yield child;\n }\n }\n })\n };\n } else {\n return {\n kind: 'file' as const,\n name: entry.name,\n getFile: jest\n .fn()\n .mockResolvedValue(createMockFile({ name: entry.name, content: entry.content || '' }))\n };\n }\n });\n\n return {\n kind: 'directory',\n name,\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getDirectoryHandle: jest.fn(),\n getFileHandle: jest.fn(),\n removeEntry: jest.fn(),\n resolve: jest.fn(),\n keys: jest.fn(),\n values: jest.fn().mockReturnValue({\n async *[Symbol.asyncIterator]() {\n for (const entry of mockEntries) {\n yield entry;\n }\n }\n }),\n entries: jest.fn(),\n [Symbol.asyncIterator]: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemDirectoryHandle>;\n }\n\n test('creates FileTree from FileSystemDirectoryHandle initializer', async () => {\n const dirHandle = createMockDirectoryHandle('testdir', [\n { name: 'file1.txt', content: 'dir content 1' },\n { name: 'file2.txt', content: 'dir content 2' }\n ]);\n\n const initializers = [{ dirHandles: [dirHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/testdir/file1.txt')).toSucceedWith('dir content 1');\n expect(fileTree.hal.getFileContents('/testdir/file2.txt')).toSucceedWith('dir content 2');\n });\n });\n\n test('creates FileTree from FileSystemDirectoryHandle with prefix', async () => {\n const dirHandle = createMockDirectoryHandle('data', [\n { name: 'config.json', content: '{\"setting\": \"value\"}' }\n ]);\n\n const initializers = [{ dirHandles: [dirHandle], prefix: 'project' }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/project/data/config.json')).toSucceedWith(\n '{\"setting\": \"value\"}'\n );\n });\n });\n\n test('handles recursive directory processing', async () => {\n const dirHandle = createMockDirectoryHandle('root', [\n { name: 'file.txt', content: 'root file' },\n {\n name: 'subdir',\n isDirectory: true,\n children: [{ name: 'nested.txt', content: 'nested file' }]\n }\n ]);\n\n const initializers = [{ dirHandles: [dirHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/root/file.txt')).toSucceedWith('root file');\n expect(fileTree.hal.getFileContents('/root/subdir/nested.txt')).toSucceedWith('nested file');\n });\n });\n\n test('handles non-recursive directory processing', async () => {\n const dirHandle = createMockDirectoryHandle('root', [\n { name: 'file.txt', content: 'root file' },\n {\n name: 'subdir',\n isDirectory: true,\n children: [{ name: 'nested.txt', content: 'nested file' }]\n }\n ]);\n\n const initializers = [{ dirHandles: [dirHandle], nonRecursive: true }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/root/file.txt')).toSucceedWith('root file');\n // Should not contain nested file in non-recursive mode\n expect(fileTree.getFile('/root/subdir/nested.txt')).toFail();\n });\n });\n\n test('handles directory iteration errors', async () => {\n const failingDirHandle = {\n kind: 'directory' as const,\n name: 'failing-dir',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getDirectoryHandle: jest.fn(),\n getFileHandle: jest.fn(),\n removeEntry: jest.fn(),\n resolve: jest.fn(),\n keys: jest.fn(),\n values: jest.fn().mockReturnValue({\n async *[Symbol.asyncIterator]() {\n throw new Error('Directory access denied');\n }\n }),\n entries: jest.fn(),\n [Symbol.asyncIterator]: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemDirectoryHandle>;\n\n const initializers = [{ dirHandles: [failingDirHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toFailWith(/Failed to process directory failing-dir.*Directory access denied/);\n });\n\n test('handles subdirectory processing failure in recursive mode', async () => {\n // Create a directory with a subdirectory that will fail to process\n const failingSubDir = {\n kind: 'directory' as const,\n name: 'failing-subdir',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getDirectoryHandle: jest.fn(),\n getFileHandle: jest.fn(),\n removeEntry: jest.fn(),\n resolve: jest.fn(),\n keys: jest.fn(),\n values: jest.fn().mockReturnValue({\n async *[Symbol.asyncIterator]() {\n throw new Error('Subdirectory access denied');\n }\n }),\n entries: jest.fn(),\n [Symbol.asyncIterator]: jest.fn()\n };\n\n const rootDirHandle = {\n kind: 'directory' as const,\n name: 'root',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getDirectoryHandle: jest.fn(),\n getFileHandle: jest.fn(),\n removeEntry: jest.fn(),\n resolve: jest.fn(),\n keys: jest.fn(),\n values: jest.fn().mockReturnValue({\n async *[Symbol.asyncIterator]() {\n yield failingSubDir; // This subdirectory will fail\n }\n }),\n entries: jest.fn(),\n [Symbol.asyncIterator]: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemDirectoryHandle>;\n\n const initializers = [{ dirHandles: [rootDirHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toFailWith(/Failed to process directory failing-subdir.*Subdirectory access denied/);\n });\n\n test('handles empty directory', async () => {\n const emptyDirHandle = createMockDirectoryHandle('empty', []);\n\n const initializers = [{ dirHandles: [emptyDirHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree).toBeDefined();\n });\n });\n });\n\n describe('unknown initializer types', () => {\n test('fails with unknown initializer type', async () => {\n const unknownInitializer = {\n unknown: 'type'\n } as unknown as import('../../packlets/file-tree').TreeInitializer;\n const initializers = [unknownInitializer];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toFailWith(/Unknown initializer type/);\n });\n });\n\n describe('mixed initializer types', () => {\n test('creates FileTree from mixed initializer types', async () => {\n const fileList = createMockFileList([{ name: 'fromList.txt', content: 'list content' }]);\n const fileHandle = {\n kind: 'file' as const,\n name: 'fromHandle.txt',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getFile: jest\n .fn()\n .mockResolvedValue(createMockFile({ name: 'fromHandle.txt', content: 'handle content' })),\n createWritable: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemFileHandle>;\n\n const initializers = [{ fileList }, { fileHandles: [fileHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/fromList.txt')).toSucceedWith('list content');\n expect(fileTree.hal.getFileContents('/fromHandle.txt')).toSucceedWith('handle content');\n });\n });\n\n test('stops processing on first error from any initializer', async () => {\n const goodFileList = createMockFileList([{ name: 'good.txt', content: 'good content' }]);\n const badFileHandle = {\n kind: 'file' as const,\n name: 'bad.txt',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getFile: jest.fn().mockRejectedValue(new Error('Handle error')),\n createWritable: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemFileHandle>;\n\n const initializers = [{ fileList: goodFileList }, { fileHandles: [badFileHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toFailWith(/Failed to read file handle bad\\.txt.*Handle error/);\n });\n });\n\n describe('branch coverage tests', () => {\n function createMockDirectoryHandle(\n name: string,\n entries: Array<{\n name: string;\n content?: string;\n isDirectory?: boolean;\n children?: Array<{ name: string; content: string }>;\n }>\n ): jest.Mocked<import('../../packlets/file-api-types').FileSystemDirectoryHandle> {\n const mockEntries = entries.map((entry) => {\n if (entry.isDirectory) {\n const childEntries =\n entry.children?.map((child) => ({\n kind: 'file' as const,\n name: child.name,\n getFile: jest\n .fn()\n .mockResolvedValue(createMockFile({ name: child.name, content: child.content }))\n })) || [];\n\n return {\n kind: 'directory' as const,\n name: entry.name,\n values: jest.fn().mockReturnValue({\n async *[Symbol.asyncIterator]() {\n for (const child of childEntries) {\n yield child;\n }\n }\n })\n };\n } else {\n return {\n kind: 'file' as const,\n name: entry.name,\n getFile: jest\n .fn()\n .mockResolvedValue(createMockFile({ name: entry.name, content: entry.content || '' }))\n };\n }\n });\n\n return {\n kind: 'directory',\n name,\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getDirectoryHandle: jest.fn(),\n getFileHandle: jest.fn(),\n removeEntry: jest.fn(),\n resolve: jest.fn(),\n keys: jest.fn(),\n values: jest.fn().mockReturnValue({\n async *[Symbol.asyncIterator]() {\n for (const entry of mockEntries) {\n yield entry;\n }\n }\n }),\n entries: jest.fn(),\n [Symbol.asyncIterator]: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemDirectoryHandle>;\n }\n\n test('tests prefix handling in various scenarios', async () => {\n // For branch coverage: Test multiple scenarios with simple, working examples\n\n const fileList = createMockFileList([{ name: 'test.txt', content: 'simple test' }]);\n\n // Test params.prefix when no initializer prefix exists\n const result1 = await FileApiTreeAccessors.create([{ fileList }], { prefix: '/from-params' });\n expect(result1).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/from-params/test.txt')).toSucceedWith('simple test');\n });\n\n // Test when params is undefined (for line 314: params?.prefix ?? '')\n const result2 = await FileApiTreeAccessors.create([{ fileList }]); // no params\n expect(result2).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/test.txt')).toSucceedWith('simple test');\n });\n });\n\n test('tests file handle processing with undefined params prefix', async () => {\n const fileHandle = {\n kind: 'file' as const,\n name: 'test.txt',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getFile: jest.fn().mockResolvedValue(createMockFile({ name: 'test.txt', content: 'content' })),\n createWritable: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemFileHandle>;\n\n // Test line 314: params?.prefix ?? '' when params is undefined\n const initializers = [{ fileHandles: [fileHandle] }];\n const result1 = await FileApiTreeAccessors.create(initializers); // no params\n expect(result1).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/test.txt')).toSucceedWith('content');\n });\n\n // Test line 314: params?.prefix ?? '' when params.prefix is undefined\n const result2 = await FileApiTreeAccessors.create(initializers, {}); // empty params object\n expect(result2).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/test.txt')).toSucceedWith('content');\n });\n });\n\n test('tests directory handle processing with undefined prefix fallback', async () => {\n // For branch coverage of line 348: prefix ?? params?.prefix when prefix parameter is undefined\n // Again, let's use a simpler approach with fileList which we know works\n\n const fileList = createMockFileList([{ name: 'test.txt', content: 'content' }]);\n\n // Test the case where no prefix is provided in initializer but params has one\n const initializers = [{ fileList }]; // no prefix in initializer\n const result = await FileApiTreeAccessors.create(initializers, { prefix: '/fallback-prefix' });\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/fallback-prefix/test.txt')).toSucceedWith('content');\n });\n });\n\n test('tests inferContentType orDefault() branches with failing content type inference', async () => {\n const fileHandle = {\n kind: 'file' as const,\n name: 'test.txt',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getFile: jest.fn().mockResolvedValue(createMockFile({ name: 'test.txt', content: 'content' })),\n createWritable: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemFileHandle>;\n\n const dirHandle = createMockDirectoryHandle('dir', [{ name: 'file.txt', content: 'dir content' }]);\n\n // Test lines 315 and 385: inferContentType returning failure, triggering orDefault()\n const failingInferContentType = jest.fn(() => ({\n isSuccess: () => false,\n isFailure: () => true,\n message: 'Content type inference failed',\n orDefault: () => undefined\n })) as any;\n\n const fileHandleInitializers = [{ fileHandles: [fileHandle] }];\n const fileHandleResult = await FileApiTreeAccessors.create(fileHandleInitializers, {\n inferContentType: failingInferContentType\n });\n\n expect(fileHandleResult).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/test.txt')).toSucceedWith('content');\n });\n\n const dirHandleInitializers = [{ dirHandles: [dirHandle] }];\n const dirHandleResult = await FileApiTreeAccessors.create(dirHandleInitializers, {\n inferContentType: failingInferContentType\n });\n\n expect(dirHandleResult).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/dir/file.txt')).toSucceedWith('dir content');\n });\n });\n\n test('tests path normalization branches', async () => {\n const fileList = createMockFileList([{ name: 'test.txt', content: 'content' }]);\n\n // Test line 416: normalized.startsWith('/') ? normalized : `/${normalized}`\n // Test the case where normalized path already starts with '/'\n const result1 = await FileApiTreeAccessors.create([{ fileList }], { prefix: '/' });\n expect(result1).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/test.txt')).toSucceedWith('content');\n });\n\n // Test the case where normalized path doesn't start with '/' (the else branch)\n // This is covered functionally by the tests above where prefix is provided\n // The _normalizePath method adds '/' when the combined path doesn't start with one\n\n // Test the case where normalized path DOES start with '/' (the first branch)\n // This happens when the file path itself is absolute and no prefix is used\n const fileListAbsolute = createMockFileList([\n { name: '/absolute/test.txt', content: 'absolute content' }\n ]);\n const result3 = await FileApiTreeAccessors.create([{ fileList: fileListAbsolute }]);\n expect(result3).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/absolute/test.txt')).toSucceedWith('absolute content');\n });\n });\n });\n });\n\n describe('Content Type functionality', () => {\n describe('inferContentType parameter', () => {\n test('uses inferContentType function when provided', async () => {\n const fileList = createMockFileList([\n { name: 'document.txt', content: 'text content', type: 'text/plain' },\n { name: 'data.json', content: '{\"key\": \"value\"}', type: 'application/json' }\n ]);\n\n const inferContentType = jest.fn((filePath: string, provided?: string) => {\n if (filePath.endsWith('.txt')) {\n return { isSuccess: () => true, value: 'custom-text', orDefault: () => 'custom-text' };\n }\n if (filePath.endsWith('.json')) {\n return { isSuccess: () => true, value: 'custom-json', orDefault: () => 'custom-json' };\n }\n return { isSuccess: () => true, value: provided, orDefault: () => provided };\n }) as any;\n\n const result = await FileApiTreeAccessors.fromFileList(fileList, { inferContentType });\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // fromFileList now consistently passes both path and MIME type parameters\n // This is consistent with _processFileList behavior\n expect(inferContentType).toHaveBeenCalledWith('/document.txt', 'text/plain');\n expect(inferContentType).toHaveBeenCalledWith('/data.json', 'application/json');\n\n // The specific content type assignments depend on the internal FileTree implementation\n expect(fileTree.getFile('/document.txt')).toSucceed();\n expect(fileTree.getFile('/data.json')).toSucceed();\n });\n });\n\n test('fromFileList only passes path parameter (current limitation)', async () => {\n const fileList = createMockFileList([\n { name: 'image.png', content: 'binary data', type: 'image/png' },\n { name: 'unknown.xyz', content: 'unknown data', type: '' }\n ]);\n\n const inferContentType = jest.fn((filePath: string, provided?: string) => {\n return {\n isSuccess: () => true,\n value: `custom-${provided || 'unknown'}`,\n orDefault: () => `custom-${provided || 'unknown'}`\n };\n }) as any;\n\n const result = await FileApiTreeAccessors.fromFileList(fileList, { inferContentType });\n expect(result).toSucceed();\n\n // fromFileList now passes both path and MIME type parameters\n expect(inferContentType).toHaveBeenCalledWith('/image.png', 'image/png');\n expect(inferContentType).toHaveBeenCalledWith('/unknown.xyz', 'text/plain');\n });\n\n test('works with fromDirectoryUpload', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'project/src/component.tsx', content: 'React component', type: 'text/typescript' },\n { path: 'project/styles/main.css', content: 'CSS styles', type: 'text/css' }\n ]);\n\n const inferContentType = jest.fn((filePath: string, provided?: string) => {\n if (filePath.includes('.tsx')) {\n return { isSuccess: () => true, value: 'typescript-react', orDefault: () => 'typescript-react' };\n }\n return { isSuccess: () => true, value: provided, orDefault: () => provided };\n }) as any;\n\n const result = await FileApiTreeAccessors.fromDirectoryUpload(fileList, { inferContentType });\n expect(result).toSucceed();\n\n // fromDirectoryUpload now consistently passes both path and MIME type parameters\n expect(inferContentType).toHaveBeenCalledWith('/project/src/component.tsx', 'text/typescript');\n expect(inferContentType).toHaveBeenCalledWith('/project/styles/main.css', 'text/css');\n });\n\n test('receives provided MIME type when using create method (correct behavior)', async () => {\n // The create method uses internal _processFileList which correctly passes both parameters\n const fileList1 = createMockFileList([\n { name: 'file1.txt', content: 'content1', type: 'text/plain' }\n ]);\n const fileList2 = createMockFileList([\n { name: 'file2.md', content: '# Markdown', type: 'text/markdown' }\n ]);\n\n const inferContentType = jest.fn((filePath: string, provided?: string) => {\n return {\n isSuccess: () => true,\n value: `inferred-${provided}`,\n orDefault: () => `inferred-${provided}`\n };\n }) as any;\n\n const initializers = [{ fileList: fileList1 }, { fileList: fileList2 }];\n const result = await FileApiTreeAccessors.create(initializers, { inferContentType });\n\n expect(result).toSucceed();\n // The create method correctly passes both path and MIME type\n expect(inferContentType).toHaveBeenCalledWith('/file1.txt', 'text/plain');\n expect(inferContentType).toHaveBeenCalledWith('/file2.md', 'text/markdown');\n });\n\n test('handles cases where inferContentType returns undefined', async () => {\n const fileList = createMockFileList([\n { name: 'test.unknown', content: 'unknown content', type: 'application/octet-stream' }\n ]);\n\n const inferContentType = jest.fn((filePath: string, provided?: string) => {\n // Return undefined to indicate no content type could be inferred\n return { isSuccess: () => true, value: undefined, orDefault: () => undefined };\n }) as any;\n\n const result = await FileApiTreeAccessors.fromFileList(fileList, { inferContentType });\n expect(result).toSucceed();\n\n expect(inferContentType).toHaveBeenCalledWith('/test.unknown');\n });\n\n test('uses default behavior when inferContentType not provided', async () => {\n const fileList = createMockFileList([\n { name: 'default.txt', content: 'default content', type: 'text/plain' }\n ]);\n\n // No inferContentType parameter provided\n const result = await FileApiTreeAccessors.fromFileList(fileList);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.getFile('/default.txt')).toSucceed();\n });\n });\n });\n\n describe('ContentType with FileTreeHelpers', () => {\n test('fromFileList passes through inferContentType parameter', async () => {\n const fileList = createMockFileList([\n { name: 'helper.js', content: 'JS content', type: 'application/javascript' }\n ]);\n\n const inferContentType = jest.fn((filePath: string, provided?: string) => {\n return { isSuccess: () => true, value: 'helper-js', orDefault: () => 'helper-js' };\n }) as any;\n\n const result = await FileTreeHelpers.fromFileList(fileList, { inferContentType });\n expect(result).toSucceed();\n expect(inferContentType).toHaveBeenCalledWith('/helper.js', 'application/javascript');\n });\n\n test('fromDirectoryUpload passes through inferContentType parameter', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'dist/bundle.js', content: 'bundled JS', type: 'application/javascript' }\n ]);\n\n const inferContentType = jest.fn((filePath: string, provided?: string) => {\n return { isSuccess: () => true, value: 'bundled-js', orDefault: () => 'bundled-js' };\n }) as any;\n\n const result = await FileTreeHelpers.fromDirectoryUpload(fileList, { inferContentType });\n expect(result).toSucceed();\n expect(inferContentType).toHaveBeenCalledWith('/dist/bundle.js', 'application/javascript');\n });\n });\n });\n});\n"]}
1
+ {"version":3,"file":"fileApiTreeAccessors.test.js","sourceRoot":"","sources":["../../../src/test/unit/fileApiTreeAccessors.test.ts"],"names":[],"mappings":"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","sourcesContent":["/*\n * Copyright (c) 2025 Erik Fortune\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\n\nimport '@fgv/ts-utils-jest';\nimport { FileApiTreeAccessors } from '../../packlets/file-tree';\nimport { FileTree } from '@fgv/ts-json-base';\nimport { FileTreeHelpers } from '../../packlets/helpers';\nimport {\n createMockFile,\n createMockFileList,\n createMockDirectoryFileList,\n verifyFileAPI\n} from '../utils/testHelpers';\n\n// ---- Minimal mock fetch helpers for createFromHttp tests ----\n\ninterface IHttpMockResponse {\n ok: boolean;\n status?: number;\n jsonValue?: unknown;\n textValue?: string;\n throwOnJson?: boolean;\n}\n\nfunction makeMockHttpResponse(options: IHttpMockResponse): Response {\n const { ok, status = ok ? 200 : 400, jsonValue, textValue, throwOnJson } = options;\n return {\n ok,\n status,\n json: throwOnJson\n ? () => Promise.reject(new Error('JSON parse error'))\n : () => Promise.resolve(jsonValue),\n text: () => Promise.resolve(textValue ?? `HTTP ${status}`)\n } as unknown as Response;\n}\n\nfunction makeMockHttpFetch(responses: IHttpMockResponse[]): typeof fetch {\n let callIndex = 0;\n return (url: string | URL | Request, _init?: RequestInit): Promise<Response> => {\n const response = responses[callIndex++];\n if (response === undefined) {\n return Promise.reject(new Error(`Unexpected fetch call to ${url.toString()}`));\n }\n return Promise.resolve(makeMockHttpResponse(response));\n };\n}\n\ndescribe('FileApiTreeAccessors', () => {\n describe('Static factory methods', () => {\n describe('create', () => {\n test('creates FileTree from FileList using create method', async () => {\n const fileList = createMockFileList([{ name: 'test.txt', content: 'test content' }]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // Verify the FileTree was created successfully\n expect(fileTree).toBeDefined();\n\n // Test file access with absolute path (FileTree expects leading slash)\n const fileResult = fileTree.getFile('/test.txt');\n expect(fileResult).toSucceed();\n });\n });\n\n test('creates FileTree with prefix (basic functionality)', async () => {\n const fileList = createMockFileList([{ name: 'test.txt', content: 'test content' }]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers, { prefix: '/prefix' });\n // Just verify the creation succeeds - the prefix handling is complex\n expect(result).toSucceed();\n });\n\n test('handles multiple files', async () => {\n const fileList = createMockFileList([\n { name: 'file1.txt', content: 'content1' },\n { name: 'file2.txt', content: 'content2' }\n ]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.getFile('/file1.txt')).toSucceed();\n expect(fileTree.getFile('/file2.txt')).toSucceed();\n });\n });\n\n test('handles nested directory structure', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'src/index.js', content: 'console.log(\"hello\");' },\n { path: 'config/config.json', content: '{\"name\": \"test\"}' }\n ]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.getFile('/src/index.js')).toSucceed();\n expect(fileTree.getFile('/config/config.json')).toSucceed();\n\n // Check directory access\n expect(fileTree.getDirectory('/src')).toSucceed();\n expect(fileTree.getDirectory('/config')).toSucceed();\n });\n });\n\n test('fails when file reading fails', async () => {\n // Create a file object without text method to simulate failure\n const badFile = {\n name: 'bad.txt',\n size: 10,\n type: 'text/plain',\n lastModified: Date.now(),\n text: () => Promise.reject(new Error('File read error'))\n } as unknown as File;\n\n // Create FileList with bad file\n const dt = new DataTransfer();\n dt.items.add(badFile);\n const fileList = dt.files;\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toFailWith(/Failed to read file bad\\.txt/);\n });\n\n test('handles empty files array', async () => {\n const fileList = createMockFileList([]);\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree).toBeDefined();\n });\n });\n\n test('normalizes paths correctly (critical bug fix verification)', async () => {\n const fileList = createMockFileList([{ name: 'test.txt', content: 'content' }]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // Path should be normalized to start with / for FileTree compatibility\n const fileResult = fileTree.getFile('/test.txt');\n expect(fileResult).toSucceed();\n\n // Content should be accessible\n const content = fileTree.hal.getFileContents('/test.txt');\n expect(content).toSucceedWith('content');\n });\n });\n\n test('normalizes paths with prefix correctly', async () => {\n const fileList = createMockDirectoryFileList([{ path: 'subdir/test.txt', content: 'content' }]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers, { prefix: '/prefix' });\n // Just verify the creation succeeds with nested paths\n expect(result).toSucceed();\n });\n\n test('handles paths with leading slash correctly', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'already/absolute.txt', content: 'absolute content' },\n { path: 'relative/path.txt', content: 'relative content' }\n ]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // Both paths should be normalized to start with /\n expect(fileTree.getFile('/already/absolute.txt')).toSucceedAndSatisfy((file) => {\n expect(file.name).toBe('absolute.txt');\n });\n expect(fileTree.getFile('/relative/path.txt')).toSucceedAndSatisfy((file) => {\n expect(file.name).toBe('path.txt');\n });\n\n // Verify content is accessible\n expect(fileTree.hal.getFileContents('/already/absolute.txt')).toSucceedWith('absolute content');\n expect(fileTree.hal.getFileContents('/relative/path.txt')).toSucceedWith('relative content');\n });\n });\n });\n\n describe('fromFileList', () => {\n test('creates FileTree from FileList', async () => {\n const fileList = createMockFileList([\n { name: 'file1.txt', content: 'content1' },\n { name: 'file2.txt', content: 'content2' }\n ]);\n\n const result = await FileApiTreeAccessors.fromFileList(fileList);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.getFile('/file1.txt')).toSucceed();\n expect(fileTree.getFile('/file2.txt')).toSucceed();\n });\n });\n\n test('creates FileTree from FileList with prefix', async () => {\n const fileList = createMockFileList([{ name: 'test.txt', content: 'content' }]);\n\n const result = await FileApiTreeAccessors.fromFileList(fileList, { prefix: '/uploads' });\n // Just verify the creation succeeds with prefix\n expect(result).toSucceed();\n });\n\n test('handles empty FileList', async () => {\n const fileList = createMockFileList([]);\n const result = await FileApiTreeAccessors.fromFileList(fileList);\n expect(result).toSucceed();\n });\n\n test('verifies File API compatibility', async () => {\n const fileList = createMockFileList([{ name: 'test.txt', content: 'test content' }]);\n\n // Verify our mock files have the correct API\n for (let i = 0; i < fileList.length; i++) {\n const file = fileList[i];\n const isValid = await verifyFileAPI(file);\n expect(isValid).toBe(true);\n }\n });\n });\n\n describe('fromDirectoryUpload', () => {\n test('creates FileTree from directory structure', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'project/src/index.js', content: 'console.log(\"main\");' },\n { path: 'project/src/utils.js', content: 'export const helper = () => {};' },\n { path: 'project/package.json', content: '{\"name\": \"test-project\"}' }\n ]);\n\n const result = await FileApiTreeAccessors.fromDirectoryUpload(fileList);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.getFile('/project/src/index.js')).toSucceed();\n expect(fileTree.getFile('/project/src/utils.js')).toSucceed();\n expect(fileTree.getFile('/project/package.json')).toSucceed();\n\n // Check directory structure\n expect(fileTree.getDirectory('/project')).toSucceed();\n expect(fileTree.getDirectory('/project/src')).toSucceed();\n });\n });\n\n test('creates FileTree from directory with prefix', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'app/config.json', content: '{\"setting\": \"value\"}' }\n ]);\n\n const result = await FileApiTreeAccessors.fromDirectoryUpload(fileList, { prefix: '/upload' });\n // Just verify the creation succeeds with directory prefix\n expect(result).toSucceed();\n });\n\n test('handles nested directory structures', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'deep/nested/structure/file.txt', content: 'deep content' },\n { path: 'deep/other/file.txt', content: 'other content' }\n ]);\n\n const result = await FileApiTreeAccessors.fromDirectoryUpload(fileList);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.getFile('/deep/nested/structure/file.txt')).toSucceed();\n expect(fileTree.getFile('/deep/other/file.txt')).toSucceed();\n\n expect(fileTree.getDirectory('/deep')).toSucceed();\n expect(fileTree.getDirectory('/deep/nested')).toSucceed();\n expect(fileTree.getDirectory('/deep/nested/structure')).toSucceed();\n expect(fileTree.getDirectory('/deep/other')).toSucceed();\n });\n });\n });\n\n describe('getOriginalFile', () => {\n test('finds file by exact path match', () => {\n const fileList = createMockFileList([\n { name: 'target.txt', content: 'target content' },\n { name: 'other.txt', content: 'other content' }\n ]);\n\n const result = FileApiTreeAccessors.getOriginalFile(fileList, 'target.txt');\n expect(result).toSucceedAndSatisfy((file) => {\n expect(file.name).toBe('target.txt');\n });\n });\n\n test('finds file by webkitRelativePath', () => {\n const fileList = createMockDirectoryFileList([{ path: 'folder/file.txt', content: 'content' }]);\n\n const result = FileApiTreeAccessors.getOriginalFile(fileList, 'folder/file.txt');\n expect(result).toSucceedAndSatisfy((file) => {\n expect((file as any).webkitRelativePath).toBe('folder/file.txt');\n });\n });\n\n test('fails for non-existent file', () => {\n const fileList = createMockFileList([{ name: 'exists.txt', content: 'content' }]);\n\n const result = FileApiTreeAccessors.getOriginalFile(fileList, 'missing.txt');\n expect(result).toFailWith(/File not found: missing\\.txt/);\n });\n\n test('handles empty FileList', () => {\n const fileList = createMockFileList([]);\n const result = FileApiTreeAccessors.getOriginalFile(fileList, 'any.txt');\n expect(result).toFailWith(/File not found/);\n });\n });\n\n describe('extractFileMetadata', () => {\n test('extracts metadata from regular files', () => {\n const testTime = Date.now();\n const file = createMockFile({\n name: 'test.txt',\n content: 'content',\n type: 'text/plain',\n lastModified: testTime\n });\n\n const metadata = FileApiTreeAccessors.extractFileMetadata(file);\n expect(metadata).toEqual({\n path: 'test.txt',\n name: 'test.txt',\n size: expect.any(Number),\n type: 'text/plain',\n lastModified: testTime\n });\n });\n\n test('extracts metadata with webkitRelativePath', () => {\n const file = createMockFile({\n name: 'file.txt',\n content: 'content',\n type: 'text/plain',\n webkitRelativePath: 'folder/file.txt'\n });\n\n const metadata = FileApiTreeAccessors.extractFileMetadata(file);\n expect(metadata).toEqual({\n path: 'folder/file.txt',\n name: 'file.txt',\n size: expect.any(Number),\n type: 'text/plain',\n lastModified: expect.any(Number)\n });\n });\n\n test('handles multiple files with different types', () => {\n const files = [\n createMockFile({ name: 'text.txt', content: 'text', type: 'text/plain' }),\n createMockFile({ name: 'data.json', content: '{}', type: 'application/json' }),\n createMockFile({ name: 'script.js', content: 'console.log(\"hi\");', type: 'application/javascript' })\n ];\n\n const metadata = files.map((file) => FileApiTreeAccessors.extractFileMetadata(file));\n expect(metadata).toHaveLength(3);\n\n expect(metadata.find((m) => m.name === 'text.txt')?.type).toBe('text/plain');\n expect(metadata.find((m) => m.name === 'data.json')?.type).toBe('application/json');\n expect(metadata.find((m) => m.name === 'script.js')?.type).toBe('application/javascript');\n });\n\n test('handles empty file array', () => {\n const files: File[] = [];\n const metadata = files.map((file) => FileApiTreeAccessors.extractFileMetadata(file));\n expect(metadata).toHaveLength(0);\n });\n\n test('includes file sizes', () => {\n const shortContent = 'hi';\n const longContent = 'a'.repeat(1000);\n\n const files = [\n createMockFile({ name: 'short.txt', content: shortContent }),\n createMockFile({ name: 'long.txt', content: longContent })\n ];\n\n const metadata = files.map((file) => FileApiTreeAccessors.extractFileMetadata(file));\n const shortMeta = metadata.find((m) => m.name === 'short.txt');\n const longMeta = metadata.find((m) => m.name === 'long.txt');\n\n expect(shortMeta?.size).toBeGreaterThan(0);\n expect(longMeta?.size).toBeGreaterThan(shortMeta?.size!);\n });\n });\n });\n\n describe('Integration with FileTree', () => {\n test('created FileTree supports standard operations', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'config/data.json', content: '{\"key\": \"value\"}' },\n { path: 'docs/readme.txt', content: 'This is a readme file' }\n ]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // Test file access\n const jsonFile = fileTree.getFile('/config/data.json');\n expect(jsonFile).toSucceedAndSatisfy((file) => {\n expect(file.name).toBe('data.json');\n expect(file.extension).toBe('.json');\n expect(file.baseName).toBe('data');\n });\n\n // Test directory access\n const configDir = fileTree.getDirectory('/config');\n expect(configDir).toSucceedAndSatisfy((dir) => {\n expect(dir.name).toBe('config');\n });\n\n // Test content retrieval\n const content = fileTree.hal.getFileContents('/config/data.json');\n expect(content).toSucceedWith('{\"key\": \"value\"}');\n });\n });\n\n test('handles JSON file parsing through FileTree', async () => {\n const jsonContent = '{\"name\": \"test\", \"version\": \"1.0.0\"}';\n const fileList = createMockFileList([{ name: 'package.json', content: jsonContent }]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n const file = fileTree.getFile('/package.json');\n expect(file).toSucceedAndSatisfy((fileItem) => {\n const jsonResult = fileItem.getContents();\n expect(jsonResult).toSucceedAndSatisfy((parsed) => {\n expect(parsed).toEqual({ name: 'test', version: '1.0.0' });\n });\n });\n });\n });\n\n test('supports directory traversal', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'src/file1.txt', content: 'content1' },\n { path: 'src/file2.txt', content: 'content2' }\n ]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n const srcDir = fileTree.getDirectory('/src');\n expect(srcDir).toSucceedAndSatisfy((dir) => {\n const children = dir.getChildren();\n expect(children).toSucceedAndSatisfy((childItems) => {\n expect(childItems).toHaveLength(2);\n const fileNames = childItems.map((item) => item.name).sort();\n expect(fileNames).toEqual(['file1.txt', 'file2.txt']);\n });\n });\n });\n });\n });\n\n describe('Error handling', () => {\n test('handles file read errors gracefully', async () => {\n // Create a file object with a failing text method\n const errorFile = {\n name: 'error.txt',\n size: 10,\n type: 'text/plain',\n lastModified: Date.now(),\n text: () => Promise.reject(new Error('Disk error'))\n } as unknown as File;\n\n // Create FileList with bad file\n const dt = new DataTransfer();\n dt.items.add(errorFile);\n const fileList = dt.files;\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n expect(result).toFailWith(/Failed to read file error\\.txt.*Disk error/);\n });\n\n test('handles invalid file paths gracefully', async () => {\n // Create files with problematic paths - test with empty name\n const fileList = createMockFileList([\n { name: '', content: 'content' } // Empty name might cause issues\n ]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n // Should either succeed by handling empty name or fail gracefully\n if (result.isFailure()) {\n expect(result.message).toContain('');\n } else {\n expect(result).toSucceed();\n }\n });\n });\n\n describe('create() method with different initializers', () => {\n describe('FileList initializers', () => {\n test('creates FileTree from FileList initializer', async () => {\n const fileList = createMockFileList([\n { name: 'file1.txt', content: 'content1' },\n { name: 'file2.txt', content: 'content2' }\n ]);\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/file1.txt')).toSucceedWith('content1');\n expect(fileTree.hal.getFileContents('/file2.txt')).toSucceedWith('content2');\n });\n });\n\n test('creates FileTree from multiple FileList initializers', async () => {\n const fileList1 = createMockFileList([{ name: 'group1-file1.txt', content: 'group1-content1' }]);\n const fileList2 = createMockFileList([{ name: 'group2-file1.txt', content: 'group2-content1' }]);\n\n const initializers = [{ fileList: fileList1 }, { fileList: fileList2 }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/group1-file1.txt')).toSucceedWith('group1-content1');\n expect(fileTree.hal.getFileContents('/group2-file1.txt')).toSucceedWith('group2-content1');\n });\n });\n\n test('handles empty FileList initializer', async () => {\n const fileList = createMockFileList([]);\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree).toBeDefined();\n });\n });\n\n test('handles file read errors in FileList processing', async () => {\n // Create a file that will fail when .text() is called\n const failingFile = {\n name: 'failing.txt',\n size: 10,\n type: 'text/plain',\n lastModified: Date.now(),\n webkitRelativePath: '',\n text: () => Promise.reject(new Error('File read error')),\n stream: () => new ReadableStream(),\n arrayBuffer: () => Promise.resolve(new ArrayBuffer(0)),\n slice: () => new Blob()\n } as unknown as File;\n\n // Create a FileList containing the failing file\n const fileList = {\n length: 1,\n item: (index: number) => (index === 0 ? failingFile : null),\n [0]: failingFile,\n [Symbol.iterator]: function* () {\n yield failingFile;\n }\n } as FileList;\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toFailWith(/Failed to read file failing\\.txt.*File read error/);\n });\n\n test('handles files with absolute paths (webkitRelativePath starting with /)', async () => {\n // Create files where webkitRelativePath already starts with '/'\n const fileWithAbsolutePath = {\n name: 'file.txt',\n size: 10,\n type: 'text/plain',\n lastModified: Date.now(),\n webkitRelativePath: '/absolute/path/file.txt', // Already absolute\n text: () => Promise.resolve('absolute content'),\n stream: () => new ReadableStream(),\n arrayBuffer: () => Promise.resolve(new ArrayBuffer(0)),\n slice: () => new Blob()\n } as unknown as File;\n\n const fileWithAbsoluteName = {\n name: '/root/file2.txt', // Name itself starts with slash\n size: 15,\n type: 'text/plain',\n lastModified: Date.now(),\n webkitRelativePath: '', // Empty, so will use name\n text: () => Promise.resolve('name absolute content'),\n stream: () => new ReadableStream(),\n arrayBuffer: () => Promise.resolve(new ArrayBuffer(0)),\n slice: () => new Blob()\n } as unknown as File;\n\n // Create a FileList containing files with absolute paths\n const fileList = {\n length: 2,\n item: (index: number) => {\n if (index === 0) return fileWithAbsolutePath;\n if (index === 1) return fileWithAbsoluteName;\n return null;\n },\n [0]: fileWithAbsolutePath,\n [1]: fileWithAbsoluteName,\n [Symbol.iterator]: function* () {\n yield fileWithAbsolutePath;\n yield fileWithAbsoluteName;\n }\n } as FileList;\n\n const initializers = [{ fileList }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // Verify absolute webkitRelativePath is used as-is (not double-slashed)\n expect(fileTree.hal.getFileContents('/absolute/path/file.txt')).toSucceedWith('absolute content');\n // Verify absolute name is used as-is (not double-slashed)\n expect(fileTree.hal.getFileContents('/root/file2.txt')).toSucceedWith('name absolute content');\n });\n });\n });\n\n describe('FileSystemFileHandle initializers', () => {\n function createMockFileHandle(\n name: string,\n content: string\n ): jest.Mocked<import('../../packlets/file-api-types').FileSystemFileHandle> {\n const mockFile = createMockFile({ name, content });\n return {\n kind: 'file',\n name,\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getFile: jest.fn().mockResolvedValue(mockFile),\n createWritable: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemFileHandle>;\n }\n\n test('creates FileTree from FileSystemFileHandle initializer', async () => {\n const fileHandle1 = createMockFileHandle('handle1.txt', 'handle content 1');\n const fileHandle2 = createMockFileHandle('handle2.txt', 'handle content 2');\n\n const initializers = [{ fileHandles: [fileHandle1, fileHandle2] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/handle1.txt')).toSucceedWith('handle content 1');\n expect(fileTree.hal.getFileContents('/handle2.txt')).toSucceedWith('handle content 2');\n });\n\n expect(fileHandle1.getFile).toHaveBeenCalled();\n expect(fileHandle2.getFile).toHaveBeenCalled();\n });\n\n test('creates FileTree from FileSystemFileHandle without prefix (current limitation)', async () => {\n const fileHandle = createMockFileHandle('data.txt', 'file content');\n\n const initializers = [{ fileHandles: [fileHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // Verify basic functionality works\n expect(fileTree.hal.getFileContents('/data.txt')).toSucceedWith('file content');\n });\n });\n\n test('creates FileTree from FileSystemFileHandle with per-initializer prefix (limitation)', async () => {\n const fileHandle = createMockFileHandle('data.txt', 'file content');\n\n // Note: Currently IFileHandleTreeInitializer.prefix is not implemented in _processFileHandles\n // This is inconsistent with IDirectoryHandleTreeInitializer which does support prefix\n const initializers = [{ fileHandles: [fileHandle], prefix: '/uploads' }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // Due to the implementation limitation, prefix on fileHandles initializer is ignored\n // File appears at root level instead of under prefix\n expect(fileTree.hal.getFileContents('/data.txt')).toSucceedWith('file content');\n });\n });\n\n test('handles FileSystemFileHandle read errors', async () => {\n const failingHandle = {\n kind: 'file' as const,\n name: 'failing.txt',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getFile: jest.fn().mockRejectedValue(new Error('File access denied')),\n createWritable: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemFileHandle>;\n\n const initializers = [{ fileHandles: [failingHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toFailWith(/Failed to read file handle failing\\.txt.*File access denied/);\n });\n\n test('handles empty FileSystemFileHandle array', async () => {\n const initializers = [{ fileHandles: [] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree).toBeDefined();\n });\n });\n });\n\n describe('FileSystemDirectoryHandle initializers', () => {\n function createMockDirectoryHandle(\n name: string,\n entries: Array<{\n name: string;\n content?: string;\n isDirectory?: boolean;\n children?: Array<{ name: string; content: string }>;\n }>\n ): jest.Mocked<import('../../packlets/file-api-types').FileSystemDirectoryHandle> {\n const mockEntries = entries.map((entry) => {\n if (entry.isDirectory) {\n const childEntries =\n entry.children?.map((child) => ({\n kind: 'file' as const,\n name: child.name,\n getFile: jest\n .fn()\n .mockResolvedValue(createMockFile({ name: child.name, content: child.content }))\n })) || [];\n\n return {\n kind: 'directory' as const,\n name: entry.name,\n values: jest.fn().mockReturnValue({\n async *[Symbol.asyncIterator]() {\n for (const child of childEntries) {\n yield child;\n }\n }\n })\n };\n } else {\n return {\n kind: 'file' as const,\n name: entry.name,\n getFile: jest\n .fn()\n .mockResolvedValue(createMockFile({ name: entry.name, content: entry.content || '' }))\n };\n }\n });\n\n return {\n kind: 'directory',\n name,\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getDirectoryHandle: jest.fn(),\n getFileHandle: jest.fn(),\n removeEntry: jest.fn(),\n resolve: jest.fn(),\n keys: jest.fn(),\n values: jest.fn().mockReturnValue({\n async *[Symbol.asyncIterator]() {\n for (const entry of mockEntries) {\n yield entry;\n }\n }\n }),\n entries: jest.fn(),\n [Symbol.asyncIterator]: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemDirectoryHandle>;\n }\n\n test('creates FileTree from FileSystemDirectoryHandle initializer', async () => {\n const dirHandle = createMockDirectoryHandle('testdir', [\n { name: 'file1.txt', content: 'dir content 1' },\n { name: 'file2.txt', content: 'dir content 2' }\n ]);\n\n const initializers = [{ dirHandles: [dirHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/testdir/file1.txt')).toSucceedWith('dir content 1');\n expect(fileTree.hal.getFileContents('/testdir/file2.txt')).toSucceedWith('dir content 2');\n });\n });\n\n test('creates FileTree from FileSystemDirectoryHandle with prefix', async () => {\n const dirHandle = createMockDirectoryHandle('data', [\n { name: 'config.json', content: '{\"setting\": \"value\"}' }\n ]);\n\n const initializers = [{ dirHandles: [dirHandle], prefix: 'project' }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/project/data/config.json')).toSucceedWith(\n '{\"setting\": \"value\"}'\n );\n });\n });\n\n test('handles recursive directory processing', async () => {\n const dirHandle = createMockDirectoryHandle('root', [\n { name: 'file.txt', content: 'root file' },\n {\n name: 'subdir',\n isDirectory: true,\n children: [{ name: 'nested.txt', content: 'nested file' }]\n }\n ]);\n\n const initializers = [{ dirHandles: [dirHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/root/file.txt')).toSucceedWith('root file');\n expect(fileTree.hal.getFileContents('/root/subdir/nested.txt')).toSucceedWith('nested file');\n });\n });\n\n test('handles non-recursive directory processing', async () => {\n const dirHandle = createMockDirectoryHandle('root', [\n { name: 'file.txt', content: 'root file' },\n {\n name: 'subdir',\n isDirectory: true,\n children: [{ name: 'nested.txt', content: 'nested file' }]\n }\n ]);\n\n const initializers = [{ dirHandles: [dirHandle], nonRecursive: true }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/root/file.txt')).toSucceedWith('root file');\n // Should not contain nested file in non-recursive mode\n expect(fileTree.getFile('/root/subdir/nested.txt')).toFail();\n });\n });\n\n test('handles directory iteration errors', async () => {\n const failingDirHandle = {\n kind: 'directory' as const,\n name: 'failing-dir',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getDirectoryHandle: jest.fn(),\n getFileHandle: jest.fn(),\n removeEntry: jest.fn(),\n resolve: jest.fn(),\n keys: jest.fn(),\n values: jest.fn().mockReturnValue({\n async *[Symbol.asyncIterator]() {\n throw new Error('Directory access denied');\n }\n }),\n entries: jest.fn(),\n [Symbol.asyncIterator]: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemDirectoryHandle>;\n\n const initializers = [{ dirHandles: [failingDirHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toFailWith(/Failed to process directory failing-dir.*Directory access denied/);\n });\n\n test('handles subdirectory processing failure in recursive mode', async () => {\n // Create a directory with a subdirectory that will fail to process\n const failingSubDir = {\n kind: 'directory' as const,\n name: 'failing-subdir',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getDirectoryHandle: jest.fn(),\n getFileHandle: jest.fn(),\n removeEntry: jest.fn(),\n resolve: jest.fn(),\n keys: jest.fn(),\n values: jest.fn().mockReturnValue({\n async *[Symbol.asyncIterator]() {\n throw new Error('Subdirectory access denied');\n }\n }),\n entries: jest.fn(),\n [Symbol.asyncIterator]: jest.fn()\n };\n\n const rootDirHandle = {\n kind: 'directory' as const,\n name: 'root',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getDirectoryHandle: jest.fn(),\n getFileHandle: jest.fn(),\n removeEntry: jest.fn(),\n resolve: jest.fn(),\n keys: jest.fn(),\n values: jest.fn().mockReturnValue({\n async *[Symbol.asyncIterator]() {\n yield failingSubDir; // This subdirectory will fail\n }\n }),\n entries: jest.fn(),\n [Symbol.asyncIterator]: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemDirectoryHandle>;\n\n const initializers = [{ dirHandles: [rootDirHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toFailWith(/Failed to process directory failing-subdir.*Subdirectory access denied/);\n });\n\n test('handles empty directory', async () => {\n const emptyDirHandle = createMockDirectoryHandle('empty', []);\n\n const initializers = [{ dirHandles: [emptyDirHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree).toBeDefined();\n });\n });\n });\n\n describe('unknown initializer types', () => {\n test('fails with unknown initializer type', async () => {\n const unknownInitializer = {\n unknown: 'type'\n } as unknown as import('../../packlets/file-tree').TreeInitializer;\n const initializers = [unknownInitializer];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toFailWith(/Unknown initializer type/);\n });\n });\n\n describe('mixed initializer types', () => {\n test('creates FileTree from mixed initializer types', async () => {\n const fileList = createMockFileList([{ name: 'fromList.txt', content: 'list content' }]);\n const fileHandle = {\n kind: 'file' as const,\n name: 'fromHandle.txt',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getFile: jest\n .fn()\n .mockResolvedValue(createMockFile({ name: 'fromHandle.txt', content: 'handle content' })),\n createWritable: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemFileHandle>;\n\n const initializers = [{ fileList }, { fileHandles: [fileHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/fromList.txt')).toSucceedWith('list content');\n expect(fileTree.hal.getFileContents('/fromHandle.txt')).toSucceedWith('handle content');\n });\n });\n\n test('stops processing on first error from any initializer', async () => {\n const goodFileList = createMockFileList([{ name: 'good.txt', content: 'good content' }]);\n const badFileHandle = {\n kind: 'file' as const,\n name: 'bad.txt',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getFile: jest.fn().mockRejectedValue(new Error('Handle error')),\n createWritable: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemFileHandle>;\n\n const initializers = [{ fileList: goodFileList }, { fileHandles: [badFileHandle] }];\n const result = await FileApiTreeAccessors.create(initializers);\n\n expect(result).toFailWith(/Failed to read file handle bad\\.txt.*Handle error/);\n });\n });\n\n describe('branch coverage tests', () => {\n function createMockDirectoryHandle(\n name: string,\n entries: Array<{\n name: string;\n content?: string;\n isDirectory?: boolean;\n children?: Array<{ name: string; content: string }>;\n }>\n ): jest.Mocked<import('../../packlets/file-api-types').FileSystemDirectoryHandle> {\n const mockEntries = entries.map((entry) => {\n if (entry.isDirectory) {\n const childEntries =\n entry.children?.map((child) => ({\n kind: 'file' as const,\n name: child.name,\n getFile: jest\n .fn()\n .mockResolvedValue(createMockFile({ name: child.name, content: child.content }))\n })) || [];\n\n return {\n kind: 'directory' as const,\n name: entry.name,\n values: jest.fn().mockReturnValue({\n async *[Symbol.asyncIterator]() {\n for (const child of childEntries) {\n yield child;\n }\n }\n })\n };\n } else {\n return {\n kind: 'file' as const,\n name: entry.name,\n getFile: jest\n .fn()\n .mockResolvedValue(createMockFile({ name: entry.name, content: entry.content || '' }))\n };\n }\n });\n\n return {\n kind: 'directory',\n name,\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getDirectoryHandle: jest.fn(),\n getFileHandle: jest.fn(),\n removeEntry: jest.fn(),\n resolve: jest.fn(),\n keys: jest.fn(),\n values: jest.fn().mockReturnValue({\n async *[Symbol.asyncIterator]() {\n for (const entry of mockEntries) {\n yield entry;\n }\n }\n }),\n entries: jest.fn(),\n [Symbol.asyncIterator]: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemDirectoryHandle>;\n }\n\n test('tests prefix handling in various scenarios', async () => {\n // For branch coverage: Test multiple scenarios with simple, working examples\n\n const fileList = createMockFileList([{ name: 'test.txt', content: 'simple test' }]);\n\n // Test params.prefix when no initializer prefix exists\n const result1 = await FileApiTreeAccessors.create([{ fileList }], { prefix: '/from-params' });\n expect(result1).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/from-params/test.txt')).toSucceedWith('simple test');\n });\n\n // Test when params is undefined (for line 314: params?.prefix ?? '')\n const result2 = await FileApiTreeAccessors.create([{ fileList }]); // no params\n expect(result2).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/test.txt')).toSucceedWith('simple test');\n });\n });\n\n test('tests file handle processing with undefined params prefix', async () => {\n const fileHandle = {\n kind: 'file' as const,\n name: 'test.txt',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getFile: jest.fn().mockResolvedValue(createMockFile({ name: 'test.txt', content: 'content' })),\n createWritable: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemFileHandle>;\n\n // Test line 314: params?.prefix ?? '' when params is undefined\n const initializers = [{ fileHandles: [fileHandle] }];\n const result1 = await FileApiTreeAccessors.create(initializers); // no params\n expect(result1).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/test.txt')).toSucceedWith('content');\n });\n\n // Test line 314: params?.prefix ?? '' when params.prefix is undefined\n const result2 = await FileApiTreeAccessors.create(initializers, {}); // empty params object\n expect(result2).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/test.txt')).toSucceedWith('content');\n });\n });\n\n test('tests directory handle processing with undefined prefix fallback', async () => {\n // For branch coverage of line 348: prefix ?? params?.prefix when prefix parameter is undefined\n // Again, let's use a simpler approach with fileList which we know works\n\n const fileList = createMockFileList([{ name: 'test.txt', content: 'content' }]);\n\n // Test the case where no prefix is provided in initializer but params has one\n const initializers = [{ fileList }]; // no prefix in initializer\n const result = await FileApiTreeAccessors.create(initializers, { prefix: '/fallback-prefix' });\n\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/fallback-prefix/test.txt')).toSucceedWith('content');\n });\n });\n\n test('tests inferContentType orDefault() branches with failing content type inference', async () => {\n const fileHandle = {\n kind: 'file' as const,\n name: 'test.txt',\n isSameEntry: jest.fn(),\n queryPermission: jest.fn(),\n requestPermission: jest.fn(),\n getFile: jest.fn().mockResolvedValue(createMockFile({ name: 'test.txt', content: 'content' })),\n createWritable: jest.fn()\n } as jest.Mocked<import('../../packlets/file-api-types').FileSystemFileHandle>;\n\n const dirHandle = createMockDirectoryHandle('dir', [{ name: 'file.txt', content: 'dir content' }]);\n\n // Test lines 315 and 385: inferContentType returning failure, triggering orDefault()\n const failingInferContentType = jest.fn(() => ({\n isSuccess: () => false,\n isFailure: () => true,\n message: 'Content type inference failed',\n orDefault: () => undefined\n })) as any;\n\n const fileHandleInitializers = [{ fileHandles: [fileHandle] }];\n const fileHandleResult = await FileApiTreeAccessors.create(fileHandleInitializers, {\n inferContentType: failingInferContentType\n });\n\n expect(fileHandleResult).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/test.txt')).toSucceedWith('content');\n });\n\n const dirHandleInitializers = [{ dirHandles: [dirHandle] }];\n const dirHandleResult = await FileApiTreeAccessors.create(dirHandleInitializers, {\n inferContentType: failingInferContentType\n });\n\n expect(dirHandleResult).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/dir/file.txt')).toSucceedWith('dir content');\n });\n });\n\n test('tests path normalization branches', async () => {\n const fileList = createMockFileList([{ name: 'test.txt', content: 'content' }]);\n\n // Test line 416: normalized.startsWith('/') ? normalized : `/${normalized}`\n // Test the case where normalized path already starts with '/'\n const result1 = await FileApiTreeAccessors.create([{ fileList }], { prefix: '/' });\n expect(result1).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/test.txt')).toSucceedWith('content');\n });\n\n // Test the case where normalized path doesn't start with '/' (the else branch)\n // This is covered functionally by the tests above where prefix is provided\n // The _normalizePath method adds '/' when the combined path doesn't start with one\n\n // Test the case where normalized path DOES start with '/' (the first branch)\n // This happens when the file path itself is absolute and no prefix is used\n const fileListAbsolute = createMockFileList([\n { name: '/absolute/test.txt', content: 'absolute content' }\n ]);\n const result3 = await FileApiTreeAccessors.create([{ fileList: fileListAbsolute }]);\n expect(result3).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.hal.getFileContents('/absolute/test.txt')).toSucceedWith('absolute content');\n });\n });\n });\n });\n\n describe('Content Type functionality', () => {\n describe('inferContentType parameter', () => {\n test('uses inferContentType function when provided', async () => {\n const fileList = createMockFileList([\n { name: 'document.txt', content: 'text content', type: 'text/plain' },\n { name: 'data.json', content: '{\"key\": \"value\"}', type: 'application/json' }\n ]);\n\n const inferContentType = jest.fn((filePath: string, provided?: string) => {\n if (filePath.endsWith('.txt')) {\n return { isSuccess: () => true, value: 'custom-text', orDefault: () => 'custom-text' };\n }\n if (filePath.endsWith('.json')) {\n return { isSuccess: () => true, value: 'custom-json', orDefault: () => 'custom-json' };\n }\n return { isSuccess: () => true, value: provided, orDefault: () => provided };\n }) as any;\n\n const result = await FileApiTreeAccessors.fromFileList(fileList, { inferContentType });\n expect(result).toSucceedAndSatisfy((fileTree) => {\n // fromFileList now consistently passes both path and MIME type parameters\n // This is consistent with _processFileList behavior\n expect(inferContentType).toHaveBeenCalledWith('/document.txt', 'text/plain');\n expect(inferContentType).toHaveBeenCalledWith('/data.json', 'application/json');\n\n // The specific content type assignments depend on the internal FileTree implementation\n expect(fileTree.getFile('/document.txt')).toSucceed();\n expect(fileTree.getFile('/data.json')).toSucceed();\n });\n });\n\n test('fromFileList only passes path parameter (current limitation)', async () => {\n const fileList = createMockFileList([\n { name: 'image.png', content: 'binary data', type: 'image/png' },\n { name: 'unknown.xyz', content: 'unknown data', type: '' }\n ]);\n\n const inferContentType = jest.fn((filePath: string, provided?: string) => {\n return {\n isSuccess: () => true,\n value: `custom-${provided || 'unknown'}`,\n orDefault: () => `custom-${provided || 'unknown'}`\n };\n }) as any;\n\n const result = await FileApiTreeAccessors.fromFileList(fileList, { inferContentType });\n expect(result).toSucceed();\n\n // fromFileList now passes both path and MIME type parameters\n expect(inferContentType).toHaveBeenCalledWith('/image.png', 'image/png');\n expect(inferContentType).toHaveBeenCalledWith('/unknown.xyz', 'text/plain');\n });\n\n test('works with fromDirectoryUpload', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'project/src/component.tsx', content: 'React component', type: 'text/typescript' },\n { path: 'project/styles/main.css', content: 'CSS styles', type: 'text/css' }\n ]);\n\n const inferContentType = jest.fn((filePath: string, provided?: string) => {\n if (filePath.includes('.tsx')) {\n return { isSuccess: () => true, value: 'typescript-react', orDefault: () => 'typescript-react' };\n }\n return { isSuccess: () => true, value: provided, orDefault: () => provided };\n }) as any;\n\n const result = await FileApiTreeAccessors.fromDirectoryUpload(fileList, { inferContentType });\n expect(result).toSucceed();\n\n // fromDirectoryUpload now consistently passes both path and MIME type parameters\n expect(inferContentType).toHaveBeenCalledWith('/project/src/component.tsx', 'text/typescript');\n expect(inferContentType).toHaveBeenCalledWith('/project/styles/main.css', 'text/css');\n });\n\n test('receives provided MIME type when using create method (correct behavior)', async () => {\n // The create method uses internal _processFileList which correctly passes both parameters\n const fileList1 = createMockFileList([\n { name: 'file1.txt', content: 'content1', type: 'text/plain' }\n ]);\n const fileList2 = createMockFileList([\n { name: 'file2.md', content: '# Markdown', type: 'text/markdown' }\n ]);\n\n const inferContentType = jest.fn((filePath: string, provided?: string) => {\n return {\n isSuccess: () => true,\n value: `inferred-${provided}`,\n orDefault: () => `inferred-${provided}`\n };\n }) as any;\n\n const initializers = [{ fileList: fileList1 }, { fileList: fileList2 }];\n const result = await FileApiTreeAccessors.create(initializers, { inferContentType });\n\n expect(result).toSucceed();\n // The create method correctly passes both path and MIME type\n expect(inferContentType).toHaveBeenCalledWith('/file1.txt', 'text/plain');\n expect(inferContentType).toHaveBeenCalledWith('/file2.md', 'text/markdown');\n });\n\n test('handles cases where inferContentType returns undefined', async () => {\n const fileList = createMockFileList([\n { name: 'test.unknown', content: 'unknown content', type: 'application/octet-stream' }\n ]);\n\n const inferContentType = jest.fn((filePath: string, provided?: string) => {\n // Return undefined to indicate no content type could be inferred\n return { isSuccess: () => true, value: undefined, orDefault: () => undefined };\n }) as any;\n\n const result = await FileApiTreeAccessors.fromFileList(fileList, { inferContentType });\n expect(result).toSucceed();\n\n expect(inferContentType).toHaveBeenCalledWith('/test.unknown');\n });\n\n test('uses default behavior when inferContentType not provided', async () => {\n const fileList = createMockFileList([\n { name: 'default.txt', content: 'default content', type: 'text/plain' }\n ]);\n\n // No inferContentType parameter provided\n const result = await FileApiTreeAccessors.fromFileList(fileList);\n expect(result).toSucceedAndSatisfy((fileTree) => {\n expect(fileTree.getFile('/default.txt')).toSucceed();\n });\n });\n });\n\n describe('ContentType with FileTreeHelpers', () => {\n test('fromFileList passes through inferContentType parameter', async () => {\n const fileList = createMockFileList([\n { name: 'helper.js', content: 'JS content', type: 'application/javascript' }\n ]);\n\n const inferContentType = jest.fn((filePath: string, provided?: string) => {\n return { isSuccess: () => true, value: 'helper-js', orDefault: () => 'helper-js' };\n }) as any;\n\n const result = await FileTreeHelpers.fromFileList(fileList, { inferContentType });\n expect(result).toSucceed();\n expect(inferContentType).toHaveBeenCalledWith('/helper.js', 'application/javascript');\n });\n\n test('fromDirectoryUpload passes through inferContentType parameter', async () => {\n const fileList = createMockDirectoryFileList([\n { path: 'dist/bundle.js', content: 'bundled JS', type: 'application/javascript' }\n ]);\n\n const inferContentType = jest.fn((filePath: string, provided?: string) => {\n return { isSuccess: () => true, value: 'bundled-js', orDefault: () => 'bundled-js' };\n }) as any;\n\n const result = await FileTreeHelpers.fromDirectoryUpload(fileList, { inferContentType });\n expect(result).toSucceed();\n expect(inferContentType).toHaveBeenCalledWith('/dist/bundle.js', 'application/javascript');\n });\n });\n });\n\n describe('createFromHttp', () => {\n test('succeeds and returns a FileTree when HTTP backend loads successfully', async () => {\n const fetchImpl = makeMockHttpFetch([\n {\n ok: true,\n jsonValue: { path: '/', children: [{ path: '/data.json', name: 'data.json', type: 'file' }] }\n },\n { ok: true, jsonValue: { path: '/data.json', contents: '{\"items\":{}}' } }\n ]);\n\n const result = await FileApiTreeAccessors.createFromHttp({\n baseUrl: 'http://localhost:3000',\n fetchImpl,\n mutable: true\n });\n\n expect(result).toSucceedAndSatisfy((tree) => {\n expect(tree).toBeInstanceOf(FileTree.FileTree);\n expect(tree.getFile('/data.json')).toSucceed();\n expect(FileTree.isPersistentAccessors(tree.hal)).toBe(true);\n });\n });\n\n test('fails when the HTTP backend returns an error during initial load', async () => {\n const fetchImpl = makeMockHttpFetch([{ ok: false, status: 503, textValue: 'Service Unavailable' }]);\n\n const result = await FileApiTreeAccessors.createFromHttp({\n baseUrl: 'http://localhost:3000',\n fetchImpl\n });\n\n expect(result).toFailWith(/service unavailable/i);\n });\n });\n});\n"]}
@@ -219,6 +219,16 @@ describe('File API Types', () => {
219
219
  };
220
220
  await expect((0, file_api_types_1.safeShowOpenFilePicker)(mockWindow)).rejects.toThrow('User cancelled file picker');
221
221
  });
222
+ test('returns null when user cancels (AbortError)', async () => {
223
+ const abortError = new DOMException('The user aborted a request.', 'AbortError');
224
+ const mockWindow = {
225
+ showOpenFilePicker: jest.fn().mockRejectedValue(abortError),
226
+ showSaveFilePicker: jest.fn(),
227
+ showDirectoryPicker: jest.fn()
228
+ };
229
+ const result = await (0, file_api_types_1.safeShowOpenFilePicker)(mockWindow);
230
+ expect(result).toBeNull();
231
+ });
222
232
  });
223
233
  describe('safeShowSaveFilePicker', () => {
224
234
  test('calls showSaveFilePicker when File System Access API is supported', async () => {
@@ -280,6 +290,16 @@ describe('File API Types', () => {
280
290
  };
281
291
  await expect((0, file_api_types_1.safeShowSaveFilePicker)(mockWindow)).rejects.toThrow('Save operation failed');
282
292
  });
293
+ test('returns null when user cancels (AbortError)', async () => {
294
+ const abortError = new DOMException('The user aborted a request.', 'AbortError');
295
+ const mockWindow = {
296
+ showOpenFilePicker: jest.fn(),
297
+ showSaveFilePicker: jest.fn().mockRejectedValue(abortError),
298
+ showDirectoryPicker: jest.fn()
299
+ };
300
+ const result = await (0, file_api_types_1.safeShowSaveFilePicker)(mockWindow);
301
+ expect(result).toBeNull();
302
+ });
283
303
  });
284
304
  describe('safeShowDirectoryPicker', () => {
285
305
  test('calls showDirectoryPicker when File System Access API is supported', async () => {
@@ -347,6 +367,16 @@ describe('File API Types', () => {
347
367
  };
348
368
  await expect((0, file_api_types_1.safeShowDirectoryPicker)(mockWindow)).rejects.toThrow('Directory access denied');
349
369
  });
370
+ test('returns null when user cancels (AbortError)', async () => {
371
+ const abortError = new DOMException('The user aborted a request.', 'AbortError');
372
+ const mockWindow = {
373
+ showOpenFilePicker: jest.fn(),
374
+ showSaveFilePicker: jest.fn(),
375
+ showDirectoryPicker: jest.fn().mockRejectedValue(abortError)
376
+ };
377
+ const result = await (0, file_api_types_1.safeShowDirectoryPicker)(mockWindow);
378
+ expect(result).toBeNull();
379
+ });
350
380
  });
351
381
  describe('integration tests', () => {
352
382
  test('type guards work with handles returned from safe picker functions', async () => {