@contember/engine-system-api 0.12.0-beta.2 → 1.0.0-alpha.3
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/dist/src/SystemContainer.d.ts +15 -14
- package/dist/src/SystemContainer.d.ts.map +1 -1
- package/dist/src/SystemContainer.js +7 -11
- package/dist/src/SystemContainer.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/model/ProjectInitializer.d.ts.map +1 -1
- package/dist/src/model/ProjectInitializer.js +7 -17
- package/dist/src/model/ProjectInitializer.js.map +1 -1
- package/dist/src/model/ProjectTruncateExecutor.js +3 -3
- package/dist/src/model/ProjectTruncateExecutor.js.map +1 -1
- package/dist/src/model/authorization/AuthorizationActions.d.ts +0 -20
- package/dist/src/model/authorization/AuthorizationActions.d.ts.map +1 -1
- package/dist/src/model/authorization/AuthorizationActions.js +0 -5
- package/dist/src/model/authorization/AuthorizationActions.js.map +1 -1
- package/dist/src/model/authorization/StagePermissionsFactory.d.ts.map +1 -1
- package/dist/src/model/authorization/StagePermissionsFactory.js +1 -21
- package/dist/src/model/authorization/StagePermissionsFactory.js.map +1 -1
- package/dist/src/model/commands/migrations/ModifyMigrationCommand.js +1 -1
- package/dist/src/model/commands/migrations/ModifyMigrationCommand.js.map +1 -1
- package/dist/src/model/commands/migrations/SaveMigrationCommand.js +1 -1
- package/dist/src/model/commands/migrations/SaveMigrationCommand.js.map +1 -1
- package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.d.ts.map +1 -1
- package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.js +2 -3
- package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.js.map +1 -1
- package/dist/src/model/commands/stages/index.d.ts +0 -1
- package/dist/src/model/commands/stages/index.d.ts.map +1 -1
- package/dist/src/model/commands/stages/index.js +0 -1
- package/dist/src/model/commands/stages/index.js.map +1 -1
- package/dist/src/model/database/DatabaseContext.js +1 -1
- package/dist/src/model/database/DatabaseContext.js.map +1 -1
- package/dist/src/model/dependencies/content/index.d.ts +0 -1
- package/dist/src/model/dependencies/content/index.d.ts.map +1 -1
- package/dist/src/model/dependencies/content/index.js +0 -1
- package/dist/src/model/dependencies/content/index.js.map +1 -1
- package/dist/src/model/dependencies/index.d.ts +1 -0
- package/dist/src/model/dependencies/index.d.ts.map +1 -1
- package/dist/src/model/dependencies/index.js +1 -0
- package/dist/src/model/dependencies/index.js.map +1 -1
- package/dist/src/model/dependencies/tenant/IdentityFetcher.d.ts +2 -1
- package/dist/src/model/dependencies/tenant/IdentityFetcher.d.ts.map +1 -1
- package/dist/src/model/dependencies/tenant/index.d.ts +2 -0
- package/dist/src/model/dependencies/tenant/index.d.ts.map +1 -0
- package/dist/src/model/{events/dependency → dependencies/tenant}/index.js +1 -5
- package/dist/src/model/dependencies/tenant/index.js.map +1 -0
- package/dist/src/model/events/EventResponseBuilder.d.ts +11 -0
- package/dist/src/model/events/EventResponseBuilder.d.ts.map +1 -0
- package/dist/src/model/events/{HistoryEventResponseBuilder.js → EventResponseBuilder.js} +19 -18
- package/dist/src/model/events/EventResponseBuilder.js.map +1 -0
- package/dist/src/model/events/EventResponseHelper.d.ts +3 -3
- package/dist/src/model/events/EventResponseHelper.js +3 -3
- package/dist/src/model/events/EventResponseHelper.js.map +1 -1
- package/dist/src/model/events/identityUtils.js +1 -1
- package/dist/src/model/events/identityUtils.js.map +1 -1
- package/dist/src/model/events/index.d.ts +1 -5
- package/dist/src/model/events/index.d.ts.map +1 -1
- package/dist/src/model/events/index.js +1 -5
- package/dist/src/model/events/index.js.map +1 -1
- package/dist/src/model/helpers/modelHelpers.js +1 -1
- package/dist/src/model/helpers/modelHelpers.js.map +1 -1
- package/dist/src/model/migrations/MigrationExecutor.d.ts.map +1 -1
- package/dist/src/model/migrations/MigrationExecutor.js +2 -2
- package/dist/src/model/migrations/MigrationExecutor.js.map +1 -1
- package/dist/src/model/migrations/ProjectMigrator.d.ts.map +1 -1
- package/dist/src/model/migrations/ProjectMigrator.js +6 -12
- package/dist/src/model/migrations/ProjectMigrator.js.map +1 -1
- package/dist/src/model/migrations/SchemaVersionBuilder.js +2 -2
- package/dist/src/model/migrations/SchemaVersionBuilder.js.map +1 -1
- package/dist/src/model/queries/events/EventQueryHelpers.d.ts +4 -3
- package/dist/src/model/queries/events/EventQueryHelpers.d.ts.map +1 -1
- package/dist/src/model/queries/events/EventQueryHelpers.js +4 -5
- package/dist/src/model/queries/events/EventQueryHelpers.js.map +1 -1
- package/dist/src/model/queries/events/EventsQuery.d.ts +12 -0
- package/dist/src/model/queries/events/EventsQuery.d.ts.map +1 -0
- package/dist/src/model/queries/events/EventsQuery.js +88 -0
- package/dist/src/model/queries/events/EventsQuery.js.map +1 -0
- package/dist/src/model/queries/events/OldValuesQuery.d.ts +7 -0
- package/dist/src/model/queries/events/OldValuesQuery.d.ts.map +1 -0
- package/dist/src/model/queries/events/OldValuesQuery.js +25 -0
- package/dist/src/model/queries/events/OldValuesQuery.js.map +1 -0
- package/dist/src/model/queries/events/index.d.ts +2 -0
- package/dist/src/model/queries/events/index.d.ts.map +1 -1
- package/dist/src/model/queries/events/index.js +2 -0
- package/dist/src/model/queries/events/index.js.map +1 -1
- package/dist/src/model/queries/migrations/ExecutedMigrationByVersionQuery.js +2 -2
- package/dist/src/model/queries/migrations/ExecutedMigrationByVersionQuery.js.map +1 -1
- package/dist/src/model/queries/migrations/ExecutedMigrationsQuery.js +1 -1
- package/dist/src/model/queries/migrations/ExecutedMigrationsQuery.js.map +1 -1
- package/dist/src/model/queries/stages/StageBySlugQuery.js +1 -1
- package/dist/src/model/queries/stages/StageBySlugQuery.js.map +1 -1
- package/dist/src/model/queries/stages/StageQueryFactory.d.ts.map +1 -1
- package/dist/src/model/queries/stages/StageQueryFactory.js +0 -1
- package/dist/src/model/queries/stages/StageQueryFactory.js.map +1 -1
- package/dist/src/model/stages/StageCreator.d.ts +1 -2
- package/dist/src/model/stages/StageCreator.d.ts.map +1 -1
- package/dist/src/model/stages/StageCreator.js +2 -10
- package/dist/src/model/stages/StageCreator.js.map +1 -1
- package/dist/src/model/stages/index.d.ts +0 -1
- package/dist/src/model/stages/index.d.ts.map +1 -1
- package/dist/src/model/stages/index.js +0 -1
- package/dist/src/model/stages/index.js.map +1 -1
- package/dist/src/resolvers/ResolverContext.d.ts +4 -3
- package/dist/src/resolvers/ResolverContext.d.ts.map +1 -1
- package/dist/src/resolvers/ResolverContext.js +2 -2
- package/dist/src/resolvers/ResolverContext.js.map +1 -1
- package/dist/src/resolvers/ResolverFactory.d.ts +7 -11
- package/dist/src/resolvers/ResolverFactory.d.ts.map +1 -1
- package/dist/src/resolvers/ResolverFactory.js +21 -14
- package/dist/src/resolvers/ResolverFactory.js.map +1 -1
- package/dist/src/resolvers/mutation/MigrateMutationResolver.d.ts.map +1 -1
- package/dist/src/resolvers/mutation/MigrateMutationResolver.js +3 -2
- package/dist/src/resolvers/mutation/MigrateMutationResolver.js.map +1 -1
- package/dist/src/resolvers/mutation/index.d.ts +1 -0
- package/dist/src/resolvers/mutation/index.d.ts.map +1 -1
- package/dist/src/resolvers/mutation/index.js +1 -0
- package/dist/src/resolvers/mutation/index.js.map +1 -1
- package/dist/src/resolvers/query/EventsQueryResolver.d.ts +11 -0
- package/dist/src/resolvers/query/EventsQueryResolver.d.ts.map +1 -0
- package/dist/src/resolvers/query/EventsQueryResolver.js +26 -0
- package/dist/src/resolvers/query/EventsQueryResolver.js.map +1 -0
- package/dist/src/resolvers/query/index.d.ts +1 -0
- package/dist/src/resolvers/query/index.d.ts.map +1 -1
- package/dist/src/resolvers/query/index.js +1 -0
- package/dist/src/resolvers/query/index.js.map +1 -1
- package/dist/src/resolvers/types/EventOldValuesResolver.d.ts +6 -0
- package/dist/src/resolvers/types/EventOldValuesResolver.d.ts.map +1 -0
- package/dist/src/resolvers/types/EventOldValuesResolver.js +11 -0
- package/dist/src/resolvers/types/EventOldValuesResolver.js.map +1 -0
- package/dist/src/resolvers/types/OldValuesHelpers.d.ts +3 -0
- package/dist/src/resolvers/types/OldValuesHelpers.d.ts.map +1 -0
- package/dist/src/resolvers/types/OldValuesHelpers.js +10 -0
- package/dist/src/resolvers/types/OldValuesHelpers.js.map +1 -0
- package/dist/src/resolvers/types/index.d.ts +2 -0
- package/dist/src/resolvers/types/index.d.ts.map +1 -0
- package/dist/src/resolvers/types/index.js +14 -0
- package/dist/src/resolvers/types/index.js.map +1 -0
- package/dist/src/schema/dev.graphql.js +1 -1
- package/dist/src/schema/dev.graphql.js.map +1 -1
- package/dist/src/schema/system.graphql.d.ts.map +1 -1
- package/dist/src/schema/system.graphql.js +47 -43
- package/dist/src/schema/system.graphql.js.map +1 -1
- package/dist/src/schema/types.d.ts +146 -170
- package/dist/src/schema/types.d.ts.map +1 -1
- package/dist/src/schema/types.js +14 -12
- package/dist/src/schema/types.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/types.d.ts +0 -1
- package/dist/src/types.d.ts.map +1 -1
- package/dist/src/utils/batchQuery.js +1 -1
- package/dist/src/utils/batchQuery.js.map +1 -1
- package/dist/tests/cases/integration/systemApi/projectInitializer.test.js +1 -1
- package/dist/tests/cases/integration/systemApi/projectInitializer.test.js.map +1 -1
- package/dist/tests/src/asserts.js +1 -1
- package/dist/tests/src/asserts.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/migrations/2020-05-06-150000-composed-primary.js +4 -4
- package/migrations/2020-05-06-150000-composed-primary.test.js +3 -3
- package/migrations/2020-06-01-103000-event-trigger-perf.js +1 -1
- package/migrations/2020-06-01-103000-event-trigger-perf.test.js +3 -3
- package/migrations/2021-05-07-155800-event-log-rework.js +1 -1
- package/migrations/2021-05-19-1232000-event-log-fix-constraint.js +1 -1
- package/migrations/2021-12-21-155500-events-up.sql +6 -0
- package/migrations/index.js +1 -1
- package/migrations/tsconfig.tsbuildinfo +1 -1
- package/package.json +14 -14
- package/src/SystemContainer.ts +18 -26
- package/src/index.ts +0 -1
- package/src/model/ProjectInitializer.ts +5 -16
- package/src/model/authorization/AuthorizationActions.ts +0 -8
- package/src/model/authorization/StagePermissionsFactory.ts +0 -21
- package/src/model/commands/stages/CreateOrUpdateStageCommand.ts +1 -2
- package/src/model/commands/stages/index.ts +0 -1
- package/src/model/dependencies/content/index.ts +0 -1
- package/src/model/dependencies/index.ts +1 -0
- package/src/model/dependencies/tenant/IdentityFetcher.ts +3 -1
- package/src/model/dependencies/tenant/index.ts +1 -0
- package/src/model/events/{HistoryEventResponseBuilder.ts → EventResponseBuilder.ts} +13 -17
- package/src/model/events/EventResponseHelper.ts +3 -3
- package/src/model/events/index.ts +1 -5
- package/src/model/migrations/MigrationExecutor.ts +0 -2
- package/src/model/migrations/ProjectMigrator.ts +5 -11
- package/src/model/migrations/SchemaVersionBuilder.ts +1 -1
- package/src/model/queries/events/EventQueryHelpers.ts +15 -12
- package/src/model/queries/events/EventsQuery.ts +105 -0
- package/src/model/queries/events/OldValuesQuery.ts +23 -0
- package/src/model/queries/events/index.ts +2 -0
- package/src/model/queries/stages/StageQueryFactory.ts +0 -1
- package/src/model/stages/StageCreator.ts +1 -12
- package/src/model/stages/index.ts +0 -1
- package/src/resolvers/ResolverContext.ts +5 -4
- package/src/resolvers/ResolverFactory.ts +27 -37
- package/src/resolvers/mutation/MigrateMutationResolver.ts +4 -3
- package/src/resolvers/mutation/index.ts +1 -0
- package/src/resolvers/query/EventsQueryResolver.ts +42 -0
- package/src/resolvers/query/index.ts +1 -0
- package/src/resolvers/types/EventOldValuesResolver.ts +13 -0
- package/src/resolvers/types/OldValuesHelpers.ts +11 -0
- package/src/resolvers/types/index.ts +1 -0
- package/src/schema/system.graphql.ts +46 -42
- package/src/schema/types.ts +148 -175
- package/src/types.ts +0 -1
- package/tests/src/asserts.ts +1 -1
- package/dist/src/model/commands/stages/UpdateStageEventCommand.d.ts +0 -8
- package/dist/src/model/commands/stages/UpdateStageEventCommand.d.ts.map +0 -1
- package/dist/src/model/commands/stages/UpdateStageEventCommand.js +0 -21
- package/dist/src/model/commands/stages/UpdateStageEventCommand.js.map +0 -1
- package/dist/src/model/dependencies/content/ContentEventsApplier.d.ts +0 -23
- package/dist/src/model/dependencies/content/ContentEventsApplier.d.ts.map +0 -1
- package/dist/src/model/dependencies/content/ContentEventsApplier.js +0 -3
- package/dist/src/model/dependencies/content/ContentEventsApplier.js.map +0 -1
- package/dist/src/model/events/DependencyBuilder.d.ts +0 -8
- package/dist/src/model/events/DependencyBuilder.d.ts.map +0 -1
- package/dist/src/model/events/DependencyBuilder.js +0 -3
- package/dist/src/model/events/DependencyBuilder.js.map +0 -1
- package/dist/src/model/events/DiffBuilder.d.ts +0 -48
- package/dist/src/model/events/DiffBuilder.d.ts.map +0 -1
- package/dist/src/model/events/DiffBuilder.js +0 -95
- package/dist/src/model/events/DiffBuilder.js.map +0 -1
- package/dist/src/model/events/EventFilterValidator.d.ts +0 -12
- package/dist/src/model/events/EventFilterValidator.d.ts.map +0 -1
- package/dist/src/model/events/EventFilterValidator.js +0 -50
- package/dist/src/model/events/EventFilterValidator.js.map +0 -1
- package/dist/src/model/events/HistoryEventResponseBuilder.d.ts +0 -10
- package/dist/src/model/events/HistoryEventResponseBuilder.d.ts.map +0 -1
- package/dist/src/model/events/HistoryEventResponseBuilder.js.map +0 -1
- package/dist/src/model/events/TableReferencingResolver.d.ts +0 -8
- package/dist/src/model/events/TableReferencingResolver.d.ts.map +0 -1
- package/dist/src/model/events/TableReferencingResolver.js +0 -31
- package/dist/src/model/events/TableReferencingResolver.js.map +0 -1
- package/dist/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.d.ts +0 -19
- package/dist/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.d.ts.map +0 -1
- package/dist/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.js +0 -79
- package/dist/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.js.map +0 -1
- package/dist/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.d.ts +0 -17
- package/dist/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.d.ts.map +0 -1
- package/dist/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.js +0 -76
- package/dist/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.js.map +0 -1
- package/dist/src/model/events/dependency/DependencyBuilderList.d.ts +0 -9
- package/dist/src/model/events/dependency/DependencyBuilderList.d.ts.map +0 -1
- package/dist/src/model/events/dependency/DependencyBuilderList.js +0 -20
- package/dist/src/model/events/dependency/DependencyBuilderList.js.map +0 -1
- package/dist/src/model/events/dependency/SameRowDependencyBuilder.d.ts +0 -16
- package/dist/src/model/events/dependency/SameRowDependencyBuilder.d.ts.map +0 -1
- package/dist/src/model/events/dependency/SameRowDependencyBuilder.js +0 -38
- package/dist/src/model/events/dependency/SameRowDependencyBuilder.js.map +0 -1
- package/dist/src/model/events/dependency/TransactionDependencyBuilder.d.ts +0 -15
- package/dist/src/model/events/dependency/TransactionDependencyBuilder.d.ts.map +0 -1
- package/dist/src/model/events/dependency/TransactionDependencyBuilder.js +0 -30
- package/dist/src/model/events/dependency/TransactionDependencyBuilder.js.map +0 -1
- package/dist/src/model/events/dependency/index.d.ts +0 -6
- package/dist/src/model/events/dependency/index.d.ts.map +0 -1
- package/dist/src/model/events/dependency/index.js.map +0 -1
- package/dist/src/model/stages/StageTree.d.ts +0 -14
- package/dist/src/model/stages/StageTree.d.ts.map +0 -1
- package/dist/src/model/stages/StageTree.js +0 -38
- package/dist/src/model/stages/StageTree.js.map +0 -1
- package/dist/src/resolvers/helpers/StageFetchHelper.d.ts +0 -22
- package/dist/src/resolvers/helpers/StageFetchHelper.d.ts.map +0 -1
- package/dist/src/resolvers/helpers/StageFetchHelper.js +0 -45
- package/dist/src/resolvers/helpers/StageFetchHelper.js.map +0 -1
- package/dist/tests/cases/unit/events/createdRowReference.test.d.ts +0 -2
- package/dist/tests/cases/unit/events/createdRowReference.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/events/createdRowReference.test.js +0 -138
- package/dist/tests/cases/unit/events/createdRowReference.test.js.map +0 -1
- package/dist/tests/cases/unit/events/deletedRowReference.test.d.ts +0 -2
- package/dist/tests/cases/unit/events/deletedRowReference.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/events/deletedRowReference.test.js +0 -103
- package/dist/tests/cases/unit/events/deletedRowReference.test.js.map +0 -1
- package/dist/tests/cases/unit/events/sameRowDependency.test.d.ts +0 -2
- package/dist/tests/cases/unit/events/sameRowDependency.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/events/sameRowDependency.test.js +0 -63
- package/dist/tests/cases/unit/events/sameRowDependency.test.js.map +0 -1
- package/dist/tests/cases/unit/events/transactionDependency.test.d.ts +0 -2
- package/dist/tests/cases/unit/events/transactionDependency.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/events/transactionDependency.test.js +0 -62
- package/dist/tests/cases/unit/events/transactionDependency.test.js.map +0 -1
- package/src/model/commands/stages/UpdateStageEventCommand.ts +0 -16
- package/src/model/dependencies/content/ContentEventsApplier.ts +0 -27
- package/src/model/events/DependencyBuilder.ts +0 -9
- package/src/model/events/DiffBuilder.ts +0 -150
- package/src/model/events/EventFilterValidator.ts +0 -52
- package/src/model/events/TableReferencingResolver.ts +0 -45
- package/src/model/events/dependency/CreatedRowReferenceDependencyBuilder.ts +0 -80
- package/src/model/events/dependency/DeletedRowReferenceDependencyBuilder.ts +0 -75
- package/src/model/events/dependency/DependencyBuilderList.ts +0 -18
- package/src/model/events/dependency/SameRowDependencyBuilder.ts +0 -36
- package/src/model/events/dependency/TransactionDependencyBuilder.ts +0 -31
- package/src/model/events/dependency/index.ts +0 -5
- package/src/model/stages/StageTree.ts +0 -36
- package/src/resolvers/helpers/StageFetchHelper.ts +0 -48
- package/tests/cases/unit/events/createdRowReference.test.ts +0 -131
- package/tests/cases/unit/events/deletedRowReference.test.ts +0 -95
- package/tests/cases/unit/events/sameRowDependency.test.ts +0 -48
- package/tests/cases/unit/events/transactionDependency.test.ts +0 -47
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
-
}) : (function(o, m, k, k2) {
|
|
6
|
-
if (k2 === undefined) k2 = k;
|
|
7
|
-
o[k2] = m[k];
|
|
8
|
-
}));
|
|
9
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
-
}) : function(o, v) {
|
|
12
|
-
o["default"] = v;
|
|
13
|
-
});
|
|
14
|
-
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
-
if (mod && mod.__esModule) return mod;
|
|
16
|
-
var result = {};
|
|
17
|
-
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
-
__setModuleDefault(result, mod);
|
|
19
|
-
return result;
|
|
20
|
-
};
|
|
21
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
-
const uvu_1 = require("uvu");
|
|
23
|
-
const dependency_1 = require("../../../../src/model/events/dependency");
|
|
24
|
-
const schema_definition_1 = require("@contember/schema-definition");
|
|
25
|
-
const schema_utils_1 = require("@contember/schema-utils");
|
|
26
|
-
const engine_common_1 = require("@contember/engine-common");
|
|
27
|
-
const engine_api_tester_1 = require("@contember/engine-api-tester");
|
|
28
|
-
const src_1 = require("../../../../src");
|
|
29
|
-
const assert = __importStar(require("../../../src/asserts"));
|
|
30
|
-
const test = uvu_1.suite('Same transaction dependency builder');
|
|
31
|
-
const now = new Date('2020-10-28 10:00');
|
|
32
|
-
test('basic deps', async () => {
|
|
33
|
-
const model = new schema_definition_1.SchemaBuilder().entity('Author', e => e.column('name')).buildSchema();
|
|
34
|
-
const dependencyBuilder = new dependency_1.TransactionDependencyBuilder();
|
|
35
|
-
const event1 = engine_api_tester_1.testUuid(30);
|
|
36
|
-
const event2 = engine_api_tester_1.testUuid(31);
|
|
37
|
-
const event3 = engine_api_tester_1.testUuid(32);
|
|
38
|
-
const authorEntityId = engine_api_tester_1.testUuid(10);
|
|
39
|
-
const trxId1 = engine_api_tester_1.testUuid(500);
|
|
40
|
-
const trxId2 = engine_api_tester_1.testUuid(501);
|
|
41
|
-
const events = [
|
|
42
|
-
new engine_common_1.UpdateEvent(event1, now, src_1.unnamedIdentity, trxId1, [authorEntityId], 'author', {}),
|
|
43
|
-
new engine_common_1.UpdateEvent(event2, now, src_1.unnamedIdentity, trxId1, [authorEntityId], 'author', {}),
|
|
44
|
-
new engine_common_1.UpdateEvent(event3, now, src_1.unnamedIdentity, trxId2, [authorEntityId], 'author', {}),
|
|
45
|
-
];
|
|
46
|
-
const deps = await dependencyBuilder.build({ ...schema_utils_1.emptySchema, model }, events);
|
|
47
|
-
assert.is(deps.size, 3);
|
|
48
|
-
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
|
|
49
|
-
const event1deps = deps.get(event1);
|
|
50
|
-
// it also includes self-dep
|
|
51
|
-
assert.is(event1deps.size, 2);
|
|
52
|
-
assert.ok(event1deps.has(event2));
|
|
53
|
-
const event2deps = deps.get(event2);
|
|
54
|
-
assert.is(event2deps.size, 2);
|
|
55
|
-
assert.ok(event2deps.has(event1));
|
|
56
|
-
const event3deps = deps.get(event3);
|
|
57
|
-
assert.is(event3deps.size, 1);
|
|
58
|
-
assert.not.ok(event3deps.has(event1));
|
|
59
|
-
assert.not.ok(event3deps.has(event2));
|
|
60
|
-
});
|
|
61
|
-
test.run();
|
|
62
|
-
//# sourceMappingURL=transactionDependency.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"transactionDependency.test.js","sourceRoot":"","sources":["../../../../../tests/cases/unit/events/transactionDependency.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAAA,6BAA2B;AAC3B,wEAAsF;AACtF,oEAA4D;AAC5D,0DAAqD;AACrD,4DAAsD;AACtD,oEAAuD;AACvD,yCAAiD;AACjD,6DAA8C;AAE9C,MAAM,IAAI,GAAG,WAAK,CAAC,qCAAqC,CAAC,CAAA;AAEzD,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,kBAAkB,CAAC,CAAA;AAExC,IAAI,CAAC,YAAY,EAAE,KAAK,IAAI,EAAE;IAC7B,MAAM,KAAK,GAAG,IAAI,iCAAa,EAAE,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IAEvF,MAAM,iBAAiB,GAAG,IAAI,yCAA4B,EAAE,CAAA;IAC5D,MAAM,MAAM,GAAG,4BAAQ,CAAC,EAAE,CAAC,CAAA;IAC3B,MAAM,MAAM,GAAG,4BAAQ,CAAC,EAAE,CAAC,CAAA;IAC3B,MAAM,MAAM,GAAG,4BAAQ,CAAC,EAAE,CAAC,CAAA;IAC3B,MAAM,cAAc,GAAG,4BAAQ,CAAC,EAAE,CAAC,CAAA;IAEnC,MAAM,MAAM,GAAG,4BAAQ,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG,4BAAQ,CAAC,GAAG,CAAC,CAAA;IAC5B,MAAM,MAAM,GAAG;QACd,IAAI,2BAAW,CAAC,MAAM,EAAE,GAAG,EAAE,qBAAe,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC;QACrF,IAAI,2BAAW,CAAC,MAAM,EAAE,GAAG,EAAE,qBAAe,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC;QACrF,IAAI,2BAAW,CAAC,MAAM,EAAE,GAAG,EAAE,qBAAe,EAAE,MAAM,EAAE,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,EAAE,CAAC;KACrF,CAAA;IACD,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,EAAE,GAAG,0BAAW,EAAE,KAAK,EAAE,EAAE,MAAM,CAAC,CAAA;IAC7E,MAAM,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IACvB,oEAAoE;IACpE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;IACpC,4BAA4B;IAC5B,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC7B,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;IACpC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC7B,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAE,CAAA;IACpC,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,CAAA;IAC7B,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IACrC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;AACtC,CAAC,CAAC,CAAA;AAEF,IAAI,CAAC,GAAG,EAAE,CAAA"}
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { UpdateBuilder } from '@contember/database'
|
|
2
|
-
import { Command } from '../Command'
|
|
3
|
-
|
|
4
|
-
export class UpdateStageEventCommand implements Command<void> {
|
|
5
|
-
constructor(private readonly stageSlug: string, private readonly eventId: string) {}
|
|
6
|
-
|
|
7
|
-
public async execute({ db }: Command.Args) {
|
|
8
|
-
await UpdateBuilder.create()
|
|
9
|
-
.table('stage')
|
|
10
|
-
.where({ slug: this.stageSlug })
|
|
11
|
-
.values({
|
|
12
|
-
event_id: this.eventId,
|
|
13
|
-
})
|
|
14
|
-
.execute(db)
|
|
15
|
-
}
|
|
16
|
-
}
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { ContentEvent } from '@contember/engine-common'
|
|
2
|
-
import { Client } from '@contember/database'
|
|
3
|
-
import { Acl, Schema } from '@contember/schema'
|
|
4
|
-
|
|
5
|
-
export interface ContentEventApplyOkResult {
|
|
6
|
-
readonly ok: true
|
|
7
|
-
readonly appliedEvents: ContentEvent[]
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export interface ContentEventApplyErrorResult {
|
|
11
|
-
readonly ok: false
|
|
12
|
-
readonly appliedEvents: ContentEvent[]
|
|
13
|
-
readonly failedEvent: ContentEvent
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export interface ContentEventApplierContext {
|
|
17
|
-
db: Client
|
|
18
|
-
schema: Schema
|
|
19
|
-
identityVariables: Acl.VariablesMap
|
|
20
|
-
roles: string[]
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
export type ContentEventApplyResult = ContentEventApplyOkResult | ContentEventApplyErrorResult
|
|
24
|
-
|
|
25
|
-
export interface ContentEventsApplier {
|
|
26
|
-
apply(context: ContentEventApplierContext, events: ContentEvent[]): Promise<ContentEventApplyResult>
|
|
27
|
-
}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { ContentEvent } from '@contember/engine-common'
|
|
2
|
-
import { Schema } from '@contember/schema'
|
|
3
|
-
import { MapSet } from '../../utils'
|
|
4
|
-
|
|
5
|
-
export interface DependencyBuilder {
|
|
6
|
-
build(schema: Schema, events: ContentEvent[]): Promise<EventsDependencies>
|
|
7
|
-
}
|
|
8
|
-
|
|
9
|
-
export type EventsDependencies = MapSet<string, string>
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import { DependencyBuilder, EventsDependencies } from './DependencyBuilder'
|
|
2
|
-
import { Stage } from '../dtos'
|
|
3
|
-
import { ContentEvent } from '@contember/engine-common'
|
|
4
|
-
import { DatabaseContext } from '../database'
|
|
5
|
-
import { SchemaVersionBuilder } from '../migrations'
|
|
6
|
-
import { EntitiesRelationsInput, EntitiesResult, EntitiesSelector } from '../dependencies'
|
|
7
|
-
import { Acl, Input, Schema } from '@contember/schema'
|
|
8
|
-
import { formatSchemaName } from '../helpers'
|
|
9
|
-
import { filterSchemaByStage, getEntity } from '@contember/schema-utils'
|
|
10
|
-
import { Identity } from '../authorization'
|
|
11
|
-
import { ImmutableSet } from '../../utils/set'
|
|
12
|
-
import { StagingDisabledError } from '../../StagingDisabledError'
|
|
13
|
-
|
|
14
|
-
export type EventsPermissionsVerifierContext = {
|
|
15
|
-
variables: Acl.VariablesMap
|
|
16
|
-
identity: Identity
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
export class DiffBuilder {
|
|
20
|
-
constructor(
|
|
21
|
-
private readonly dependencyBuilder: DependencyBuilder,
|
|
22
|
-
private readonly schemaVersionBuilder: SchemaVersionBuilder,
|
|
23
|
-
private readonly entitiesSelector: EntitiesSelector,
|
|
24
|
-
) {}
|
|
25
|
-
|
|
26
|
-
public async build(
|
|
27
|
-
db: DatabaseContext,
|
|
28
|
-
permissionContext: EventsPermissionsVerifierContext,
|
|
29
|
-
baseStage: Stage,
|
|
30
|
-
headStage: Stage,
|
|
31
|
-
filter: ReadonlyArray<EventFilter> | null,
|
|
32
|
-
): Promise<DiffBuilderResponse> {
|
|
33
|
-
throw new StagingDisabledError()
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
private async filterEvents(
|
|
37
|
-
events: ContentEvent[],
|
|
38
|
-
eventDependencies: EventsDependencies,
|
|
39
|
-
permissionContext: EventsPermissionsVerifierContext,
|
|
40
|
-
db: DatabaseContext,
|
|
41
|
-
schema: Schema,
|
|
42
|
-
baseStage: Stage,
|
|
43
|
-
headStage: Stage,
|
|
44
|
-
filter: ReadonlyArray<EventFilter>,
|
|
45
|
-
): Promise<ContentEvent[]> {
|
|
46
|
-
if (filter.length === 0) {
|
|
47
|
-
return []
|
|
48
|
-
}
|
|
49
|
-
const baseEntities = await this.fetchAffectedEntities(db, permissionContext, schema, baseStage, filter)
|
|
50
|
-
const headEntities = await this.fetchAffectedEntities(db, permissionContext, schema, headStage, filter)
|
|
51
|
-
const allIds = [...baseEntities, ...headEntities]
|
|
52
|
-
|
|
53
|
-
const rootEvents: ContentEvent[] = events.filter(it => it.rowId.some(id => allIds.includes(id)))
|
|
54
|
-
const eventIds = new Set<string>([])
|
|
55
|
-
|
|
56
|
-
const collectDependencies = (ids: ImmutableSet<string>) => {
|
|
57
|
-
ids.forEach(id => {
|
|
58
|
-
if (eventIds.has(id)) {
|
|
59
|
-
return
|
|
60
|
-
}
|
|
61
|
-
eventIds.add(id)
|
|
62
|
-
const deps = eventDependencies.get(id)
|
|
63
|
-
if (deps) {
|
|
64
|
-
collectDependencies(deps)
|
|
65
|
-
}
|
|
66
|
-
})
|
|
67
|
-
}
|
|
68
|
-
const rootEventIds = new Set(rootEvents.map(it => it.id))
|
|
69
|
-
collectDependencies(rootEventIds)
|
|
70
|
-
|
|
71
|
-
return events.filter(it => eventIds.has(it.id))
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
private async fetchAffectedEntities(
|
|
75
|
-
db: DatabaseContext,
|
|
76
|
-
permissionContext: EventsPermissionsVerifierContext,
|
|
77
|
-
schema: Schema,
|
|
78
|
-
stage: Stage,
|
|
79
|
-
filter: readonly EventFilter[],
|
|
80
|
-
): Promise<string[]> {
|
|
81
|
-
const affectedEntities = (
|
|
82
|
-
await Promise.all(
|
|
83
|
-
filter.map(
|
|
84
|
-
async it =>
|
|
85
|
-
await this.entitiesSelector.getEntities(
|
|
86
|
-
{
|
|
87
|
-
db: db.client.forSchema(formatSchemaName(stage)),
|
|
88
|
-
schema: filterSchemaByStage(schema, stage.slug),
|
|
89
|
-
identityVariables: permissionContext.variables,
|
|
90
|
-
roles: permissionContext.identity.roles,
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
entity: it.entity,
|
|
94
|
-
relations: it.relations,
|
|
95
|
-
filter: it.id
|
|
96
|
-
? {
|
|
97
|
-
[getEntity(schema.model, it.entity).primary]: { eq: it.id },
|
|
98
|
-
}
|
|
99
|
-
: it.filter || {},
|
|
100
|
-
},
|
|
101
|
-
),
|
|
102
|
-
),
|
|
103
|
-
)
|
|
104
|
-
).flatMap(it => it)
|
|
105
|
-
const collectIds = (result: EntitiesResult): string[] => {
|
|
106
|
-
const { id, ...rest } = result
|
|
107
|
-
return [
|
|
108
|
-
id,
|
|
109
|
-
...Object.values(rest).flatMap(it => {
|
|
110
|
-
if (!it) {
|
|
111
|
-
return []
|
|
112
|
-
}
|
|
113
|
-
if (Array.isArray(it)) {
|
|
114
|
-
return it.flatMap(collectIds)
|
|
115
|
-
}
|
|
116
|
-
return collectIds(it)
|
|
117
|
-
}),
|
|
118
|
-
]
|
|
119
|
-
}
|
|
120
|
-
return affectedEntities.flatMap(it => (it ? collectIds(it) : [])).filter(it => it !== null)
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
export type DiffBuilderResponse = DiffBuilderOkResponse | DiffBuilderErrorResponse
|
|
125
|
-
|
|
126
|
-
export enum DiffBuilderErrorCode {
|
|
127
|
-
notRebased = 'notRebased',
|
|
128
|
-
invalidFilter = 'invalidFilter',
|
|
129
|
-
}
|
|
130
|
-
|
|
131
|
-
export class DiffBuilderErrorResponse {
|
|
132
|
-
public readonly ok: false = false
|
|
133
|
-
|
|
134
|
-
constructor(public readonly error: DiffBuilderErrorCode, public readonly message: string) {}
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
export type EventWithDependencies = ContentEvent & { dependencies: ImmutableSet<string> }
|
|
138
|
-
|
|
139
|
-
export class DiffBuilderOkResponse {
|
|
140
|
-
public readonly ok: true = true
|
|
141
|
-
|
|
142
|
-
constructor(public readonly events: EventWithDependencies[]) {}
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
export type EventFilter = {
|
|
146
|
-
entity: string
|
|
147
|
-
id?: string
|
|
148
|
-
filter?: Input.Where
|
|
149
|
-
relations: EntitiesRelationsInput
|
|
150
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import { Model } from '@contember/schema'
|
|
2
|
-
import { EventFilter } from './DiffBuilder'
|
|
3
|
-
import { acceptFieldVisitor, getEntity, ModelError, ModelErrorCode } from '@contember/schema-utils'
|
|
4
|
-
import { EntitiesRelationsInput } from '../dependencies/content'
|
|
5
|
-
|
|
6
|
-
export class InvalidFilterError {
|
|
7
|
-
constructor(public readonly message: string) {}
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export class EventFilterValidator {
|
|
11
|
-
public static validateFilter(model: Model.Schema, filter: EventFilter): void {
|
|
12
|
-
const entity = EventFilterValidator.getEntity(model, filter.entity)
|
|
13
|
-
EventFilterValidator.validateRelations(model, entity, filter.relations, [entity.name])
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
private static getEntity(model: Model.Schema, entityName: string): Model.Entity {
|
|
17
|
-
try {
|
|
18
|
-
return getEntity(model, entityName)
|
|
19
|
-
} catch (e) {
|
|
20
|
-
if (e instanceof ModelError && e.code === ModelErrorCode.ENTITY_NOT_FOUND) {
|
|
21
|
-
throw new InvalidFilterError(`${entityName}: entity not found`)
|
|
22
|
-
}
|
|
23
|
-
throw e
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
private static validateRelations(
|
|
28
|
-
model: Model.Schema,
|
|
29
|
-
entity: Model.Entity,
|
|
30
|
-
relations: EntitiesRelationsInput,
|
|
31
|
-
path: string[],
|
|
32
|
-
): void {
|
|
33
|
-
for (const relation of relations) {
|
|
34
|
-
const newPath = [...path, relation.name]
|
|
35
|
-
try {
|
|
36
|
-
const targetEntity = acceptFieldVisitor(model, entity, relation.name, {
|
|
37
|
-
visitColumn: () => {
|
|
38
|
-
throw new InvalidFilterError(`${newPath.join('.')}: not a relation`)
|
|
39
|
-
},
|
|
40
|
-
visitRelation: ({}, {}, targetEntity) => {
|
|
41
|
-
return targetEntity
|
|
42
|
-
},
|
|
43
|
-
})
|
|
44
|
-
EventFilterValidator.validateRelations(model, targetEntity, relation.relations, newPath)
|
|
45
|
-
} catch (e) {
|
|
46
|
-
if (e instanceof ModelError && e.code === ModelErrorCode.FIELD_NOT_FOUND) {
|
|
47
|
-
throw new InvalidFilterError(`${newPath.join('.')}: field not found`)
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { Model } from '@contember/schema'
|
|
2
|
-
import { acceptEveryFieldVisitor } from '@contember/schema-utils'
|
|
3
|
-
|
|
4
|
-
export const getTableReferencing = (schema: Model.Schema): TableReferencingResolverResult => {
|
|
5
|
-
const result: TableReferencingResolverResult = {}
|
|
6
|
-
|
|
7
|
-
for (let entity of Object.values(schema.entities)) {
|
|
8
|
-
result[entity.tableName] = {}
|
|
9
|
-
acceptEveryFieldVisitor(
|
|
10
|
-
schema,
|
|
11
|
-
entity,
|
|
12
|
-
new (class implements Model.RelationByTypeVisitor<void> {
|
|
13
|
-
visitManyHasOne({}, relation: Model.ManyHasOneRelation, targetEntity: Model.Entity) {
|
|
14
|
-
result[entity.tableName][relation.joiningColumn.columnName] = targetEntity.tableName
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
visitOneHasOneOwning({}, relation: Model.OneHasOneOwningRelation, targetEntity: Model.Entity) {
|
|
18
|
-
result[entity.tableName][relation.joiningColumn.columnName] = targetEntity.tableName
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
visitManyHasManyOwning(
|
|
22
|
-
entity: Model.Entity,
|
|
23
|
-
relation: Model.ManyHasManyOwningRelation,
|
|
24
|
-
targetEntity: Model.Entity,
|
|
25
|
-
) {
|
|
26
|
-
result[relation.joiningTable.tableName] = {
|
|
27
|
-
[relation.joiningTable.joiningColumn.columnName]: entity.tableName,
|
|
28
|
-
[relation.joiningTable.inverseJoiningColumn.columnName]: targetEntity.tableName,
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
visitColumn() {}
|
|
33
|
-
|
|
34
|
-
visitManyHasManyInverse() {}
|
|
35
|
-
|
|
36
|
-
visitOneHasMany() {}
|
|
37
|
-
|
|
38
|
-
visitOneHasOneInverse() {}
|
|
39
|
-
})(),
|
|
40
|
-
)
|
|
41
|
-
}
|
|
42
|
-
return result
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
export type TableReferencingResolverResult = { [tableName: string]: { [column: string]: string } }
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import { ContentEvent, EventType } from '@contember/engine-common'
|
|
2
|
-
import { DependencyBuilder, EventsDependencies } from '../DependencyBuilder'
|
|
3
|
-
import { getTableReferencing, TableReferencingResolverResult } from '../TableReferencingResolver'
|
|
4
|
-
import { Schema } from '@contember/schema'
|
|
5
|
-
import { getJunctionTables } from '../../helpers'
|
|
6
|
-
import assert from 'assert'
|
|
7
|
-
import { MapSet, tuple } from '../../../utils'
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Events that references a row depends on creation of such event (or its following update)
|
|
11
|
-
*
|
|
12
|
-
* A1 - A row creation
|
|
13
|
-
* A2 - A row update
|
|
14
|
-
* B1 - some update on B row
|
|
15
|
-
* B2 - some update on B row that references A row
|
|
16
|
-
*
|
|
17
|
-
* v----\
|
|
18
|
-
* A1 A2 B1 B2
|
|
19
|
-
*
|
|
20
|
-
*/
|
|
21
|
-
export class CreatedRowReferenceDependencyBuilder implements DependencyBuilder {
|
|
22
|
-
async build(schema: Schema, events: ContentEvent[]): Promise<EventsDependencies> {
|
|
23
|
-
if (events.length === 0) {
|
|
24
|
-
return new MapSet()
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
const tableReferencing: TableReferencingResolverResult = getTableReferencing(schema.model)
|
|
28
|
-
|
|
29
|
-
const dependencies: EventsDependencies = new MapSet()
|
|
30
|
-
const formatRef = (id: string, table: string) => `${table}#${id}`
|
|
31
|
-
const createdRows = new Map<string, string>()
|
|
32
|
-
const junctionTables = getJunctionTables(schema.model)
|
|
33
|
-
const junctionTableMap = new Map(junctionTables.map(it => tuple(it.tableName, it)))
|
|
34
|
-
|
|
35
|
-
for (const event of events) {
|
|
36
|
-
const junctionTable = junctionTableMap.get(event.tableName)
|
|
37
|
-
if (!junctionTable) {
|
|
38
|
-
assert.strictEqual(event.rowId.length, 1)
|
|
39
|
-
const ref = formatRef(event.rowId[0], event.tableName)
|
|
40
|
-
if (event.type === EventType.create) {
|
|
41
|
-
createdRows.set(ref, event.id)
|
|
42
|
-
} else if (createdRows.has(ref)) {
|
|
43
|
-
// update event reference to latest event
|
|
44
|
-
createdRows.set(ref, event.id)
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
if (event.type !== EventType.create && event.type !== EventType.update) {
|
|
49
|
-
continue
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
for (let column in event.values) {
|
|
53
|
-
const referencedTable = tableReferencing[event.tableName][column]
|
|
54
|
-
if (!referencedTable) {
|
|
55
|
-
continue
|
|
56
|
-
}
|
|
57
|
-
const ref = formatRef(event.values[column], referencedTable)
|
|
58
|
-
const createEventId = createdRows.get(ref)
|
|
59
|
-
if (createEventId !== undefined) {
|
|
60
|
-
dependencies.add(event.id, createEventId)
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
if (junctionTable) {
|
|
64
|
-
event.rowId.forEach((id, index) => {
|
|
65
|
-
assert.ok(index === 0 || index === 1)
|
|
66
|
-
const columnName =
|
|
67
|
-
index === 0 ? junctionTable.joiningColumn.columnName : junctionTable.inverseJoiningColumn.columnName
|
|
68
|
-
const table = tableReferencing[junctionTable.tableName][columnName]
|
|
69
|
-
const ref = formatRef(id, table)
|
|
70
|
-
const createdEventId = createdRows.get(ref)
|
|
71
|
-
if (createdEventId) {
|
|
72
|
-
dependencies.add(event.id, createdEventId)
|
|
73
|
-
}
|
|
74
|
-
})
|
|
75
|
-
}
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return dependencies
|
|
79
|
-
}
|
|
80
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { ContentEvent, EventType } from '@contember/engine-common'
|
|
2
|
-
import { DependencyBuilder, EventsDependencies } from '../DependencyBuilder'
|
|
3
|
-
import { getTableReferencing, TableReferencingResolverResult } from '../TableReferencingResolver'
|
|
4
|
-
import { Schema } from '@contember/schema'
|
|
5
|
-
import { getJunctionTables } from '../../helpers'
|
|
6
|
-
import assert from 'assert'
|
|
7
|
-
import { MapSet, tuple } from '../../../utils'
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Delete event depends on all previous events which references this row
|
|
11
|
-
*
|
|
12
|
-
* A1 - update event which references X row
|
|
13
|
-
* A2 - another event which does not reference X row
|
|
14
|
-
*
|
|
15
|
-
* v----\
|
|
16
|
-
* A1 A2 X1
|
|
17
|
-
*
|
|
18
|
-
*/
|
|
19
|
-
export class DeletedRowReferenceDependencyBuilder implements DependencyBuilder {
|
|
20
|
-
async build(schema: Schema, events: ContentEvent[]): Promise<EventsDependencies> {
|
|
21
|
-
if (events.length === 0) {
|
|
22
|
-
return new MapSet()
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const tableReferencing: TableReferencingResolverResult = getTableReferencing(schema.model)
|
|
26
|
-
const formatRef = (id: string, table: string) => `${table}#${id}`
|
|
27
|
-
const dependencies: EventsDependencies = new MapSet()
|
|
28
|
-
const deletedRows = new Map()
|
|
29
|
-
const junctionTables = getJunctionTables(schema.model)
|
|
30
|
-
const junctionTableMap = new Map(junctionTables.map(it => tuple(it.tableName, it)))
|
|
31
|
-
|
|
32
|
-
for (const event of events) {
|
|
33
|
-
if (!junctionTableMap.has(event.tableName)) {
|
|
34
|
-
assert.strictEqual(event.rowId.length, 1)
|
|
35
|
-
if (event.type === EventType.delete) {
|
|
36
|
-
deletedRows.set(formatRef(event.rowId[0], event.tableName), event.id)
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
for (const event of events) {
|
|
42
|
-
if (event.type !== EventType.create && event.type !== EventType.update) {
|
|
43
|
-
continue
|
|
44
|
-
}
|
|
45
|
-
const junctionTable = junctionTableMap.get(event.tableName)
|
|
46
|
-
if (junctionTable) {
|
|
47
|
-
event.rowId.forEach((id, index) => {
|
|
48
|
-
assert.ok(index === 0 || index === 1)
|
|
49
|
-
const columnName =
|
|
50
|
-
index === 0 ? junctionTable.joiningColumn.columnName : junctionTable.inverseJoiningColumn.columnName
|
|
51
|
-
const table = tableReferencing[junctionTable.tableName][columnName]
|
|
52
|
-
const ref = formatRef(id, table)
|
|
53
|
-
const deleteEventId = deletedRows.get(ref)
|
|
54
|
-
if (deleteEventId) {
|
|
55
|
-
dependencies.add(deleteEventId, event.id)
|
|
56
|
-
}
|
|
57
|
-
})
|
|
58
|
-
} else {
|
|
59
|
-
for (let column in event.values) {
|
|
60
|
-
const referencedTable = tableReferencing[event.tableName][column]
|
|
61
|
-
if (!referencedTable) {
|
|
62
|
-
continue
|
|
63
|
-
}
|
|
64
|
-
const ref = formatRef(event.values[column], referencedTable)
|
|
65
|
-
const deleteEventId = deletedRows.get(ref)
|
|
66
|
-
if (deleteEventId) {
|
|
67
|
-
dependencies.add(deleteEventId, event.id)
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
return dependencies
|
|
74
|
-
}
|
|
75
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { DependencyBuilder, EventsDependencies } from '../DependencyBuilder'
|
|
2
|
-
import { ContentEvent } from '@contember/engine-common'
|
|
3
|
-
import { Schema } from '@contember/schema'
|
|
4
|
-
import { MapSet } from '../../../utils'
|
|
5
|
-
|
|
6
|
-
export class DependencyBuilderList implements DependencyBuilder {
|
|
7
|
-
constructor(private readonly builders: DependencyBuilder[]) {}
|
|
8
|
-
|
|
9
|
-
async build(schema: Schema, events: ContentEvent[]): Promise<EventsDependencies> {
|
|
10
|
-
const deps: EventsDependencies = new MapSet()
|
|
11
|
-
for (const event of events) {
|
|
12
|
-
deps.add(event.id)
|
|
13
|
-
}
|
|
14
|
-
const buildersDeps = await Promise.all(this.builders.map(builder => builder.build(schema, events)))
|
|
15
|
-
deps.merge(...buildersDeps)
|
|
16
|
-
return deps
|
|
17
|
-
}
|
|
18
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { ContentEvent } from '@contember/engine-common'
|
|
2
|
-
import { DependencyBuilder, EventsDependencies } from '../DependencyBuilder'
|
|
3
|
-
import { Schema } from '@contember/schema'
|
|
4
|
-
import { getJunctionTables } from '../../helpers'
|
|
5
|
-
import assert from 'assert'
|
|
6
|
-
import { MapSet } from '../../../utils'
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Events on a same row are depending on each other. Meaning that
|
|
10
|
-
* a) all previous events has to be executed
|
|
11
|
-
* b) all following events has to be executed (todo rethink)
|
|
12
|
-
*
|
|
13
|
-
* v-----v-----v
|
|
14
|
-
* A1 B1 A2 B2 A3
|
|
15
|
-
* ^-----^
|
|
16
|
-
*/
|
|
17
|
-
export class SameRowDependencyBuilder implements DependencyBuilder {
|
|
18
|
-
async build(schema: Schema, events: ContentEvent[]): Promise<EventsDependencies> {
|
|
19
|
-
const rows = new MapSet<string, string>()
|
|
20
|
-
const dependencies: EventsDependencies = new MapSet()
|
|
21
|
-
const junctionTables = new Set(getJunctionTables(schema.model).map(it => it.tableName))
|
|
22
|
-
const formatRef = (id: string, table: string) => `${table}#${id}`
|
|
23
|
-
for (const event of events) {
|
|
24
|
-
if (junctionTables.has(event.tableName)) {
|
|
25
|
-
continue
|
|
26
|
-
}
|
|
27
|
-
assert.strictEqual(event.rowId.length, 1)
|
|
28
|
-
const ref = formatRef(event.rowId[0], event.tableName)
|
|
29
|
-
|
|
30
|
-
const events = rows.add(ref, event.id)
|
|
31
|
-
dependencies.set(event.id, events)
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
return dependencies
|
|
35
|
-
}
|
|
36
|
-
}
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { ContentEvent } from '@contember/engine-common'
|
|
2
|
-
import { DependencyBuilder, EventsDependencies } from '../DependencyBuilder'
|
|
3
|
-
import { Schema } from '@contember/schema'
|
|
4
|
-
import { MapSet } from '../../../utils'
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* Events in transaction are dependent on each other (meaning you have to execute whole transaction at once)
|
|
8
|
-
* todo this has to be optimized that only "dangerous" operations are dependent
|
|
9
|
-
*
|
|
10
|
-
* v--v v--v--v
|
|
11
|
-
* A1 A2 B1 B2 B3
|
|
12
|
-
*
|
|
13
|
-
*/
|
|
14
|
-
export class TransactionDependencyBuilder implements DependencyBuilder {
|
|
15
|
-
async build(schema: Schema, events: ContentEvent[]): Promise<EventsDependencies> {
|
|
16
|
-
let trxId = null
|
|
17
|
-
let eventsInTrx: Set<string> = new Set()
|
|
18
|
-
let dependencies: EventsDependencies = new MapSet()
|
|
19
|
-
|
|
20
|
-
for (const event of events) {
|
|
21
|
-
if (trxId !== event.transactionId) {
|
|
22
|
-
trxId = event.transactionId
|
|
23
|
-
eventsInTrx = new Set()
|
|
24
|
-
}
|
|
25
|
-
eventsInTrx.add(event.id)
|
|
26
|
-
dependencies.set(event.id, eventsInTrx)
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
return dependencies
|
|
30
|
-
}
|
|
31
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import { StageWithoutEvent } from '../dtos'
|
|
2
|
-
import { ProjectConfig, StageConfig } from '../../types'
|
|
3
|
-
import { ImplementationException } from '../../utils'
|
|
4
|
-
|
|
5
|
-
export class StageTree {
|
|
6
|
-
constructor(private readonly root: StageConfig, private readonly childMap: StageTreeMap) {}
|
|
7
|
-
|
|
8
|
-
public getRoot(): StageConfig {
|
|
9
|
-
return this.root
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
public getChildren(stage: StageWithoutEvent): StageConfig[] {
|
|
13
|
-
return this.childMap[stage.slug] || []
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export const createStageTree = (project: Pick<ProjectConfig, 'stages'>): StageTree => {
|
|
18
|
-
const rootStages = project.stages.filter(it => !it.base)
|
|
19
|
-
if (rootStages.length !== 1) {
|
|
20
|
-
throw new Error(`Exactly 1 root stage expected, ${rootStages.length} found`)
|
|
21
|
-
}
|
|
22
|
-
const rootStage = rootStages[0]
|
|
23
|
-
const stages = project.stages
|
|
24
|
-
.filter(it => it.base)
|
|
25
|
-
.reduce<StageTreeMap>((acc, stage) => {
|
|
26
|
-
if (!stage.base) {
|
|
27
|
-
throw new ImplementationException()
|
|
28
|
-
}
|
|
29
|
-
return {
|
|
30
|
-
...acc,
|
|
31
|
-
[stage.base]: [...(acc[stage.base] || []), stage],
|
|
32
|
-
}
|
|
33
|
-
}, {})
|
|
34
|
-
return new StageTree(rootStage, stages)
|
|
35
|
-
}
|
|
36
|
-
export type StageTreeMap = { [parent: string]: StageConfig[] }
|