@fluidframework/runtime-utils 1.4.0-121020 → 2.0.0-dev-rc.1.0.0.225277
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 +5 -7
- package/.mocharc.js +12 -0
- package/CHANGELOG.md +191 -0
- package/README.md +68 -1
- package/api-extractor-esm.json +4 -0
- package/api-extractor-lint.json +4 -0
- package/api-extractor.json +2 -2
- package/api-report/runtime-utils.api.md +201 -0
- package/dist/{dataStoreHandleContextUtils.js → dataStoreHandleContextUtils.cjs} +5 -2
- package/dist/dataStoreHandleContextUtils.cjs.map +1 -0
- package/dist/dataStoreHandleContextUtils.d.ts +1 -0
- package/dist/dataStoreHandleContextUtils.d.ts.map +1 -1
- package/dist/{dataStoreHelpers.js → dataStoreHelpers.cjs} +44 -25
- package/dist/dataStoreHelpers.cjs.map +1 -0
- package/dist/dataStoreHelpers.d.ts +23 -4
- package/dist/dataStoreHelpers.d.ts.map +1 -1
- package/dist/index.cjs +44 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +9 -9
- package/dist/index.d.ts.map +1 -1
- package/dist/{objectstoragepartition.js → objectstoragepartition.cjs} +4 -3
- package/dist/objectstoragepartition.cjs.map +1 -0
- package/dist/objectstoragepartition.d.ts +1 -0
- package/dist/objectstoragepartition.d.ts.map +1 -1
- package/dist/{objectstorageutils.js → objectstorageutils.cjs} +11 -15
- package/dist/objectstorageutils.cjs.map +1 -0
- package/dist/objectstorageutils.d.ts +6 -0
- package/dist/objectstorageutils.d.ts.map +1 -1
- package/dist/{requestParser.js → requestParser.cjs} +7 -11
- package/dist/requestParser.cjs.map +1 -0
- package/dist/requestParser.d.ts +1 -0
- package/dist/requestParser.d.ts.map +1 -1
- package/dist/runtime-utils-alpha.d.ts +155 -0
- package/dist/runtime-utils-beta.d.ts +103 -0
- package/dist/runtime-utils-public.d.ts +103 -0
- package/dist/runtime-utils-untrimmed.d.ts +306 -0
- package/dist/{runtimeFactoryHelper.js → runtimeFactoryHelper.cjs} +11 -12
- package/dist/runtimeFactoryHelper.cjs.map +1 -0
- package/dist/runtimeFactoryHelper.d.ts +4 -1
- package/dist/runtimeFactoryHelper.d.ts.map +1 -1
- package/dist/{summaryUtils.js → summaryUtils.cjs} +138 -34
- package/dist/summaryUtils.cjs.map +1 -0
- package/dist/summaryUtils.d.ts +66 -4
- package/dist/summaryUtils.d.ts.map +1 -1
- package/dist/tsdoc-metadata.json +11 -0
- package/dist/unpackUsedRoutes.cjs +34 -0
- package/dist/unpackUsedRoutes.cjs.map +1 -0
- package/dist/unpackUsedRoutes.d.ts +12 -0
- package/dist/unpackUsedRoutes.d.ts.map +1 -0
- package/dist/{utils.js → utils.cjs} +2 -1
- package/dist/utils.cjs.map +1 -0
- package/dist/utils.d.ts +7 -2
- package/dist/utils.d.ts.map +1 -1
- package/lib/{dataStoreHandleContextUtils.d.ts → dataStoreHandleContextUtils.d.mts} +2 -1
- package/lib/dataStoreHandleContextUtils.d.mts.map +1 -0
- package/lib/{dataStoreHandleContextUtils.js → dataStoreHandleContextUtils.mjs} +5 -2
- package/lib/dataStoreHandleContextUtils.mjs.map +1 -0
- package/lib/{dataStoreHelpers.d.ts → dataStoreHelpers.d.mts} +24 -5
- package/lib/dataStoreHelpers.d.mts.map +1 -0
- package/lib/{dataStoreHelpers.js → dataStoreHelpers.mjs} +42 -22
- package/lib/dataStoreHelpers.mjs.map +1 -0
- package/lib/index.d.mts +14 -0
- package/lib/index.d.mts.map +1 -0
- package/lib/index.mjs +14 -0
- package/lib/index.mjs.map +1 -0
- package/lib/{objectstoragepartition.d.ts → objectstoragepartition.d.mts} +2 -1
- package/lib/objectstoragepartition.d.mts.map +1 -0
- package/lib/{objectstoragepartition.js → objectstoragepartition.mjs} +3 -2
- package/lib/objectstoragepartition.mjs.map +1 -0
- package/lib/{objectstorageutils.d.ts → objectstorageutils.d.mts} +7 -1
- package/lib/objectstorageutils.d.mts.map +1 -0
- package/lib/{objectstorageutils.js → objectstorageutils.mjs} +11 -15
- package/lib/objectstorageutils.mjs.map +1 -0
- package/lib/{requestParser.d.ts → requestParser.d.mts} +2 -5
- package/lib/requestParser.d.mts.map +1 -0
- package/lib/{requestParser.js → requestParser.mjs} +7 -11
- package/lib/requestParser.mjs.map +1 -0
- package/lib/runtime-utils-alpha.d.mts +155 -0
- package/lib/runtime-utils-beta.d.mts +103 -0
- package/lib/runtime-utils-public.d.mts +103 -0
- package/lib/runtime-utils-untrimmed.d.mts +306 -0
- package/lib/{runtimeFactoryHelper.d.ts → runtimeFactoryHelper.d.mts} +5 -2
- package/lib/runtimeFactoryHelper.d.mts.map +1 -0
- package/lib/runtimeFactoryHelper.mjs +24 -0
- package/lib/runtimeFactoryHelper.mjs.map +1 -0
- package/lib/{summaryUtils.d.ts → summaryUtils.d.mts} +67 -5
- package/lib/summaryUtils.d.mts.map +1 -0
- package/lib/{summaryUtils.js → summaryUtils.mjs} +129 -26
- package/lib/summaryUtils.mjs.map +1 -0
- package/lib/unpackUsedRoutes.d.mts +12 -0
- package/lib/unpackUsedRoutes.d.mts.map +1 -0
- package/lib/unpackUsedRoutes.mjs +30 -0
- package/lib/unpackUsedRoutes.mjs.map +1 -0
- package/lib/{utils.d.ts → utils.d.mts} +8 -3
- package/lib/utils.d.mts.map +1 -0
- package/lib/{utils.js → utils.mjs} +2 -1
- package/lib/utils.mjs.map +1 -0
- package/package.json +134 -65
- package/prettier.config.cjs +8 -0
- package/src/dataStoreHandleContextUtils.ts +24 -16
- package/src/dataStoreHelpers.ts +106 -83
- package/src/index.ts +31 -9
- package/src/objectstoragepartition.ts +18 -14
- package/src/objectstorageutils.ts +37 -36
- package/src/requestParser.ts +81 -86
- package/src/runtimeFactoryHelper.ts +27 -26
- package/src/summaryUtils.ts +425 -299
- package/src/unpackUsedRoutes.ts +31 -0
- package/src/utils.ts +12 -7
- package/tsc-multi.test.json +4 -0
- package/tsconfig.json +10 -12
- package/dist/dataStoreHandleContextUtils.js.map +0 -1
- package/dist/dataStoreHelpers.js.map +0 -1
- package/dist/index.js +0 -26
- package/dist/index.js.map +0 -1
- package/dist/objectstoragepartition.js.map +0 -1
- package/dist/objectstorageutils.js.map +0 -1
- package/dist/packageVersion.d.ts +0 -9
- package/dist/packageVersion.d.ts.map +0 -1
- package/dist/packageVersion.js +0 -12
- package/dist/packageVersion.js.map +0 -1
- package/dist/requestParser.js.map +0 -1
- package/dist/runtimeFactoryHelper.js.map +0 -1
- package/dist/summarizerNode/index.d.ts +0 -8
- package/dist/summarizerNode/index.d.ts.map +0 -1
- package/dist/summarizerNode/index.js +0 -12
- package/dist/summarizerNode/index.js.map +0 -1
- package/dist/summarizerNode/summarizerNode.d.ts +0 -139
- package/dist/summarizerNode/summarizerNode.d.ts.map +0 -1
- package/dist/summarizerNode/summarizerNode.js +0 -480
- package/dist/summarizerNode/summarizerNode.js.map +0 -1
- package/dist/summarizerNode/summarizerNodeUtils.d.ts +0 -161
- package/dist/summarizerNode/summarizerNodeUtils.d.ts.map +0 -1
- package/dist/summarizerNode/summarizerNodeUtils.js +0 -225
- package/dist/summarizerNode/summarizerNodeUtils.js.map +0 -1
- package/dist/summarizerNode/summarizerNodeWithGc.d.ts +0 -133
- package/dist/summarizerNode/summarizerNodeWithGc.d.ts.map +0 -1
- package/dist/summarizerNode/summarizerNodeWithGc.js +0 -294
- package/dist/summarizerNode/summarizerNodeWithGc.js.map +0 -1
- package/dist/summaryUtils.js.map +0 -1
- package/dist/utils.js.map +0 -1
- package/lib/dataStoreHandleContextUtils.d.ts.map +0 -1
- package/lib/dataStoreHandleContextUtils.js.map +0 -1
- package/lib/dataStoreHelpers.d.ts.map +0 -1
- package/lib/dataStoreHelpers.js.map +0 -1
- package/lib/index.d.ts +0 -14
- package/lib/index.d.ts.map +0 -1
- package/lib/index.js +0 -14
- package/lib/index.js.map +0 -1
- package/lib/objectstoragepartition.d.ts.map +0 -1
- package/lib/objectstoragepartition.js.map +0 -1
- package/lib/objectstorageutils.d.ts.map +0 -1
- package/lib/objectstorageutils.js.map +0 -1
- package/lib/packageVersion.d.ts +0 -9
- package/lib/packageVersion.d.ts.map +0 -1
- package/lib/packageVersion.js +0 -9
- package/lib/packageVersion.js.map +0 -1
- package/lib/requestParser.d.ts.map +0 -1
- package/lib/requestParser.js.map +0 -1
- package/lib/runtimeFactoryHelper.d.ts.map +0 -1
- package/lib/runtimeFactoryHelper.js +0 -25
- package/lib/runtimeFactoryHelper.js.map +0 -1
- package/lib/summarizerNode/index.d.ts +0 -8
- package/lib/summarizerNode/index.d.ts.map +0 -1
- package/lib/summarizerNode/index.js +0 -7
- package/lib/summarizerNode/index.js.map +0 -1
- package/lib/summarizerNode/summarizerNode.d.ts +0 -139
- package/lib/summarizerNode/summarizerNode.d.ts.map +0 -1
- package/lib/summarizerNode/summarizerNode.js +0 -475
- package/lib/summarizerNode/summarizerNode.js.map +0 -1
- package/lib/summarizerNode/summarizerNodeUtils.d.ts +0 -161
- package/lib/summarizerNode/summarizerNodeUtils.d.ts.map +0 -1
- package/lib/summarizerNode/summarizerNodeUtils.js +0 -216
- package/lib/summarizerNode/summarizerNodeUtils.js.map +0 -1
- package/lib/summarizerNode/summarizerNodeWithGc.d.ts +0 -133
- package/lib/summarizerNode/summarizerNodeWithGc.d.ts.map +0 -1
- package/lib/summarizerNode/summarizerNodeWithGc.js +0 -289
- package/lib/summarizerNode/summarizerNodeWithGc.js.map +0 -1
- package/lib/summaryUtils.d.ts.map +0 -1
- package/lib/summaryUtils.js.map +0 -1
- package/lib/utils.d.ts.map +0 -1
- package/lib/utils.js.map +0 -1
- package/src/packageVersion.ts +0 -9
- package/src/summarizerNode/index.ts +0 -8
- package/src/summarizerNode/summarizerNode.ts +0 -662
- package/src/summarizerNode/summarizerNodeUtils.ts +0 -339
- package/src/summarizerNode/summarizerNodeWithGc.ts +0 -459
- package/tsconfig.esnext.json +0 -7
|
@@ -5,44 +5,45 @@
|
|
|
5
5
|
|
|
6
6
|
import { ITree } from "@fluidframework/protocol-definitions";
|
|
7
7
|
|
|
8
|
+
/**
|
|
9
|
+
* @internal
|
|
10
|
+
*/
|
|
8
11
|
export function getNormalizedObjectStoragePathParts(path: string) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
12
|
+
let normalizePath = path;
|
|
13
|
+
if (normalizePath.startsWith("/")) {
|
|
14
|
+
normalizePath = normalizePath.substr(1);
|
|
15
|
+
}
|
|
16
|
+
if (normalizePath.endsWith("/")) {
|
|
17
|
+
normalizePath = normalizePath.substr(0, normalizePath.length - 1);
|
|
18
|
+
}
|
|
19
|
+
if (normalizePath.length > 0) {
|
|
20
|
+
return normalizePath.split("/");
|
|
21
|
+
}
|
|
22
|
+
return [];
|
|
20
23
|
}
|
|
21
24
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
25
|
+
/**
|
|
26
|
+
* @internal
|
|
27
|
+
*/
|
|
28
|
+
export async function listBlobsAtTreePath(
|
|
29
|
+
inputTree: ITree | undefined,
|
|
30
|
+
path: string,
|
|
31
|
+
): Promise<string[]> {
|
|
32
|
+
const pathParts = getNormalizedObjectStoragePathParts(path);
|
|
33
|
+
let tree: ITree | undefined = inputTree;
|
|
34
|
+
while (tree?.entries !== undefined && pathParts.length > 0) {
|
|
35
|
+
const part = pathParts.shift();
|
|
36
|
+
const treeEntry = tree.entries.find((value) => {
|
|
37
|
+
return value.type === "Tree" && value.path === part ? true : false;
|
|
38
|
+
});
|
|
34
39
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if (tree?.entries === undefined || pathParts.length !== 0) {
|
|
45
|
-
throw new Error("path does not exist");
|
|
46
|
-
}
|
|
47
|
-
return tree.entries.filter((e) => e.type === "Blob").map((e) => e.path);
|
|
40
|
+
// this check is largely superfluous due to the same check being done
|
|
41
|
+
// immediately above. the type system, however, is not aware of this.
|
|
42
|
+
// so we must redundantly determine that the entry's type is "Tree"
|
|
43
|
+
tree = treeEntry?.type === "Tree" ? treeEntry.value : undefined;
|
|
44
|
+
}
|
|
45
|
+
if (tree?.entries === undefined || pathParts.length !== 0) {
|
|
46
|
+
throw new Error("path does not exist");
|
|
47
|
+
}
|
|
48
|
+
return tree.entries.filter((e) => e.type === "Blob").map((e) => e.path);
|
|
48
49
|
}
|
package/src/requestParser.ts
CHANGED
|
@@ -6,100 +6,95 @@ import { IRequest, IRequestHeader } from "@fluidframework/core-interfaces";
|
|
|
6
6
|
|
|
7
7
|
/**
|
|
8
8
|
* The Request Parser takes an IRequest provides parsing and sub request creation
|
|
9
|
+
* @alpha
|
|
9
10
|
*/
|
|
10
11
|
export class RequestParser implements IRequest {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
[]);
|
|
28
|
-
}
|
|
12
|
+
/**
|
|
13
|
+
* Splits the path of the url and decodes each path part
|
|
14
|
+
* @param url - the url to get path parts of
|
|
15
|
+
*/
|
|
16
|
+
public static getPathParts(url: string): readonly string[] {
|
|
17
|
+
const queryStartIndex = url.indexOf("?");
|
|
18
|
+
return url
|
|
19
|
+
.substring(0, queryStartIndex < 0 ? url.length : queryStartIndex)
|
|
20
|
+
.split("/")
|
|
21
|
+
.reduce<string[]>((pv, cv) => {
|
|
22
|
+
if (cv !== undefined && cv.length > 0) {
|
|
23
|
+
pv.push(decodeURIComponent(cv));
|
|
24
|
+
}
|
|
25
|
+
return pv;
|
|
26
|
+
}, []);
|
|
27
|
+
}
|
|
29
28
|
|
|
30
|
-
|
|
31
|
-
|
|
29
|
+
private requestPathParts: readonly string[] | undefined;
|
|
30
|
+
public readonly query: string;
|
|
32
31
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
32
|
+
public static create(request: Readonly<IRequest>) {
|
|
33
|
+
// Perf optimizations.
|
|
34
|
+
if (request instanceof RequestParser) {
|
|
35
|
+
return request;
|
|
36
|
+
}
|
|
37
|
+
return new RequestParser(request);
|
|
38
|
+
}
|
|
40
39
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
} else {
|
|
46
|
-
this.query = "";
|
|
47
|
-
}
|
|
48
|
-
}
|
|
40
|
+
protected constructor(private readonly request: Readonly<IRequest>) {
|
|
41
|
+
const queryStartIndex = this.request.url.indexOf("?");
|
|
42
|
+
this.query = queryStartIndex >= 0 ? this.request.url.substring(queryStartIndex) : "";
|
|
43
|
+
}
|
|
49
44
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
45
|
+
public get url(): string {
|
|
46
|
+
return this.request.url;
|
|
47
|
+
}
|
|
53
48
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
49
|
+
public get headers(): IRequestHeader | undefined {
|
|
50
|
+
return this.request.headers;
|
|
51
|
+
}
|
|
57
52
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
53
|
+
/**
|
|
54
|
+
* Returns the decoded path parts of the request's url
|
|
55
|
+
*/
|
|
56
|
+
public get pathParts(): readonly string[] {
|
|
57
|
+
if (this.requestPathParts === undefined) {
|
|
58
|
+
this.requestPathParts = RequestParser.getPathParts(this.url);
|
|
59
|
+
}
|
|
60
|
+
return this.requestPathParts;
|
|
61
|
+
}
|
|
67
62
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
63
|
+
/**
|
|
64
|
+
* Returns true if it's a terminating path, i.e. no more elements after `elements` entries and empty query.
|
|
65
|
+
* @param elements - number of elements in path
|
|
66
|
+
*/
|
|
67
|
+
public isLeaf(elements: number) {
|
|
68
|
+
return this.query === "" && this.pathParts.length === elements;
|
|
69
|
+
}
|
|
75
70
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
71
|
+
/**
|
|
72
|
+
* Creates a sub request starting at a specific path part of this request's url
|
|
73
|
+
* The sub request url always has a leading slash, and always include query params if original url has any
|
|
74
|
+
* e.g. original url is /a/b/?queryParams, createSubRequest(0) is /a/b/?queryParams
|
|
75
|
+
* createSubRequest(1) is /b/?queryParams
|
|
76
|
+
* createSubRequest(2) is /?queryParams
|
|
77
|
+
* createSubRequest(n) where n is bigger than parts length, e.g. 2, or n is less than 0 will throw an exception
|
|
78
|
+
*
|
|
79
|
+
* note: query params are not counted towards path parts.
|
|
80
|
+
*
|
|
81
|
+
* @param startingPathIndex - The index of the first path part of the sub request
|
|
82
|
+
*/
|
|
83
|
+
public createSubRequest(startingPathIndex: number): IRequest {
|
|
84
|
+
const pathLen = this.pathParts.length;
|
|
85
|
+
if (startingPathIndex < 0 || startingPathIndex > pathLen) {
|
|
86
|
+
throw new Error("incorrect sub-request");
|
|
87
|
+
}
|
|
88
|
+
if (startingPathIndex === pathLen && this.url.includes("?")) {
|
|
89
|
+
return {
|
|
90
|
+
url: `/${this.query}`,
|
|
91
|
+
headers: this.headers,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
const path = `/${this.pathParts.slice(startingPathIndex).join("/")}`;
|
|
95
|
+
return {
|
|
96
|
+
url: this.query === "" ? path : `${path}/${this.query}`,
|
|
97
|
+
headers: this.headers,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
105
100
|
}
|
|
@@ -4,36 +4,37 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
IContainerContext,
|
|
8
|
+
IRuntime,
|
|
9
|
+
IRuntimeFactory,
|
|
10
10
|
} from "@fluidframework/container-definitions";
|
|
11
11
|
import { IContainerRuntime } from "@fluidframework/container-runtime-definitions";
|
|
12
12
|
|
|
13
|
+
/**
|
|
14
|
+
* @alpha
|
|
15
|
+
*/
|
|
13
16
|
export abstract class RuntimeFactoryHelper<T = IContainerRuntime> implements IRuntimeFactory {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
context: IContainerContext,
|
|
18
|
-
existing?: boolean,
|
|
19
|
-
): Promise<IRuntime> {
|
|
20
|
-
const fromExisting = existing === undefined
|
|
21
|
-
? context.existing === true
|
|
22
|
-
: existing;
|
|
23
|
-
const runtime = await this.preInitialize(context, fromExisting);
|
|
24
|
-
|
|
25
|
-
if (fromExisting) {
|
|
26
|
-
await this.instantiateFromExisting(runtime);
|
|
27
|
-
} else {
|
|
28
|
-
await this.instantiateFirstTime(runtime);
|
|
29
|
-
}
|
|
17
|
+
public get IRuntimeFactory() {
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
30
20
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
21
|
+
public async instantiateRuntime(
|
|
22
|
+
context: IContainerContext,
|
|
23
|
+
existing: boolean,
|
|
24
|
+
): Promise<IRuntime> {
|
|
25
|
+
const runtime = await this.preInitialize(context, existing);
|
|
26
|
+
await (existing
|
|
27
|
+
? this.instantiateFromExisting(runtime)
|
|
28
|
+
: this.instantiateFirstTime(runtime));
|
|
29
|
+
await this.hasInitialized(runtime);
|
|
30
|
+
return runtime;
|
|
31
|
+
}
|
|
34
32
|
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
33
|
+
public abstract preInitialize(
|
|
34
|
+
context: IContainerContext,
|
|
35
|
+
existing: boolean,
|
|
36
|
+
): Promise<IRuntime & T>;
|
|
37
|
+
public async instantiateFirstTime(_runtime: T): Promise<void> {}
|
|
38
|
+
public async instantiateFromExisting(_runtime: T): Promise<void> {}
|
|
39
|
+
public async hasInitialized(_runtime: T): Promise<void> {}
|
|
39
40
|
}
|