@fgv/ts-web-extras 5.1.0-1 → 5.1.0-11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.rush/temp/63a2c58f11944fdb592459d835a6483c79343b3f.tar.log +237 -0
- package/.rush/temp/chunked-rush-logs/ts-web-extras.build.chunks.jsonl +19 -39
- package/.rush/temp/operation/build/all.log +19 -39
- package/.rush/temp/operation/build/log-chunks.jsonl +19 -39
- package/.rush/temp/operation/build/state.json +1 -1
- package/.rush/temp/shrinkwrap-deps.json +690 -633
- package/config/typedoc.json +2 -1
- package/dist/packlets/file-tree/httpTreeAccessors.js +128 -41
- package/dist/packlets/file-tree/httpTreeAccessors.js.map +1 -1
- package/dist/test/unit/httpTreeAccessors.test.js +438 -74
- package/dist/test/unit/httpTreeAccessors.test.js.map +1 -1
- package/dist/ts-web-extras.d.ts +20 -0
- package/dist/tsdoc-metadata.json +1 -1
- package/docs/CryptoUtils/README.md +60 -0
- package/docs/CryptoUtils/classes/BrowserCryptoProvider.decrypt.md +27 -0
- package/docs/CryptoUtils/classes/BrowserCryptoProvider.deriveKey.md +26 -0
- package/docs/CryptoUtils/classes/BrowserCryptoProvider.encrypt.md +25 -0
- package/docs/CryptoUtils/classes/BrowserCryptoProvider.fromBase64.md +24 -0
- package/docs/CryptoUtils/classes/BrowserCryptoProvider.generateKey.md +17 -0
- package/docs/CryptoUtils/classes/BrowserCryptoProvider.generateRandomBytes.md +24 -0
- package/docs/CryptoUtils/classes/BrowserCryptoProvider.md +151 -0
- package/docs/CryptoUtils/classes/BrowserCryptoProvider.toBase64.md +24 -0
- package/docs/CryptoUtils/classes/BrowserHashProvider.hashParts.md +26 -0
- package/docs/CryptoUtils/classes/BrowserHashProvider.hashString.md +25 -0
- package/docs/CryptoUtils/classes/BrowserHashProvider.md +81 -0
- package/docs/CryptoUtils/functions/createBrowserCryptoProvider.md +12 -0
- package/docs/FileTreeHelpers/README.md +85 -0
- package/docs/FileTreeHelpers/functions/extractFileListMetadata.md +11 -0
- package/docs/FileTreeHelpers/functions/extractFileMetadata.md +11 -0
- package/docs/FileTreeHelpers/functions/fromDirectoryUpload.md +12 -0
- package/docs/FileTreeHelpers/functions/fromFileList.md +12 -0
- package/docs/FileTreeHelpers/functions/getOriginalFile.md +11 -0
- package/docs/FileTreeHelpers/variables/defaultFileApiTreeInitParams.md +9 -0
- package/docs/README.md +499 -53
- package/docs/classes/BrowserCryptoProvider.decrypt.md +27 -0
- package/docs/classes/BrowserCryptoProvider.deriveKey.md +26 -0
- package/docs/classes/BrowserCryptoProvider.encrypt.md +25 -0
- package/docs/classes/BrowserCryptoProvider.fromBase64.md +24 -0
- package/docs/classes/BrowserCryptoProvider.generateKey.md +17 -0
- package/docs/classes/BrowserCryptoProvider.generateRandomBytes.md +24 -0
- package/docs/classes/BrowserCryptoProvider.md +151 -0
- package/docs/classes/BrowserCryptoProvider.toBase64.md +24 -0
- package/docs/classes/BrowserHashProvider.hashParts.md +26 -0
- package/docs/classes/BrowserHashProvider.hashString.md +25 -0
- package/docs/classes/BrowserHashProvider.md +81 -0
- package/docs/classes/DirectoryHandleStore.getAll.md +17 -0
- package/docs/classes/DirectoryHandleStore.getAllLabels.md +17 -0
- package/docs/classes/DirectoryHandleStore.load.md +24 -0
- package/docs/classes/DirectoryHandleStore.md +65 -61
- package/docs/classes/DirectoryHandleStore.remove.md +24 -0
- package/docs/classes/DirectoryHandleStore.save.md +25 -0
- package/docs/classes/FileApiTreeAccessors.create.md +25 -0
- package/docs/classes/FileApiTreeAccessors.createFromHttp.md +24 -0
- package/docs/classes/FileApiTreeAccessors.createFromLocalStorage.md +25 -0
- package/docs/classes/FileApiTreeAccessors.createPersistent.md +26 -0
- package/docs/classes/FileApiTreeAccessors.createPersistentFromFile.md +27 -0
- package/docs/classes/FileApiTreeAccessors.extractFileMetadata.md +24 -0
- package/docs/classes/FileApiTreeAccessors.fromDirectoryUpload.md +25 -0
- package/docs/classes/FileApiTreeAccessors.fromFileList.md +25 -0
- package/docs/classes/FileApiTreeAccessors.getOriginalFile.md +27 -0
- package/docs/classes/FileApiTreeAccessors.md +87 -201
- package/docs/classes/FileSystemAccessTreeAccessors.deleteFile.md +22 -0
- package/docs/classes/FileSystemAccessTreeAccessors.fileIsMutable.md +22 -0
- package/docs/classes/FileSystemAccessTreeAccessors.fromDirectoryHandle.md +25 -0
- package/docs/classes/FileSystemAccessTreeAccessors.fromFileHandle.md +29 -0
- package/docs/classes/FileSystemAccessTreeAccessors.getDirtyPaths.md +15 -0
- package/docs/classes/FileSystemAccessTreeAccessors.isDirty.md +15 -0
- package/docs/classes/FileSystemAccessTreeAccessors.md +128 -410
- package/docs/classes/FileSystemAccessTreeAccessors.saveFileContents.md +23 -0
- package/docs/classes/FileSystemAccessTreeAccessors.syncToDisk.md +15 -0
- package/docs/classes/HttpTreeAccessors.deleteFile.md +22 -0
- package/docs/classes/HttpTreeAccessors.fileIsMutable.md +24 -0
- package/docs/classes/HttpTreeAccessors.fromHttp.md +24 -0
- package/docs/classes/HttpTreeAccessors.getDirtyPaths.md +17 -0
- package/docs/classes/HttpTreeAccessors.isDirty.md +17 -0
- package/docs/classes/HttpTreeAccessors.md +121 -368
- package/docs/classes/HttpTreeAccessors.saveFileContents.md +25 -0
- package/docs/classes/HttpTreeAccessors.syncToDisk.md +22 -0
- package/docs/classes/LocalStorageTreeAccessors.deleteFile.md +24 -0
- package/docs/classes/LocalStorageTreeAccessors.fileIsMutable.md +24 -0
- package/docs/classes/LocalStorageTreeAccessors.fromStorage.md +25 -0
- package/docs/classes/LocalStorageTreeAccessors.getDirtyPaths.md +17 -0
- package/docs/classes/LocalStorageTreeAccessors.isDirty.md +17 -0
- package/docs/classes/LocalStorageTreeAccessors.md +121 -371
- package/docs/classes/LocalStorageTreeAccessors.saveFileContents.md +25 -0
- package/docs/classes/LocalStorageTreeAccessors.syncToDisk.md +17 -0
- package/docs/functions/createBrowserCryptoProvider.md +12 -0
- package/docs/functions/exportAsJson.md +6 -17
- package/docs/functions/exportUsingFileSystemAPI.md +6 -21
- package/docs/functions/extractDirectoryPath.md +6 -16
- package/docs/functions/extractFileListMetadata.md +11 -0
- package/docs/functions/extractFileMetadata.md +11 -0
- package/docs/functions/fromDirectoryUpload.md +12 -0
- package/docs/functions/fromFileList.md +12 -0
- package/docs/functions/getOriginalFile.md +11 -0
- package/docs/functions/isDirectoryHandle.md +6 -18
- package/docs/functions/isFileHandle.md +6 -18
- package/docs/functions/isFilePath.md +6 -16
- package/docs/functions/parseContextFilter.md +6 -16
- package/docs/functions/parseQualifierDefaults.md +6 -16
- package/docs/functions/parseResourceTypes.md +6 -16
- package/docs/functions/parseUrlParameters.md +6 -10
- package/docs/functions/safeShowDirectoryPicker.md +6 -19
- package/docs/functions/safeShowOpenFilePicker.md +6 -19
- package/docs/functions/safeShowSaveFilePicker.md +6 -19
- package/docs/functions/supportsFileSystemAccess.md +6 -18
- package/docs/interfaces/FilePickerAcceptType.accept.md +9 -0
- package/docs/interfaces/FilePickerAcceptType.description.md +9 -0
- package/docs/interfaces/FilePickerAcceptType.md +54 -9
- package/docs/interfaces/FileSystemCreateWritableOptions.keepExistingData.md +9 -0
- package/docs/interfaces/FileSystemCreateWritableOptions.md +37 -8
- package/docs/interfaces/FileSystemDirectoryHandle._asyncIterator_.md +13 -0
- package/docs/interfaces/FileSystemDirectoryHandle.entries.md +13 -0
- package/docs/interfaces/FileSystemDirectoryHandle.getDirectoryHandle.md +21 -0
- package/docs/interfaces/FileSystemDirectoryHandle.getFileHandle.md +21 -0
- package/docs/interfaces/FileSystemDirectoryHandle.keys.md +13 -0
- package/docs/interfaces/FileSystemDirectoryHandle.kind.md +9 -0
- package/docs/interfaces/FileSystemDirectoryHandle.md +140 -103
- package/docs/interfaces/FileSystemDirectoryHandle.removeEntry.md +21 -0
- package/docs/interfaces/FileSystemDirectoryHandle.resolve.md +20 -0
- package/docs/interfaces/FileSystemDirectoryHandle.values.md +13 -0
- package/docs/interfaces/FileSystemFileHandle.createWritable.md +20 -0
- package/docs/interfaces/FileSystemFileHandle.getFile.md +13 -0
- package/docs/interfaces/FileSystemFileHandle.kind.md +9 -0
- package/docs/interfaces/FileSystemFileHandle.md +98 -58
- package/docs/interfaces/FileSystemGetDirectoryOptions.create.md +9 -0
- package/docs/interfaces/FileSystemGetDirectoryOptions.md +37 -8
- package/docs/interfaces/FileSystemGetFileOptions.create.md +9 -0
- package/docs/interfaces/FileSystemGetFileOptions.md +37 -8
- package/docs/interfaces/FileSystemHandle.isSameEntry.md +20 -0
- package/docs/interfaces/FileSystemHandle.kind.md +9 -0
- package/docs/interfaces/FileSystemHandle.md +88 -39
- package/docs/interfaces/FileSystemHandle.name.md +9 -0
- package/docs/interfaces/FileSystemHandle.queryPermission.md +20 -0
- package/docs/interfaces/FileSystemHandle.requestPermission.md +20 -0
- package/docs/interfaces/FileSystemHandlePermissionDescriptor.md +37 -8
- package/docs/interfaces/FileSystemHandlePermissionDescriptor.mode.md +9 -0
- package/docs/interfaces/FileSystemRemoveOptions.md +37 -8
- package/docs/interfaces/FileSystemRemoveOptions.recursive.md +9 -0
- package/docs/interfaces/FileSystemWritableFileStream.md +83 -68
- package/docs/interfaces/FileSystemWritableFileStream.seek.md +20 -0
- package/docs/interfaces/FileSystemWritableFileStream.truncate.md +20 -0
- package/docs/interfaces/FileSystemWritableFileStream.write.md +20 -0
- package/docs/interfaces/IDirectoryHandleTreeInitializer.dirHandles.md +9 -0
- package/docs/interfaces/IDirectoryHandleTreeInitializer.md +71 -10
- package/docs/interfaces/IDirectoryHandleTreeInitializer.nonRecursive.md +9 -0
- package/docs/interfaces/IDirectoryHandleTreeInitializer.prefix.md +9 -0
- package/docs/interfaces/IFileHandleTreeInitializer.fileHandles.md +9 -0
- package/docs/interfaces/IFileHandleTreeInitializer.md +54 -9
- package/docs/interfaces/IFileHandleTreeInitializer.prefix.md +9 -0
- package/docs/interfaces/IFileListTreeInitializer.fileList.md +9 -0
- package/docs/interfaces/IFileListTreeInitializer.md +37 -8
- package/docs/interfaces/IFileMetadata.lastModified.md +9 -0
- package/docs/interfaces/IFileMetadata.md +105 -12
- package/docs/interfaces/IFileMetadata.name.md +9 -0
- package/docs/interfaces/IFileMetadata.path.md +9 -0
- package/docs/interfaces/IFileMetadata.size.md +9 -0
- package/docs/interfaces/IFileMetadata.type.md +9 -0
- package/docs/interfaces/IFileSystemAccessTreeParams.autoSync.md +12 -0
- package/docs/interfaces/IFileSystemAccessTreeParams.filePath.md +13 -0
- package/docs/interfaces/IFileSystemAccessTreeParams.logger.md +11 -0
- package/docs/interfaces/IFileSystemAccessTreeParams.md +138 -20
- package/docs/interfaces/IFileSystemAccessTreeParams.requireWritePermission.md +13 -0
- package/docs/interfaces/IFsAccessApis.md +36 -31
- package/docs/interfaces/IFsAccessApis.showDirectoryPicker.md +20 -0
- package/docs/interfaces/IFsAccessApis.showOpenFilePicker.md +20 -0
- package/docs/interfaces/IFsAccessApis.showSaveFilePicker.md +20 -0
- package/docs/interfaces/IHttpTreeParams.autoSync.md +9 -0
- package/docs/interfaces/IHttpTreeParams.baseUrl.md +9 -0
- package/docs/interfaces/IHttpTreeParams.fetchImpl.md +9 -0
- package/docs/interfaces/IHttpTreeParams.logger.md +9 -0
- package/docs/interfaces/IHttpTreeParams.md +172 -22
- package/docs/interfaces/IHttpTreeParams.namespace.md +9 -0
- package/docs/interfaces/IHttpTreeParams.userId.md +9 -0
- package/docs/interfaces/ILocalStorageTreeParams.autoSync.md +12 -0
- package/docs/interfaces/ILocalStorageTreeParams.md +121 -20
- package/docs/interfaces/ILocalStorageTreeParams.pathToKeyMap.md +13 -0
- package/docs/interfaces/ILocalStorageTreeParams.storage.md +12 -0
- package/docs/interfaces/IUrlConfigOptions.config.md +11 -0
- package/docs/interfaces/IUrlConfigOptions.configStartDir.md +11 -0
- package/docs/interfaces/IUrlConfigOptions.contextFilter.md +11 -0
- package/docs/interfaces/IUrlConfigOptions.input.md +11 -0
- package/docs/interfaces/IUrlConfigOptions.inputStartDir.md +11 -0
- package/docs/interfaces/IUrlConfigOptions.interactive.md +11 -0
- package/docs/interfaces/IUrlConfigOptions.loadZip.md +11 -0
- package/docs/interfaces/IUrlConfigOptions.maxDistance.md +11 -0
- package/docs/interfaces/IUrlConfigOptions.md +241 -20
- package/docs/interfaces/IUrlConfigOptions.qualifierDefaults.md +11 -0
- package/docs/interfaces/IUrlConfigOptions.reduceQualifiers.md +11 -0
- package/docs/interfaces/IUrlConfigOptions.resourceTypes.md +11 -0
- package/docs/interfaces/IUrlConfigOptions.zipFile.md +11 -0
- package/docs/interfaces/IUrlConfigOptions.zipPath.md +11 -0
- package/docs/interfaces/ShowDirectoryPickerOptions.id.md +9 -0
- package/docs/interfaces/ShowDirectoryPickerOptions.md +71 -10
- package/docs/interfaces/ShowDirectoryPickerOptions.mode.md +9 -0
- package/docs/interfaces/ShowDirectoryPickerOptions.startIn.md +9 -0
- package/docs/interfaces/ShowOpenFilePickerOptions.excludeAcceptAllOption.md +9 -0
- package/docs/interfaces/ShowOpenFilePickerOptions.id.md +9 -0
- package/docs/interfaces/ShowOpenFilePickerOptions.md +105 -12
- package/docs/interfaces/ShowOpenFilePickerOptions.multiple.md +9 -0
- package/docs/interfaces/ShowOpenFilePickerOptions.startIn.md +9 -0
- package/docs/interfaces/ShowOpenFilePickerOptions.types.md +9 -0
- package/docs/interfaces/ShowSaveFilePickerOptions.excludeAcceptAllOption.md +9 -0
- package/docs/interfaces/ShowSaveFilePickerOptions.id.md +9 -0
- package/docs/interfaces/ShowSaveFilePickerOptions.md +105 -12
- package/docs/interfaces/ShowSaveFilePickerOptions.startIn.md +9 -0
- package/docs/interfaces/ShowSaveFilePickerOptions.suggestedName.md +9 -0
- package/docs/interfaces/ShowSaveFilePickerOptions.types.md +9 -0
- package/docs/type-aliases/TreeInitializer.md +7 -7
- package/docs/type-aliases/WellKnownDirectory.md +7 -7
- package/docs/type-aliases/WindowWithFsAccess.md +7 -7
- package/docs/variables/DEFAULT_DIRECTORY_HANDLE_DB.md +5 -7
- package/docs/variables/DEFAULT_DIRECTORY_HANDLE_STORE.md +5 -7
- package/docs/variables/defaultFileApiTreeInitParams.md +9 -0
- package/lib/packlets/file-tree/httpTreeAccessors.d.ts +20 -0
- package/lib/packlets/file-tree/httpTreeAccessors.d.ts.map +1 -1
- package/lib/packlets/file-tree/httpTreeAccessors.js +128 -41
- package/lib/packlets/file-tree/httpTreeAccessors.js.map +1 -1
- package/lib/test/unit/httpTreeAccessors.test.js +438 -74
- package/lib/test/unit/httpTreeAccessors.test.js.map +1 -1
- package/package.json +27 -26
- package/rush-logs/ts-web-extras.build.cache.log +3 -0
- package/rush-logs/ts-web-extras.build.log +19 -39
- package/src/packlets/file-tree/httpTreeAccessors.ts +142 -45
- package/src/test/unit/httpTreeAccessors.test.ts +556 -84
- package/temp/build/typescript/ts_8nwakTlr.json +1 -1
- package/temp/coverage/crypto-utils/browserCryptoProvider.ts.html +1 -1
- package/temp/coverage/crypto-utils/browserHashProvider.ts.html +1 -1
- package/temp/coverage/crypto-utils/index.html +1 -1
- package/temp/coverage/file-tree/directoryHandleStore.ts.html +1 -1
- package/temp/coverage/file-tree/fileApiTreeAccessors.ts.html +1 -1
- package/temp/coverage/file-tree/fileSystemAccessTreeAccessors.ts.html +1 -1
- package/temp/coverage/file-tree/httpTreeAccessors.ts.html +507 -216
- package/temp/coverage/file-tree/index.html +11 -11
- package/temp/coverage/file-tree/localStorageTreeAccessors.ts.html +1 -1
- package/temp/coverage/helpers/fileTreeHelpers.ts.html +1 -1
- package/temp/coverage/helpers/index.html +1 -1
- package/temp/coverage/index.html +11 -11
- package/temp/coverage/lcov-report/crypto-utils/browserCryptoProvider.ts.html +1 -1
- package/temp/coverage/lcov-report/crypto-utils/browserHashProvider.ts.html +1 -1
- package/temp/coverage/lcov-report/crypto-utils/index.html +1 -1
- package/temp/coverage/lcov-report/file-tree/directoryHandleStore.ts.html +1 -1
- package/temp/coverage/lcov-report/file-tree/fileApiTreeAccessors.ts.html +1 -1
- package/temp/coverage/lcov-report/file-tree/fileSystemAccessTreeAccessors.ts.html +1 -1
- package/temp/coverage/lcov-report/file-tree/httpTreeAccessors.ts.html +507 -216
- package/temp/coverage/lcov-report/file-tree/index.html +11 -11
- package/temp/coverage/lcov-report/file-tree/localStorageTreeAccessors.ts.html +1 -1
- package/temp/coverage/lcov-report/helpers/fileTreeHelpers.ts.html +1 -1
- package/temp/coverage/lcov-report/helpers/index.html +1 -1
- package/temp/coverage/lcov-report/index.html +11 -11
- package/temp/coverage/lcov-report/url-utils/index.html +1 -1
- package/temp/coverage/lcov-report/url-utils/urlParams.ts.html +1 -1
- package/temp/coverage/lcov.info +520 -387
- package/temp/coverage/url-utils/index.html +1 -1
- package/temp/coverage/url-utils/urlParams.ts.html +1 -1
- package/temp/test/jest/haste-map-7492f1b44480e0cdd1f220078fb3afd8-c8dd6c3430605adeb2f1cadf4f75e791-8c9336785555d572065b28c111982ba4 +0 -0
- package/temp/test/jest/perf-cache-7492f1b44480e0cdd1f220078fb3afd8-da39a3ee5e6b4b0d3255bfef95601890 +1 -0
- package/temp/ts-web-extras.api.json +2 -2
- package/.rush/temp/chunked-rush-logs/ts-web-extras.test.chunks.jsonl +0 -70
- package/.rush/temp/operation/build/error.log +0 -18
- package/.rush/temp/operation/test/all.log +0 -70
- package/.rush/temp/operation/test/error.log +0 -16
- package/.rush/temp/operation/test/log-chunks.jsonl +0 -70
- package/.rush/temp/operation/test/state.json +0 -3
- package/docs/@fgv/namespaces/CryptoUtils/README.md +0 -18
- package/docs/@fgv/namespaces/CryptoUtils/classes/BrowserCryptoProvider.md +0 -203
- package/docs/@fgv/namespaces/CryptoUtils/classes/BrowserHashProvider.md +0 -63
- package/docs/@fgv/namespaces/CryptoUtils/functions/createBrowserCryptoProvider.md +0 -18
- package/docs/@fgv/namespaces/FileTreeHelpers/README.md +0 -19
- package/docs/@fgv/namespaces/FileTreeHelpers/functions/extractFileListMetadata.md +0 -23
- package/docs/@fgv/namespaces/FileTreeHelpers/functions/extractFileMetadata.md +0 -23
- package/docs/@fgv/namespaces/FileTreeHelpers/functions/fromDirectoryUpload.md +0 -33
- package/docs/@fgv/namespaces/FileTreeHelpers/functions/fromFileList.md +0 -33
- package/docs/@fgv/namespaces/FileTreeHelpers/functions/getOriginalFile.md +0 -25
- package/docs/@fgv/namespaces/FileTreeHelpers/variables/defaultFileApiTreeInitParams.md +0 -11
- package/rush-logs/ts-web-extras.build.error.log +0 -18
- package/rush-logs/ts-web-extras.test.cache.log +0 -1
- package/rush-logs/ts-web-extras.test.error.log +0 -16
- package/rush-logs/ts-web-extras.test.log +0 -70
- package/temp/coverage/crypto/browserHashProvider.ts.html +0 -304
- package/temp/coverage/crypto/index.html +0 -116
- package/temp/coverage/lcov-report/crypto/browserHashProvider.ts.html +0 -304
- package/temp/coverage/lcov-report/crypto/index.html +0 -116
- package/temp/test/jest/haste-map-b931e4e63102f86c5bd4949f7dced44f-9d713eb41149188b4e5c0ae3d86d0a57-2ad8e16b24e391b8cdbe50b55c137169 +0 -0
- package/temp/test/jest/perf-cache-b931e4e63102f86c5bd4949f7dced44f-da39a3ee5e6b4b0d3255bfef95601890 +0 -1
- /package/temp/test/jest/{jest-transform-cache-b931e4e63102f86c5bd4949f7dced44f-79ef2876fae7ca75eedb2aa53dc48338/b5/package_b5f57afc9ec2c011239b1608ee5bdfa5 → jest-transform-cache-7492f1b44480e0cdd1f220078fb3afd8-79ef2876fae7ca75eedb2aa53dc48338/7c/package_7c16afc8299e635d80273763175c7a50} +0 -0
|
@@ -25,28 +25,28 @@
|
|
|
25
25
|
<div class='fl pad1y space-right2'>
|
|
26
26
|
<span class="strong">100% </span>
|
|
27
27
|
<span class="quiet">Statements</span>
|
|
28
|
-
<span class='fraction'>
|
|
28
|
+
<span class='fraction'>478/478</span>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
31
|
|
|
32
32
|
<div class='fl pad1y space-right2'>
|
|
33
|
-
<span class="strong">
|
|
33
|
+
<span class="strong">98.42% </span>
|
|
34
34
|
<span class="quiet">Branches</span>
|
|
35
|
-
<span class='fraction'>
|
|
35
|
+
<span class='fraction'>125/127</span>
|
|
36
36
|
</div>
|
|
37
37
|
|
|
38
38
|
|
|
39
39
|
<div class='fl pad1y space-right2'>
|
|
40
40
|
<span class="strong">100% </span>
|
|
41
41
|
<span class="quiet">Functions</span>
|
|
42
|
-
<span class='fraction'>
|
|
42
|
+
<span class='fraction'>16/16</span>
|
|
43
43
|
</div>
|
|
44
44
|
|
|
45
45
|
|
|
46
46
|
<div class='fl pad1y space-right2'>
|
|
47
47
|
<span class="strong">100% </span>
|
|
48
48
|
<span class="quiet">Lines</span>
|
|
49
|
-
<span class='fraction'>
|
|
49
|
+
<span class='fraction'>478/478</span>
|
|
50
50
|
</div>
|
|
51
51
|
|
|
52
52
|
|
|
@@ -444,7 +444,106 @@
|
|
|
444
444
|
<a name='L379'></a><a href='#L379'>379</a>
|
|
445
445
|
<a name='L380'></a><a href='#L380'>380</a>
|
|
446
446
|
<a name='L381'></a><a href='#L381'>381</a>
|
|
447
|
-
<a name='L382'></a><a href='#L382'>382</a
|
|
447
|
+
<a name='L382'></a><a href='#L382'>382</a>
|
|
448
|
+
<a name='L383'></a><a href='#L383'>383</a>
|
|
449
|
+
<a name='L384'></a><a href='#L384'>384</a>
|
|
450
|
+
<a name='L385'></a><a href='#L385'>385</a>
|
|
451
|
+
<a name='L386'></a><a href='#L386'>386</a>
|
|
452
|
+
<a name='L387'></a><a href='#L387'>387</a>
|
|
453
|
+
<a name='L388'></a><a href='#L388'>388</a>
|
|
454
|
+
<a name='L389'></a><a href='#L389'>389</a>
|
|
455
|
+
<a name='L390'></a><a href='#L390'>390</a>
|
|
456
|
+
<a name='L391'></a><a href='#L391'>391</a>
|
|
457
|
+
<a name='L392'></a><a href='#L392'>392</a>
|
|
458
|
+
<a name='L393'></a><a href='#L393'>393</a>
|
|
459
|
+
<a name='L394'></a><a href='#L394'>394</a>
|
|
460
|
+
<a name='L395'></a><a href='#L395'>395</a>
|
|
461
|
+
<a name='L396'></a><a href='#L396'>396</a>
|
|
462
|
+
<a name='L397'></a><a href='#L397'>397</a>
|
|
463
|
+
<a name='L398'></a><a href='#L398'>398</a>
|
|
464
|
+
<a name='L399'></a><a href='#L399'>399</a>
|
|
465
|
+
<a name='L400'></a><a href='#L400'>400</a>
|
|
466
|
+
<a name='L401'></a><a href='#L401'>401</a>
|
|
467
|
+
<a name='L402'></a><a href='#L402'>402</a>
|
|
468
|
+
<a name='L403'></a><a href='#L403'>403</a>
|
|
469
|
+
<a name='L404'></a><a href='#L404'>404</a>
|
|
470
|
+
<a name='L405'></a><a href='#L405'>405</a>
|
|
471
|
+
<a name='L406'></a><a href='#L406'>406</a>
|
|
472
|
+
<a name='L407'></a><a href='#L407'>407</a>
|
|
473
|
+
<a name='L408'></a><a href='#L408'>408</a>
|
|
474
|
+
<a name='L409'></a><a href='#L409'>409</a>
|
|
475
|
+
<a name='L410'></a><a href='#L410'>410</a>
|
|
476
|
+
<a name='L411'></a><a href='#L411'>411</a>
|
|
477
|
+
<a name='L412'></a><a href='#L412'>412</a>
|
|
478
|
+
<a name='L413'></a><a href='#L413'>413</a>
|
|
479
|
+
<a name='L414'></a><a href='#L414'>414</a>
|
|
480
|
+
<a name='L415'></a><a href='#L415'>415</a>
|
|
481
|
+
<a name='L416'></a><a href='#L416'>416</a>
|
|
482
|
+
<a name='L417'></a><a href='#L417'>417</a>
|
|
483
|
+
<a name='L418'></a><a href='#L418'>418</a>
|
|
484
|
+
<a name='L419'></a><a href='#L419'>419</a>
|
|
485
|
+
<a name='L420'></a><a href='#L420'>420</a>
|
|
486
|
+
<a name='L421'></a><a href='#L421'>421</a>
|
|
487
|
+
<a name='L422'></a><a href='#L422'>422</a>
|
|
488
|
+
<a name='L423'></a><a href='#L423'>423</a>
|
|
489
|
+
<a name='L424'></a><a href='#L424'>424</a>
|
|
490
|
+
<a name='L425'></a><a href='#L425'>425</a>
|
|
491
|
+
<a name='L426'></a><a href='#L426'>426</a>
|
|
492
|
+
<a name='L427'></a><a href='#L427'>427</a>
|
|
493
|
+
<a name='L428'></a><a href='#L428'>428</a>
|
|
494
|
+
<a name='L429'></a><a href='#L429'>429</a>
|
|
495
|
+
<a name='L430'></a><a href='#L430'>430</a>
|
|
496
|
+
<a name='L431'></a><a href='#L431'>431</a>
|
|
497
|
+
<a name='L432'></a><a href='#L432'>432</a>
|
|
498
|
+
<a name='L433'></a><a href='#L433'>433</a>
|
|
499
|
+
<a name='L434'></a><a href='#L434'>434</a>
|
|
500
|
+
<a name='L435'></a><a href='#L435'>435</a>
|
|
501
|
+
<a name='L436'></a><a href='#L436'>436</a>
|
|
502
|
+
<a name='L437'></a><a href='#L437'>437</a>
|
|
503
|
+
<a name='L438'></a><a href='#L438'>438</a>
|
|
504
|
+
<a name='L439'></a><a href='#L439'>439</a>
|
|
505
|
+
<a name='L440'></a><a href='#L440'>440</a>
|
|
506
|
+
<a name='L441'></a><a href='#L441'>441</a>
|
|
507
|
+
<a name='L442'></a><a href='#L442'>442</a>
|
|
508
|
+
<a name='L443'></a><a href='#L443'>443</a>
|
|
509
|
+
<a name='L444'></a><a href='#L444'>444</a>
|
|
510
|
+
<a name='L445'></a><a href='#L445'>445</a>
|
|
511
|
+
<a name='L446'></a><a href='#L446'>446</a>
|
|
512
|
+
<a name='L447'></a><a href='#L447'>447</a>
|
|
513
|
+
<a name='L448'></a><a href='#L448'>448</a>
|
|
514
|
+
<a name='L449'></a><a href='#L449'>449</a>
|
|
515
|
+
<a name='L450'></a><a href='#L450'>450</a>
|
|
516
|
+
<a name='L451'></a><a href='#L451'>451</a>
|
|
517
|
+
<a name='L452'></a><a href='#L452'>452</a>
|
|
518
|
+
<a name='L453'></a><a href='#L453'>453</a>
|
|
519
|
+
<a name='L454'></a><a href='#L454'>454</a>
|
|
520
|
+
<a name='L455'></a><a href='#L455'>455</a>
|
|
521
|
+
<a name='L456'></a><a href='#L456'>456</a>
|
|
522
|
+
<a name='L457'></a><a href='#L457'>457</a>
|
|
523
|
+
<a name='L458'></a><a href='#L458'>458</a>
|
|
524
|
+
<a name='L459'></a><a href='#L459'>459</a>
|
|
525
|
+
<a name='L460'></a><a href='#L460'>460</a>
|
|
526
|
+
<a name='L461'></a><a href='#L461'>461</a>
|
|
527
|
+
<a name='L462'></a><a href='#L462'>462</a>
|
|
528
|
+
<a name='L463'></a><a href='#L463'>463</a>
|
|
529
|
+
<a name='L464'></a><a href='#L464'>464</a>
|
|
530
|
+
<a name='L465'></a><a href='#L465'>465</a>
|
|
531
|
+
<a name='L466'></a><a href='#L466'>466</a>
|
|
532
|
+
<a name='L467'></a><a href='#L467'>467</a>
|
|
533
|
+
<a name='L468'></a><a href='#L468'>468</a>
|
|
534
|
+
<a name='L469'></a><a href='#L469'>469</a>
|
|
535
|
+
<a name='L470'></a><a href='#L470'>470</a>
|
|
536
|
+
<a name='L471'></a><a href='#L471'>471</a>
|
|
537
|
+
<a name='L472'></a><a href='#L472'>472</a>
|
|
538
|
+
<a name='L473'></a><a href='#L473'>473</a>
|
|
539
|
+
<a name='L474'></a><a href='#L474'>474</a>
|
|
540
|
+
<a name='L475'></a><a href='#L475'>475</a>
|
|
541
|
+
<a name='L476'></a><a href='#L476'>476</a>
|
|
542
|
+
<a name='L477'></a><a href='#L477'>477</a>
|
|
543
|
+
<a name='L478'></a><a href='#L478'>478</a>
|
|
544
|
+
<a name='L479'></a><a href='#L479'>479</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">1x</span>
|
|
545
|
+
<span class="cline-any cline-yes">1x</span>
|
|
546
|
+
<span class="cline-any cline-yes">1x</span>
|
|
448
547
|
<span class="cline-any cline-yes">1x</span>
|
|
449
548
|
<span class="cline-any cline-yes">1x</span>
|
|
450
549
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -488,12 +587,12 @@
|
|
|
488
587
|
<span class="cline-any cline-yes">1x</span>
|
|
489
588
|
<span class="cline-any cline-yes">1x</span>
|
|
490
589
|
<span class="cline-any cline-yes">1x</span>
|
|
590
|
+
<span class="cline-any cline-yes">168x</span>
|
|
591
|
+
<span class="cline-any cline-yes">168x</span>
|
|
592
|
+
<span class="cline-any cline-yes">168x</span>
|
|
593
|
+
<span class="cline-any cline-yes">168x</span>
|
|
491
594
|
<span class="cline-any cline-yes">1x</span>
|
|
492
595
|
<span class="cline-any cline-yes">1x</span>
|
|
493
|
-
<span class="cline-any cline-yes">141x</span>
|
|
494
|
-
<span class="cline-any cline-yes">141x</span>
|
|
495
|
-
<span class="cline-any cline-yes">141x</span>
|
|
496
|
-
<span class="cline-any cline-yes">141x</span>
|
|
497
596
|
<span class="cline-any cline-yes">1x</span>
|
|
498
597
|
<span class="cline-any cline-yes">1x</span>
|
|
499
598
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -526,14 +625,15 @@
|
|
|
526
625
|
<span class="cline-any cline-yes">1x</span>
|
|
527
626
|
<span class="cline-any cline-yes">1x</span>
|
|
528
627
|
<span class="cline-any cline-yes">1x</span>
|
|
529
|
-
<span class="cline-any cline-yes">
|
|
530
|
-
<span class="cline-any cline-yes">
|
|
531
|
-
<span class="cline-any cline-yes">
|
|
532
|
-
<span class="cline-any cline-yes">
|
|
533
|
-
<span class="cline-any cline-yes">
|
|
534
|
-
<span class="cline-any cline-yes">
|
|
535
|
-
<span class="cline-any cline-yes">
|
|
536
|
-
<span class="cline-any cline-yes">
|
|
628
|
+
<span class="cline-any cline-yes">1x</span>
|
|
629
|
+
<span class="cline-any cline-yes">53x</span>
|
|
630
|
+
<span class="cline-any cline-yes">53x</span>
|
|
631
|
+
<span class="cline-any cline-yes">53x</span>
|
|
632
|
+
<span class="cline-any cline-yes">53x</span>
|
|
633
|
+
<span class="cline-any cline-yes">53x</span>
|
|
634
|
+
<span class="cline-any cline-yes">53x</span>
|
|
635
|
+
<span class="cline-any cline-yes">53x</span>
|
|
636
|
+
<span class="cline-any cline-yes">53x</span>
|
|
537
637
|
<span class="cline-any cline-yes">1x</span>
|
|
538
638
|
<span class="cline-any cline-yes">1x</span>
|
|
539
639
|
<span class="cline-any cline-yes">4x</span>
|
|
@@ -552,90 +652,145 @@
|
|
|
552
652
|
<span class="cline-any cline-yes">1x</span>
|
|
553
653
|
<span class="cline-any cline-yes">1x</span>
|
|
554
654
|
<span class="cline-any cline-yes">1x</span>
|
|
555
|
-
<span class="cline-any cline-yes">
|
|
556
|
-
<span class="cline-any cline-yes">
|
|
557
|
-
<span class="cline-any cline-yes">
|
|
558
|
-
<span class="cline-any cline-yes">
|
|
655
|
+
<span class="cline-any cline-yes">63x</span>
|
|
656
|
+
<span class="cline-any cline-yes">63x</span>
|
|
657
|
+
<span class="cline-any cline-yes">63x</span>
|
|
658
|
+
<span class="cline-any cline-yes">63x</span>
|
|
559
659
|
<span class="cline-any cline-yes">10x</span>
|
|
560
660
|
<span class="cline-any cline-yes">10x</span>
|
|
561
|
-
<span class="cline-any cline-yes">
|
|
562
|
-
<span class="cline-any cline-yes">
|
|
661
|
+
<span class="cline-any cline-yes">53x</span>
|
|
662
|
+
<span class="cline-any cline-yes">53x</span>
|
|
563
663
|
<span class="cline-any cline-yes">1x</span>
|
|
564
664
|
<span class="cline-any cline-yes">1x</span>
|
|
565
665
|
<span class="cline-any cline-yes">1x</span>
|
|
566
666
|
<span class="cline-any cline-yes">1x</span>
|
|
567
667
|
<span class="cline-any cline-yes">1x</span>
|
|
568
668
|
<span class="cline-any cline-yes">1x</span>
|
|
569
|
-
<span class="cline-any cline-yes">21x</span>
|
|
570
669
|
<span class="cline-any cline-yes">1x</span>
|
|
571
670
|
<span class="cline-any cline-yes">1x</span>
|
|
572
|
-
<span class="cline-any cline-yes">20x</span>
|
|
573
|
-
<span class="cline-any cline-yes">21x</span>
|
|
574
|
-
<span class="cline-any cline-yes">4x</span>
|
|
575
|
-
<span class="cline-any cline-yes">4x</span>
|
|
576
|
-
<span class="cline-any cline-yes">4x</span>
|
|
577
671
|
<span class="cline-any cline-yes">1x</span>
|
|
578
672
|
<span class="cline-any cline-yes">1x</span>
|
|
579
|
-
<span class="cline-any cline-yes">4x</span>
|
|
580
|
-
<span class="cline-any cline-yes">4x</span>
|
|
581
|
-
<span class="cline-any cline-yes">4x</span>
|
|
582
|
-
<span class="cline-any cline-yes">4x</span>
|
|
583
|
-
<span class="cline-any cline-yes">4x</span>
|
|
584
673
|
<span class="cline-any cline-yes">1x</span>
|
|
585
674
|
<span class="cline-any cline-yes">1x</span>
|
|
586
|
-
<span class="cline-any cline-yes">
|
|
587
|
-
<span class="cline-any cline-yes">19x</span>
|
|
588
|
-
<span class="cline-any cline-yes">21x</span>
|
|
589
|
-
<span class="cline-any cline-yes">17x</span>
|
|
590
|
-
<span class="cline-any cline-yes">17x</span>
|
|
675
|
+
<span class="cline-any cline-yes">31x</span>
|
|
591
676
|
<span class="cline-any cline-yes">1x</span>
|
|
592
677
|
<span class="cline-any cline-yes">1x</span>
|
|
593
|
-
<span class="cline-any cline-yes">16x</span>
|
|
594
|
-
<span class="cline-any cline-yes">16x</span>
|
|
595
|
-
<span class="cline-any cline-yes">16x</span>
|
|
596
|
-
<span class="cline-any cline-yes">16x</span>
|
|
597
|
-
<span class="cline-any cline-yes">16x</span>
|
|
598
|
-
<span class="cline-any cline-yes">17x</span>
|
|
599
678
|
<span class="cline-any cline-yes">1x</span>
|
|
600
679
|
<span class="cline-any cline-yes">1x</span>
|
|
601
|
-
<span class="cline-any cline-yes">
|
|
602
|
-
<span class="cline-any cline-yes">
|
|
603
|
-
<span class="cline-any cline-yes">
|
|
604
|
-
<span class="cline-any cline-yes">
|
|
605
|
-
<span class="cline-any cline-yes">
|
|
680
|
+
<span class="cline-any cline-yes">30x</span>
|
|
681
|
+
<span class="cline-any cline-yes">30x</span>
|
|
682
|
+
<span class="cline-any cline-yes">30x</span>
|
|
683
|
+
<span class="cline-any cline-yes">30x</span>
|
|
684
|
+
<span class="cline-any cline-yes">30x</span>
|
|
685
|
+
<span class="cline-any cline-yes">30x</span>
|
|
686
|
+
<span class="cline-any cline-yes">1x</span>
|
|
687
|
+
<span class="cline-any cline-yes">1x</span>
|
|
688
|
+
<span class="cline-any cline-yes">30x</span>
|
|
689
|
+
<span class="cline-any cline-yes">30x</span>
|
|
690
|
+
<span class="cline-any cline-yes">30x</span>
|
|
691
|
+
<span class="cline-any cline-yes">30x</span>
|
|
692
|
+
<span class="cline-any cline-yes">30x</span>
|
|
693
|
+
<span class="cline-any cline-yes">30x</span>
|
|
694
|
+
<span class="cline-any cline-yes">30x</span>
|
|
695
|
+
<span class="cline-any cline-yes">30x</span>
|
|
696
|
+
<span class="cline-any cline-yes">30x</span>
|
|
697
|
+
<span class="cline-any cline-yes">30x</span>
|
|
698
|
+
<span class="cline-any cline-yes">30x</span>
|
|
699
|
+
<span class="cline-any cline-yes">30x</span>
|
|
700
|
+
<span class="cline-any cline-yes">30x</span>
|
|
701
|
+
<span class="cline-any cline-yes">30x</span>
|
|
702
|
+
<span class="cline-any cline-yes">30x</span>
|
|
703
|
+
<span class="cline-any cline-yes">30x</span>
|
|
704
|
+
<span class="cline-any cline-yes">30x</span>
|
|
705
|
+
<span class="cline-any cline-yes">5x</span>
|
|
706
|
+
<span class="cline-any cline-yes">5x</span>
|
|
707
|
+
<span class="cline-any cline-yes">5x</span>
|
|
708
|
+
<span class="cline-any cline-yes">1x</span>
|
|
709
|
+
<span class="cline-any cline-yes">1x</span>
|
|
710
|
+
<span class="cline-any cline-yes">5x</span>
|
|
711
|
+
<span class="cline-any cline-yes">5x</span>
|
|
712
|
+
<span class="cline-any cline-yes">5x</span>
|
|
713
|
+
<span class="cline-any cline-yes">5x</span>
|
|
714
|
+
<span class="cline-any cline-yes">5x</span>
|
|
715
|
+
<span class="cline-any cline-yes">2x</span>
|
|
716
|
+
<span class="cline-any cline-yes">2x</span>
|
|
717
|
+
<span class="cline-any cline-yes">2x</span>
|
|
718
|
+
<span class="cline-any cline-yes">5x</span>
|
|
719
|
+
<span class="cline-any cline-yes">28x</span>
|
|
720
|
+
<span class="cline-any cline-yes">30x</span>
|
|
721
|
+
<span class="cline-any cline-yes">26x</span>
|
|
722
|
+
<span class="cline-any cline-yes">26x</span>
|
|
723
|
+
<span class="cline-any cline-yes">1x</span>
|
|
724
|
+
<span class="cline-any cline-yes">1x</span>
|
|
725
|
+
<span class="cline-any cline-yes">1x</span>
|
|
726
|
+
<span class="cline-any cline-yes">25x</span>
|
|
727
|
+
<span class="cline-any cline-yes">25x</span>
|
|
728
|
+
<span class="cline-any cline-yes">25x</span>
|
|
729
|
+
<span class="cline-any cline-yes">25x</span>
|
|
730
|
+
<span class="cline-any cline-yes">25x</span>
|
|
731
|
+
<span class="cline-any cline-yes">26x</span>
|
|
732
|
+
<span class="cline-any cline-yes">1x</span>
|
|
733
|
+
<span class="cline-any cline-yes">1x</span>
|
|
734
|
+
<span class="cline-any cline-yes">25x</span>
|
|
735
|
+
<span class="cline-any cline-yes">25x</span>
|
|
736
|
+
<span class="cline-any cline-yes">25x</span>
|
|
737
|
+
<span class="cline-any cline-yes">25x</span>
|
|
738
|
+
<span class="cline-any cline-yes">25x</span>
|
|
739
|
+
<span class="cline-any cline-yes">26x</span>
|
|
740
|
+
<span class="cline-any cline-yes">9x</span>
|
|
741
|
+
<span class="cline-any cline-yes">9x</span>
|
|
742
|
+
<span class="cline-any cline-yes">9x</span>
|
|
743
|
+
<span class="cline-any cline-yes">26x</span>
|
|
744
|
+
<span class="cline-any cline-yes">18x</span>
|
|
745
|
+
<span class="cline-any cline-yes">18x</span>
|
|
746
|
+
<span class="cline-any cline-yes">30x</span>
|
|
606
747
|
<span class="cline-any cline-yes">17x</span>
|
|
607
|
-
<span class="cline-any cline-yes">6x</span>
|
|
608
|
-
<span class="cline-any cline-yes">6x</span>
|
|
609
748
|
<span class="cline-any cline-yes">17x</span>
|
|
610
|
-
<span class="cline-any cline-yes">12x</span>
|
|
611
|
-
<span class="cline-any cline-yes">12x</span>
|
|
612
|
-
<span class="cline-any cline-yes">12x</span>
|
|
613
|
-
<span class="cline-any cline-yes">12x</span>
|
|
614
|
-
<span class="cline-any cline-yes">12x</span>
|
|
615
|
-
<span class="cline-any cline-yes">21x</span>
|
|
616
749
|
<span class="cline-any cline-yes">2x</span>
|
|
617
750
|
<span class="cline-any cline-yes">2x</span>
|
|
751
|
+
<span class="cline-any cline-yes">17x</span>
|
|
752
|
+
<span class="cline-any cline-yes">17x</span>
|
|
753
|
+
<span class="cline-any cline-yes">17x</span>
|
|
754
|
+
<span class="cline-any cline-yes">17x</span>
|
|
755
|
+
<span class="cline-any cline-yes">17x</span>
|
|
756
|
+
<span class="cline-any cline-yes">17x</span>
|
|
757
|
+
<span class="cline-any cline-yes">17x</span>
|
|
758
|
+
<span class="cline-any cline-yes">3x</span>
|
|
759
|
+
<span class="cline-any cline-yes">3x</span>
|
|
760
|
+
<span class="cline-any cline-yes">17x</span>
|
|
761
|
+
<span class="cline-any cline-yes">15x</span>
|
|
762
|
+
<span class="cline-any cline-yes">15x</span>
|
|
763
|
+
<span class="cline-any cline-yes">1x</span>
|
|
764
|
+
<span class="cline-any cline-yes">1x</span>
|
|
765
|
+
<span class="cline-any cline-yes">1x</span>
|
|
766
|
+
<span class="cline-any cline-yes">1x</span>
|
|
767
|
+
<span class="cline-any cline-yes">1x</span>
|
|
768
|
+
<span class="cline-any cline-yes">1x</span>
|
|
769
|
+
<span class="cline-any cline-yes">1x</span>
|
|
618
770
|
<span class="cline-any cline-yes">12x</span>
|
|
771
|
+
<span class="cline-any cline-yes">2x</span>
|
|
772
|
+
<span class="cline-any cline-yes">2x</span>
|
|
619
773
|
<span class="cline-any cline-yes">12x</span>
|
|
774
|
+
<span class="cline-any cline-yes">10x</span>
|
|
775
|
+
<span class="cline-any cline-yes">10x</span>
|
|
620
776
|
<span class="cline-any cline-yes">12x</span>
|
|
621
|
-
<span class="cline-any cline-yes">12x</span>
|
|
622
|
-
<span class="cline-any cline-yes">12x</span>
|
|
623
|
-
<span class="cline-any cline-yes">12x</span>
|
|
624
|
-
<span class="cline-any cline-yes">21x</span>
|
|
625
|
-
<span class="cline-any cline-yes">21x</span>
|
|
626
777
|
<span class="cline-any cline-yes">1x</span>
|
|
627
778
|
<span class="cline-any cline-yes">1x</span>
|
|
628
779
|
<span class="cline-any cline-yes">1x</span>
|
|
629
780
|
<span class="cline-any cline-yes">1x</span>
|
|
630
781
|
<span class="cline-any cline-yes">1x</span>
|
|
631
782
|
<span class="cline-any cline-yes">1x</span>
|
|
632
|
-
<span class="cline-any cline-yes">
|
|
633
|
-
<span class="cline-any cline-yes">
|
|
783
|
+
<span class="cline-any cline-yes">14x</span>
|
|
784
|
+
<span class="cline-any cline-yes">14x</span>
|
|
785
|
+
<span class="cline-any cline-yes">1x</span>
|
|
634
786
|
<span class="cline-any cline-yes">1x</span>
|
|
635
787
|
<span class="cline-any cline-yes">1x</span>
|
|
636
788
|
<span class="cline-any cline-yes">1x</span>
|
|
637
789
|
<span class="cline-any cline-yes">1x</span>
|
|
638
790
|
<span class="cline-any cline-yes">1x</span>
|
|
791
|
+
<span class="cline-any cline-yes">9x</span>
|
|
792
|
+
<span class="cline-any cline-yes">9x</span>
|
|
793
|
+
<span class="cline-any cline-yes">1x</span>
|
|
639
794
|
<span class="cline-any cline-yes">1x</span>
|
|
640
795
|
<span class="cline-any cline-yes">7x</span>
|
|
641
796
|
<span class="cline-any cline-yes">7x</span>
|
|
@@ -643,15 +798,11 @@
|
|
|
643
798
|
<span class="cline-any cline-yes">1x</span>
|
|
644
799
|
<span class="cline-any cline-yes">6x</span>
|
|
645
800
|
<span class="cline-any cline-yes">6x</span>
|
|
646
|
-
<span class="cline-any cline-yes">
|
|
647
|
-
<span class="cline-any cline-yes">
|
|
648
|
-
<span class="cline-any cline-yes">
|
|
649
|
-
<span class="cline-any cline-yes">5x</span>
|
|
801
|
+
<span class="cline-any cline-yes">6x</span>
|
|
802
|
+
<span class="cline-any cline-yes">6x</span>
|
|
803
|
+
<span class="cline-any cline-yes">7x</span>
|
|
650
804
|
<span class="cline-any cline-yes">5x</span>
|
|
651
805
|
<span class="cline-any cline-yes">5x</span>
|
|
652
|
-
<span class="cline-any cline-yes">6x</span>
|
|
653
|
-
<span class="cline-any cline-yes">4x</span>
|
|
654
|
-
<span class="cline-any cline-yes">4x</span>
|
|
655
806
|
<span class="cline-any cline-yes">1x</span>
|
|
656
807
|
<span class="cline-any cline-yes">1x</span>
|
|
657
808
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -664,15 +815,15 @@
|
|
|
664
815
|
<span class="cline-any cline-yes">1x</span>
|
|
665
816
|
<span class="cline-any cline-yes">1x</span>
|
|
666
817
|
<span class="cline-any cline-yes">1x</span>
|
|
667
|
-
<span class="cline-any cline-yes">
|
|
668
|
-
<span class="cline-any cline-yes">
|
|
818
|
+
<span class="cline-any cline-yes">33x</span>
|
|
819
|
+
<span class="cline-any cline-yes">33x</span>
|
|
669
820
|
<span class="cline-any cline-yes">1x</span>
|
|
670
821
|
<span class="cline-any cline-yes">1x</span>
|
|
671
|
-
<span class="cline-any cline-yes">
|
|
672
|
-
<span class="cline-any cline-yes">
|
|
673
|
-
<span class="cline-any cline-yes">
|
|
674
|
-
<span class="cline-any cline-yes">
|
|
675
|
-
<span class="cline-any cline-yes">
|
|
822
|
+
<span class="cline-any cline-yes">32x</span>
|
|
823
|
+
<span class="cline-any cline-yes">32x</span>
|
|
824
|
+
<span class="cline-any cline-yes">33x</span>
|
|
825
|
+
<span class="cline-any cline-yes">29x</span>
|
|
826
|
+
<span class="cline-any cline-yes">29x</span>
|
|
676
827
|
<span class="cline-any cline-yes">3x</span>
|
|
677
828
|
<span class="cline-any cline-yes">3x</span>
|
|
678
829
|
<span class="cline-any cline-yes">3x</span>
|
|
@@ -685,10 +836,10 @@
|
|
|
685
836
|
<span class="cline-any cline-yes">1x</span>
|
|
686
837
|
<span class="cline-any cline-yes">1x</span>
|
|
687
838
|
<span class="cline-any cline-yes">1x</span>
|
|
688
|
-
<span class="cline-any cline-yes">
|
|
689
|
-
<span class="cline-any cline-yes">
|
|
690
|
-
<span class="cline-any cline-yes">
|
|
691
|
-
<span class="cline-any cline-yes">
|
|
839
|
+
<span class="cline-any cline-yes">36x</span>
|
|
840
|
+
<span class="cline-any cline-yes">36x</span>
|
|
841
|
+
<span class="cline-any cline-yes">34x</span>
|
|
842
|
+
<span class="cline-any cline-yes">34x</span>
|
|
692
843
|
<span class="cline-any cline-yes">2x</span>
|
|
693
844
|
<span class="cline-any cline-yes">2x</span>
|
|
694
845
|
<span class="cline-any cline-yes">1x</span>
|
|
@@ -699,131 +850,174 @@
|
|
|
699
850
|
<span class="cline-any cline-yes">1x</span>
|
|
700
851
|
<span class="cline-any cline-yes">1x</span>
|
|
701
852
|
<span class="cline-any cline-yes">1x</span>
|
|
702
|
-
<span class="cline-any cline-yes">
|
|
703
|
-
<span class="cline-any cline-yes">
|
|
704
|
-
<span class="cline-any cline-yes">
|
|
705
|
-
<span class="cline-any cline-yes">
|
|
853
|
+
<span class="cline-any cline-yes">61x</span>
|
|
854
|
+
<span class="cline-any cline-yes">61x</span>
|
|
855
|
+
<span class="cline-any cline-yes">61x</span>
|
|
856
|
+
<span class="cline-any cline-yes">61x</span>
|
|
857
|
+
<span class="cline-any cline-yes">1x</span>
|
|
858
|
+
<span class="cline-any cline-yes">1x</span>
|
|
859
|
+
<span class="cline-any cline-yes">61x</span>
|
|
860
|
+
<span class="cline-any cline-yes">61x</span>
|
|
861
|
+
<span class="cline-any cline-yes">61x</span>
|
|
862
|
+
<span class="cline-any cline-yes">61x</span>
|
|
863
|
+
<span class="cline-any cline-yes">61x</span>
|
|
864
|
+
<span class="cline-any cline-yes">8x</span>
|
|
865
|
+
<span class="cline-any cline-yes">8x</span>
|
|
866
|
+
<span class="cline-any cline-yes">8x</span>
|
|
867
|
+
<span class="cline-any cline-yes">53x</span>
|
|
868
|
+
<span class="cline-any cline-yes">61x</span>
|
|
869
|
+
<span class="cline-any cline-yes">19x</span>
|
|
870
|
+
<span class="cline-any cline-yes">19x</span>
|
|
871
|
+
<span class="cline-any cline-yes">19x</span>
|
|
872
|
+
<span class="cline-any cline-yes">19x</span>
|
|
873
|
+
<span class="cline-any cline-yes">19x</span>
|
|
874
|
+
<span class="cline-any cline-yes">19x</span>
|
|
875
|
+
<span class="cline-any cline-yes">34x</span>
|
|
876
|
+
<span class="cline-any cline-yes">34x</span>
|
|
877
|
+
<span class="cline-any cline-yes">61x</span>
|
|
878
|
+
<span class="cline-any cline-yes">1x</span>
|
|
879
|
+
<span class="cline-any cline-yes">1x</span>
|
|
880
|
+
<span class="cline-any cline-yes">33x</span>
|
|
881
|
+
<span class="cline-any cline-yes">33x</span>
|
|
706
882
|
<span class="cline-any cline-yes">1x</span>
|
|
707
883
|
<span class="cline-any cline-yes">1x</span>
|
|
708
|
-
<span class="cline-any cline-yes">32x</span>
|
|
709
|
-
<span class="cline-any cline-yes">32x</span>
|
|
710
|
-
<span class="cline-any cline-yes">32x</span>
|
|
711
|
-
<span class="cline-any cline-yes">32x</span>
|
|
712
|
-
<span class="cline-any cline-yes">32x</span>
|
|
713
|
-
<span class="cline-any cline-yes">4x</span>
|
|
714
|
-
<span class="cline-any cline-yes">4x</span>
|
|
715
|
-
<span class="cline-any cline-yes">4x</span>
|
|
716
|
-
<span class="cline-any cline-yes">28x</span>
|
|
717
|
-
<span class="cline-any cline-yes">32x</span>
|
|
718
|
-
<span class="cline-any cline-yes">4x</span>
|
|
719
|
-
<span class="cline-any cline-yes">4x</span>
|
|
720
|
-
<span class="cline-any cline-yes">4x</span>
|
|
721
|
-
<span class="cline-any cline-yes">24x</span>
|
|
722
|
-
<span class="cline-any cline-yes">24x</span>
|
|
723
|
-
<span class="cline-any cline-yes">32x</span>
|
|
724
884
|
<span class="cline-any cline-yes">1x</span>
|
|
725
885
|
<span class="cline-any cline-yes">1x</span>
|
|
726
|
-
<span class="cline-any cline-yes">23x</span>
|
|
727
|
-
<span class="cline-any cline-yes">23x</span>
|
|
728
886
|
<span class="cline-any cline-yes">1x</span>
|
|
729
887
|
<span class="cline-any cline-yes">1x</span>
|
|
888
|
+
<span class="cline-any cline-yes">47x</span>
|
|
889
|
+
<span class="cline-any cline-yes">47x</span>
|
|
890
|
+
<span class="cline-any cline-yes">61x</span>
|
|
891
|
+
<span class="cline-any cline-yes">61x</span>
|
|
892
|
+
<span class="cline-any cline-yes">39x</span>
|
|
893
|
+
<span class="cline-any cline-yes">39x</span>
|
|
894
|
+
<span class="cline-any cline-yes">22x</span>
|
|
895
|
+
<span class="cline-any cline-yes">22x</span>
|
|
896
|
+
<span class="cline-any cline-yes">22x</span>
|
|
897
|
+
<span class="cline-any cline-yes">22x</span>
|
|
898
|
+
<span class="cline-any cline-yes">22x</span>
|
|
899
|
+
<span class="cline-any cline-yes">61x</span>
|
|
900
|
+
<span class="cline-any cline-yes">61x</span>
|
|
901
|
+
<span class="cline-any cline-yes">61x</span>
|
|
902
|
+
<span class="cline-any cline-yes">61x</span>
|
|
903
|
+
<span class="cline-any cline-yes">61x</span>
|
|
904
|
+
<span class="cline-any cline-yes">61x</span>
|
|
905
|
+
<span class="cline-any cline-yes">61x</span>
|
|
906
|
+
<span class="cline-any cline-yes">8x</span>
|
|
907
|
+
<span class="cline-any cline-yes">8x</span>
|
|
908
|
+
<span class="cline-any cline-yes">14x</span>
|
|
909
|
+
<span class="cline-any cline-yes">14x</span>
|
|
910
|
+
<span class="cline-any cline-yes">14x</span>
|
|
911
|
+
<span class="cline-any cline-yes">14x</span>
|
|
912
|
+
<span class="cline-any cline-yes">61x</span>
|
|
913
|
+
<span class="cline-any cline-yes">61x</span>
|
|
914
|
+
<span class="cline-any cline-yes">61x</span>
|
|
915
|
+
<span class="cline-any cline-yes">61x</span>
|
|
916
|
+
<span class="cline-any cline-yes">14x</span>
|
|
917
|
+
<span class="cline-any cline-yes">1x</span>
|
|
918
|
+
<span class="cline-any cline-yes">1x</span>
|
|
919
|
+
<span class="cline-any cline-yes">14x</span>
|
|
920
|
+
<span class="cline-any cline-yes">1x</span>
|
|
730
921
|
<span class="cline-any cline-yes">1x</span>
|
|
731
922
|
<span class="cline-any cline-yes">1x</span>
|
|
732
923
|
<span class="cline-any cline-yes">1x</span>
|
|
733
924
|
<span class="cline-any cline-yes">1x</span>
|
|
734
925
|
<span class="cline-any cline-yes">1x</span>
|
|
735
926
|
<span class="cline-any cline-yes">1x</span>
|
|
736
|
-
<span class="cline-any cline-yes">
|
|
737
|
-
<span class="cline-any cline-yes">
|
|
738
|
-
<span class="cline-any cline-yes">
|
|
739
|
-
<span class="cline-any cline-yes">
|
|
740
|
-
<span class="cline-any cline-yes">
|
|
741
|
-
<span class="cline-any cline-yes">
|
|
742
|
-
<span class="cline-any cline-yes">
|
|
743
|
-
<span class="cline-any cline-yes">
|
|
744
|
-
<span class="cline-any cline-yes">
|
|
745
|
-
<span class="cline-any cline-yes">
|
|
746
|
-
<span class="cline-any cline-yes">
|
|
747
|
-
<span class="cline-any cline-yes">
|
|
927
|
+
<span class="cline-any cline-yes">1x</span>
|
|
928
|
+
<span class="cline-any cline-yes">65x</span>
|
|
929
|
+
<span class="cline-any cline-yes">65x</span>
|
|
930
|
+
<span class="cline-any cline-yes">65x</span>
|
|
931
|
+
<span class="cline-any cline-yes">65x</span>
|
|
932
|
+
<span class="cline-any cline-yes">65x</span>
|
|
933
|
+
<span class="cline-any cline-yes">65x</span>
|
|
934
|
+
<span class="cline-any cline-yes">65x</span>
|
|
935
|
+
<span class="cline-any cline-yes">65x</span>
|
|
936
|
+
<span class="cline-any cline-yes">65x</span>
|
|
937
|
+
<span class="cline-any cline-yes">65x</span>
|
|
938
|
+
<span class="cline-any cline-yes">65x</span>
|
|
939
|
+
<span class="cline-any cline-yes">65x</span>
|
|
748
940
|
<span class="cline-any cline-yes">7x</span>
|
|
749
941
|
<span class="cline-any cline-yes">7x</span>
|
|
750
|
-
<span class="cline-any cline-yes">
|
|
751
|
-
<span class="cline-any cline-yes">
|
|
752
|
-
<span class="cline-any cline-yes">
|
|
753
|
-
<span class="cline-any cline-yes">
|
|
754
|
-
<span class="cline-any cline-yes">
|
|
942
|
+
<span class="cline-any cline-yes">58x</span>
|
|
943
|
+
<span class="cline-any cline-yes">58x</span>
|
|
944
|
+
<span class="cline-any cline-yes">58x</span>
|
|
945
|
+
<span class="cline-any cline-yes">64x</span>
|
|
946
|
+
<span class="cline-any cline-yes">52x</span>
|
|
755
947
|
<span class="cline-any cline-yes">2x</span>
|
|
756
948
|
<span class="cline-any cline-yes">2x</span>
|
|
757
949
|
<span class="cline-any cline-yes">1x</span>
|
|
758
950
|
<span class="cline-any cline-yes">1x</span>
|
|
759
951
|
<span class="cline-any cline-yes">1x</span>
|
|
760
|
-
<span class="cline-any cline-yes">
|
|
761
|
-
<span class="cline-any cline-yes">
|
|
762
|
-
<span class="cline-any cline-yes">
|
|
763
|
-
<span class="cline-any cline-yes">
|
|
764
|
-
<span class="cline-any cline-yes">
|
|
765
|
-
<span class="cline-any cline-yes">
|
|
952
|
+
<span class="cline-any cline-yes">52x</span>
|
|
953
|
+
<span class="cline-any cline-yes">50x</span>
|
|
954
|
+
<span class="cline-any cline-yes">50x</span>
|
|
955
|
+
<span class="cline-any cline-yes">50x</span>
|
|
956
|
+
<span class="cline-any cline-yes">50x</span>
|
|
957
|
+
<span class="cline-any cline-yes">50x</span>
|
|
766
958
|
<span class="cline-any cline-yes">3x</span>
|
|
767
959
|
<span class="cline-any cline-yes">3x</span>
|
|
768
|
-
<span class="cline-any cline-yes">
|
|
769
|
-
<span class="cline-any cline-yes">
|
|
770
|
-
<span class="cline-any cline-yes">
|
|
771
|
-
<span class="cline-any cline-yes">
|
|
772
|
-
<span class="cline-any cline-yes">
|
|
773
|
-
<span class="cline-any cline-yes">
|
|
774
|
-
<span class="cline-any cline-yes">
|
|
775
|
-
<span class="cline-any cline-yes">
|
|
776
|
-
<span class="cline-any cline-yes">
|
|
777
|
-
<span class="cline-any cline-yes">
|
|
778
|
-
<span class="cline-any cline-yes">
|
|
779
|
-
<span class="cline-any cline-yes">
|
|
780
|
-
<span class="cline-any cline-yes">1x</span>
|
|
781
|
-
<span class="cline-any cline-yes">1x</span>
|
|
782
|
-
<span class="cline-any cline-yes">1x</span>
|
|
960
|
+
<span class="cline-any cline-yes">47x</span>
|
|
961
|
+
<span class="cline-any cline-yes">50x</span>
|
|
962
|
+
<span class="cline-any cline-yes">50x</span>
|
|
963
|
+
<span class="cline-any cline-yes">50x</span>
|
|
964
|
+
<span class="cline-any cline-yes">50x</span>
|
|
965
|
+
<span class="cline-any cline-yes">50x</span>
|
|
966
|
+
<span class="cline-any cline-yes">50x</span>
|
|
967
|
+
<span class="cline-any cline-yes">50x</span>
|
|
968
|
+
<span class="cline-any cline-yes">52x</span>
|
|
969
|
+
<span class="cline-any cline-yes">54x</span>
|
|
970
|
+
<span class="cline-any cline-yes">54x</span>
|
|
971
|
+
<span class="cline-any cline-yes">54x</span>
|
|
783
972
|
<span class="cline-any cline-yes">1x</span>
|
|
784
973
|
<span class="cline-any cline-yes">1x</span>
|
|
785
974
|
<span class="cline-any cline-yes">1x</span>
|
|
786
975
|
<span class="cline-any cline-yes">1x</span>
|
|
787
976
|
<span class="cline-any cline-yes">1x</span>
|
|
788
977
|
<span class="cline-any cline-yes">1x</span>
|
|
789
|
-
<span class="cline-any cline-yes">97x</span>
|
|
790
|
-
<span class="cline-any cline-yes">97x</span>
|
|
791
|
-
<span class="cline-any cline-yes">97x</span>
|
|
792
|
-
<span class="cline-any cline-yes">97x</span>
|
|
793
|
-
<span class="cline-any cline-yes">97x</span>
|
|
794
|
-
<span class="cline-any cline-yes">97x</span>
|
|
795
|
-
<span class="cline-any cline-yes">194x</span>
|
|
796
|
-
<span class="cline-any cline-yes">102x</span>
|
|
797
|
-
<span class="cline-any cline-yes">102x</span>
|
|
798
|
-
<span class="cline-any cline-yes">194x</span>
|
|
799
|
-
<span class="cline-any cline-yes">97x</span>
|
|
800
|
-
<span class="cline-any cline-yes">97x</span>
|
|
801
978
|
<span class="cline-any cline-yes">1x</span>
|
|
802
979
|
<span class="cline-any cline-yes">1x</span>
|
|
803
980
|
<span class="cline-any cline-yes">1x</span>
|
|
981
|
+
<span class="cline-any cline-yes">115x</span>
|
|
982
|
+
<span class="cline-any cline-yes">115x</span>
|
|
983
|
+
<span class="cline-any cline-yes">115x</span>
|
|
984
|
+
<span class="cline-any cline-yes">115x</span>
|
|
985
|
+
<span class="cline-any cline-yes">115x</span>
|
|
986
|
+
<span class="cline-any cline-yes">115x</span>
|
|
987
|
+
<span class="cline-any cline-yes">230x</span>
|
|
988
|
+
<span class="cline-any cline-yes">120x</span>
|
|
989
|
+
<span class="cline-any cline-yes">120x</span>
|
|
990
|
+
<span class="cline-any cline-yes">230x</span>
|
|
991
|
+
<span class="cline-any cline-yes">115x</span>
|
|
992
|
+
<span class="cline-any cline-yes">115x</span>
|
|
804
993
|
<span class="cline-any cline-yes">1x</span>
|
|
805
|
-
<span class="cline-any cline-yes">
|
|
806
|
-
<span class="cline-any cline-yes">
|
|
807
|
-
<span class="cline-any cline-yes">
|
|
808
|
-
<span class="cline-any cline-yes">
|
|
809
|
-
<span class="cline-any cline-yes">
|
|
810
|
-
<span class="cline-any cline-yes">
|
|
994
|
+
<span class="cline-any cline-yes">115x</span>
|
|
995
|
+
<span class="cline-any cline-yes">115x</span>
|
|
996
|
+
<span class="cline-any cline-yes">115x</span>
|
|
997
|
+
<span class="cline-any cline-yes">115x</span>
|
|
998
|
+
<span class="cline-any cline-yes">115x</span>
|
|
999
|
+
<span class="cline-any cline-yes">115x</span>
|
|
1000
|
+
<span class="cline-any cline-yes">115x</span>
|
|
1001
|
+
<span class="cline-any cline-yes">115x</span>
|
|
811
1002
|
<span class="cline-any cline-yes">3x</span>
|
|
812
1003
|
<span class="cline-any cline-yes">3x</span>
|
|
813
1004
|
<span class="cline-any cline-yes">3x</span>
|
|
814
|
-
<span class="cline-any cline-yes">
|
|
815
|
-
<span class="cline-any cline-yes">
|
|
1005
|
+
<span class="cline-any cline-yes">112x</span>
|
|
1006
|
+
<span class="cline-any cline-yes">115x</span>
|
|
1007
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1008
|
+
<span class="cline-any cline-yes">5x</span>
|
|
816
1009
|
<span class="cline-any cline-yes">5x</span>
|
|
817
1010
|
<span class="cline-any cline-yes">5x</span>
|
|
818
1011
|
<span class="cline-any cline-yes">5x</span>
|
|
819
|
-
<span class="cline-any cline-yes">
|
|
820
|
-
<span class="cline-any cline-yes">
|
|
821
|
-
<span class="cline-any cline-yes">
|
|
1012
|
+
<span class="cline-any cline-yes">5x</span>
|
|
1013
|
+
<span class="cline-any cline-yes">107x</span>
|
|
1014
|
+
<span class="cline-any cline-yes">107x</span>
|
|
1015
|
+
<span class="cline-any cline-yes">115x</span>
|
|
822
1016
|
<span class="cline-any cline-yes">2x</span>
|
|
823
1017
|
<span class="cline-any cline-yes">2x</span>
|
|
824
|
-
<span class="cline-any cline-yes">
|
|
825
|
-
<span class="cline-any cline-yes">
|
|
826
|
-
<span class="cline-any cline-yes">
|
|
1018
|
+
<span class="cline-any cline-yes">105x</span>
|
|
1019
|
+
<span class="cline-any cline-yes">105x</span>
|
|
1020
|
+
<span class="cline-any cline-yes">105x</span>
|
|
827
1021
|
<span class="cline-any cline-yes">1x</span>
|
|
828
1022
|
<span class="cline-any cline-neutral"> </span></td><td class="text"><pre class="prettyprint lang-js">/*
|
|
829
1023
|
* Copyright (c) 2026 Erik Fortune
|
|
@@ -905,6 +1099,9 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
905
1099
|
private readonly _autoSync: boolean;
|
|
906
1100
|
private readonly _userId: string | undefined;
|
|
907
1101
|
private readonly _logger: Logging.LogReporter<unknown>;
|
|
1102
|
+
|
|
1103
|
+
/** Guards against concurrent syncToDisk calls (thundering herd from autoSync). */
|
|
1104
|
+
private _syncPromise: Promise<Result<void>> | undefined;
|
|
908
1105
|
|
|
909
1106
|
private constructor(files: FileTree.IInMemoryFile<TCT>[], params: IHttpTreeParams<TCT>) {
|
|
910
1107
|
super(files, params);
|
|
@@ -944,65 +1141,116 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
944
1141
|
|
|
945
1142
|
/**
|
|
946
1143
|
* Synchronizes all dirty files to the HTTP backend.
|
|
1144
|
+
*
|
|
1145
|
+
* Uses a concurrency guard: if a sync is already in progress, callers
|
|
1146
|
+
* await the existing operation rather than starting a parallel one.
|
|
1147
|
+
* This prevents the thundering herd that occurs when autoSync fires
|
|
1148
|
+
* for every file written during a bulk operation (e.g. restore).
|
|
1149
|
+
*
|
|
947
1150
|
* @returns A promise that resolves to a result indicating success or failure.
|
|
948
1151
|
*/
|
|
949
1152
|
public async syncToDisk(): Promise<Result<void>> {
|
|
950
|
-
if (this.
|
|
951
|
-
|
|
1153
|
+
if (this._syncPromise) {
|
|
1154
|
+
// Wait for the in-flight sync — it drains the queue in a loop,
|
|
1155
|
+
// so any items added before it finishes will be included.
|
|
1156
|
+
return this._syncPromise;
|
|
952
1157
|
}
|
|
953
1158
|
|
|
954
|
-
|
|
955
|
-
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
|
|
959
|
-
}
|
|
1159
|
+
this._syncPromise = this._doSync().finally(() => {
|
|
1160
|
+
this._syncPromise = undefined;
|
|
1161
|
+
});
|
|
1162
|
+
return this._syncPromise;
|
|
1163
|
+
}
|
|
960
1164
|
|
|
961
|
-
|
|
962
|
-
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
1165
|
+
private async _doSync(): Promise<Result<void>> {
|
|
1166
|
+
// Drain loop: keep processing as long as new items arrive.
|
|
1167
|
+
// This is critical for bulk operations (e.g. reset) where many
|
|
1168
|
+
// deleteFile/saveFileContents calls happen synchronously — only
|
|
1169
|
+
// the first may be in the set when we snapshot, but the rest
|
|
1170
|
+
// arrive during the async gaps and must be picked up before
|
|
1171
|
+
// we return.
|
|
1172
|
+
let didWork = false;
|
|
1173
|
+
while (this._dirtyFiles.size > 0 || this._pendingDeletions.size > 0) {
|
|
1174
|
+
didWork = true;
|
|
1175
|
+
// Snapshot and clear so that changes arriving during the async
|
|
1176
|
+
// requests land in the live sets for the next iteration.
|
|
1177
|
+
const deletions = new Set(this._pendingDeletions);
|
|
1178
|
+
const dirty = new Set(this._dirtyFiles);
|
|
1179
|
+
this._pendingDeletions.clear();
|
|
1180
|
+
this._dirtyFiles.clear();
|
|
1181
|
+
|
|
1182
|
+
for (const path of deletions) {
|
|
1183
|
+
const query = new URLSearchParams();
|
|
1184
|
+
query.set('path', path);
|
|
1185
|
+
if (this._namespace) {
|
|
1186
|
+
query.set('namespace', this._namespace);
|
|
1187
|
+
}
|
|
1188
|
+
|
|
1189
|
+
const deleteResult = await this._requestWithRetry<{ deleted: boolean }>(`/file?${query.toString()}`, {
|
|
1190
|
+
method: 'DELETE'
|
|
1191
|
+
});
|
|
1192
|
+
if (deleteResult.isFailure()) {
|
|
1193
|
+
this._restoreUnsynced(deletions, dirty);
|
|
1194
|
+
return fail(`delete ${path}: ${deleteResult.message}`);
|
|
1195
|
+
}
|
|
966
1196
|
}
|
|
967
|
-
}
|
|
968
1197
|
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
1198
|
+
for (const path of dirty) {
|
|
1199
|
+
const contentsResult = this.getFileContents(path);
|
|
1200
|
+
if (contentsResult.isFailure()) {
|
|
1201
|
+
this._restoreUnsynced(deletions, dirty);
|
|
1202
|
+
return fail(`${path}: ${contentsResult.message}`);
|
|
1203
|
+
}
|
|
1204
|
+
|
|
1205
|
+
const body: Record<string, unknown> = {
|
|
1206
|
+
path,
|
|
1207
|
+
contents: contentsResult.value
|
|
1208
|
+
};
|
|
1209
|
+
if (this._namespace) {
|
|
1210
|
+
body.namespace = this._namespace;
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
const saveResult = await this._requestWithRetry<IHttpStorageFileResponse>('/file', {
|
|
1214
|
+
method: 'PUT',
|
|
1215
|
+
body: JSON.stringify(body)
|
|
1216
|
+
});
|
|
1217
|
+
if (saveResult.isFailure()) {
|
|
1218
|
+
this._restoreUnsynced(deletions, dirty);
|
|
1219
|
+
return fail(`sync ${path}: ${saveResult.message}`);
|
|
1220
|
+
}
|
|
973
1221
|
}
|
|
1222
|
+
}
|
|
974
1223
|
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
contents: contentsResult.value
|
|
978
|
-
};
|
|
1224
|
+
if (didWork) {
|
|
1225
|
+
const syncBody: Record<string, unknown> = {};
|
|
979
1226
|
if (this._namespace) {
|
|
980
|
-
|
|
1227
|
+
syncBody.namespace = this._namespace;
|
|
981
1228
|
}
|
|
982
1229
|
|
|
983
|
-
const
|
|
984
|
-
method: '
|
|
985
|
-
body: JSON.stringify(
|
|
1230
|
+
const syncResult = await this._requestWithRetry<IHttpStorageSyncResponse>('/sync', {
|
|
1231
|
+
method: 'POST',
|
|
1232
|
+
body: JSON.stringify(syncBody)
|
|
986
1233
|
});
|
|
987
|
-
|
|
988
|
-
|
|
1234
|
+
|
|
1235
|
+
if (syncResult.isFailure()) {
|
|
1236
|
+
return fail(syncResult.message);
|
|
989
1237
|
}
|
|
990
1238
|
}
|
|
1239
|
+
return succeed(undefined);
|
|
1240
|
+
}
|
|
991
1241
|
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
1242
|
+
/**
|
|
1243
|
+
* Restores snapshotted items back into the live dirty sets so they
|
|
1244
|
+
* are retried on the next sync attempt. Items that were added to
|
|
1245
|
+
* the live sets while the sync was in flight are preserved.
|
|
1246
|
+
*/
|
|
1247
|
+
private _restoreUnsynced(deletions: Set<string>, dirty: Set<string>): void {
|
|
1248
|
+
for (const path of deletions) {
|
|
1249
|
+
this._pendingDeletions.add(path);
|
|
1250
|
+
}
|
|
1251
|
+
for (const path of dirty) {
|
|
1252
|
+
this._dirtyFiles.add(path);
|
|
998
1253
|
}
|
|
999
|
-
|
|
1000
|
-
const syncResult = await this._request<IHttpStorageSyncResponse>('/sync', {
|
|
1001
|
-
method: 'POST',
|
|
1002
|
-
body: JSON.stringify(syncBody)
|
|
1003
|
-
});
|
|
1004
|
-
|
|
1005
|
-
return syncResult.isFailure() ? fail(syncResult.message) : succeed(undefined);
|
|
1006
1254
|
}
|
|
1007
1255
|
|
|
1008
1256
|
/**
|
|
@@ -1096,7 +1344,10 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
1096
1344
|
}
|
|
1097
1345
|
|
|
1098
1346
|
if (!response.ok) {
|
|
1099
|
-
const
|
|
1347
|
+
const body = await response.text().catch(() => '');
|
|
1348
|
+
const message = body
|
|
1349
|
+
? `HTTP ${response.status}: ${body}`
|
|
1350
|
+
: `HTTP ${response.status} ${response.statusText}`;
|
|
1100
1351
|
return fail(message);
|
|
1101
1352
|
}
|
|
1102
1353
|
|
|
@@ -1106,6 +1357,44 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
1106
1357
|
}
|
|
1107
1358
|
return succeed(json as T);
|
|
1108
1359
|
}
|
|
1360
|
+
|
|
1361
|
+
/**
|
|
1362
|
+
* Wraps `_request` with retry logic for transient failures
|
|
1363
|
+
* (network errors, 503 service unavailable, etc.).
|
|
1364
|
+
*/
|
|
1365
|
+
private async _requestWithRetry<T>(resourcePath: string, init?: RequestInit): Promise<Result<T>> {
|
|
1366
|
+
const maxAttempts = 3;
|
|
1367
|
+
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
|
|
1368
|
+
const result = await this._request<T>(resourcePath, init);
|
|
1369
|
+
if (result.isSuccess() || attempt === maxAttempts) {
|
|
1370
|
+
return result;
|
|
1371
|
+
}
|
|
1372
|
+
// Retry on transient-looking errors
|
|
1373
|
+
const msg = result.message;
|
|
1374
|
+
const lowerMsg = msg.toLowerCase();
|
|
1375
|
+
const isTransient =
|
|
1376
|
+
msg.includes('503') ||
|
|
1377
|
+
msg.includes('502') ||
|
|
1378
|
+
msg.includes('429') ||
|
|
1379
|
+
lowerMsg.includes('disconnect') ||
|
|
1380
|
+
lowerMsg.includes('econnreset') ||
|
|
1381
|
+
lowerMsg.includes('failed to fetch') ||
|
|
1382
|
+
lowerMsg.includes('network');
|
|
1383
|
+
if (!isTransient) {
|
|
1384
|
+
return result;
|
|
1385
|
+
}
|
|
1386
|
+
// Exponential backoff: 500ms, 1000ms
|
|
1387
|
+
const delayMs = 500 * Math.pow(2, attempt - 1);
|
|
1388
|
+
this._logger.detail(
|
|
1389
|
+
`Retrying ${
|
|
1390
|
+
init<span class="branch-0 cbranch-no" title="branch not covered" >?.m</span>ethod<span class="branch-0 cbranch-no" title="branch not covered" > ?? 'GET'</span>
|
|
1391
|
+
} ${resourcePath} after ${delayMs}ms (attempt ${attempt}/${maxAttempts})`
|
|
1392
|
+
);
|
|
1393
|
+
await new Promise((resolve) => setTimeout(resolve, delayMs));
|
|
1394
|
+
}
|
|
1395
|
+
/* c8 ignore next 1 - defensive coding: loop always returns */
|
|
1396
|
+
return fail('retry loop exited unexpectedly');
|
|
1397
|
+
}
|
|
1109
1398
|
|
|
1110
1399
|
/**
|
|
1111
1400
|
* Loads files from the HTTP backend for the specified directory path.
|
|
@@ -1179,8 +1468,7 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
1179
1468
|
}
|
|
1180
1469
|
|
|
1181
1470
|
const fetchImpl = normalizeFetch(params.fetchImpl);
|
|
1182
|
-
|
|
1183
|
-
const userIdHeaders: RequestInit | undefined = params.userId
|
|
1471
|
+
const userIdHeaders: RequestInit | undefined = /* c8 ignore next */ params.userId
|
|
1184
1472
|
? { headers: { 'X-User-Id': params.userId } }
|
|
1185
1473
|
: undefined;
|
|
1186
1474
|
const response = await fetchImpl(
|
|
@@ -1194,7 +1482,10 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
1194
1482
|
}
|
|
1195
1483
|
|
|
1196
1484
|
if (!response.ok) {
|
|
1197
|
-
const
|
|
1485
|
+
const body = await response.text().catch(() => '');
|
|
1486
|
+
const message = body
|
|
1487
|
+
? `HTTP ${response.status}: ${body}`
|
|
1488
|
+
: `HTTP ${response.status} ${response.statusText}`;
|
|
1198
1489
|
return fail(message);
|
|
1199
1490
|
}
|
|
1200
1491
|
|
|
@@ -1213,7 +1504,7 @@ export class HttpTreeAccessors<TCT extends string = string>
|
|
|
1213
1504
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
1214
1505
|
Code coverage generated by
|
|
1215
1506
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
1216
|
-
at 2026-
|
|
1507
|
+
at 2026-04-07T20:05:02.689Z
|
|
1217
1508
|
</div>
|
|
1218
1509
|
<script src="../prettify.js"></script>
|
|
1219
1510
|
<script>
|