@fluidframework/file-driver 0.54.2 → 0.56.0-49831

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 CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  module.exports = {
7
7
  "extends": [
8
- "@fluidframework/eslint-config-fluid/eslint7"
8
+ "@fluidframework/eslint-config-fluid"
9
9
  ],
10
10
  "rules": {
11
11
  "@typescript-eslint/strict-boolean-expressions": "off",
@@ -25,7 +25,7 @@ export declare class FluidFetchReader extends ReadDocumentStorageServiceBase imp
25
25
  * @param versionId - version ID.
26
26
  * @param count - Number of versions to be returned.
27
27
  */
28
- getVersions(versionId: string, count: number): Promise<api.IVersion[]>;
28
+ getVersions(versionId: string | null, count: number): Promise<api.IVersion[]>;
29
29
  readBlob(sha: string): Promise<ArrayBufferLike>;
30
30
  }
31
31
  export interface ISnapshotWriterStorage extends IDocumentStorageService {
@@ -46,7 +46,7 @@ export declare const FileSnapshotWriterClassFactory: <TBase extends ReaderConstr
46
46
  onCommitHandler(dataStoreName: string, tree: api.ITree): void;
47
47
  onSnapshotHandler(snapshot: IFileSnapshot): void;
48
48
  readBlob(sha: string): Promise<ArrayBufferLike>;
49
- getVersions(versionId: string, count: number): Promise<api.IVersion[]>;
49
+ getVersions(versionId: string | null, count: number): Promise<api.IVersion[]>;
50
50
  getSnapshotTree(version?: api.IVersion | undefined): Promise<api.ISnapshotTree | null>;
51
51
  write(tree: api.ITree, parents: string[], message: string, ref: string): Promise<api.IVersion>;
52
52
  writeOutFullSnapshot(tree: api.ITree): Promise<void>;
@@ -73,7 +73,7 @@ export declare const FluidFetchReaderFileSnapshotWriter: {
73
73
  onCommitHandler(dataStoreName: string, tree: api.ITree): void;
74
74
  onSnapshotHandler(snapshot: IFileSnapshot): void;
75
75
  readBlob(sha: string): Promise<ArrayBufferLike>;
76
- getVersions(versionId: string, count: number): Promise<api.IVersion[]>;
76
+ getVersions(versionId: string | null, count: number): Promise<api.IVersion[]>;
77
77
  getSnapshotTree(version?: api.IVersion | undefined): Promise<api.ISnapshotTree | null>;
78
78
  write(tree: api.ITree, parents: string[], message: string, ref: string): Promise<api.IVersion>;
79
79
  writeOutFullSnapshot(tree: api.ITree): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"fileDocumentStorageService.d.ts","sourceRoot":"","sources":["../src/fileDocumentStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACH,uBAAuB,EACvB,+BAA+B,EAAK,qCAAqC;AACzE,eAAe,EAClB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,GAAG,MAAM,sCAAsC,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAI9F,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAQ1D;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,8BAA+B,YAAW,uBAAuB;IAGvF,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAU,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAFxE,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,aAAa,GAAG,IAAI,CAAQ;gBAEtB,IAAI,EAAE,MAAM,EAAmB,WAAW,CAAC,oBAAQ;IAIhF;;;OAGG;IACU,eAAe,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;IAiCvF;;;;OAIG;IACU,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAkBtE,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;CAU/D;AAED,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACnE,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;IAC9D,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IACjD,KAAK,IAAI,IAAI,CAAC;CACjB;AAED,oBAAY,iBAAiB,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,uBAAuB,CAAC;AAChF,eAAO,MAAM,8BAA8B;kBADG,GAAG,EAAE;;;;;;;;uCAgBL,MAAM,QAAQ,IAAI,KAAK,GAAG,IAAI;oCAGjC,aAAa,GAAG,IAAI;sBAI5B,MAAM,GAAG,QAAQ,eAAe,CAAC;+BAQxB,MAAM,SAAS,MAAM,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;6DAsB7B,QAAQ,IAAI,aAAa,GAAG,IAAI,CAAC;oBAW7E,IAAI,KAAK,WACN,MAAM,EAAE,WACR,MAAM,OACV,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAAC;mCA+CC,IAAI,KAAK;uBAc3B,IAAI,KAAK;gCASM,IAAI,aAAa,GAAG,QAAQ,IAAI,KAAK,CAAC;;;;;;;;;SAgC9E,CAAC;AAaN,eAAO,MAAM,kCAAkC;kBAtLD,GAAG,EAAE;;;;;;;;uCAgBL,MAAM,QAAQ,IAAI,KAAK,GAAG,IAAI;oCAGjC,aAAa,GAAG,IAAI;sBAI5B,MAAM,GAAG,QAAQ,eAAe,CAAC;+BAQxB,MAAM,SAAS,MAAM,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;6DAsB7B,QAAQ,IAAI,aAAa,GAAG,IAAI,CAAC;oBAW7E,IAAI,KAAK,WACN,MAAM,EAAE,WACR,MAAM,OACV,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAAC;mCA+CC,IAAI,KAAK;uBAc3B,IAAI,KAAK;gCASM,IAAI,aAAa,GAAG,QAAQ,IAAI,KAAK,CAAC;;;;;;;;;2BA6Ce,CAAC"}
1
+ {"version":3,"file":"fileDocumentStorageService.d.ts","sourceRoot":"","sources":["../src/fileDocumentStorageService.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EACH,uBAAuB,EACvB,+BAA+B,EAAK,qCAAqC;AACzE,eAAe,EAClB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,KAAK,GAAG,MAAM,sCAAsC,CAAC;AAC5D,OAAO,EAAE,aAAa,EAAE,8BAA8B,EAAE,MAAM,+BAA+B,CAAC;AAI9F,eAAO,MAAM,uBAAuB,qBAAqB,CAAC;AAQ1D;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,8BAA+B,YAAW,uBAAuB;IAGvF,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAU,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAC;IAFxE,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,aAAa,GAAG,IAAI,CAAQ;gBAEtB,IAAI,EAAE,MAAM,EAAmB,WAAW,CAAC,oBAAQ;IAIhF;;;OAGG;IACU,eAAe,CAAC,OAAO,CAAC,EAAE,GAAG,CAAC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,IAAI,CAAC;IAiCvF;;;;OAIG;IACU,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;IAkB7E,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;CAU/D;AAED,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACnE,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC;IAC9D,iBAAiB,CAAC,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IACjD,KAAK,IAAI,IAAI,CAAC;CACjB;AAED,oBAAY,iBAAiB,GAAG,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,uBAAuB,CAAC;AAChF,eAAO,MAAM,8BAA8B;kBADG,GAAG,EAAE;;;;;;;;uCAgBL,MAAM,QAAQ,IAAI,KAAK,GAAG,IAAI;oCAGjC,aAAa,GAAG,IAAI;sBAI5B,MAAM,GAAG,QAAQ,eAAe,CAAC;+BAQxB,MAAM,GAAG,IAAI,SAAS,MAAM,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;6DAuBpC,QAAQ,IAAI,aAAa,GAAG,IAAI,CAAC;oBAW7E,IAAI,KAAK,WACN,MAAM,EAAE,WACR,MAAM,OACV,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAAC;mCA+CC,IAAI,KAAK;uBAc3B,IAAI,KAAK;gCASM,IAAI,aAAa,GAAG,QAAQ,IAAI,KAAK,CAAC;;;;;;;;;SAgC9E,CAAC;AAaN,eAAO,MAAM,kCAAkC;kBAvLD,GAAG,EAAE;;;;;;;;uCAgBL,MAAM,QAAQ,IAAI,KAAK,GAAG,IAAI;oCAGjC,aAAa,GAAG,IAAI;sBAI5B,MAAM,GAAG,QAAQ,eAAe,CAAC;+BAQxB,MAAM,GAAG,IAAI,SAAS,MAAM,GAAG,QAAQ,IAAI,QAAQ,EAAE,CAAC;6DAuBpC,QAAQ,IAAI,aAAa,GAAG,IAAI,CAAC;oBAW7E,IAAI,KAAK,WACN,MAAM,EAAE,WACR,MAAM,OACV,MAAM,GAAG,QAAQ,IAAI,QAAQ,CAAC;mCA+CC,IAAI,KAAK;uBAc3B,IAAI,KAAK;gCASM,IAAI,aAAa,GAAG,QAAQ,IAAI,KAAK,CAAC;;;;;;;;;2BA6Ce,CAAC"}
@@ -89,7 +89,7 @@ class FluidFetchReader extends replay_driver_1.ReadDocumentStorageServiceBase {
89
89
  * @param count - Number of versions to be returned.
90
90
  */
91
91
  async getVersions(versionId, count) {
92
- if (versionId === exports.FileStorageDocumentName) {
92
+ if (versionId === exports.FileStorageDocumentName || versionId === null) {
93
93
  if (this.docTree || this.versionName !== undefined) {
94
94
  return [{ id: "latest", treeId: FileStorageVersionTreeId }];
95
95
  }
@@ -149,13 +149,13 @@ const FileSnapshotWriterClassFactory = (Base) => class extends Base {
149
149
  // each unchanged data store.
150
150
  // If we want to change that, we would need to capture docId on first call and return this.latestWriterTree
151
151
  // when latest is requested.
152
- if (this.docId === undefined && versionId !== undefined) {
153
- this.docId = versionId;
154
- }
155
- if (this.latestWriterTree && (this.docId === versionId || versionId === undefined)) {
152
+ if (this.latestWriterTree && (this.docId === versionId || versionId === null)) {
156
153
  return [{ id: "latest", treeId: FileStorageVersionTreeId }];
157
154
  }
158
- if (this.commitsWriter[versionId] !== undefined) {
155
+ if (this.docId === undefined && versionId !== null) {
156
+ this.docId = versionId;
157
+ }
158
+ if (versionId !== null && this.commitsWriter[versionId] !== undefined) {
159
159
  // PrefetchDocumentStorageService likes to prefetch everything!
160
160
  // Skip, as Container does not really need it.
161
161
  throw new Error("Not supporting commit loading");
@@ -1 +1 @@
1
- {"version":3,"file":"fileDocumentStorageService.js","sourceRoot":"","sources":["../src/fileDocumentStorageService.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport fs from \"fs\";\nimport { assert, bufferToString } from \"@fluidframework/common-utils\";\nimport {\n IDocumentStorageService,\n IDocumentStorageServicePolicies, // these are needed for api-extractor\n ISummaryContext, // these are needed for api-extractor\n} from \"@fluidframework/driver-definitions\";\nimport { buildSnapshotTree } from \"@fluidframework/driver-utils\";\nimport * as api from \"@fluidframework/protocol-definitions\";\nimport { IFileSnapshot, ReadDocumentStorageServiceBase } from \"@fluidframework/replay-driver\";\n\n// This ID is used by replay tool as Document Id.\n// We leverage it to figure out when container is asking for root document tree.\nexport const FileStorageDocumentName = \"FileStorageDocId\"; // Some unique document name\n\n// Tree ID use to communicate between getVersions() & getSnapshotTree() that IVersion is ours.\nconst FileStorageVersionTreeId = \"FileStorageTreeId\";\n\n// This ID should not show up anywhere, as it's internal only ID that no public API should accept.\nconst FileStorageVersionTreeIdUnused = \"baad\";\n\n/**\n * Document storage service for the file driver.\n */\nexport class FluidFetchReader extends ReadDocumentStorageServiceBase implements IDocumentStorageService {\n protected docTree: api.ISnapshotTree | null = null;\n\n constructor(private readonly path: string, private readonly versionName?: string) {\n super();\n }\n\n /**\n * Read the file and returns the snapshot tree.\n * @param version - The version contains the path of the file which contains the snapshot tree.\n */\n public async getSnapshotTree(version?: api.IVersion): Promise<api.ISnapshotTree | null> {\n assert(version !== null, 0x092 /* \"version input for reading snapshot tree is null!\" */);\n assert(!version || version.treeId === FileStorageVersionTreeId,\n 0x093 /* \"invalid version input for reading snapshot tree!\" */);\n\n let filename: string;\n let rootTree = false;\n if (!version || version.id === \"latest\") {\n if (this.docTree) {\n return this.docTree;\n }\n if (this.versionName === undefined) {\n return null;\n }\n rootTree = true;\n filename = `${this.path}/${this.versionName}/tree.json`;\n } else {\n filename = `${this.path}/${this.versionName}/${version.id}.json`;\n }\n\n if (!fs.existsSync(filename)) {\n throw new Error(`Can't find file ${filename}`);\n }\n const data = fs.readFileSync(filename);\n const tree = JSON.parse(data.toString(\"utf-8\"));\n if (rootTree) {\n this.docTree = tree;\n }\n // Fill in this.commit right here?\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return tree;\n }\n\n /**\n * Gets the path of the snapshot tree to be read.\n * @param versionId - version ID.\n * @param count - Number of versions to be returned.\n */\n public async getVersions(versionId: string, count: number): Promise<api.IVersion[]> {\n if (versionId === FileStorageDocumentName) {\n if (this.docTree || this.versionName !== undefined) {\n return [{ id: \"latest\", treeId: FileStorageVersionTreeId }];\n }\n // Started with ops - return empty set.\n return [];\n } else if (this.versionName !== undefined) {\n // We loaded from snapshot - search for commit there.\n assert(!!this.docTree, 0x094 /* \"Missing snapshot tree!\" */);\n return [{\n id: versionId,\n treeId: FileStorageVersionTreeId,\n }];\n }\n throw new Error(`Unknown version: ${versionId}`);\n }\n\n public async readBlob(sha: string): Promise<ArrayBufferLike> {\n if (this.versionName !== undefined) {\n const fileName = `${this.path}/${this.versionName}/${sha}`;\n if (fs.existsSync(fileName)) {\n const data = fs.readFileSync(fileName);\n return data;\n }\n }\n throw new Error(`Can't find blob ${sha}`);\n }\n}\n\nexport interface ISnapshotWriterStorage extends IDocumentStorageService {\n onCommitHandler(dataStoreName: string, tree: api.ITree): void;\n onSnapshotHandler(snapshot: IFileSnapshot): void;\n reset(): void;\n}\n\nexport type ReaderConstructor = new (...args: any[]) => IDocumentStorageService;\nexport const FileSnapshotWriterClassFactory = <TBase extends ReaderConstructor>(Base: TBase) =>\n class extends Base implements ISnapshotWriterStorage {\n // Note: if variable name has same name as in base class, it overrides it!\n public blobsWriter = new Map<string, ArrayBufferLike>();\n public commitsWriter: { [key: string]: api.ITree } = {};\n public latestWriterTree?: api.ISnapshotTree;\n public docId?: string;\n\n public reset() {\n this.blobsWriter = new Map<string, ArrayBufferLike>();\n this.commitsWriter = {};\n this.latestWriterTree = undefined;\n this.docId = undefined;\n }\n\n public onCommitHandler(dataStoreName: string, tree: api.ITree): void {\n }\n\n public onSnapshotHandler(snapshot: IFileSnapshot): void {\n throw new Error(\"onSnapshotHandler is not setup! Please provide your handler!\");\n }\n\n public async readBlob(sha: string): Promise<ArrayBufferLike> {\n const blob = this.blobsWriter.get(sha);\n if (blob !== undefined) {\n return blob;\n }\n return super.readBlob(sha);\n }\n\n public async getVersions(versionId: string, count: number): Promise<api.IVersion[]> {\n // If we already saved document, that means we are getting here because of snapshot generation.\n // Not returning tree ensures that ContainerRuntime.snapshot() would regenerate subtrees for\n // each unchanged data store.\n // If we want to change that, we would need to capture docId on first call and return this.latestWriterTree\n // when latest is requested.\n if (this.docId === undefined && versionId !== undefined) {\n this.docId = versionId;\n }\n if (this.latestWriterTree && (this.docId === versionId || versionId === undefined)) {\n return [{ id: \"latest\", treeId: FileStorageVersionTreeId }];\n }\n\n if (this.commitsWriter[versionId] !== undefined) {\n // PrefetchDocumentStorageService likes to prefetch everything!\n // Skip, as Container does not really need it.\n throw new Error(\"Not supporting commit loading\");\n // Return [{id: versionId, treeId: FileStorageVersionTreeId}];\n }\n return super.getVersions(versionId, count);\n }\n\n public async getSnapshotTree(version?: api.IVersion): Promise<api.ISnapshotTree | null> {\n if (this.latestWriterTree && (!version || version.id === \"latest\")) {\n return this.latestWriterTree;\n }\n if (version && this.commitsWriter[version.id] !== undefined) {\n return buildSnapshotTree(this.commitsWriter[version.id].entries, this.blobsWriter);\n }\n return super.getSnapshotTree(version);\n }\n\n public async write(\n tree: api.ITree,\n parents: string[],\n message: string,\n ref: string): Promise<api.IVersion> {\n let dataStoreName = ref ? ref : \"container\";\n if (tree && tree.entries) {\n tree.entries.forEach((entry) => {\n if (entry.path === \".component\" && entry.type === api.TreeEntry.Blob) {\n const blob: api.IBlob = entry.value;\n const content = blob.contents.split(\":\");\n if (content[0] === `{\"pkg\"`) {\n dataStoreName = content[1].substring(1, content[1].lastIndexOf(`\"`));\n }\n }\n });\n }\n\n const commitName = `commit_${dataStoreName}`;\n\n // Sort entries for easier diffing\n this.sortTree(tree);\n\n // Remove tree IDs for easier comparison of snapshots\n delete tree.id;\n removeNullTreeIds(tree);\n\n if (ref) {\n this.commitsWriter[commitName] = tree;\n } else {\n // Rebuild latest tree - runtime will ask for it when generating next snapshot to write out\n // non-changed commits for data stores\n await this.writeOutFullSnapshot(tree);\n\n // Prep for the future - refresh latest tree, as it's requests on next snapshot generation.\n // Do not care about blobs (at least for now), as blobs are not written out (need follow up)\n this.latestWriterTree = buildSnapshotTree(tree.entries, this.blobsWriter);\n\n // Do not reset this.commitsWriter - runtime will reference same commits in future snapshots\n // if data store did not change in between two snapshots.\n // We can optimize here by filtering commits based on contents of this.docTree.commits\n }\n\n this.onCommitHandler(dataStoreName, tree);\n return {\n id: commitName,\n date: new Date().toUTCString(),\n treeId: FileStorageVersionTreeIdUnused,\n };\n }\n\n public async writeOutFullSnapshot(tree: api.ITree) {\n const commits: { [key: string]: api.ITree } = {};\n\n // Sort keys. This does not guarantees that JSON.stringify() would produce sorted result,\n // but in practice it does.\n const commitsSorted: { [key: string]: api.ITree } = {};\n for (const key of Object.keys(commits).sort()) {\n commitsSorted[key] = commits[key];\n }\n\n const fileSnapshot: IFileSnapshot = { tree, commits: commitsSorted };\n this.onSnapshotHandler(fileSnapshot);\n }\n\n public sortTree(tree: api.ITree) {\n tree.entries.sort((a, b) => a.path.localeCompare(b.path));\n tree.entries.map((entry) => {\n if (entry.type === api.TreeEntry.Tree) {\n this.sortTree(entry.value);\n }\n });\n }\n\n public async buildTree(snapshotTree: api.ISnapshotTree): Promise<api.ITree> {\n const tree: api.ITree = { entries: [] };\n\n for (const subTreeId of Object.keys(snapshotTree.trees)) {\n const subTree = await this.buildTree(snapshotTree.trees[subTreeId]);\n tree.entries.push({\n mode: api.FileMode.Directory,\n path: subTreeId,\n type: api.TreeEntry.Tree,\n value: subTree,\n });\n }\n\n for (const blobName of Object.keys(snapshotTree.blobs)) {\n const buffer = await this.readBlob(snapshotTree.blobs[blobName]);\n const contents = bufferToString(buffer, \"utf8\");\n const blob: api.IBlob = {\n contents,\n encoding: \"utf-8\",\n };\n tree.entries.push({\n mode: api.FileMode.File,\n path: blobName,\n type: api.TreeEntry.Blob,\n value: blob,\n });\n }\n\n assert(Object.keys(snapshotTree.commits).length === 0,\n 0x095 /* \"Leftover distinct commits after building tree!\" */);\n return tree;\n }\n };\n\nfunction removeNullTreeIds(tree: api.ITree) {\n for (const node of tree.entries) {\n if (node.type === api.TreeEntry.Tree) {\n removeNullTreeIds(node.value);\n }\n }\n assert(tree.id === undefined || tree.id === null,\n 0x096 /* \"Trying to remove valid tree IDs in removeNullTreeIds()!\" */);\n delete tree.id;\n}\n\nexport const FluidFetchReaderFileSnapshotWriter = FileSnapshotWriterClassFactory(FluidFetchReader);\n"]}
1
+ {"version":3,"file":"fileDocumentStorageService.js","sourceRoot":"","sources":["../src/fileDocumentStorageService.ts"],"names":[],"mappings":"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","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport fs from \"fs\";\nimport { assert, bufferToString } from \"@fluidframework/common-utils\";\nimport {\n IDocumentStorageService,\n IDocumentStorageServicePolicies, // these are needed for api-extractor\n ISummaryContext, // these are needed for api-extractor\n} from \"@fluidframework/driver-definitions\";\nimport { buildSnapshotTree } from \"@fluidframework/driver-utils\";\nimport * as api from \"@fluidframework/protocol-definitions\";\nimport { IFileSnapshot, ReadDocumentStorageServiceBase } from \"@fluidframework/replay-driver\";\n\n// This ID is used by replay tool as Document Id.\n// We leverage it to figure out when container is asking for root document tree.\nexport const FileStorageDocumentName = \"FileStorageDocId\"; // Some unique document name\n\n// Tree ID use to communicate between getVersions() & getSnapshotTree() that IVersion is ours.\nconst FileStorageVersionTreeId = \"FileStorageTreeId\";\n\n// This ID should not show up anywhere, as it's internal only ID that no public API should accept.\nconst FileStorageVersionTreeIdUnused = \"baad\";\n\n/**\n * Document storage service for the file driver.\n */\nexport class FluidFetchReader extends ReadDocumentStorageServiceBase implements IDocumentStorageService {\n protected docTree: api.ISnapshotTree | null = null;\n\n constructor(private readonly path: string, private readonly versionName?: string) {\n super();\n }\n\n /**\n * Read the file and returns the snapshot tree.\n * @param version - The version contains the path of the file which contains the snapshot tree.\n */\n public async getSnapshotTree(version?: api.IVersion): Promise<api.ISnapshotTree | null> {\n assert(version !== null, 0x092 /* \"version input for reading snapshot tree is null!\" */);\n assert(!version || version.treeId === FileStorageVersionTreeId,\n 0x093 /* \"invalid version input for reading snapshot tree!\" */);\n\n let filename: string;\n let rootTree = false;\n if (!version || version.id === \"latest\") {\n if (this.docTree) {\n return this.docTree;\n }\n if (this.versionName === undefined) {\n return null;\n }\n rootTree = true;\n filename = `${this.path}/${this.versionName}/tree.json`;\n } else {\n filename = `${this.path}/${this.versionName}/${version.id}.json`;\n }\n\n if (!fs.existsSync(filename)) {\n throw new Error(`Can't find file ${filename}`);\n }\n const data = fs.readFileSync(filename);\n const tree = JSON.parse(data.toString(\"utf-8\"));\n if (rootTree) {\n this.docTree = tree;\n }\n // Fill in this.commit right here?\n // eslint-disable-next-line @typescript-eslint/no-unsafe-return\n return tree;\n }\n\n /**\n * Gets the path of the snapshot tree to be read.\n * @param versionId - version ID.\n * @param count - Number of versions to be returned.\n */\n public async getVersions(versionId: string | null, count: number): Promise<api.IVersion[]> {\n if (versionId === FileStorageDocumentName || versionId === null) {\n if (this.docTree || this.versionName !== undefined) {\n return [{ id: \"latest\", treeId: FileStorageVersionTreeId }];\n }\n // Started with ops - return empty set.\n return [];\n } else if (this.versionName !== undefined) {\n // We loaded from snapshot - search for commit there.\n assert(!!this.docTree, 0x094 /* \"Missing snapshot tree!\" */);\n return [{\n id: versionId,\n treeId: FileStorageVersionTreeId,\n }];\n }\n throw new Error(`Unknown version: ${versionId}`);\n }\n\n public async readBlob(sha: string): Promise<ArrayBufferLike> {\n if (this.versionName !== undefined) {\n const fileName = `${this.path}/${this.versionName}/${sha}`;\n if (fs.existsSync(fileName)) {\n const data = fs.readFileSync(fileName);\n return data;\n }\n }\n throw new Error(`Can't find blob ${sha}`);\n }\n}\n\nexport interface ISnapshotWriterStorage extends IDocumentStorageService {\n onCommitHandler(dataStoreName: string, tree: api.ITree): void;\n onSnapshotHandler(snapshot: IFileSnapshot): void;\n reset(): void;\n}\n\nexport type ReaderConstructor = new (...args: any[]) => IDocumentStorageService;\nexport const FileSnapshotWriterClassFactory = <TBase extends ReaderConstructor>(Base: TBase) =>\n class extends Base implements ISnapshotWriterStorage {\n // Note: if variable name has same name as in base class, it overrides it!\n public blobsWriter = new Map<string, ArrayBufferLike>();\n public commitsWriter: { [key: string]: api.ITree } = {};\n public latestWriterTree?: api.ISnapshotTree;\n public docId?: string;\n\n public reset() {\n this.blobsWriter = new Map<string, ArrayBufferLike>();\n this.commitsWriter = {};\n this.latestWriterTree = undefined;\n this.docId = undefined;\n }\n\n public onCommitHandler(dataStoreName: string, tree: api.ITree): void {\n }\n\n public onSnapshotHandler(snapshot: IFileSnapshot): void {\n throw new Error(\"onSnapshotHandler is not setup! Please provide your handler!\");\n }\n\n public async readBlob(sha: string): Promise<ArrayBufferLike> {\n const blob = this.blobsWriter.get(sha);\n if (blob !== undefined) {\n return blob;\n }\n return super.readBlob(sha);\n }\n\n public async getVersions(versionId: string | null, count: number): Promise<api.IVersion[]> {\n // If we already saved document, that means we are getting here because of snapshot generation.\n // Not returning tree ensures that ContainerRuntime.snapshot() would regenerate subtrees for\n // each unchanged data store.\n // If we want to change that, we would need to capture docId on first call and return this.latestWriterTree\n // when latest is requested.\n if (this.latestWriterTree && (this.docId === versionId || versionId === null)) {\n return [{ id: \"latest\", treeId: FileStorageVersionTreeId }];\n }\n\n if (this.docId === undefined && versionId !== null) {\n this.docId = versionId;\n }\n\n if (versionId !== null && this.commitsWriter[versionId] !== undefined) {\n // PrefetchDocumentStorageService likes to prefetch everything!\n // Skip, as Container does not really need it.\n throw new Error(\"Not supporting commit loading\");\n // Return [{id: versionId, treeId: FileStorageVersionTreeId}];\n }\n return super.getVersions(versionId, count);\n }\n\n public async getSnapshotTree(version?: api.IVersion): Promise<api.ISnapshotTree | null> {\n if (this.latestWriterTree && (!version || version.id === \"latest\")) {\n return this.latestWriterTree;\n }\n if (version && this.commitsWriter[version.id] !== undefined) {\n return buildSnapshotTree(this.commitsWriter[version.id].entries, this.blobsWriter);\n }\n return super.getSnapshotTree(version);\n }\n\n public async write(\n tree: api.ITree,\n parents: string[],\n message: string,\n ref: string): Promise<api.IVersion> {\n let dataStoreName = ref ? ref : \"container\";\n if (tree && tree.entries) {\n tree.entries.forEach((entry) => {\n if (entry.path === \".component\" && entry.type === api.TreeEntry.Blob) {\n const blob: api.IBlob = entry.value;\n const content = blob.contents.split(\":\");\n if (content[0] === `{\"pkg\"`) {\n dataStoreName = content[1].substring(1, content[1].lastIndexOf(`\"`));\n }\n }\n });\n }\n\n const commitName = `commit_${dataStoreName}`;\n\n // Sort entries for easier diffing\n this.sortTree(tree);\n\n // Remove tree IDs for easier comparison of snapshots\n delete tree.id;\n removeNullTreeIds(tree);\n\n if (ref) {\n this.commitsWriter[commitName] = tree;\n } else {\n // Rebuild latest tree - runtime will ask for it when generating next snapshot to write out\n // non-changed commits for data stores\n await this.writeOutFullSnapshot(tree);\n\n // Prep for the future - refresh latest tree, as it's requests on next snapshot generation.\n // Do not care about blobs (at least for now), as blobs are not written out (need follow up)\n this.latestWriterTree = buildSnapshotTree(tree.entries, this.blobsWriter);\n\n // Do not reset this.commitsWriter - runtime will reference same commits in future snapshots\n // if data store did not change in between two snapshots.\n // We can optimize here by filtering commits based on contents of this.docTree.commits\n }\n\n this.onCommitHandler(dataStoreName, tree);\n return {\n id: commitName,\n date: new Date().toUTCString(),\n treeId: FileStorageVersionTreeIdUnused,\n };\n }\n\n public async writeOutFullSnapshot(tree: api.ITree) {\n const commits: { [key: string]: api.ITree } = {};\n\n // Sort keys. This does not guarantees that JSON.stringify() would produce sorted result,\n // but in practice it does.\n const commitsSorted: { [key: string]: api.ITree } = {};\n for (const key of Object.keys(commits).sort()) {\n commitsSorted[key] = commits[key];\n }\n\n const fileSnapshot: IFileSnapshot = { tree, commits: commitsSorted };\n this.onSnapshotHandler(fileSnapshot);\n }\n\n public sortTree(tree: api.ITree) {\n tree.entries.sort((a, b) => a.path.localeCompare(b.path));\n tree.entries.map((entry) => {\n if (entry.type === api.TreeEntry.Tree) {\n this.sortTree(entry.value);\n }\n });\n }\n\n public async buildTree(snapshotTree: api.ISnapshotTree): Promise<api.ITree> {\n const tree: api.ITree = { entries: [] };\n\n for (const subTreeId of Object.keys(snapshotTree.trees)) {\n const subTree = await this.buildTree(snapshotTree.trees[subTreeId]);\n tree.entries.push({\n mode: api.FileMode.Directory,\n path: subTreeId,\n type: api.TreeEntry.Tree,\n value: subTree,\n });\n }\n\n for (const blobName of Object.keys(snapshotTree.blobs)) {\n const buffer = await this.readBlob(snapshotTree.blobs[blobName]);\n const contents = bufferToString(buffer, \"utf8\");\n const blob: api.IBlob = {\n contents,\n encoding: \"utf-8\",\n };\n tree.entries.push({\n mode: api.FileMode.File,\n path: blobName,\n type: api.TreeEntry.Blob,\n value: blob,\n });\n }\n\n assert(Object.keys(snapshotTree.commits).length === 0,\n 0x095 /* \"Leftover distinct commits after building tree!\" */);\n return tree;\n }\n };\n\nfunction removeNullTreeIds(tree: api.ITree) {\n for (const node of tree.entries) {\n if (node.type === api.TreeEntry.Tree) {\n removeNullTreeIds(node.value);\n }\n }\n assert(tree.id === undefined || tree.id === null,\n 0x096 /* \"Trying to remove valid tree IDs in removeNullTreeIds()!\" */);\n delete tree.id;\n}\n\nexport const FluidFetchReaderFileSnapshotWriter = FileSnapshotWriterClassFactory(FluidFetchReader);\n"]}
@@ -5,5 +5,5 @@
5
5
  * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY
6
6
  */
7
7
  export declare const pkgName = "@fluidframework/file-driver";
8
- export declare const pkgVersion = "0.54.2";
8
+ export declare const pkgVersion = "0.56.0-49831";
9
9
  //# sourceMappingURL=packageVersion.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,gCAAgC,CAAC;AACrD,eAAO,MAAM,UAAU,WAAW,CAAC"}
1
+ {"version":3,"file":"packageVersion.d.ts","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,eAAO,MAAM,OAAO,gCAAgC,CAAC;AACrD,eAAO,MAAM,UAAU,iBAAiB,CAAC"}
@@ -8,5 +8,5 @@
8
8
  Object.defineProperty(exports, "__esModule", { value: true });
9
9
  exports.pkgVersion = exports.pkgName = void 0;
10
10
  exports.pkgName = "@fluidframework/file-driver";
11
- exports.pkgVersion = "0.54.2";
11
+ exports.pkgVersion = "0.56.0-49831";
12
12
  //# sourceMappingURL=packageVersion.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,6BAA6B,CAAC;AACxC,QAAA,UAAU,GAAG,QAAQ,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/file-driver\";\nexport const pkgVersion = \"0.54.2\";\n"]}
1
+ {"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,6BAA6B,CAAC;AACxC,QAAA,UAAU,GAAG,cAAc,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n *\n * THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY\n */\n\nexport const pkgName = \"@fluidframework/file-driver\";\nexport const pkgVersion = \"0.56.0-49831\";\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fluidframework/file-driver",
3
- "version": "0.54.2",
3
+ "version": "0.56.0-49831",
4
4
  "description": "A driver that reads/write from/to local file storage.",
5
5
  "homepage": "https://fluidframework.com",
6
6
  "repository": "https://github.com/microsoft/FluidFramework",
@@ -20,7 +20,7 @@
20
20
  "ci:build:docs": "api-extractor run --typescript-compiler-folder ../../../node_modules/typescript && copyfiles -u 1 ./_api-extractor-temp/* ../../../_api-extractor-temp/",
21
21
  "clean": "rimraf dist lib *.tsbuildinfo *.build.log",
22
22
  "eslint": "eslint --format stylish src",
23
- "eslint:fix": "eslint --format stylish src --fix",
23
+ "eslint:fix": "eslint --format stylish src --fix --fix-type problem,suggestion,layout",
24
24
  "lint": "npm run eslint",
25
25
  "lint:fix": "npm run eslint:fix",
26
26
  "tsc": "tsc",
@@ -30,27 +30,28 @@
30
30
  "dependencies": {
31
31
  "@fluidframework/common-definitions": "^0.20.1",
32
32
  "@fluidframework/common-utils": "^0.32.1",
33
- "@fluidframework/driver-definitions": "^0.43.0",
34
- "@fluidframework/driver-utils": "^0.54.2",
33
+ "@fluidframework/driver-definitions": "^0.44.0-0",
34
+ "@fluidframework/driver-utils": "0.56.0-49831",
35
35
  "@fluidframework/protocol-definitions": "^0.1026.0",
36
- "@fluidframework/replay-driver": "^0.54.2"
36
+ "@fluidframework/replay-driver": "0.56.0-49831"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@fluidframework/build-common": "^0.23.0",
40
- "@fluidframework/eslint-config-fluid": "^0.24.0",
40
+ "@fluidframework/eslint-config-fluid": "^0.25.0",
41
41
  "@microsoft/api-extractor": "^7.16.1",
42
+ "@rushstack/eslint-config": "^2.5.1",
42
43
  "@types/node": "^14.18.0",
43
- "@typescript-eslint/eslint-plugin": "~4.14.0",
44
- "@typescript-eslint/parser": "~4.14.0",
44
+ "@typescript-eslint/eslint-plugin": "~5.9.0",
45
+ "@typescript-eslint/parser": "~5.9.0",
45
46
  "concurrently": "^6.2.0",
46
47
  "copyfiles": "^2.1.0",
47
- "eslint": "~7.18.0",
48
+ "eslint": "~8.6.0",
49
+ "eslint-plugin-editorconfig": "~3.2.0",
48
50
  "eslint-plugin-eslint-comments": "~3.2.0",
49
- "eslint-plugin-import": "~2.22.1",
51
+ "eslint-plugin-import": "~2.25.4",
50
52
  "eslint-plugin-no-null": "~1.0.2",
51
- "eslint-plugin-prefer-arrow": "~1.2.2",
52
- "eslint-plugin-react": "~7.22.0",
53
- "eslint-plugin-unicorn": "~26.0.1",
53
+ "eslint-plugin-react": "~7.28.0",
54
+ "eslint-plugin-unicorn": "~40.0.0",
54
55
  "rimraf": "^2.6.2",
55
56
  "typescript": "~4.1.3",
56
57
  "typescript-formatter": "7.1.0"
@@ -76,8 +76,8 @@ export class FluidFetchReader extends ReadDocumentStorageServiceBase implements
76
76
  * @param versionId - version ID.
77
77
  * @param count - Number of versions to be returned.
78
78
  */
79
- public async getVersions(versionId: string, count: number): Promise<api.IVersion[]> {
80
- if (versionId === FileStorageDocumentName) {
79
+ public async getVersions(versionId: string | null, count: number): Promise<api.IVersion[]> {
80
+ if (versionId === FileStorageDocumentName || versionId === null) {
81
81
  if (this.docTree || this.versionName !== undefined) {
82
82
  return [{ id: "latest", treeId: FileStorageVersionTreeId }];
83
83
  }
@@ -143,20 +143,21 @@ export const FileSnapshotWriterClassFactory = <TBase extends ReaderConstructor>(
143
143
  return super.readBlob(sha);
144
144
  }
145
145
 
146
- public async getVersions(versionId: string, count: number): Promise<api.IVersion[]> {
146
+ public async getVersions(versionId: string | null, count: number): Promise<api.IVersion[]> {
147
147
  // If we already saved document, that means we are getting here because of snapshot generation.
148
148
  // Not returning tree ensures that ContainerRuntime.snapshot() would regenerate subtrees for
149
149
  // each unchanged data store.
150
150
  // If we want to change that, we would need to capture docId on first call and return this.latestWriterTree
151
151
  // when latest is requested.
152
- if (this.docId === undefined && versionId !== undefined) {
153
- this.docId = versionId;
154
- }
155
- if (this.latestWriterTree && (this.docId === versionId || versionId === undefined)) {
152
+ if (this.latestWriterTree && (this.docId === versionId || versionId === null)) {
156
153
  return [{ id: "latest", treeId: FileStorageVersionTreeId }];
157
154
  }
158
155
 
159
- if (this.commitsWriter[versionId] !== undefined) {
156
+ if (this.docId === undefined && versionId !== null) {
157
+ this.docId = versionId;
158
+ }
159
+
160
+ if (versionId !== null && this.commitsWriter[versionId] !== undefined) {
160
161
  // PrefetchDocumentStorageService likes to prefetch everything!
161
162
  // Skip, as Container does not really need it.
162
163
  throw new Error("Not supporting commit loading");
@@ -6,4 +6,4 @@
6
6
  */
7
7
 
8
8
  export const pkgName = "@fluidframework/file-driver";
9
- export const pkgVersion = "0.54.2";
9
+ export const pkgVersion = "0.56.0-49831";