Skip to content

Commit 035eab8

Browse files
authored
build(fluid-static): Add /legacy entrypoint (#25055)
`@legacy + `@alpha` APIs were recently added to this package, but it does not have a `/legacy` entrypoint, so those new APIs were not importable. This adds the entrypoint + necessary related infra.
1 parent c84b09f commit 035eab8

File tree

8 files changed

+229
-0
lines changed

8 files changed

+229
-0
lines changed

packages/framework/fluid-static/README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,15 @@ To get started, install the package by running the following command:
2323
npm i @fluidframework/fluid-static
2424
```
2525

26+
## Importing from this package
27+
28+
This package leverages [package.json exports](https://nodejs.org/api/packages.html#exports) to separate its APIs by support level.
29+
For more information on the related support guarantees, see [API Support Levels](https://fluidframework.com/docs/build/releases-and-apitags/#api-support-levels).
30+
31+
To access the `public` ([SemVer](https://semver.org/)) APIs, import via `@fluidframework/fluid-static` like normal.
32+
33+
To access the `legacy` APIs, import via `@fluidframework/fluid-static/legacy`.
34+
2635
## API Documentation
2736

2837
API documentation for **@fluidframework/fluid-static** is available at <https://fluidframework.com/docs/apis/fluid-static>.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3+
"extends": "<projectFolder>/../../../common/build/build-common/api-extractor-lint.entrypoint.json",
4+
"mainEntryPointFilePath": "<projectFolder>/dist/legacy.d.ts"
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3+
"extends": "<projectFolder>/../../../common/build/build-common/api-extractor-lint.entrypoint.json",
4+
"mainEntryPointFilePath": "<projectFolder>/lib/legacy.d.ts"
5+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3+
"extends": "<projectFolder>/../../../common/build/build-common/api-extractor-report.esm.current.json",
4+
"mainEntryPointFilePath": "<projectFolder>/lib/public.d.ts"
5+
}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json",
3+
"extends": "<projectFolder>/../../../common/build/build-common/api-extractor-report.esm.legacy.json"
4+
}
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
## Alpha API Report File for "@fluidframework/fluid-static"
2+
3+
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
4+
5+
```ts
6+
7+
// @public
8+
export type CompatibilityMode = "1" | "2";
9+
10+
// @public
11+
export type ContainerAttachProps<T = unknown> = T;
12+
13+
// @public
14+
export interface ContainerSchema {
15+
readonly dynamicObjectTypes?: readonly SharedObjectKind[];
16+
readonly initialObjects: Record<string, SharedObjectKind>;
17+
}
18+
19+
// @alpha @legacy
20+
export function createTreeContainerRuntimeFactory(props: {
21+
readonly schema: TreeContainerSchema;
22+
readonly compatibilityMode: CompatibilityMode;
23+
readonly rootDataStoreRegistry?: IFluidDataStoreRegistry;
24+
readonly runtimeOptionOverrides?: Partial<IContainerRuntimeOptions>;
25+
readonly minVersionForCollabOverride?: MinimumVersionForCollab;
26+
}): IRuntimeFactory;
27+
28+
// @public
29+
export interface IConnection {
30+
readonly id: string;
31+
readonly mode: "write" | "read";
32+
}
33+
34+
// @public @sealed
35+
export interface IFluidContainer<TContainerSchema extends ContainerSchema = ContainerSchema> extends IEventProvider<IFluidContainerEvents> {
36+
attach(props?: ContainerAttachProps): Promise<string>;
37+
readonly attachState: AttachState;
38+
connect(): void;
39+
readonly connectionState: ConnectionState;
40+
create<T extends IFluidLoadable>(objectClass: SharedObjectKind<T>): Promise<T>;
41+
disconnect(): void;
42+
dispose(): void;
43+
readonly disposed: boolean;
44+
readonly initialObjects: InitialObjects<TContainerSchema>;
45+
readonly isDirty: boolean;
46+
}
47+
48+
// @public @sealed
49+
export interface IFluidContainerEvents extends IEvent {
50+
(event: "connected", listener: () => void): void;
51+
(event: "disconnected", listener: () => void): void;
52+
(event: "saved", listener: () => void): void;
53+
(event: "dirty", listener: () => void): void;
54+
(event: "disposed", listener: (error?: ICriticalContainerError) => void): any;
55+
}
56+
57+
// @public
58+
export interface IMember {
59+
readonly connections: IConnection[];
60+
readonly id: string;
61+
}
62+
63+
// @public
64+
export type InitialObjects<T extends ContainerSchema> = {
65+
[K in keyof T["initialObjects"]]: T["initialObjects"][K] extends SharedObjectKind<infer TChannel> ? TChannel : never;
66+
};
67+
68+
// @public
69+
export interface IServiceAudience<M extends IMember> extends IEventProvider<IServiceAudienceEvents<M>> {
70+
getMembers(): ReadonlyMap<string, M>;
71+
getMyself(): Myself<M> | undefined;
72+
}
73+
74+
// @public
75+
export interface IServiceAudienceEvents<M extends IMember> extends IEvent {
76+
// @eventProperty
77+
(event: "membersChanged", listener: () => void): void;
78+
// @eventProperty
79+
(event: "memberAdded", listener: MemberChangedListener<M>): void;
80+
// @eventProperty
81+
(event: "memberRemoved", listener: MemberChangedListener<M>): void;
82+
}
83+
84+
// @public
85+
export type MemberChangedListener<M extends IMember> = (clientId: string, member: M) => void;
86+
87+
// @public
88+
export type Myself<M extends IMember = IMember> = M & {
89+
readonly currentConnection: string;
90+
};
91+
92+
// @alpha @legacy
93+
export interface TreeContainerSchema extends ContainerSchema {
94+
// (undocumented)
95+
readonly initialObjects: {
96+
readonly tree: SharedObjectKind<ITree>;
97+
};
98+
}
99+
100+
```
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
## Public API Report File for "@fluidframework/fluid-static"
2+
3+
> Do not edit this file. It is a report generated by [API Extractor](https://api-extractor.com/).
4+
5+
```ts
6+
7+
// @public
8+
export type CompatibilityMode = "1" | "2";
9+
10+
// @public
11+
export type ContainerAttachProps<T = unknown> = T;
12+
13+
// @public
14+
export interface ContainerSchema {
15+
readonly dynamicObjectTypes?: readonly SharedObjectKind[];
16+
readonly initialObjects: Record<string, SharedObjectKind>;
17+
}
18+
19+
// @public
20+
export interface IConnection {
21+
readonly id: string;
22+
readonly mode: "write" | "read";
23+
}
24+
25+
// @public @sealed
26+
export interface IFluidContainer<TContainerSchema extends ContainerSchema = ContainerSchema> extends IEventProvider<IFluidContainerEvents> {
27+
attach(props?: ContainerAttachProps): Promise<string>;
28+
readonly attachState: AttachState;
29+
connect(): void;
30+
readonly connectionState: ConnectionState;
31+
create<T extends IFluidLoadable>(objectClass: SharedObjectKind<T>): Promise<T>;
32+
disconnect(): void;
33+
dispose(): void;
34+
readonly disposed: boolean;
35+
readonly initialObjects: InitialObjects<TContainerSchema>;
36+
readonly isDirty: boolean;
37+
}
38+
39+
// @public @sealed
40+
export interface IFluidContainerEvents extends IEvent {
41+
(event: "connected", listener: () => void): void;
42+
(event: "disconnected", listener: () => void): void;
43+
(event: "saved", listener: () => void): void;
44+
(event: "dirty", listener: () => void): void;
45+
(event: "disposed", listener: (error?: ICriticalContainerError) => void): any;
46+
}
47+
48+
// @public
49+
export interface IMember {
50+
readonly connections: IConnection[];
51+
readonly id: string;
52+
}
53+
54+
// @public
55+
export type InitialObjects<T extends ContainerSchema> = {
56+
[K in keyof T["initialObjects"]]: T["initialObjects"][K] extends SharedObjectKind<infer TChannel> ? TChannel : never;
57+
};
58+
59+
// @public
60+
export interface IServiceAudience<M extends IMember> extends IEventProvider<IServiceAudienceEvents<M>> {
61+
getMembers(): ReadonlyMap<string, M>;
62+
getMyself(): Myself<M> | undefined;
63+
}
64+
65+
// @public
66+
export interface IServiceAudienceEvents<M extends IMember> extends IEvent {
67+
// @eventProperty
68+
(event: "membersChanged", listener: () => void): void;
69+
// @eventProperty
70+
(event: "memberAdded", listener: MemberChangedListener<M>): void;
71+
// @eventProperty
72+
(event: "memberRemoved", listener: MemberChangedListener<M>): void;
73+
}
74+
75+
// @public
76+
export type MemberChangedListener<M extends IMember> = (clientId: string, member: M) => void;
77+
78+
// @public
79+
export type Myself<M extends IMember = IMember> = M & {
80+
readonly currentConnection: string;
81+
};
82+
83+
```

packages/framework/fluid-static/package.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,16 @@
2323
"default": "./dist/index.js"
2424
}
2525
},
26+
"./legacy": {
27+
"import": {
28+
"types": "./lib/legacy.d.ts",
29+
"default": "./lib/index.js"
30+
},
31+
"require": {
32+
"types": "./dist/legacy.d.ts",
33+
"default": "./dist/index.js"
34+
}
35+
},
2636
"./internal": {
2737
"import": {
2838
"types": "./lib/index.d.ts",
@@ -41,6 +51,9 @@
4151
"api-extractor:commonjs": "flub generate entrypoints --outDir ./dist",
4252
"api-extractor:esnext": "flub generate entrypoints --outDir ./lib --node10TypeCompat",
4353
"build": "fluid-build . --task build",
54+
"build:api-reports": "concurrently \"npm:build:api-reports:*\"",
55+
"build:api-reports:current": "api-extractor run --local --config api-extractor/api-extractor.current.json",
56+
"build:api-reports:legacy": "api-extractor run --local --config api-extractor/api-extractor.legacy.json",
4457
"build:commonjs": "fluid-build . --task commonjs",
4558
"build:compile": "fluid-build . --task compile",
4659
"build:docs": "api-extractor run --local",
@@ -52,9 +65,14 @@
5265
"check:biome": "biome check .",
5366
"check:exports": "concurrently \"npm:check:exports:*\"",
5467
"check:exports:bundle-release-tags": "api-extractor run --config api-extractor/api-extractor-lint-bundle.json",
68+
"check:exports:cjs:legacy": "api-extractor run --config api-extractor/api-extractor-lint-legacy.cjs.json",
5569
"check:exports:cjs:public": "api-extractor run --config api-extractor/api-extractor-lint-public.cjs.json",
70+
"check:exports:esm:legacy": "api-extractor run --config api-extractor/api-extractor-lint-legacy.esm.json",
5671
"check:exports:esm:public": "api-extractor run --config api-extractor/api-extractor-lint-public.esm.json",
5772
"check:format": "npm run check:biome",
73+
"ci:build:api-reports": "concurrently \"npm:ci:build:api-reports:*\"",
74+
"ci:build:api-reports:current": "api-extractor run --config api-extractor/api-extractor.current.json",
75+
"ci:build:api-reports:legacy": "api-extractor run --config api-extractor/api-extractor.legacy.json",
5876
"ci:build:docs": "api-extractor run",
5977
"clean": "rimraf --glob dist lib {alpha,beta,internal,legacy}.d.ts \"**/*.tsbuildinfo\" \"**/*.build.log\" _api-extractor-temp nyc",
6078
"eslint": "eslint --format stylish src",

0 commit comments

Comments
 (0)