@contember/engine-system-api 1.2.0-alpha.15 → 1.2.0-alpha.17
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.js +1 -1
- package/dist/src/SystemContainer.js.map +1 -1
- package/dist/src/model/ProjectInitializer.d.ts +1 -1
- package/dist/src/model/ProjectInitializer.d.ts.map +1 -1
- package/dist/src/model/ProjectInitializer.js +32 -30
- package/dist/src/model/ProjectInitializer.js.map +1 -1
- package/dist/src/model/migrations/ProjectMigrator.d.ts.map +1 -1
- package/dist/src/model/migrations/ProjectMigrator.js +2 -2
- package/dist/src/model/migrations/ProjectMigrator.js.map +1 -1
- package/dist/src/resolvers/SystemResolverContext.d.ts +3 -4
- package/dist/src/resolvers/SystemResolverContext.d.ts.map +1 -1
- package/dist/src/resolvers/SystemResolverContext.js +2 -4
- package/dist/src/resolvers/SystemResolverContext.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/tests/cases/integration/systemApi/projectInitializer.test.js +3 -3
- package/dist/tests/cases/integration/systemApi/projectInitializer.test.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -13
- package/src/SystemContainer.ts +2 -2
- package/src/model/ProjectInitializer.ts +41 -40
- package/src/model/migrations/ProjectMigrator.ts +2 -2
- package/src/resolvers/SystemResolverContext.ts +1 -2
- package/tests/cases/integration/systemApi/projectInitializer.test.ts +3 -3
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contember/engine-system-api",
|
|
3
|
-
"version": "1.2.0-alpha.
|
|
3
|
+
"version": "1.2.0-alpha.17",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"typings": "dist/src/index.d.ts",
|
|
@@ -9,22 +9,22 @@
|
|
|
9
9
|
"test": "vitest"
|
|
10
10
|
},
|
|
11
11
|
"dependencies": {
|
|
12
|
-
"@contember/authorization": "^1.2.0-alpha.
|
|
13
|
-
"@contember/database": "^1.2.0-alpha.
|
|
14
|
-
"@contember/database-migrations": "^1.2.0-alpha.
|
|
15
|
-
"@contember/dic": "^1.2.0-alpha.
|
|
16
|
-
"@contember/engine-common": "^1.2.0-alpha.
|
|
17
|
-
"@contember/graphql-utils": "^1.2.0-alpha.
|
|
18
|
-
"@contember/queryable": "^1.2.0-alpha.
|
|
19
|
-
"@contember/schema": "^1.2.0-alpha.
|
|
20
|
-
"@contember/schema-migrations": "^1.2.0-alpha.
|
|
21
|
-
"@contember/schema-utils": "^1.2.0-alpha.
|
|
12
|
+
"@contember/authorization": "^1.2.0-alpha.17",
|
|
13
|
+
"@contember/database": "^1.2.0-alpha.17",
|
|
14
|
+
"@contember/database-migrations": "^1.2.0-alpha.17",
|
|
15
|
+
"@contember/dic": "^1.2.0-alpha.17",
|
|
16
|
+
"@contember/engine-common": "^1.2.0-alpha.17",
|
|
17
|
+
"@contember/graphql-utils": "^1.2.0-alpha.17",
|
|
18
|
+
"@contember/queryable": "^1.2.0-alpha.17",
|
|
19
|
+
"@contember/schema": "^1.2.0-alpha.17",
|
|
20
|
+
"@contember/schema-migrations": "^1.2.0-alpha.17",
|
|
21
|
+
"@contember/schema-utils": "^1.2.0-alpha.17",
|
|
22
22
|
"@graphql-tools/utils": "^8.6.13",
|
|
23
23
|
"graphql-tag": "^2.12.5"
|
|
24
24
|
},
|
|
25
25
|
"devDependencies": {
|
|
26
|
-
"@contember/engine-api-tester": "^1.2.0-alpha.
|
|
27
|
-
"@contember/schema-definition": "^1.2.0-alpha.
|
|
26
|
+
"@contember/engine-api-tester": "^1.2.0-alpha.17",
|
|
27
|
+
"@contember/schema-definition": "^1.2.0-alpha.17",
|
|
28
28
|
"@graphql-codegen/cli": "^2.6.2",
|
|
29
29
|
"@graphql-codegen/typescript": "^2.5.1",
|
|
30
30
|
"@graphql-codegen/typescript-operations": "^2.4.2",
|
package/src/SystemContainer.ts
CHANGED
|
@@ -118,7 +118,7 @@ export class SystemContainerFactory {
|
|
|
118
118
|
new EventOldValuesResolver())
|
|
119
119
|
.addService('systemResolversFactory', ({ stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver }) =>
|
|
120
120
|
new ResolverFactory(stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver))
|
|
121
|
-
.addService('resolverContextFactory', ({ authorizator
|
|
122
|
-
new SystemResolverContextFactory(authorizator
|
|
121
|
+
.addService('resolverContextFactory', ({ authorizator }) =>
|
|
122
|
+
new SystemResolverContextFactory(authorizator))
|
|
123
123
|
}
|
|
124
124
|
}
|
|
@@ -8,9 +8,10 @@ import {
|
|
|
8
8
|
Connection,
|
|
9
9
|
createDatabaseIfNotExists,
|
|
10
10
|
DatabaseConfig,
|
|
11
|
+
EventManager,
|
|
11
12
|
retryTransaction,
|
|
12
13
|
} from '@contember/database'
|
|
13
|
-
import { Logger } from '@contember/
|
|
14
|
+
import { FingerCrossedLoggerHandler, Logger } from '@contember/logger'
|
|
14
15
|
|
|
15
16
|
export class ProjectInitializer {
|
|
16
17
|
constructor(
|
|
@@ -26,54 +27,54 @@ export class ProjectInitializer {
|
|
|
26
27
|
logger: Logger,
|
|
27
28
|
) {
|
|
28
29
|
const dbContext = databaseContextFactory.create()
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
30
|
+
return await logger.scope(async initLogger => {
|
|
31
|
+
if (project.db) {
|
|
32
|
+
// todo: use dbContext
|
|
33
|
+
initLogger.debug('Executing system schema migrations')
|
|
34
|
+
await createDatabaseIfNotExists(project.db, message => typeof message === 'string' ? initLogger.warn(message) : initLogger.error(message))
|
|
35
|
+
const singleConnection = Connection.createSingle(project.db, err => initLogger.error(err))
|
|
36
|
+
singleConnection.eventManager.on(EventManager.Event.clientError, err => logger.error(err, { message: 'Database client error' }))
|
|
36
37
|
|
|
37
|
-
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
38
|
+
await singleConnection.scope(async connection => {
|
|
39
|
+
const systemSchema = dbContext.client.schema
|
|
40
|
+
|
|
41
|
+
const schemaResolver = (connection: Connection.ConnectionLike) => {
|
|
42
|
+
const dbContextMigrations = databaseContextFactory
|
|
43
|
+
.withClient(new Client(connection, systemSchema, { module: 'system' }))
|
|
44
|
+
.create()
|
|
45
|
+
return this.schemaVersionBuilder.buildSchema(dbContextMigrations)
|
|
46
|
+
}
|
|
47
|
+
await this.systemDbMigrationsRunnerFactory(connection, systemSchema).migrate(
|
|
48
|
+
message => initLogger.warn(message),
|
|
49
|
+
{
|
|
50
|
+
schemaResolver,
|
|
51
|
+
project,
|
|
52
|
+
},
|
|
53
|
+
)
|
|
54
|
+
})
|
|
55
|
+
await singleConnection.end()
|
|
56
|
+
}
|
|
57
|
+
await retryTransaction(() =>
|
|
58
|
+
dbContext.transaction(async trx => {
|
|
59
|
+
await this.initStages(trx, project, initLogger)
|
|
60
|
+
}),
|
|
61
|
+
message => initLogger.warn(message),
|
|
62
|
+
)
|
|
63
|
+
if (dbContext.client.connection instanceof Connection) {
|
|
64
|
+
await dbContext.client.connection.clearPool()
|
|
65
|
+
}
|
|
66
|
+
}, {}, { handler: FingerCrossedLoggerHandler.factory() })
|
|
62
67
|
}
|
|
63
68
|
|
|
64
69
|
private async initStages(db: DatabaseContext<Connection.TransactionLike>, project: ProjectConfig, logger: Logger) {
|
|
65
|
-
|
|
66
|
-
logger.group(`Creating stages`)
|
|
67
|
-
|
|
70
|
+
logger.debug(`Creating stages`)
|
|
68
71
|
for (const stage of project.stages) {
|
|
69
72
|
const created = await this.stageCreator.createStage(db, stage)
|
|
70
73
|
if (created) {
|
|
71
|
-
logger.
|
|
74
|
+
logger.warn(`Created stage ${stage.slug}`, { stage: stage.slug })
|
|
72
75
|
} else {
|
|
73
|
-
logger.
|
|
76
|
+
logger.debug(`Updated stage ${stage.slug}`, { stage: stage.slug })
|
|
74
77
|
}
|
|
75
78
|
}
|
|
76
|
-
|
|
77
|
-
logger.groupEnd()
|
|
78
79
|
}
|
|
79
80
|
}
|
|
@@ -8,6 +8,7 @@ import { ExecutedMigrationsResolver } from './ExecutedMigrationsResolver'
|
|
|
8
8
|
import { MigrateErrorCode } from '../../schema'
|
|
9
9
|
import { SchemaVersionBuilder } from './SchemaVersionBuilder'
|
|
10
10
|
import { SchemaValidator } from '@contember/schema-utils'
|
|
11
|
+
import { logger } from '@contember/logger'
|
|
11
12
|
|
|
12
13
|
export class ProjectMigrator {
|
|
13
14
|
constructor(
|
|
@@ -120,8 +121,7 @@ export class ProjectMigrator {
|
|
|
120
121
|
await db.query(sql)
|
|
121
122
|
} catch (e) {
|
|
122
123
|
if (e instanceof QueryError) {
|
|
123
|
-
|
|
124
|
-
console.error(e)
|
|
124
|
+
logger.error(e, { message: 'Migration failed' })
|
|
125
125
|
throw new MigrationFailedError(migrationVersion, e.message)
|
|
126
126
|
}
|
|
127
127
|
throw e
|
|
@@ -10,15 +10,14 @@ import { ItemLoader } from '../utils/batchQuery'
|
|
|
10
10
|
export class SystemResolverContextFactory {
|
|
11
11
|
constructor(
|
|
12
12
|
private readonly authorizator: Authorizator<Identity>,
|
|
13
|
-
private readonly schemaVersionBuilder: SchemaVersionBuilder,
|
|
14
13
|
) {}
|
|
15
14
|
|
|
16
15
|
public async create(
|
|
16
|
+
schema: Schema,
|
|
17
17
|
systemDbContext: DatabaseContext,
|
|
18
18
|
project: ProjectConfig,
|
|
19
19
|
identity: Identity,
|
|
20
20
|
): Promise<SystemResolverContext> {
|
|
21
|
-
const schema = await this.schemaVersionBuilder.buildSchema(systemDbContext)
|
|
22
21
|
const stagePermissionsFactory = new StagePermissionsFactory(schema)
|
|
23
22
|
const loaders = new Map<LoaderFactory<any, any>, ItemLoader<any, any>>()
|
|
24
23
|
return {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { ApiTester } from '@contember/engine-api-tester'
|
|
2
2
|
import { ProjectConfig, StageConfig } from '../../../../src'
|
|
3
3
|
import { assert, test } from 'vitest'
|
|
4
|
+
import { createLogger, JsonStreamLoggerHandler } from '@contember/logger'
|
|
4
5
|
|
|
5
|
-
import { Logger } from '@contember/engine-common'
|
|
6
6
|
|
|
7
|
-
const
|
|
7
|
+
const logger = createLogger(new JsonStreamLoggerHandler(process.stderr))
|
|
8
8
|
|
|
9
9
|
test('create stage', async () => {
|
|
10
10
|
const prodStage: StageConfig = {
|
|
@@ -22,7 +22,7 @@ test('create stage', async () => {
|
|
|
22
22
|
},
|
|
23
23
|
})
|
|
24
24
|
|
|
25
|
-
await tester.systemContainer.projectInitializer.initialize(tester.databaseContextFactory, project,
|
|
25
|
+
await tester.systemContainer.projectInitializer.initialize(tester.databaseContextFactory, project, logger)
|
|
26
26
|
const createdStagesA = await tester.stages.refreshCreatedStages()
|
|
27
27
|
assert.ok(createdStagesA.has('prod'))
|
|
28
28
|
|