@contember/schema-utils 2.1.0-alpha.1 → 2.1.0-alpha.2

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 (75) hide show
  1. package/dist/development/src/definition-generator/DefinitionCodeGenerator.cjs.map +1 -1
  2. package/dist/development/src/definition-generator/DefinitionCodeGenerator.js.map +1 -1
  3. package/dist/development/src/schemaNormalizer.cjs +2 -0
  4. package/dist/development/src/schemaNormalizer.cjs.map +1 -1
  5. package/dist/development/src/schemaNormalizer.js +2 -0
  6. package/dist/development/src/schemaNormalizer.js.map +1 -1
  7. package/dist/development/src/type-schema/acl.cjs +3 -1
  8. package/dist/development/src/type-schema/acl.cjs.map +1 -1
  9. package/dist/development/src/type-schema/acl.js +3 -1
  10. package/dist/development/src/type-schema/acl.js.map +1 -1
  11. package/dist/development/src/type-schema/condition.cjs +1 -0
  12. package/dist/development/src/type-schema/condition.cjs.map +1 -1
  13. package/dist/development/src/type-schema/condition.js +1 -0
  14. package/dist/development/src/type-schema/condition.js.map +1 -1
  15. package/dist/development/src/type-schema/model.cjs +23 -7
  16. package/dist/development/src/type-schema/model.cjs.map +1 -1
  17. package/dist/development/src/type-schema/model.js +23 -7
  18. package/dist/development/src/type-schema/model.js.map +1 -1
  19. package/dist/development/src/validation/ModelValidator.cjs +3 -0
  20. package/dist/development/src/validation/ModelValidator.cjs.map +1 -1
  21. package/dist/development/src/validation/ModelValidator.js +3 -0
  22. package/dist/development/src/validation/ModelValidator.js.map +1 -1
  23. package/dist/development/src/validation/errors.cjs.map +1 -1
  24. package/dist/development/src/validation/errors.js.map +1 -1
  25. package/dist/production/src/definition-generator/DefinitionCodeGenerator.cjs.map +1 -1
  26. package/dist/production/src/definition-generator/DefinitionCodeGenerator.js.map +1 -1
  27. package/dist/production/src/schemaNormalizer.cjs +2 -0
  28. package/dist/production/src/schemaNormalizer.cjs.map +1 -1
  29. package/dist/production/src/schemaNormalizer.js +2 -0
  30. package/dist/production/src/schemaNormalizer.js.map +1 -1
  31. package/dist/production/src/type-schema/acl.cjs +3 -1
  32. package/dist/production/src/type-schema/acl.cjs.map +1 -1
  33. package/dist/production/src/type-schema/acl.js +3 -1
  34. package/dist/production/src/type-schema/acl.js.map +1 -1
  35. package/dist/production/src/type-schema/condition.cjs +1 -0
  36. package/dist/production/src/type-schema/condition.cjs.map +1 -1
  37. package/dist/production/src/type-schema/condition.js +1 -0
  38. package/dist/production/src/type-schema/condition.js.map +1 -1
  39. package/dist/production/src/type-schema/model.cjs +23 -7
  40. package/dist/production/src/type-schema/model.cjs.map +1 -1
  41. package/dist/production/src/type-schema/model.js +23 -7
  42. package/dist/production/src/type-schema/model.js.map +1 -1
  43. package/dist/production/src/validation/ModelValidator.cjs +3 -0
  44. package/dist/production/src/validation/ModelValidator.cjs.map +1 -1
  45. package/dist/production/src/validation/ModelValidator.js +3 -0
  46. package/dist/production/src/validation/ModelValidator.js.map +1 -1
  47. package/dist/production/src/validation/errors.cjs.map +1 -1
  48. package/dist/production/src/validation/errors.js.map +1 -1
  49. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  50. package/dist/types/acl/schemaUtils.d.ts.map +1 -1
  51. package/dist/types/dataUtils.d.ts.map +1 -1
  52. package/dist/types/model/modelUtils.d.ts.map +1 -1
  53. package/dist/types/model/resolveDefaultColumnType.d.ts.map +1 -1
  54. package/dist/types/schemaChecksum.d.ts.map +1 -1
  55. package/dist/types/schemaFilter.d.ts.map +1 -1
  56. package/dist/types/schemaNormalizer.d.ts.map +1 -1
  57. package/dist/types/tsconfig.tsbuildinfo +1 -1
  58. package/dist/types/type-schema/acl.d.ts.map +1 -1
  59. package/dist/types/type-schema/condition.d.ts.map +1 -1
  60. package/dist/types/type-schema/model.d.ts +1 -1
  61. package/dist/types/type-schema/model.d.ts.map +1 -1
  62. package/dist/types/type-schema/where.d.ts.map +1 -1
  63. package/dist/types/utils/deepCompare.d.ts.map +1 -1
  64. package/dist/types/utils/isIt.d.ts.map +1 -1
  65. package/dist/types/utils/printJsValue.d.ts.map +1 -1
  66. package/dist/types/validation/ModelValidator.d.ts.map +1 -1
  67. package/dist/types/validation/errors.d.ts +1 -1
  68. package/dist/types/validation/errors.d.ts.map +1 -1
  69. package/package.json +5 -5
  70. package/src/definition-generator/DefinitionCodeGenerator.ts +1 -1
  71. package/src/schemaNormalizer.ts +2 -0
  72. package/src/type-schema/acl.ts +2 -0
  73. package/src/type-schema/model.ts +23 -5
  74. package/src/validation/ModelValidator.ts +3 -0
  75. package/src/validation/errors.ts +1 -0
@@ -133,6 +133,7 @@ const columnSchema = Typesafe.intersection(
133
133
  list: Typesafe.boolean,
134
134
  default: Typesafe.anyJson,
135
135
  sequence: intersectionSchema as Typesafe.Type<Model.AnyColumn['sequence']>,
136
+ collation: Typesafe.string as Typesafe.Type<Model.AnyColumn['collation']>,
136
137
  }),
137
138
  )
138
139
  const columnSchemaCheck: Typesafe.Equals<Model.AnyColumn, ReturnType<typeof columnSchema>> = true
@@ -154,13 +155,15 @@ const viewSchemaInner = Typesafe.intersection(
154
155
  }),
155
156
  Typesafe.partial({
156
157
  dependencies: Typesafe.array(Typesafe.string),
158
+ idSource: Typesafe.array(Typesafe.string),
159
+ materialized: Typesafe.boolean,
157
160
  }),
158
161
  )
159
162
  const viewSchemaCheck: Typesafe.Equals<Model.View, ReturnType<typeof viewSchemaInner>> = true
160
163
  const viewSchema: Typesafe.Type<Model.View> = viewSchemaInner
161
164
 
162
165
 
163
- const indexLike: Typesafe.Type<{readonly fields: readonly string[]; readonly name?: string | undefined}> = Typesafe.intersection(
166
+ const indexSchemaBase = Typesafe.intersection(
164
167
  Typesafe.object({
165
168
  fields: Typesafe.array(Typesafe.string),
166
169
  }),
@@ -168,22 +171,37 @@ const indexLike: Typesafe.Type<{readonly fields: readonly string[]; readonly nam
168
171
  name: Typesafe.string,
169
172
  }),
170
173
  )
174
+ const indexCheck: Typesafe.Equals<Model.Index, ReturnType<typeof indexSchemaBase>> = true
171
175
 
172
176
  const indexesSchema = Typesafe.coalesce<Model.Indexes, Model.Indexes>(
173
177
  Typesafe.preprocess(
174
- Typesafe.array(indexLike),
178
+ Typesafe.array(indexSchemaBase),
175
179
  it => it?.constructor === Object ? Object.values(it) : it,
176
180
  ),
177
181
  [],
178
182
  )
179
183
 
180
184
  const uniqueConstraint = Typesafe.intersection(
181
- indexLike,
185
+ Typesafe.object({
186
+ fields: Typesafe.array(Typesafe.string),
187
+ }),
182
188
  Typesafe.partial({
183
189
  timing: Typesafe.enumeration('deferrable', 'deferred'),
190
+ name: Typesafe.string,
191
+ index: Typesafe.literal(false),
192
+ }),
193
+ )
194
+ const uniqueIndex = Typesafe.intersection(
195
+ Typesafe.object({
196
+ fields: Typesafe.array(Typesafe.string),
197
+ index: Typesafe.literal(true),
198
+ }),
199
+ Typesafe.partial({
200
+ nulls: Typesafe.enumeration('distinct', 'not distinct'),
184
201
  }),
185
202
  )
186
203
  const uniqueConstraintCheck: Typesafe.Equals<Model.UniqueConstraint, ReturnType<typeof uniqueConstraint>> = true
204
+ const uniqueIndexCheck: Typesafe.Equals<Model.UniqueIndex, ReturnType<typeof uniqueIndex>> = true
187
205
 
188
206
  const entitySchema = Typesafe.intersection(
189
207
  Typesafe.object({
@@ -192,8 +210,8 @@ const entitySchema = Typesafe.intersection(
192
210
  primaryColumn: Typesafe.string,
193
211
  tableName: Typesafe.string,
194
212
  fields: Typesafe.record(Typesafe.string, fieldSchema),
195
- unique: Typesafe.preprocess<Model.UniqueConstraints>(
196
- Typesafe.array(uniqueConstraint),
213
+ unique: Typesafe.preprocess<Model.Uniques>(
214
+ Typesafe.array(Typesafe.union(uniqueConstraint, uniqueIndex)),
197
215
  it => it?.constructor === Object ? Object.values(it) : it,
198
216
  ),
199
217
  indexes: indexesSchema,
@@ -60,6 +60,9 @@ export class ModelValidator {
60
60
 
61
61
  private validateUniqueConstraints(entity: Model.Entity, errors: ErrorBuilder): void {
62
62
  for (const constraint of entity.unique) {
63
+ if (entity.view && !constraint.index) {
64
+ errors.add('MODEL_INVALID_CONSTRAINT', 'Unique constraint on view entity must be an index. Please set index: true')
65
+ }
63
66
  for (const field of constraint.fields) {
64
67
  const fieldDef = entity.fields[field]
65
68
  if (!fieldDef) {
@@ -9,6 +9,7 @@ export type ValidationErrorCode =
9
9
  | 'MODEL_INVALID_VIEW_USAGE'
10
10
  | 'MODEL_INVALID_IDENTIFIER'
11
11
  | 'MODEL_INVALID_ENTITY_NAME'
12
+ | 'MODEL_INVALID_CONSTRAINT'
12
13
  | 'MODEL_NAME_COLLISION'
13
14
 
14
15
  | 'ACL_INVALID_CONDITION'