@contember/engine-server 0.12.0-alpha.9 → 1.0.0-alpha.0

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.
Files changed (62) hide show
  1. package/alpine.dockerfile +2 -2
  2. package/debian.dockerfile +1 -1
  3. package/dist/src/MasterContainer.d.ts +4 -1
  4. package/dist/src/MasterContainer.d.ts.map +1 -1
  5. package/dist/src/MasterContainer.js +60 -31
  6. package/dist/src/MasterContainer.js.map +1 -1
  7. package/dist/src/bootstrap/Initializer.d.ts +4 -6
  8. package/dist/src/bootstrap/Initializer.d.ts.map +1 -1
  9. package/dist/src/bootstrap/Initializer.js +10 -11
  10. package/dist/src/bootstrap/Initializer.js.map +1 -1
  11. package/dist/src/config/config.d.ts +43 -22
  12. package/dist/src/config/config.d.ts.map +1 -1
  13. package/dist/src/config/config.js +135 -241
  14. package/dist/src/config/config.js.map +1 -1
  15. package/dist/src/http/ShowMetricsMiddleware.js +1 -1
  16. package/dist/src/http/ShowMetricsMiddleware.js.map +1 -1
  17. package/dist/src/http/index.d.ts +0 -1
  18. package/dist/src/http/index.d.ts.map +1 -1
  19. package/dist/src/http/index.js +0 -1
  20. package/dist/src/http/index.js.map +1 -1
  21. package/dist/src/project/ProjectContainer.d.ts +1 -1
  22. package/dist/src/project/ProjectContainer.d.ts.map +1 -1
  23. package/dist/src/project/ProjectContainerResolver.d.ts +13 -10
  24. package/dist/src/project/ProjectContainerResolver.d.ts.map +1 -1
  25. package/dist/src/project/ProjectContainerResolver.js +48 -33
  26. package/dist/src/project/ProjectContainerResolver.js.map +1 -1
  27. package/dist/src/project/ProjectGroupState.d.ts +18 -0
  28. package/dist/src/project/ProjectGroupState.d.ts.map +1 -0
  29. package/dist/src/project/ProjectGroupState.js +30 -0
  30. package/dist/src/project/ProjectGroupState.js.map +1 -0
  31. package/dist/src/project/ProjectInitializer.d.ts +4 -10
  32. package/dist/src/project/ProjectInitializer.d.ts.map +1 -1
  33. package/dist/src/project/ProjectInitializer.js +5 -19
  34. package/dist/src/project/ProjectInitializer.js.map +1 -1
  35. package/dist/src/project/ProjectSchemaResolver.d.ts +5 -5
  36. package/dist/src/project/ProjectSchemaResolver.d.ts.map +1 -1
  37. package/dist/src/project/ProjectSchemaResolver.js +4 -4
  38. package/dist/src/project/ProjectSchemaResolver.js.map +1 -1
  39. package/dist/src/start.js +22 -14
  40. package/dist/src/start.js.map +1 -1
  41. package/dist/src/tsconfig.tsbuildinfo +1 -1
  42. package/dist/src/utils/cluster.js +1 -1
  43. package/dist/src/utils/cluster.js.map +1 -1
  44. package/dist/tests/cases/http.js +12 -11
  45. package/dist/tests/cases/http.js.map +1 -1
  46. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  47. package/package.json +21 -21
  48. package/src/MasterContainer.ts +106 -55
  49. package/src/bootstrap/Initializer.ts +10 -17
  50. package/src/config/config.ts +159 -289
  51. package/src/http/index.ts +0 -1
  52. package/src/project/ProjectContainerResolver.ts +58 -35
  53. package/src/project/ProjectGroupState.ts +33 -0
  54. package/src/project/ProjectInitializer.ts +9 -23
  55. package/src/project/ProjectSchemaResolver.ts +12 -7
  56. package/src/start.ts +13 -6
  57. package/tests/cases/http.ts +7 -2
  58. package/dist/src/http/RootMiddleware.d.ts +0 -9
  59. package/dist/src/http/RootMiddleware.d.ts.map +0 -1
  60. package/dist/src/http/RootMiddleware.js +0 -34
  61. package/dist/src/http/RootMiddleware.js.map +0 -1
  62. package/src/http/RootMiddleware.ts +0 -54
@@ -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.containers = new Map();
10
- this.aliasMapping = new Map();
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
- const realSlug = this.aliasMapping.get(slug);
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 = this.containers.get(slug);
31
+ const existing = groupState.getContainer(slug);
29
32
  if (existing) {
30
- const state = await this.projectManager.getProjectState(slug, existing.timestamp);
33
+ const existingAwaited = await existing;
34
+ const state = await this.projectManager.getProjectState(projectGroup.database, slug, existingAwaited.timestamp);
31
35
  if (state === 'valid') {
32
- return existing.container;
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
- this.aliasMapping.set(slug, project.slug);
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 existing = this.containers.get(project.slug);
52
- if (existing) {
53
- return existing.container;
54
- }
55
- const projectContainer = this.projectContainerFactory.createContainer(projectConfig);
56
- const cleanups = this.onCreate.map(it => it(projectContainer) || (() => null));
57
- this.containers.set(project.slug, {
58
- container: projectContainer,
59
- cleanups,
60
- timestamp: project.updatedAt,
61
- });
62
- return projectContainer;
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 existing = this.containers.get(slug);
71
+ const groupState = this.getProjectGroupState(projectGroup);
72
+ const existing = groupState.getContainer(slug);
67
73
  if (existing) {
68
- existing.cleanups.forEach(it => it());
69
- (_a = existing.container.project.alias) === null || _a === void 0 ? void 0 : _a.forEach(it => this.aliasMapping.delete(it));
70
- this.containers.delete(slug);
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":";;;AAIA,MAAa,wBAAwB;IAKpC,YACS,uBAAgD,EAChD,qBAA4C,EAC5C,cAA8B;QAF9B,4BAAuB,GAAvB,uBAAuB,CAAyB;QAChD,0BAAqB,GAArB,qBAAqB,CAAuB;QAC5C,mBAAc,GAAd,cAAc,CAAgB;QAP/B,eAAU,GAAG,IAAI,GAAG,EAAsF,CAAA;QAC1G,iBAAY,GAAG,IAAI,GAAG,EAAkB,CAAA;QAEhC,aAAQ,GAA6D,EAAE,CAAA;IAKpF,CAAC;IAEG,KAAK,CAAC,uBAAuB;QACnC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,EAAE,CAAA;QACxD,OAAO,MAAM,OAAO,CAAC,GAAG,CACvB,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAC,EAAE,EAAC,EAAE;YACvB,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC,IAAI,CAAC,CAAA;YACzD,IAAI,CAAC,SAAS,EAAE;gBACf,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;aACpC;YACD,OAAO,SAAS,CAAA;QACjB,CAAC,CAAC,CACF,CAAA;IACF,CAAC;IAEM,KAAK,CAAC,mBAAmB,CAAC,IAAY,EAAE,QAAiB,KAAK;QACpE,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC5C,IAAI,QAAQ,EAAE;YACb,IAAI,GAAG,QAAQ,CAAA;SACf;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC1C,IAAI,QAAQ,EAAE;YACb,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,eAAe,CAAC,IAAI,EAAE,QAAQ,CAAC,SAAS,CAAC,CAAA;YACjF,IAAI,KAAK,KAAK,OAAO,EAAE;gBACtB,OAAO,QAAQ,CAAC,SAAS,CAAA;aACzB;YACD,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAA;YAC3B,IAAI,KAAK,KAAK,WAAW,EAAE;gBAC1B,OAAO,SAAS,CAAA;aAChB;SACD;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAClF,IAAI,CAAC,OAAO,EAAE;YACb,OAAO,SAAS,CAAA;SAChB;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAA;QACtD,IAAI,IAAI,KAAK,OAAO,CAAC,IAAI,EAAE;YAC1B,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAAA;SACzC;QACD,OAAO,SAAS,CAAA;IACjB,CAAC;IAEM,sBAAsB,CAAC,OAA2B;QACxD,MAAM,aAAa,GAAG,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;QAC/F,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;QAClD,IAAI,QAAQ,EAAE;YACb,OAAO,QAAQ,CAAC,SAAS,CAAA;SACzB;QACD,MAAM,gBAAgB,GAAG,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC,aAAa,CAAC,CAAA;QACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;QAC9E,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE;YACjC,SAAS,EAAE,gBAAgB;YAC3B,QAAQ;YACR,SAAS,EAAE,OAAO,CAAC,SAAS;SAC5B,CAAC,CAAA;QACF,OAAO,gBAAgB,CAAA;IACxB,CAAC;IAEM,gBAAgB,CAAC,IAAY;;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAC1C,IAAI,QAAQ,EAAE;YACb,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAA;YACrC,MAAA,QAAQ,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,0CAAE,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAA;YAC7E,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;SAC5B;QACD,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE;YACrB,IAAI,MAAM,CAAC,EAAE,EAAE;gBACd,MAAM,CAAC,EAAE,EAAE,CAAA;aACX;QACF,CAAC,CAAC,CAAA;IACH,CAAC;CACD;AAhFD,4DAgFC"}
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
- private readonly systemProjectInitializer;
7
- constructor(projectContainerResolver: ProjectContainerResolver, systemProjectInitializer: SystemProjectInitializer);
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":"AACA,OAAO,EAAE,kBAAkB,IAAI,2BAA2B,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAA;AACpH,OAAO,EAAE,wBAAwB,EAAE,MAAM,4BAA4B,CAAA;AACrE,OAAO,EAAE,kBAAkB,IAAI,wBAAwB,EAAE,MAAM,8BAA8B,CAAA;AAE7F,qBAAa,kBAAmB,YAAW,2BAA2B;IAEpE,OAAO,CAAC,QAAQ,CAAC,wBAAwB;IACzC,OAAO,CAAC,QAAQ,CAAC,wBAAwB;gBADxB,wBAAwB,EAAE,wBAAwB,EAClD,wBAAwB,EAAE,wBAAwB;IAG9D,iBAAiB,CAAC,OAAO,EAAE,kBAAkB;;;CAkBnD;AAED,qBAAa,uBAAwB,YAAW,2BAA2B;IAC1E,OAAO,CAAC,WAAW,CAAqD;IAExE,cAAc,CAAC,WAAW,EAAE,2BAA2B,GAAG,IAAI;IAI9D,iBAAiB,CAAC,OAAO,EAAE,kBAAkB;;;CAM7C"}
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, systemProjectInitializer) {
5
+ constructor(projectContainerResolver) {
7
6
  this.projectContainerResolver = projectContainerResolver;
8
- this.systemProjectInitializer = systemProjectInitializer;
9
7
  }
10
- async initializeProject(project) {
11
- const container = await this.projectContainerResolver.createProjectContainer(project);
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":";;;AAAA,4DAAiD;AAKjD,MAAa,kBAAkB;IAC9B,YACkB,wBAAkD,EAClD,wBAAkD;QADlD,6BAAwB,GAAxB,wBAAwB,CAA0B;QAClD,6BAAwB,GAAxB,wBAAwB,CAA0B;IACjE,CAAC;IAEJ,KAAK,CAAC,iBAAiB,CAAC,OAA2B;QAClD,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAA;QACrF,IAAI,CAAC,SAAS,EAAE;YACf,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAA;SACpC;QACD,MAAM,GAAG,GAAa,EAAE,CAAA;QACxB,IAAI;YACH,MAAM,IAAI,CAAC,wBAAwB,CAAC,UAAU,CAC7C,SAAS,CAAC,4BAA4B,EACtC,SAAS,CAAC,OAAO,EACjB,IAAI,sBAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CACpB,CAAA;SACD;QAAC,OAAO,CAAC,EAAE;YACX,MAAM,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YAClE,MAAM,CAAC,CAAA;SACP;QACD,OAAO,EAAE,GAAG,EAAE,CAAA;IACf,CAAC;CACD;AAxBD,gDAwBC;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,OAA2B;QAC5C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;YACtB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAA;SACzC;QACD,OAAO,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAA;IACnD,CAAC;CACD;AAbD,0DAaC"}
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 { ProjectContainerResolverCallback } from '@contember/engine-http';
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: ProjectContainerResolverCallback, schemaVersionBuilder: SchemaVersionBuilder);
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,EAAE,qBAAqB,IAAI,8BAA8B,EAAE,MAAM,8BAA8B,CAAA;AACtG,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,gCAAgC,EAAE,MAAM,wBAAwB,CAAA;AACzE,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,gCAAgC,EAC1D,oBAAoB,EAAE,oBAAoB;IAEtD,SAAS,CAAC,IAAI,EAAE,MAAM;CAQ5B;AAED,qBAAa,0BAA2B,YAAW,8BAA8B;IAChF,OAAO,CAAC,QAAQ,CAAmC;IAEnD,WAAW,CAAC,QAAQ,EAAE,qBAAqB,GAAG,IAAI;IAIlD,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAM3D"}
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":";;;AAKA,MAAa,qBAAqB;IACjC,YACkB,wBAA0D,EAC1D,oBAA0C;QAD1C,6BAAwB,GAAxB,wBAAwB,CAAkC;QAC1D,yBAAoB,GAApB,oBAAoB,CAAsB;IACzD,CAAC;IACJ,KAAK,CAAC,SAAS,CAAC,IAAY;QAC3B,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAA;QAC3D,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;AAbD,sDAaC;AAED,MAAa,0BAA0B;IAGtC,WAAW,CAAC,QAA+B;QAC1C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IACzB,CAAC;IAED,SAAS,CAAC,WAAmB;QAC5B,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YACnB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;SACtC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,WAAW,CAAC,CAAA;IAC5C,CAAC;CACD;AAbD,gEAaC"}
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
- initializedProjects = await container.initializer.initialize();
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
- // eslint-disable-next-line no-console
91
- console.log(`Contember API running on http://localhost:${port}`);
92
- // eslint-disable-next-line no-console
93
- console.log(`Initialized projects: ${initializedProjects.join(', ')}`);
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
  }
@@ -1 +1 @@
1
- {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/start.ts"],"names":[],"mappings":"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"}