@contember/engine-system-api 1.2.0 → 1.3.0-alpha.13

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 (221) hide show
  1. package/dist/src/SystemContainer.d.ts +5 -12
  2. package/dist/src/SystemContainer.d.ts.map +1 -1
  3. package/dist/src/SystemContainer.js +4 -7
  4. package/dist/src/SystemContainer.js.map +1 -1
  5. package/dist/src/bin/runMigrations.d.ts +2 -0
  6. package/dist/src/bin/runMigrations.d.ts.map +1 -0
  7. package/dist/src/bin/runMigrations.js +34 -0
  8. package/dist/src/bin/runMigrations.js.map +1 -0
  9. package/dist/src/index.d.ts +1 -1
  10. package/dist/src/index.d.ts.map +1 -1
  11. package/dist/src/index.js +2 -3
  12. package/dist/src/index.js.map +1 -1
  13. package/dist/src/migrations/2018-08-04-102200-init.d.ts +3 -0
  14. package/dist/src/migrations/2018-08-04-102200-init.d.ts.map +1 -0
  15. package/dist/src/migrations/2018-08-04-102200-init.js +37 -0
  16. package/dist/src/migrations/2018-08-04-102200-init.js.map +1 -0
  17. package/dist/src/migrations/2018-08-05-130501-trigger-event-function.d.ts +3 -0
  18. package/dist/src/migrations/2018-08-05-130501-trigger-event-function.d.ts.map +1 -0
  19. package/dist/src/migrations/2018-08-05-130501-trigger-event-function.js +99 -0
  20. package/dist/src/migrations/2018-08-05-130501-trigger-event-function.js.map +1 -0
  21. package/dist/src/migrations/2019-01-14-143432-event-trx-id.d.ts +3 -0
  22. package/dist/src/migrations/2019-01-14-143432-event-trx-id.d.ts.map +1 -0
  23. package/dist/src/migrations/2019-01-14-143432-event-trx-id.js +17 -0
  24. package/dist/src/migrations/2019-01-14-143432-event-trx-id.js.map +1 -0
  25. package/dist/src/migrations/2019-02-04-154500-event-rebase.d.ts +3 -0
  26. package/dist/src/migrations/2019-02-04-154500-event-rebase.d.ts.map +1 -0
  27. package/dist/src/migrations/2019-02-04-154500-event-rebase.js +59 -0
  28. package/dist/src/migrations/2019-02-04-154500-event-rebase.js.map +1 -0
  29. package/dist/src/migrations/2019-03-18-104147-event-run-migration-struct.d.ts +3 -0
  30. package/dist/src/migrations/2019-03-18-104147-event-run-migration-struct.d.ts.map +1 -0
  31. package/dist/src/migrations/2019-03-18-104147-event-run-migration-struct.js +12 -0
  32. package/dist/src/migrations/2019-03-18-104147-event-run-migration-struct.js.map +1 -0
  33. package/dist/src/migrations/2019-07-29-103000-trigger-event-function-fix.d.ts +3 -0
  34. package/dist/src/migrations/2019-07-29-103000-trigger-event-function-fix.d.ts.map +1 -0
  35. package/dist/src/migrations/2019-07-29-103000-trigger-event-function-fix.js +66 -0
  36. package/dist/src/migrations/2019-07-29-103000-trigger-event-function-fix.js.map +1 -0
  37. package/dist/src/migrations/2019-11-28-100000-missing-setting-fallback.d.ts +3 -0
  38. package/dist/src/migrations/2019-11-28-100000-missing-setting-fallback.d.ts.map +1 -0
  39. package/dist/src/migrations/2019-11-28-100000-missing-setting-fallback.js +21 -0
  40. package/dist/src/migrations/2019-11-28-100000-missing-setting-fallback.js.map +1 -0
  41. package/dist/src/migrations/2021-03-23-110000-timestamp-fix.d.ts +3 -0
  42. package/dist/src/migrations/2021-03-23-110000-timestamp-fix.d.ts.map +1 -0
  43. package/dist/src/migrations/2021-03-23-110000-timestamp-fix.js +15 -0
  44. package/dist/src/migrations/2021-03-23-110000-timestamp-fix.js.map +1 -0
  45. package/dist/src/migrations/2021-05-07-155800-event-log-rework.js +2 -2
  46. package/dist/src/migrations/2021-12-21-155500-events-up.d.ts +3 -0
  47. package/dist/src/migrations/2021-12-21-155500-events-up.d.ts.map +1 -0
  48. package/dist/src/migrations/2021-12-21-155500-events-up.js +15 -0
  49. package/dist/src/migrations/2021-12-21-155500-events-up.js.map +1 -0
  50. package/dist/src/migrations/2022-02-08-132600-fn-search-path.d.ts +3 -0
  51. package/dist/src/migrations/2022-02-08-132600-fn-search-path.d.ts.map +1 -0
  52. package/dist/src/migrations/2022-02-08-132600-fn-search-path.js +16 -0
  53. package/dist/src/migrations/2022-02-08-132600-fn-search-path.js.map +1 -0
  54. package/dist/src/migrations/2022-02-08-140500-drop-deadcode.d.ts +3 -0
  55. package/dist/src/migrations/2022-02-08-140500-drop-deadcode.d.ts.map +1 -0
  56. package/dist/src/migrations/2022-02-08-140500-drop-deadcode.js +11 -0
  57. package/dist/src/migrations/2022-02-08-140500-drop-deadcode.js.map +1 -0
  58. package/dist/src/migrations/2022-02-08-144400-dynamic-stage-schema.d.ts +3 -0
  59. package/dist/src/migrations/2022-02-08-144400-dynamic-stage-schema.d.ts.map +1 -0
  60. package/dist/src/migrations/2022-02-08-144400-dynamic-stage-schema.js +50 -0
  61. package/dist/src/migrations/2022-02-08-144400-dynamic-stage-schema.js.map +1 -0
  62. package/dist/src/migrations/2022-10-03-110000-table-on-delete.d.ts +4 -0
  63. package/dist/src/migrations/2022-10-03-110000-table-on-delete.d.ts.map +1 -0
  64. package/dist/src/migrations/2022-10-03-110000-table-on-delete.js +61 -0
  65. package/dist/src/migrations/2022-10-03-110000-table-on-delete.js.map +1 -0
  66. package/dist/src/migrations/runner.d.ts +18 -3
  67. package/dist/src/migrations/runner.d.ts.map +1 -1
  68. package/dist/src/migrations/runner.js +69 -10
  69. package/dist/src/migrations/runner.js.map +1 -1
  70. package/dist/src/migrations/snapshot-factory.d.ts +6 -0
  71. package/dist/src/migrations/snapshot-factory.d.ts.map +1 -0
  72. package/dist/src/migrations/snapshot-factory.js +46 -0
  73. package/dist/src/migrations/snapshot-factory.js.map +1 -0
  74. package/dist/src/migrations/snapshot.d.ts +3 -0
  75. package/dist/src/migrations/snapshot.d.ts.map +1 -0
  76. package/dist/src/migrations/snapshot.js +172 -0
  77. package/dist/src/migrations/snapshot.js.map +1 -0
  78. package/dist/src/migrations/types.d.ts +2 -0
  79. package/dist/src/migrations/types.d.ts.map +1 -1
  80. package/dist/src/model/ProjectInitializer.d.ts +6 -10
  81. package/dist/src/model/ProjectInitializer.d.ts.map +1 -1
  82. package/dist/src/model/ProjectInitializer.js +11 -29
  83. package/dist/src/model/ProjectInitializer.js.map +1 -1
  84. package/dist/src/model/commands/Command.d.ts +1 -5
  85. package/dist/src/model/commands/Command.d.ts.map +1 -1
  86. package/dist/src/model/database/DatabaseContext.d.ts +5 -4
  87. package/dist/src/model/database/DatabaseContext.d.ts.map +1 -1
  88. package/dist/src/model/database/DatabaseContext.js +7 -7
  89. package/dist/src/model/database/DatabaseContext.js.map +1 -1
  90. package/dist/src/model/dtos/ExecutedMigration.d.ts +2 -1
  91. package/dist/src/model/dtos/ExecutedMigration.d.ts.map +1 -1
  92. package/dist/src/model/dtos/ExecutedMigration.js +2 -1
  93. package/dist/src/model/dtos/ExecutedMigration.js.map +1 -1
  94. package/dist/src/model/events/EventResponseBuilder.d.ts +2 -2
  95. package/dist/src/model/events/EventResponseBuilder.d.ts.map +1 -1
  96. package/dist/src/model/events/EventResponseBuilder.js +10 -10
  97. package/dist/src/model/events/EventResponseBuilder.js.map +1 -1
  98. package/dist/src/model/events/EventResponseHelper.d.ts +1 -1
  99. package/dist/src/model/events/EventResponseHelper.d.ts.map +1 -1
  100. package/dist/src/model/events/index.d.ts +1 -0
  101. package/dist/src/model/events/index.d.ts.map +1 -1
  102. package/dist/src/model/events/index.js +1 -0
  103. package/dist/src/model/events/index.js.map +1 -1
  104. package/dist/src/model/events/types.d.ts +56 -0
  105. package/dist/src/model/events/types.d.ts.map +1 -0
  106. package/dist/src/model/events/types.js +51 -0
  107. package/dist/src/model/events/types.js.map +1 -0
  108. package/dist/src/model/helpers/index.d.ts +0 -1
  109. package/dist/src/model/helpers/index.d.ts.map +1 -1
  110. package/dist/src/model/helpers/index.js +0 -1
  111. package/dist/src/model/helpers/index.js.map +1 -1
  112. package/dist/src/model/index.d.ts +1 -0
  113. package/dist/src/model/index.d.ts.map +1 -1
  114. package/dist/src/model/index.js +1 -0
  115. package/dist/src/model/index.js.map +1 -1
  116. package/dist/src/model/metadata/ResolvedDatabaseMetadata.d.ts +13 -0
  117. package/dist/src/model/metadata/ResolvedDatabaseMetadata.d.ts.map +1 -0
  118. package/dist/src/model/metadata/ResolvedDatabaseMetadata.js +42 -0
  119. package/dist/src/model/metadata/ResolvedDatabaseMetadata.js.map +1 -0
  120. package/dist/src/model/metadata/SchemaDatabaseMetadataResolver.d.ts +8 -0
  121. package/dist/src/model/metadata/SchemaDatabaseMetadataResolver.d.ts.map +1 -0
  122. package/dist/src/model/metadata/SchemaDatabaseMetadataResolver.js +92 -0
  123. package/dist/src/model/metadata/SchemaDatabaseMetadataResolver.js.map +1 -0
  124. package/dist/src/model/metadata/SchemaDatabaseMetadataResolverStore.d.ts +17 -0
  125. package/dist/src/model/metadata/SchemaDatabaseMetadataResolverStore.d.ts.map +1 -0
  126. package/dist/src/model/metadata/SchemaDatabaseMetadataResolverStore.js +33 -0
  127. package/dist/src/model/metadata/SchemaDatabaseMetadataResolverStore.js.map +1 -0
  128. package/dist/src/model/metadata/index.d.ts +4 -0
  129. package/dist/src/model/metadata/index.d.ts.map +1 -0
  130. package/dist/src/model/metadata/index.js +22 -0
  131. package/dist/src/model/metadata/index.js.map +1 -0
  132. package/dist/src/model/migrations/ProjectMigrator.d.ts +3 -1
  133. package/dist/src/model/migrations/ProjectMigrator.d.ts.map +1 -1
  134. package/dist/src/model/migrations/ProjectMigrator.js +14 -6
  135. package/dist/src/model/migrations/ProjectMigrator.js.map +1 -1
  136. package/dist/src/model/migrations/SchemaVersionBuilder.d.ts +20 -0
  137. package/dist/src/model/migrations/SchemaVersionBuilder.d.ts.map +1 -1
  138. package/dist/src/model/migrations/SchemaVersionBuilder.js +5 -4
  139. package/dist/src/model/migrations/SchemaVersionBuilder.js.map +1 -1
  140. package/dist/src/model/queries/events/EventQueryHelpers.d.ts +2 -2
  141. package/dist/src/model/queries/events/EventQueryHelpers.d.ts.map +1 -1
  142. package/dist/src/model/queries/events/EventQueryHelpers.js +7 -7
  143. package/dist/src/model/queries/events/EventQueryHelpers.js.map +1 -1
  144. package/dist/src/model/queries/events/EventsQuery.d.ts +2 -2
  145. package/dist/src/model/queries/events/EventsQuery.d.ts.map +1 -1
  146. package/dist/src/model/queries/events/EventsQuery.js.map +1 -1
  147. package/dist/src/model/queries/migrations/ExecutedMigrationsQueryHelper.d.ts +1 -0
  148. package/dist/src/model/queries/migrations/ExecutedMigrationsQueryHelper.d.ts.map +1 -1
  149. package/dist/src/model/queries/migrations/ExecutedMigrationsQueryHelper.js +2 -1
  150. package/dist/src/model/queries/migrations/ExecutedMigrationsQueryHelper.js.map +1 -1
  151. package/dist/src/tsconfig.tsbuildinfo +1 -1
  152. package/dist/tests/cases/migrations/2020-05-06-150000-composed-primary.test.js +2 -0
  153. package/dist/tests/cases/migrations/2020-05-06-150000-composed-primary.test.js.map +1 -1
  154. package/dist/tests/cases/migrations/2020-06-01-103000-event-trigger-perf.test.js +2 -0
  155. package/dist/tests/cases/migrations/2020-06-01-103000-event-trigger-perf.test.js.map +1 -1
  156. package/dist/tests/cases/migrations/2022-10-03-110000-table-on-delete.test.d.ts +2 -0
  157. package/dist/tests/cases/migrations/2022-10-03-110000-table-on-delete.test.d.ts.map +1 -0
  158. package/dist/tests/cases/migrations/2022-10-03-110000-table-on-delete.test.js +43 -0
  159. package/dist/tests/cases/migrations/2022-10-03-110000-table-on-delete.test.js.map +1 -0
  160. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  161. package/package.json +18 -15
  162. package/src/SystemContainer.ts +8 -18
  163. package/src/bin/runMigrations.ts +42 -0
  164. package/src/index.ts +2 -2
  165. package/src/migrations/{2018-08-04-102200-init.sql → 2018-08-04-102200-init.ts} +8 -0
  166. package/src/migrations/{2018-08-05-130501-trigger-event-function.sql → 2018-08-05-130501-trigger-event-function.ts} +8 -0
  167. package/src/migrations/{2019-01-14-143432-event-trx-id.sql → 2019-01-14-143432-event-trx-id.ts} +8 -0
  168. package/src/migrations/{2019-02-04-154500-event-rebase.sql → 2019-02-04-154500-event-rebase.ts} +9 -0
  169. package/src/migrations/2019-03-18-104147-event-run-migration-struct.ts +11 -0
  170. package/src/migrations/{2019-07-29-103000-trigger-event-function-fix.sql → 2019-07-29-103000-trigger-event-function-fix.ts} +8 -0
  171. package/src/migrations/{2019-11-28-100000-missing-setting-fallback.sql → 2019-11-28-100000-missing-setting-fallback.ts} +8 -0
  172. package/src/migrations/{2021-03-23-110000-timestamp-fix.sql → 2021-03-23-110000-timestamp-fix.ts} +8 -0
  173. package/src/migrations/2021-05-07-155800-event-log-rework.ts +2 -2
  174. package/src/migrations/{2021-12-21-155500-events-up.sql → 2021-12-21-155500-events-up.ts} +8 -0
  175. package/src/migrations/{2022-02-08-132600-fn-search-path.sql → 2022-02-08-132600-fn-search-path.ts} +8 -0
  176. package/src/migrations/2022-02-08-140500-drop-deadcode.ts +10 -0
  177. package/src/migrations/{2022-02-08-144400-dynamic-stage-schema.sql → 2022-02-08-144400-dynamic-stage-schema.ts} +8 -0
  178. package/src/migrations/2022-10-03-110000-table-on-delete.ts +65 -0
  179. package/src/migrations/runner.ts +85 -15
  180. package/src/migrations/snapshot-factory.ts +45 -0
  181. package/src/migrations/snapshot-template-end.txt +1 -0
  182. package/src/migrations/snapshot-template-start.txt +2 -0
  183. package/src/migrations/snapshot.ts +169 -0
  184. package/src/migrations/types.ts +2 -0
  185. package/src/model/ProjectInitializer.ts +15 -50
  186. package/src/model/commands/Command.ts +1 -1
  187. package/src/model/database/DatabaseContext.ts +12 -8
  188. package/src/model/dtos/ExecutedMigration.ts +1 -0
  189. package/src/model/events/EventResponseBuilder.ts +3 -3
  190. package/src/model/events/EventResponseHelper.ts +1 -1
  191. package/src/model/events/index.ts +1 -0
  192. package/src/model/events/types.ts +63 -0
  193. package/src/model/helpers/index.ts +0 -1
  194. package/src/model/index.ts +1 -0
  195. package/src/model/metadata/ResolvedDatabaseMetadata.ts +54 -0
  196. package/src/model/metadata/SchemaDatabaseMetadataResolver.ts +136 -0
  197. package/src/model/metadata/SchemaDatabaseMetadataResolverStore.ts +41 -0
  198. package/src/model/metadata/index.ts +3 -0
  199. package/src/model/migrations/ProjectMigrator.ts +19 -5
  200. package/src/model/migrations/SchemaVersionBuilder.ts +3 -2
  201. package/src/model/queries/events/EventQueryHelpers.ts +2 -2
  202. package/src/model/queries/events/EventsQuery.ts +2 -2
  203. package/src/model/queries/migrations/ExecutedMigrationsQueryHelper.ts +3 -1
  204. package/src/tsconfig.json +10 -33
  205. package/tests/cases/migrations/2020-05-06-150000-composed-primary.test.ts +2 -0
  206. package/tests/cases/migrations/2020-06-01-103000-event-trigger-perf.test.ts +2 -0
  207. package/tests/cases/migrations/2022-10-03-110000-table-on-delete.test.ts +45 -0
  208. package/tests/tsconfig.json +2 -6
  209. package/tsconfig.json +2 -6
  210. package/dist/src/model/helpers/SystemVariablesSetupHelper.d.ts +0 -5
  211. package/dist/src/model/helpers/SystemVariablesSetupHelper.d.ts.map +0 -1
  212. package/dist/src/model/helpers/SystemVariablesSetupHelper.js +0 -15
  213. package/dist/src/model/helpers/SystemVariablesSetupHelper.js.map +0 -1
  214. package/dist/tests/cases/integration/systemApi/projectInitializer.test.d.ts +0 -2
  215. package/dist/tests/cases/integration/systemApi/projectInitializer.test.d.ts.map +0 -1
  216. package/dist/tests/cases/integration/systemApi/projectInitializer.test.js +0 -26
  217. package/dist/tests/cases/integration/systemApi/projectInitializer.test.js.map +0 -1
  218. package/src/migrations/2019-03-18-104147-event-run-migration-struct.sql +0 -3
  219. package/src/migrations/2022-02-08-140500-drop-deadcode.sql +0 -2
  220. package/src/model/helpers/SystemVariablesSetupHelper.ts +0 -14
  221. package/tests/cases/integration/systemApi/projectInitializer.test.ts +0 -31
@@ -0,0 +1,3 @@
1
+ export * from './SchemaDatabaseMetadataResolver'
2
+ export * from './SchemaDatabaseMetadataResolverStore'
3
+ export { ResolvedDatabaseMetadata } from './ResolvedDatabaseMetadata'
@@ -9,12 +9,17 @@ import { MigrateErrorCode } from '../../schema'
9
9
  import { SchemaVersionBuilder } from './SchemaVersionBuilder'
10
10
  import { SchemaValidator } from '@contember/schema-utils'
11
11
  import { logger } from '@contember/logger'
12
+ import {
13
+ SchemaDatabaseMetadataResolverStore,
14
+ MigrationsDatabaseMetadataResolverStoreFactory,
15
+ } from '../metadata/SchemaDatabaseMetadataResolverStore'
12
16
 
13
17
  export class ProjectMigrator {
14
18
  constructor(
15
19
  private readonly migrationDescriber: MigrationDescriber,
16
20
  private readonly schemaVersionBuilder: SchemaVersionBuilder,
17
21
  private readonly executedMigrationsResolver: ExecutedMigrationsResolver,
22
+ private readonly migrationsDatabaseMetadataResolverStoreFactory: MigrationsDatabaseMetadataResolverStoreFactory,
18
23
  ) {}
19
24
 
20
25
  public async migrate(
@@ -29,11 +34,13 @@ export class ProjectMigrator {
29
34
  if (migrationsToExecute.length === 0) {
30
35
  return
31
36
  }
32
- let { version, notNormalized, ...schema } = await this.schemaVersionBuilder.buildSchema(db)
37
+ let { version, notNormalized, id, ...schema } = await this.schemaVersionBuilder.buildSchema(db)
33
38
  const validated = await this.validateMigrations(db, schema, version, migrationsToExecute, { ignoreOrder, skipExecuted })
34
39
 
35
40
  const sorted = [...validated].sort((a, b) => a.version.localeCompare(b.version))
36
41
 
42
+ const metadataStore = this.migrationsDatabaseMetadataResolverStoreFactory.create(db)
43
+
37
44
  for (const migration of sorted) {
38
45
  const formatVersion = migration.formatVersion
39
46
 
@@ -46,6 +53,7 @@ export class ProjectMigrator {
46
53
  formatVersion,
47
54
  migration.version,
48
55
  db.client.schema,
56
+ metadataStore,
49
57
  )
50
58
  }
51
59
  await db.commandBus.execute(new SaveMigrationCommand(migration))
@@ -76,7 +84,7 @@ export class ProjectMigrator {
76
84
  if (migration.version < version && !ignoreOrder) {
77
85
  throw new MustFollowLatestMigrationError(migration.version, `Must follow latest executed migration ${version}`)
78
86
  }
79
- const described = await this.migrationDescriber.describeModifications(schema, migration, 'system') // system schema name not important here
87
+ const described = this.migrationDescriber.describeModifications(schema, migration)
80
88
  if (described.length === 0) {
81
89
  continue
82
90
  }
@@ -112,13 +120,19 @@ export class ProjectMigrator {
112
120
  formatVersion: number,
113
121
  migrationVersion: string,
114
122
  systemSchema: string,
123
+ metadataStore: SchemaDatabaseMetadataResolverStore,
115
124
  ): Promise<[Schema]> {
116
125
  const {
117
- sql,
126
+ getSql,
118
127
  schema: newSchema,
119
- handler,
120
- } = await this.migrationDescriber.describeModification(schema, modification, { systemSchema, formatVersion })
128
+ } = this.migrationDescriber.describeModification(schema, modification, { formatVersion })
121
129
  for (const stage of stages) {
130
+ const databaseMetadata = await metadataStore.getMetadata(stage.schema)
131
+ const sql = getSql({
132
+ systemSchema,
133
+ databaseMetadata,
134
+ invalidateDatabaseMetadata: () => metadataStore.invalidate(stage.schema),
135
+ })
122
136
  await this.executeOnStage(db, stage, sql, migrationVersion)
123
137
  }
124
138
  return [newSchema]
@@ -5,9 +5,9 @@ import { ExecutedMigrationsResolver } from './ExecutedMigrationsResolver'
5
5
  import { DatabaseContext } from '../database'
6
6
  import { normalizeSchema } from '@contember/schema-utils'
7
7
 
8
- export type VersionedSchema = Schema & { version: string; notNormalized: Schema & { version: string } }
8
+ export type VersionedSchema = Schema & { version: string; id: number; notNormalized: Schema & { version: string; id: number } }
9
9
 
10
- const emptyVersionedSchema = { ...normalizeSchema(emptySchema), version: '', notNormalized: { ...emptySchema, version: '' } }
10
+ export const emptyVersionedSchema = { ...normalizeSchema(emptySchema), version: '', id: -1, notNormalized: { ...emptySchema, version: '', id: -1 } }
11
11
 
12
12
  export class SchemaVersionBuilder {
13
13
  constructor(
@@ -25,6 +25,7 @@ export class SchemaVersionBuilder {
25
25
  (schema, migration) => ({
26
26
  ...this.schemaMigrator.applyModifications(schema, migration.modifications, migration.formatVersion),
27
27
  version: migration.version,
28
+ id: migration.id,
28
29
  }),
29
30
  after?.notNormalized ?? emptyVersionedSchema.notNormalized,
30
31
  )
@@ -1,4 +1,4 @@
1
- import { AnyEvent, CreateEvent, DeleteEvent, EventType, UpdateEvent } from '@contember/engine-common'
1
+ import { ContentEvent, CreateEvent, DeleteEvent, EventType, UpdateEvent } from '../../events'
2
2
  import { assertNever } from '../../../utils'
3
3
 
4
4
  export type EventRow = {
@@ -13,7 +13,7 @@ export type EventRow = {
13
13
  transaction_id: string
14
14
  }
15
15
 
16
- export const createEventsFromRows = (rows: EventRow[]): AnyEvent[] => {
16
+ export const createEventsFromRows = (rows: EventRow[]): ContentEvent[] => {
17
17
  return rows.map(event => {
18
18
  switch (event.type) {
19
19
  case EventType.create:
@@ -6,11 +6,11 @@ import {
6
6
  SelectBuilder,
7
7
  SelectBuilderSpecification, Value,
8
8
  } from '@contember/database'
9
- import { AnyEvent, ContentEvent } from '@contember/engine-common'
9
+ import { ContentEvent } from '../../events'
10
10
  import { EventsFilter, EventsFilterDate, EventsOrder } from '../../../schema'
11
11
  import { createEventsFromRows, EventRow } from './EventQueryHelpers'
12
12
 
13
- export class EventsQuery extends DatabaseQuery<AnyEvent[]> {
13
+ export class EventsQuery extends DatabaseQuery<ContentEvent[]> {
14
14
  constructor(
15
15
  private readonly filter: EventsFilter,
16
16
  private readonly order: EventsOrder,
@@ -2,9 +2,10 @@ import { SelectBuilder } from '@contember/database'
2
2
  import { ExecutedMigration } from '../../dtos'
3
3
  import { VERSION_INITIAL } from '@contember/schema-migrations'
4
4
 
5
- type ExecutedMigrationRow = { name: string; migration: any; checksum: string; executed_at: Date }
5
+ type ExecutedMigrationRow = { id: number; name: string; migration: any; checksum: string; executed_at: Date }
6
6
  export const createExecutedMigrationQueryBuilder = () =>
7
7
  SelectBuilder.create<ExecutedMigrationRow>()
8
+ .select('id')
8
9
  .select('name')
9
10
  .select('migration')
10
11
  .select('checksum')
@@ -14,6 +15,7 @@ export const createExecutedMigrationQueryBuilder = () =>
14
15
 
15
16
  export const createExecutedMigrationDto = (row: ExecutedMigrationRow) =>
16
17
  new ExecutedMigration(
18
+ row.id,
17
19
  row.name,
18
20
  row.migration.formatVersion || VERSION_INITIAL,
19
21
  row.migration.modifications,
package/src/tsconfig.json CHANGED
@@ -5,38 +5,15 @@
5
5
  "esModuleInterop": true
6
6
  },
7
7
  "references": [
8
- {
9
- "path": "../../authorization/src"
10
- },
11
- {
12
- "path": "../../database/src"
13
- },
14
- {
15
- "path": "../../database-migrations/src"
16
- },
17
- {
18
- "path": "../../engine-common/src"
19
- },
20
- {
21
- "path": "../../graphql-utils/src"
22
- },
23
- {
24
- "path": "../../logger/src"
25
- },
26
- {
27
- "path": "../../queryable/src"
28
- },
29
- {
30
- "path": "../../schema/src"
31
- },
32
- {
33
- "path": "../../schema-utils/src"
34
- },
35
- {
36
- "path": "../../schema-migrations/src"
37
- },
38
- {
39
- "path": "../../dic/src"
40
- }
8
+ { "path": "../../authorization/src" },
9
+ { "path": "../../database/src" },
10
+ { "path": "../../database-migrations/src" },
11
+ { "path": "../../graphql-utils/src" },
12
+ { "path": "../../logger/src" },
13
+ { "path": "../../queryable/src" },
14
+ { "path": "../../schema/src" },
15
+ { "path": "../../schema-utils/src" },
16
+ { "path": "../../schema-migrations/src" },
17
+ { "path": "../../dic/src" }
41
18
  ]
42
19
  }
@@ -2,12 +2,14 @@ import migration from '../../../src/migrations/2020-05-06-150000-composed-primar
2
2
  import { createMigrationBuilder } from '@contember/database-migrations'
3
3
  import { sampleProject } from '@contember/engine-api-tester'
4
4
  import { test, assert } from 'vitest'
5
+ import { dummySchemaDatabaseMetadata } from '@contember/schema-utils'
5
6
 
6
7
  test('many-has-many-primary migration sql', async () => {
7
8
  const builder = createMigrationBuilder()
8
9
  await migration(builder, {
9
10
  connection: undefined as any,
10
11
  schemaResolver: () => Promise.resolve(sampleProject),
12
+ databaseMetadataResolver: () => Promise.resolve(dummySchemaDatabaseMetadata),
11
13
  project: {
12
14
  slug: 'test',
13
15
  stages: [
@@ -2,6 +2,7 @@ import migration from '../../../src/migrations/2020-06-01-103000-event-trigger-p
2
2
  import { createMigrationBuilder } from '@contember/database-migrations'
3
3
  import { sampleProject } from '@contember/engine-api-tester'
4
4
  import { test, assert } from 'vitest'
5
+ import { dummySchemaDatabaseMetadata } from '@contember/schema-utils'
5
6
 
6
7
 
7
8
  test('event-trigger-performance sql', async () => {
@@ -9,6 +10,7 @@ test('event-trigger-performance sql', async () => {
9
10
  await migration(builder, {
10
11
  connection: undefined as any,
11
12
  schemaResolver: () => Promise.resolve(sampleProject),
13
+ databaseMetadataResolver: () => Promise.resolve(dummySchemaDatabaseMetadata),
12
14
  project: {
13
15
  slug: 'test',
14
16
  stages: [
@@ -0,0 +1,45 @@
1
+ import migration from '../../../src/migrations/2022-10-03-110000-table-on-delete'
2
+ import { createMigrationBuilder } from '@contember/database-migrations'
3
+ import { assert, test } from 'vitest'
4
+ import { SchemaBuilder } from '@contember/schema-definition'
5
+ import { dummySchemaDatabaseMetadata, emptySchema } from '@contember/schema-utils'
6
+ import { Model } from '@contember/schema'
7
+ import { createConnectionMock } from '@contember/database-tester'
8
+
9
+
10
+ test('table-on-delete test', async () => {
11
+ const builder = createMigrationBuilder()
12
+ const connection = createConnectionMock([{
13
+ sql: 'select schema from stage',
14
+ response: { rows: [{ schema: 'stage_live' }] },
15
+ }])
16
+ await migration(builder, {
17
+ connection: connection,
18
+ databaseMetadataResolver: () => Promise.resolve(dummySchemaDatabaseMetadata),
19
+ schemaResolver: () => Promise.resolve(({ ...emptySchema, model: new SchemaBuilder()
20
+ .entity('Post', entity =>
21
+ entity.manyHasOne('author', relation => relation.target('Author').onDelete(Model.OnDelete.setNull)),
22
+ )
23
+ .entity('Author', entity => entity)
24
+ .buildSchema() })),
25
+ project: {
26
+ slug: 'test',
27
+ stages: [
28
+ {
29
+ slug: 'prod',
30
+ name: 'prod',
31
+ },
32
+ ],
33
+ },
34
+ })
35
+ assert.equal(
36
+ builder.getSql(),
37
+ `ALTER TABLE "stage_live"."post" DROP CONSTRAINT "fk_post_author_id_author_id";
38
+ ALTER TABLE "stage_live"."post"
39
+ ADD FOREIGN KEY ("author_id")
40
+ REFERENCES "stage_live"."author" ("id") ON DELETE SET NULL DEFERRABLE INITIALLY IMMEDIATE
41
+ ;
42
+ `,
43
+ )
44
+ })
45
+
@@ -5,11 +5,7 @@
5
5
  "esModuleInterop": true
6
6
  },
7
7
  "references": [
8
- {
9
- "path": "../src"
10
- },
11
- {
12
- "path": "../../engine-api-tester/src"
13
- }
8
+ { "path": "../src" },
9
+ { "path": "../../engine-api-tester/src" }
14
10
  ]
15
11
  }
package/tsconfig.json CHANGED
@@ -2,11 +2,7 @@
2
2
  "files": [],
3
3
  "include": [],
4
4
  "references": [
5
- {
6
- "path": "./src"
7
- },
8
- {
9
- "path": "./tests"
10
- }
5
+ { "path": "./src" },
6
+ { "path": "./tests" }
11
7
  ]
12
8
  }
@@ -1,5 +0,0 @@
1
- import { Client } from '@contember/database';
2
- import { UuidProvider } from '../../utils';
3
- export declare const unnamedIdentity = "00000000-0000-0000-0000-000000000000";
4
- export declare function setupSystemVariables(db: Client, identityId: string, providers: UuidProvider): Promise<void>;
5
- //# sourceMappingURL=SystemVariablesSetupHelper.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SystemVariablesSetupHelper.d.ts","sourceRoot":"","sources":["../../../../src/model/helpers/SystemVariablesSetupHelper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,eAAO,MAAM,eAAe,yCAAyC,CAAA;AAErE,wBAAsB,oBAAoB,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,iBAQjG"}
@@ -1,15 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.setupSystemVariables = exports.unnamedIdentity = void 0;
4
- exports.unnamedIdentity = '00000000-0000-0000-0000-000000000000';
5
- async function setupSystemVariables(db, identityId, providers) {
6
- await Promise.all([
7
- await db.query('SELECT set_config(?, ?, false)', [
8
- 'tenant.identity_id',
9
- identityId,
10
- ]),
11
- await db.query('SELECT set_config(?, ?, false)', ['system.transaction_id', providers.uuid()]),
12
- ]);
13
- }
14
- exports.setupSystemVariables = setupSystemVariables;
15
- //# sourceMappingURL=SystemVariablesSetupHelper.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"SystemVariablesSetupHelper.js","sourceRoot":"","sources":["../../../../src/model/helpers/SystemVariablesSetupHelper.ts"],"names":[],"mappings":";;;AAGa,QAAA,eAAe,GAAG,sCAAsC,CAAA;AAE9D,KAAK,UAAU,oBAAoB,CAAC,EAAU,EAAE,UAAkB,EAAE,SAAuB;IACjG,MAAM,OAAO,CAAC,GAAG,CAAC;QACjB,MAAM,EAAE,CAAC,KAAK,CAAC,gCAAgC,EAAE;YAChD,oBAAoB;YACpB,UAAU;SACV,CAAC;QACF,MAAM,EAAE,CAAC,KAAK,CAAC,gCAAgC,EAAE,CAAC,uBAAuB,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC;KAC7F,CAAC,CAAA;AACH,CAAC;AARD,oDAQC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=projectInitializer.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projectInitializer.test.d.ts","sourceRoot":"","sources":["../../../../../tests/cases/integration/systemApi/projectInitializer.test.ts"],"names":[],"mappings":""}
@@ -1,26 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const engine_api_tester_1 = require("@contember/engine-api-tester");
4
- const vitest_1 = require("vitest");
5
- const logger_1 = require("@contember/logger");
6
- const logger = (0, logger_1.createLogger)(new logger_1.JsonStreamLoggerHandler(process.stderr));
7
- (0, vitest_1.test)('create stage', async () => {
8
- const prodStage = {
9
- name: 'Prod',
10
- slug: 'prod',
11
- };
12
- const project = {
13
- slug: 'example-project',
14
- stages: [prodStage],
15
- };
16
- const tester = await engine_api_tester_1.ApiTester.create({
17
- project: {
18
- stages: [prodStage],
19
- },
20
- });
21
- await tester.systemContainer.projectInitializer.initialize(tester.databaseContextFactory, project, logger);
22
- const createdStagesA = await tester.stages.refreshCreatedStages();
23
- vitest_1.assert.ok(createdStagesA.has('prod'));
24
- await tester.cleanup();
25
- });
26
- //# sourceMappingURL=projectInitializer.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"projectInitializer.test.js","sourceRoot":"","sources":["../../../../../tests/cases/integration/systemApi/projectInitializer.test.ts"],"names":[],"mappings":";;AAAA,oEAAwD;AAExD,mCAAqC;AACrC,8CAAyE;AAGzE,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,IAAI,gCAAuB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAA;AAExE,IAAA,aAAI,EAAC,cAAc,EAAE,KAAK,IAAI,EAAE;IAC/B,MAAM,SAAS,GAAgB;QAC9B,IAAI,EAAE,MAAM;QACZ,IAAI,EAAE,MAAM;KACZ,CAAA;IACD,MAAM,OAAO,GAAkB;QAC9B,IAAI,EAAE,iBAAiB;QACvB,MAAM,EAAE,CAAC,SAAS,CAAC;KACnB,CAAA;IAED,MAAM,MAAM,GAAG,MAAM,6BAAS,CAAC,MAAM,CAAC;QACrC,OAAO,EAAE;YACR,MAAM,EAAE,CAAC,SAAS,CAAC;SACnB;KACD,CAAC,CAAA;IAEF,MAAM,MAAM,CAAC,eAAe,CAAC,kBAAkB,CAAC,UAAU,CAAC,MAAM,CAAC,sBAAsB,EAAE,OAAO,EAAE,MAAM,CAAC,CAAA;IAC1G,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,oBAAoB,EAAE,CAAA;IACjE,eAAM,CAAC,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAA;IAErC,MAAM,MAAM,CAAC,OAAO,EAAE,CAAA;AACvB,CAAC,CAAC,CAAA"}
@@ -1,3 +0,0 @@
1
- UPDATE event
2
- SET data = jsonb_build_object('version', coalesce(substring(data ->> 'file', 0, 17), data ->> 'version'))
3
- WHERE type = 'run_migration';
@@ -1,2 +0,0 @@
1
- DROP FUNCTION rebase_events_unsafe(head UUID, oldbase UUID, newbase UUID, appliedevents UUID[]);
2
- DROP FUNCTION statement_trigger_event();
@@ -1,14 +0,0 @@
1
- import { Client } from '@contember/database'
2
- import { UuidProvider } from '../../utils'
3
-
4
- export const unnamedIdentity = '00000000-0000-0000-0000-000000000000'
5
-
6
- export async function setupSystemVariables(db: Client, identityId: string, providers: UuidProvider) {
7
- await Promise.all([
8
- await db.query('SELECT set_config(?, ?, false)', [
9
- 'tenant.identity_id', // todo rename to system.identity_id
10
- identityId,
11
- ]),
12
- await db.query('SELECT set_config(?, ?, false)', ['system.transaction_id', providers.uuid()]),
13
- ])
14
- }
@@ -1,31 +0,0 @@
1
- import { ApiTester } from '@contember/engine-api-tester'
2
- import { ProjectConfig, StageConfig } from '../../../../src'
3
- import { assert, test } from 'vitest'
4
- import { createLogger, JsonStreamLoggerHandler } from '@contember/logger'
5
-
6
-
7
- const logger = createLogger(new JsonStreamLoggerHandler(process.stderr))
8
-
9
- test('create stage', async () => {
10
- const prodStage: StageConfig = {
11
- name: 'Prod',
12
- slug: 'prod',
13
- }
14
- const project: ProjectConfig = {
15
- slug: 'example-project',
16
- stages: [prodStage],
17
- }
18
-
19
- const tester = await ApiTester.create({
20
- project: {
21
- stages: [prodStage],
22
- },
23
- })
24
-
25
- await tester.systemContainer.projectInitializer.initialize(tester.databaseContextFactory, project, logger)
26
- const createdStagesA = await tester.stages.refreshCreatedStages()
27
- assert.ok(createdStagesA.has('prod'))
28
-
29
- await tester.cleanup()
30
- })
31
-