@fluidframework/aqueduct 2.0.0-dev.2.3.0.115467 → 2.0.0-dev.4.1.0.148229
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/README.md +29 -29
- package/dist/container-runtime-factories/baseContainerRuntimeFactory.d.ts +9 -5
- package/dist/container-runtime-factories/baseContainerRuntimeFactory.d.ts.map +1 -1
- package/dist/container-runtime-factories/baseContainerRuntimeFactory.js +20 -7
- package/dist/container-runtime-factories/baseContainerRuntimeFactory.js.map +1 -1
- package/dist/container-runtime-factories/containerRuntimeFactoryWithDefaultDataStore.d.ts +2 -1
- package/dist/container-runtime-factories/containerRuntimeFactoryWithDefaultDataStore.d.ts.map +1 -1
- package/dist/container-runtime-factories/containerRuntimeFactoryWithDefaultDataStore.js +2 -5
- package/dist/container-runtime-factories/containerRuntimeFactoryWithDefaultDataStore.js.map +1 -1
- package/dist/data-object-factories/dataObjectFactory.d.ts.map +1 -1
- package/dist/data-object-factories/dataObjectFactory.js.map +1 -1
- package/dist/data-object-factories/pureDataObjectFactory.d.ts.map +1 -1
- package/dist/data-object-factories/pureDataObjectFactory.js +4 -2
- package/dist/data-object-factories/pureDataObjectFactory.js.map +1 -1
- package/dist/data-objects/dataObject.d.ts.map +1 -1
- package/dist/data-objects/dataObject.js +1 -1
- package/dist/data-objects/dataObject.js.map +1 -1
- package/dist/data-objects/pureDataObject.d.ts +1 -6
- package/dist/data-objects/pureDataObject.d.ts.map +1 -1
- package/dist/data-objects/pureDataObject.js +15 -14
- package/dist/data-objects/pureDataObject.js.map +1 -1
- package/dist/data-objects/types.d.ts.map +1 -1
- package/dist/data-objects/types.js.map +1 -1
- package/dist/index.d.ts +2 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -6
- package/dist/index.js.map +1 -1
- package/dist/request-handlers/requestHandlers.d.ts +1 -1
- package/dist/request-handlers/requestHandlers.d.ts.map +1 -1
- package/dist/request-handlers/requestHandlers.js +4 -2
- package/dist/request-handlers/requestHandlers.js.map +1 -1
- package/dist/test/defaultRoute.spec.js +3 -1
- package/dist/test/defaultRoute.spec.js.map +1 -1
- package/dist/test/tsconfig.tsbuildinfo +1 -1
- package/dist/test/types/validateAqueductPrevious.generated.js +8 -18
- package/dist/test/types/validateAqueductPrevious.generated.js.map +1 -1
- package/dist/utils/containerInteractions.d.ts.map +1 -1
- package/dist/utils/containerInteractions.js.map +1 -1
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -3
- package/dist/utils/index.js.map +1 -1
- package/lib/container-runtime-factories/baseContainerRuntimeFactory.js +22 -9
- package/lib/container-runtime-factories/baseContainerRuntimeFactory.js.map +1 -1
- package/lib/container-runtime-factories/containerRuntimeFactoryWithDefaultDataStore.js +2 -5
- package/lib/container-runtime-factories/containerRuntimeFactoryWithDefaultDataStore.js.map +1 -1
- package/lib/data-object-factories/dataObjectFactory.js +1 -1
- package/lib/data-object-factories/dataObjectFactory.js.map +1 -1
- package/lib/data-object-factories/pureDataObjectFactory.js +4 -2
- package/lib/data-object-factories/pureDataObjectFactory.js.map +1 -1
- package/lib/data-objects/dataObject.js +1 -1
- package/lib/data-objects/dataObject.js.map +1 -1
- package/lib/data-objects/pureDataObject.js +15 -14
- package/lib/data-objects/pureDataObject.js.map +1 -1
- package/lib/data-objects/types.js.map +1 -1
- package/lib/index.js +2 -3
- package/lib/index.js.map +1 -1
- package/lib/request-handlers/requestHandlers.js +4 -2
- package/lib/request-handlers/requestHandlers.js.map +1 -1
- package/lib/utils/containerInteractions.js.map +1 -1
- package/lib/utils/index.js +0 -1
- package/lib/utils/index.js.map +1 -1
- package/package.json +58 -58
- package/dist/container-services/containerServices.d.ts +0 -27
- package/dist/container-services/containerServices.d.ts.map +0 -1
- package/dist/container-services/containerServices.js +0 -84
- package/dist/container-services/containerServices.js.map +0 -1
- package/dist/container-services/index.d.ts +0 -6
- package/dist/container-services/index.d.ts.map +0 -1
- package/dist/container-services/index.js +0 -12
- package/dist/container-services/index.js.map +0 -1
- package/dist/test/containerServices.spec.js +0 -121
- package/dist/test/containerServices.spec.js.map +0 -1
- package/dist/utils/attachUtils.d.ts +0 -7
- package/dist/utils/attachUtils.d.ts.map +0 -1
- package/dist/utils/attachUtils.js +0 -20
- package/dist/utils/attachUtils.js.map +0 -1
- package/lib/container-services/containerServices.js +0 -79
- package/lib/container-services/containerServices.js.map +0 -1
- package/lib/container-services/index.js +0 -6
- package/lib/container-services/index.js.map +0 -1
- package/lib/utils/attachUtils.js +0 -16
- package/lib/utils/attachUtils.js.map +0 -1
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*!
|
|
3
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
4
|
-
* Licensed under the MIT License.
|
|
5
|
-
*/
|
|
6
|
-
/* eslint-disable @typescript-eslint/consistent-type-assertions */
|
|
7
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
8
|
-
const assert_1 = require("assert");
|
|
9
|
-
const runtime_utils_1 = require("@fluidframework/runtime-utils");
|
|
10
|
-
const container_services_1 = require("../container-services");
|
|
11
|
-
class ContainerServiceMock extends container_services_1.BaseContainerService {
|
|
12
|
-
constructor() {
|
|
13
|
-
super(...arguments);
|
|
14
|
-
this.route = "";
|
|
15
|
-
}
|
|
16
|
-
async request(request) {
|
|
17
|
-
this.route = request.url;
|
|
18
|
-
return {
|
|
19
|
-
status: 200,
|
|
20
|
-
mimeType: "fluid/object",
|
|
21
|
-
value: this,
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
describe("Routerlicious", () => {
|
|
26
|
-
describe("Aqueduct", () => {
|
|
27
|
-
describe("generateContainerServicesRequestHandler", () => {
|
|
28
|
-
it(`Request to ${container_services_1.serviceRoutePathRoot} and no id should fail`, async () => {
|
|
29
|
-
const requestHandler = (0, container_services_1.generateContainerServicesRequestHandler)([]);
|
|
30
|
-
const requestParser = runtime_utils_1.RequestParser.create({ url: `/${container_services_1.serviceRoutePathRoot}` });
|
|
31
|
-
const response = await requestHandler(requestParser, {});
|
|
32
|
-
(0, assert_1.strict)(response, "Response returned");
|
|
33
|
-
(0, assert_1.strict)((response === null || response === void 0 ? void 0 : response.status) === 400, "Returned 400 Status Code");
|
|
34
|
-
});
|
|
35
|
-
it("Unknown service should return 404 with no services", async () => {
|
|
36
|
-
const requestHandler = (0, container_services_1.generateContainerServicesRequestHandler)([]);
|
|
37
|
-
const requestParser = runtime_utils_1.RequestParser.create({ url: `/${container_services_1.serviceRoutePathRoot}/id1` });
|
|
38
|
-
const response = await requestHandler(requestParser, {});
|
|
39
|
-
(0, assert_1.strict)(response, "Response returned");
|
|
40
|
-
(0, assert_1.strict)((response === null || response === void 0 ? void 0 : response.status) === 404, "Returned 404 Status Code");
|
|
41
|
-
});
|
|
42
|
-
it("Unknown service should return 404 with services", async () => {
|
|
43
|
-
const requestHandler = (0, container_services_1.generateContainerServicesRequestHandler)([
|
|
44
|
-
["id1", async (r) => new ContainerServiceMock(r)],
|
|
45
|
-
]);
|
|
46
|
-
const requestParser = runtime_utils_1.RequestParser.create({ url: `/${container_services_1.serviceRoutePathRoot}/id2` });
|
|
47
|
-
const response = await requestHandler(requestParser, {});
|
|
48
|
-
(0, assert_1.strict)(response, "Response returned");
|
|
49
|
-
(0, assert_1.strict)((response === null || response === void 0 ? void 0 : response.status) === 404, "Returned 404 Status Code");
|
|
50
|
-
});
|
|
51
|
-
it("Request to non-routeable service with sub-route should fail", async () => {
|
|
52
|
-
const requestHandler = (0, container_services_1.generateContainerServicesRequestHandler)([
|
|
53
|
-
["id1", async (r) => { return {}; }],
|
|
54
|
-
]);
|
|
55
|
-
const requestParser = runtime_utils_1.RequestParser.create({ url: `/${container_services_1.serviceRoutePathRoot}/id1/subroute` });
|
|
56
|
-
const response = await requestHandler(requestParser, {});
|
|
57
|
-
(0, assert_1.strict)(response, "Response returned");
|
|
58
|
-
(0, assert_1.strict)((response === null || response === void 0 ? void 0 : response.status) === 400, "Returned 400 Status Code");
|
|
59
|
-
});
|
|
60
|
-
it("Correct service should be returned with single service", async () => {
|
|
61
|
-
const service1 = new ContainerServiceMock({});
|
|
62
|
-
const serviceMap = new Map();
|
|
63
|
-
serviceMap.set("id1", async (r) => service1);
|
|
64
|
-
const requestHandler = (0, container_services_1.generateContainerServicesRequestHandler)(serviceMap);
|
|
65
|
-
const requestParser = runtime_utils_1.RequestParser.create({ url: `/${container_services_1.serviceRoutePathRoot}/id1` });
|
|
66
|
-
const response = await requestHandler(requestParser, {});
|
|
67
|
-
(0, assert_1.strict)(response, "Response returned");
|
|
68
|
-
(0, assert_1.strict)((response === null || response === void 0 ? void 0 : response.status) === 200, "Returned 200 Status Code");
|
|
69
|
-
(0, assert_1.strict)((response === null || response === void 0 ? void 0 : response.value) === service1, "Returned expected service");
|
|
70
|
-
});
|
|
71
|
-
it("Same service should be returned twice with two calls", async () => {
|
|
72
|
-
const requestHandler = (0, container_services_1.generateContainerServicesRequestHandler)([
|
|
73
|
-
["id1", async (r) => new ContainerServiceMock(r)],
|
|
74
|
-
]);
|
|
75
|
-
const requestParser = runtime_utils_1.RequestParser.create({ url: `/${container_services_1.serviceRoutePathRoot}/id1` });
|
|
76
|
-
const response1 = await requestHandler(requestParser, {});
|
|
77
|
-
const response2 = await requestHandler(requestParser, {});
|
|
78
|
-
(0, assert_1.strict)((response1 === null || response1 === void 0 ? void 0 : response1.value) === (response2 === null || response2 === void 0 ? void 0 : response2.value), "Returned same service twice");
|
|
79
|
-
});
|
|
80
|
-
it("Correct service should be returned with multiple services", async () => {
|
|
81
|
-
const service2 = new ContainerServiceMock({});
|
|
82
|
-
const requestHandler = (0, container_services_1.generateContainerServicesRequestHandler)([
|
|
83
|
-
["id1", async (r) => new ContainerServiceMock(r)],
|
|
84
|
-
["id2", async (r) => service2],
|
|
85
|
-
]);
|
|
86
|
-
const requestParser = runtime_utils_1.RequestParser.create({ url: `/${container_services_1.serviceRoutePathRoot}/id2` });
|
|
87
|
-
const response = await requestHandler(requestParser, {});
|
|
88
|
-
(0, assert_1.strict)(response, "Response returned");
|
|
89
|
-
(0, assert_1.strict)((response === null || response === void 0 ? void 0 : response.status) === 200, "Returned 200 Status Code");
|
|
90
|
-
(0, assert_1.strict)((response === null || response === void 0 ? void 0 : response.value) === service2, "Returned expected service");
|
|
91
|
-
});
|
|
92
|
-
it("Last registered service should be returned with multiple services of the same name", async () => {
|
|
93
|
-
const service1 = new ContainerServiceMock({});
|
|
94
|
-
const requestHandler = (0, container_services_1.generateContainerServicesRequestHandler)([
|
|
95
|
-
["id1", async (r) => new ContainerServiceMock(r)],
|
|
96
|
-
["id1", async (r) => new ContainerServiceMock(r)],
|
|
97
|
-
["id1", async (r) => new ContainerServiceMock(r)],
|
|
98
|
-
["id1", async (r) => new ContainerServiceMock(r)],
|
|
99
|
-
["id1", async (r) => new ContainerServiceMock(r)],
|
|
100
|
-
["id1", async (r) => service1],
|
|
101
|
-
]);
|
|
102
|
-
const requestParser = runtime_utils_1.RequestParser.create({ url: `/${container_services_1.serviceRoutePathRoot}/id1` });
|
|
103
|
-
const response = await requestHandler(requestParser, {});
|
|
104
|
-
(0, assert_1.strict)(response, "Response returned");
|
|
105
|
-
(0, assert_1.strict)((response === null || response === void 0 ? void 0 : response.status) === 200, "Returned 200 Status Code");
|
|
106
|
-
(0, assert_1.strict)((response === null || response === void 0 ? void 0 : response.value) === service1, "Returned expected service");
|
|
107
|
-
});
|
|
108
|
-
it("Sub-route should be persisted through", async () => {
|
|
109
|
-
const service1 = new ContainerServiceMock({});
|
|
110
|
-
const requestHandler = (0, container_services_1.generateContainerServicesRequestHandler)([["id1", async (r) => service1]]);
|
|
111
|
-
const requestParser = runtime_utils_1.RequestParser.create({ url: `/${container_services_1.serviceRoutePathRoot}/id1/sub1` });
|
|
112
|
-
const response = await requestHandler(requestParser, {});
|
|
113
|
-
(0, assert_1.strict)(response, "Response returned");
|
|
114
|
-
(0, assert_1.strict)((response === null || response === void 0 ? void 0 : response.status) === 200, "Returned 200 Status Code");
|
|
115
|
-
(0, assert_1.strict)((response === null || response === void 0 ? void 0 : response.value) === service1, "Returned expected service");
|
|
116
|
-
(0, assert_1.strict)((response === null || response === void 0 ? void 0 : response.value).route === "/sub1", "sub-route persisted");
|
|
117
|
-
});
|
|
118
|
-
});
|
|
119
|
-
});
|
|
120
|
-
});
|
|
121
|
-
//# sourceMappingURL=containerServices.spec.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"containerServices.spec.js","sourceRoot":"","sources":["../../src/test/containerServices.spec.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/* eslint-disable @typescript-eslint/consistent-type-assertions */\n\nimport { strict as assert } from \"assert\";\nimport { IRequest, IResponse } from \"@fluidframework/core-interfaces\";\nimport { IContainerRuntime } from \"@fluidframework/container-runtime-definitions\";\nimport { RequestParser } from \"@fluidframework/runtime-utils\";\nimport {\n BaseContainerService,\n generateContainerServicesRequestHandler,\n serviceRoutePathRoot,\n} from \"../container-services\";\n\nclass ContainerServiceMock extends BaseContainerService {\n public route: string = \"\";\n\n public async request(request: IRequest): Promise<IResponse> {\n this.route = request.url;\n return {\n status: 200,\n mimeType: \"fluid/object\",\n value: this,\n };\n }\n}\n\ndescribe(\"Routerlicious\", () => {\n describe(\"Aqueduct\", () => {\n describe(\"generateContainerServicesRequestHandler\", () => {\n it(`Request to ${serviceRoutePathRoot} and no id should fail`, async () => {\n const requestHandler = generateContainerServicesRequestHandler([]);\n const requestParser = RequestParser.create({ url: `/${serviceRoutePathRoot}` });\n\n const response = await requestHandler(requestParser, {} as IContainerRuntime);\n\n assert(response, \"Response returned\");\n assert(response?.status === 400, \"Returned 400 Status Code\");\n });\n\n it(\"Unknown service should return 404 with no services\", async () => {\n const requestHandler = generateContainerServicesRequestHandler([]);\n const requestParser = RequestParser.create({ url: `/${serviceRoutePathRoot}/id1` });\n\n const response = await requestHandler(requestParser, {} as IContainerRuntime);\n\n assert(response, \"Response returned\");\n assert(response?.status === 404, \"Returned 404 Status Code\");\n });\n\n it(\"Unknown service should return 404 with services\", async () => {\n const requestHandler = generateContainerServicesRequestHandler([\n [\"id1\", async (r) => new ContainerServiceMock(r)],\n ]);\n const requestParser = RequestParser.create({ url: `/${serviceRoutePathRoot}/id2` });\n\n const response = await requestHandler(requestParser, {} as IContainerRuntime);\n\n assert(response, \"Response returned\");\n assert(response?.status === 404, \"Returned 404 Status Code\");\n });\n\n it(\"Request to non-routeable service with sub-route should fail\", async () => {\n const requestHandler = generateContainerServicesRequestHandler([\n [\"id1\", async (r) => { return {}; }],\n ]);\n const requestParser = RequestParser.create({ url: `/${serviceRoutePathRoot}/id1/subroute` });\n\n const response = await requestHandler(requestParser, {} as IContainerRuntime);\n\n assert(response, \"Response returned\");\n assert(response?.status === 400, \"Returned 400 Status Code\");\n });\n\n it(\"Correct service should be returned with single service\", async () => {\n const service1 = new ContainerServiceMock({} as IContainerRuntime);\n const serviceMap = new Map();\n serviceMap.set(\"id1\", async (r) => service1);\n const requestHandler = generateContainerServicesRequestHandler(serviceMap);\n const requestParser = RequestParser.create({ url: `/${serviceRoutePathRoot}/id1` });\n\n const response = await requestHandler(requestParser, {} as IContainerRuntime);\n\n assert(response, \"Response returned\");\n assert(response?.status === 200, \"Returned 200 Status Code\");\n assert(response?.value === service1, \"Returned expected service\");\n });\n\n it(\"Same service should be returned twice with two calls\", async () => {\n const requestHandler = generateContainerServicesRequestHandler([\n [\"id1\", async (r) => new ContainerServiceMock(r)],\n ]);\n const requestParser = RequestParser.create({ url: `/${serviceRoutePathRoot}/id1` });\n\n const response1 = await requestHandler(requestParser, {} as IContainerRuntime);\n const response2 = await requestHandler(requestParser, {} as IContainerRuntime);\n\n assert(response1?.value === response2?.value, \"Returned same service twice\");\n });\n\n it(\"Correct service should be returned with multiple services\", async () => {\n const service2 = new ContainerServiceMock({} as IContainerRuntime);\n const requestHandler = generateContainerServicesRequestHandler([\n [\"id1\", async (r) => new ContainerServiceMock(r)],\n [\"id2\", async (r) => service2],\n ]);\n const requestParser = RequestParser.create({ url: `/${serviceRoutePathRoot}/id2` });\n\n const response = await requestHandler(requestParser, {} as IContainerRuntime);\n\n assert(response, \"Response returned\");\n assert(response?.status === 200, \"Returned 200 Status Code\");\n assert(response?.value === service2, \"Returned expected service\");\n });\n\n it(\"Last registered service should be returned with multiple services of the same name\", async () => {\n const service1 = new ContainerServiceMock({} as IContainerRuntime);\n const requestHandler = generateContainerServicesRequestHandler([\n [\"id1\", async (r) => new ContainerServiceMock(r)],\n [\"id1\", async (r) => new ContainerServiceMock(r)],\n [\"id1\", async (r) => new ContainerServiceMock(r)],\n [\"id1\", async (r) => new ContainerServiceMock(r)],\n [\"id1\", async (r) => new ContainerServiceMock(r)],\n [\"id1\", async (r) => service1],\n ]);\n const requestParser = RequestParser.create({ url: `/${serviceRoutePathRoot}/id1` });\n\n const response = await requestHandler(requestParser, {} as IContainerRuntime);\n\n assert(response, \"Response returned\");\n assert(response?.status === 200, \"Returned 200 Status Code\");\n assert(response?.value === service1, \"Returned expected service\");\n });\n\n it(\"Sub-route should be persisted through\", async () => {\n const service1 = new ContainerServiceMock({} as IContainerRuntime);\n const requestHandler = generateContainerServicesRequestHandler([[\"id1\", async (r) => service1]]);\n const requestParser = RequestParser.create({ url: `/${serviceRoutePathRoot}/id1/sub1` });\n\n const response = await requestHandler(requestParser, {} as IContainerRuntime);\n\n assert(response, \"Response returned\");\n assert(response?.status === 200, \"Returned 200 Status Code\");\n assert(response?.value === service1, \"Returned expected service\");\n assert((response?.value as ContainerServiceMock).route === \"/sub1\", \"sub-route persisted\");\n });\n });\n });\n});\n"]}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { IFluidDataStoreRuntime } from "@fluidframework/datastore-definitions";
|
|
6
|
-
export declare function waitForAttach(dataStoreRuntime: IFluidDataStoreRuntime): Promise<void>;
|
|
7
|
-
//# sourceMappingURL=attachUtils.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attachUtils.d.ts","sourceRoot":"","sources":["../../src/utils/attachUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAG/E,wBAAsB,aAAa,CAAC,gBAAgB,EAAE,sBAAsB,GAAG,OAAO,CAAC,IAAI,CAAC,CAY3F"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/*!
|
|
3
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
4
|
-
* Licensed under the MIT License.
|
|
5
|
-
*/
|
|
6
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.waitForAttach = void 0;
|
|
8
|
-
const container_definitions_1 = require("@fluidframework/container-definitions");
|
|
9
|
-
async function waitForAttach(dataStoreRuntime) {
|
|
10
|
-
if (dataStoreRuntime.attachState === container_definitions_1.AttachState.Attached) {
|
|
11
|
-
return;
|
|
12
|
-
}
|
|
13
|
-
return new Promise((resolve) => {
|
|
14
|
-
dataStoreRuntime.once("attached", () => {
|
|
15
|
-
Promise.resolve().then(() => resolve()).catch(() => { });
|
|
16
|
-
});
|
|
17
|
-
});
|
|
18
|
-
}
|
|
19
|
-
exports.waitForAttach = waitForAttach;
|
|
20
|
-
//# sourceMappingURL=attachUtils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attachUtils.js","sourceRoot":"","sources":["../../src/utils/attachUtils.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAGH,iFAAoE;AAE7D,KAAK,UAAU,aAAa,CAAC,gBAAwC;IACxE,IAAI,gBAAgB,CAAC,WAAW,KAAK,mCAAW,CAAC,QAAQ,EAAE;QACvD,OAAO;KACV;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,gBAAgB,CAAC,IAAI,CACjB,UAAU,EACV,GAAG,EAAE;YACD,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACP,CAAC;AAZD,sCAYC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IFluidDataStoreRuntime } from \"@fluidframework/datastore-definitions\";\nimport { AttachState } from \"@fluidframework/container-definitions\";\n\nexport async function waitForAttach(dataStoreRuntime: IFluidDataStoreRuntime): Promise<void> {\n if (dataStoreRuntime.attachState === AttachState.Attached) {\n return;\n }\n\n return new Promise((resolve) => {\n dataStoreRuntime.once(\n \"attached\",\n () => {\n Promise.resolve().then(() => resolve()).catch(() => { });\n });\n });\n}\n"]}
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { create404Response, createResponseError, } from "@fluidframework/runtime-utils";
|
|
6
|
-
// TODO: should this just be "s"?
|
|
7
|
-
export const serviceRoutePathRoot = "_services";
|
|
8
|
-
/**
|
|
9
|
-
* This class is a simple starter class for building a Container Service. It simply provides routing
|
|
10
|
-
*/
|
|
11
|
-
export class BaseContainerService {
|
|
12
|
-
constructor(runtime) {
|
|
13
|
-
this.runtime = runtime;
|
|
14
|
-
}
|
|
15
|
-
get IFluidRouter() { return this; }
|
|
16
|
-
async request(request) {
|
|
17
|
-
return {
|
|
18
|
-
status: 200,
|
|
19
|
-
mimeType: "fluid/object",
|
|
20
|
-
value: this,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
/**
|
|
25
|
-
* ContainerService Factory that will only create one instance of the service for the Container.
|
|
26
|
-
*/
|
|
27
|
-
class SingletonContainerServiceFactory {
|
|
28
|
-
constructor(serviceFn) {
|
|
29
|
-
this.serviceFn = serviceFn;
|
|
30
|
-
}
|
|
31
|
-
async getService(runtime) {
|
|
32
|
-
if (!this.service) {
|
|
33
|
-
this.service = this.serviceFn(runtime);
|
|
34
|
-
}
|
|
35
|
-
return this.service;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Given a collection of IContainerServices will produce a RequestHandler for them all
|
|
40
|
-
* @param serviceRegistry - Collection of Container Services
|
|
41
|
-
*/
|
|
42
|
-
export const generateContainerServicesRequestHandler = (serviceRegistry) => {
|
|
43
|
-
const factories = new Map();
|
|
44
|
-
new Map(serviceRegistry).forEach((fn, id) => {
|
|
45
|
-
factories.set(id, new SingletonContainerServiceFactory(fn));
|
|
46
|
-
});
|
|
47
|
-
return async (request, runtime) => {
|
|
48
|
-
if (request.pathParts[0] !== serviceRoutePathRoot) {
|
|
49
|
-
// If the request is not for a service we return undefined so the next handler can use it
|
|
50
|
-
return undefined;
|
|
51
|
-
}
|
|
52
|
-
if (request.pathParts.length < 2) {
|
|
53
|
-
// If there is not service to route to then return a failure
|
|
54
|
-
return createResponseError(400, "request did not specify a service to route to", request);
|
|
55
|
-
}
|
|
56
|
-
const factory = factories.get(request.pathParts[1]);
|
|
57
|
-
if (!factory) {
|
|
58
|
-
// If we can't find a registry entry then return
|
|
59
|
-
return create404Response(request);
|
|
60
|
-
}
|
|
61
|
-
const service = await factory.getService(runtime);
|
|
62
|
-
const router = service.IFluidRouter;
|
|
63
|
-
const subRequest = request.createSubRequest(2);
|
|
64
|
-
if (router) {
|
|
65
|
-
return router.request(subRequest);
|
|
66
|
-
}
|
|
67
|
-
if (!request.isLeaf(2)) {
|
|
68
|
-
// If there is not terminating route but a sub-route was requested then we will fail.
|
|
69
|
-
return createResponseError(400, "request sub-url for service that doesn't support routing", request);
|
|
70
|
-
}
|
|
71
|
-
// Otherwise we will just return the service
|
|
72
|
-
return {
|
|
73
|
-
status: 200,
|
|
74
|
-
mimeType: "fluid/object",
|
|
75
|
-
value: service,
|
|
76
|
-
};
|
|
77
|
-
};
|
|
78
|
-
};
|
|
79
|
-
//# sourceMappingURL=containerServices.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"containerServices.js","sourceRoot":"","sources":["../../src/container-services/containerServices.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,EAEH,iBAAiB,EACjB,mBAAmB,GACtB,MAAM,+BAA+B,CAAC;AAEvC,iCAAiC;AACjC,MAAM,CAAC,MAAM,oBAAoB,GAAG,WAAW,CAAC;AAKhD;;GAEG;AACH,MAAM,OAAgB,oBAAoB;IAGtC,YAA+B,OAA0B;QAA1B,YAAO,GAAP,OAAO,CAAmB;IACzD,CAAC;IAHD,IAAW,YAAY,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAKnC,KAAK,CAAC,OAAO,CAAC,OAAiB;QAClC,OAAO;YACH,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,cAAc;YACxB,KAAK,EAAE,IAAI;SACd,CAAC;IACN,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,gCAAgC;IAGlC,YACqB,SAA+D;QAA/D,cAAS,GAAT,SAAS,CAAsD;IAChF,CAAC;IAEE,KAAK,CAAC,UAAU,CAAC,OAA0B;QAC9C,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;SAC1C;QACD,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;CACJ;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,uCAAuC,GAChD,CAAC,eAAgD,EAAyB,EAAE;IACxE,MAAM,SAAS,GAAkD,IAAI,GAAG,EAAE,CAAC;IAC3E,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;QACxC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,gCAAgC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChE,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,EAAE,OAAsB,EAAE,OAA0B,EAAE,EAAE;QAChE,IAAI,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,oBAAoB,EAAE;YAC/C,yFAAyF;YACzF,OAAO,SAAS,CAAC;SACpB;QAED,IAAI,OAAO,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;YAC9B,4DAA4D;YAC5D,OAAO,mBAAmB,CAAC,GAAG,EAAE,+CAA+C,EAAE,OAAO,CAAC,CAAC;SAC7F;QAED,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,IAAI,CAAC,OAAO,EAAE;YACV,gDAAgD;YAChD,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;SACrC;QAED,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;QACpC,MAAM,UAAU,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,MAAM,EAAE;YACR,OAAO,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;SACrC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE;YACpB,qFAAqF;YACrF,OAAO,mBAAmB,CAAC,GAAG,EAAE,0DAA0D,EAAE,OAAO,CAAC,CAAC;SACxG;QAED,4CAA4C;QAC5C,OAAO;YACH,MAAM,EAAE,GAAG;YACX,QAAQ,EAAE,cAAc;YACxB,KAAK,EAAE,OAAO;SACjB,CAAC;IACN,CAAC,CAAC;AACN,CAAC,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IResponse, IFluidRouter, IRequest, FluidObject } from \"@fluidframework/core-interfaces\";\nimport { IContainerRuntime } from \"@fluidframework/container-runtime-definitions\";\nimport { RuntimeRequestHandler } from \"@fluidframework/request-handler\";\nimport {\n RequestParser,\n create404Response,\n createResponseError,\n} from \"@fluidframework/runtime-utils\";\n\n// TODO: should this just be \"s\"?\nexport const serviceRoutePathRoot = \"_services\";\n\nexport type ContainerServiceRegistryEntries = Iterable<[string, (runtime: IContainerRuntime) =>\n Promise<FluidObject>]>;\n\n/**\n * This class is a simple starter class for building a Container Service. It simply provides routing\n */\nexport abstract class BaseContainerService implements IFluidRouter {\n public get IFluidRouter() { return this; }\n\n constructor(protected readonly runtime: IContainerRuntime) {\n }\n\n public async request(request: IRequest): Promise<IResponse> {\n return {\n status: 200,\n mimeType: \"fluid/object\",\n value: this,\n };\n }\n}\n\n/**\n * ContainerService Factory that will only create one instance of the service for the Container.\n */\nclass SingletonContainerServiceFactory {\n private service: Promise<FluidObject> | undefined;\n\n public constructor(\n private readonly serviceFn: (runtime: IContainerRuntime) => Promise<FluidObject>,\n ) { }\n\n public async getService(runtime: IContainerRuntime): Promise<FluidObject<IFluidRouter>> {\n if (!this.service) {\n this.service = this.serviceFn(runtime);\n }\n return this.service;\n }\n}\n\n/**\n * Given a collection of IContainerServices will produce a RequestHandler for them all\n * @param serviceRegistry - Collection of Container Services\n */\nexport const generateContainerServicesRequestHandler =\n (serviceRegistry: ContainerServiceRegistryEntries): RuntimeRequestHandler => {\n const factories: Map<string, SingletonContainerServiceFactory> = new Map();\n new Map(serviceRegistry).forEach((fn, id) => {\n factories.set(id, new SingletonContainerServiceFactory(fn));\n });\n\n return async (request: RequestParser, runtime: IContainerRuntime) => {\n if (request.pathParts[0] !== serviceRoutePathRoot) {\n // If the request is not for a service we return undefined so the next handler can use it\n return undefined;\n }\n\n if (request.pathParts.length < 2) {\n // If there is not service to route to then return a failure\n return createResponseError(400, \"request did not specify a service to route to\", request);\n }\n\n const factory = factories.get(request.pathParts[1]);\n if (!factory) {\n // If we can't find a registry entry then return\n return create404Response(request);\n }\n\n const service = await factory.getService(runtime);\n const router = service.IFluidRouter;\n const subRequest = request.createSubRequest(2);\n if (router) {\n return router.request(subRequest);\n }\n\n if (!request.isLeaf(2)) {\n // If there is not terminating route but a sub-route was requested then we will fail.\n return createResponseError(400, \"request sub-url for service that doesn't support routing\", request);\n }\n\n // Otherwise we will just return the service\n return {\n status: 200,\n mimeType: \"fluid/object\",\n value: service,\n };\n };\n };\n"]}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
export { BaseContainerService, generateContainerServicesRequestHandler, serviceRoutePathRoot, } from "./containerServices";
|
|
6
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/container-services/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACN,oBAAoB,EAEpB,uCAAuC,EACvC,oBAAoB,GACpB,MAAM,qBAAqB,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nexport {\n\tBaseContainerService,\n\tContainerServiceRegistryEntries,\n\tgenerateContainerServicesRequestHandler,\n\tserviceRoutePathRoot,\n} from \"./containerServices\";\n"]}
|
package/lib/utils/attachUtils.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
/*!
|
|
2
|
-
* Copyright (c) Microsoft Corporation and contributors. All rights reserved.
|
|
3
|
-
* Licensed under the MIT License.
|
|
4
|
-
*/
|
|
5
|
-
import { AttachState } from "@fluidframework/container-definitions";
|
|
6
|
-
export async function waitForAttach(dataStoreRuntime) {
|
|
7
|
-
if (dataStoreRuntime.attachState === AttachState.Attached) {
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
return new Promise((resolve) => {
|
|
11
|
-
dataStoreRuntime.once("attached", () => {
|
|
12
|
-
Promise.resolve().then(() => resolve()).catch(() => { });
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=attachUtils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"attachUtils.js","sourceRoot":"","sources":["../../src/utils/attachUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAEpE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,gBAAwC;IACxE,IAAI,gBAAgB,CAAC,WAAW,KAAK,WAAW,CAAC,QAAQ,EAAE;QACvD,OAAO;KACV;IAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,gBAAgB,CAAC,IAAI,CACjB,UAAU,EACV,GAAG,EAAE;YACD,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;IACX,CAAC,CAAC,CAAC;AACP,CAAC","sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation and contributors. All rights reserved.\n * Licensed under the MIT License.\n */\n\nimport { IFluidDataStoreRuntime } from \"@fluidframework/datastore-definitions\";\nimport { AttachState } from \"@fluidframework/container-definitions\";\n\nexport async function waitForAttach(dataStoreRuntime: IFluidDataStoreRuntime): Promise<void> {\n if (dataStoreRuntime.attachState === AttachState.Attached) {\n return;\n }\n\n return new Promise((resolve) => {\n dataStoreRuntime.once(\n \"attached\",\n () => {\n Promise.resolve().then(() => resolve()).catch(() => { });\n });\n });\n}\n"]}
|