@fluidframework/routerlicious-driver 1.4.0-115997 → 2.0.0-dev-rc.1.0.0.224419
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/.eslintrc.js +10 -12
- package/.mocharc.js +12 -0
- package/CHANGELOG.md +156 -0
- package/README.md +39 -1
- package/api-extractor-lint.json +4 -0
- package/api-extractor.json +2 -2
- package/api-report/routerlicious-driver.api.md +108 -0
- package/dist/cache.cjs +30 -0
- package/dist/cache.cjs.map +1 -0
- package/dist/cache.d.ts +7 -0
- package/dist/cache.d.ts.map +1 -1
- package/dist/{definitions.js → contracts.cjs} +1 -1
- package/dist/contracts.cjs.map +1 -0
- package/dist/contracts.d.ts +42 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/{createNewUtils.js → createNewUtils.cjs} +7 -5
- package/dist/createNewUtils.cjs.map +1 -0
- package/dist/createNewUtils.d.ts +1 -1
- package/dist/createNewUtils.d.ts.map +1 -1
- package/dist/{defaultTokenProvider.js → defaultTokenProvider.cjs} +2 -1
- package/dist/defaultTokenProvider.cjs.map +1 -0
- package/dist/defaultTokenProvider.d.ts +1 -0
- package/dist/defaultTokenProvider.d.ts.map +1 -1
- package/dist/definitions.cjs +7 -0
- package/dist/definitions.cjs.map +1 -0
- package/dist/definitions.d.ts.map +1 -1
- package/dist/deltaStorageService.cjs +122 -0
- package/dist/deltaStorageService.cjs.map +1 -0
- package/dist/deltaStorageService.d.ts +7 -6
- package/dist/deltaStorageService.d.ts.map +1 -1
- package/dist/{documentDeltaConnection.js → documentDeltaConnection.cjs} +8 -13
- package/dist/documentDeltaConnection.cjs.map +1 -0
- package/dist/documentDeltaConnection.d.ts +3 -4
- package/dist/documentDeltaConnection.d.ts.map +1 -1
- package/dist/{documentService.js → documentService.cjs} +61 -64
- package/dist/documentService.cjs.map +1 -0
- package/dist/documentService.d.ts +12 -4
- package/dist/documentService.d.ts.map +1 -1
- package/dist/{documentServiceFactory.js → documentServiceFactory.cjs} +87 -33
- package/dist/documentServiceFactory.cjs.map +1 -0
- package/dist/documentServiceFactory.d.ts +5 -3
- package/dist/documentServiceFactory.d.ts.map +1 -1
- package/dist/{documentStorageService.js → documentStorageService.cjs} +18 -16
- package/dist/documentStorageService.cjs.map +1 -0
- package/dist/documentStorageService.d.ts +4 -3
- package/dist/documentStorageService.d.ts.map +1 -1
- package/dist/errorUtils.cjs +87 -0
- package/dist/errorUtils.cjs.map +1 -0
- package/dist/errorUtils.d.ts +56 -10
- package/dist/errorUtils.d.ts.map +1 -1
- package/dist/gitManager.cjs +46 -0
- package/dist/gitManager.cjs.map +1 -0
- package/dist/gitManager.d.ts +27 -0
- package/dist/gitManager.d.ts.map +1 -0
- package/dist/historian.cjs +72 -0
- package/dist/historian.cjs.map +1 -0
- package/dist/historian.d.ts +34 -0
- package/dist/historian.d.ts.map +1 -0
- package/dist/index.cjs +19 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +5 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/mapWithExpiration.cjs +105 -0
- package/dist/mapWithExpiration.cjs.map +1 -0
- package/dist/mapWithExpiration.d.ts +34 -0
- package/dist/mapWithExpiration.d.ts.map +1 -0
- package/dist/{nullBlobStorageService.js → nullBlobStorageService.cjs} +5 -5
- package/dist/nullBlobStorageService.cjs.map +1 -0
- package/dist/nullBlobStorageService.d.ts.map +1 -1
- package/dist/{packageVersion.js → packageVersion.cjs} +2 -2
- package/dist/packageVersion.cjs.map +1 -0
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.d.ts.map +1 -1
- package/dist/{policies.js → policies.cjs} +1 -1
- package/dist/policies.cjs.map +1 -0
- package/dist/policies.d.ts +22 -9
- package/dist/policies.d.ts.map +1 -1
- package/dist/r11sSnapshotParser.cjs +73 -0
- package/dist/r11sSnapshotParser.cjs.map +1 -0
- package/dist/r11sSnapshotParser.d.ts +14 -0
- package/dist/r11sSnapshotParser.d.ts.map +1 -0
- package/dist/restWrapper.cjs +249 -0
- package/dist/restWrapper.cjs.map +1 -0
- package/dist/restWrapper.d.ts +32 -12
- package/dist/restWrapper.d.ts.map +1 -1
- package/dist/restWrapperBase.cjs +89 -0
- package/dist/restWrapperBase.cjs.map +1 -0
- package/dist/restWrapperBase.d.ts +26 -0
- package/dist/restWrapperBase.d.ts.map +1 -0
- package/dist/retriableGitManager.cjs +40 -0
- package/dist/retriableGitManager.cjs.map +1 -0
- package/dist/retriableGitManager.d.ts +13 -23
- package/dist/retriableGitManager.d.ts.map +1 -1
- package/dist/routerlicious-driver-alpha.d.ts +92 -0
- package/dist/routerlicious-driver-beta.d.ts +98 -0
- package/dist/routerlicious-driver-public.d.ts +98 -0
- package/dist/routerlicious-driver-untrimmed.d.ts +261 -0
- package/dist/{shreddedSummaryDocumentStorageService.js → shreddedSummaryDocumentStorageService.cjs} +41 -34
- package/dist/shreddedSummaryDocumentStorageService.cjs.map +1 -0
- package/dist/shreddedSummaryDocumentStorageService.d.ts +6 -5
- package/dist/shreddedSummaryDocumentStorageService.d.ts.map +1 -1
- package/dist/storageContracts.cjs +7 -0
- package/dist/storageContracts.cjs.map +1 -0
- package/dist/storageContracts.d.ts +45 -0
- package/dist/storageContracts.d.ts.map +1 -0
- package/dist/summaryTreeUploadManager.cjs +110 -0
- package/dist/summaryTreeUploadManager.cjs.map +1 -0
- package/dist/summaryTreeUploadManager.d.ts +23 -0
- package/dist/summaryTreeUploadManager.d.ts.map +1 -0
- package/dist/{tokens.js → tokens.cjs} +1 -1
- package/dist/tokens.cjs.map +1 -0
- package/dist/tokens.d.ts +34 -5
- package/dist/tokens.d.ts.map +1 -1
- package/dist/treeUtils.cjs +107 -0
- package/dist/treeUtils.cjs.map +1 -0
- package/dist/treeUtils.d.ts +58 -0
- package/dist/treeUtils.d.ts.map +1 -0
- package/dist/tsdoc-metadata.json +11 -0
- package/dist/{urlUtils.js → urlUtils.cjs} +21 -25
- package/dist/urlUtils.cjs.map +1 -0
- package/dist/urlUtils.d.ts +2 -2
- package/dist/urlUtils.d.ts.map +1 -1
- package/dist/wholeSummaryDocumentStorageService.cjs +253 -0
- package/dist/wholeSummaryDocumentStorageService.cjs.map +1 -0
- package/dist/wholeSummaryDocumentStorageService.d.ts +10 -8
- package/dist/wholeSummaryDocumentStorageService.d.ts.map +1 -1
- package/dist/wholeSummaryUploadManager.cjs +37 -0
- package/dist/wholeSummaryUploadManager.cjs.map +1 -0
- package/dist/wholeSummaryUploadManager.d.ts +16 -0
- package/dist/wholeSummaryUploadManager.d.ts.map +1 -0
- package/lib/{cache.d.ts → cache.d.mts} +7 -0
- package/lib/cache.d.mts.map +1 -0
- package/lib/cache.mjs +25 -0
- package/lib/cache.mjs.map +1 -0
- package/lib/contracts.d.mts +42 -0
- package/lib/contracts.d.mts.map +1 -0
- package/lib/{definitions.js → contracts.mjs} +1 -1
- package/lib/contracts.mjs.map +1 -0
- package/lib/{createNewUtils.d.ts → createNewUtils.d.mts} +1 -1
- package/lib/{createNewUtils.d.ts.map → createNewUtils.d.mts.map} +1 -1
- package/lib/{createNewUtils.js → createNewUtils.mjs} +7 -5
- package/lib/createNewUtils.mjs.map +1 -0
- package/lib/{defaultTokenProvider.d.ts → defaultTokenProvider.d.mts} +2 -1
- package/lib/defaultTokenProvider.d.mts.map +1 -0
- package/lib/{defaultTokenProvider.js → defaultTokenProvider.mjs} +2 -1
- package/lib/defaultTokenProvider.mjs.map +1 -0
- package/lib/definitions.d.mts.map +1 -0
- package/lib/definitions.mjs +6 -0
- package/{dist/definitions.js.map → lib/definitions.mjs.map} +1 -1
- package/lib/{deltaStorageService.d.ts → deltaStorageService.d.mts} +8 -7
- package/lib/deltaStorageService.d.mts.map +1 -0
- package/lib/deltaStorageService.mjs +117 -0
- package/lib/deltaStorageService.mjs.map +1 -0
- package/lib/{documentDeltaConnection.d.ts → documentDeltaConnection.d.mts} +3 -4
- package/lib/documentDeltaConnection.d.mts.map +1 -0
- package/lib/{documentDeltaConnection.js → documentDeltaConnection.mjs} +8 -13
- package/lib/documentDeltaConnection.mjs.map +1 -0
- package/lib/{documentService.d.ts → documentService.d.mts} +16 -8
- package/lib/documentService.d.mts.map +1 -0
- package/lib/{documentService.js → documentService.mjs} +60 -44
- package/lib/documentService.mjs.map +1 -0
- package/lib/{documentServiceFactory.d.ts → documentServiceFactory.d.mts} +7 -5
- package/lib/documentServiceFactory.d.mts.map +1 -0
- package/lib/{documentServiceFactory.js → documentServiceFactory.mjs} +88 -34
- package/lib/documentServiceFactory.mjs.map +1 -0
- package/lib/{documentStorageService.d.ts → documentStorageService.d.mts} +7 -6
- package/lib/documentStorageService.d.mts.map +1 -0
- package/lib/{documentStorageService.js → documentStorageService.mjs} +19 -17
- package/lib/documentStorageService.mjs.map +1 -0
- package/lib/errorUtils.d.mts +93 -0
- package/lib/errorUtils.d.mts.map +1 -0
- package/lib/errorUtils.mjs +81 -0
- package/lib/errorUtils.mjs.map +1 -0
- package/lib/gitManager.d.mts +27 -0
- package/lib/gitManager.d.mts.map +1 -0
- package/lib/gitManager.mjs +42 -0
- package/lib/gitManager.mjs.map +1 -0
- package/lib/historian.d.mts +34 -0
- package/lib/historian.d.mts.map +1 -0
- package/lib/historian.mjs +67 -0
- package/lib/historian.mjs.map +1 -0
- package/lib/index.d.mts +10 -0
- package/lib/index.d.mts.map +1 -0
- package/lib/index.mjs +8 -0
- package/lib/index.mjs.map +1 -0
- package/lib/mapWithExpiration.d.mts +34 -0
- package/lib/mapWithExpiration.d.mts.map +1 -0
- package/lib/mapWithExpiration.mjs +101 -0
- package/lib/mapWithExpiration.mjs.map +1 -0
- package/lib/nullBlobStorageService.d.mts.map +1 -0
- package/lib/{nullBlobStorageService.js → nullBlobStorageService.mjs} +5 -5
- package/lib/nullBlobStorageService.mjs.map +1 -0
- package/lib/{packageVersion.d.ts → packageVersion.d.mts} +1 -1
- package/lib/{packageVersion.d.ts.map → packageVersion.d.mts.map} +1 -1
- package/lib/{packageVersion.js → packageVersion.mjs} +2 -2
- package/lib/packageVersion.mjs.map +1 -0
- package/lib/{policies.d.ts → policies.d.mts} +22 -9
- package/lib/policies.d.mts.map +1 -0
- package/lib/{policies.js → policies.mjs} +1 -1
- package/lib/policies.mjs.map +1 -0
- package/lib/r11sSnapshotParser.d.mts +14 -0
- package/lib/r11sSnapshotParser.d.mts.map +1 -0
- package/lib/r11sSnapshotParser.mjs +69 -0
- package/lib/r11sSnapshotParser.mjs.map +1 -0
- package/lib/restWrapper.d.mts +53 -0
- package/lib/restWrapper.d.mts.map +1 -0
- package/lib/restWrapper.mjs +236 -0
- package/lib/restWrapper.mjs.map +1 -0
- package/lib/restWrapperBase.d.mts +26 -0
- package/lib/restWrapperBase.d.mts.map +1 -0
- package/lib/restWrapperBase.mjs +84 -0
- package/lib/restWrapperBase.mjs.map +1 -0
- package/lib/retriableGitManager.d.mts +24 -0
- package/lib/retriableGitManager.d.mts.map +1 -0
- package/lib/retriableGitManager.mjs +36 -0
- package/lib/retriableGitManager.mjs.map +1 -0
- package/lib/routerlicious-driver-alpha.d.mts +92 -0
- package/lib/routerlicious-driver-beta.d.mts +98 -0
- package/lib/routerlicious-driver-public.d.mts +98 -0
- package/lib/routerlicious-driver-untrimmed.d.mts +261 -0
- package/lib/{shreddedSummaryDocumentStorageService.d.ts → shreddedSummaryDocumentStorageService.d.mts} +9 -8
- package/lib/shreddedSummaryDocumentStorageService.d.mts.map +1 -0
- package/lib/{shreddedSummaryDocumentStorageService.js → shreddedSummaryDocumentStorageService.mjs} +41 -34
- package/lib/shreddedSummaryDocumentStorageService.mjs.map +1 -0
- package/lib/storageContracts.d.mts +45 -0
- package/lib/storageContracts.d.mts.map +1 -0
- package/lib/storageContracts.mjs +6 -0
- package/lib/storageContracts.mjs.map +1 -0
- package/lib/summaryTreeUploadManager.d.mts +23 -0
- package/lib/summaryTreeUploadManager.d.mts.map +1 -0
- package/lib/summaryTreeUploadManager.mjs +106 -0
- package/lib/summaryTreeUploadManager.mjs.map +1 -0
- package/lib/{tokens.d.ts → tokens.d.mts} +34 -5
- package/lib/tokens.d.mts.map +1 -0
- package/lib/{tokens.js → tokens.mjs} +1 -1
- package/lib/tokens.mjs.map +1 -0
- package/lib/treeUtils.d.mts +58 -0
- package/lib/treeUtils.d.mts.map +1 -0
- package/lib/treeUtils.mjs +100 -0
- package/lib/treeUtils.mjs.map +1 -0
- package/lib/{urlUtils.d.ts → urlUtils.d.mts} +2 -2
- package/lib/urlUtils.d.mts.map +1 -0
- package/lib/urlUtils.mjs +38 -0
- package/lib/urlUtils.mjs.map +1 -0
- package/lib/{wholeSummaryDocumentStorageService.d.ts → wholeSummaryDocumentStorageService.d.mts} +12 -10
- package/lib/wholeSummaryDocumentStorageService.d.mts.map +1 -0
- package/lib/wholeSummaryDocumentStorageService.mjs +249 -0
- package/lib/wholeSummaryDocumentStorageService.mjs.map +1 -0
- package/lib/wholeSummaryUploadManager.d.mts +16 -0
- package/lib/wholeSummaryUploadManager.d.mts.map +1 -0
- package/lib/wholeSummaryUploadManager.mjs +33 -0
- package/lib/wholeSummaryUploadManager.mjs.map +1 -0
- package/package.json +104 -68
- package/prettier.config.cjs +8 -0
- package/src/cache.ts +25 -9
- package/src/contracts.ts +60 -0
- package/src/createNewUtils.ts +26 -24
- package/src/defaultTokenProvider.ts +14 -15
- package/src/definitions.ts +2 -2
- package/src/deltaStorageService.ts +145 -91
- package/src/documentDeltaConnection.ts +54 -52
- package/src/documentService.ts +272 -242
- package/src/documentServiceFactory.ts +338 -237
- package/src/documentStorageService.ts +92 -84
- package/src/errorUtils.ts +117 -79
- package/src/gitManager.ts +67 -0
- package/src/historian.ts +121 -0
- package/src/index.ts +15 -8
- package/src/mapWithExpiration.ts +124 -0
- package/src/nullBlobStorageService.ts +24 -21
- package/src/packageVersion.ts +1 -1
- package/src/policies.ts +51 -38
- package/src/r11sSnapshotParser.ts +82 -0
- package/src/restWrapper.ts +400 -216
- package/src/restWrapperBase.ts +146 -0
- package/src/retriableGitManager.ts +76 -153
- package/src/shreddedSummaryDocumentStorageService.ts +214 -195
- package/src/storageContracts.ts +63 -0
- package/src/summaryTreeUploadManager.ts +155 -0
- package/src/tokens.ts +74 -39
- package/src/treeUtils.ts +138 -0
- package/src/urlUtils.ts +27 -28
- package/src/wholeSummaryDocumentStorageService.ts +352 -252
- package/src/wholeSummaryUploadManager.ts +64 -0
- package/tsc-multi.test.json +4 -0
- package/tsconfig.json +10 -13
- package/dist/cache.js +0 -20
- package/dist/cache.js.map +0 -1
- package/dist/createNewUtils.js.map +0 -1
- package/dist/defaultTokenProvider.js.map +0 -1
- package/dist/deltaStorageService.js +0 -82
- package/dist/deltaStorageService.js.map +0 -1
- package/dist/documentDeltaConnection.js.map +0 -1
- package/dist/documentService.js.map +0 -1
- package/dist/documentServiceFactory.js.map +0 -1
- package/dist/documentStorageService.js.map +0 -1
- package/dist/errorUtils.js +0 -56
- package/dist/errorUtils.js.map +0 -1
- package/dist/index.js +0 -25
- package/dist/index.js.map +0 -1
- package/dist/nullBlobStorageService.js.map +0 -1
- package/dist/packageVersion.js.map +0 -1
- package/dist/policies.js.map +0 -1
- package/dist/restWrapper.js +0 -153
- package/dist/restWrapper.js.map +0 -1
- package/dist/retriableGitManager.js +0 -76
- package/dist/retriableGitManager.js.map +0 -1
- package/dist/shreddedSummaryDocumentStorageService.js.map +0 -1
- package/dist/tokens.js.map +0 -1
- package/dist/urlUtils.js.map +0 -1
- package/dist/wholeSummaryDocumentStorageService.js +0 -191
- package/dist/wholeSummaryDocumentStorageService.js.map +0 -1
- package/lib/cache.d.ts.map +0 -1
- package/lib/cache.js +0 -16
- package/lib/cache.js.map +0 -1
- package/lib/createNewUtils.js.map +0 -1
- package/lib/defaultTokenProvider.d.ts.map +0 -1
- package/lib/defaultTokenProvider.js.map +0 -1
- package/lib/definitions.d.ts.map +0 -1
- package/lib/definitions.js.map +0 -1
- package/lib/deltaStorageService.d.ts.map +0 -1
- package/lib/deltaStorageService.js +0 -77
- package/lib/deltaStorageService.js.map +0 -1
- package/lib/documentDeltaConnection.d.ts.map +0 -1
- package/lib/documentDeltaConnection.js.map +0 -1
- package/lib/documentService.d.ts.map +0 -1
- package/lib/documentService.js.map +0 -1
- package/lib/documentServiceFactory.d.ts.map +0 -1
- package/lib/documentServiceFactory.js.map +0 -1
- package/lib/documentStorageService.d.ts.map +0 -1
- package/lib/documentStorageService.js.map +0 -1
- package/lib/errorUtils.d.ts +0 -47
- package/lib/errorUtils.d.ts.map +0 -1
- package/lib/errorUtils.js +0 -50
- package/lib/errorUtils.js.map +0 -1
- package/lib/index.d.ts +0 -13
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -13
- package/lib/index.js.map +0 -1
- package/lib/nullBlobStorageService.d.ts.map +0 -1
- package/lib/nullBlobStorageService.js.map +0 -1
- package/lib/packageVersion.js.map +0 -1
- package/lib/policies.d.ts.map +0 -1
- package/lib/policies.js.map +0 -1
- package/lib/restWrapper.d.ts +0 -33
- package/lib/restWrapper.d.ts.map +0 -1
- package/lib/restWrapper.js +0 -144
- package/lib/restWrapper.js.map +0 -1
- package/lib/retriableGitManager.d.ts +0 -34
- package/lib/retriableGitManager.d.ts.map +0 -1
- package/lib/retriableGitManager.js +0 -72
- package/lib/retriableGitManager.js.map +0 -1
- package/lib/shreddedSummaryDocumentStorageService.d.ts.map +0 -1
- package/lib/shreddedSummaryDocumentStorageService.js.map +0 -1
- package/lib/tokens.d.ts.map +0 -1
- package/lib/tokens.js.map +0 -1
- package/lib/urlUtils.d.ts.map +0 -1
- package/lib/urlUtils.js +0 -42
- package/lib/urlUtils.js.map +0 -1
- package/lib/wholeSummaryDocumentStorageService.d.ts.map +0 -1
- package/lib/wholeSummaryDocumentStorageService.js +0 -187
- package/lib/wholeSummaryDocumentStorageService.js.map +0 -1
- package/tsconfig.esnext.json +0 -7
- /package/lib/{definitions.d.ts → definitions.d.mts} +0 -0
- /package/lib/{nullBlobStorageService.d.ts → nullBlobStorageService.d.mts} +0 -0
|
@@ -3,34 +3,33 @@
|
|
|
3
3
|
* Licensed under the MIT License.
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import type { ITelemetryLogger } from "@fluidframework/common-definitions";
|
|
7
6
|
import {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
7
|
+
ITelemetryLoggerExt,
|
|
8
|
+
MonitoringContext,
|
|
9
|
+
PerformanceEvent,
|
|
10
|
+
createChildMonitoringContext,
|
|
11
|
+
} from "@fluidframework/telemetry-utils";
|
|
12
|
+
import { stringToBuffer, Uint8ArrayToString } from "@fluid-internal/client-utils";
|
|
11
13
|
import {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
IDocumentStorageService,
|
|
15
|
+
ISummaryContext,
|
|
16
|
+
IDocumentStorageServicePolicies,
|
|
15
17
|
} from "@fluidframework/driver-definitions";
|
|
16
|
-
import {
|
|
18
|
+
import { buildGitTreeHierarchy } from "@fluidframework/protocol-base";
|
|
17
19
|
import {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
ICreateBlobResponse,
|
|
21
|
+
ISnapshotTreeEx,
|
|
22
|
+
ISummaryHandle,
|
|
23
|
+
ISummaryTree,
|
|
24
|
+
IVersion,
|
|
23
25
|
} from "@fluidframework/protocol-definitions";
|
|
24
|
-
import {
|
|
25
|
-
GitManager,
|
|
26
|
-
ISummaryUploadManager,
|
|
27
|
-
SummaryTreeUploadManager,
|
|
28
|
-
} from "@fluidframework/server-services-client";
|
|
29
|
-
import { PerformanceEvent } from "@fluidframework/telemetry-utils";
|
|
30
26
|
import { IRouterliciousDriverPolicies } from "./policies";
|
|
31
27
|
import { ICache, InMemoryCache } from "./cache";
|
|
32
28
|
import { RetriableGitManager } from "./retriableGitManager";
|
|
33
29
|
import { ISnapshotTreeVersion } from "./definitions";
|
|
30
|
+
import { GitManager } from "./gitManager";
|
|
31
|
+
import { ISummaryUploadManager } from "./storageContracts";
|
|
32
|
+
import { SummaryTreeUploadManager } from "./summaryTreeUploadManager";
|
|
34
33
|
|
|
35
34
|
const isNode = typeof window === "undefined";
|
|
36
35
|
|
|
@@ -40,180 +39,200 @@ const isNode = typeof window === "undefined";
|
|
|
40
39
|
* Downloads summaries piece-by-piece on-demand, or up-front when prefetch is enabled.
|
|
41
40
|
*/
|
|
42
41
|
export class ShreddedSummaryDocumentStorageService implements IDocumentStorageService {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
42
|
+
private readonly mc: MonitoringContext;
|
|
43
|
+
// The values of this cache is useless. We only need the keys. So we are always putting
|
|
44
|
+
// empty strings as values.
|
|
45
|
+
protected readonly blobsShaCache = new Map<string, string>();
|
|
46
|
+
private readonly blobCache: ICache<ArrayBufferLike> | undefined;
|
|
47
|
+
private readonly snapshotTreeCache: ICache<ISnapshotTreeVersion> | undefined;
|
|
48
|
+
|
|
49
|
+
public readonly repositoryUrl = "";
|
|
50
|
+
|
|
51
|
+
private async getSummaryUploadManager(): Promise<ISummaryUploadManager> {
|
|
52
|
+
const manager = await this.getStorageManager();
|
|
53
|
+
return new SummaryTreeUploadManager(
|
|
54
|
+
new RetriableGitManager(manager, this.logger),
|
|
55
|
+
this.blobsShaCache,
|
|
56
|
+
this.getPreviousFullSnapshot.bind(this),
|
|
57
|
+
);
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
constructor(
|
|
61
|
+
protected readonly id: string,
|
|
62
|
+
protected readonly manager: GitManager,
|
|
63
|
+
protected readonly logger: ITelemetryLoggerExt,
|
|
64
|
+
public readonly policies: IDocumentStorageServicePolicies,
|
|
65
|
+
driverPolicies?: IRouterliciousDriverPolicies,
|
|
66
|
+
blobCache?: ICache<ArrayBufferLike>,
|
|
67
|
+
snapshotTreeCache?: ICache<ISnapshotTreeVersion>,
|
|
68
|
+
private readonly getStorageManager: (
|
|
69
|
+
disableCache?: boolean,
|
|
70
|
+
) => Promise<GitManager> = async () => this.manager,
|
|
71
|
+
) {
|
|
72
|
+
if (driverPolicies?.enableRestLess === true || isNode) {
|
|
73
|
+
this.blobCache = blobCache ?? new InMemoryCache();
|
|
74
|
+
this.snapshotTreeCache = snapshotTreeCache ?? new InMemoryCache();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
this.mc = createChildMonitoringContext({
|
|
78
|
+
logger,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public async getVersions(versionId: string | null, count: number): Promise<IVersion[]> {
|
|
83
|
+
const id = versionId ? versionId : this.id;
|
|
84
|
+
const commits = await PerformanceEvent.timedExecAsync(
|
|
85
|
+
this.logger,
|
|
86
|
+
{
|
|
87
|
+
eventName: "getVersions",
|
|
88
|
+
versionId: id,
|
|
89
|
+
count,
|
|
90
|
+
},
|
|
91
|
+
async () => {
|
|
92
|
+
const manager = await this.getStorageManager();
|
|
93
|
+
return (await manager.getCommits(id, count)).content;
|
|
94
|
+
},
|
|
95
|
+
);
|
|
96
|
+
return commits.map((commit) => ({
|
|
97
|
+
date: commit.commit.author.date,
|
|
98
|
+
id: commit.sha,
|
|
99
|
+
treeId: commit.commit.tree.sha,
|
|
100
|
+
}));
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
public async getSnapshotTree(version?: IVersion): Promise<ISnapshotTreeEx | null> {
|
|
104
|
+
let requestVersion = version;
|
|
105
|
+
if (!requestVersion) {
|
|
106
|
+
const versions = await this.getVersions(this.id, 1);
|
|
107
|
+
if (versions.length === 0) {
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
requestVersion = versions[0];
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
const cachedSnapshotTree = await this.snapshotTreeCache?.get(
|
|
115
|
+
this.getCacheKey(requestVersion.treeId),
|
|
116
|
+
);
|
|
117
|
+
if (cachedSnapshotTree) {
|
|
118
|
+
return cachedSnapshotTree.snapshotTree as ISnapshotTreeEx;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
const rawTree = await PerformanceEvent.timedExecAsync(
|
|
122
|
+
this.logger,
|
|
123
|
+
{
|
|
124
|
+
eventName: "getSnapshotTree",
|
|
125
|
+
treeId: requestVersion.treeId,
|
|
126
|
+
},
|
|
127
|
+
async (event) => {
|
|
128
|
+
const manager = await this.getStorageManager();
|
|
129
|
+
const response = (await manager.getTree(requestVersion!.treeId)).content;
|
|
130
|
+
event.end({
|
|
131
|
+
size: response.tree.length,
|
|
132
|
+
});
|
|
133
|
+
return response;
|
|
134
|
+
},
|
|
135
|
+
);
|
|
136
|
+
const tree = buildGitTreeHierarchy(rawTree, this.blobsShaCache, true);
|
|
137
|
+
await this.snapshotTreeCache?.put(this.getCacheKey(tree.id), {
|
|
138
|
+
id: requestVersion.id,
|
|
139
|
+
snapshotTree: tree,
|
|
140
|
+
});
|
|
141
|
+
return tree;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
public async readBlob(blobId: string): Promise<ArrayBufferLike> {
|
|
145
|
+
const cachedBlob = await this.blobCache?.get(this.getCacheKey(blobId));
|
|
146
|
+
if (cachedBlob) {
|
|
147
|
+
return cachedBlob;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
const value = await PerformanceEvent.timedExecAsync(
|
|
151
|
+
this.logger,
|
|
152
|
+
{
|
|
153
|
+
eventName: "readBlob",
|
|
154
|
+
blobId,
|
|
155
|
+
},
|
|
156
|
+
async (event) => {
|
|
157
|
+
const manager = await this.getStorageManager();
|
|
158
|
+
const response = (await manager.getBlob(blobId)).content;
|
|
159
|
+
event.end({
|
|
160
|
+
size: response.size,
|
|
161
|
+
});
|
|
162
|
+
return response;
|
|
163
|
+
},
|
|
164
|
+
undefined, // workers
|
|
165
|
+
undefined, // recordHeapSize
|
|
166
|
+
this.mc.config.getNumber("Fluid.Driver.ReadBlobTelemetrySampling"),
|
|
167
|
+
);
|
|
168
|
+
this.blobsShaCache.set(value.sha, "");
|
|
169
|
+
const bufferContent = stringToBuffer(value.content, value.encoding);
|
|
170
|
+
await this.blobCache?.put(this.getCacheKey(value.sha), bufferContent);
|
|
171
|
+
return bufferContent;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
public async uploadSummaryWithContext(
|
|
175
|
+
summary: ISummaryTree,
|
|
176
|
+
context: ISummaryContext,
|
|
177
|
+
): Promise<string> {
|
|
178
|
+
const summaryHandle = await PerformanceEvent.timedExecAsync(
|
|
179
|
+
this.logger,
|
|
180
|
+
{
|
|
181
|
+
eventName: "uploadSummaryWithContext",
|
|
182
|
+
proposalHandle: context.proposalHandle,
|
|
183
|
+
ackHandle: context.ackHandle,
|
|
184
|
+
referenceSequenceNumber: context.referenceSequenceNumber,
|
|
185
|
+
},
|
|
186
|
+
async () => {
|
|
187
|
+
const summaryUploadManager = await this.getSummaryUploadManager();
|
|
188
|
+
return summaryUploadManager.writeSummaryTree(
|
|
189
|
+
summary,
|
|
190
|
+
context.ackHandle ?? "",
|
|
191
|
+
"channel",
|
|
192
|
+
);
|
|
193
|
+
},
|
|
194
|
+
);
|
|
195
|
+
return summaryHandle;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
public async downloadSummary(handle: ISummaryHandle): Promise<ISummaryTree> {
|
|
199
|
+
throw new Error("NOT IMPLEMENTED!");
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
public async createBlob(file: ArrayBufferLike): Promise<ICreateBlobResponse> {
|
|
203
|
+
const uint8ArrayFile = new Uint8Array(file);
|
|
204
|
+
return PerformanceEvent.timedExecAsync(
|
|
205
|
+
this.logger,
|
|
206
|
+
{
|
|
207
|
+
eventName: "createBlob",
|
|
208
|
+
size: uint8ArrayFile.length,
|
|
209
|
+
},
|
|
210
|
+
async (event) => {
|
|
211
|
+
const manager = await this.getStorageManager();
|
|
212
|
+
const response = await manager
|
|
213
|
+
.createBlob(Uint8ArrayToString(uint8ArrayFile, "base64"), "base64")
|
|
214
|
+
.then((r) => ({ id: r.content.sha, url: r.content.url }));
|
|
215
|
+
event.end({
|
|
216
|
+
blobId: response.id,
|
|
217
|
+
});
|
|
218
|
+
return response;
|
|
219
|
+
},
|
|
220
|
+
);
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
private async getPreviousFullSnapshot(
|
|
224
|
+
parentHandle: string,
|
|
225
|
+
): Promise<ISnapshotTreeEx | null | undefined> {
|
|
226
|
+
return parentHandle
|
|
227
|
+
? this.getVersions(parentHandle, 1).then(async (versions) => {
|
|
228
|
+
// Clear the cache as the getSnapshotTree call will fill the cache.
|
|
229
|
+
this.blobsShaCache.clear();
|
|
230
|
+
return this.getSnapshotTree(versions[0]);
|
|
231
|
+
})
|
|
232
|
+
: undefined;
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
private getCacheKey(blobId: string): string {
|
|
236
|
+
return `${this.id}:${blobId}`;
|
|
237
|
+
}
|
|
219
238
|
}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import * as git from "@fluidframework/gitresources";
|
|
7
|
+
import * as api from "@fluidframework/protocol-definitions";
|
|
8
|
+
import {
|
|
9
|
+
IWholeSummaryPayload,
|
|
10
|
+
IWholeSummaryPayloadType,
|
|
11
|
+
IWriteSummaryResponse,
|
|
12
|
+
} from "@fluidframework/server-services-client";
|
|
13
|
+
import { IR11sResponse } from "./restWrapper";
|
|
14
|
+
import { IWholeFlatSnapshot } from "./contracts";
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Interface to a generic Git provider
|
|
18
|
+
*/
|
|
19
|
+
export interface IHistorian {
|
|
20
|
+
getBlob(sha: string): Promise<IR11sResponse<git.IBlob>>;
|
|
21
|
+
createBlob(blob: git.ICreateBlobParams): Promise<IR11sResponse<git.ICreateBlobResponse>>;
|
|
22
|
+
getCommits(sha: string, count: number): Promise<IR11sResponse<git.ICommitDetails[]>>;
|
|
23
|
+
createTree(tree: git.ICreateTreeParams): Promise<IR11sResponse<git.ITree>>;
|
|
24
|
+
getTree(sha: string, recursive: boolean): Promise<IR11sResponse<git.ITree>>;
|
|
25
|
+
createSummary(
|
|
26
|
+
summary: IWholeSummaryPayload,
|
|
27
|
+
initial?: boolean,
|
|
28
|
+
): Promise<IR11sResponse<IWriteSummaryResponse>>;
|
|
29
|
+
getSnapshot(sha: string): Promise<IR11sResponse<IWholeFlatSnapshot>>;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
export interface IGitManager {
|
|
33
|
+
getCommits(sha: string, count: number): Promise<IR11sResponse<git.ICommitDetails[]>>;
|
|
34
|
+
getTree(root: string, recursive: boolean): Promise<IR11sResponse<git.ITree>>;
|
|
35
|
+
getBlob(sha: string): Promise<IR11sResponse<git.IBlob>>;
|
|
36
|
+
createBlob(content: string, encoding: string): Promise<IR11sResponse<git.ICreateBlobResponse>>;
|
|
37
|
+
createGitTree(params: git.ICreateTreeParams): Promise<IR11sResponse<git.ITree>>;
|
|
38
|
+
createSummary(
|
|
39
|
+
summary: IWholeSummaryPayload,
|
|
40
|
+
initial?: boolean,
|
|
41
|
+
): Promise<IR11sResponse<IWriteSummaryResponse>>;
|
|
42
|
+
getSnapshot(sha: string): Promise<IR11sResponse<IWholeFlatSnapshot>>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
/**
|
|
46
|
+
* Uploads a summary to storage.
|
|
47
|
+
*/
|
|
48
|
+
export interface ISummaryUploadManager {
|
|
49
|
+
/**
|
|
50
|
+
* Writes summary tree to storage.
|
|
51
|
+
* @param summaryTree - Summary tree to write to storage
|
|
52
|
+
* @param parentHandle - Parent summary acked handle (if available from summary ack)
|
|
53
|
+
* @param summaryType - type of summary being uploaded
|
|
54
|
+
* @param sequenceNumber - optional reference sequence number of the summary
|
|
55
|
+
* @returns Id of created tree as a string.
|
|
56
|
+
*/
|
|
57
|
+
writeSummaryTree(
|
|
58
|
+
summaryTree: api.ISummaryTree,
|
|
59
|
+
parentHandle: string,
|
|
60
|
+
summaryType: IWholeSummaryPayloadType,
|
|
61
|
+
sequenceNumber?: number,
|
|
62
|
+
): Promise<string>;
|
|
63
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
+
* Licensed under the MIT License.
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { gitHashFile, IsoBuffer, Uint8ArrayToString } from "@fluid-internal/client-utils";
|
|
7
|
+
import { assert, unreachableCase } from "@fluidframework/core-utils";
|
|
8
|
+
import { ICreateTreeEntry } from "@fluidframework/gitresources";
|
|
9
|
+
import { getGitMode, getGitType } from "@fluidframework/protocol-base";
|
|
10
|
+
import {
|
|
11
|
+
ISnapshotTreeEx,
|
|
12
|
+
ISummaryTree,
|
|
13
|
+
SummaryObject,
|
|
14
|
+
SummaryType,
|
|
15
|
+
} from "@fluidframework/protocol-definitions";
|
|
16
|
+
import { IWholeSummaryPayloadType } from "@fluidframework/server-services-client";
|
|
17
|
+
import { IGitManager, ISummaryUploadManager } from "./storageContracts";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Recursively writes summary tree as individual summary blobs.
|
|
21
|
+
*/
|
|
22
|
+
export class SummaryTreeUploadManager implements ISummaryUploadManager {
|
|
23
|
+
constructor(
|
|
24
|
+
private readonly manager: IGitManager,
|
|
25
|
+
private readonly blobsShaCache: Map<string, string>,
|
|
26
|
+
private readonly getPreviousFullSnapshot: (
|
|
27
|
+
parentHandle: string,
|
|
28
|
+
) => Promise<ISnapshotTreeEx | null | undefined>,
|
|
29
|
+
) {}
|
|
30
|
+
|
|
31
|
+
public async writeSummaryTree(
|
|
32
|
+
summaryTree: ISummaryTree,
|
|
33
|
+
parentHandle: string,
|
|
34
|
+
summaryType: IWholeSummaryPayloadType,
|
|
35
|
+
sequenceNumber?: number,
|
|
36
|
+
initial?: boolean,
|
|
37
|
+
): Promise<string> {
|
|
38
|
+
const previousFullSnapshot = await this.getPreviousFullSnapshot(parentHandle);
|
|
39
|
+
return this.writeSummaryTreeCore(summaryTree, previousFullSnapshot ?? undefined);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
private async writeSummaryTreeCore(
|
|
43
|
+
summaryTree: ISummaryTree,
|
|
44
|
+
previousFullSnapshot: ISnapshotTreeEx | undefined,
|
|
45
|
+
): Promise<string> {
|
|
46
|
+
const entries = await Promise.all(
|
|
47
|
+
Object.keys(summaryTree.tree).map(async (key) => {
|
|
48
|
+
const entry = summaryTree.tree[key];
|
|
49
|
+
const pathHandle = await this.writeSummaryTreeObject(entry, previousFullSnapshot);
|
|
50
|
+
const treeEntry: ICreateTreeEntry = {
|
|
51
|
+
mode: getGitMode(entry),
|
|
52
|
+
path: encodeURIComponent(key),
|
|
53
|
+
sha: pathHandle,
|
|
54
|
+
type: getGitType(entry),
|
|
55
|
+
};
|
|
56
|
+
return treeEntry;
|
|
57
|
+
}),
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
const treeHandle = (await this.manager.createGitTree({ tree: entries })).content;
|
|
61
|
+
return treeHandle.sha;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
private async writeSummaryTreeObject(
|
|
65
|
+
object: SummaryObject,
|
|
66
|
+
previousFullSnapshot: ISnapshotTreeEx | undefined,
|
|
67
|
+
): Promise<string> {
|
|
68
|
+
switch (object.type) {
|
|
69
|
+
case SummaryType.Blob: {
|
|
70
|
+
return this.writeSummaryBlob(object.content);
|
|
71
|
+
}
|
|
72
|
+
case SummaryType.Handle: {
|
|
73
|
+
if (previousFullSnapshot === undefined) {
|
|
74
|
+
throw Error("Parent summary does not exist to reference by handle.");
|
|
75
|
+
}
|
|
76
|
+
return this.getIdFromPath(object.handleType, object.handle, previousFullSnapshot);
|
|
77
|
+
}
|
|
78
|
+
case SummaryType.Tree: {
|
|
79
|
+
return this.writeSummaryTreeCore(object, previousFullSnapshot);
|
|
80
|
+
}
|
|
81
|
+
case SummaryType.Attachment: {
|
|
82
|
+
return object.id;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
default:
|
|
86
|
+
unreachableCase(object, `Unknown type: ${(object as any).type}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
private async writeSummaryBlob(content: string | Uint8Array): Promise<string> {
|
|
91
|
+
const { parsedContent, encoding } =
|
|
92
|
+
typeof content === "string"
|
|
93
|
+
? { parsedContent: content, encoding: "utf-8" }
|
|
94
|
+
: { parsedContent: Uint8ArrayToString(content, "base64"), encoding: "base64" };
|
|
95
|
+
|
|
96
|
+
// The gitHashFile would return the same hash as returned by the server as blob.sha
|
|
97
|
+
const hash = await gitHashFile(IsoBuffer.from(parsedContent, encoding));
|
|
98
|
+
if (!this.blobsShaCache.has(hash)) {
|
|
99
|
+
this.blobsShaCache.set(hash, "");
|
|
100
|
+
const blob = (await this.manager.createBlob(parsedContent, encoding)).content;
|
|
101
|
+
assert(hash === blob.sha, 0x0b6 /* "Blob.sha and hash do not match!!" */);
|
|
102
|
+
}
|
|
103
|
+
return hash;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
private getIdFromPath(
|
|
107
|
+
handleType: SummaryType,
|
|
108
|
+
handlePath: string,
|
|
109
|
+
previousFullSnapshot: ISnapshotTreeEx,
|
|
110
|
+
): string {
|
|
111
|
+
const path = handlePath.split("/").map((part) => decodeURIComponent(part));
|
|
112
|
+
if (path[0] === "") {
|
|
113
|
+
// root of tree should be unnamed
|
|
114
|
+
path.shift();
|
|
115
|
+
}
|
|
116
|
+
if (path.length === 0) {
|
|
117
|
+
return previousFullSnapshot.id;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return this.getIdFromPathCore(handleType, path, previousFullSnapshot);
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
private getIdFromPathCore(
|
|
124
|
+
handleType: SummaryType,
|
|
125
|
+
path: string[],
|
|
126
|
+
/** Previous snapshot, subtree relative to this path part */
|
|
127
|
+
previousSnapshot: ISnapshotTreeEx,
|
|
128
|
+
): string {
|
|
129
|
+
assert(path.length > 0, 0x0b3 /* "Expected at least 1 path part" */);
|
|
130
|
+
const key = path[0];
|
|
131
|
+
if (path.length === 1) {
|
|
132
|
+
switch (handleType) {
|
|
133
|
+
case SummaryType.Blob: {
|
|
134
|
+
const tryId = previousSnapshot.blobs[key];
|
|
135
|
+
assert(
|
|
136
|
+
!!tryId,
|
|
137
|
+
0x0b4 /* "Parent summary does not have blob handle for specified path." */,
|
|
138
|
+
);
|
|
139
|
+
return tryId;
|
|
140
|
+
}
|
|
141
|
+
case SummaryType.Tree: {
|
|
142
|
+
const tryId = previousSnapshot.trees[key]?.id;
|
|
143
|
+
assert(
|
|
144
|
+
!!tryId,
|
|
145
|
+
0x0b5 /* "Parent summary does not have tree handle for specified path." */,
|
|
146
|
+
);
|
|
147
|
+
return tryId;
|
|
148
|
+
}
|
|
149
|
+
default:
|
|
150
|
+
throw Error(`Unexpected handle summary object type: "${handleType}".`);
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return this.getIdFromPathCore(handleType, path.slice(1), previousSnapshot.trees[key]);
|
|
154
|
+
}
|
|
155
|
+
}
|