@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
@@ -1 +1 @@
1
- {"version":3,"file":"DefinitionCodeGenerator.cjs","sources":["../../../../../packages/schema-utils/src/definition-generator/DefinitionCodeGenerator.ts"],"sourcesContent":["import { Model, Schema, Writable } from '@contember/schema'\nimport {\n\tacceptFieldVisitor,\n\tDefaultNamingConventions,\n\tisInverseRelation,\n\tNamingConventions,\n\tresolveDefaultColumnType,\n} from '../model'\nimport { printJsValue } from '../utils/printJsValue'\nimport { DefinitionNamingConventions } from './DefinitionNamingConventions'\nimport { AclDefinitionCodeGenerator } from './AclDefinitionCodeGenerator'\n\n\nexport class DefinitionCodeGenerator {\n\tconstructor(\n\t\tprivate readonly schemaNamingConventions: NamingConventions = new DefaultNamingConventions(),\n\t\tprivate readonly definitionNamingConventions = new DefinitionNamingConventions(),\n\t\tprivate readonly aclGenerator = new AclDefinitionCodeGenerator(),\n\t) {\n\t}\n\n\tpublic generate(schema: Schema) {\n\t\tconst roles = this.aclGenerator.generateRoles({ acl: schema.acl })\n\t\tconst aclVariables = this.aclGenerator.generateAclVariables({ acl: schema.acl })\n\t\tconst enums = Object.entries(schema.model.enums).map(([name, values]) => this.generateEnum({ name, values })).join('')\n\t\tconst entities = Object.values(schema.model.entities).map(entity => this.generateEntity({ entity, schema })).join('')\n\n\t\treturn `import { c } from '@contember/schema-definition'\\n${roles}${aclVariables}${enums}${entities}`\n\t}\n\n\tprivate generateEnum({ name, values }: { name: string; values: readonly string[] }): string {\n\t\treturn `\\nexport const ${this.formatIdentifier(name)} = c.createEnum(${values.map(it => printJsValue(it)).join(', ')})\\n`\n\t}\n\n\tpublic generateEntity({ entity, schema }: { entity: Model.Entity; schema: Schema }): string {\n\t\tconst uniqueConstraints = Object.values(entity.unique).map(constraint => this.generateUniqueConstraint({ entity, constraint }))\n\t\tconst indexes = Object.values(entity.indexes).map(index => this.generateIndex({ entity, index }))\n\t\tconst views = this.generateView({ entity })\n\n\t\tconst decorators = [...uniqueConstraints, ...indexes, views].filter(it => !!it).map(it => `${it}\\n`).join('')\n\t\tconst acl = this.aclGenerator.generateEntityAcl({ entity, schema })\n\n\t\treturn `\\n${decorators}${acl}export class ${this.formatIdentifier(entity.name)} {\n${Object.values(entity.fields).map(field => this.generateField({ field, entity, schema })).filter(it => !!it).join('\\n')}\n}\\n`\n\t}\n\n\tprivate generateUniqueConstraint({ entity, constraint }: { entity: Model.Entity; constraint: Model.UniqueConstraint }): string {\n\t\tconst fieldsList = `${constraint.fields.map(it => printJsValue(it)).join(', ')}`\n\n\t\treturn `@c.Unique(${fieldsList})`\n\t}\n\n\tprivate generateIndex({ entity, index }: { entity: Model.Entity; index: Model.Index }): string {\n\t\tconst fieldsList = `${index.fields.map(it => printJsValue(it)).join(', ')}`\n\n\t\treturn `@c.Index(${fieldsList})`\n\t}\n\n\n\tprivate generateView({ entity }: { entity: Model.Entity }): string | undefined {\n\t\tif (!entity.view) {\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst dependenciesExpr = (entity.view.dependencies?.length ?? 0) > 0\n\t\t\t? `, {\\n\\tdependencies: () => [${entity.view.dependencies?.map(it => this.formatIdentifier(it))}]\\n}`\n\t\t\t: ''\n\n\t\treturn `@c.View(\\`${entity.view.sql}\\`${dependenciesExpr})`\n\t}\n\n\tpublic generateField({ entity, field, schema }: { entity: Model.Entity; field: Model.AnyField; schema: Schema }): string | undefined {\n\t\tconst formatRelationFactory = (method: string, relation: Model.AnyRelation) => {\n\t\t\tconst otherSide = isInverseRelation(relation) ? relation.ownedBy : relation.inversedBy\n\t\t\tconst otherSideFormatted = otherSide ? `, ${printJsValue(otherSide)}` : ''\n\t\t\treturn `${method}(${this.formatIdentifier(relation.target)}${otherSideFormatted})`\n\t\t}\n\t\tconst formatEnumRef = (enumName: string, enumValues: Record<string, string>, providedValue?: string, defaultValue?: string): string | undefined => {\n\t\t\tif (!providedValue || providedValue === defaultValue) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tconst enumValueKey = Object.entries(Model.OrderDirection).find(dir => dir[1] === providedValue)?.[0]\n\t\t\tif (!enumValueKey) {\n\t\t\t\tthrow new Error(`Value ${providedValue} is not defined in enum ${enumName}`)\n\t\t\t}\n\t\t\treturn `${enumName}.${enumValueKey}`\n\n\t\t}\n\t\tconst formatOrderBy = (orderBy?: readonly Model.OrderBy[]) => {\n\t\t\treturn orderBy?.map(it => {\n\t\t\t\tconst enumExpr = formatEnumRef(`Model.OrderDirection`, Model.OrderDirection, it.direction, Model.OrderDirection.asc)\n\t\t\t\treturn `orderBy(${printJsValue(it.path)}${enumExpr ? `, ${enumExpr}` : ''})`\n\t\t\t}) ?? []\n\t\t}\n\t\tconst formatOnDelete = (onDelete?: Model.OnDelete): string | undefined => {\n\t\t\tif (onDelete === Model.OnDelete.cascade) {\n\t\t\t\treturn 'cascadeOnDelete()'\n\t\t\t}\n\t\t\tif (onDelete === Model.OnDelete.setNull) {\n\t\t\t\treturn 'setNullOnDelete()'\n\t\t\t}\n\t\t\treturn undefined\n\t\t}\n\t\tconst formatJoiningColumn = (joiningColumnName: string, fieldName: string): string | undefined => {\n\t\t\tconst defaultJoiningColumn = this.schemaNamingConventions.getJoiningColumnName(fieldName)\n\t\t\tif (defaultJoiningColumn === joiningColumnName) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn `joiningColumn(${printJsValue(joiningColumnName)})`\n\t\t}\n\t\tconst definition = acceptFieldVisitor<(string | undefined)[]>(schema.model, entity, field, {\n\t\t\tvisitColumn: ctx => {\n\t\t\t\treturn this.generateColumn(ctx)\n\t\t\t},\n\t\t\tvisitOneHasMany: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('oneHasMany', relation),\n\t\t\t\t\t...formatOrderBy(relation.orderBy),\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitManyHasOne: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('manyHasOne', relation),\n\t\t\t\t\t!relation.nullable ? 'notNull()' : undefined,\n\t\t\t\t\tformatOnDelete(relation.joiningColumn.onDelete),\n\t\t\t\t\tformatJoiningColumn(relation.joiningColumn.columnName, relation.name),\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitOneHasOneInverse: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('oneHasOneInverse', relation),\n\t\t\t\t\t!relation.nullable ? 'notNull()' : undefined,\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitOneHasOneOwning: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('oneHasOne', relation),\n\t\t\t\t\t!relation.nullable ? 'notNull()' : undefined,\n\t\t\t\t\tformatOnDelete(relation.joiningColumn.onDelete),\n\t\t\t\t\tformatJoiningColumn(relation.joiningColumn.columnName, relation.name),\n\t\t\t\t\trelation.orphanRemoval ? 'removeOrphan()' : undefined,\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\tconst columnNames = this.schemaNamingConventions.getJoiningTableColumnNames(\n\t\t\t\t\tentity.name,\n\t\t\t\t\trelation.name,\n\t\t\t\t\trelation.target,\n\t\t\t\t\trelation.inversedBy,\n\t\t\t\t)\n\t\t\t\tconst defaultJoiningTable = this.schemaNamingConventions.getJoiningTableName(entity.name, relation.name)\n\t\t\t\tconst joiningTable: Writable<Partial<Model.JoiningTable>> = {}\n\t\t\t\tif (relation.joiningTable.tableName !== defaultJoiningTable) {\n\t\t\t\t\tjoiningTable.tableName = relation.joiningTable.tableName\n\t\t\t\t}\n\t\t\t\tif (!relation.joiningTable.eventLog.enabled) {\n\t\t\t\t\tjoiningTable.eventLog = { enabled: false }\n\t\t\t\t}\n\t\t\t\tif (columnNames[0] !== relation.joiningTable.joiningColumn.columnName || relation.joiningTable.joiningColumn.onDelete !== Model.OnDelete.cascade) {\n\t\t\t\t\tjoiningTable.joiningColumn = {\n\t\t\t\t\t\tcolumnName: relation.joiningTable.joiningColumn.columnName,\n\t\t\t\t\t\tonDelete: relation.joiningTable.joiningColumn.onDelete,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (columnNames[1] !== relation.joiningTable.inverseJoiningColumn.columnName || relation.joiningTable.inverseJoiningColumn.onDelete !== Model.OnDelete.cascade) {\n\t\t\t\t\tjoiningTable.inverseJoiningColumn = {\n\t\t\t\t\t\tcolumnName: relation.joiningTable.inverseJoiningColumn.columnName,\n\t\t\t\t\t\tonDelete: relation.joiningTable.inverseJoiningColumn.onDelete,\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('manyHasMany', relation),\n\t\t\t\t\t...formatOrderBy(relation.orderBy),\n\t\t\t\t\tObject.keys(joiningTable).length > 0 ? `joiningTable(${printJsValue(joiningTable)})` : undefined,\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('manyHasManyInverse', relation),\n\t\t\t\t\t...formatOrderBy(relation.orderBy),\n\t\t\t\t]\n\t\t\t},\n\t\t})\n\t\tconst definitionCode = definition.filter(it => !!it).join('.')\n\t\tif (field.name === 'id' && definitionCode === 'uuidColumn().notNull()') {\n\t\t\treturn undefined\n\t\t}\n\t\treturn `\\t${this.formatIdentifier(field.name)} = c.${definitionCode}`\n\t}\n\n\tprivate generateColumn({ entity, column }: { entity: Model.Entity; column: Model.AnyColumn }): string[] {\n\t\tlet parts: string[] = []\n\t\tif (column.type === Model.ColumnType.Enum) {\n\t\t\tparts.push(`enumColumn(${column.columnType})`)\n\t\t} else {\n\t\t\tparts.push(`${ColumnToMethodMapping[column.type]}()`)\n\t\t\tconst defaultColumnType = resolveDefaultColumnType(column.type)\n\t\t\tif (defaultColumnType !== column.columnType) {\n\t\t\t\tparts.push(`columnType(${printJsValue(column.columnType)})`)\n\t\t\t}\n\t\t}\n\t\tconst defaultColumnName = this.schemaNamingConventions.getColumnName(column.name)\n\t\tif (defaultColumnName !== column.columnName) {\n\t\t\tparts.push(`columnName(${printJsValue(column.columnName)})`)\n\t\t}\n\t\tif (!column.nullable) {\n\t\t\tparts.push('notNull()')\n\t\t}\n\t\tif (column.default !== undefined) {\n\t\t\tparts.push(`default(${printJsValue(column.default)})`)\n\t\t}\n\t\tif (column.typeAlias) {\n\t\t\tparts.push(`typeAlias(${printJsValue(column.typeAlias)})`)\n\t\t}\n\n\n\t\t// todo: sequence\n\t\t// todo: maybe single column unique()\n\n\t\treturn parts\n\t}\n\n\tprivate formatIdentifier(id: string): string {\n\t\treturn this.definitionNamingConventions.formatIdentifier(id)\n\t}\n}\n\n\nconst ColumnToMethodMapping: {\n\t[K in Exclude<Model.ColumnType, Model.ColumnType.Enum>]: string\n} = {\n\t[Model.ColumnType.Bool]: 'boolColumn',\n\t[Model.ColumnType.Date]: 'dateColumn',\n\t[Model.ColumnType.DateTime]: 'dateTimeColumn',\n\t[Model.ColumnType.Time]: 'timeColumn',\n\t[Model.ColumnType.Json]: 'jsonColumn',\n\t[Model.ColumnType.Double]: 'doubleColumn',\n\t[Model.ColumnType.Uuid]: 'uuidColumn',\n\t[Model.ColumnType.Int]: 'intColumn',\n\t[Model.ColumnType.String]: 'stringColumn',\n}\n"],"names":["DefaultNamingConventions","DefinitionNamingConventions","AclDefinitionCodeGenerator","schema","printJsValue","isInverseRelation","Model","acceptFieldVisitor","entity","resolveDefaultColumnType"],"mappings":"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"}
1
+ {"version":3,"file":"DefinitionCodeGenerator.cjs","sources":["../../../../../packages/schema-utils/src/definition-generator/DefinitionCodeGenerator.ts"],"sourcesContent":["import { Model, Schema, Writable } from '@contember/schema'\nimport {\n\tacceptFieldVisitor,\n\tDefaultNamingConventions,\n\tisInverseRelation,\n\tNamingConventions,\n\tresolveDefaultColumnType,\n} from '../model'\nimport { printJsValue } from '../utils/printJsValue'\nimport { DefinitionNamingConventions } from './DefinitionNamingConventions'\nimport { AclDefinitionCodeGenerator } from './AclDefinitionCodeGenerator'\n\n\nexport class DefinitionCodeGenerator {\n\tconstructor(\n\t\tprivate readonly schemaNamingConventions: NamingConventions = new DefaultNamingConventions(),\n\t\tprivate readonly definitionNamingConventions = new DefinitionNamingConventions(),\n\t\tprivate readonly aclGenerator = new AclDefinitionCodeGenerator(),\n\t) {\n\t}\n\n\tpublic generate(schema: Schema) {\n\t\tconst roles = this.aclGenerator.generateRoles({ acl: schema.acl })\n\t\tconst aclVariables = this.aclGenerator.generateAclVariables({ acl: schema.acl })\n\t\tconst enums = Object.entries(schema.model.enums).map(([name, values]) => this.generateEnum({ name, values })).join('')\n\t\tconst entities = Object.values(schema.model.entities).map(entity => this.generateEntity({ entity, schema })).join('')\n\n\t\treturn `import { c } from '@contember/schema-definition'\\n${roles}${aclVariables}${enums}${entities}`\n\t}\n\n\tprivate generateEnum({ name, values }: { name: string; values: readonly string[] }): string {\n\t\treturn `\\nexport const ${this.formatIdentifier(name)} = c.createEnum(${values.map(it => printJsValue(it)).join(', ')})\\n`\n\t}\n\n\tpublic generateEntity({ entity, schema }: { entity: Model.Entity; schema: Schema }): string {\n\t\tconst uniqueConstraints = Object.values(entity.unique).map(constraint => this.generateUniqueConstraint({ entity, constraint }))\n\t\tconst indexes = Object.values(entity.indexes).map(index => this.generateIndex({ entity, index }))\n\t\tconst views = this.generateView({ entity })\n\n\t\tconst decorators = [...uniqueConstraints, ...indexes, views].filter(it => !!it).map(it => `${it}\\n`).join('')\n\t\tconst acl = this.aclGenerator.generateEntityAcl({ entity, schema })\n\n\t\treturn `\\n${decorators}${acl}export class ${this.formatIdentifier(entity.name)} {\n${Object.values(entity.fields).map(field => this.generateField({ field, entity, schema })).filter(it => !!it).join('\\n')}\n}\\n`\n\t}\n\n\tprivate generateUniqueConstraint({ entity, constraint }: { entity: Model.Entity; constraint: Model.UniqueConstraint | Model.UniqueIndex }): string {\n\t\tconst fieldsList = `${constraint.fields.map(it => printJsValue(it)).join(', ')}`\n\n\t\treturn `@c.Unique(${fieldsList})`\n\t}\n\n\tprivate generateIndex({ entity, index }: { entity: Model.Entity; index: Model.Index }): string {\n\t\tconst fieldsList = `${index.fields.map(it => printJsValue(it)).join(', ')}`\n\n\t\treturn `@c.Index(${fieldsList})`\n\t}\n\n\n\tprivate generateView({ entity }: { entity: Model.Entity }): string | undefined {\n\t\tif (!entity.view) {\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst dependenciesExpr = (entity.view.dependencies?.length ?? 0) > 0\n\t\t\t? `, {\\n\\tdependencies: () => [${entity.view.dependencies?.map(it => this.formatIdentifier(it))}]\\n}`\n\t\t\t: ''\n\n\t\treturn `@c.View(\\`${entity.view.sql}\\`${dependenciesExpr})`\n\t}\n\n\tpublic generateField({ entity, field, schema }: { entity: Model.Entity; field: Model.AnyField; schema: Schema }): string | undefined {\n\t\tconst formatRelationFactory = (method: string, relation: Model.AnyRelation) => {\n\t\t\tconst otherSide = isInverseRelation(relation) ? relation.ownedBy : relation.inversedBy\n\t\t\tconst otherSideFormatted = otherSide ? `, ${printJsValue(otherSide)}` : ''\n\t\t\treturn `${method}(${this.formatIdentifier(relation.target)}${otherSideFormatted})`\n\t\t}\n\t\tconst formatEnumRef = (enumName: string, enumValues: Record<string, string>, providedValue?: string, defaultValue?: string): string | undefined => {\n\t\t\tif (!providedValue || providedValue === defaultValue) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tconst enumValueKey = Object.entries(Model.OrderDirection).find(dir => dir[1] === providedValue)?.[0]\n\t\t\tif (!enumValueKey) {\n\t\t\t\tthrow new Error(`Value ${providedValue} is not defined in enum ${enumName}`)\n\t\t\t}\n\t\t\treturn `${enumName}.${enumValueKey}`\n\n\t\t}\n\t\tconst formatOrderBy = (orderBy?: readonly Model.OrderBy[]) => {\n\t\t\treturn orderBy?.map(it => {\n\t\t\t\tconst enumExpr = formatEnumRef(`Model.OrderDirection`, Model.OrderDirection, it.direction, Model.OrderDirection.asc)\n\t\t\t\treturn `orderBy(${printJsValue(it.path)}${enumExpr ? `, ${enumExpr}` : ''})`\n\t\t\t}) ?? []\n\t\t}\n\t\tconst formatOnDelete = (onDelete?: Model.OnDelete): string | undefined => {\n\t\t\tif (onDelete === Model.OnDelete.cascade) {\n\t\t\t\treturn 'cascadeOnDelete()'\n\t\t\t}\n\t\t\tif (onDelete === Model.OnDelete.setNull) {\n\t\t\t\treturn 'setNullOnDelete()'\n\t\t\t}\n\t\t\treturn undefined\n\t\t}\n\t\tconst formatJoiningColumn = (joiningColumnName: string, fieldName: string): string | undefined => {\n\t\t\tconst defaultJoiningColumn = this.schemaNamingConventions.getJoiningColumnName(fieldName)\n\t\t\tif (defaultJoiningColumn === joiningColumnName) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn `joiningColumn(${printJsValue(joiningColumnName)})`\n\t\t}\n\t\tconst definition = acceptFieldVisitor<(string | undefined)[]>(schema.model, entity, field, {\n\t\t\tvisitColumn: ctx => {\n\t\t\t\treturn this.generateColumn(ctx)\n\t\t\t},\n\t\t\tvisitOneHasMany: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('oneHasMany', relation),\n\t\t\t\t\t...formatOrderBy(relation.orderBy),\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitManyHasOne: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('manyHasOne', relation),\n\t\t\t\t\t!relation.nullable ? 'notNull()' : undefined,\n\t\t\t\t\tformatOnDelete(relation.joiningColumn.onDelete),\n\t\t\t\t\tformatJoiningColumn(relation.joiningColumn.columnName, relation.name),\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitOneHasOneInverse: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('oneHasOneInverse', relation),\n\t\t\t\t\t!relation.nullable ? 'notNull()' : undefined,\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitOneHasOneOwning: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('oneHasOne', relation),\n\t\t\t\t\t!relation.nullable ? 'notNull()' : undefined,\n\t\t\t\t\tformatOnDelete(relation.joiningColumn.onDelete),\n\t\t\t\t\tformatJoiningColumn(relation.joiningColumn.columnName, relation.name),\n\t\t\t\t\trelation.orphanRemoval ? 'removeOrphan()' : undefined,\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\tconst columnNames = this.schemaNamingConventions.getJoiningTableColumnNames(\n\t\t\t\t\tentity.name,\n\t\t\t\t\trelation.name,\n\t\t\t\t\trelation.target,\n\t\t\t\t\trelation.inversedBy,\n\t\t\t\t)\n\t\t\t\tconst defaultJoiningTable = this.schemaNamingConventions.getJoiningTableName(entity.name, relation.name)\n\t\t\t\tconst joiningTable: Writable<Partial<Model.JoiningTable>> = {}\n\t\t\t\tif (relation.joiningTable.tableName !== defaultJoiningTable) {\n\t\t\t\t\tjoiningTable.tableName = relation.joiningTable.tableName\n\t\t\t\t}\n\t\t\t\tif (!relation.joiningTable.eventLog.enabled) {\n\t\t\t\t\tjoiningTable.eventLog = { enabled: false }\n\t\t\t\t}\n\t\t\t\tif (columnNames[0] !== relation.joiningTable.joiningColumn.columnName || relation.joiningTable.joiningColumn.onDelete !== Model.OnDelete.cascade) {\n\t\t\t\t\tjoiningTable.joiningColumn = {\n\t\t\t\t\t\tcolumnName: relation.joiningTable.joiningColumn.columnName,\n\t\t\t\t\t\tonDelete: relation.joiningTable.joiningColumn.onDelete,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (columnNames[1] !== relation.joiningTable.inverseJoiningColumn.columnName || relation.joiningTable.inverseJoiningColumn.onDelete !== Model.OnDelete.cascade) {\n\t\t\t\t\tjoiningTable.inverseJoiningColumn = {\n\t\t\t\t\t\tcolumnName: relation.joiningTable.inverseJoiningColumn.columnName,\n\t\t\t\t\t\tonDelete: relation.joiningTable.inverseJoiningColumn.onDelete,\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('manyHasMany', relation),\n\t\t\t\t\t...formatOrderBy(relation.orderBy),\n\t\t\t\t\tObject.keys(joiningTable).length > 0 ? `joiningTable(${printJsValue(joiningTable)})` : undefined,\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('manyHasManyInverse', relation),\n\t\t\t\t\t...formatOrderBy(relation.orderBy),\n\t\t\t\t]\n\t\t\t},\n\t\t})\n\t\tconst definitionCode = definition.filter(it => !!it).join('.')\n\t\tif (field.name === 'id' && definitionCode === 'uuidColumn().notNull()') {\n\t\t\treturn undefined\n\t\t}\n\t\treturn `\\t${this.formatIdentifier(field.name)} = c.${definitionCode}`\n\t}\n\n\tprivate generateColumn({ entity, column }: { entity: Model.Entity; column: Model.AnyColumn }): string[] {\n\t\tlet parts: string[] = []\n\t\tif (column.type === Model.ColumnType.Enum) {\n\t\t\tparts.push(`enumColumn(${column.columnType})`)\n\t\t} else {\n\t\t\tparts.push(`${ColumnToMethodMapping[column.type]}()`)\n\t\t\tconst defaultColumnType = resolveDefaultColumnType(column.type)\n\t\t\tif (defaultColumnType !== column.columnType) {\n\t\t\t\tparts.push(`columnType(${printJsValue(column.columnType)})`)\n\t\t\t}\n\t\t}\n\t\tconst defaultColumnName = this.schemaNamingConventions.getColumnName(column.name)\n\t\tif (defaultColumnName !== column.columnName) {\n\t\t\tparts.push(`columnName(${printJsValue(column.columnName)})`)\n\t\t}\n\t\tif (!column.nullable) {\n\t\t\tparts.push('notNull()')\n\t\t}\n\t\tif (column.default !== undefined) {\n\t\t\tparts.push(`default(${printJsValue(column.default)})`)\n\t\t}\n\t\tif (column.typeAlias) {\n\t\t\tparts.push(`typeAlias(${printJsValue(column.typeAlias)})`)\n\t\t}\n\n\n\t\t// todo: sequence\n\t\t// todo: maybe single column unique()\n\n\t\treturn parts\n\t}\n\n\tprivate formatIdentifier(id: string): string {\n\t\treturn this.definitionNamingConventions.formatIdentifier(id)\n\t}\n}\n\n\nconst ColumnToMethodMapping: {\n\t[K in Exclude<Model.ColumnType, Model.ColumnType.Enum>]: string\n} = {\n\t[Model.ColumnType.Bool]: 'boolColumn',\n\t[Model.ColumnType.Date]: 'dateColumn',\n\t[Model.ColumnType.DateTime]: 'dateTimeColumn',\n\t[Model.ColumnType.Time]: 'timeColumn',\n\t[Model.ColumnType.Json]: 'jsonColumn',\n\t[Model.ColumnType.Double]: 'doubleColumn',\n\t[Model.ColumnType.Uuid]: 'uuidColumn',\n\t[Model.ColumnType.Int]: 'intColumn',\n\t[Model.ColumnType.String]: 'stringColumn',\n}\n"],"names":["DefaultNamingConventions","DefinitionNamingConventions","AclDefinitionCodeGenerator","schema","printJsValue","isInverseRelation","Model","acceptFieldVisitor","entity","resolveDefaultColumnType"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DefinitionCodeGenerator.js","sources":["../../../../../packages/schema-utils/src/definition-generator/DefinitionCodeGenerator.ts"],"sourcesContent":["import { Model, Schema, Writable } from '@contember/schema'\nimport {\n\tacceptFieldVisitor,\n\tDefaultNamingConventions,\n\tisInverseRelation,\n\tNamingConventions,\n\tresolveDefaultColumnType,\n} from '../model'\nimport { printJsValue } from '../utils/printJsValue'\nimport { DefinitionNamingConventions } from './DefinitionNamingConventions'\nimport { AclDefinitionCodeGenerator } from './AclDefinitionCodeGenerator'\n\n\nexport class DefinitionCodeGenerator {\n\tconstructor(\n\t\tprivate readonly schemaNamingConventions: NamingConventions = new DefaultNamingConventions(),\n\t\tprivate readonly definitionNamingConventions = new DefinitionNamingConventions(),\n\t\tprivate readonly aclGenerator = new AclDefinitionCodeGenerator(),\n\t) {\n\t}\n\n\tpublic generate(schema: Schema) {\n\t\tconst roles = this.aclGenerator.generateRoles({ acl: schema.acl })\n\t\tconst aclVariables = this.aclGenerator.generateAclVariables({ acl: schema.acl })\n\t\tconst enums = Object.entries(schema.model.enums).map(([name, values]) => this.generateEnum({ name, values })).join('')\n\t\tconst entities = Object.values(schema.model.entities).map(entity => this.generateEntity({ entity, schema })).join('')\n\n\t\treturn `import { c } from '@contember/schema-definition'\\n${roles}${aclVariables}${enums}${entities}`\n\t}\n\n\tprivate generateEnum({ name, values }: { name: string; values: readonly string[] }): string {\n\t\treturn `\\nexport const ${this.formatIdentifier(name)} = c.createEnum(${values.map(it => printJsValue(it)).join(', ')})\\n`\n\t}\n\n\tpublic generateEntity({ entity, schema }: { entity: Model.Entity; schema: Schema }): string {\n\t\tconst uniqueConstraints = Object.values(entity.unique).map(constraint => this.generateUniqueConstraint({ entity, constraint }))\n\t\tconst indexes = Object.values(entity.indexes).map(index => this.generateIndex({ entity, index }))\n\t\tconst views = this.generateView({ entity })\n\n\t\tconst decorators = [...uniqueConstraints, ...indexes, views].filter(it => !!it).map(it => `${it}\\n`).join('')\n\t\tconst acl = this.aclGenerator.generateEntityAcl({ entity, schema })\n\n\t\treturn `\\n${decorators}${acl}export class ${this.formatIdentifier(entity.name)} {\n${Object.values(entity.fields).map(field => this.generateField({ field, entity, schema })).filter(it => !!it).join('\\n')}\n}\\n`\n\t}\n\n\tprivate generateUniqueConstraint({ entity, constraint }: { entity: Model.Entity; constraint: Model.UniqueConstraint }): string {\n\t\tconst fieldsList = `${constraint.fields.map(it => printJsValue(it)).join(', ')}`\n\n\t\treturn `@c.Unique(${fieldsList})`\n\t}\n\n\tprivate generateIndex({ entity, index }: { entity: Model.Entity; index: Model.Index }): string {\n\t\tconst fieldsList = `${index.fields.map(it => printJsValue(it)).join(', ')}`\n\n\t\treturn `@c.Index(${fieldsList})`\n\t}\n\n\n\tprivate generateView({ entity }: { entity: Model.Entity }): string | undefined {\n\t\tif (!entity.view) {\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst dependenciesExpr = (entity.view.dependencies?.length ?? 0) > 0\n\t\t\t? `, {\\n\\tdependencies: () => [${entity.view.dependencies?.map(it => this.formatIdentifier(it))}]\\n}`\n\t\t\t: ''\n\n\t\treturn `@c.View(\\`${entity.view.sql}\\`${dependenciesExpr})`\n\t}\n\n\tpublic generateField({ entity, field, schema }: { entity: Model.Entity; field: Model.AnyField; schema: Schema }): string | undefined {\n\t\tconst formatRelationFactory = (method: string, relation: Model.AnyRelation) => {\n\t\t\tconst otherSide = isInverseRelation(relation) ? relation.ownedBy : relation.inversedBy\n\t\t\tconst otherSideFormatted = otherSide ? `, ${printJsValue(otherSide)}` : ''\n\t\t\treturn `${method}(${this.formatIdentifier(relation.target)}${otherSideFormatted})`\n\t\t}\n\t\tconst formatEnumRef = (enumName: string, enumValues: Record<string, string>, providedValue?: string, defaultValue?: string): string | undefined => {\n\t\t\tif (!providedValue || providedValue === defaultValue) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tconst enumValueKey = Object.entries(Model.OrderDirection).find(dir => dir[1] === providedValue)?.[0]\n\t\t\tif (!enumValueKey) {\n\t\t\t\tthrow new Error(`Value ${providedValue} is not defined in enum ${enumName}`)\n\t\t\t}\n\t\t\treturn `${enumName}.${enumValueKey}`\n\n\t\t}\n\t\tconst formatOrderBy = (orderBy?: readonly Model.OrderBy[]) => {\n\t\t\treturn orderBy?.map(it => {\n\t\t\t\tconst enumExpr = formatEnumRef(`Model.OrderDirection`, Model.OrderDirection, it.direction, Model.OrderDirection.asc)\n\t\t\t\treturn `orderBy(${printJsValue(it.path)}${enumExpr ? `, ${enumExpr}` : ''})`\n\t\t\t}) ?? []\n\t\t}\n\t\tconst formatOnDelete = (onDelete?: Model.OnDelete): string | undefined => {\n\t\t\tif (onDelete === Model.OnDelete.cascade) {\n\t\t\t\treturn 'cascadeOnDelete()'\n\t\t\t}\n\t\t\tif (onDelete === Model.OnDelete.setNull) {\n\t\t\t\treturn 'setNullOnDelete()'\n\t\t\t}\n\t\t\treturn undefined\n\t\t}\n\t\tconst formatJoiningColumn = (joiningColumnName: string, fieldName: string): string | undefined => {\n\t\t\tconst defaultJoiningColumn = this.schemaNamingConventions.getJoiningColumnName(fieldName)\n\t\t\tif (defaultJoiningColumn === joiningColumnName) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn `joiningColumn(${printJsValue(joiningColumnName)})`\n\t\t}\n\t\tconst definition = acceptFieldVisitor<(string | undefined)[]>(schema.model, entity, field, {\n\t\t\tvisitColumn: ctx => {\n\t\t\t\treturn this.generateColumn(ctx)\n\t\t\t},\n\t\t\tvisitOneHasMany: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('oneHasMany', relation),\n\t\t\t\t\t...formatOrderBy(relation.orderBy),\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitManyHasOne: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('manyHasOne', relation),\n\t\t\t\t\t!relation.nullable ? 'notNull()' : undefined,\n\t\t\t\t\tformatOnDelete(relation.joiningColumn.onDelete),\n\t\t\t\t\tformatJoiningColumn(relation.joiningColumn.columnName, relation.name),\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitOneHasOneInverse: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('oneHasOneInverse', relation),\n\t\t\t\t\t!relation.nullable ? 'notNull()' : undefined,\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitOneHasOneOwning: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('oneHasOne', relation),\n\t\t\t\t\t!relation.nullable ? 'notNull()' : undefined,\n\t\t\t\t\tformatOnDelete(relation.joiningColumn.onDelete),\n\t\t\t\t\tformatJoiningColumn(relation.joiningColumn.columnName, relation.name),\n\t\t\t\t\trelation.orphanRemoval ? 'removeOrphan()' : undefined,\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\tconst columnNames = this.schemaNamingConventions.getJoiningTableColumnNames(\n\t\t\t\t\tentity.name,\n\t\t\t\t\trelation.name,\n\t\t\t\t\trelation.target,\n\t\t\t\t\trelation.inversedBy,\n\t\t\t\t)\n\t\t\t\tconst defaultJoiningTable = this.schemaNamingConventions.getJoiningTableName(entity.name, relation.name)\n\t\t\t\tconst joiningTable: Writable<Partial<Model.JoiningTable>> = {}\n\t\t\t\tif (relation.joiningTable.tableName !== defaultJoiningTable) {\n\t\t\t\t\tjoiningTable.tableName = relation.joiningTable.tableName\n\t\t\t\t}\n\t\t\t\tif (!relation.joiningTable.eventLog.enabled) {\n\t\t\t\t\tjoiningTable.eventLog = { enabled: false }\n\t\t\t\t}\n\t\t\t\tif (columnNames[0] !== relation.joiningTable.joiningColumn.columnName || relation.joiningTable.joiningColumn.onDelete !== Model.OnDelete.cascade) {\n\t\t\t\t\tjoiningTable.joiningColumn = {\n\t\t\t\t\t\tcolumnName: relation.joiningTable.joiningColumn.columnName,\n\t\t\t\t\t\tonDelete: relation.joiningTable.joiningColumn.onDelete,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (columnNames[1] !== relation.joiningTable.inverseJoiningColumn.columnName || relation.joiningTable.inverseJoiningColumn.onDelete !== Model.OnDelete.cascade) {\n\t\t\t\t\tjoiningTable.inverseJoiningColumn = {\n\t\t\t\t\t\tcolumnName: relation.joiningTable.inverseJoiningColumn.columnName,\n\t\t\t\t\t\tonDelete: relation.joiningTable.inverseJoiningColumn.onDelete,\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('manyHasMany', relation),\n\t\t\t\t\t...formatOrderBy(relation.orderBy),\n\t\t\t\t\tObject.keys(joiningTable).length > 0 ? `joiningTable(${printJsValue(joiningTable)})` : undefined,\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('manyHasManyInverse', relation),\n\t\t\t\t\t...formatOrderBy(relation.orderBy),\n\t\t\t\t]\n\t\t\t},\n\t\t})\n\t\tconst definitionCode = definition.filter(it => !!it).join('.')\n\t\tif (field.name === 'id' && definitionCode === 'uuidColumn().notNull()') {\n\t\t\treturn undefined\n\t\t}\n\t\treturn `\\t${this.formatIdentifier(field.name)} = c.${definitionCode}`\n\t}\n\n\tprivate generateColumn({ entity, column }: { entity: Model.Entity; column: Model.AnyColumn }): string[] {\n\t\tlet parts: string[] = []\n\t\tif (column.type === Model.ColumnType.Enum) {\n\t\t\tparts.push(`enumColumn(${column.columnType})`)\n\t\t} else {\n\t\t\tparts.push(`${ColumnToMethodMapping[column.type]}()`)\n\t\t\tconst defaultColumnType = resolveDefaultColumnType(column.type)\n\t\t\tif (defaultColumnType !== column.columnType) {\n\t\t\t\tparts.push(`columnType(${printJsValue(column.columnType)})`)\n\t\t\t}\n\t\t}\n\t\tconst defaultColumnName = this.schemaNamingConventions.getColumnName(column.name)\n\t\tif (defaultColumnName !== column.columnName) {\n\t\t\tparts.push(`columnName(${printJsValue(column.columnName)})`)\n\t\t}\n\t\tif (!column.nullable) {\n\t\t\tparts.push('notNull()')\n\t\t}\n\t\tif (column.default !== undefined) {\n\t\t\tparts.push(`default(${printJsValue(column.default)})`)\n\t\t}\n\t\tif (column.typeAlias) {\n\t\t\tparts.push(`typeAlias(${printJsValue(column.typeAlias)})`)\n\t\t}\n\n\n\t\t// todo: sequence\n\t\t// todo: maybe single column unique()\n\n\t\treturn parts\n\t}\n\n\tprivate formatIdentifier(id: string): string {\n\t\treturn this.definitionNamingConventions.formatIdentifier(id)\n\t}\n}\n\n\nconst ColumnToMethodMapping: {\n\t[K in Exclude<Model.ColumnType, Model.ColumnType.Enum>]: string\n} = {\n\t[Model.ColumnType.Bool]: 'boolColumn',\n\t[Model.ColumnType.Date]: 'dateColumn',\n\t[Model.ColumnType.DateTime]: 'dateTimeColumn',\n\t[Model.ColumnType.Time]: 'timeColumn',\n\t[Model.ColumnType.Json]: 'jsonColumn',\n\t[Model.ColumnType.Double]: 'doubleColumn',\n\t[Model.ColumnType.Uuid]: 'uuidColumn',\n\t[Model.ColumnType.Int]: 'intColumn',\n\t[Model.ColumnType.String]: 'stringColumn',\n}\n"],"names":["entity"],"mappings":"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"}
1
+ {"version":3,"file":"DefinitionCodeGenerator.js","sources":["../../../../../packages/schema-utils/src/definition-generator/DefinitionCodeGenerator.ts"],"sourcesContent":["import { Model, Schema, Writable } from '@contember/schema'\nimport {\n\tacceptFieldVisitor,\n\tDefaultNamingConventions,\n\tisInverseRelation,\n\tNamingConventions,\n\tresolveDefaultColumnType,\n} from '../model'\nimport { printJsValue } from '../utils/printJsValue'\nimport { DefinitionNamingConventions } from './DefinitionNamingConventions'\nimport { AclDefinitionCodeGenerator } from './AclDefinitionCodeGenerator'\n\n\nexport class DefinitionCodeGenerator {\n\tconstructor(\n\t\tprivate readonly schemaNamingConventions: NamingConventions = new DefaultNamingConventions(),\n\t\tprivate readonly definitionNamingConventions = new DefinitionNamingConventions(),\n\t\tprivate readonly aclGenerator = new AclDefinitionCodeGenerator(),\n\t) {\n\t}\n\n\tpublic generate(schema: Schema) {\n\t\tconst roles = this.aclGenerator.generateRoles({ acl: schema.acl })\n\t\tconst aclVariables = this.aclGenerator.generateAclVariables({ acl: schema.acl })\n\t\tconst enums = Object.entries(schema.model.enums).map(([name, values]) => this.generateEnum({ name, values })).join('')\n\t\tconst entities = Object.values(schema.model.entities).map(entity => this.generateEntity({ entity, schema })).join('')\n\n\t\treturn `import { c } from '@contember/schema-definition'\\n${roles}${aclVariables}${enums}${entities}`\n\t}\n\n\tprivate generateEnum({ name, values }: { name: string; values: readonly string[] }): string {\n\t\treturn `\\nexport const ${this.formatIdentifier(name)} = c.createEnum(${values.map(it => printJsValue(it)).join(', ')})\\n`\n\t}\n\n\tpublic generateEntity({ entity, schema }: { entity: Model.Entity; schema: Schema }): string {\n\t\tconst uniqueConstraints = Object.values(entity.unique).map(constraint => this.generateUniqueConstraint({ entity, constraint }))\n\t\tconst indexes = Object.values(entity.indexes).map(index => this.generateIndex({ entity, index }))\n\t\tconst views = this.generateView({ entity })\n\n\t\tconst decorators = [...uniqueConstraints, ...indexes, views].filter(it => !!it).map(it => `${it}\\n`).join('')\n\t\tconst acl = this.aclGenerator.generateEntityAcl({ entity, schema })\n\n\t\treturn `\\n${decorators}${acl}export class ${this.formatIdentifier(entity.name)} {\n${Object.values(entity.fields).map(field => this.generateField({ field, entity, schema })).filter(it => !!it).join('\\n')}\n}\\n`\n\t}\n\n\tprivate generateUniqueConstraint({ entity, constraint }: { entity: Model.Entity; constraint: Model.UniqueConstraint | Model.UniqueIndex }): string {\n\t\tconst fieldsList = `${constraint.fields.map(it => printJsValue(it)).join(', ')}`\n\n\t\treturn `@c.Unique(${fieldsList})`\n\t}\n\n\tprivate generateIndex({ entity, index }: { entity: Model.Entity; index: Model.Index }): string {\n\t\tconst fieldsList = `${index.fields.map(it => printJsValue(it)).join(', ')}`\n\n\t\treturn `@c.Index(${fieldsList})`\n\t}\n\n\n\tprivate generateView({ entity }: { entity: Model.Entity }): string | undefined {\n\t\tif (!entity.view) {\n\t\t\treturn undefined\n\t\t}\n\n\t\tconst dependenciesExpr = (entity.view.dependencies?.length ?? 0) > 0\n\t\t\t? `, {\\n\\tdependencies: () => [${entity.view.dependencies?.map(it => this.formatIdentifier(it))}]\\n}`\n\t\t\t: ''\n\n\t\treturn `@c.View(\\`${entity.view.sql}\\`${dependenciesExpr})`\n\t}\n\n\tpublic generateField({ entity, field, schema }: { entity: Model.Entity; field: Model.AnyField; schema: Schema }): string | undefined {\n\t\tconst formatRelationFactory = (method: string, relation: Model.AnyRelation) => {\n\t\t\tconst otherSide = isInverseRelation(relation) ? relation.ownedBy : relation.inversedBy\n\t\t\tconst otherSideFormatted = otherSide ? `, ${printJsValue(otherSide)}` : ''\n\t\t\treturn `${method}(${this.formatIdentifier(relation.target)}${otherSideFormatted})`\n\t\t}\n\t\tconst formatEnumRef = (enumName: string, enumValues: Record<string, string>, providedValue?: string, defaultValue?: string): string | undefined => {\n\t\t\tif (!providedValue || providedValue === defaultValue) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\tconst enumValueKey = Object.entries(Model.OrderDirection).find(dir => dir[1] === providedValue)?.[0]\n\t\t\tif (!enumValueKey) {\n\t\t\t\tthrow new Error(`Value ${providedValue} is not defined in enum ${enumName}`)\n\t\t\t}\n\t\t\treturn `${enumName}.${enumValueKey}`\n\n\t\t}\n\t\tconst formatOrderBy = (orderBy?: readonly Model.OrderBy[]) => {\n\t\t\treturn orderBy?.map(it => {\n\t\t\t\tconst enumExpr = formatEnumRef(`Model.OrderDirection`, Model.OrderDirection, it.direction, Model.OrderDirection.asc)\n\t\t\t\treturn `orderBy(${printJsValue(it.path)}${enumExpr ? `, ${enumExpr}` : ''})`\n\t\t\t}) ?? []\n\t\t}\n\t\tconst formatOnDelete = (onDelete?: Model.OnDelete): string | undefined => {\n\t\t\tif (onDelete === Model.OnDelete.cascade) {\n\t\t\t\treturn 'cascadeOnDelete()'\n\t\t\t}\n\t\t\tif (onDelete === Model.OnDelete.setNull) {\n\t\t\t\treturn 'setNullOnDelete()'\n\t\t\t}\n\t\t\treturn undefined\n\t\t}\n\t\tconst formatJoiningColumn = (joiningColumnName: string, fieldName: string): string | undefined => {\n\t\t\tconst defaultJoiningColumn = this.schemaNamingConventions.getJoiningColumnName(fieldName)\n\t\t\tif (defaultJoiningColumn === joiningColumnName) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn `joiningColumn(${printJsValue(joiningColumnName)})`\n\t\t}\n\t\tconst definition = acceptFieldVisitor<(string | undefined)[]>(schema.model, entity, field, {\n\t\t\tvisitColumn: ctx => {\n\t\t\t\treturn this.generateColumn(ctx)\n\t\t\t},\n\t\t\tvisitOneHasMany: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('oneHasMany', relation),\n\t\t\t\t\t...formatOrderBy(relation.orderBy),\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitManyHasOne: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('manyHasOne', relation),\n\t\t\t\t\t!relation.nullable ? 'notNull()' : undefined,\n\t\t\t\t\tformatOnDelete(relation.joiningColumn.onDelete),\n\t\t\t\t\tformatJoiningColumn(relation.joiningColumn.columnName, relation.name),\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitOneHasOneInverse: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('oneHasOneInverse', relation),\n\t\t\t\t\t!relation.nullable ? 'notNull()' : undefined,\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitOneHasOneOwning: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('oneHasOne', relation),\n\t\t\t\t\t!relation.nullable ? 'notNull()' : undefined,\n\t\t\t\t\tformatOnDelete(relation.joiningColumn.onDelete),\n\t\t\t\t\tformatJoiningColumn(relation.joiningColumn.columnName, relation.name),\n\t\t\t\t\trelation.orphanRemoval ? 'removeOrphan()' : undefined,\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitManyHasManyOwning: ({ entity, relation }) => {\n\t\t\t\tconst columnNames = this.schemaNamingConventions.getJoiningTableColumnNames(\n\t\t\t\t\tentity.name,\n\t\t\t\t\trelation.name,\n\t\t\t\t\trelation.target,\n\t\t\t\t\trelation.inversedBy,\n\t\t\t\t)\n\t\t\t\tconst defaultJoiningTable = this.schemaNamingConventions.getJoiningTableName(entity.name, relation.name)\n\t\t\t\tconst joiningTable: Writable<Partial<Model.JoiningTable>> = {}\n\t\t\t\tif (relation.joiningTable.tableName !== defaultJoiningTable) {\n\t\t\t\t\tjoiningTable.tableName = relation.joiningTable.tableName\n\t\t\t\t}\n\t\t\t\tif (!relation.joiningTable.eventLog.enabled) {\n\t\t\t\t\tjoiningTable.eventLog = { enabled: false }\n\t\t\t\t}\n\t\t\t\tif (columnNames[0] !== relation.joiningTable.joiningColumn.columnName || relation.joiningTable.joiningColumn.onDelete !== Model.OnDelete.cascade) {\n\t\t\t\t\tjoiningTable.joiningColumn = {\n\t\t\t\t\t\tcolumnName: relation.joiningTable.joiningColumn.columnName,\n\t\t\t\t\t\tonDelete: relation.joiningTable.joiningColumn.onDelete,\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (columnNames[1] !== relation.joiningTable.inverseJoiningColumn.columnName || relation.joiningTable.inverseJoiningColumn.onDelete !== Model.OnDelete.cascade) {\n\t\t\t\t\tjoiningTable.inverseJoiningColumn = {\n\t\t\t\t\t\tcolumnName: relation.joiningTable.inverseJoiningColumn.columnName,\n\t\t\t\t\t\tonDelete: relation.joiningTable.inverseJoiningColumn.onDelete,\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('manyHasMany', relation),\n\t\t\t\t\t...formatOrderBy(relation.orderBy),\n\t\t\t\t\tObject.keys(joiningTable).length > 0 ? `joiningTable(${printJsValue(joiningTable)})` : undefined,\n\t\t\t\t]\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: ({ relation }) => {\n\t\t\t\treturn [\n\t\t\t\t\tformatRelationFactory('manyHasManyInverse', relation),\n\t\t\t\t\t...formatOrderBy(relation.orderBy),\n\t\t\t\t]\n\t\t\t},\n\t\t})\n\t\tconst definitionCode = definition.filter(it => !!it).join('.')\n\t\tif (field.name === 'id' && definitionCode === 'uuidColumn().notNull()') {\n\t\t\treturn undefined\n\t\t}\n\t\treturn `\\t${this.formatIdentifier(field.name)} = c.${definitionCode}`\n\t}\n\n\tprivate generateColumn({ entity, column }: { entity: Model.Entity; column: Model.AnyColumn }): string[] {\n\t\tlet parts: string[] = []\n\t\tif (column.type === Model.ColumnType.Enum) {\n\t\t\tparts.push(`enumColumn(${column.columnType})`)\n\t\t} else {\n\t\t\tparts.push(`${ColumnToMethodMapping[column.type]}()`)\n\t\t\tconst defaultColumnType = resolveDefaultColumnType(column.type)\n\t\t\tif (defaultColumnType !== column.columnType) {\n\t\t\t\tparts.push(`columnType(${printJsValue(column.columnType)})`)\n\t\t\t}\n\t\t}\n\t\tconst defaultColumnName = this.schemaNamingConventions.getColumnName(column.name)\n\t\tif (defaultColumnName !== column.columnName) {\n\t\t\tparts.push(`columnName(${printJsValue(column.columnName)})`)\n\t\t}\n\t\tif (!column.nullable) {\n\t\t\tparts.push('notNull()')\n\t\t}\n\t\tif (column.default !== undefined) {\n\t\t\tparts.push(`default(${printJsValue(column.default)})`)\n\t\t}\n\t\tif (column.typeAlias) {\n\t\t\tparts.push(`typeAlias(${printJsValue(column.typeAlias)})`)\n\t\t}\n\n\n\t\t// todo: sequence\n\t\t// todo: maybe single column unique()\n\n\t\treturn parts\n\t}\n\n\tprivate formatIdentifier(id: string): string {\n\t\treturn this.definitionNamingConventions.formatIdentifier(id)\n\t}\n}\n\n\nconst ColumnToMethodMapping: {\n\t[K in Exclude<Model.ColumnType, Model.ColumnType.Enum>]: string\n} = {\n\t[Model.ColumnType.Bool]: 'boolColumn',\n\t[Model.ColumnType.Date]: 'dateColumn',\n\t[Model.ColumnType.DateTime]: 'dateTimeColumn',\n\t[Model.ColumnType.Time]: 'timeColumn',\n\t[Model.ColumnType.Json]: 'jsonColumn',\n\t[Model.ColumnType.Double]: 'doubleColumn',\n\t[Model.ColumnType.Uuid]: 'uuidColumn',\n\t[Model.ColumnType.Int]: 'intColumn',\n\t[Model.ColumnType.String]: 'stringColumn',\n}\n"],"names":["entity"],"mappings":";;;;;;;AAaO,MAAM,wBAAwB;AAAA,EACpC,YACkB,0BAA6C,IAAI,4BACjD,8BAA8B,IAAI,+BAClC,eAAe,IAAI,8BACnC;AAHgB,SAAA,0BAAA;AACA,SAAA,8BAAA;AACA,SAAA,eAAA;AAAA,EAAA;AAAA,EAIX,SAAS,QAAgB;AACzB,UAAA,QAAQ,KAAK,aAAa,cAAc,EAAE,KAAK,OAAO,KAAK;AAC3D,UAAA,eAAe,KAAK,aAAa,qBAAqB,EAAE,KAAK,OAAO,KAAK;AACzE,UAAA,QAAQ,OAAO,QAAQ,OAAO,MAAM,KAAK,EAAE,IAAI,CAAC,CAAC,MAAM,MAAM,MAAM,KAAK,aAAa,EAAE,MAAM,QAAQ,CAAC,EAAE,KAAK,EAAE;AACrH,UAAM,WAAW,OAAO,OAAO,OAAO,MAAM,QAAQ,EAAE,IAAI,CAAA,WAAU,KAAK,eAAe,EAAE,QAAQ,OAAA,CAAQ,CAAC,EAAE,KAAK,EAAE;AAE7G,WAAA;AAAA,EAAqD,KAAK,GAAG,YAAY,GAAG,KAAK,GAAG,QAAQ;AAAA,EAAA;AAAA,EAG5F,aAAa,EAAE,MAAM,UAA+D;AACpF,WAAA;AAAA,eAAkB,KAAK,iBAAiB,IAAI,CAAC,mBAAmB,OAAO,IAAI,CAAM,OAAA,aAAa,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA,EAAA;AAAA,EAG9G,eAAe,EAAE,QAAQ,UAA4D;AAC3F,UAAM,oBAAoB,OAAO,OAAO,OAAO,MAAM,EAAE,IAAI,CAAc,eAAA,KAAK,yBAAyB,EAAE,QAAQ,WAAY,CAAA,CAAC;AAC9H,UAAM,UAAU,OAAO,OAAO,OAAO,OAAO,EAAE,IAAI,CAAS,UAAA,KAAK,cAAc,EAAE,QAAQ,MAAO,CAAA,CAAC;AAChG,UAAM,QAAQ,KAAK,aAAa,EAAE,QAAQ;AAE1C,UAAM,aAAa,CAAC,GAAG,mBAAmB,GAAG,SAAS,KAAK,EAAE,OAAO,CAAA,OAAM,CAAC,CAAC,EAAE,EAAE,IAAI,CAAA,OAAM,GAAG,EAAE;AAAA,CAAI,EAAE,KAAK,EAAE;AAC5G,UAAM,MAAM,KAAK,aAAa,kBAAkB,EAAE,QAAQ,QAAQ;AAE3D,WAAA;AAAA,EAAK,UAAU,GAAG,GAAG,gBAAgB,KAAK,iBAAiB,OAAO,IAAI,CAAC;AAAA,EAC9E,OAAO,OAAO,OAAO,MAAM,EAAE,IAAI,CAAS,UAAA,KAAK,cAAc,EAAE,OAAO,QAAQ,QAAQ,CAAC,EAAE,OAAO,CAAM,OAAA,CAAC,CAAC,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA;AAAA;AAAA,EAAA;AAAA,EAI/G,yBAAyB,EAAE,QAAQ,cAAwG;AAClJ,UAAM,aAAa,GAAG,WAAW,OAAO,IAAI,CAAA,OAAM,aAAa,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;AAE9E,WAAO,aAAa,UAAU;AAAA,EAAA;AAAA,EAGvB,cAAc,EAAE,QAAQ,SAA+D;AAC9F,UAAM,aAAa,GAAG,MAAM,OAAO,IAAI,CAAA,OAAM,aAAa,EAAE,CAAC,EAAE,KAAK,IAAI,CAAC;AAEzE,WAAO,YAAY,UAAU;AAAA,EAAA;AAAA,EAItB,aAAa,EAAE,UAAwD;AAC1E,QAAA,CAAC,OAAO,MAAM;AACV,aAAA;AAAA,IAAA;AAGR,UAAM,oBAAoB,OAAO,KAAK,cAAc,UAAU,KAAK,IAChE;AAAA,wBAA+B,OAAO,KAAK,cAAc,IAAI,QAAM,KAAK,iBAAiB,EAAE,CAAC,CAAC;AAAA,KAC7F;AAEH,WAAO,aAAa,OAAO,KAAK,GAAG,KAAK,gBAAgB;AAAA,EAAA;AAAA,EAGlD,cAAc,EAAE,QAAQ,OAAO,UAA+F;AAC9H,UAAA,wBAAwB,CAAC,QAAgB,aAAgC;AAC9E,YAAM,YAAY,kBAAkB,QAAQ,IAAI,SAAS,UAAU,SAAS;AAC5E,YAAM,qBAAqB,YAAY,KAAK,aAAa,SAAS,CAAC,KAAK;AACjE,aAAA,GAAG,MAAM,IAAI,KAAK,iBAAiB,SAAS,MAAM,CAAC,GAAG,kBAAkB;AAAA,IAChF;AACA,UAAM,gBAAgB,CAAC,UAAkB,YAAoC,eAAwB,iBAA8C;AAC9I,UAAA,CAAC,iBAAiB,kBAAkB,cAAc;AAC9C,eAAA;AAAA,MAAA;AAER,YAAM,eAAe,OAAO,QAAQ,MAAM,cAAc,EAAE,KAAK,CAAA,QAAO,IAAI,CAAC,MAAM,aAAa,IAAI,CAAC;AACnG,UAAI,CAAC,cAAc;AAClB,cAAM,IAAI,MAAM,SAAS,aAAa,2BAA2B,QAAQ,EAAE;AAAA,MAAA;AAErE,aAAA,GAAG,QAAQ,IAAI,YAAY;AAAA,IAEnC;AACM,UAAA,gBAAgB,CAAC,YAAuC;AACtD,aAAA,SAAS,IAAI,CAAM,OAAA;AACnB,cAAA,WAAW,cAAc,wBAAwB,MAAM,gBAAgB,GAAG,WAAW,MAAM,eAAe,GAAG;AAC5G,eAAA,WAAW,aAAa,GAAG,IAAI,CAAC,GAAG,WAAW,KAAK,QAAQ,KAAK,EAAE;AAAA,MACzE,CAAA,KAAK,CAAC;AAAA,IACR;AACM,UAAA,iBAAiB,CAAC,aAAkD;AACrE,UAAA,aAAa,MAAM,SAAS,SAAS;AACjC,eAAA;AAAA,MAAA;AAEJ,UAAA,aAAa,MAAM,SAAS,SAAS;AACjC,eAAA;AAAA,MAAA;AAED,aAAA;AAAA,IACR;AACM,UAAA,sBAAsB,CAAC,mBAA2B,cAA0C;AACjG,YAAM,uBAAuB,KAAK,wBAAwB,qBAAqB,SAAS;AACxF,UAAI,yBAAyB,mBAAmB;AACxC,eAAA;AAAA,MAAA;AAED,aAAA,iBAAiB,aAAa,iBAAiB,CAAC;AAAA,IACxD;AACA,UAAM,aAAa,mBAA2C,OAAO,OAAO,QAAQ,OAAO;AAAA,MAC1F,aAAa,CAAO,QAAA;AACZ,eAAA,KAAK,eAAe,GAAG;AAAA,MAC/B;AAAA,MACA,iBAAiB,CAAC,EAAE,eAAe;AAC3B,eAAA;AAAA,UACN,sBAAsB,cAAc,QAAQ;AAAA,UAC5C,GAAG,cAAc,SAAS,OAAO;AAAA,QAClC;AAAA,MACD;AAAA,MACA,iBAAiB,CAAC,EAAE,eAAe;AAC3B,eAAA;AAAA,UACN,sBAAsB,cAAc,QAAQ;AAAA,UAC5C,CAAC,SAAS,WAAW,cAAc;AAAA,UACnC,eAAe,SAAS,cAAc,QAAQ;AAAA,UAC9C,oBAAoB,SAAS,cAAc,YAAY,SAAS,IAAI;AAAA,QACrE;AAAA,MACD;AAAA,MACA,uBAAuB,CAAC,EAAE,eAAe;AACjC,eAAA;AAAA,UACN,sBAAsB,oBAAoB,QAAQ;AAAA,UAClD,CAAC,SAAS,WAAW,cAAc;AAAA,QACpC;AAAA,MACD;AAAA,MACA,sBAAsB,CAAC,EAAE,eAAe;AAChC,eAAA;AAAA,UACN,sBAAsB,aAAa,QAAQ;AAAA,UAC3C,CAAC,SAAS,WAAW,cAAc;AAAA,UACnC,eAAe,SAAS,cAAc,QAAQ;AAAA,UAC9C,oBAAoB,SAAS,cAAc,YAAY,SAAS,IAAI;AAAA,UACpE,SAAS,gBAAgB,mBAAmB;AAAA,QAC7C;AAAA,MACD;AAAA,MACA,wBAAwB,CAAC,EAAE,QAAAA,SAAQ,eAAe;AAC3C,cAAA,cAAc,KAAK,wBAAwB;AAAA,UAChDA,QAAO;AAAA,UACP,SAAS;AAAA,UACT,SAAS;AAAA,UACT,SAAS;AAAA,QACV;AACA,cAAM,sBAAsB,KAAK,wBAAwB,oBAAoBA,QAAO,MAAM,SAAS,IAAI;AACvG,cAAM,eAAsD,CAAC;AACzD,YAAA,SAAS,aAAa,cAAc,qBAAqB;AAC/C,uBAAA,YAAY,SAAS,aAAa;AAAA,QAAA;AAEhD,YAAI,CAAC,SAAS,aAAa,SAAS,SAAS;AAC/B,uBAAA,WAAW,EAAE,SAAS,MAAM;AAAA,QAAA;AAE1C,YAAI,YAAY,CAAC,MAAM,SAAS,aAAa,cAAc,cAAc,SAAS,aAAa,cAAc,aAAa,MAAM,SAAS,SAAS;AACjJ,uBAAa,gBAAgB;AAAA,YAC5B,YAAY,SAAS,aAAa,cAAc;AAAA,YAChD,UAAU,SAAS,aAAa,cAAc;AAAA,UAC/C;AAAA,QAAA;AAED,YAAI,YAAY,CAAC,MAAM,SAAS,aAAa,qBAAqB,cAAc,SAAS,aAAa,qBAAqB,aAAa,MAAM,SAAS,SAAS;AAC/J,uBAAa,uBAAuB;AAAA,YACnC,YAAY,SAAS,aAAa,qBAAqB;AAAA,YACvD,UAAU,SAAS,aAAa,qBAAqB;AAAA,UACtD;AAAA,QAAA;AAGM,eAAA;AAAA,UACN,sBAAsB,eAAe,QAAQ;AAAA,UAC7C,GAAG,cAAc,SAAS,OAAO;AAAA,UACjC,OAAO,KAAK,YAAY,EAAE,SAAS,IAAI,gBAAgB,aAAa,YAAY,CAAC,MAAM;AAAA,QACxF;AAAA,MACD;AAAA,MACA,yBAAyB,CAAC,EAAE,eAAe;AACnC,eAAA;AAAA,UACN,sBAAsB,sBAAsB,QAAQ;AAAA,UACpD,GAAG,cAAc,SAAS,OAAO;AAAA,QAClC;AAAA,MAAA;AAAA,IACD,CACA;AACK,UAAA,iBAAiB,WAAW,OAAO,CAAA,OAAM,CAAC,CAAC,EAAE,EAAE,KAAK,GAAG;AAC7D,QAAI,MAAM,SAAS,QAAQ,mBAAmB,0BAA0B;AAChE,aAAA;AAAA,IAAA;AAER,WAAO,IAAK,KAAK,iBAAiB,MAAM,IAAI,CAAC,QAAQ,cAAc;AAAA,EAAA;AAAA,EAG5D,eAAe,EAAE,QAAQ,UAAuE;AACvG,QAAI,QAAkB,CAAC;AACvB,QAAI,OAAO,SAAS,MAAM,WAAW,MAAM;AAC1C,YAAM,KAAK,cAAc,OAAO,UAAU,GAAG;AAAA,IAAA,OACvC;AACN,YAAM,KAAK,GAAG,sBAAsB,OAAO,IAAI,CAAC,IAAI;AAC9C,YAAA,oBAAoB,yBAAyB,OAAO,IAAI;AAC1D,UAAA,sBAAsB,OAAO,YAAY;AAC5C,cAAM,KAAK,cAAc,aAAa,OAAO,UAAU,CAAC,GAAG;AAAA,MAAA;AAAA,IAC5D;AAED,UAAM,oBAAoB,KAAK,wBAAwB,cAAc,OAAO,IAAI;AAC5E,QAAA,sBAAsB,OAAO,YAAY;AAC5C,YAAM,KAAK,cAAc,aAAa,OAAO,UAAU,CAAC,GAAG;AAAA,IAAA;AAExD,QAAA,CAAC,OAAO,UAAU;AACrB,YAAM,KAAK,WAAW;AAAA,IAAA;AAEnB,QAAA,OAAO,YAAY,QAAW;AACjC,YAAM,KAAK,WAAW,aAAa,OAAO,OAAO,CAAC,GAAG;AAAA,IAAA;AAEtD,QAAI,OAAO,WAAW;AACrB,YAAM,KAAK,aAAa,aAAa,OAAO,SAAS,CAAC,GAAG;AAAA,IAAA;AAOnD,WAAA;AAAA,EAAA;AAAA,EAGA,iBAAiB,IAAoB;AACrC,WAAA,KAAK,4BAA4B,iBAAiB,EAAE;AAAA,EAAA;AAE7D;AAGA,MAAM,wBAEF;AAAA,EACH,CAAC,MAAM,WAAW,IAAI,GAAG;AAAA,EACzB,CAAC,MAAM,WAAW,IAAI,GAAG;AAAA,EACzB,CAAC,MAAM,WAAW,QAAQ,GAAG;AAAA,EAC7B,CAAC,MAAM,WAAW,IAAI,GAAG;AAAA,EACzB,CAAC,MAAM,WAAW,IAAI,GAAG;AAAA,EACzB,CAAC,MAAM,WAAW,MAAM,GAAG;AAAA,EAC3B,CAAC,MAAM,WAAW,IAAI,GAAG;AAAA,EACzB,CAAC,MAAM,WAAW,GAAG,GAAG;AAAA,EACxB,CAAC,MAAM,WAAW,MAAM,GAAG;AAC5B;"}
@@ -24,6 +24,7 @@ const normalizeSchema = (schema$1) => {
24
24
  content: {
25
25
  export: true,
26
26
  import: true,
27
+ refreshMaterializedView: true,
27
28
  ...adminRoleDefinition.content
28
29
  },
29
30
  system: {
@@ -47,6 +48,7 @@ const normalizeSchema = (schema$1) => {
47
48
  content: {
48
49
  export: true,
49
50
  import: true,
51
+ refreshMaterializedView: true,
50
52
  ...contentAdminRoleDefinition.content
51
53
  },
52
54
  system: {
@@ -1 +1 @@
1
- {"version":3,"file":"schemaNormalizer.cjs","sources":["../../../../packages/schema-utils/src/schemaNormalizer.ts"],"sourcesContent":["import { Acl, ProjectRole, Schema } from '@contember/schema'\nimport { AllowAllPermissionFactory } from './acl'\n\nexport const normalizeSchema = <S extends Schema>(schema: S): S => {\n\tconst adminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.ADMIN] ?? {}\n\tconst contentAdminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.CONTENT_ADMIN] ?? {}\n\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: {\n\t\t\t\t...schema.acl.roles,\n\t\t\t\t[ProjectRole.ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\tdebug: true,\n\t\t\t\t\t...adminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.CONTENT_ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\thistory: true,\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\t...contentAdminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.DEPLOYER]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tentities: {},\n\t\t\t\t\tvariables: {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"],"names":["schema","ProjectRole","AllowAllPermissionFactory"],"mappings":";;;;AAGa,MAAA,kBAAkB,CAAmBA,aAAiB;AAClE,QAAM,sBAAoDA,SAAO,IAAI,QAAQC,OAAY,YAAA,KAAK,KAAK,CAAC;AACpG,QAAM,6BAA2DD,SAAO,IAAI,QAAQC,OAAY,YAAA,aAAa,KAAK,CAAC;AAE5G,SAAA;AAAA,IACN,GAAGD;AAAAA,IACH,KAAK;AAAA,MACJ,GAAGA,SAAO;AAAA,MACV,OAAO;AAAA,QACN,GAAGA,SAAO,IAAI;AAAA,QACd,CAACC,OAAAA,YAAY,KAAK,GAAG;AAAA,UACpB,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAIC,0BAAA,0BAAA,EAA4B,OAAOF,SAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,QAAQ;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,OAAO;AAAA,UACP,GAAG;AAAA,QACJ;AAAA,QACA,CAACC,OAAAA,YAAY,aAAa,GAAG;AAAA,UAC5B,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAIC,0BAAA,0BAAA,EAA4B,OAAOF,SAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,GAAG;AAAA,QACJ;AAAA,QACA,CAACC,OAAAA,YAAY,QAAQ,GAAG;AAAA,UACvB,QAAQ;AAAA,UACR,UAAU,CAAC;AAAA,UACX,WAAW,CAAA;AAAA,QAAC;AAAA,MACb;AAAA,IACD;AAAA,EAEF;AACD;;"}
1
+ {"version":3,"file":"schemaNormalizer.cjs","sources":["../../../../packages/schema-utils/src/schemaNormalizer.ts"],"sourcesContent":["import { Acl, ProjectRole, Schema } from '@contember/schema'\nimport { AllowAllPermissionFactory } from './acl'\n\nexport const normalizeSchema = <S extends Schema>(schema: S): S => {\n\tconst adminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.ADMIN] ?? {}\n\tconst contentAdminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.CONTENT_ADMIN] ?? {}\n\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: {\n\t\t\t\t...schema.acl.roles,\n\t\t\t\t[ProjectRole.ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\trefreshMaterializedView: true,\n\t\t\t\t\t\t...adminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\tdebug: true,\n\t\t\t\t\t...adminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.CONTENT_ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\trefreshMaterializedView: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\thistory: true,\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\t...contentAdminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.DEPLOYER]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tentities: {},\n\t\t\t\t\tvariables: {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"],"names":["schema","ProjectRole","AllowAllPermissionFactory"],"mappings":";;;;AAGa,MAAA,kBAAkB,CAAmBA,aAAiB;AAClE,QAAM,sBAAoDA,SAAO,IAAI,QAAQC,OAAY,YAAA,KAAK,KAAK,CAAC;AACpG,QAAM,6BAA2DD,SAAO,IAAI,QAAQC,OAAY,YAAA,aAAa,KAAK,CAAC;AAE5G,SAAA;AAAA,IACN,GAAGD;AAAAA,IACH,KAAK;AAAA,MACJ,GAAGA,SAAO;AAAA,MACV,OAAO;AAAA,QACN,GAAGA,SAAO,IAAI;AAAA,QACd,CAACC,OAAAA,YAAY,KAAK,GAAG;AAAA,UACpB,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAIC,0BAAA,0BAAA,EAA4B,OAAOF,SAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,yBAAyB;AAAA,YACzB,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,QAAQ;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,OAAO;AAAA,UACP,GAAG;AAAA,QACJ;AAAA,QACA,CAACC,OAAAA,YAAY,aAAa,GAAG;AAAA,UAC5B,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAIC,0BAAA,0BAAA,EAA4B,OAAOF,SAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,yBAAyB;AAAA,YACzB,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,GAAG;AAAA,QACJ;AAAA,QACA,CAACC,OAAAA,YAAY,QAAQ,GAAG;AAAA,UACvB,QAAQ;AAAA,UACR,UAAU,CAAC;AAAA,UACX,WAAW,CAAA;AAAA,QAAC;AAAA,MACb;AAAA,IACD;AAAA,EAEF;AACD;;"}
@@ -22,6 +22,7 @@ const normalizeSchema = (schema) => {
22
22
  content: {
23
23
  export: true,
24
24
  import: true,
25
+ refreshMaterializedView: true,
25
26
  ...adminRoleDefinition.content
26
27
  },
27
28
  system: {
@@ -45,6 +46,7 @@ const normalizeSchema = (schema) => {
45
46
  content: {
46
47
  export: true,
47
48
  import: true,
49
+ refreshMaterializedView: true,
48
50
  ...contentAdminRoleDefinition.content
49
51
  },
50
52
  system: {
@@ -1 +1 @@
1
- {"version":3,"file":"schemaNormalizer.js","sources":["../../../../packages/schema-utils/src/schemaNormalizer.ts"],"sourcesContent":["import { Acl, ProjectRole, Schema } from '@contember/schema'\nimport { AllowAllPermissionFactory } from './acl'\n\nexport const normalizeSchema = <S extends Schema>(schema: S): S => {\n\tconst adminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.ADMIN] ?? {}\n\tconst contentAdminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.CONTENT_ADMIN] ?? {}\n\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: {\n\t\t\t\t...schema.acl.roles,\n\t\t\t\t[ProjectRole.ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\tdebug: true,\n\t\t\t\t\t...adminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.CONTENT_ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\thistory: true,\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\t...contentAdminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.DEPLOYER]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tentities: {},\n\t\t\t\t\tvariables: {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"],"names":[],"mappings":";;AAGa,MAAA,kBAAkB,CAAmB,WAAiB;AAClE,QAAM,sBAAoD,OAAO,IAAI,QAAQ,YAAY,KAAK,KAAK,CAAC;AACpG,QAAM,6BAA2D,OAAO,IAAI,QAAQ,YAAY,aAAa,KAAK,CAAC;AAE5G,SAAA;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,MACJ,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,QACN,GAAG,OAAO,IAAI;AAAA,QACd,CAAC,YAAY,KAAK,GAAG;AAAA,UACpB,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAI,0BAAA,EAA4B,OAAO,OAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,QAAQ;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,OAAO;AAAA,UACP,GAAG;AAAA,QACJ;AAAA,QACA,CAAC,YAAY,aAAa,GAAG;AAAA,UAC5B,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAI,0BAAA,EAA4B,OAAO,OAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,GAAG;AAAA,QACJ;AAAA,QACA,CAAC,YAAY,QAAQ,GAAG;AAAA,UACvB,QAAQ;AAAA,UACR,UAAU,CAAC;AAAA,UACX,WAAW,CAAA;AAAA,QAAC;AAAA,MACb;AAAA,IACD;AAAA,EAEF;AACD;"}
1
+ {"version":3,"file":"schemaNormalizer.js","sources":["../../../../packages/schema-utils/src/schemaNormalizer.ts"],"sourcesContent":["import { Acl, ProjectRole, Schema } from '@contember/schema'\nimport { AllowAllPermissionFactory } from './acl'\n\nexport const normalizeSchema = <S extends Schema>(schema: S): S => {\n\tconst adminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.ADMIN] ?? {}\n\tconst contentAdminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.CONTENT_ADMIN] ?? {}\n\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: {\n\t\t\t\t...schema.acl.roles,\n\t\t\t\t[ProjectRole.ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\trefreshMaterializedView: true,\n\t\t\t\t\t\t...adminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\tdebug: true,\n\t\t\t\t\t...adminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.CONTENT_ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\trefreshMaterializedView: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\thistory: true,\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\t...contentAdminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.DEPLOYER]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tentities: {},\n\t\t\t\t\tvariables: {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"],"names":[],"mappings":";;AAGa,MAAA,kBAAkB,CAAmB,WAAiB;AAClE,QAAM,sBAAoD,OAAO,IAAI,QAAQ,YAAY,KAAK,KAAK,CAAC;AACpG,QAAM,6BAA2D,OAAO,IAAI,QAAQ,YAAY,aAAa,KAAK,CAAC;AAE5G,SAAA;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,MACJ,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,QACN,GAAG,OAAO,IAAI;AAAA,QACd,CAAC,YAAY,KAAK,GAAG;AAAA,UACpB,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAI,0BAAA,EAA4B,OAAO,OAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,yBAAyB;AAAA,YACzB,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,QAAQ;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,OAAO;AAAA,UACP,GAAG;AAAA,QACJ;AAAA,QACA,CAAC,YAAY,aAAa,GAAG;AAAA,UAC5B,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAI,0BAAA,EAA4B,OAAO,OAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,yBAAyB;AAAA,YACzB,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,GAAG;AAAA,QACJ;AAAA,QACA,CAAC,YAAY,QAAQ,GAAG;AAAA,UACvB,QAAQ;AAAA,UACR,UAAU,CAAC;AAAA,UACX,WAAW,CAAA;AAAA,QAAC;AAAA,MACb;AAAA,IACD;AAAA,EAEF;AACD;"}
@@ -51,7 +51,8 @@ const systemPermissionsSchema = Typesafe__namespace.partial({
51
51
  const contentPermissionsSchema = Typesafe__namespace.partial({
52
52
  assumeMembership: membershipMatchRuleSchema,
53
53
  export: Typesafe__namespace.boolean,
54
- import: Typesafe__namespace.boolean
54
+ import: Typesafe__namespace.boolean,
55
+ refreshMaterializedView: Typesafe__namespace.boolean
55
56
  });
56
57
  const entityVariableSchema = Typesafe__namespace.intersection(
57
58
  Typesafe__namespace.object({
@@ -96,6 +97,7 @@ const entityOperationsSchema = Typesafe__namespace.partial({
96
97
  update: fieldPermissionsSchema,
97
98
  delete: Typesafe__namespace.union(Typesafe__namespace.string, Typesafe__namespace.boolean),
98
99
  customPrimary: Typesafe__namespace.boolean,
100
+ refreshMaterializedView: Typesafe__namespace.boolean,
99
101
  noRoot: Typesafe__namespace.array(Typesafe__namespace.enumeration("create", "read", "update", "delete"))
100
102
  });
101
103
  const entitiesSchema = Typesafe__namespace.record(
@@ -1 +1 @@
1
- {"version":3,"file":"acl.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/acl.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport * as Typesafe from '@contember/typesafe'\nimport { conditionSchema } from './condition'\n\nconst membershipMatchRuleSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tTypesafe.literal(true),\n\t\tTypesafe.partial({\n\t\t\tvariables: Typesafe.union(\n\t\t\t\tTypesafe.literal(true),\n\t\t\t\tTypesafe.record(\n\t\t\t\t\tTypesafe.string,\n\t\t\t\t\tTypesafe.union(Typesafe.literal(true), Typesafe.string),\n\t\t\t\t),\n\t\t\t),\n\t\t}),\n\t),\n)\n\nconst tenantPermissionsSchema = Typesafe.partial({\n\tinvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tunmanagedInvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tmanage: membershipMatchRuleSchema,\n\tview: membershipMatchRuleSchema,\n})\nconst tenantSchemaCheck: Typesafe.Equals<Acl.TenantPermissions, ReturnType<typeof tenantPermissionsSchema>> = true\n\nconst systemPermissionsSchema = Typesafe.partial({\n\thistory: Typesafe.union(Typesafe.boolean, Typesafe.enumeration('any', 'none')),\n\tmigrate: Typesafe.boolean,\n\tassumeIdentity: Typesafe.boolean,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst systemSchemaCheck: Typesafe.Equals<Acl.SystemPermissions, ReturnType<typeof systemPermissionsSchema>> = true\n\nconst contentPermissionsSchema = Typesafe.partial({\n\tassumeMembership: membershipMatchRuleSchema,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst contentSchemaCheck: Typesafe.Equals<Acl.ContentPermissions, ReturnType<typeof contentPermissionsSchema>> = true\n\nconst entityVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.entity),\n\t\tentityName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst entityVariableSchemaCheck: Typesafe.Equals<Acl.EntityVariable, ReturnType<typeof entityVariableSchema>> = true\n\nconst predefinedVariableSchema = Typesafe.object({\n\ttype: Typesafe.literal(Acl.VariableType.predefined),\n\tvalue: Typesafe.enumeration('identityID', 'personID'),\n})\nconst conditionVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.condition),\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst conditionVariableSchemaCheck: Typesafe.Equals<Acl.ConditionVariable, ReturnType<typeof conditionVariableSchema>> = true\n\nconst variablesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tentityVariableSchema as Typesafe.Type<Acl.EntityVariable>,\n\t\tpredefinedVariableSchema,\n\t\tconditionVariableSchema as Typesafe.Type<Acl.ConditionVariable>,\n\t),\n)\n\nconst variableSchemaCheck: Typesafe.Equals<Acl.Variables, ReturnType<typeof variablesSchema>> = true\n\nconst fieldPermissionsSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(Typesafe.string, Typesafe.boolean),\n)\nconst predicatesSchema = Typesafe.record(\n\tTypesafe.string,\n\t(v, p): Acl.PredicateDefinition => Typesafe.anyJsonObject(v, p) as Acl.PredicateDefinition,\n)\n\nconst predicatesSchemaCheck: Typesafe.Equals<Acl.PredicateMap, ReturnType<typeof predicatesSchema>> = true\n\nconst entityOperationsSchema = Typesafe.partial({\n\tread: fieldPermissionsSchema,\n\tcreate: fieldPermissionsSchema,\n\tupdate: fieldPermissionsSchema,\n\tdelete: Typesafe.union(Typesafe.string, Typesafe.boolean),\n\tcustomPrimary: Typesafe.boolean,\n\tnoRoot: Typesafe.array(Typesafe.enumeration('create', 'read', 'update', 'delete')),\n})\n\nconst opSchemaCheck: Typesafe.Equals<Acl.EntityOperations, ReturnType<typeof entityOperationsSchema>> = true\nconst entitiesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.object({\n\t\tpredicates: predicatesSchema,\n\t\toperations: entityOperationsSchema,\n\t}),\n)\nconst entitiesSchemaCheck: Typesafe.Equals<Acl.Permissions, ReturnType<typeof entitiesSchema>> = true\n\nconst baseRolePermissionsSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvariables: variablesSchema,\n\t\tentities: entitiesSchema,\n\t}),\n\tTypesafe.partial({\n\t\tinherits: Typesafe.array(Typesafe.string),\n\t\timplicit: Typesafe.boolean,\n\t\tstages: Typesafe.union(\n\t\t\tTypesafe.literal('*'),\n\t\t\tTypesafe.array(Typesafe.string),\n\t\t),\n\t\ttenant: tenantPermissionsSchema,\n\t\tsystem: systemPermissionsSchema,\n\t\tcontent: contentPermissionsSchema,\n\t\tdebug: Typesafe.boolean,\n\t}),\n)\nconst baseRolePermissionsCheck: Typesafe.Equals<Acl.BaseRolePermissions, ReturnType<typeof baseRolePermissionsSchema>> = true\n\nexport const aclSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\troles: Typesafe.record(\n\t\t\tTypesafe.string,\n\t\t\t(v, p): Acl.RolePermissions => {\n\t\t\t\tconst main: Acl.BaseRolePermissions = baseRolePermissionsSchema(v, p)\n\t\t\t\treturn {\n\t\t\t\t\t...(v as any),\n\t\t\t\t\t...main,\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t}),\n\tTypesafe.partial({\n\t\tcustomPrimary: Typesafe.boolean,\n\t}),\n)\nconst aclSchemaCheck: Typesafe.Equals<Acl.Schema, ReturnType<typeof aclSchema>> = true\n"],"names":["Typesafe","Acl","conditionSchema"],"mappings":"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"}
1
+ {"version":3,"file":"acl.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/acl.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport * as Typesafe from '@contember/typesafe'\nimport { conditionSchema } from './condition'\n\nconst membershipMatchRuleSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tTypesafe.literal(true),\n\t\tTypesafe.partial({\n\t\t\tvariables: Typesafe.union(\n\t\t\t\tTypesafe.literal(true),\n\t\t\t\tTypesafe.record(\n\t\t\t\t\tTypesafe.string,\n\t\t\t\t\tTypesafe.union(Typesafe.literal(true), Typesafe.string),\n\t\t\t\t),\n\t\t\t),\n\t\t}),\n\t),\n)\n\nconst tenantPermissionsSchema = Typesafe.partial({\n\tinvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tunmanagedInvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tmanage: membershipMatchRuleSchema,\n\tview: membershipMatchRuleSchema,\n})\nconst tenantSchemaCheck: Typesafe.Equals<Acl.TenantPermissions, ReturnType<typeof tenantPermissionsSchema>> = true\n\nconst systemPermissionsSchema = Typesafe.partial({\n\thistory: Typesafe.union(Typesafe.boolean, Typesafe.enumeration('any', 'none')),\n\tmigrate: Typesafe.boolean,\n\tassumeIdentity: Typesafe.boolean,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst systemSchemaCheck: Typesafe.Equals<Acl.SystemPermissions, ReturnType<typeof systemPermissionsSchema>> = true\n\nconst contentPermissionsSchema = Typesafe.partial({\n\tassumeMembership: membershipMatchRuleSchema,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n\trefreshMaterializedView: Typesafe.boolean,\n})\nconst contentSchemaCheck: Typesafe.Equals<Acl.ContentPermissions, ReturnType<typeof contentPermissionsSchema>> = true\n\nconst entityVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.entity),\n\t\tentityName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst entityVariableSchemaCheck: Typesafe.Equals<Acl.EntityVariable, ReturnType<typeof entityVariableSchema>> = true\n\nconst predefinedVariableSchema = Typesafe.object({\n\ttype: Typesafe.literal(Acl.VariableType.predefined),\n\tvalue: Typesafe.enumeration('identityID', 'personID'),\n})\nconst conditionVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.condition),\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst conditionVariableSchemaCheck: Typesafe.Equals<Acl.ConditionVariable, ReturnType<typeof conditionVariableSchema>> = true\n\nconst variablesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tentityVariableSchema as Typesafe.Type<Acl.EntityVariable>,\n\t\tpredefinedVariableSchema,\n\t\tconditionVariableSchema as Typesafe.Type<Acl.ConditionVariable>,\n\t),\n)\n\nconst variableSchemaCheck: Typesafe.Equals<Acl.Variables, ReturnType<typeof variablesSchema>> = true\n\nconst fieldPermissionsSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(Typesafe.string, Typesafe.boolean),\n)\nconst predicatesSchema = Typesafe.record(\n\tTypesafe.string,\n\t(v, p): Acl.PredicateDefinition => Typesafe.anyJsonObject(v, p) as Acl.PredicateDefinition,\n)\n\nconst predicatesSchemaCheck: Typesafe.Equals<Acl.PredicateMap, ReturnType<typeof predicatesSchema>> = true\n\nconst entityOperationsSchema = Typesafe.partial({\n\tread: fieldPermissionsSchema,\n\tcreate: fieldPermissionsSchema,\n\tupdate: fieldPermissionsSchema,\n\tdelete: Typesafe.union(Typesafe.string, Typesafe.boolean),\n\tcustomPrimary: Typesafe.boolean,\n\trefreshMaterializedView: Typesafe.boolean,\n\tnoRoot: Typesafe.array(Typesafe.enumeration('create', 'read', 'update', 'delete')),\n})\n\nconst opSchemaCheck: Typesafe.Equals<Acl.EntityOperations, ReturnType<typeof entityOperationsSchema>> = true\nconst entitiesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.object({\n\t\tpredicates: predicatesSchema,\n\t\toperations: entityOperationsSchema,\n\t}),\n)\nconst entitiesSchemaCheck: Typesafe.Equals<Acl.Permissions, ReturnType<typeof entitiesSchema>> = true\n\nconst baseRolePermissionsSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvariables: variablesSchema,\n\t\tentities: entitiesSchema,\n\t}),\n\tTypesafe.partial({\n\t\tinherits: Typesafe.array(Typesafe.string),\n\t\timplicit: Typesafe.boolean,\n\t\tstages: Typesafe.union(\n\t\t\tTypesafe.literal('*'),\n\t\t\tTypesafe.array(Typesafe.string),\n\t\t),\n\t\ttenant: tenantPermissionsSchema,\n\t\tsystem: systemPermissionsSchema,\n\t\tcontent: contentPermissionsSchema,\n\t\tdebug: Typesafe.boolean,\n\t}),\n)\nconst baseRolePermissionsCheck: Typesafe.Equals<Acl.BaseRolePermissions, ReturnType<typeof baseRolePermissionsSchema>> = true\n\nexport const aclSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\troles: Typesafe.record(\n\t\t\tTypesafe.string,\n\t\t\t(v, p): Acl.RolePermissions => {\n\t\t\t\tconst main: Acl.BaseRolePermissions = baseRolePermissionsSchema(v, p)\n\t\t\t\treturn {\n\t\t\t\t\t...(v as any),\n\t\t\t\t\t...main,\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t}),\n\tTypesafe.partial({\n\t\tcustomPrimary: Typesafe.boolean,\n\t}),\n)\nconst aclSchemaCheck: Typesafe.Equals<Acl.Schema, ReturnType<typeof aclSchema>> = true\n"],"names":["Typesafe","Acl","conditionSchema"],"mappings":"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"}
@@ -32,7 +32,8 @@ const systemPermissionsSchema = Typesafe.partial({
32
32
  const contentPermissionsSchema = Typesafe.partial({
33
33
  assumeMembership: membershipMatchRuleSchema,
34
34
  export: Typesafe.boolean,
35
- import: Typesafe.boolean
35
+ import: Typesafe.boolean,
36
+ refreshMaterializedView: Typesafe.boolean
36
37
  });
37
38
  const entityVariableSchema = Typesafe.intersection(
38
39
  Typesafe.object({
@@ -77,6 +78,7 @@ const entityOperationsSchema = Typesafe.partial({
77
78
  update: fieldPermissionsSchema,
78
79
  delete: Typesafe.union(Typesafe.string, Typesafe.boolean),
79
80
  customPrimary: Typesafe.boolean,
81
+ refreshMaterializedView: Typesafe.boolean,
80
82
  noRoot: Typesafe.array(Typesafe.enumeration("create", "read", "update", "delete"))
81
83
  });
82
84
  const entitiesSchema = Typesafe.record(
@@ -1 +1 @@
1
- {"version":3,"file":"acl.js","sources":["../../../../../packages/schema-utils/src/type-schema/acl.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport * as Typesafe from '@contember/typesafe'\nimport { conditionSchema } from './condition'\n\nconst membershipMatchRuleSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tTypesafe.literal(true),\n\t\tTypesafe.partial({\n\t\t\tvariables: Typesafe.union(\n\t\t\t\tTypesafe.literal(true),\n\t\t\t\tTypesafe.record(\n\t\t\t\t\tTypesafe.string,\n\t\t\t\t\tTypesafe.union(Typesafe.literal(true), Typesafe.string),\n\t\t\t\t),\n\t\t\t),\n\t\t}),\n\t),\n)\n\nconst tenantPermissionsSchema = Typesafe.partial({\n\tinvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tunmanagedInvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tmanage: membershipMatchRuleSchema,\n\tview: membershipMatchRuleSchema,\n})\nconst tenantSchemaCheck: Typesafe.Equals<Acl.TenantPermissions, ReturnType<typeof tenantPermissionsSchema>> = true\n\nconst systemPermissionsSchema = Typesafe.partial({\n\thistory: Typesafe.union(Typesafe.boolean, Typesafe.enumeration('any', 'none')),\n\tmigrate: Typesafe.boolean,\n\tassumeIdentity: Typesafe.boolean,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst systemSchemaCheck: Typesafe.Equals<Acl.SystemPermissions, ReturnType<typeof systemPermissionsSchema>> = true\n\nconst contentPermissionsSchema = Typesafe.partial({\n\tassumeMembership: membershipMatchRuleSchema,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst contentSchemaCheck: Typesafe.Equals<Acl.ContentPermissions, ReturnType<typeof contentPermissionsSchema>> = true\n\nconst entityVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.entity),\n\t\tentityName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst entityVariableSchemaCheck: Typesafe.Equals<Acl.EntityVariable, ReturnType<typeof entityVariableSchema>> = true\n\nconst predefinedVariableSchema = Typesafe.object({\n\ttype: Typesafe.literal(Acl.VariableType.predefined),\n\tvalue: Typesafe.enumeration('identityID', 'personID'),\n})\nconst conditionVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.condition),\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst conditionVariableSchemaCheck: Typesafe.Equals<Acl.ConditionVariable, ReturnType<typeof conditionVariableSchema>> = true\n\nconst variablesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tentityVariableSchema as Typesafe.Type<Acl.EntityVariable>,\n\t\tpredefinedVariableSchema,\n\t\tconditionVariableSchema as Typesafe.Type<Acl.ConditionVariable>,\n\t),\n)\n\nconst variableSchemaCheck: Typesafe.Equals<Acl.Variables, ReturnType<typeof variablesSchema>> = true\n\nconst fieldPermissionsSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(Typesafe.string, Typesafe.boolean),\n)\nconst predicatesSchema = Typesafe.record(\n\tTypesafe.string,\n\t(v, p): Acl.PredicateDefinition => Typesafe.anyJsonObject(v, p) as Acl.PredicateDefinition,\n)\n\nconst predicatesSchemaCheck: Typesafe.Equals<Acl.PredicateMap, ReturnType<typeof predicatesSchema>> = true\n\nconst entityOperationsSchema = Typesafe.partial({\n\tread: fieldPermissionsSchema,\n\tcreate: fieldPermissionsSchema,\n\tupdate: fieldPermissionsSchema,\n\tdelete: Typesafe.union(Typesafe.string, Typesafe.boolean),\n\tcustomPrimary: Typesafe.boolean,\n\tnoRoot: Typesafe.array(Typesafe.enumeration('create', 'read', 'update', 'delete')),\n})\n\nconst opSchemaCheck: Typesafe.Equals<Acl.EntityOperations, ReturnType<typeof entityOperationsSchema>> = true\nconst entitiesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.object({\n\t\tpredicates: predicatesSchema,\n\t\toperations: entityOperationsSchema,\n\t}),\n)\nconst entitiesSchemaCheck: Typesafe.Equals<Acl.Permissions, ReturnType<typeof entitiesSchema>> = true\n\nconst baseRolePermissionsSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvariables: variablesSchema,\n\t\tentities: entitiesSchema,\n\t}),\n\tTypesafe.partial({\n\t\tinherits: Typesafe.array(Typesafe.string),\n\t\timplicit: Typesafe.boolean,\n\t\tstages: Typesafe.union(\n\t\t\tTypesafe.literal('*'),\n\t\t\tTypesafe.array(Typesafe.string),\n\t\t),\n\t\ttenant: tenantPermissionsSchema,\n\t\tsystem: systemPermissionsSchema,\n\t\tcontent: contentPermissionsSchema,\n\t\tdebug: Typesafe.boolean,\n\t}),\n)\nconst baseRolePermissionsCheck: Typesafe.Equals<Acl.BaseRolePermissions, ReturnType<typeof baseRolePermissionsSchema>> = true\n\nexport const aclSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\troles: Typesafe.record(\n\t\t\tTypesafe.string,\n\t\t\t(v, p): Acl.RolePermissions => {\n\t\t\t\tconst main: Acl.BaseRolePermissions = baseRolePermissionsSchema(v, p)\n\t\t\t\treturn {\n\t\t\t\t\t...(v as any),\n\t\t\t\t\t...main,\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t}),\n\tTypesafe.partial({\n\t\tcustomPrimary: Typesafe.boolean,\n\t}),\n)\nconst aclSchemaCheck: Typesafe.Equals<Acl.Schema, ReturnType<typeof aclSchema>> = true\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acl.js","sources":["../../../../../packages/schema-utils/src/type-schema/acl.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport * as Typesafe from '@contember/typesafe'\nimport { conditionSchema } from './condition'\n\nconst membershipMatchRuleSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tTypesafe.literal(true),\n\t\tTypesafe.partial({\n\t\t\tvariables: Typesafe.union(\n\t\t\t\tTypesafe.literal(true),\n\t\t\t\tTypesafe.record(\n\t\t\t\t\tTypesafe.string,\n\t\t\t\t\tTypesafe.union(Typesafe.literal(true), Typesafe.string),\n\t\t\t\t),\n\t\t\t),\n\t\t}),\n\t),\n)\n\nconst tenantPermissionsSchema = Typesafe.partial({\n\tinvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tunmanagedInvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tmanage: membershipMatchRuleSchema,\n\tview: membershipMatchRuleSchema,\n})\nconst tenantSchemaCheck: Typesafe.Equals<Acl.TenantPermissions, ReturnType<typeof tenantPermissionsSchema>> = true\n\nconst systemPermissionsSchema = Typesafe.partial({\n\thistory: Typesafe.union(Typesafe.boolean, Typesafe.enumeration('any', 'none')),\n\tmigrate: Typesafe.boolean,\n\tassumeIdentity: Typesafe.boolean,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst systemSchemaCheck: Typesafe.Equals<Acl.SystemPermissions, ReturnType<typeof systemPermissionsSchema>> = true\n\nconst contentPermissionsSchema = Typesafe.partial({\n\tassumeMembership: membershipMatchRuleSchema,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n\trefreshMaterializedView: Typesafe.boolean,\n})\nconst contentSchemaCheck: Typesafe.Equals<Acl.ContentPermissions, ReturnType<typeof contentPermissionsSchema>> = true\n\nconst entityVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.entity),\n\t\tentityName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst entityVariableSchemaCheck: Typesafe.Equals<Acl.EntityVariable, ReturnType<typeof entityVariableSchema>> = true\n\nconst predefinedVariableSchema = Typesafe.object({\n\ttype: Typesafe.literal(Acl.VariableType.predefined),\n\tvalue: Typesafe.enumeration('identityID', 'personID'),\n})\nconst conditionVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.condition),\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst conditionVariableSchemaCheck: Typesafe.Equals<Acl.ConditionVariable, ReturnType<typeof conditionVariableSchema>> = true\n\nconst variablesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tentityVariableSchema as Typesafe.Type<Acl.EntityVariable>,\n\t\tpredefinedVariableSchema,\n\t\tconditionVariableSchema as Typesafe.Type<Acl.ConditionVariable>,\n\t),\n)\n\nconst variableSchemaCheck: Typesafe.Equals<Acl.Variables, ReturnType<typeof variablesSchema>> = true\n\nconst fieldPermissionsSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(Typesafe.string, Typesafe.boolean),\n)\nconst predicatesSchema = Typesafe.record(\n\tTypesafe.string,\n\t(v, p): Acl.PredicateDefinition => Typesafe.anyJsonObject(v, p) as Acl.PredicateDefinition,\n)\n\nconst predicatesSchemaCheck: Typesafe.Equals<Acl.PredicateMap, ReturnType<typeof predicatesSchema>> = true\n\nconst entityOperationsSchema = Typesafe.partial({\n\tread: fieldPermissionsSchema,\n\tcreate: fieldPermissionsSchema,\n\tupdate: fieldPermissionsSchema,\n\tdelete: Typesafe.union(Typesafe.string, Typesafe.boolean),\n\tcustomPrimary: Typesafe.boolean,\n\trefreshMaterializedView: Typesafe.boolean,\n\tnoRoot: Typesafe.array(Typesafe.enumeration('create', 'read', 'update', 'delete')),\n})\n\nconst opSchemaCheck: Typesafe.Equals<Acl.EntityOperations, ReturnType<typeof entityOperationsSchema>> = true\nconst entitiesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.object({\n\t\tpredicates: predicatesSchema,\n\t\toperations: entityOperationsSchema,\n\t}),\n)\nconst entitiesSchemaCheck: Typesafe.Equals<Acl.Permissions, ReturnType<typeof entitiesSchema>> = true\n\nconst baseRolePermissionsSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvariables: variablesSchema,\n\t\tentities: entitiesSchema,\n\t}),\n\tTypesafe.partial({\n\t\tinherits: Typesafe.array(Typesafe.string),\n\t\timplicit: Typesafe.boolean,\n\t\tstages: Typesafe.union(\n\t\t\tTypesafe.literal('*'),\n\t\t\tTypesafe.array(Typesafe.string),\n\t\t),\n\t\ttenant: tenantPermissionsSchema,\n\t\tsystem: systemPermissionsSchema,\n\t\tcontent: contentPermissionsSchema,\n\t\tdebug: Typesafe.boolean,\n\t}),\n)\nconst baseRolePermissionsCheck: Typesafe.Equals<Acl.BaseRolePermissions, ReturnType<typeof baseRolePermissionsSchema>> = true\n\nexport const aclSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\troles: Typesafe.record(\n\t\t\tTypesafe.string,\n\t\t\t(v, p): Acl.RolePermissions => {\n\t\t\t\tconst main: Acl.BaseRolePermissions = baseRolePermissionsSchema(v, p)\n\t\t\t\treturn {\n\t\t\t\t\t...(v as any),\n\t\t\t\t\t...main,\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t}),\n\tTypesafe.partial({\n\t\tcustomPrimary: Typesafe.boolean,\n\t}),\n)\nconst aclSchemaCheck: Typesafe.Equals<Acl.Schema, ReturnType<typeof aclSchema>> = true\n"],"names":[],"mappings":"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"}
@@ -69,6 +69,7 @@ const resolveColumnTypeSchema = (type) => {
69
69
  switch (type) {
70
70
  case schema.Model.ColumnType.Bool:
71
71
  return Typesafe__namespace.boolean;
72
+ // todo: validate format of string-like inputs uuid, date, enum
72
73
  case schema.Model.ColumnType.Date:
73
74
  case schema.Model.ColumnType.DateTime:
74
75
  case schema.Model.ColumnType.Time:
@@ -1 +1 @@
1
- {"version":3,"file":"condition.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/condition.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Json, Type } from '@contember/typesafe'\nimport { Input, Model, Value } from '@contember/schema'\n\nexport const conditionSchema = <T extends Value.FieldValue>(type?: Model.ColumnType): Type<Input.Condition<T>> => {\n\tconst metadata = type ? resolveColumnMetadata(type) : { type: Typesafe.scalar }\n\treturn conditionSchemaInner(metadata)\n}\n\ninterface ResolvedColumnMetadata<T extends Json> {\n\ttype: Typesafe.Type<T>\n\tisJson?: boolean\n\tisString?: boolean\n}\n\nconst conditionSchemaInner = <T extends Json>(metadata: ResolvedColumnMetadata<T>): Type<Input.Condition<T>> => {\n\treturn (input: unknown, path: PropertyKey[] = []): Input.Condition<T> => {\n\t\tconst self = conditionSchemaInner(metadata)\n\t\tconst inner = metadata.type\n\t\tconst objectSchema = Typesafe.noExtraProps(Typesafe.partial({\n\t\t\tand: Typesafe.array(self),\n\t\t\tor: Typesafe.array(self),\n\t\t\tnot: self,\n\t\t\tnull: Typesafe.boolean,\n\t\t\tisNull: Typesafe.boolean,\n\t\t\tnever: Typesafe.true_,\n\t\t\talways: Typesafe.true_,\n\t\t\t...(metadata.isJson !== true ? {\n\t\t\t\teq: inner,\n\t\t\t\tnotEq: inner,\n\t\t\t\tin: Typesafe.array(inner),\n\t\t\t\tnotIn: Typesafe.array(inner),\n\t\t\t\tlt: inner,\n\t\t\t\tlte: inner,\n\t\t\t\tgt: inner,\n\t\t\t\tgte: inner,\n\t\t\t} : {}),\n\t\t\t...(metadata.isString !== false ? {\n\t\t\t\tcontains: Typesafe.string,\n\t\t\t\tstartsWith: Typesafe.string,\n\t\t\t\tendsWith: Typesafe.string,\n\t\t\t\tcontainsCI: Typesafe.string,\n\t\t\t\tstartsWithCI: Typesafe.string,\n\t\t\t\tendsWithCI: Typesafe.string,\n\t\t\t} : {}),\n\t\t}))\n\t\treturn objectSchema(input, path) as Input.Condition<T>\n\t}\n}\n\nconst resolveColumnMetadata = (type: Model.ColumnType): ResolvedColumnMetadata<any> => {\n\tconst resolvedType = Typesafe.nullable(resolveColumnTypeSchema(type))\n\treturn {\n\t\ttype: resolvedType,\n\t\tisJson: type === Model.ColumnType.Json,\n\t\tisString: type === Model.ColumnType.String,\n\n\t}\n}\n\n\nconst resolveColumnTypeSchema = (type: Model.ColumnType) => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn Typesafe.boolean\n\n\t\t// todo: validate format of string-like inputs uuid, date, enum\n\t\tcase Model.ColumnType.Date:\n\t\tcase Model.ColumnType.DateTime:\n\t\tcase Model.ColumnType.Time:\n\t\tcase Model.ColumnType.Uuid:\n\t\tcase Model.ColumnType.Enum:\n\t\tcase Model.ColumnType.String:\n\t\t\treturn Typesafe.string\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn Typesafe.number\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn Typesafe.integer\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn Typesafe.anyJson\n\t}\n}\n"],"names":["Typesafe","Model"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAIa,MAAA,kBAAkB,CAA6B,SAAsD;AAC3G,QAAA,WAAW,OAAO,sBAAsB,IAAI,IAAI,EAAE,MAAMA,oBAAS,OAAO;AAC9E,SAAO,qBAAqB,QAAQ;AACrC;AAQA,MAAM,uBAAuB,CAAiB,aAAkE;AAC/G,SAAO,CAAC,OAAgB,OAAsB,OAA2B;AAClE,UAAA,OAAO,qBAAqB,QAAQ;AAC1C,UAAM,QAAQ,SAAS;AACvB,UAAM,eAAeA,oBAAS,aAAaA,oBAAS,QAAQ;AAAA,MAC3D,KAAKA,oBAAS,MAAM,IAAI;AAAA,MACxB,IAAIA,oBAAS,MAAM,IAAI;AAAA,MACvB,KAAK;AAAA,MACL,MAAMA,oBAAS;AAAA,MACf,QAAQA,oBAAS;AAAA,MACjB,OAAOA,oBAAS;AAAA,MAChB,QAAQA,oBAAS;AAAA,MACjB,GAAI,SAAS,WAAW,OAAO;AAAA,QAC9B,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,IAAIA,oBAAS,MAAM,KAAK;AAAA,QACxB,OAAOA,oBAAS,MAAM,KAAK;AAAA,QAC3B,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,IAAI;AAAA,QACJ,KAAK;AAAA,MAAA,IACF,CAAC;AAAA,MACL,GAAI,SAAS,aAAa,QAAQ;AAAA,QACjC,UAAUA,oBAAS;AAAA,QACnB,YAAYA,oBAAS;AAAA,QACrB,UAAUA,oBAAS;AAAA,QACnB,YAAYA,oBAAS;AAAA,QACrB,cAAcA,oBAAS;AAAA,QACvB,YAAYA,oBAAS;AAAA,MAAA,IAClB,CAAA;AAAA,IAAC,CACL,CAAC;AACK,WAAA,aAAa,OAAO,IAAI;AAAA,EAChC;AACD;AAEA,MAAM,wBAAwB,CAAC,SAAwD;AACtF,QAAM,eAAeA,oBAAS,SAAS,wBAAwB,IAAI,CAAC;AAC7D,SAAA;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,SAASC,aAAM,WAAW;AAAA,IAClC,UAAU,SAASA,OAAA,MAAM,WAAW;AAAA,EAErC;AACD;AAGA,MAAM,0BAA0B,CAAC,SAA2B;AAC3D,UAAQ,MAAM;AAAA,IACb,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,IAGjB,KAAKC,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,IACjB,KAAKC,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,IACjB,KAAKC,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,IACjB,KAAKC,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,EAAA;AAEnB;;"}
1
+ {"version":3,"file":"condition.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/condition.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Json, Type } from '@contember/typesafe'\nimport { Input, Model, Value } from '@contember/schema'\n\nexport const conditionSchema = <T extends Value.FieldValue>(type?: Model.ColumnType): Type<Input.Condition<T>> => {\n\tconst metadata = type ? resolveColumnMetadata(type) : { type: Typesafe.scalar }\n\treturn conditionSchemaInner(metadata)\n}\n\ninterface ResolvedColumnMetadata<T extends Json> {\n\ttype: Typesafe.Type<T>\n\tisJson?: boolean\n\tisString?: boolean\n}\n\nconst conditionSchemaInner = <T extends Json>(metadata: ResolvedColumnMetadata<T>): Type<Input.Condition<T>> => {\n\treturn (input: unknown, path: PropertyKey[] = []): Input.Condition<T> => {\n\t\tconst self = conditionSchemaInner(metadata)\n\t\tconst inner = metadata.type\n\t\tconst objectSchema = Typesafe.noExtraProps(Typesafe.partial({\n\t\t\tand: Typesafe.array(self),\n\t\t\tor: Typesafe.array(self),\n\t\t\tnot: self,\n\t\t\tnull: Typesafe.boolean,\n\t\t\tisNull: Typesafe.boolean,\n\t\t\tnever: Typesafe.true_,\n\t\t\talways: Typesafe.true_,\n\t\t\t...(metadata.isJson !== true ? {\n\t\t\t\teq: inner,\n\t\t\t\tnotEq: inner,\n\t\t\t\tin: Typesafe.array(inner),\n\t\t\t\tnotIn: Typesafe.array(inner),\n\t\t\t\tlt: inner,\n\t\t\t\tlte: inner,\n\t\t\t\tgt: inner,\n\t\t\t\tgte: inner,\n\t\t\t} : {}),\n\t\t\t...(metadata.isString !== false ? {\n\t\t\t\tcontains: Typesafe.string,\n\t\t\t\tstartsWith: Typesafe.string,\n\t\t\t\tendsWith: Typesafe.string,\n\t\t\t\tcontainsCI: Typesafe.string,\n\t\t\t\tstartsWithCI: Typesafe.string,\n\t\t\t\tendsWithCI: Typesafe.string,\n\t\t\t} : {}),\n\t\t}))\n\t\treturn objectSchema(input, path) as Input.Condition<T>\n\t}\n}\n\nconst resolveColumnMetadata = (type: Model.ColumnType): ResolvedColumnMetadata<any> => {\n\tconst resolvedType = Typesafe.nullable(resolveColumnTypeSchema(type))\n\treturn {\n\t\ttype: resolvedType,\n\t\tisJson: type === Model.ColumnType.Json,\n\t\tisString: type === Model.ColumnType.String,\n\n\t}\n}\n\n\nconst resolveColumnTypeSchema = (type: Model.ColumnType) => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn Typesafe.boolean\n\n\t\t// todo: validate format of string-like inputs uuid, date, enum\n\t\tcase Model.ColumnType.Date:\n\t\tcase Model.ColumnType.DateTime:\n\t\tcase Model.ColumnType.Time:\n\t\tcase Model.ColumnType.Uuid:\n\t\tcase Model.ColumnType.Enum:\n\t\tcase Model.ColumnType.String:\n\t\t\treturn Typesafe.string\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn Typesafe.number\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn Typesafe.integer\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn Typesafe.anyJson\n\t}\n}\n"],"names":["Typesafe","Model"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAIa,MAAA,kBAAkB,CAA6B,SAAsD;AAC3G,QAAA,WAAW,OAAO,sBAAsB,IAAI,IAAI,EAAE,MAAMA,oBAAS,OAAO;AAC9E,SAAO,qBAAqB,QAAQ;AACrC;AAQA,MAAM,uBAAuB,CAAiB,aAAkE;AAC/G,SAAO,CAAC,OAAgB,OAAsB,OAA2B;AAClE,UAAA,OAAO,qBAAqB,QAAQ;AAC1C,UAAM,QAAQ,SAAS;AACvB,UAAM,eAAeA,oBAAS,aAAaA,oBAAS,QAAQ;AAAA,MAC3D,KAAKA,oBAAS,MAAM,IAAI;AAAA,MACxB,IAAIA,oBAAS,MAAM,IAAI;AAAA,MACvB,KAAK;AAAA,MACL,MAAMA,oBAAS;AAAA,MACf,QAAQA,oBAAS;AAAA,MACjB,OAAOA,oBAAS;AAAA,MAChB,QAAQA,oBAAS;AAAA,MACjB,GAAI,SAAS,WAAW,OAAO;AAAA,QAC9B,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,IAAIA,oBAAS,MAAM,KAAK;AAAA,QACxB,OAAOA,oBAAS,MAAM,KAAK;AAAA,QAC3B,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,IAAI;AAAA,QACJ,KAAK;AAAA,MAAA,IACF,CAAC;AAAA,MACL,GAAI,SAAS,aAAa,QAAQ;AAAA,QACjC,UAAUA,oBAAS;AAAA,QACnB,YAAYA,oBAAS;AAAA,QACrB,UAAUA,oBAAS;AAAA,QACnB,YAAYA,oBAAS;AAAA,QACrB,cAAcA,oBAAS;AAAA,QACvB,YAAYA,oBAAS;AAAA,MAAA,IAClB,CAAA;AAAA,IAAC,CACL,CAAC;AACK,WAAA,aAAa,OAAO,IAAI;AAAA,EAChC;AACD;AAEA,MAAM,wBAAwB,CAAC,SAAwD;AACtF,QAAM,eAAeA,oBAAS,SAAS,wBAAwB,IAAI,CAAC;AAC7D,SAAA;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,SAASC,aAAM,WAAW;AAAA,IAClC,UAAU,SAASA,OAAA,MAAM,WAAW;AAAA,EAErC;AACD;AAGA,MAAM,0BAA0B,CAAC,SAA2B;AAC3D,UAAQ,MAAM;AAAA,IACb,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA;AAAA,IAGjB,KAAKC,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AAAA,IACtB,KAAKA,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,IACjB,KAAKC,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,IACjB,KAAKC,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,IACjB,KAAKC,OAAAA,MAAM,WAAW;AACrB,aAAOD,oBAAS;AAAA,EAAA;AAEnB;;"}
@@ -50,6 +50,7 @@ const resolveColumnTypeSchema = (type) => {
50
50
  switch (type) {
51
51
  case Model.ColumnType.Bool:
52
52
  return Typesafe.boolean;
53
+ // todo: validate format of string-like inputs uuid, date, enum
53
54
  case Model.ColumnType.Date:
54
55
  case Model.ColumnType.DateTime:
55
56
  case Model.ColumnType.Time:
@@ -1 +1 @@
1
- {"version":3,"file":"condition.js","sources":["../../../../../packages/schema-utils/src/type-schema/condition.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Json, Type } from '@contember/typesafe'\nimport { Input, Model, Value } from '@contember/schema'\n\nexport const conditionSchema = <T extends Value.FieldValue>(type?: Model.ColumnType): Type<Input.Condition<T>> => {\n\tconst metadata = type ? resolveColumnMetadata(type) : { type: Typesafe.scalar }\n\treturn conditionSchemaInner(metadata)\n}\n\ninterface ResolvedColumnMetadata<T extends Json> {\n\ttype: Typesafe.Type<T>\n\tisJson?: boolean\n\tisString?: boolean\n}\n\nconst conditionSchemaInner = <T extends Json>(metadata: ResolvedColumnMetadata<T>): Type<Input.Condition<T>> => {\n\treturn (input: unknown, path: PropertyKey[] = []): Input.Condition<T> => {\n\t\tconst self = conditionSchemaInner(metadata)\n\t\tconst inner = metadata.type\n\t\tconst objectSchema = Typesafe.noExtraProps(Typesafe.partial({\n\t\t\tand: Typesafe.array(self),\n\t\t\tor: Typesafe.array(self),\n\t\t\tnot: self,\n\t\t\tnull: Typesafe.boolean,\n\t\t\tisNull: Typesafe.boolean,\n\t\t\tnever: Typesafe.true_,\n\t\t\talways: Typesafe.true_,\n\t\t\t...(metadata.isJson !== true ? {\n\t\t\t\teq: inner,\n\t\t\t\tnotEq: inner,\n\t\t\t\tin: Typesafe.array(inner),\n\t\t\t\tnotIn: Typesafe.array(inner),\n\t\t\t\tlt: inner,\n\t\t\t\tlte: inner,\n\t\t\t\tgt: inner,\n\t\t\t\tgte: inner,\n\t\t\t} : {}),\n\t\t\t...(metadata.isString !== false ? {\n\t\t\t\tcontains: Typesafe.string,\n\t\t\t\tstartsWith: Typesafe.string,\n\t\t\t\tendsWith: Typesafe.string,\n\t\t\t\tcontainsCI: Typesafe.string,\n\t\t\t\tstartsWithCI: Typesafe.string,\n\t\t\t\tendsWithCI: Typesafe.string,\n\t\t\t} : {}),\n\t\t}))\n\t\treturn objectSchema(input, path) as Input.Condition<T>\n\t}\n}\n\nconst resolveColumnMetadata = (type: Model.ColumnType): ResolvedColumnMetadata<any> => {\n\tconst resolvedType = Typesafe.nullable(resolveColumnTypeSchema(type))\n\treturn {\n\t\ttype: resolvedType,\n\t\tisJson: type === Model.ColumnType.Json,\n\t\tisString: type === Model.ColumnType.String,\n\n\t}\n}\n\n\nconst resolveColumnTypeSchema = (type: Model.ColumnType) => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn Typesafe.boolean\n\n\t\t// todo: validate format of string-like inputs uuid, date, enum\n\t\tcase Model.ColumnType.Date:\n\t\tcase Model.ColumnType.DateTime:\n\t\tcase Model.ColumnType.Time:\n\t\tcase Model.ColumnType.Uuid:\n\t\tcase Model.ColumnType.Enum:\n\t\tcase Model.ColumnType.String:\n\t\t\treturn Typesafe.string\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn Typesafe.number\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn Typesafe.integer\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn Typesafe.anyJson\n\t}\n}\n"],"names":[],"mappings":";;AAIa,MAAA,kBAAkB,CAA6B,SAAsD;AAC3G,QAAA,WAAW,OAAO,sBAAsB,IAAI,IAAI,EAAE,MAAM,SAAS,OAAO;AAC9E,SAAO,qBAAqB,QAAQ;AACrC;AAQA,MAAM,uBAAuB,CAAiB,aAAkE;AAC/G,SAAO,CAAC,OAAgB,OAAsB,OAA2B;AAClE,UAAA,OAAO,qBAAqB,QAAQ;AAC1C,UAAM,QAAQ,SAAS;AACvB,UAAM,eAAe,SAAS,aAAa,SAAS,QAAQ;AAAA,MAC3D,KAAK,SAAS,MAAM,IAAI;AAAA,MACxB,IAAI,SAAS,MAAM,IAAI;AAAA,MACvB,KAAK;AAAA,MACL,MAAM,SAAS;AAAA,MACf,QAAQ,SAAS;AAAA,MACjB,OAAO,SAAS;AAAA,MAChB,QAAQ,SAAS;AAAA,MACjB,GAAI,SAAS,WAAW,OAAO;AAAA,QAC9B,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,IAAI,SAAS,MAAM,KAAK;AAAA,QACxB,OAAO,SAAS,MAAM,KAAK;AAAA,QAC3B,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,IAAI;AAAA,QACJ,KAAK;AAAA,MAAA,IACF,CAAC;AAAA,MACL,GAAI,SAAS,aAAa,QAAQ;AAAA,QACjC,UAAU,SAAS;AAAA,QACnB,YAAY,SAAS;AAAA,QACrB,UAAU,SAAS;AAAA,QACnB,YAAY,SAAS;AAAA,QACrB,cAAc,SAAS;AAAA,QACvB,YAAY,SAAS;AAAA,MAAA,IAClB,CAAA;AAAA,IAAC,CACL,CAAC;AACK,WAAA,aAAa,OAAO,IAAI;AAAA,EAChC;AACD;AAEA,MAAM,wBAAwB,CAAC,SAAwD;AACtF,QAAM,eAAe,SAAS,SAAS,wBAAwB,IAAI,CAAC;AAC7D,SAAA;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,SAAS,MAAM,WAAW;AAAA,IAClC,UAAU,SAAS,MAAM,WAAW;AAAA,EAErC;AACD;AAGA,MAAM,0BAA0B,CAAC,SAA2B;AAC3D,UAAQ,MAAM;AAAA,IACb,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,IAGjB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,IACjB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,IACjB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,IACjB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,EAAA;AAEnB;"}
1
+ {"version":3,"file":"condition.js","sources":["../../../../../packages/schema-utils/src/type-schema/condition.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Json, Type } from '@contember/typesafe'\nimport { Input, Model, Value } from '@contember/schema'\n\nexport const conditionSchema = <T extends Value.FieldValue>(type?: Model.ColumnType): Type<Input.Condition<T>> => {\n\tconst metadata = type ? resolveColumnMetadata(type) : { type: Typesafe.scalar }\n\treturn conditionSchemaInner(metadata)\n}\n\ninterface ResolvedColumnMetadata<T extends Json> {\n\ttype: Typesafe.Type<T>\n\tisJson?: boolean\n\tisString?: boolean\n}\n\nconst conditionSchemaInner = <T extends Json>(metadata: ResolvedColumnMetadata<T>): Type<Input.Condition<T>> => {\n\treturn (input: unknown, path: PropertyKey[] = []): Input.Condition<T> => {\n\t\tconst self = conditionSchemaInner(metadata)\n\t\tconst inner = metadata.type\n\t\tconst objectSchema = Typesafe.noExtraProps(Typesafe.partial({\n\t\t\tand: Typesafe.array(self),\n\t\t\tor: Typesafe.array(self),\n\t\t\tnot: self,\n\t\t\tnull: Typesafe.boolean,\n\t\t\tisNull: Typesafe.boolean,\n\t\t\tnever: Typesafe.true_,\n\t\t\talways: Typesafe.true_,\n\t\t\t...(metadata.isJson !== true ? {\n\t\t\t\teq: inner,\n\t\t\t\tnotEq: inner,\n\t\t\t\tin: Typesafe.array(inner),\n\t\t\t\tnotIn: Typesafe.array(inner),\n\t\t\t\tlt: inner,\n\t\t\t\tlte: inner,\n\t\t\t\tgt: inner,\n\t\t\t\tgte: inner,\n\t\t\t} : {}),\n\t\t\t...(metadata.isString !== false ? {\n\t\t\t\tcontains: Typesafe.string,\n\t\t\t\tstartsWith: Typesafe.string,\n\t\t\t\tendsWith: Typesafe.string,\n\t\t\t\tcontainsCI: Typesafe.string,\n\t\t\t\tstartsWithCI: Typesafe.string,\n\t\t\t\tendsWithCI: Typesafe.string,\n\t\t\t} : {}),\n\t\t}))\n\t\treturn objectSchema(input, path) as Input.Condition<T>\n\t}\n}\n\nconst resolveColumnMetadata = (type: Model.ColumnType): ResolvedColumnMetadata<any> => {\n\tconst resolvedType = Typesafe.nullable(resolveColumnTypeSchema(type))\n\treturn {\n\t\ttype: resolvedType,\n\t\tisJson: type === Model.ColumnType.Json,\n\t\tisString: type === Model.ColumnType.String,\n\n\t}\n}\n\n\nconst resolveColumnTypeSchema = (type: Model.ColumnType) => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn Typesafe.boolean\n\n\t\t// todo: validate format of string-like inputs uuid, date, enum\n\t\tcase Model.ColumnType.Date:\n\t\tcase Model.ColumnType.DateTime:\n\t\tcase Model.ColumnType.Time:\n\t\tcase Model.ColumnType.Uuid:\n\t\tcase Model.ColumnType.Enum:\n\t\tcase Model.ColumnType.String:\n\t\t\treturn Typesafe.string\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn Typesafe.number\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn Typesafe.integer\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn Typesafe.anyJson\n\t}\n}\n"],"names":[],"mappings":";;AAIa,MAAA,kBAAkB,CAA6B,SAAsD;AAC3G,QAAA,WAAW,OAAO,sBAAsB,IAAI,IAAI,EAAE,MAAM,SAAS,OAAO;AAC9E,SAAO,qBAAqB,QAAQ;AACrC;AAQA,MAAM,uBAAuB,CAAiB,aAAkE;AAC/G,SAAO,CAAC,OAAgB,OAAsB,OAA2B;AAClE,UAAA,OAAO,qBAAqB,QAAQ;AAC1C,UAAM,QAAQ,SAAS;AACvB,UAAM,eAAe,SAAS,aAAa,SAAS,QAAQ;AAAA,MAC3D,KAAK,SAAS,MAAM,IAAI;AAAA,MACxB,IAAI,SAAS,MAAM,IAAI;AAAA,MACvB,KAAK;AAAA,MACL,MAAM,SAAS;AAAA,MACf,QAAQ,SAAS;AAAA,MACjB,OAAO,SAAS;AAAA,MAChB,QAAQ,SAAS;AAAA,MACjB,GAAI,SAAS,WAAW,OAAO;AAAA,QAC9B,IAAI;AAAA,QACJ,OAAO;AAAA,QACP,IAAI,SAAS,MAAM,KAAK;AAAA,QACxB,OAAO,SAAS,MAAM,KAAK;AAAA,QAC3B,IAAI;AAAA,QACJ,KAAK;AAAA,QACL,IAAI;AAAA,QACJ,KAAK;AAAA,MAAA,IACF,CAAC;AAAA,MACL,GAAI,SAAS,aAAa,QAAQ;AAAA,QACjC,UAAU,SAAS;AAAA,QACnB,YAAY,SAAS;AAAA,QACrB,UAAU,SAAS;AAAA,QACnB,YAAY,SAAS;AAAA,QACrB,cAAc,SAAS;AAAA,QACvB,YAAY,SAAS;AAAA,MAAA,IAClB,CAAA;AAAA,IAAC,CACL,CAAC;AACK,WAAA,aAAa,OAAO,IAAI;AAAA,EAChC;AACD;AAEA,MAAM,wBAAwB,CAAC,SAAwD;AACtF,QAAM,eAAe,SAAS,SAAS,wBAAwB,IAAI,CAAC;AAC7D,SAAA;AAAA,IACN,MAAM;AAAA,IACN,QAAQ,SAAS,MAAM,WAAW;AAAA,IAClC,UAAU,SAAS,MAAM,WAAW;AAAA,EAErC;AACD;AAGA,MAAM,0BAA0B,CAAC,SAA2B;AAC3D,UAAQ,MAAM;AAAA,IACb,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA;AAAA,IAGjB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AAAA,IACtB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,IACjB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,IACjB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,IACjB,KAAK,MAAM,WAAW;AACrB,aAAO,SAAS;AAAA,EAAA;AAEnB;"}
@@ -131,7 +131,8 @@ const columnSchema = Typesafe__namespace.intersection(
131
131
  typeAlias: Typesafe__namespace.string,
132
132
  list: Typesafe__namespace.boolean,
133
133
  default: Typesafe__namespace.anyJson,
134
- sequence: intersectionSchema
134
+ sequence: intersectionSchema,
135
+ collation: Typesafe__namespace.string
135
136
  })
136
137
  );
137
138
  const fieldSchema = Typesafe__namespace.partiallyDiscriminatedUnion(
@@ -149,11 +150,13 @@ const viewSchemaInner = Typesafe__namespace.intersection(
149
150
  sql: Typesafe__namespace.string
150
151
  }),
151
152
  Typesafe__namespace.partial({
152
- dependencies: Typesafe__namespace.array(Typesafe__namespace.string)
153
+ dependencies: Typesafe__namespace.array(Typesafe__namespace.string),
154
+ idSource: Typesafe__namespace.array(Typesafe__namespace.string),
155
+ materialized: Typesafe__namespace.boolean
153
156
  })
154
157
  );
155
158
  const viewSchema = viewSchemaInner;
156
- const indexLike = Typesafe__namespace.intersection(
159
+ const indexSchemaBase = Typesafe__namespace.intersection(
157
160
  Typesafe__namespace.object({
158
161
  fields: Typesafe__namespace.array(Typesafe__namespace.string)
159
162
  }),
@@ -163,15 +166,28 @@ const indexLike = Typesafe__namespace.intersection(
163
166
  );
164
167
  const indexesSchema = Typesafe__namespace.coalesce(
165
168
  Typesafe__namespace.preprocess(
166
- Typesafe__namespace.array(indexLike),
169
+ Typesafe__namespace.array(indexSchemaBase),
167
170
  (it) => it?.constructor === Object ? Object.values(it) : it
168
171
  ),
169
172
  []
170
173
  );
171
174
  const uniqueConstraint = Typesafe__namespace.intersection(
172
- indexLike,
175
+ Typesafe__namespace.object({
176
+ fields: Typesafe__namespace.array(Typesafe__namespace.string)
177
+ }),
178
+ Typesafe__namespace.partial({
179
+ timing: Typesafe__namespace.enumeration("deferrable", "deferred"),
180
+ name: Typesafe__namespace.string,
181
+ index: Typesafe__namespace.literal(false)
182
+ })
183
+ );
184
+ const uniqueIndex = Typesafe__namespace.intersection(
185
+ Typesafe__namespace.object({
186
+ fields: Typesafe__namespace.array(Typesafe__namespace.string),
187
+ index: Typesafe__namespace.literal(true)
188
+ }),
173
189
  Typesafe__namespace.partial({
174
- timing: Typesafe__namespace.enumeration("deferrable", "deferred")
190
+ nulls: Typesafe__namespace.enumeration("distinct", "not distinct")
175
191
  })
176
192
  );
177
193
  const entitySchema = Typesafe__namespace.intersection(
@@ -182,7 +198,7 @@ const entitySchema = Typesafe__namespace.intersection(
182
198
  tableName: Typesafe__namespace.string,
183
199
  fields: Typesafe__namespace.record(Typesafe__namespace.string, fieldSchema),
184
200
  unique: Typesafe__namespace.preprocess(
185
- Typesafe__namespace.array(uniqueConstraint),
201
+ Typesafe__namespace.array(Typesafe__namespace.union(uniqueConstraint, uniqueIndex)),
186
202
  (it) => it?.constructor === Object ? Object.values(it) : it
187
203
  ),
188
204
  indexes: indexesSchema,
@@ -1 +1 @@
1
- {"version":3,"file":"model.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/model.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Model } from '@contember/schema'\nimport { ParseError } from '@contember/typesafe'\n\nconst orderBySchema = Typesafe.array(Typesafe.object({\n\tpath: Typesafe.array(Typesafe.string),\n\tdirection: Typesafe.enumeration<Model.OrderDirection>(\n\t\tModel.OrderDirection.asc,\n\t\tModel.OrderDirection.desc,\n\t\tModel.OrderDirection.ascNullsFirst,\n\t\tModel.OrderDirection.descNullsLast,\n\t),\n}))\nconst joiningColumnSchema = Typesafe.object({\n\tcolumnName: Typesafe.string,\n\tonDelete: Typesafe.enumeration<Model.OnDelete>(Model.OnDelete.cascade, Model.OnDelete.restrict, Model.OnDelete.setNull),\n})\nconst oneHasManyRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.OneHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\townedBy: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst oneHasManyRelationSchemaCheck: Typesafe.Equals<Model.OneHasManyRelation, ReturnType<typeof oneHasManyRelationSchema>> = true\n\nconst manyHasOneRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasOne),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningColumn: joiningColumnSchema,\n\t\tnullable: Typesafe.boolean,\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t}),\n)\n\nconst manyHasOneRelationSchemaCheck: Typesafe.Equals<Model.ManyHasOneRelation, ReturnType<typeof manyHasOneRelationSchema>> = true\n\nconst oneHasOneInverseRelationSchema = Typesafe.object({\n\ttype: Typesafe.literal(Model.RelationType.OneHasOne),\n\tname: Typesafe.string,\n\ttarget: Typesafe.string,\n\townedBy: Typesafe.string,\n\tnullable: Typesafe.boolean,\n})\nconst oneHasOneInverseRelationSchemaCheck: Typesafe.Equals<Model.OneHasOneInverseRelation, ReturnType<typeof oneHasOneInverseRelationSchema>> = true\n\n\nconst oneHasOneOwningRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.OneHasOne),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningColumn: joiningColumnSchema,\n\t\tnullable: Typesafe.boolean,\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t\torphanRemoval: Typesafe.literal(true),\n\t}),\n)\n\nconst oneHasOneOwningRelationSchemaCheck: Typesafe.Equals<Model.OneHasOneOwningRelation, ReturnType<typeof oneHasOneOwningRelationSchema>> = true\n\nconst eventLogSchema = Typesafe.coalesce(Typesafe.object({\n\tenabled: Typesafe.boolean,\n}), { enabled: true }) as Typesafe.Type<{ readonly enabled: boolean }>\n\nconst manyHasManyOwningRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningTable: Typesafe.object({\n\t\t\ttableName: Typesafe.string,\n\t\t\tjoiningColumn: joiningColumnSchema,\n\t\t\tinverseJoiningColumn: joiningColumnSchema,\n\t\t\teventLog: eventLogSchema,\n\t\t}),\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst manyHasManyOwningRelationSchemaCheck: Typesafe.Equals<Model.ManyHasManyOwningRelation, ReturnType<typeof manyHasManyOwningRelationSchema>> = true\n\nconst manyHasManyInverseRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\townedBy: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst manyHasManyInverseRelationSchemaCheck: Typesafe.Equals<Model.ManyHasManyInverseRelation, ReturnType<typeof manyHasManyInverseRelationSchema>> = true\n\nconst intersectionSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tprecedence: Typesafe.enumeration('ALWAYS', 'BY DEFAULT'),\n\t}),\n\tTypesafe.partial({\n\t\tstart: Typesafe.number,\n\t}),\n)\nconst intersectionSchemaCheck: Typesafe.Equals<Model.AnyColumn['sequence'], ReturnType<typeof intersectionSchema>> = true\n\nconst columnSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tname: Typesafe.string,\n\t\tcolumnName: Typesafe.string,\n\t\tcolumnType: Typesafe.transform(Typesafe.string, (it, raw, path) => {\n\t\t\tif (!it.replaceAll(/\\s+/g, '').match(/^[\\w_]+(?:\\(\\w+(?:,\\w+)*\\))?\\w*(?:\"[^\"]+\")?(\\[])*$/)) {\n\t\t\t\tthrow ParseError.format(it, path, 'valid column type')\n\t\t\t}\n\t\t\treturn it\n\t\t}),\n\t\tnullable: Typesafe.boolean,\n\t\ttype: Typesafe.enumeration<Model.ColumnType>(...Object.values(Model.ColumnType)),\n\t}),\n\tTypesafe.partial({\n\t\ttypeAlias: Typesafe.string,\n\t\tlist: Typesafe.boolean,\n\t\tdefault: Typesafe.anyJson,\n\t\tsequence: intersectionSchema as Typesafe.Type<Model.AnyColumn['sequence']>,\n\t}),\n)\nconst columnSchemaCheck: Typesafe.Equals<Model.AnyColumn, ReturnType<typeof columnSchema>> = true\n\nconst fieldSchema: Typesafe.Type<Model.AnyField> = Typesafe.partiallyDiscriminatedUnion(\n\t'type',\n\toneHasOneInverseRelationSchema,\n\toneHasOneOwningRelationSchema,\n\toneHasManyRelationSchema,\n\tmanyHasOneRelationSchema,\n\tmanyHasManyInverseRelationSchema,\n\tmanyHasManyOwningRelationSchema,\n\tcolumnSchema,\n)\n\nconst viewSchemaInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tsql: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tdependencies: Typesafe.array(Typesafe.string),\n\t}),\n)\nconst viewSchemaCheck: Typesafe.Equals<Model.View, ReturnType<typeof viewSchemaInner>> = true\nconst viewSchema: Typesafe.Type<Model.View> = viewSchemaInner\n\n\nconst indexLike: Typesafe.Type<{readonly fields: readonly string[]; readonly name?: string | undefined}> = Typesafe.intersection(\n\tTypesafe.object({\n\t\tfields: Typesafe.array(Typesafe.string),\n\t}),\n\tTypesafe.partial({\n\t\tname: Typesafe.string,\n\t}),\n)\n\nconst indexesSchema = Typesafe.coalesce<Model.Indexes, Model.Indexes>(\n\tTypesafe.preprocess(\n\t\tTypesafe.array(indexLike),\n\t\tit => it?.constructor === Object ? Object.values(it) : it,\n\t),\n\t[],\n)\n\nconst uniqueConstraint = Typesafe.intersection(\n\tindexLike,\n\tTypesafe.partial({\n\t\ttiming: Typesafe.enumeration('deferrable', 'deferred'),\n\t}),\n)\nconst uniqueConstraintCheck: Typesafe.Equals<Model.UniqueConstraint, ReturnType<typeof uniqueConstraint>> = true\n\nconst entitySchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tname: Typesafe.string,\n\t\tprimary: Typesafe.string,\n\t\tprimaryColumn: Typesafe.string,\n\t\ttableName: Typesafe.string,\n\t\tfields: Typesafe.record(Typesafe.string, fieldSchema),\n\t\tunique: Typesafe.preprocess<Model.UniqueConstraints>(\n\t\t\tTypesafe.array(uniqueConstraint),\n\t\t\tit => it?.constructor === Object ? Object.values(it) : it,\n\t\t),\n\t\tindexes: indexesSchema,\n\t\teventLog: eventLogSchema,\n\t}),\n\tTypesafe.partial({\n\t\tview: viewSchema,\n\t\torderBy: orderBySchema,\n\t}),\n)\n\nconst entitySchemaCheck: Typesafe.Equals<Model.Entity, ReturnType<typeof entitySchema>> = true\n\nexport const modelSchema = Typesafe.object({\n\tentities: Typesafe.record(Typesafe.string, entitySchema),\n\tenums: Typesafe.record(Typesafe.string, Typesafe.array(Typesafe.string)),\n})\n\n"],"names":["Typesafe","Model","ParseError"],"mappings":"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"}
1
+ {"version":3,"file":"model.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/model.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Model } from '@contember/schema'\nimport { ParseError } from '@contember/typesafe'\n\nconst orderBySchema = Typesafe.array(Typesafe.object({\n\tpath: Typesafe.array(Typesafe.string),\n\tdirection: Typesafe.enumeration<Model.OrderDirection>(\n\t\tModel.OrderDirection.asc,\n\t\tModel.OrderDirection.desc,\n\t\tModel.OrderDirection.ascNullsFirst,\n\t\tModel.OrderDirection.descNullsLast,\n\t),\n}))\nconst joiningColumnSchema = Typesafe.object({\n\tcolumnName: Typesafe.string,\n\tonDelete: Typesafe.enumeration<Model.OnDelete>(Model.OnDelete.cascade, Model.OnDelete.restrict, Model.OnDelete.setNull),\n})\nconst oneHasManyRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.OneHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\townedBy: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst oneHasManyRelationSchemaCheck: Typesafe.Equals<Model.OneHasManyRelation, ReturnType<typeof oneHasManyRelationSchema>> = true\n\nconst manyHasOneRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasOne),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningColumn: joiningColumnSchema,\n\t\tnullable: Typesafe.boolean,\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t}),\n)\n\nconst manyHasOneRelationSchemaCheck: Typesafe.Equals<Model.ManyHasOneRelation, ReturnType<typeof manyHasOneRelationSchema>> = true\n\nconst oneHasOneInverseRelationSchema = Typesafe.object({\n\ttype: Typesafe.literal(Model.RelationType.OneHasOne),\n\tname: Typesafe.string,\n\ttarget: Typesafe.string,\n\townedBy: Typesafe.string,\n\tnullable: Typesafe.boolean,\n})\nconst oneHasOneInverseRelationSchemaCheck: Typesafe.Equals<Model.OneHasOneInverseRelation, ReturnType<typeof oneHasOneInverseRelationSchema>> = true\n\n\nconst oneHasOneOwningRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.OneHasOne),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningColumn: joiningColumnSchema,\n\t\tnullable: Typesafe.boolean,\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t\torphanRemoval: Typesafe.literal(true),\n\t}),\n)\n\nconst oneHasOneOwningRelationSchemaCheck: Typesafe.Equals<Model.OneHasOneOwningRelation, ReturnType<typeof oneHasOneOwningRelationSchema>> = true\n\nconst eventLogSchema = Typesafe.coalesce(Typesafe.object({\n\tenabled: Typesafe.boolean,\n}), { enabled: true }) as Typesafe.Type<{ readonly enabled: boolean }>\n\nconst manyHasManyOwningRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\tjoiningTable: Typesafe.object({\n\t\t\ttableName: Typesafe.string,\n\t\t\tjoiningColumn: joiningColumnSchema,\n\t\t\tinverseJoiningColumn: joiningColumnSchema,\n\t\t\teventLog: eventLogSchema,\n\t\t}),\n\t}),\n\tTypesafe.partial({\n\t\tinversedBy: Typesafe.string,\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst manyHasManyOwningRelationSchemaCheck: Typesafe.Equals<Model.ManyHasManyOwningRelation, ReturnType<typeof manyHasManyOwningRelationSchema>> = true\n\nconst manyHasManyInverseRelationSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Model.RelationType.ManyHasMany),\n\t\tname: Typesafe.string,\n\t\ttarget: Typesafe.string,\n\t\townedBy: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\torderBy: orderBySchema,\n\t}),\n)\nconst manyHasManyInverseRelationSchemaCheck: Typesafe.Equals<Model.ManyHasManyInverseRelation, ReturnType<typeof manyHasManyInverseRelationSchema>> = true\n\nconst intersectionSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tprecedence: Typesafe.enumeration('ALWAYS', 'BY DEFAULT'),\n\t}),\n\tTypesafe.partial({\n\t\tstart: Typesafe.number,\n\t}),\n)\nconst intersectionSchemaCheck: Typesafe.Equals<Model.AnyColumn['sequence'], ReturnType<typeof intersectionSchema>> = true\n\nconst columnSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tname: Typesafe.string,\n\t\tcolumnName: Typesafe.string,\n\t\tcolumnType: Typesafe.transform(Typesafe.string, (it, raw, path) => {\n\t\t\tif (!it.replaceAll(/\\s+/g, '').match(/^[\\w_]+(?:\\(\\w+(?:,\\w+)*\\))?\\w*(?:\"[^\"]+\")?(\\[])*$/)) {\n\t\t\t\tthrow ParseError.format(it, path, 'valid column type')\n\t\t\t}\n\t\t\treturn it\n\t\t}),\n\t\tnullable: Typesafe.boolean,\n\t\ttype: Typesafe.enumeration<Model.ColumnType>(...Object.values(Model.ColumnType)),\n\t}),\n\tTypesafe.partial({\n\t\ttypeAlias: Typesafe.string,\n\t\tlist: Typesafe.boolean,\n\t\tdefault: Typesafe.anyJson,\n\t\tsequence: intersectionSchema as Typesafe.Type<Model.AnyColumn['sequence']>,\n\t\tcollation: Typesafe.string as Typesafe.Type<Model.AnyColumn['collation']>,\n\t}),\n)\nconst columnSchemaCheck: Typesafe.Equals<Model.AnyColumn, ReturnType<typeof columnSchema>> = true\n\nconst fieldSchema: Typesafe.Type<Model.AnyField> = Typesafe.partiallyDiscriminatedUnion(\n\t'type',\n\toneHasOneInverseRelationSchema,\n\toneHasOneOwningRelationSchema,\n\toneHasManyRelationSchema,\n\tmanyHasOneRelationSchema,\n\tmanyHasManyInverseRelationSchema,\n\tmanyHasManyOwningRelationSchema,\n\tcolumnSchema,\n)\n\nconst viewSchemaInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tsql: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tdependencies: Typesafe.array(Typesafe.string),\n\t\tidSource: Typesafe.array(Typesafe.string),\n\t\tmaterialized: Typesafe.boolean,\n\t}),\n)\nconst viewSchemaCheck: Typesafe.Equals<Model.View, ReturnType<typeof viewSchemaInner>> = true\nconst viewSchema: Typesafe.Type<Model.View> = viewSchemaInner\n\n\nconst indexSchemaBase = Typesafe.intersection(\n\tTypesafe.object({\n\t\tfields: Typesafe.array(Typesafe.string),\n\t}),\n\tTypesafe.partial({\n\t\tname: Typesafe.string,\n\t}),\n)\nconst indexCheck: Typesafe.Equals<Model.Index, ReturnType<typeof indexSchemaBase>> = true\n\nconst indexesSchema = Typesafe.coalesce<Model.Indexes, Model.Indexes>(\n\tTypesafe.preprocess(\n\t\tTypesafe.array(indexSchemaBase),\n\t\tit => it?.constructor === Object ? Object.values(it) : it,\n\t),\n\t[],\n)\n\nconst uniqueConstraint = Typesafe.intersection(\n\tTypesafe.object({\n\t\tfields: Typesafe.array(Typesafe.string),\n\t}),\n\tTypesafe.partial({\n\t\ttiming: Typesafe.enumeration('deferrable', 'deferred'),\n\t\tname: Typesafe.string,\n\t\tindex: Typesafe.literal(false),\n\t}),\n)\nconst uniqueIndex = Typesafe.intersection(\n\tTypesafe.object({\n\t\tfields: Typesafe.array(Typesafe.string),\n\t\tindex: Typesafe.literal(true),\n\t}),\n\tTypesafe.partial({\n\t\tnulls: Typesafe.enumeration('distinct', 'not distinct'),\n\t}),\n)\nconst uniqueConstraintCheck: Typesafe.Equals<Model.UniqueConstraint, ReturnType<typeof uniqueConstraint>> = true\nconst uniqueIndexCheck: Typesafe.Equals<Model.UniqueIndex, ReturnType<typeof uniqueIndex>> = true\n\nconst entitySchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tname: Typesafe.string,\n\t\tprimary: Typesafe.string,\n\t\tprimaryColumn: Typesafe.string,\n\t\ttableName: Typesafe.string,\n\t\tfields: Typesafe.record(Typesafe.string, fieldSchema),\n\t\tunique: Typesafe.preprocess<Model.Uniques>(\n\t\t\tTypesafe.array(Typesafe.union(uniqueConstraint, uniqueIndex)),\n\t\t\tit => it?.constructor === Object ? Object.values(it) : it,\n\t\t),\n\t\tindexes: indexesSchema,\n\t\teventLog: eventLogSchema,\n\t}),\n\tTypesafe.partial({\n\t\tview: viewSchema,\n\t\torderBy: orderBySchema,\n\t}),\n)\n\nconst entitySchemaCheck: Typesafe.Equals<Model.Entity, ReturnType<typeof entitySchema>> = true\n\nexport const modelSchema = Typesafe.object({\n\tentities: Typesafe.record(Typesafe.string, entitySchema),\n\tenums: Typesafe.record(Typesafe.string, Typesafe.array(Typesafe.string)),\n})\n\n"],"names":["Typesafe","Model","ParseError"],"mappings":"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"}