Skip to content

Commit 509d406

Browse files
Merge branch 'main' into ConfigMap
2 parents 96a4fc5 + fa022b2 commit 509d406

File tree

108 files changed

+1078
-2268
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

108 files changed

+1078
-2268
lines changed

fluidBuild.config.cjs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -344,8 +344,14 @@ module.exports = {
344344
"^packages/test/test-utils/package.json",
345345
// TODO: AB#7630 uses lint only ts projects for coverage which don't have representative tsc scripts
346346
"^packages/tools/fluid-runner/package.json",
347+
348+
// Server packages need to be cleaned up; excluding as a workaround
349+
"^server/routerlicious/packages/.*/package.json",
350+
],
351+
"fluid-build-tasks-tsc": [
352+
// Server packages need to be cleaned up; excluding as a workaround
353+
"^server/routerlicious/packages/.*/package.json",
347354
],
348-
"fluid-build-tasks-tsc": [],
349355
"html-copyright-file-header": [
350356
// Tests generate HTML "snapshot" artifacts
351357
"tools/api-markdown-documenter/src/test/snapshots/.*",

packages/dds/tree/api-report/tree.alpha.api.md

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1021,18 +1021,6 @@ export interface SharedTreeFormatOptions {
10211021
treeEncodeType: TreeCompressionStrategy;
10221022
}
10231023

1024-
// @alpha
1025-
export const SharedTreeFormatVersion: {
1026-
readonly v1: 1;
1027-
readonly v2: 2;
1028-
readonly v3: 3;
1029-
readonly v5: 5;
1030-
readonly vSharedBranches: 100;
1031-
};
1032-
1033-
// @alpha
1034-
export type SharedTreeFormatVersion = typeof SharedTreeFormatVersion;
1035-
10361024
// @alpha @input
10371025
export interface SharedTreeOptions extends Partial<CodecWriteOptions>, Partial<SharedTreeFormatOptions>, SharedTreeOptionsBeta {
10381026
readonly enableSharedBranches?: boolean;

packages/dds/tree/src/codec/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,4 +39,5 @@ export {
3939
makeVersionedCodec,
4040
makeVersionedValidatedCodec,
4141
makeVersionDispatchingCodec,
42+
makeDiscontinuedCodecVersion,
4243
} from "./versioned/index.js";

packages/dds/tree/src/codec/versioned/codec.ts

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55

66
import { assert } from "@fluidframework/core-utils/internal";
77
import { UsageError } from "@fluidframework/telemetry-utils/internal";
8-
import type { TSchema } from "@sinclair/typebox";
8+
import type { SemanticVersion } from "@fluidframework/runtime-utils/internal";
9+
import { Type, type TSchema } from "@sinclair/typebox";
910

1011
import type { JsonCompatibleReadOnly } from "../../util/index.js";
1112
import {
@@ -66,7 +67,7 @@ export function makeVersionedValidatedCodec<
6667
TContext = void,
6768
>(
6869
options: ICodecOptions,
69-
supportedVersions: Set<number>,
70+
supportedVersions: Set<FormatVersion>,
7071
schema: EncodedSchema,
7172
codec: IJsonCodec<TDecoded, TEncoded, TValidate, TContext>,
7273
): IJsonCodec<TDecoded, TEncoded, TValidate, TContext> {
@@ -77,6 +78,43 @@ export function makeVersionedValidatedCodec<
7778
);
7879
}
7980

81+
/**
82+
* Creates a codec which always throws a UsageError when encoding or decoding, indicating that the format version is discontinued.
83+
*/
84+
export function makeDiscontinuedCodecVersion<
85+
TDecoded,
86+
TEncoded extends Versioned = JsonCompatibleReadOnly & Versioned,
87+
TContext = unknown,
88+
>(
89+
options: ICodecOptions,
90+
discontinuedVersion: FormatVersion,
91+
discontinuedSince: SemanticVersion,
92+
): IJsonCodec<TDecoded, TEncoded, TEncoded, TContext> {
93+
const schema = Type.Object(
94+
{
95+
version:
96+
discontinuedVersion === undefined
97+
? Type.Undefined()
98+
: Type.Literal(discontinuedVersion),
99+
},
100+
// Using `additionalProperties: true` allows this schema to be used when loading data encoded by older versions even though they contain additional properties.
101+
{ additionalProperties: true },
102+
);
103+
const codec: IJsonCodec<TDecoded, TEncoded, TEncoded, TContext> = {
104+
encode: (_: TDecoded): TEncoded => {
105+
throw new UsageError(
106+
`Cannot encode data to format ${discontinuedVersion}. The codec was discontinued in FF version ${discontinuedSince}.`,
107+
);
108+
},
109+
decode: (data: TEncoded): TDecoded => {
110+
throw new UsageError(
111+
`Cannot decode data to format ${data.version}. The codec was discontinued in FF version ${discontinuedSince}.`,
112+
);
113+
},
114+
};
115+
return makeVersionedValidatedCodec(options, new Set([discontinuedVersion]), schema, codec);
116+
}
117+
80118
/**
81119
* Creates a codec which dispatches to the appropriate member of a codec family based on the version of
82120
* data it encounters.

packages/dds/tree/src/codec/versioned/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ export {
88
makeVersionedCodec,
99
makeVersionedValidatedCodec,
1010
makeVersionDispatchingCodec,
11+
makeDiscontinuedCodecVersion,
1112
} from "./codec.js";

packages/dds/tree/src/feature-libraries/default-schema/defaultFieldKinds.ts

Lines changed: 1 addition & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -193,26 +193,6 @@ export const fieldKindConfigurations: ReadonlyMap<
193193
ModularChangeFormatVersion,
194194
FieldKindConfiguration
195195
> = new Map([
196-
[
197-
brand(1),
198-
new Map<FieldKindIdentifier, FieldKindConfigurationEntry>([
199-
[required.identifier, { kind: required, formatVersion: 1 }],
200-
[optional.identifier, { kind: optional, formatVersion: 1 }],
201-
[sequence.identifier, { kind: sequence, formatVersion: 1 }],
202-
[forbidden.identifier, { kind: forbidden, formatVersion: 1 }],
203-
[identifier.identifier, { kind: identifier, formatVersion: 1 }],
204-
]),
205-
],
206-
[
207-
brand(2),
208-
new Map<FieldKindIdentifier, FieldKindConfigurationEntry>([
209-
[required.identifier, { kind: required, formatVersion: 2 }],
210-
[optional.identifier, { kind: optional, formatVersion: 2 }],
211-
[sequence.identifier, { kind: sequence, formatVersion: 1 }],
212-
[forbidden.identifier, { kind: forbidden, formatVersion: 1 }],
213-
[identifier.identifier, { kind: identifier, formatVersion: 1 }],
214-
]),
215-
],
216196
[
217197
brand(3),
218198
new Map<FieldKindIdentifier, FieldKindConfigurationEntry>([
@@ -235,7 +215,7 @@ export const fieldKindConfigurations: ReadonlyMap<
235215
],
236216
]);
237217

238-
export type ModularChangeFormatVersion = Brand<1 | 2 | 3 | 4, "ModularChangeFormatVersion">;
218+
export type ModularChangeFormatVersion = Brand<3 | 4, "ModularChangeFormatVersion">;
239219
export function getCodecTreeForModularChangeFormat(
240220
version: ModularChangeFormatVersion,
241221
): CodecTree {

packages/dds/tree/src/feature-libraries/optional-field/optionalFieldCodecV1.ts

Lines changed: 0 additions & 208 deletions
This file was deleted.

packages/dds/tree/src/feature-libraries/optional-field/optionalFieldCodecs.ts

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ import type {
1212
import type { FieldChangeEncodingContext } from "../modular-schema/index.js";
1313

1414
import type { OptionalChangeset } from "./optionalFieldChangeTypes.js";
15-
import { makeOptionalFieldCodec as makeV1Codec } from "./optionalFieldCodecV1.js";
1615
import { makeOptionalFieldCodec as makeV2Codec } from "./optionalFieldCodecV2.js";
1716

1817
export const makeOptionalFieldCodecFamily = (
@@ -23,7 +22,4 @@ export const makeOptionalFieldCodecFamily = (
2322
ChangeEncodingContext
2423
>,
2524
): ICodecFamily<OptionalChangeset, FieldChangeEncodingContext> =>
26-
makeCodecFamily([
27-
[1, makeV1Codec(revisionTagCodec)],
28-
[2, makeV2Codec(revisionTagCodec)],
29-
]);
25+
makeCodecFamily([[2, makeV2Codec(revisionTagCodec)]]);

0 commit comments

Comments
 (0)