@fluidframework/container-loader 3.0.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/README.md +30 -34
- package/dist/loaderLayerCompatState.d.ts +2 -2
- package/dist/packageVersion.d.ts +1 -1
- package/dist/packageVersion.js +1 -1
- package/dist/packageVersion.js.map +1 -1
- package/lib/loaderLayerCompatState.d.ts +2 -2
- package/lib/packageVersion.d.ts +1 -1
- package/lib/packageVersion.js +1 -1
- package/lib/packageVersion.js.map +1 -1
- package/package.json +11 -11
- package/src/packageVersion.ts +1 -1
- package/src/pointInTime/DEV.md +9 -2
package/CHANGELOG.md
CHANGED
package/README.md
CHANGED
|
@@ -40,8 +40,7 @@
|
|
|
40
40
|
|
|
41
41
|
- [Quorum and Proposals](../../../server/routerlicious/packages/protocol-base/README.md)
|
|
42
42
|
|
|
43
|
-
<!--
|
|
44
|
-
|
|
43
|
+
<!-- markdown-magic:begin {"transform":"library-readme-header","headingLevel":2} -->
|
|
45
44
|
<!-- prettier-ignore-start -->
|
|
46
45
|
<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->
|
|
47
46
|
|
|
@@ -75,8 +74,7 @@ Import the `legacy` APIs from `@fluidframework/container-loader/legacy`.
|
|
|
75
74
|
Read the **@fluidframework/container-loader** API documentation at <https://fluidframework.com/docs/apis/container-loader>.
|
|
76
75
|
|
|
77
76
|
<!-- prettier-ignore-end -->
|
|
78
|
-
|
|
79
|
-
<!-- AUTO-GENERATED-CONTENT:END -->
|
|
77
|
+
<!-- markdown-magic:end -->
|
|
80
78
|
|
|
81
79
|
## Fluid Loader
|
|
82
80
|
|
|
@@ -295,8 +293,7 @@ Note that when an active connection is in place, it's just a matter of time befo
|
|
|
295
293
|
|
|
296
294
|
`Container.isDirty` can be used to get current state of container.
|
|
297
295
|
|
|
298
|
-
<!--
|
|
299
|
-
|
|
296
|
+
<!-- markdown-magic:begin {"transform":"readme-footer","headingLevel":2} -->
|
|
300
297
|
<!-- prettier-ignore-start -->
|
|
301
298
|
<!-- NOTE: This section is automatically generated using @fluid-tools/markdown-magic. Do not update these generated contents directly. -->
|
|
302
299
|
|
|
@@ -313,29 +310,29 @@ To request support for a configuration that is not listed, file an issue.
|
|
|
313
310
|
The product team will evaluate your request.
|
|
314
311
|
In the issue, specify the current status of the configuration:
|
|
315
312
|
|
|
316
|
-
-
|
|
317
|
-
-
|
|
313
|
+
- The configuration works but needs official support.
|
|
314
|
+
- The configuration does not work and requires changes.
|
|
318
315
|
|
|
319
316
|
### Supported Runtimes
|
|
320
317
|
|
|
321
|
-
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
-
|
|
318
|
+
- Fluid Framework supports Node.js versions 22 and 24 while they receive [upstream support](https://nodejs.org/en/about/previous-releases).
|
|
319
|
+
- Fluid Framework will stop support for version 22 [when upstream support ends on 2027-04-30](https://github.com/nodejs/release#release-schedule).
|
|
320
|
+
- Fluid Framework does not support Node.js with the `--no-experimental-fetch` flag.
|
|
321
|
+
- Fluid Framework supports modern browsers that support the ES2022 standard library.
|
|
325
322
|
|
|
326
323
|
### Supported Tools
|
|
327
324
|
|
|
328
|
-
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
-
|
|
337
|
-
|
|
338
|
-
|
|
325
|
+
- [TypeScript 6.0](https://typescriptdocs.com/release-notes/TypeScript%206.0):
|
|
326
|
+
- Fluid Framework supports all [`strict`](https://www.typescriptlang.org/tsconfig) options.
|
|
327
|
+
- Set the build targets (`lib`, `target`) to `ES2022` or later.
|
|
328
|
+
- Enable [`strictNullChecks`](https://www.typescriptlang.org/tsconfig).
|
|
329
|
+
- Fluid Framework does not support [configuration options deprecated in TypeScript 6.0](https://typescriptdocs.com/release-notes/TypeScript%206.0#breaking-changes-and-deprecations-in-typescript-6-0).
|
|
330
|
+
- Fluid Framework does not fully support `exactOptionalPropertyTypes`.
|
|
331
|
+
If you enable this option, do not use `in`, `Reflect.has`, `Object.hasOwn`, or `Object.prototype.hasOwnProperty` to narrow members of Fluid Framework types.
|
|
332
|
+
These methods can incorrectly exclude `undefined` from the possible values.
|
|
333
|
+
- [webpack](https://webpack.js.org/) 5
|
|
334
|
+
- We do not require a specific bundler.
|
|
335
|
+
Other bundlers that handle ES Modules can work, but we actively test only webpack.
|
|
339
336
|
|
|
340
337
|
### Module Resolution
|
|
341
338
|
|
|
@@ -346,25 +343,25 @@ Do not use `Node10` module resolution.
|
|
|
346
343
|
|
|
347
344
|
### Module Formats
|
|
348
345
|
|
|
349
|
-
-
|
|
350
|
-
|
|
351
|
-
-
|
|
352
|
-
|
|
346
|
+
- ES Modules:
|
|
347
|
+
Use ES Modules to consume Fluid Framework client packages, including in Node.js.
|
|
348
|
+
- CommonJS:
|
|
349
|
+
Fluid Framework does not officially support CommonJS in version 3.0 or later.
|
|
353
350
|
|
|
354
351
|
## Contribution Guidelines
|
|
355
352
|
|
|
356
353
|
You can [contribute](https://github.com/microsoft/FluidFramework/blob/main/CONTRIBUTING.md) to Fluid Framework in these ways:
|
|
357
354
|
|
|
358
|
-
-
|
|
359
|
-
-
|
|
360
|
-
-
|
|
361
|
-
-
|
|
355
|
+
- Answer questions in [GitHub Discussions](https://github.com/microsoft/FluidFramework/discussions).
|
|
356
|
+
- [Submit bug reports](https://github.com/microsoft/FluidFramework/issues) and help verify fixes.
|
|
357
|
+
- Review [source code changes](https://github.com/microsoft/FluidFramework/pulls).
|
|
358
|
+
- [Contribute bug fixes](https://github.com/microsoft/FluidFramework/blob/main/CONTRIBUTING.md).
|
|
362
359
|
|
|
363
360
|
For detailed instructions, read the [repo documentation](https://github.com/microsoft/FluidFramework/blob/main/docs/content/Home.md).
|
|
364
361
|
|
|
365
362
|
This project follows the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
|
|
366
363
|
For more information, read the [Code of Conduct frequently asked questions](https://opensource.microsoft.com/codeofconduct/faq/).
|
|
367
|
-
For questions or comments, contact
|
|
364
|
+
For questions or comments, contact <opencode@microsoft.com>.
|
|
368
365
|
|
|
369
366
|
This project may contain Microsoft trademarks or logos for Microsoft projects, products, or services.
|
|
370
367
|
Use of these trademarks or logos must follow Microsoft’s [Trademark & Brand Guidelines](https://www.microsoft.com/trademarks).
|
|
@@ -385,5 +382,4 @@ Use of these trademarks or logos must follow Microsoft's [Trademark & Brand Guid
|
|
|
385
382
|
Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.
|
|
386
383
|
|
|
387
384
|
<!-- prettier-ignore-end -->
|
|
388
|
-
|
|
389
|
-
<!-- AUTO-GENERATED-CONTENT:END -->
|
|
385
|
+
<!-- markdown-magic:end -->
|
|
@@ -13,11 +13,11 @@ export declare const loaderCoreCompatDetails: {
|
|
|
13
13
|
/**
|
|
14
14
|
* The package version of the Loader layer.
|
|
15
15
|
*/
|
|
16
|
-
readonly pkgVersion: "3.0
|
|
16
|
+
readonly pkgVersion: "3.1.0";
|
|
17
17
|
/**
|
|
18
18
|
* The current generation of the Loader layer.
|
|
19
19
|
*/
|
|
20
|
-
readonly generation:
|
|
20
|
+
readonly generation: 10;
|
|
21
21
|
};
|
|
22
22
|
/**
|
|
23
23
|
* Loader's compatibility details that is exposed to the Runtime layer.
|
package/dist/packageVersion.d.ts
CHANGED
|
@@ -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/container-loader";
|
|
8
|
-
export declare const pkgVersion = "3.0
|
|
8
|
+
export declare const pkgVersion = "3.1.0";
|
|
9
9
|
//# sourceMappingURL=packageVersion.d.ts.map
|
package/dist/packageVersion.js
CHANGED
|
@@ -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/container-loader";
|
|
11
|
-
exports.pkgVersion = "3.0
|
|
11
|
+
exports.pkgVersion = "3.1.0";
|
|
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,kCAAkC,CAAC;AAC7C,QAAA,UAAU,GAAG,OAAO,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/container-loader\";\nexport const pkgVersion = \"3.0
|
|
1
|
+
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;AAEU,QAAA,OAAO,GAAG,kCAAkC,CAAC;AAC7C,QAAA,UAAU,GAAG,OAAO,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/container-loader\";\nexport const pkgVersion = \"3.1.0\";\n"]}
|
|
@@ -13,11 +13,11 @@ export declare const loaderCoreCompatDetails: {
|
|
|
13
13
|
/**
|
|
14
14
|
* The package version of the Loader layer.
|
|
15
15
|
*/
|
|
16
|
-
readonly pkgVersion: "3.0
|
|
16
|
+
readonly pkgVersion: "3.1.0";
|
|
17
17
|
/**
|
|
18
18
|
* The current generation of the Loader layer.
|
|
19
19
|
*/
|
|
20
|
-
readonly generation:
|
|
20
|
+
readonly generation: 10;
|
|
21
21
|
};
|
|
22
22
|
/**
|
|
23
23
|
* Loader's compatibility details that is exposed to the Runtime layer.
|
package/lib/packageVersion.d.ts
CHANGED
|
@@ -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/container-loader";
|
|
8
|
-
export declare const pkgVersion = "3.0
|
|
8
|
+
export declare const pkgVersion = "3.1.0";
|
|
9
9
|
//# sourceMappingURL=packageVersion.d.ts.map
|
package/lib/packageVersion.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,kCAAkC,CAAC;AAC1D,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,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/container-loader\";\nexport const pkgVersion = \"3.0
|
|
1
|
+
{"version":3,"file":"packageVersion.js","sourceRoot":"","sources":["../src/packageVersion.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,CAAC,MAAM,OAAO,GAAG,kCAAkC,CAAC;AAC1D,MAAM,CAAC,MAAM,UAAU,GAAG,OAAO,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/container-loader\";\nexport const pkgVersion = \"3.1.0\";\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fluidframework/container-loader",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"description": "Fluid container loader",
|
|
5
5
|
"homepage": "https://fluidframework.com",
|
|
6
6
|
"repository": {
|
|
@@ -67,13 +67,13 @@
|
|
|
67
67
|
"temp-directory": "nyc/.nyc_output"
|
|
68
68
|
},
|
|
69
69
|
"dependencies": {
|
|
70
|
-
"@fluid-internal/client-utils": "~3.0
|
|
71
|
-
"@fluidframework/container-definitions": "~3.0
|
|
72
|
-
"@fluidframework/core-interfaces": "~3.0
|
|
73
|
-
"@fluidframework/core-utils": "~3.0
|
|
74
|
-
"@fluidframework/driver-definitions": "~3.0
|
|
75
|
-
"@fluidframework/driver-utils": "~3.0
|
|
76
|
-
"@fluidframework/telemetry-utils": "~3.0
|
|
70
|
+
"@fluid-internal/client-utils": "~3.1.0",
|
|
71
|
+
"@fluidframework/container-definitions": "~3.1.0",
|
|
72
|
+
"@fluidframework/core-interfaces": "~3.1.0",
|
|
73
|
+
"@fluidframework/core-utils": "~3.1.0",
|
|
74
|
+
"@fluidframework/driver-definitions": "~3.1.0",
|
|
75
|
+
"@fluidframework/driver-utils": "~3.1.0",
|
|
76
|
+
"@fluidframework/telemetry-utils": "~3.1.0",
|
|
77
77
|
"debug": "^4.3.4",
|
|
78
78
|
"double-ended-queue": "^2.1.0-0",
|
|
79
79
|
"events_pkg": "npm:events@^3.1.0",
|
|
@@ -82,9 +82,9 @@
|
|
|
82
82
|
"devDependencies": {
|
|
83
83
|
"@arethetypeswrong/cli": "^0.18.5",
|
|
84
84
|
"@biomejs/biome": "~2.4.5",
|
|
85
|
-
"@fluid-internal/client-utils": "~3.0
|
|
86
|
-
"@fluid-internal/mocha-test-setup": "~3.0
|
|
87
|
-
"@fluid-private/test-loader-utils": "~3.0
|
|
85
|
+
"@fluid-internal/client-utils": "~3.1.0",
|
|
86
|
+
"@fluid-internal/mocha-test-setup": "~3.1.0",
|
|
87
|
+
"@fluid-private/test-loader-utils": "~3.1.0",
|
|
88
88
|
"@fluid-tools/build-cli": "^0.67.0",
|
|
89
89
|
"@fluidframework/build-common": "^2.0.3",
|
|
90
90
|
"@fluidframework/build-tools": "^0.67.0",
|
package/src/packageVersion.ts
CHANGED
package/src/pointInTime/DEV.md
CHANGED
|
@@ -45,6 +45,8 @@ The result is a historical view with these invariants:
|
|
|
45
45
|
3. `PointInTimeDocumentServiceFactory` adapts that capability to the normal `createDocumentService` call used by container loading, preserving the requested target sequence number.
|
|
46
46
|
4. The driver creates a point-in-time document service:
|
|
47
47
|
- storage serves a recoverable snapshot whose sequence number is at or before the target;
|
|
48
|
+
- the initial snapshot read bypasses persistent and in-memory prefetched snapshot caches so they
|
|
49
|
+
cannot replace the selected recoverable snapshot with a newer snapshot;
|
|
48
50
|
- delta storage serves the live document's retained ops, bounded so replay cannot pass the target;
|
|
49
51
|
- the service is storage-only, preventing a live delta-stream connection.
|
|
50
52
|
5. `loadContainerPaused` loads the selected snapshot with automatic op processing disabled and forces the container into read-only mode.
|
|
@@ -237,7 +239,9 @@ ODSP unit coverage exercises base selection, no-base failures, version URL resol
|
|
|
237
239
|
Real-service ODSP coverage lives under [`packages/test/test-end-to-end-tests/src/test/pointInTime/`](../../../../test/test-end-to-end-tests/src/test/pointInTime/):
|
|
238
240
|
|
|
239
241
|
- `loadToSequenceNumber.spec.ts` covers exact version boundaries, replay to a mid-stream target, and distinct historical targets.
|
|
240
|
-
- `loadSuccess.spec.ts` covers the earliest recoverable state, deterministic repeated loads, a
|
|
242
|
+
- `loadSuccess.spec.ts` covers the earliest recoverable state, deterministic repeated loads, a
|
|
243
|
+
first historical load with a newer live snapshot already in persistent cache, a frozen read-only
|
|
244
|
+
result, and deep-history replay.
|
|
241
245
|
- `epochMismatch.spec.ts` and `loadFailure.spec.ts` cover lineage changes, unavailable ops, malformed targets, and cancellation during replay.
|
|
242
246
|
- `odspVersionApi.spec.ts` verifies the real-service version-history test setup.
|
|
243
247
|
- `pointInTimeTestUtils.ts` supplies the shared counter runtime, summarizer, version-snapshot helpers, and point-in-time load wrapper.
|
|
@@ -251,7 +255,10 @@ The following loading behaviors are covered by unit or integration tests, inferr
|
|
|
251
255
|
1. **Boundary targets:** Load sequence number `0` and the current live tip. Existing successful tests use a non-zero recoverable point and advance the document past the target before loading.
|
|
252
256
|
2. **Complex runtime op representations:** Load across grouped, compressed, and chunked batches, including a large payload that genuinely uses the chunk-reassembly path. The current `SharedCounter` scenarios generate small operations. This is separate from delta-fetch page batching below.
|
|
253
257
|
3. **Attachment and blob state:** Create an attachment or blob-backed handle after the base snapshot, load to a target after its attach op, and verify the historical container can read the expected content.
|
|
254
|
-
4. **Cache and load isolation:**
|
|
258
|
+
4. **Cache and load isolation:** A first historical load with a newer live snapshot already in the
|
|
259
|
+
same persistent cache is covered. Still run concurrent loads to different targets, then perform a
|
|
260
|
+
normal live load with the same factory credentials. Verify each historical view remains pinned to
|
|
261
|
+
its own target and no historical snapshot leaks through shared or persisted caches.
|
|
255
262
|
5. **Cancellation entry and propagation:** Pass an already-aborted signal and verify no storage work begins. During replay, propagate cancellation through the delta-storage fetch rather than only rejecting the loader's wait promise, and verify retries and network reads stop promptly. The existing cancellation test aborts only after replay has begun and observes that storage retries can continue racing teardown.
|
|
256
263
|
6. **Read-only enforcement:** Attempt a DDS mutation and call `connect()` on the returned historical container, then verify no op is submitted, no live connection is established, and the view does not advance. Existing coverage checks the exposed read-only and disconnected state without attempting either action.
|
|
257
264
|
7. **Mid-load lineage change:** Trigger a file restore after base-version discovery but before or during live-op replay and verify the shared `EpochTracker` rejects the mixed lineage. Existing epoch tests restore before the point-in-time load starts.
|