@contember/engine-server 0.12.0-beta.0 → 1.0.0-alpha.1
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/alpine.dockerfile +2 -2
- package/debian.dockerfile +1 -1
- package/dist/src/MasterContainer.d.ts +4 -1
- package/dist/src/MasterContainer.d.ts.map +1 -1
- package/dist/src/MasterContainer.js +60 -31
- package/dist/src/MasterContainer.js.map +1 -1
- package/dist/src/bootstrap/Initializer.d.ts +4 -6
- package/dist/src/bootstrap/Initializer.d.ts.map +1 -1
- package/dist/src/bootstrap/Initializer.js +10 -11
- package/dist/src/bootstrap/Initializer.js.map +1 -1
- package/dist/src/config/config.d.ts +43 -22
- package/dist/src/config/config.d.ts.map +1 -1
- package/dist/src/config/config.js +135 -241
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/http/ShowMetricsMiddleware.js +1 -1
- package/dist/src/http/ShowMetricsMiddleware.js.map +1 -1
- package/dist/src/http/index.d.ts +0 -1
- package/dist/src/http/index.d.ts.map +1 -1
- package/dist/src/http/index.js +0 -1
- package/dist/src/http/index.js.map +1 -1
- package/dist/src/project/ProjectContainer.d.ts +1 -1
- package/dist/src/project/ProjectContainer.d.ts.map +1 -1
- package/dist/src/project/ProjectContainerResolver.d.ts +13 -10
- package/dist/src/project/ProjectContainerResolver.d.ts.map +1 -1
- package/dist/src/project/ProjectContainerResolver.js +48 -33
- package/dist/src/project/ProjectContainerResolver.js.map +1 -1
- package/dist/src/project/ProjectGroupState.d.ts +18 -0
- package/dist/src/project/ProjectGroupState.d.ts.map +1 -0
- package/dist/src/project/ProjectGroupState.js +30 -0
- package/dist/src/project/ProjectGroupState.js.map +1 -0
- package/dist/src/project/ProjectInitializer.d.ts +4 -10
- package/dist/src/project/ProjectInitializer.d.ts.map +1 -1
- package/dist/src/project/ProjectInitializer.js +5 -19
- package/dist/src/project/ProjectInitializer.js.map +1 -1
- package/dist/src/project/ProjectSchemaResolver.d.ts +5 -5
- package/dist/src/project/ProjectSchemaResolver.d.ts.map +1 -1
- package/dist/src/project/ProjectSchemaResolver.js +4 -4
- package/dist/src/project/ProjectSchemaResolver.js.map +1 -1
- package/dist/src/start.js +22 -14
- package/dist/src/start.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/utils/cluster.js +1 -1
- package/dist/src/utils/cluster.js.map +1 -1
- package/dist/tests/cases/http.js +12 -11
- package/dist/tests/cases/http.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +21 -21
- package/src/MasterContainer.ts +106 -55
- package/src/bootstrap/Initializer.ts +10 -17
- package/src/config/config.ts +159 -289
- package/src/http/index.ts +0 -1
- package/src/project/ProjectContainerResolver.ts +58 -35
- package/src/project/ProjectGroupState.ts +33 -0
- package/src/project/ProjectInitializer.ts +9 -23
- package/src/project/ProjectSchemaResolver.ts +12 -7
- package/src/start.ts +13 -6
- package/tests/cases/http.ts +7 -2
- package/dist/src/http/RootMiddleware.d.ts +0 -9
- package/dist/src/http/RootMiddleware.d.ts.map +0 -1
- package/dist/src/http/RootMiddleware.js +0 -33
- package/dist/src/http/RootMiddleware.js.map +0 -1
- package/src/http/RootMiddleware.ts +0 -53
|
@@ -1,73 +1,80 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ProjectContainerResolver = void 0;
|
|
4
|
+
const ProjectGroupState_1 = require("./ProjectGroupState");
|
|
5
|
+
const engine_common_1 = require("@contember/engine-common");
|
|
4
6
|
class ProjectContainerResolver {
|
|
5
|
-
constructor(projectContainerFactory, projectConfigResolver, projectManager) {
|
|
7
|
+
constructor(projectContainerFactory, projectConfigResolver, projectManager, systemProjectInitializer) {
|
|
6
8
|
this.projectContainerFactory = projectContainerFactory;
|
|
7
9
|
this.projectConfigResolver = projectConfigResolver;
|
|
8
10
|
this.projectManager = projectManager;
|
|
9
|
-
this.
|
|
10
|
-
this.
|
|
11
|
+
this.systemProjectInitializer = systemProjectInitializer;
|
|
12
|
+
this.projectGroupStates = new WeakMap();
|
|
11
13
|
this.onCreate = [];
|
|
12
14
|
}
|
|
13
|
-
async getAllProjectContainers() {
|
|
14
|
-
const projects = await this.projectManager.getProjects();
|
|
15
|
+
async getAllProjectContainers(projectGroup) {
|
|
16
|
+
const projects = await this.projectManager.getProjects(projectGroup.database);
|
|
15
17
|
return await Promise.all(projects.map(async (it) => {
|
|
16
|
-
const container = await this.getProjectContainer(it.slug);
|
|
18
|
+
const container = await this.getProjectContainer(projectGroup, it.slug);
|
|
17
19
|
if (!container) {
|
|
18
20
|
throw new Error('should not happen');
|
|
19
21
|
}
|
|
20
22
|
return container;
|
|
21
23
|
}));
|
|
22
24
|
}
|
|
23
|
-
async getProjectContainer(slug, alias = false) {
|
|
24
|
-
|
|
25
|
+
async getProjectContainer(projectGroup, slug, alias = false) {
|
|
26
|
+
let groupState = this.getProjectGroupState(projectGroup);
|
|
27
|
+
const realSlug = groupState.resolveAlias(slug);
|
|
25
28
|
if (realSlug) {
|
|
26
29
|
slug = realSlug;
|
|
27
30
|
}
|
|
28
|
-
const existing =
|
|
31
|
+
const existing = groupState.getContainer(slug);
|
|
29
32
|
if (existing) {
|
|
30
|
-
const
|
|
33
|
+
const existingAwaited = await existing;
|
|
34
|
+
const state = await this.projectManager.getProjectState(projectGroup.database, slug, existingAwaited.timestamp);
|
|
31
35
|
if (state === 'valid') {
|
|
32
|
-
return
|
|
36
|
+
return (await existingAwaited).container;
|
|
33
37
|
}
|
|
34
|
-
this.destroyContainer(slug);
|
|
38
|
+
await this.destroyContainer(projectGroup, slug);
|
|
35
39
|
if (state === 'not_found') {
|
|
36
40
|
return undefined;
|
|
37
41
|
}
|
|
38
42
|
}
|
|
39
|
-
const project = await this.projectManager.getProjectWithSecretsBySlug(slug, alias);
|
|
43
|
+
const project = await this.projectManager.getProjectWithSecretsBySlug(projectGroup.database, slug, alias);
|
|
40
44
|
if (!project) {
|
|
41
45
|
return undefined;
|
|
42
46
|
}
|
|
43
|
-
const container = this.createProjectContainer(project);
|
|
47
|
+
const container = await this.createProjectContainer(projectGroup, project);
|
|
44
48
|
if (slug !== project.slug) {
|
|
45
|
-
|
|
49
|
+
groupState.setAlias(project.slug, slug);
|
|
46
50
|
}
|
|
47
51
|
return container;
|
|
48
52
|
}
|
|
49
|
-
createProjectContainer(project) {
|
|
53
|
+
async createProjectContainer(projectGroup, project) {
|
|
50
54
|
const projectConfig = this.projectConfigResolver(project.slug, project.config, project.secrets);
|
|
51
|
-
const
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
55
|
+
const groupState = this.getProjectGroupState(projectGroup);
|
|
56
|
+
return (await groupState.fetchContainer(project.slug, async (slug) => {
|
|
57
|
+
const projectContainer = this.projectContainerFactory.createContainer(projectConfig);
|
|
58
|
+
await this.systemProjectInitializer.initialize(projectContainer.systemDatabaseContextFactory, projectContainer.project,
|
|
59
|
+
// eslint-disable-next-line no-console
|
|
60
|
+
new engine_common_1.Logger(console.log));
|
|
61
|
+
const cleanups = this.onCreate.map(it => it(projectContainer) || (() => null));
|
|
62
|
+
return {
|
|
63
|
+
container: projectContainer,
|
|
64
|
+
cleanups,
|
|
65
|
+
timestamp: project.updatedAt,
|
|
66
|
+
};
|
|
67
|
+
})).container;
|
|
63
68
|
}
|
|
64
|
-
destroyContainer(slug) {
|
|
69
|
+
async destroyContainer(projectGroup, slug) {
|
|
65
70
|
var _a;
|
|
66
|
-
const
|
|
71
|
+
const groupState = this.getProjectGroupState(projectGroup);
|
|
72
|
+
const existing = groupState.getContainer(slug);
|
|
67
73
|
if (existing) {
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
74
|
+
const existingAwaited = await existing;
|
|
75
|
+
existingAwaited.cleanups.forEach(it => it());
|
|
76
|
+
(_a = existingAwaited.container.project.alias) === null || _a === void 0 ? void 0 : _a.forEach(it => groupState.removeAlias(it));
|
|
77
|
+
groupState.removeContainer(slug);
|
|
71
78
|
}
|
|
72
79
|
process.nextTick(() => {
|
|
73
80
|
if (global.gc) {
|
|
@@ -75,6 +82,14 @@ class ProjectContainerResolver {
|
|
|
75
82
|
}
|
|
76
83
|
});
|
|
77
84
|
}
|
|
85
|
+
getProjectGroupState(projectGroup) {
|
|
86
|
+
let groupState = this.projectGroupStates.get(projectGroup);
|
|
87
|
+
if (!groupState) {
|
|
88
|
+
groupState = new ProjectGroupState_1.ProjectGroupState();
|
|
89
|
+
this.projectGroupStates.set(projectGroup, new ProjectGroupState_1.ProjectGroupState());
|
|
90
|
+
}
|
|
91
|
+
return groupState;
|
|
92
|
+
}
|
|
78
93
|
}
|
|
79
94
|
exports.ProjectContainerResolver = ProjectContainerResolver;
|
|
80
95
|
//# sourceMappingURL=ProjectContainerResolver.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectContainerResolver.js","sourceRoot":"","sources":["../../../src/project/ProjectContainerResolver.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ProjectContainerResolver.js","sourceRoot":"","sources":["../../../src/project/ProjectContainerResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { ProjectContainer } from '@contember/engine-http';
|
|
2
|
+
declare type ContainerWithMeta = {
|
|
3
|
+
container: ProjectContainer;
|
|
4
|
+
cleanups: (() => void)[];
|
|
5
|
+
timestamp: Date;
|
|
6
|
+
};
|
|
7
|
+
export declare class ProjectGroupState {
|
|
8
|
+
private containers;
|
|
9
|
+
private aliasMapping;
|
|
10
|
+
resolveAlias(slug: string): string | undefined;
|
|
11
|
+
setAlias(slug: string, alias: string): void;
|
|
12
|
+
removeAlias(alias: string): void;
|
|
13
|
+
getContainer(slug: string): Promise<ContainerWithMeta> | undefined;
|
|
14
|
+
fetchContainer(slug: string, factory: (slug: string) => Promise<ContainerWithMeta>): Promise<ContainerWithMeta>;
|
|
15
|
+
removeContainer(slug: string): void;
|
|
16
|
+
}
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=ProjectGroupState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectGroupState.d.ts","sourceRoot":"","sources":["../../../src/project/ProjectGroupState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAGzD,aAAK,iBAAiB,GAAG;IAAE,SAAS,EAAE,gBAAgB,CAAC;IAAC,QAAQ,EAAE,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAAC,SAAS,EAAE,IAAI,CAAA;CAAE,CAAA;AAEnG,qBAAa,iBAAiB;IAC7B,OAAO,CAAC,UAAU,CAA8C;IAChE,OAAO,CAAC,YAAY,CAA4B;IAEzC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI9C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAI3C,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIhC,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,GAAG,SAAS;IAI5D,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIrH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;CAG1C"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ProjectGroupState = void 0;
|
|
4
|
+
const engine_common_1 = require("@contember/engine-common");
|
|
5
|
+
class ProjectGroupState {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.containers = new engine_common_1.PromiseMap();
|
|
8
|
+
this.aliasMapping = new Map();
|
|
9
|
+
}
|
|
10
|
+
resolveAlias(slug) {
|
|
11
|
+
return this.aliasMapping.get(slug);
|
|
12
|
+
}
|
|
13
|
+
setAlias(slug, alias) {
|
|
14
|
+
this.aliasMapping.set(alias, slug);
|
|
15
|
+
}
|
|
16
|
+
removeAlias(alias) {
|
|
17
|
+
this.aliasMapping.delete(alias);
|
|
18
|
+
}
|
|
19
|
+
getContainer(slug) {
|
|
20
|
+
return this.containers.get(slug);
|
|
21
|
+
}
|
|
22
|
+
async fetchContainer(slug, factory) {
|
|
23
|
+
return await this.containers.fetch(slug, factory);
|
|
24
|
+
}
|
|
25
|
+
removeContainer(slug) {
|
|
26
|
+
this.containers.delete(slug);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
exports.ProjectGroupState = ProjectGroupState;
|
|
30
|
+
//# sourceMappingURL=ProjectGroupState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ProjectGroupState.js","sourceRoot":"","sources":["../../../src/project/ProjectGroupState.ts"],"names":[],"mappings":";;;AACA,4DAAqD;AAIrD,MAAa,iBAAiB;IAA9B;QACS,eAAU,GAAG,IAAI,0BAAU,EAA6B,CAAA;QACxD,iBAAY,GAAG,IAAI,GAAG,EAAkB,CAAA;IAyBjD,CAAC;IAvBO,YAAY,CAAC,IAAY;QAC/B,OAAO,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACnC,CAAC;IAEM,QAAQ,CAAC,IAAY,EAAE,KAAa;QAC1C,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACnC,CAAC;IAEM,WAAW,CAAC,KAAa;QAC/B,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC;IAEM,YAAY,CAAC,IAAY;QAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IACjC,CAAC;IAEM,KAAK,CAAC,cAAc,CAAC,IAAY,EAAE,OAAqD;QAC9F,OAAO,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAClD,CAAC;IAEM,eAAe,CAAC,IAAY;QAClC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;IAC7B,CAAC;CACD;AA3BD,8CA2BC"}
|
|
@@ -1,19 +1,13 @@
|
|
|
1
|
-
import { ProjectInitializer as ProjectInitializerInterface, ProjectWithSecrets } from '@contember/engine-tenant-api';
|
|
1
|
+
import { ProjectGroup, ProjectInitializer as ProjectInitializerInterface, ProjectWithSecrets } from '@contember/engine-tenant-api';
|
|
2
2
|
import { ProjectContainerResolver } from './ProjectContainerResolver';
|
|
3
|
-
import { ProjectInitializer as SystemProjectInitializer } from '@contember/engine-system-api';
|
|
4
3
|
export declare class ProjectInitializer implements ProjectInitializerInterface {
|
|
5
4
|
private readonly projectContainerResolver;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
initializeProject(project: ProjectWithSecrets): Promise<{
|
|
9
|
-
log: string[];
|
|
10
|
-
}>;
|
|
5
|
+
constructor(projectContainerResolver: ProjectContainerResolver);
|
|
6
|
+
initializeProject(projectGroup: ProjectGroup, project: ProjectWithSecrets): Promise<void>;
|
|
11
7
|
}
|
|
12
8
|
export declare class ProjectInitializerProxy implements ProjectInitializerInterface {
|
|
13
9
|
private initializer;
|
|
14
10
|
setInitializer(initializer: ProjectInitializerInterface): void;
|
|
15
|
-
initializeProject(project: ProjectWithSecrets): Promise<
|
|
16
|
-
log: string[];
|
|
17
|
-
}>;
|
|
11
|
+
initializeProject(projectGroup: ProjectGroup, project: ProjectWithSecrets): Promise<void>;
|
|
18
12
|
}
|
|
19
13
|
//# sourceMappingURL=ProjectInitializer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectInitializer.d.ts","sourceRoot":"","sources":["../../../src/project/ProjectInitializer.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ProjectInitializer.d.ts","sourceRoot":"","sources":["../../../src/project/ProjectInitializer.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,YAAY,EACZ,kBAAkB,IAAI,2BAA2B,EACjD,kBAAkB,EAClB,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AAErE,qBAAa,kBAAmB,YAAW,2BAA2B;IAEpE,OAAO,CAAC,QAAQ,CAAC,wBAAwB;gBAAxB,wBAAwB,EAAE,wBAAwB;IAG9D,iBAAiB,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB;CAG/E;AAED,qBAAa,uBAAwB,YAAW,2BAA2B;IAC1E,OAAO,CAAC,WAAW,CAAqD;IAExE,cAAc,CAAC,WAAW,EAAE,2BAA2B,GAAG,IAAI;IAI9D,iBAAiB,CAAC,YAAY,EAAE,YAAY,EAAE,OAAO,EAAE,kBAAkB;CAMzE"}
|
|
@@ -1,26 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.ProjectInitializerProxy = exports.ProjectInitializer = void 0;
|
|
4
|
-
const engine_common_1 = require("@contember/engine-common");
|
|
5
4
|
class ProjectInitializer {
|
|
6
|
-
constructor(projectContainerResolver
|
|
5
|
+
constructor(projectContainerResolver) {
|
|
7
6
|
this.projectContainerResolver = projectContainerResolver;
|
|
8
|
-
this.systemProjectInitializer = systemProjectInitializer;
|
|
9
7
|
}
|
|
10
|
-
async initializeProject(project) {
|
|
11
|
-
|
|
12
|
-
if (!container) {
|
|
13
|
-
throw new Error('Should not happen');
|
|
14
|
-
}
|
|
15
|
-
const log = [];
|
|
16
|
-
try {
|
|
17
|
-
await this.systemProjectInitializer.initialize(container.systemDatabaseContextFactory, container.project, new engine_common_1.Logger(log.push));
|
|
18
|
-
}
|
|
19
|
-
catch (e) {
|
|
20
|
-
await this.projectContainerResolver.destroyContainer(project.slug);
|
|
21
|
-
throw e;
|
|
22
|
-
}
|
|
23
|
-
return { log };
|
|
8
|
+
async initializeProject(projectGroup, project) {
|
|
9
|
+
await this.projectContainerResolver.createProjectContainer(projectGroup, project);
|
|
24
10
|
}
|
|
25
11
|
}
|
|
26
12
|
exports.ProjectInitializer = ProjectInitializer;
|
|
@@ -31,11 +17,11 @@ class ProjectInitializerProxy {
|
|
|
31
17
|
setInitializer(initializer) {
|
|
32
18
|
this.initializer = initializer;
|
|
33
19
|
}
|
|
34
|
-
initializeProject(project) {
|
|
20
|
+
initializeProject(projectGroup, project) {
|
|
35
21
|
if (!this.initializer) {
|
|
36
22
|
throw new Error('Initializer is not set');
|
|
37
23
|
}
|
|
38
|
-
return this.initializer.initializeProject(project);
|
|
24
|
+
return this.initializer.initializeProject(projectGroup, project);
|
|
39
25
|
}
|
|
40
26
|
}
|
|
41
27
|
exports.ProjectInitializerProxy = ProjectInitializerProxy;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectInitializer.js","sourceRoot":"","sources":["../../../src/project/ProjectInitializer.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ProjectInitializer.js","sourceRoot":"","sources":["../../../src/project/ProjectInitializer.ts"],"names":[],"mappings":";;;AAOA,MAAa,kBAAkB;IAC9B,YACkB,wBAAkD;QAAlD,6BAAwB,GAAxB,wBAAwB,CAA0B;IACjE,CAAC;IAEJ,KAAK,CAAC,iBAAiB,CAAC,YAA0B,EAAE,OAA2B;QAC9E,MAAM,IAAI,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IAClF,CAAC;CACD;AARD,gDAQC;AAED,MAAa,uBAAuB;IAApC;QACS,gBAAW,GAA4C,SAAS,CAAA;IAYzE,CAAC;IAVA,cAAc,CAAC,WAAwC;QACtD,IAAI,CAAC,WAAW,GAAG,WAAW,CAAA;IAC/B,CAAC;IAED,iBAAiB,CAAC,YAA0B,EAAE,OAA2B;QACxE,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;SACzC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,YAAY,EAAE,OAAO,CAAC,CAAA;IACjE,CAAC;CACD;AAbD,0DAaC"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { ProjectSchemaResolver as ProjectSchemaResolverInterface } from '@contember/engine-tenant-api';
|
|
1
|
+
import { ProjectGroup, ProjectSchemaResolver as ProjectSchemaResolverInterface } from '@contember/engine-tenant-api';
|
|
2
2
|
import { SchemaVersionBuilder } from '@contember/engine-system-api';
|
|
3
|
-
import {
|
|
3
|
+
import { ProjectContainerResolver } from '@contember/engine-http';
|
|
4
4
|
import { Schema } from '@contember/schema';
|
|
5
5
|
export declare class ProjectSchemaResolver implements ProjectSchemaResolverInterface {
|
|
6
6
|
private readonly projectContainerResolver;
|
|
7
7
|
private readonly schemaVersionBuilder;
|
|
8
|
-
constructor(projectContainerResolver:
|
|
9
|
-
getSchema(slug: string): Promise<import("@contember/engine-system-api").VersionedSchema | undefined>;
|
|
8
|
+
constructor(projectContainerResolver: ProjectContainerResolver, schemaVersionBuilder: SchemaVersionBuilder);
|
|
9
|
+
getSchema(projectGroup: ProjectGroup, slug: string): Promise<import("@contember/engine-system-api").VersionedSchema | undefined>;
|
|
10
10
|
}
|
|
11
11
|
export declare class ProjectSchemaResolverProxy implements ProjectSchemaResolverInterface {
|
|
12
12
|
private resolver;
|
|
13
13
|
setResolver(resolver: ProjectSchemaResolver): void;
|
|
14
|
-
getSchema(projectSlug: string): Promise<Schema | undefined>;
|
|
14
|
+
getSchema(projectGroup: ProjectGroup, projectSlug: string): Promise<Schema | undefined>;
|
|
15
15
|
}
|
|
16
16
|
//# sourceMappingURL=ProjectSchemaResolver.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectSchemaResolver.d.ts","sourceRoot":"","sources":["../../../src/project/ProjectSchemaResolver.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"ProjectSchemaResolver.d.ts","sourceRoot":"","sources":["../../../src/project/ProjectSchemaResolver.ts"],"names":[],"mappings":"AAAA,OAAO,EAEN,YAAY,EACZ,qBAAqB,IAAI,8BAA8B,EACvD,MAAM,8BAA8B,CAAA;AACrC,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wBAAwB,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAA;AAE1C,qBAAa,qBAAsB,YAAW,8BAA8B;IAE1E,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,oBAAoB;gBADpB,wBAAwB,EAAE,wBAAwB,EAClD,oBAAoB,EAAE,oBAAoB;IAGtD,SAAS,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM;CAQxD;AAED,qBAAa,0BAA2B,YAAW,8BAA8B;IAChF,OAAO,CAAC,QAAQ,CAAmC;IAEnD,WAAW,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAIlD,SAAS,CAAC,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAMvF"}
|
|
@@ -6,8 +6,8 @@ class ProjectSchemaResolver {
|
|
|
6
6
|
this.projectContainerResolver = projectContainerResolver;
|
|
7
7
|
this.schemaVersionBuilder = schemaVersionBuilder;
|
|
8
8
|
}
|
|
9
|
-
async getSchema(slug) {
|
|
10
|
-
const container = await this.projectContainerResolver(slug);
|
|
9
|
+
async getSchema(projectGroup, slug) {
|
|
10
|
+
const container = await this.projectContainerResolver.getProjectContainer(projectGroup, slug);
|
|
11
11
|
if (!container) {
|
|
12
12
|
return undefined;
|
|
13
13
|
}
|
|
@@ -20,11 +20,11 @@ class ProjectSchemaResolverProxy {
|
|
|
20
20
|
setResolver(resolver) {
|
|
21
21
|
this.resolver = resolver;
|
|
22
22
|
}
|
|
23
|
-
getSchema(projectSlug) {
|
|
23
|
+
getSchema(projectGroup, projectSlug) {
|
|
24
24
|
if (!this.resolver) {
|
|
25
25
|
throw new Error('Resolved is not set');
|
|
26
26
|
}
|
|
27
|
-
return this.resolver.getSchema(projectSlug);
|
|
27
|
+
return this.resolver.getSchema(projectGroup, projectSlug);
|
|
28
28
|
}
|
|
29
29
|
}
|
|
30
30
|
exports.ProjectSchemaResolverProxy = ProjectSchemaResolverProxy;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProjectSchemaResolver.js","sourceRoot":"","sources":["../../../src/project/ProjectSchemaResolver.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"ProjectSchemaResolver.js","sourceRoot":"","sources":["../../../src/project/ProjectSchemaResolver.ts"],"names":[],"mappings":";;;AASA,MAAa,qBAAqB;IACjC,YACkB,wBAAkD,EAClD,oBAA0C;QAD1C,6BAAwB,GAAxB,wBAAwB,CAA0B;QAClD,yBAAoB,GAApB,oBAAoB,CAAsB;IACzD,CAAC;IAEJ,KAAK,CAAC,SAAS,CAAC,YAA0B,EAAE,IAAY;QACvD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAA;QAC7F,IAAI,CAAC,SAAS,EAAE;YACf,OAAO,SAAS,CAAA;SAChB;QACD,MAAM,EAAE,GAAG,SAAS,CAAC,4BAA4B,CAAC,MAAM,CAAC,SAAS,CAAC,CAAA;QACnE,OAAO,MAAM,IAAI,CAAC,oBAAoB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAA;IACvD,CAAC;CACD;AAdD,sDAcC;AAED,MAAa,0BAA0B;IAGtC,WAAW,CAAC,QAA+B;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACzB,CAAC;IAED,SAAS,CAAC,YAA0B,EAAE,WAAmB;QACxD,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;SACtC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,YAAY,EAAE,WAAW,CAAC,CAAA;IAC1D,CAAC;CACD;AAbD,gEAaC"}
|
package/dist/src/start.js
CHANGED
|
@@ -32,7 +32,7 @@ const createServerTerminator = () => {
|
|
|
32
32
|
(async () => {
|
|
33
33
|
var _a;
|
|
34
34
|
const isDebug = process.env.NODE_ENV === 'development';
|
|
35
|
-
const packageJsonFile = process.env.CONTEMBER_PACKAGE_JSON || path_1.join(__dirname, '../../package.json');
|
|
35
|
+
const packageJsonFile = process.env.CONTEMBER_PACKAGE_JSON || (0, path_1.join)(__dirname, '../../package.json');
|
|
36
36
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
37
37
|
const version = require(packageJsonFile).version;
|
|
38
38
|
if (cluster_1.default.isMaster) {
|
|
@@ -47,7 +47,7 @@ const createServerTerminator = () => {
|
|
|
47
47
|
console.log('NEVER USE debug mode in production environment');
|
|
48
48
|
}
|
|
49
49
|
}
|
|
50
|
-
const plugins = await loadPlugins_1.default();
|
|
50
|
+
const plugins = await (0, loadPlugins_1.default)();
|
|
51
51
|
const configProcessors = plugins
|
|
52
52
|
.map(it => (it.getConfigProcessor ? it.getConfigProcessor() : null))
|
|
53
53
|
.filter((it) => it !== null);
|
|
@@ -58,16 +58,16 @@ const createServerTerminator = () => {
|
|
|
58
58
|
configSources.push({ type: configType, data: envValue });
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
|
-
const { config, projectConfigResolver } = await index_1.readConfig(configSources, configProcessors);
|
|
61
|
+
const { config, projectConfigResolver } = await (0, index_1.readConfig)(configSources, configProcessors);
|
|
62
62
|
if (process.argv[2] === 'validate') {
|
|
63
63
|
process.exit(0);
|
|
64
64
|
}
|
|
65
|
-
utils_1.initSentry((_a = config.server.logging.sentry) === null || _a === void 0 ? void 0 : _a.dsn);
|
|
65
|
+
'sentry' in config.server.logging && (0, utils_1.initSentry)((_a = config.server.logging.sentry) === null || _a === void 0 ? void 0 : _a.dsn);
|
|
66
66
|
const workerConfig = config.server.workerCount || 1;
|
|
67
67
|
const workerCount = workerConfig === 'auto' ? os_1.default.cpus().length : Number(workerConfig);
|
|
68
68
|
const isClusterMode = workerCount > 1;
|
|
69
|
-
const processType = utils_1.getClusterProcessType(isClusterMode);
|
|
70
|
-
const container = index_1.createContainer({
|
|
69
|
+
const processType = (0, utils_1.getClusterProcessType)(isClusterMode);
|
|
70
|
+
const container = (0, index_1.createContainer)({
|
|
71
71
|
debugMode: isDebug,
|
|
72
72
|
config,
|
|
73
73
|
projectConfigResolver,
|
|
@@ -83,27 +83,35 @@ const createServerTerminator = () => {
|
|
|
83
83
|
// eslint-disable-next-line no-console
|
|
84
84
|
console.log(`Monitoring running on http://localhost:${monitoringPort}`);
|
|
85
85
|
}));
|
|
86
|
-
|
|
86
|
+
if (!config.server.projectGroup) {
|
|
87
|
+
initializedProjects = await container.initializer.initialize();
|
|
88
|
+
}
|
|
87
89
|
}
|
|
88
90
|
const port = config.server.port;
|
|
89
91
|
const printStarted = () => {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
92
|
+
if (config.server.projectGroup) {
|
|
93
|
+
// eslint-disable-next-line no-console
|
|
94
|
+
console.log('Contember Cloud running');
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
// eslint-disable-next-line no-console
|
|
98
|
+
console.log(`Contember API running on http://localhost:${port}`);
|
|
99
|
+
// eslint-disable-next-line no-console
|
|
100
|
+
console.log(initializedProjects.length ? `Initialized projects: ${initializedProjects.join(', ')}` : 'No project initialized');
|
|
101
|
+
}
|
|
94
102
|
};
|
|
95
103
|
if (isClusterMode && cluster_1.default.isMaster) {
|
|
96
104
|
// eslint-disable-next-line no-console
|
|
97
105
|
console.log(`Master ${process.pid} is running`);
|
|
98
106
|
for (let i = 0; i < workerCount; i++) {
|
|
99
107
|
cluster_1.default.fork();
|
|
100
|
-
await utils_1.waitForWorker(15000);
|
|
108
|
+
await (0, utils_1.waitForWorker)(15000);
|
|
101
109
|
}
|
|
102
110
|
printStarted();
|
|
103
111
|
cluster_1.default.on('exit', async (worker, code, signal) => {
|
|
104
112
|
// eslint-disable-next-line no-console
|
|
105
113
|
console.log(`Worker ${worker.process.pid} died with signal ${signal}, restarting`);
|
|
106
|
-
await utils_1.timeout(2000);
|
|
114
|
+
await (0, utils_1.timeout)(2000);
|
|
107
115
|
cluster_1.default.fork();
|
|
108
116
|
});
|
|
109
117
|
}
|
|
@@ -118,7 +126,7 @@ const createServerTerminator = () => {
|
|
|
118
126
|
printStarted();
|
|
119
127
|
}
|
|
120
128
|
else {
|
|
121
|
-
utils_1.notifyWorkerStarted();
|
|
129
|
+
(0, utils_1.notifyWorkerStarted)();
|
|
122
130
|
}
|
|
123
131
|
}));
|
|
124
132
|
}
|
package/dist/src/start.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":";;;;;;AAEA,mCAAqD;AAErD,gEAAuC;AAEvC,+BAA2B;AAC3B,4CAAmB;AACnB,sDAA6B;AAC7B,mCAAwG;AAGxG,MAAM,sBAAsB,GAAG,GAAa,EAAE;IAC7C,MAAM,OAAO,GAAG;QACf,CAAC,QAAQ,EAAE,CAAC,CAAC;QACb,CAAC,QAAQ,EAAE,CAAC,CAAC;QACb,CAAC,SAAS,EAAE,EAAE,CAAC;KACN,CAAA;IAEV,IAAI,OAAO,GAAa,EAAE,CAAA;IAC1B,KAAK,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE;QACrC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE;YAC7B,sCAAsC;YACtC,OAAO,CAAC,GAAG,CAAC,sBAAsB,MAAM,SAAS,CAAC,CAAA;YAClD,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC7B,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;aAC/D;YACD,OAAO,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,CAAA;QACzB,CAAC,CAAC,CAAA;KACF;IACD,OAAO,OAAO,CAAA;AACf,CAAC,CAEA;AAAA,CAAC,KAAK,IAAI,EAAE;;IACZ,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,aAAa,CAAA;IACtD,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,WAAI,
|
|
1
|
+
{"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"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"}
|