@contember/schema-definition 2.0.2 → 2.1.0-alpha.10

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 (160) hide show
  1. package/dist/development/index.cjs +1 -0
  2. package/dist/development/index.cjs.map +1 -1
  3. package/dist/development/index.js +2 -1
  4. package/dist/development/index.js.map +1 -1
  5. package/dist/development/src/acl/definition/aclExtensions.cjs +16 -0
  6. package/dist/development/src/acl/definition/aclExtensions.cjs.map +1 -0
  7. package/dist/development/src/acl/definition/aclExtensions.js +16 -0
  8. package/dist/development/src/acl/definition/aclExtensions.js.map +1 -0
  9. package/dist/development/src/acl/definition/customPrimary.cjs +6 -7
  10. package/dist/development/src/acl/definition/customPrimary.cjs.map +1 -1
  11. package/dist/development/src/acl/definition/customPrimary.js +6 -7
  12. package/dist/development/src/acl/definition/customPrimary.js.map +1 -1
  13. package/dist/development/src/acl/definition/internal/AclFactory.cjs +39 -39
  14. package/dist/development/src/acl/definition/internal/AclFactory.cjs.map +1 -1
  15. package/dist/development/src/acl/definition/internal/AclFactory.js +40 -40
  16. package/dist/development/src/acl/definition/internal/AclFactory.js.map +1 -1
  17. package/dist/development/src/acl/definition/internal/stores.cjs +0 -4
  18. package/dist/development/src/acl/definition/internal/stores.cjs.map +1 -1
  19. package/dist/development/src/acl/definition/internal/stores.js +0 -4
  20. package/dist/development/src/acl/definition/internal/stores.js.map +1 -1
  21. package/dist/development/src/createSchema.cjs +4 -1
  22. package/dist/development/src/createSchema.cjs.map +1 -1
  23. package/dist/development/src/createSchema.js +4 -1
  24. package/dist/development/src/createSchema.js.map +1 -1
  25. package/dist/development/src/model/builder/SchemaBuilderInternal.cjs.map +1 -1
  26. package/dist/development/src/model/builder/SchemaBuilderInternal.js.map +1 -1
  27. package/dist/development/src/model/definition/UniqueDefinition.cjs.map +1 -1
  28. package/dist/development/src/model/definition/UniqueDefinition.js.map +1 -1
  29. package/dist/development/src/model/definition/ViewDefinition.cjs +4 -2
  30. package/dist/development/src/model/definition/ViewDefinition.cjs.map +1 -1
  31. package/dist/development/src/model/definition/ViewDefinition.js +4 -2
  32. package/dist/development/src/model/definition/ViewDefinition.js.map +1 -1
  33. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.cjs +18 -3
  34. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.cjs.map +1 -1
  35. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.js +18 -3
  36. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.js.map +1 -1
  37. package/dist/development/src/model/definition/index.cjs +3 -1
  38. package/dist/development/src/model/definition/index.cjs.map +1 -1
  39. package/dist/development/src/model/definition/index.js +4 -2
  40. package/dist/development/src/model/definition/index.js.map +1 -1
  41. package/dist/development/src/model/definition/internal/SchemaBuilder.cjs +6 -3
  42. package/dist/development/src/model/definition/internal/SchemaBuilder.cjs.map +1 -1
  43. package/dist/development/src/model/definition/internal/SchemaBuilder.js +6 -3
  44. package/dist/development/src/model/definition/internal/SchemaBuilder.js.map +1 -1
  45. package/dist/development/src/presets.cjs +10 -1
  46. package/dist/development/src/presets.cjs.map +1 -1
  47. package/dist/development/src/presets.js +10 -1
  48. package/dist/development/src/presets.js.map +1 -1
  49. package/dist/production/index.cjs +1 -0
  50. package/dist/production/index.cjs.map +1 -1
  51. package/dist/production/index.js +2 -1
  52. package/dist/production/index.js.map +1 -1
  53. package/dist/production/src/acl/definition/aclExtensions.cjs +16 -0
  54. package/dist/production/src/acl/definition/aclExtensions.cjs.map +1 -0
  55. package/dist/production/src/acl/definition/aclExtensions.js +16 -0
  56. package/dist/production/src/acl/definition/aclExtensions.js.map +1 -0
  57. package/dist/production/src/acl/definition/customPrimary.cjs +6 -7
  58. package/dist/production/src/acl/definition/customPrimary.cjs.map +1 -1
  59. package/dist/production/src/acl/definition/customPrimary.js +6 -7
  60. package/dist/production/src/acl/definition/customPrimary.js.map +1 -1
  61. package/dist/production/src/acl/definition/internal/AclFactory.cjs +39 -39
  62. package/dist/production/src/acl/definition/internal/AclFactory.cjs.map +1 -1
  63. package/dist/production/src/acl/definition/internal/AclFactory.js +40 -40
  64. package/dist/production/src/acl/definition/internal/AclFactory.js.map +1 -1
  65. package/dist/production/src/acl/definition/internal/stores.cjs +0 -4
  66. package/dist/production/src/acl/definition/internal/stores.cjs.map +1 -1
  67. package/dist/production/src/acl/definition/internal/stores.js +0 -4
  68. package/dist/production/src/acl/definition/internal/stores.js.map +1 -1
  69. package/dist/production/src/createSchema.cjs +4 -1
  70. package/dist/production/src/createSchema.cjs.map +1 -1
  71. package/dist/production/src/createSchema.js +4 -1
  72. package/dist/production/src/createSchema.js.map +1 -1
  73. package/dist/production/src/model/builder/SchemaBuilderInternal.cjs.map +1 -1
  74. package/dist/production/src/model/builder/SchemaBuilderInternal.js.map +1 -1
  75. package/dist/production/src/model/definition/UniqueDefinition.cjs.map +1 -1
  76. package/dist/production/src/model/definition/UniqueDefinition.js.map +1 -1
  77. package/dist/production/src/model/definition/ViewDefinition.cjs +4 -2
  78. package/dist/production/src/model/definition/ViewDefinition.cjs.map +1 -1
  79. package/dist/production/src/model/definition/ViewDefinition.js +4 -2
  80. package/dist/production/src/model/definition/ViewDefinition.js.map +1 -1
  81. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.cjs +18 -3
  82. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.cjs.map +1 -1
  83. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.js +18 -3
  84. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.js.map +1 -1
  85. package/dist/production/src/model/definition/index.cjs +3 -1
  86. package/dist/production/src/model/definition/index.cjs.map +1 -1
  87. package/dist/production/src/model/definition/index.js +4 -2
  88. package/dist/production/src/model/definition/index.js.map +1 -1
  89. package/dist/production/src/model/definition/internal/SchemaBuilder.cjs +6 -3
  90. package/dist/production/src/model/definition/internal/SchemaBuilder.cjs.map +1 -1
  91. package/dist/production/src/model/definition/internal/SchemaBuilder.js +6 -3
  92. package/dist/production/src/model/definition/internal/SchemaBuilder.js.map +1 -1
  93. package/dist/production/src/presets.cjs +10 -1
  94. package/dist/production/src/presets.cjs.map +1 -1
  95. package/dist/production/src/presets.js +10 -1
  96. package/dist/production/src/presets.js.map +1 -1
  97. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  98. package/dist/types/acl/builder/PermissionsBuilder.d.ts.map +1 -1
  99. package/dist/types/acl/builder/PredicateReference.d.ts.map +1 -1
  100. package/dist/types/acl/definition/aclExtensions.d.ts +12 -0
  101. package/dist/types/acl/definition/aclExtensions.d.ts.map +1 -0
  102. package/dist/types/acl/definition/customPrimary.d.ts.map +1 -1
  103. package/dist/types/acl/definition/index.d.ts.map +1 -1
  104. package/dist/types/acl/definition/internal/AclFactory.d.ts +1 -1
  105. package/dist/types/acl/definition/internal/AclFactory.d.ts.map +1 -1
  106. package/dist/types/acl/definition/internal/createPredicateName.d.ts.map +1 -1
  107. package/dist/types/acl/definition/internal/stores.d.ts +0 -2
  108. package/dist/types/acl/definition/internal/stores.d.ts.map +1 -1
  109. package/dist/types/acl/definition/permissions.d.ts.map +1 -1
  110. package/dist/types/acl/definition/references.d.ts.map +1 -1
  111. package/dist/types/acl/definition/roles.d.ts.map +1 -1
  112. package/dist/types/acl/definition/variables.d.ts.map +1 -1
  113. package/dist/types/actions/definition/index.d.ts.map +1 -1
  114. package/dist/types/actions/definition/targets.d.ts.map +1 -1
  115. package/dist/types/actions/definition/triggers.d.ts.map +1 -1
  116. package/dist/types/createSchema.d.ts +2 -1
  117. package/dist/types/createSchema.d.ts.map +1 -1
  118. package/dist/types/index.d.ts +2 -3
  119. package/dist/types/index.d.ts.map +1 -1
  120. package/dist/types/model/definition/UniqueDefinition.d.ts +6 -1
  121. package/dist/types/model/definition/UniqueDefinition.d.ts.map +1 -1
  122. package/dist/types/model/definition/ViewDefinition.d.ts +6 -2
  123. package/dist/types/model/definition/ViewDefinition.d.ts.map +1 -1
  124. package/dist/types/model/definition/context.d.ts +3 -0
  125. package/dist/types/model/definition/context.d.ts.map +1 -1
  126. package/dist/types/model/definition/extensions.d.ts.map +1 -1
  127. package/dist/types/model/definition/fieldDefinitions/ColumnDefinition.d.ts +9 -1
  128. package/dist/types/model/definition/fieldDefinitions/ColumnDefinition.d.ts.map +1 -1
  129. package/dist/types/model/definition/fieldDefinitions/ManyHasManyDefinition.d.ts.map +1 -1
  130. package/dist/types/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.d.ts.map +1 -1
  131. package/dist/types/model/definition/fieldDefinitions/ManyHasOneDefinition.d.ts.map +1 -1
  132. package/dist/types/model/definition/fieldDefinitions/OneHasManyDefinition.d.ts.map +1 -1
  133. package/dist/types/model/definition/fieldDefinitions/OneHasOneDefinition.d.ts.map +1 -1
  134. package/dist/types/model/definition/fieldDefinitions/OneHasOneInverseDefinition.d.ts.map +1 -1
  135. package/dist/types/model/definition/index.d.ts +1 -0
  136. package/dist/types/model/definition/index.d.ts.map +1 -1
  137. package/dist/types/model/definition/internal/SchemaBuilder.d.ts +4 -1
  138. package/dist/types/model/definition/internal/SchemaBuilder.d.ts.map +1 -1
  139. package/dist/types/presets.d.ts +2 -0
  140. package/dist/types/presets.d.ts.map +1 -1
  141. package/dist/types/tsconfig.tsbuildinfo +1 -1
  142. package/dist/types/utils/MetadataStore.d.ts.map +1 -1
  143. package/dist/types/utils/filterEntityDefinition.d.ts.map +1 -1
  144. package/dist/types/utils/tuple.d.ts.map +1 -1
  145. package/dist/types/validation/index.d.ts.map +1 -1
  146. package/package.json +3 -3
  147. package/src/acl/definition/aclExtensions.ts +28 -0
  148. package/src/acl/definition/customPrimary.ts +7 -8
  149. package/src/acl/definition/internal/AclFactory.ts +41 -45
  150. package/src/acl/definition/internal/stores.ts +0 -3
  151. package/src/createSchema.ts +6 -2
  152. package/src/index.ts +1 -0
  153. package/src/model/builder/SchemaBuilderInternal.ts +1 -1
  154. package/src/model/definition/UniqueDefinition.ts +11 -2
  155. package/src/model/definition/ViewDefinition.ts +10 -1
  156. package/src/model/definition/context.ts +3 -0
  157. package/src/model/definition/fieldDefinitions/ColumnDefinition.ts +22 -2
  158. package/src/model/definition/index.ts +2 -0
  159. package/src/model/definition/internal/SchemaBuilder.ts +6 -1
  160. package/src/presets.ts +12 -0
@@ -1 +1 @@
1
- {"version":3,"file":"AclFactory.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/AclFactory.ts"],"sourcesContent":["import { Acl, Model, Writable } from '@contember/schema'\nimport { getEntity } from '@contember/schema-utils'\n\nimport { EntityPredicatesResolver } from './EntityPredicateResolver'\nimport { AllowDefinition } from '../permissions'\nimport {\n\tallowCustomPrimaryAllRolesStore,\n\tallowCustomPrimaryStore,\n\tallowDefinitionsStore,\n\tEntityPermissionsDefinition,\n} from './stores'\nimport { Role } from '../roles'\nimport { VariableDefinition } from '../variables'\nimport { filterEntityDefinition } from '../../../utils'\n\nexport class AclFactory {\n\tconstructor(\n\t\tprivate model: Model.Schema,\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Acl.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\t\tconst roles: Role[] = Object.values(exportedDefinitions).filter(it => it instanceof Role)\n\t\tconst variables: VariableDefinition[] = Object.values(exportedDefinitions).filter(it => it instanceof VariableDefinition)\n\n\t\tconst groupedPermissions = AclFactory.groupPermissions(entityLikeDefinition, roles)\n\n\t\treturn {\n\t\t\troles: Object.fromEntries(roles.map((role): [string, Acl.RolePermissions] => {\n\t\t\t\tconst rolePermissions = groupedPermissions.get(role)\n\t\t\t\treturn [\n\t\t\t\t\trole.name,\n\t\t\t\t\t{\n\t\t\t\t\t\t...role.options,\n\t\t\t\t\t\tstages: role.options.stages ?? '*',\n\t\t\t\t\t\tentities: this.createPermissions(rolePermissions),\n\t\t\t\t\t\tvariables: this.createVariables(role, variables),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t})),\n\t\t}\n\t}\n\n\tprivate createPermissions(rolePermissions: PermissionsByEntity | undefined): Acl.Permissions {\n\t\tif (!rolePermissions) {\n\t\t\treturn {}\n\t\t}\n\t\treturn Object.fromEntries(Array.from(rolePermissions.keys()).map((entityName): [string, Acl.EntityPermissions] => {\n\t\t\tconst entity = getEntity(this.model, entityName)\n\n\t\t\tconst predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity)\n\n\t\t\tconst entityOperations: Writable<Acl.EntityOperations> = {\n\t\t\t}\n\t\t\tconst noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entityName))\n\t\t\tif (noRootOptions?.length) {\n\t\t\t\tentityOperations.noRoot = noRootOptions\n\t\t\t}\n\t\t\tfor (const op of ['create', 'update', 'read'] as const) {\n\t\t\t\tconst fieldPermissions: Writable<Acl.FieldPermissions> = {}\n\t\t\t\tfor (const field of Object.keys(entity.fields)) {\n\t\t\t\t\tconst predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary)\n\t\t\t\t\tif (predicate !== undefined) {\n\t\t\t\t\t\tfieldPermissions[field] = predicate\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (Object.keys(fieldPermissions).length > 0) {\n\t\t\t\t\tentityOperations[op] = fieldPermissions\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst delPredicate = predicatesResolver.createFieldPredicate('delete', '', false)\n\t\t\tif (delPredicate !== undefined) {\n\t\t\t\tentityOperations.delete = delPredicate\n\t\t\t}\n\t\t\tif (rolePermissions.get(entityName)?.allowCustomPrimary) {\n\t\t\t\tentityOperations.customPrimary = true\n\t\t\t}\n\t\t\treturn [entityName, {\n\t\t\t\tpredicates: predicatesResolver.getUsedPredicates(),\n\t\t\t\toperations: entityOperations,\n\n\t\t\t}]\n\t\t}))\n\t}\n\n\n\tgetNoRootOptions(entity: Model.Entity, permissions?: EntityPermissions): Acl.EntityOperations['noRoot'] {\n\t\tconst allowedRoot = new Set<Acl.Operation>()\n\t\tconst disallowedRoot = new Set<Acl.Operation>()\n\t\tfor (const def of permissions?.definitions ?? []) {\n\t\t\tconst noRoot = def.through === true\n\t\t\tfor (const op of ['create', 'read', 'update', 'delete'] as const) {\n\t\t\t\tif (def[op]) {\n\t\t\t\t\tconst currentSet = noRoot ? disallowedRoot : allowedRoot\n\t\t\t\t\tcurrentSet.add(op as Acl.Operation)\n\n\t\t\t\t\tconst otherSet = noRoot ? allowedRoot : disallowedRoot\n\n\t\t\t\t\tif (otherSet.has(op as Acl.Operation)) {\n\t\t\t\t\t\tthrow new Error(`Operation ${op} cannot be both allowed and disallowed on root on entity ${entity.name}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn [...disallowedRoot.values()]\n\t}\n\n\tprivate createVariables(role: Role, variables: VariableDefinition[]): Acl.Variables {\n\t\tconst roleVariables = variables.filter(it => it.roles.includes(role))\n\t\treturn Object.fromEntries(roleVariables.map((variable): [string, Acl.Variable] => {\n\t\t\treturn [variable.name, variable.variable]\n\t\t}))\n\t}\n\n\tprivate static groupPermissions(entityLikeDefinition: [string, { new(): any }][], roles: Role[]): PermissionsByRoleAndEntity {\n\t\tconst groupedPermissions: PermissionsByRoleAndEntity = new Map()\n\t\tfor (const [name, entity] of entityLikeDefinition) {\n\t\t\tconst initEntityPermissions = (role: Role): EntityPermissions => {\n\t\t\t\tconst rolePermissions: PermissionsByEntity = groupedPermissions.get(role) ?? new Map()\n\t\t\t\tgroupedPermissions.set(role, rolePermissions)\n\t\t\t\tconst entityPermissions = rolePermissions.get(name) ?? {\n\t\t\t\t\tallowCustomPrimary: false,\n\t\t\t\t\tdefinitions: [],\n\t\t\t\t}\n\t\t\t\trolePermissions.set(name, entityPermissions)\n\t\t\t\treturn entityPermissions\n\t\t\t}\n\t\t\tconst metadata: EntityPermissionsDefinition[] = allowDefinitionsStore.get(entity)\n\t\t\tfor (const { role, ...definition } of metadata) {\n\t\t\t\tif (!roles.includes(role)) {\n\t\t\t\t\tthrow `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\tconst entityPermissions = initEntityPermissions(role)\n\t\t\t\tentityPermissions.definitions.push(definition)\n\t\t\t}\n\n\t\t\tconst rolesWithCustomPrimary = allowCustomPrimaryAllRolesStore.get(entity) ? roles : allowCustomPrimaryStore.get(entity)\n\t\t\tfor (const role of rolesWithCustomPrimary) {\n\t\t\t\tinitEntityPermissions(role).allowCustomPrimary = true\n\t\t\t}\n\t\t}\n\n\t\treturn groupedPermissions\n\t}\n}\n\n\nexport type EntityPermissions = { definitions: AllowDefinition<any>[]; allowCustomPrimary: boolean }\nexport type PermissionsByEntity = Map<string, EntityPermissions>\nexport type PermissionsByRoleAndEntity = Map<Role, PermissionsByEntity>\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AclFactory.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/AclFactory.ts"],"sourcesContent":["import { Acl, Model, Writable } from '@contember/schema'\nimport { getEntity } from '@contember/schema-utils'\n\nimport { EntityPredicatesResolver } from './EntityPredicateResolver'\nimport { AllowDefinition } from '../permissions'\nimport {\n\tallowDefinitionsStore,\n\tEntityPermissionsDefinition,\n} from './stores'\nimport { Role } from '../roles'\nimport { VariableDefinition } from '../variables'\nimport { filterEntityDefinition } from '../../../utils'\nimport { applyEntityAclExtensions } from '../aclExtensions'\n\nexport class AclFactory {\n\tconstructor(\n\t\tprivate model: Model.Schema,\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Acl.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\t\tconst roles: Role[] = Object.values(exportedDefinitions).filter(it => it instanceof Role)\n\t\tconst variables: VariableDefinition[] = Object.values(exportedDefinitions).filter(it => it instanceof VariableDefinition)\n\n\t\tconst groupedPermissions = AclFactory.groupPermissions(entityLikeDefinition, roles)\n\n\t\treturn {\n\t\t\troles: Object.fromEntries(roles.map((role): [string, Acl.RolePermissions] => {\n\t\t\t\tconst rolePermissions = groupedPermissions.get(role)\n\t\t\t\treturn [\n\t\t\t\t\trole.name,\n\t\t\t\t\t{\n\t\t\t\t\t\t...role.options,\n\t\t\t\t\t\tstages: role.options.stages ?? '*',\n\t\t\t\t\t\tentities: this.createPermissions(rolePermissions, Object.fromEntries(entityLikeDefinition), role),\n\t\t\t\t\t\tvariables: this.createVariables(role, variables),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t})),\n\t\t}\n\t}\n\n\tprivate createPermissions(rolePermissions: PermissionsByEntity | undefined, entityLikeDefinition: Record<string, { new(): any }>, role: Role): Acl.Permissions {\n\t\treturn Object.fromEntries(Object.values(this.model.entities).map((entity): [string, Acl.EntityPermissions] | undefined => {\n\t\t\tconst permissions = rolePermissions ? this.createPermissionsFromAllow(rolePermissions, entity) : { predicates: {}, operations: {} }\n\t\t\tconst isEmpty = !rolePermissions?.has(entity.name)\n\t\t\tconst withExtensions = applyEntityAclExtensions(entityLikeDefinition[entity.name], { entity, permissions, role })\n\t\t\tif (isEmpty && withExtensions === permissions) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn [\n\t\t\t\tentity.name,\n\t\t\t\twithExtensions,\n\t\t\t]\n\t\t}).filter(<T>(it: T | undefined): it is T => it !== undefined))\n\t}\n\n\tprivate createPermissionsFromAllow(rolePermissions: PermissionsByEntity, entity: Model.Entity): Acl.EntityPermissions {\n\t\tconst predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity)\n\n\t\tconst entityOperations: Writable<Acl.EntityOperations> = {}\n\t\tconst noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entity.name))\n\t\tif (noRootOptions?.length) {\n\t\t\tentityOperations.noRoot = noRootOptions\n\t\t}\n\t\tfor (const op of ['create', 'update', 'read'] as const) {\n\t\t\tconst fieldPermissions: Writable<Acl.FieldPermissions> = {}\n\t\t\tfor (const field of Object.keys(entity.fields)) {\n\t\t\t\tconst predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary)\n\t\t\t\tif (predicate !== undefined) {\n\t\t\t\t\tfieldPermissions[field] = predicate\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Object.keys(fieldPermissions).length > 0) {\n\t\t\t\tentityOperations[op] = fieldPermissions\n\t\t\t}\n\t\t}\n\t\tconst delPredicate = predicatesResolver.createFieldPredicate('delete', '', false)\n\t\tif (delPredicate !== undefined) {\n\t\t\tentityOperations.delete = delPredicate\n\t\t}\n\t\treturn {\n\t\t\tpredicates: predicatesResolver.getUsedPredicates(),\n\t\t\toperations: entityOperations,\n\t\t}\n\t}\n\n\n\tgetNoRootOptions(entity: Model.Entity, permissions?: EntityPermissions): Acl.EntityOperations['noRoot'] {\n\t\tconst allowedRoot = new Set<Acl.Operation>()\n\t\tconst disallowedRoot = new Set<Acl.Operation>()\n\t\tfor (const def of permissions?.definitions ?? []) {\n\t\t\tconst noRoot = def.through === true\n\t\t\tfor (const op of ['create', 'read', 'update', 'delete'] as const) {\n\t\t\t\tif (def[op]) {\n\t\t\t\t\tconst currentSet = noRoot ? disallowedRoot : allowedRoot\n\t\t\t\t\tcurrentSet.add(op as Acl.Operation)\n\n\t\t\t\t\tconst otherSet = noRoot ? allowedRoot : disallowedRoot\n\n\t\t\t\t\tif (otherSet.has(op as Acl.Operation)) {\n\t\t\t\t\t\tthrow new Error(`Operation ${op} cannot be both allowed and disallowed on root on entity ${entity.name}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn [...disallowedRoot.values()]\n\t}\n\n\tprivate createVariables(role: Role, variables: VariableDefinition[]): Acl.Variables {\n\t\tconst roleVariables = variables.filter(it => it.roles.includes(role))\n\t\treturn Object.fromEntries(roleVariables.map((variable): [string, Acl.Variable] => {\n\t\t\treturn [variable.name, variable.variable]\n\t\t}))\n\t}\n\n\tprivate static groupPermissions(entityLikeDefinition: [string, { new(): any }][], roles: Role[]): PermissionsByRoleAndEntity {\n\t\tconst groupedPermissions: PermissionsByRoleAndEntity = new Map()\n\t\tfor (const [name, entity] of entityLikeDefinition) {\n\t\t\tconst initEntityPermissions = (role: Role): EntityPermissions => {\n\t\t\t\tconst rolePermissions: PermissionsByEntity = groupedPermissions.get(role) ?? new Map()\n\t\t\t\tgroupedPermissions.set(role, rolePermissions)\n\t\t\t\tconst entityPermissions = rolePermissions.get(name) ?? {\n\t\t\t\t\tdefinitions: [],\n\t\t\t\t}\n\t\t\t\trolePermissions.set(name, entityPermissions)\n\t\t\t\treturn entityPermissions\n\t\t\t}\n\t\t\tconst metadata: EntityPermissionsDefinition[] = allowDefinitionsStore.get(entity)\n\t\t\tfor (const { role, ...definition } of metadata) {\n\t\t\t\tif (!roles.includes(role)) {\n\t\t\t\t\tthrow `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\tconst entityPermissions = initEntityPermissions(role)\n\t\t\t\tentityPermissions.definitions.push(definition)\n\t\t\t}\n\t\t}\n\n\t\treturn groupedPermissions\n\t}\n}\n\n\nexport type EntityPermissions = { definitions: AllowDefinition<any>[] }\nexport type PermissionsByEntity = Map<string, EntityPermissions>\nexport type PermissionsByRoleAndEntity = Map<Role, PermissionsByEntity>\n"],"names":[],"mappings":"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"}
@@ -1,10 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const MetadataStore = require("../../../utils/MetadataStore.cjs");
4
- const allowCustomPrimaryStore = MetadataStore.createMetadataStore([]);
5
- const allowCustomPrimaryAllRolesStore = MetadataStore.createMetadataStore(false);
6
4
  const allowDefinitionsStore = MetadataStore.createMetadataStore([]);
7
- exports.allowCustomPrimaryAllRolesStore = allowCustomPrimaryAllRolesStore;
8
- exports.allowCustomPrimaryStore = allowCustomPrimaryStore;
9
5
  exports.allowDefinitionsStore = allowDefinitionsStore;
10
6
  //# sourceMappingURL=stores.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"stores.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/stores.ts"],"sourcesContent":["import { createMetadataStore } from '../../../utils/MetadataStore'\nimport { Role } from '../roles'\nimport { AllowDefinition } from '../permissions'\n\nexport const allowCustomPrimaryStore = createMetadataStore<Role[]>([])\nexport const allowCustomPrimaryAllRolesStore = createMetadataStore<boolean>(false)\n\nexport type EntityPermissionsDefinition =\n\t& AllowDefinition<any>\n\t& {\n\t\trole: Role<string>\n\t}\nexport const allowDefinitionsStore = createMetadataStore<EntityPermissionsDefinition[]>([])\n"],"names":["createMetadataStore"],"mappings":";;;AAIa,MAAA,0BAA0BA,cAA4B,oBAAA,CAAE,CAAA;AACxD,MAAA,kCAAkCA,kCAA6B,KAAK;AAOpE,MAAA,wBAAwBA,cAAmD,oBAAA,CAAE,CAAA;;;;"}
1
+ {"version":3,"file":"stores.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/stores.ts"],"sourcesContent":["import { createMetadataStore } from '../../../utils/MetadataStore'\nimport { Role } from '../roles'\nimport { AllowDefinition } from '../permissions'\n\nexport type EntityPermissionsDefinition =\n\t& AllowDefinition<any>\n\t& {\n\t\trole: Role<string>\n\t}\nexport const allowDefinitionsStore = createMetadataStore<EntityPermissionsDefinition[]>([])\n"],"names":["createMetadataStore"],"mappings":";;;AASa,MAAA,wBAAwBA,cAAmD,oBAAA,CAAE,CAAA;;"}
@@ -1,10 +1,6 @@
1
1
  import { createMetadataStore } from "../../../utils/MetadataStore.js";
2
- const allowCustomPrimaryStore = createMetadataStore([]);
3
- const allowCustomPrimaryAllRolesStore = createMetadataStore(false);
4
2
  const allowDefinitionsStore = createMetadataStore([]);
5
3
  export {
6
- allowCustomPrimaryAllRolesStore,
7
- allowCustomPrimaryStore,
8
4
  allowDefinitionsStore
9
5
  };
10
6
  //# sourceMappingURL=stores.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"stores.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/stores.ts"],"sourcesContent":["import { createMetadataStore } from '../../../utils/MetadataStore'\nimport { Role } from '../roles'\nimport { AllowDefinition } from '../permissions'\n\nexport const allowCustomPrimaryStore = createMetadataStore<Role[]>([])\nexport const allowCustomPrimaryAllRolesStore = createMetadataStore<boolean>(false)\n\nexport type EntityPermissionsDefinition =\n\t& AllowDefinition<any>\n\t& {\n\t\trole: Role<string>\n\t}\nexport const allowDefinitionsStore = createMetadataStore<EntityPermissionsDefinition[]>([])\n"],"names":[],"mappings":";AAIa,MAAA,0BAA0B,oBAA4B,CAAE,CAAA;AACxD,MAAA,kCAAkC,oBAA6B,KAAK;AAOpE,MAAA,wBAAwB,oBAAmD,CAAE,CAAA;"}
1
+ {"version":3,"file":"stores.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/stores.ts"],"sourcesContent":["import { createMetadataStore } from '../../../utils/MetadataStore'\nimport { Role } from '../roles'\nimport { AllowDefinition } from '../permissions'\n\nexport type EntityPermissionsDefinition =\n\t& AllowDefinition<any>\n\t& {\n\t\trole: Role<string>\n\t}\nexport const allowDefinitionsStore = createMetadataStore<EntityPermissionsDefinition[]>([])\n"],"names":[],"mappings":";AASa,MAAA,wBAAwB,oBAAmD,CAAE,CAAA;"}
@@ -11,7 +11,10 @@ const strict = require("./strict.cjs");
11
11
  const createSchema = (definitions, modifyCallback, options) => {
12
12
  const strictOptions = options?.strict === true ? strict.allStrict : options?.strict || {};
13
13
  const strictDefinitionValidator = new strict.StrictDefinitionValidator(strictOptions);
14
- const model = index.createModel(definitions, { strictDefinitionValidator });
14
+ const model = index.createModel(definitions, {
15
+ strictDefinitionValidator,
16
+ defaultCollation: options?.defaultCollation
17
+ });
15
18
  const validation = index$1.parseDefinition(definitions);
16
19
  const acl = index$2.createAcl(definitions, model);
17
20
  const actions = index$3.createActions(definitions);
@@ -1 +1 @@
1
- {"version":3,"file":"createSchema.cjs","sources":["../../../../packages/schema-definition/src/createSchema.ts"],"sourcesContent":["import { SchemaDefinition } from './model'\nimport * as InputValidation from './validation'\nimport * as AclDefinition from './acl/definition'\nimport * as ActionsDefinition from './actions/definition'\nimport { Schema } from '@contember/schema'\nimport { emptySchema } from '@contember/schema-utils'\nimport { allStrict, StrictOptions, StrictDefinitionValidator } from './strict'\n\nexport const createSchema = (definitions: Record<string, any>, modifyCallback?: (schema: Schema) => Schema, options?: {\n\tstrict?: boolean | StrictOptions\n}): Schema => {\n\tconst strictOptions = options?.strict === true ? allStrict : (options?.strict || {})\n\tconst strictDefinitionValidator = new StrictDefinitionValidator(strictOptions)\n\n\tconst model = SchemaDefinition.createModel(definitions, { strictDefinitionValidator: strictDefinitionValidator })\n\tconst validation = InputValidation.parseDefinition(definitions)\n\tconst acl = AclDefinition.createAcl(definitions, model)\n\tconst actions = ActionsDefinition.createActions(definitions)\n\tconst schema = { ...emptySchema, model, validation, acl, actions }\n\n\tif (strictDefinitionValidator.warnings.length > 0) {\n\t\tthrow `Strict schema validation failed: \\n${strictDefinitionValidator.warnings.map(it => `- ${it.message}`).join('\\n')}`\n\t}\n\n\treturn modifyCallback ? modifyCallback(schema) : schema\n}\n"],"names":["allStrict","StrictDefinitionValidator","SchemaDefinition.createModel","InputValidation.parseDefinition","AclDefinition.createAcl","ActionsDefinition.createActions","emptySchema"],"mappings":";;;;;;;;;;AAQO,MAAM,eAAe,CAAC,aAAkC,gBAA6C,YAE9F;AACb,QAAM,gBAAgB,SAAS,WAAW,OAAOA,mBAAa,SAAS,UAAU,CAAC;AAC5E,QAAA,4BAA4B,IAAIC,OAAA,0BAA0B,aAAa;AAE7E,QAAM,QAAQC,MAAiB,YAAY,aAAa,EAAE,2BAAsD;AAC1G,QAAA,aAAaC,QAAgB,gBAAgB,WAAW;AAC9D,QAAM,MAAMC,QAAAA,UAAwB,aAAa,KAAK;AAChD,QAAA,UAAUC,QAAkB,cAAc,WAAW;AAC3D,QAAM,SAAS,EAAE,GAAGC,yBAAa,OAAO,YAAY,KAAK,QAAQ;AAE7D,MAAA,0BAA0B,SAAS,SAAS,GAAG;AAC5C,UAAA;AAAA,EAAsC,0BAA0B,SAAS,IAAI,CAAM,OAAA,KAAK,GAAG,OAAO,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,EAAA;AAGhH,SAAA,iBAAiB,eAAe,MAAM,IAAI;AAClD;;"}
1
+ {"version":3,"file":"createSchema.cjs","sources":["../../../../packages/schema-definition/src/createSchema.ts"],"sourcesContent":["import { SchemaDefinition } from './model'\nimport * as InputValidation from './validation'\nimport * as AclDefinition from './acl/definition'\nimport * as ActionsDefinition from './actions/definition'\nimport { Model, Schema } from '@contember/schema'\nimport { emptySchema } from '@contember/schema-utils'\nimport { allStrict, StrictOptions, StrictDefinitionValidator } from './strict'\n\nexport const createSchema = (definitions: Record<string, any>, modifyCallback?: (schema: Schema) => Schema, options?: {\n\tstrict?: boolean | StrictOptions\n\tdefaultCollation?: Model.Collation\n}): Schema => {\n\tconst strictOptions = options?.strict === true ? allStrict : (options?.strict || {})\n\tconst strictDefinitionValidator = new StrictDefinitionValidator(strictOptions)\n\n\tconst model = SchemaDefinition.createModel(definitions, {\n\t\tstrictDefinitionValidator: strictDefinitionValidator,\n\t\tdefaultCollation: options?.defaultCollation,\n\t})\n\tconst validation = InputValidation.parseDefinition(definitions)\n\tconst acl = AclDefinition.createAcl(definitions, model)\n\tconst actions = ActionsDefinition.createActions(definitions)\n\tconst schema = { ...emptySchema, model, validation, acl, actions }\n\n\tif (strictDefinitionValidator.warnings.length > 0) {\n\t\tthrow `Strict schema validation failed: \\n${strictDefinitionValidator.warnings.map(it => `- ${it.message}`).join('\\n')}`\n\t}\n\n\treturn modifyCallback ? modifyCallback(schema) : schema\n}\n"],"names":["allStrict","StrictDefinitionValidator","SchemaDefinition.createModel","InputValidation.parseDefinition","AclDefinition.createAcl","ActionsDefinition.createActions","emptySchema"],"mappings":";;;;;;;;;;AAQO,MAAM,eAAe,CAAC,aAAkC,gBAA6C,YAG9F;AACb,QAAM,gBAAgB,SAAS,WAAW,OAAOA,mBAAa,SAAS,UAAU,CAAC;AAC5E,QAAA,4BAA4B,IAAIC,OAAA,0BAA0B,aAAa;AAEvE,QAAA,QAAQC,MAAiB,YAAY,aAAa;AAAA,IACvD;AAAA,IACA,kBAAkB,SAAS;AAAA,EAAA,CAC3B;AACK,QAAA,aAAaC,QAAgB,gBAAgB,WAAW;AAC9D,QAAM,MAAMC,QAAAA,UAAwB,aAAa,KAAK;AAChD,QAAA,UAAUC,QAAkB,cAAc,WAAW;AAC3D,QAAM,SAAS,EAAE,GAAGC,yBAAa,OAAO,YAAY,KAAK,QAAQ;AAE7D,MAAA,0BAA0B,SAAS,SAAS,GAAG;AAC5C,UAAA;AAAA,EAAsC,0BAA0B,SAAS,IAAI,CAAM,OAAA,KAAK,GAAG,OAAO,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,EAAA;AAGhH,SAAA,iBAAiB,eAAe,MAAM,IAAI;AAClD;;"}
@@ -9,7 +9,10 @@ import { allStrict, StrictDefinitionValidator } from "./strict.js";
9
9
  const createSchema = (definitions, modifyCallback, options) => {
10
10
  const strictOptions = options?.strict === true ? allStrict : options?.strict || {};
11
11
  const strictDefinitionValidator = new StrictDefinitionValidator(strictOptions);
12
- const model = createModel(definitions, { strictDefinitionValidator });
12
+ const model = createModel(definitions, {
13
+ strictDefinitionValidator,
14
+ defaultCollation: options?.defaultCollation
15
+ });
13
16
  const validation = parseDefinition(definitions);
14
17
  const acl = createAcl(definitions, model);
15
18
  const actions = createActions(definitions);
@@ -1 +1 @@
1
- {"version":3,"file":"createSchema.js","sources":["../../../../packages/schema-definition/src/createSchema.ts"],"sourcesContent":["import { SchemaDefinition } from './model'\nimport * as InputValidation from './validation'\nimport * as AclDefinition from './acl/definition'\nimport * as ActionsDefinition from './actions/definition'\nimport { Schema } from '@contember/schema'\nimport { emptySchema } from '@contember/schema-utils'\nimport { allStrict, StrictOptions, StrictDefinitionValidator } from './strict'\n\nexport const createSchema = (definitions: Record<string, any>, modifyCallback?: (schema: Schema) => Schema, options?: {\n\tstrict?: boolean | StrictOptions\n}): Schema => {\n\tconst strictOptions = options?.strict === true ? allStrict : (options?.strict || {})\n\tconst strictDefinitionValidator = new StrictDefinitionValidator(strictOptions)\n\n\tconst model = SchemaDefinition.createModel(definitions, { strictDefinitionValidator: strictDefinitionValidator })\n\tconst validation = InputValidation.parseDefinition(definitions)\n\tconst acl = AclDefinition.createAcl(definitions, model)\n\tconst actions = ActionsDefinition.createActions(definitions)\n\tconst schema = { ...emptySchema, model, validation, acl, actions }\n\n\tif (strictDefinitionValidator.warnings.length > 0) {\n\t\tthrow `Strict schema validation failed: \\n${strictDefinitionValidator.warnings.map(it => `- ${it.message}`).join('\\n')}`\n\t}\n\n\treturn modifyCallback ? modifyCallback(schema) : schema\n}\n"],"names":["SchemaDefinition.createModel","InputValidation.parseDefinition","AclDefinition.createAcl","ActionsDefinition.createActions"],"mappings":";;;;;;;;AAQO,MAAM,eAAe,CAAC,aAAkC,gBAA6C,YAE9F;AACb,QAAM,gBAAgB,SAAS,WAAW,OAAO,YAAa,SAAS,UAAU,CAAC;AAC5E,QAAA,4BAA4B,IAAI,0BAA0B,aAAa;AAE7E,QAAM,QAAQA,YAA6B,aAAa,EAAE,2BAAsD;AAC1G,QAAA,aAAaC,gBAAgC,WAAW;AAC9D,QAAM,MAAMC,UAAwB,aAAa,KAAK;AAChD,QAAA,UAAUC,cAAgC,WAAW;AAC3D,QAAM,SAAS,EAAE,GAAG,aAAa,OAAO,YAAY,KAAK,QAAQ;AAE7D,MAAA,0BAA0B,SAAS,SAAS,GAAG;AAC5C,UAAA;AAAA,EAAsC,0BAA0B,SAAS,IAAI,CAAM,OAAA,KAAK,GAAG,OAAO,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,EAAA;AAGhH,SAAA,iBAAiB,eAAe,MAAM,IAAI;AAClD;"}
1
+ {"version":3,"file":"createSchema.js","sources":["../../../../packages/schema-definition/src/createSchema.ts"],"sourcesContent":["import { SchemaDefinition } from './model'\nimport * as InputValidation from './validation'\nimport * as AclDefinition from './acl/definition'\nimport * as ActionsDefinition from './actions/definition'\nimport { Model, Schema } from '@contember/schema'\nimport { emptySchema } from '@contember/schema-utils'\nimport { allStrict, StrictOptions, StrictDefinitionValidator } from './strict'\n\nexport const createSchema = (definitions: Record<string, any>, modifyCallback?: (schema: Schema) => Schema, options?: {\n\tstrict?: boolean | StrictOptions\n\tdefaultCollation?: Model.Collation\n}): Schema => {\n\tconst strictOptions = options?.strict === true ? allStrict : (options?.strict || {})\n\tconst strictDefinitionValidator = new StrictDefinitionValidator(strictOptions)\n\n\tconst model = SchemaDefinition.createModel(definitions, {\n\t\tstrictDefinitionValidator: strictDefinitionValidator,\n\t\tdefaultCollation: options?.defaultCollation,\n\t})\n\tconst validation = InputValidation.parseDefinition(definitions)\n\tconst acl = AclDefinition.createAcl(definitions, model)\n\tconst actions = ActionsDefinition.createActions(definitions)\n\tconst schema = { ...emptySchema, model, validation, acl, actions }\n\n\tif (strictDefinitionValidator.warnings.length > 0) {\n\t\tthrow `Strict schema validation failed: \\n${strictDefinitionValidator.warnings.map(it => `- ${it.message}`).join('\\n')}`\n\t}\n\n\treturn modifyCallback ? modifyCallback(schema) : schema\n}\n"],"names":["SchemaDefinition.createModel","InputValidation.parseDefinition","AclDefinition.createAcl","ActionsDefinition.createActions"],"mappings":";;;;;;;;AAQO,MAAM,eAAe,CAAC,aAAkC,gBAA6C,YAG9F;AACb,QAAM,gBAAgB,SAAS,WAAW,OAAO,YAAa,SAAS,UAAU,CAAC;AAC5E,QAAA,4BAA4B,IAAI,0BAA0B,aAAa;AAEvE,QAAA,QAAQA,YAA6B,aAAa;AAAA,IACvD;AAAA,IACA,kBAAkB,SAAS;AAAA,EAAA,CAC3B;AACK,QAAA,aAAaC,gBAAgC,WAAW;AAC9D,QAAM,MAAMC,UAAwB,aAAa,KAAK;AAChD,QAAA,UAAUC,cAAgC,WAAW;AAC3D,QAAM,SAAS,EAAE,GAAG,aAAa,OAAO,YAAY,KAAK,QAAQ;AAE7D,MAAA,0BAA0B,SAAS,SAAS,GAAG;AAC5C,UAAA;AAAA,EAAsC,0BAA0B,SAAS,IAAI,CAAM,OAAA,KAAK,GAAG,OAAO,EAAE,EAAE,KAAK,IAAI,CAAC;AAAA,EAAA;AAGhH,SAAA,iBAAiB,eAAe,MAAM,IAAI;AAClD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaBuilderInternal.cjs","sources":["../../../../../../packages/schema-definition/src/model/builder/SchemaBuilderInternal.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { NamingConventions } from '@contember/schema-utils'\nimport EntityBuilder from './EntityBuilder'\nimport { SchemaBuilderError } from './SchemaBuilderError'\nimport FieldProcessor from './internal/FieldProcessor'\nimport ColumnProcessor from './internal/ColumnProcessor'\nimport ManyHasManyProcessor from './internal/ManyHasManyProcessor'\nimport OneHasOneProcessor from './internal/OneHasOneProcessor'\nimport OneHasManyProcessor from './internal/OneHasManyProcessor'\nimport ManyHasOneProcessor from './internal/ManyHasOneProcessor'\nimport FieldBuilder from './FieldBuilder'\n\nexport default class SchemaBuilderInternal {\n\tprivate entities: { [name: string]: Model.Entity & { fields: Record<string, Model.AnyField> } } = {}\n\n\tprivate fieldOptions: { [entity: string]: FieldBuilder.Map } = {}\n\n\tprivate enums: { [name: string]: string[] } = {}\n\n\tconstructor(private readonly conventions: NamingConventions) {}\n\n\tpublic addEntity(name: string, options: EntityBuilder.EntityOptions, fieldOptions: FieldBuilder.Map): void {\n\t\tthis.fieldOptions[name] = fieldOptions\n\t\tconst primaryName = this.getPrimaryFieldName(options, name, fieldOptions)\n\t\tif (!fieldOptions[primaryName]) {\n\t\t\tfieldOptions[primaryName] = this.createDefaultPrimary(primaryName)\n\t\t}\n\t\tconst primaryField = fieldOptions[primaryName]\n\t\tif (primaryField.type !== FieldBuilder.Type.Column) {\n\t\t\tthrow new SchemaBuilderError(`${name}: Primary field must be a column`)\n\t\t}\n\t\tprimaryField.options.primary = true\n\t\tprimaryField.options.nullable = false\n\n\t\tthis.entities[name] = {\n\t\t\tname: name,\n\t\t\tprimary: primaryName,\n\t\t\tprimaryColumn: primaryField.options.columnName || this.conventions.getColumnName(primaryName),\n\t\t\tunique: this.createUnique(name, options, fieldOptions),\n\t\t\tfields: {},\n\t\t\tindexes: [],\n\t\t\ttableName: options.tableName || this.conventions.getTableName(name),\n\t\t\teventLog: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t\t...(options.orderBy !== undefined ? { orderBy: options.orderBy } : {}),\n\t\t}\n\t}\n\n\tpublic addEnum(name: string, values: string[]): void {\n\t\tthis.enums[name] = values\n\t}\n\n\tpublic createSchema(): Model.Schema {\n\t\tfor (let entityName in this.fieldOptions) {\n\t\t\tlet primaryField = this.entities[entityName].primary\n\t\t\tthis.processField(entityName, primaryField)\n\t\t\tfor (let fieldName in this.fieldOptions[entityName]) {\n\t\t\t\tif (fieldName === primaryField) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tthis.processField(entityName, fieldName)\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tenums: this.enums,\n\t\t\tentities: this.entities,\n\t\t}\n\t}\n\n\tprivate processField(entityName: string, fieldName: string): void {\n\t\tconst processor = this.createProcessor(entityName, fieldName)\n\t\tprocessor.process(\n\t\t\tentityName,\n\t\t\tfieldName,\n\t\t\tthis.fieldOptions[entityName][fieldName].options,\n\t\t\tthis.registerField.bind(this),\n\t\t)\n\t}\n\n\tprivate createProcessor(entityName: string, fieldName: string): FieldProcessor<any> {\n\t\tconst field: FieldBuilder.Options = this.fieldOptions[entityName][fieldName]\n\n\t\tif (field.type === FieldBuilder.Type.Column) {\n\t\t\treturn new ColumnProcessor(this.conventions)\n\t\t}\n\t\tthis.checkTarget(entityName, fieldName, field.options)\n\t\tswitch (field.type) {\n\t\t\tcase FieldBuilder.Type.ManyHasMany:\n\t\t\t\treturn new ManyHasManyProcessor(this.conventions)\n\t\t\tcase FieldBuilder.Type.OneHasOne:\n\t\t\t\treturn new OneHasOneProcessor(this.conventions)\n\t\t\tcase FieldBuilder.Type.OneHasMany:\n\t\t\t\treturn new OneHasManyProcessor(this.conventions)\n\t\t\tcase FieldBuilder.Type.ManyHasOne:\n\t\t\t\treturn new ManyHasOneProcessor(this.conventions)\n\t\t}\n\n\t\tthrow new Error()\n\t}\n\n\tprivate checkTarget(entityName: string, fieldName: string, options: { target: string }) {\n\t\tif (!this.entities[options.target]) {\n\t\t\tthrow new SchemaBuilderError(`${entityName}::${fieldName}: undefined target entity ${options.target}`)\n\t\t}\n\t}\n\n\tprivate registerField(entityName: string, field: Model.AnyColumn | Model.AnyRelation) {\n\t\tif (!this.entities[entityName]) {\n\t\t\tthrow new SchemaBuilderError(`Undefined entity ${entityName}`)\n\t\t}\n\t\tif (this.entities[entityName].fields[field.name]) {\n\t\t\tthrow new SchemaBuilderError(`${entityName}: Field ${field.name} is already defined`)\n\t\t}\n\t\tthis.entities[entityName].fields[field.name] = field\n\t}\n\n\tprivate getPrimaryFieldName(\n\t\tentityOptions: EntityBuilder.EntityOptions,\n\t\tentityName: string,\n\t\tfields: FieldBuilder.Map,\n\t) {\n\t\tlet primary: string[] = []\n\t\tif (entityOptions.primary) {\n\t\t\tprimary.push(entityOptions.primary)\n\t\t}\n\t\tfor (let name in fields) {\n\t\t\tconst field: FieldBuilder.Options = fields[name]\n\t\t\tif (field.type !== FieldBuilder.Type.Column) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!field.options.primary) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!primary.includes(name)) {\n\t\t\t\tprimary.push(name)\n\t\t\t}\n\t\t}\n\t\tif (primary.length > 1) {\n\t\t\tthrow new SchemaBuilderError(`${entityName}: Only single column can be a primary. Found: ${primary.join(', ')}`)\n\t\t}\n\t\treturn primary.length === 1 ? primary[0] : this.conventions.getPrimaryField()\n\t}\n\n\tprivate createDefaultPrimary(fieldName: string): FieldBuilder.Options {\n\t\treturn {\n\t\t\ttype: FieldBuilder.Type.Column,\n\t\t\toptions: {\n\t\t\t\tnullable: false,\n\t\t\t\ttype: Model.ColumnType.Uuid,\n\t\t\t\tprimary: true,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate createUnique(\n\t\tentityName: string,\n\t\toptions: EntityBuilder.EntityOptions,\n\t\tfieldOptions: FieldBuilder.Map,\n\t): Model.UniqueConstraints {\n\t\tconst unique: Model.UniqueConstraint[] = []\n\n\t\tfor (const singleUnique of options.unique || []) {\n\t\t\tunique.push(singleUnique)\n\t\t}\n\t\tfor (let fieldName in fieldOptions) {\n\t\t\tconst options = fieldOptions[fieldName]\n\n\t\t\tif (options.type === FieldBuilder.Type.Column && options.options.unique) {\n\t\t\t\tunique.push({ fields: [fieldName] })\n\t\t\t}\n\t\t}\n\t\treturn unique\n\t}\n}\n"],"names":["SchemaBuilderError","Model","options"],"mappings":"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"}
1
+ {"version":3,"file":"SchemaBuilderInternal.cjs","sources":["../../../../../../packages/schema-definition/src/model/builder/SchemaBuilderInternal.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { NamingConventions } from '@contember/schema-utils'\nimport EntityBuilder from './EntityBuilder'\nimport { SchemaBuilderError } from './SchemaBuilderError'\nimport FieldProcessor from './internal/FieldProcessor'\nimport ColumnProcessor from './internal/ColumnProcessor'\nimport ManyHasManyProcessor from './internal/ManyHasManyProcessor'\nimport OneHasOneProcessor from './internal/OneHasOneProcessor'\nimport OneHasManyProcessor from './internal/OneHasManyProcessor'\nimport ManyHasOneProcessor from './internal/ManyHasOneProcessor'\nimport FieldBuilder from './FieldBuilder'\n\nexport default class SchemaBuilderInternal {\n\tprivate entities: { [name: string]: Model.Entity & { fields: Record<string, Model.AnyField> } } = {}\n\n\tprivate fieldOptions: { [entity: string]: FieldBuilder.Map } = {}\n\n\tprivate enums: { [name: string]: string[] } = {}\n\n\tconstructor(private readonly conventions: NamingConventions) {}\n\n\tpublic addEntity(name: string, options: EntityBuilder.EntityOptions, fieldOptions: FieldBuilder.Map): void {\n\t\tthis.fieldOptions[name] = fieldOptions\n\t\tconst primaryName = this.getPrimaryFieldName(options, name, fieldOptions)\n\t\tif (!fieldOptions[primaryName]) {\n\t\t\tfieldOptions[primaryName] = this.createDefaultPrimary(primaryName)\n\t\t}\n\t\tconst primaryField = fieldOptions[primaryName]\n\t\tif (primaryField.type !== FieldBuilder.Type.Column) {\n\t\t\tthrow new SchemaBuilderError(`${name}: Primary field must be a column`)\n\t\t}\n\t\tprimaryField.options.primary = true\n\t\tprimaryField.options.nullable = false\n\n\t\tthis.entities[name] = {\n\t\t\tname: name,\n\t\t\tprimary: primaryName,\n\t\t\tprimaryColumn: primaryField.options.columnName || this.conventions.getColumnName(primaryName),\n\t\t\tunique: this.createUnique(name, options, fieldOptions),\n\t\t\tfields: {},\n\t\t\tindexes: [],\n\t\t\ttableName: options.tableName || this.conventions.getTableName(name),\n\t\t\teventLog: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t\t...(options.orderBy !== undefined ? { orderBy: options.orderBy } : {}),\n\t\t}\n\t}\n\n\tpublic addEnum(name: string, values: string[]): void {\n\t\tthis.enums[name] = values\n\t}\n\n\tpublic createSchema(): Model.Schema {\n\t\tfor (let entityName in this.fieldOptions) {\n\t\t\tlet primaryField = this.entities[entityName].primary\n\t\t\tthis.processField(entityName, primaryField)\n\t\t\tfor (let fieldName in this.fieldOptions[entityName]) {\n\t\t\t\tif (fieldName === primaryField) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tthis.processField(entityName, fieldName)\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tenums: this.enums,\n\t\t\tentities: this.entities,\n\t\t}\n\t}\n\n\tprivate processField(entityName: string, fieldName: string): void {\n\t\tconst processor = this.createProcessor(entityName, fieldName)\n\t\tprocessor.process(\n\t\t\tentityName,\n\t\t\tfieldName,\n\t\t\tthis.fieldOptions[entityName][fieldName].options,\n\t\t\tthis.registerField.bind(this),\n\t\t)\n\t}\n\n\tprivate createProcessor(entityName: string, fieldName: string): FieldProcessor<any> {\n\t\tconst field: FieldBuilder.Options = this.fieldOptions[entityName][fieldName]\n\n\t\tif (field.type === FieldBuilder.Type.Column) {\n\t\t\treturn new ColumnProcessor(this.conventions)\n\t\t}\n\t\tthis.checkTarget(entityName, fieldName, field.options)\n\t\tswitch (field.type) {\n\t\t\tcase FieldBuilder.Type.ManyHasMany:\n\t\t\t\treturn new ManyHasManyProcessor(this.conventions)\n\t\t\tcase FieldBuilder.Type.OneHasOne:\n\t\t\t\treturn new OneHasOneProcessor(this.conventions)\n\t\t\tcase FieldBuilder.Type.OneHasMany:\n\t\t\t\treturn new OneHasManyProcessor(this.conventions)\n\t\t\tcase FieldBuilder.Type.ManyHasOne:\n\t\t\t\treturn new ManyHasOneProcessor(this.conventions)\n\t\t}\n\n\t\tthrow new Error()\n\t}\n\n\tprivate checkTarget(entityName: string, fieldName: string, options: { target: string }) {\n\t\tif (!this.entities[options.target]) {\n\t\t\tthrow new SchemaBuilderError(`${entityName}::${fieldName}: undefined target entity ${options.target}`)\n\t\t}\n\t}\n\n\tprivate registerField(entityName: string, field: Model.AnyColumn | Model.AnyRelation) {\n\t\tif (!this.entities[entityName]) {\n\t\t\tthrow new SchemaBuilderError(`Undefined entity ${entityName}`)\n\t\t}\n\t\tif (this.entities[entityName].fields[field.name]) {\n\t\t\tthrow new SchemaBuilderError(`${entityName}: Field ${field.name} is already defined`)\n\t\t}\n\t\tthis.entities[entityName].fields[field.name] = field\n\t}\n\n\tprivate getPrimaryFieldName(\n\t\tentityOptions: EntityBuilder.EntityOptions,\n\t\tentityName: string,\n\t\tfields: FieldBuilder.Map,\n\t) {\n\t\tlet primary: string[] = []\n\t\tif (entityOptions.primary) {\n\t\t\tprimary.push(entityOptions.primary)\n\t\t}\n\t\tfor (let name in fields) {\n\t\t\tconst field: FieldBuilder.Options = fields[name]\n\t\t\tif (field.type !== FieldBuilder.Type.Column) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!field.options.primary) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!primary.includes(name)) {\n\t\t\t\tprimary.push(name)\n\t\t\t}\n\t\t}\n\t\tif (primary.length > 1) {\n\t\t\tthrow new SchemaBuilderError(`${entityName}: Only single column can be a primary. Found: ${primary.join(', ')}`)\n\t\t}\n\t\treturn primary.length === 1 ? primary[0] : this.conventions.getPrimaryField()\n\t}\n\n\tprivate createDefaultPrimary(fieldName: string): FieldBuilder.Options {\n\t\treturn {\n\t\t\ttype: FieldBuilder.Type.Column,\n\t\t\toptions: {\n\t\t\t\tnullable: false,\n\t\t\t\ttype: Model.ColumnType.Uuid,\n\t\t\t\tprimary: true,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate createUnique(\n\t\tentityName: string,\n\t\toptions: EntityBuilder.EntityOptions,\n\t\tfieldOptions: FieldBuilder.Map,\n\t): Model.Uniques {\n\t\tconst unique: Model.UniqueConstraint[] = []\n\n\t\tfor (const singleUnique of options.unique || []) {\n\t\t\tunique.push(singleUnique)\n\t\t}\n\t\tfor (let fieldName in fieldOptions) {\n\t\t\tconst options = fieldOptions[fieldName]\n\n\t\t\tif (options.type === FieldBuilder.Type.Column && options.options.unique) {\n\t\t\t\tunique.push({ fields: [fieldName] })\n\t\t\t}\n\t\t}\n\t\treturn unique\n\t}\n}\n"],"names":["SchemaBuilderError","Model","options"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaBuilderInternal.js","sources":["../../../../../../packages/schema-definition/src/model/builder/SchemaBuilderInternal.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { NamingConventions } from '@contember/schema-utils'\nimport EntityBuilder from './EntityBuilder'\nimport { SchemaBuilderError } from './SchemaBuilderError'\nimport FieldProcessor from './internal/FieldProcessor'\nimport ColumnProcessor from './internal/ColumnProcessor'\nimport ManyHasManyProcessor from './internal/ManyHasManyProcessor'\nimport OneHasOneProcessor from './internal/OneHasOneProcessor'\nimport OneHasManyProcessor from './internal/OneHasManyProcessor'\nimport ManyHasOneProcessor from './internal/ManyHasOneProcessor'\nimport FieldBuilder from './FieldBuilder'\n\nexport default class SchemaBuilderInternal {\n\tprivate entities: { [name: string]: Model.Entity & { fields: Record<string, Model.AnyField> } } = {}\n\n\tprivate fieldOptions: { [entity: string]: FieldBuilder.Map } = {}\n\n\tprivate enums: { [name: string]: string[] } = {}\n\n\tconstructor(private readonly conventions: NamingConventions) {}\n\n\tpublic addEntity(name: string, options: EntityBuilder.EntityOptions, fieldOptions: FieldBuilder.Map): void {\n\t\tthis.fieldOptions[name] = fieldOptions\n\t\tconst primaryName = this.getPrimaryFieldName(options, name, fieldOptions)\n\t\tif (!fieldOptions[primaryName]) {\n\t\t\tfieldOptions[primaryName] = this.createDefaultPrimary(primaryName)\n\t\t}\n\t\tconst primaryField = fieldOptions[primaryName]\n\t\tif (primaryField.type !== FieldBuilder.Type.Column) {\n\t\t\tthrow new SchemaBuilderError(`${name}: Primary field must be a column`)\n\t\t}\n\t\tprimaryField.options.primary = true\n\t\tprimaryField.options.nullable = false\n\n\t\tthis.entities[name] = {\n\t\t\tname: name,\n\t\t\tprimary: primaryName,\n\t\t\tprimaryColumn: primaryField.options.columnName || this.conventions.getColumnName(primaryName),\n\t\t\tunique: this.createUnique(name, options, fieldOptions),\n\t\t\tfields: {},\n\t\t\tindexes: [],\n\t\t\ttableName: options.tableName || this.conventions.getTableName(name),\n\t\t\teventLog: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t\t...(options.orderBy !== undefined ? { orderBy: options.orderBy } : {}),\n\t\t}\n\t}\n\n\tpublic addEnum(name: string, values: string[]): void {\n\t\tthis.enums[name] = values\n\t}\n\n\tpublic createSchema(): Model.Schema {\n\t\tfor (let entityName in this.fieldOptions) {\n\t\t\tlet primaryField = this.entities[entityName].primary\n\t\t\tthis.processField(entityName, primaryField)\n\t\t\tfor (let fieldName in this.fieldOptions[entityName]) {\n\t\t\t\tif (fieldName === primaryField) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tthis.processField(entityName, fieldName)\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tenums: this.enums,\n\t\t\tentities: this.entities,\n\t\t}\n\t}\n\n\tprivate processField(entityName: string, fieldName: string): void {\n\t\tconst processor = this.createProcessor(entityName, fieldName)\n\t\tprocessor.process(\n\t\t\tentityName,\n\t\t\tfieldName,\n\t\t\tthis.fieldOptions[entityName][fieldName].options,\n\t\t\tthis.registerField.bind(this),\n\t\t)\n\t}\n\n\tprivate createProcessor(entityName: string, fieldName: string): FieldProcessor<any> {\n\t\tconst field: FieldBuilder.Options = this.fieldOptions[entityName][fieldName]\n\n\t\tif (field.type === FieldBuilder.Type.Column) {\n\t\t\treturn new ColumnProcessor(this.conventions)\n\t\t}\n\t\tthis.checkTarget(entityName, fieldName, field.options)\n\t\tswitch (field.type) {\n\t\t\tcase FieldBuilder.Type.ManyHasMany:\n\t\t\t\treturn new ManyHasManyProcessor(this.conventions)\n\t\t\tcase FieldBuilder.Type.OneHasOne:\n\t\t\t\treturn new OneHasOneProcessor(this.conventions)\n\t\t\tcase FieldBuilder.Type.OneHasMany:\n\t\t\t\treturn new OneHasManyProcessor(this.conventions)\n\t\t\tcase FieldBuilder.Type.ManyHasOne:\n\t\t\t\treturn new ManyHasOneProcessor(this.conventions)\n\t\t}\n\n\t\tthrow new Error()\n\t}\n\n\tprivate checkTarget(entityName: string, fieldName: string, options: { target: string }) {\n\t\tif (!this.entities[options.target]) {\n\t\t\tthrow new SchemaBuilderError(`${entityName}::${fieldName}: undefined target entity ${options.target}`)\n\t\t}\n\t}\n\n\tprivate registerField(entityName: string, field: Model.AnyColumn | Model.AnyRelation) {\n\t\tif (!this.entities[entityName]) {\n\t\t\tthrow new SchemaBuilderError(`Undefined entity ${entityName}`)\n\t\t}\n\t\tif (this.entities[entityName].fields[field.name]) {\n\t\t\tthrow new SchemaBuilderError(`${entityName}: Field ${field.name} is already defined`)\n\t\t}\n\t\tthis.entities[entityName].fields[field.name] = field\n\t}\n\n\tprivate getPrimaryFieldName(\n\t\tentityOptions: EntityBuilder.EntityOptions,\n\t\tentityName: string,\n\t\tfields: FieldBuilder.Map,\n\t) {\n\t\tlet primary: string[] = []\n\t\tif (entityOptions.primary) {\n\t\t\tprimary.push(entityOptions.primary)\n\t\t}\n\t\tfor (let name in fields) {\n\t\t\tconst field: FieldBuilder.Options = fields[name]\n\t\t\tif (field.type !== FieldBuilder.Type.Column) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!field.options.primary) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!primary.includes(name)) {\n\t\t\t\tprimary.push(name)\n\t\t\t}\n\t\t}\n\t\tif (primary.length > 1) {\n\t\t\tthrow new SchemaBuilderError(`${entityName}: Only single column can be a primary. Found: ${primary.join(', ')}`)\n\t\t}\n\t\treturn primary.length === 1 ? primary[0] : this.conventions.getPrimaryField()\n\t}\n\n\tprivate createDefaultPrimary(fieldName: string): FieldBuilder.Options {\n\t\treturn {\n\t\t\ttype: FieldBuilder.Type.Column,\n\t\t\toptions: {\n\t\t\t\tnullable: false,\n\t\t\t\ttype: Model.ColumnType.Uuid,\n\t\t\t\tprimary: true,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate createUnique(\n\t\tentityName: string,\n\t\toptions: EntityBuilder.EntityOptions,\n\t\tfieldOptions: FieldBuilder.Map,\n\t): Model.UniqueConstraints {\n\t\tconst unique: Model.UniqueConstraint[] = []\n\n\t\tfor (const singleUnique of options.unique || []) {\n\t\t\tunique.push(singleUnique)\n\t\t}\n\t\tfor (let fieldName in fieldOptions) {\n\t\t\tconst options = fieldOptions[fieldName]\n\n\t\t\tif (options.type === FieldBuilder.Type.Column && options.options.unique) {\n\t\t\t\tunique.push({ fields: [fieldName] })\n\t\t\t}\n\t\t}\n\t\treturn unique\n\t}\n}\n"],"names":["options"],"mappings":"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"}
1
+ {"version":3,"file":"SchemaBuilderInternal.js","sources":["../../../../../../packages/schema-definition/src/model/builder/SchemaBuilderInternal.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { NamingConventions } from '@contember/schema-utils'\nimport EntityBuilder from './EntityBuilder'\nimport { SchemaBuilderError } from './SchemaBuilderError'\nimport FieldProcessor from './internal/FieldProcessor'\nimport ColumnProcessor from './internal/ColumnProcessor'\nimport ManyHasManyProcessor from './internal/ManyHasManyProcessor'\nimport OneHasOneProcessor from './internal/OneHasOneProcessor'\nimport OneHasManyProcessor from './internal/OneHasManyProcessor'\nimport ManyHasOneProcessor from './internal/ManyHasOneProcessor'\nimport FieldBuilder from './FieldBuilder'\n\nexport default class SchemaBuilderInternal {\n\tprivate entities: { [name: string]: Model.Entity & { fields: Record<string, Model.AnyField> } } = {}\n\n\tprivate fieldOptions: { [entity: string]: FieldBuilder.Map } = {}\n\n\tprivate enums: { [name: string]: string[] } = {}\n\n\tconstructor(private readonly conventions: NamingConventions) {}\n\n\tpublic addEntity(name: string, options: EntityBuilder.EntityOptions, fieldOptions: FieldBuilder.Map): void {\n\t\tthis.fieldOptions[name] = fieldOptions\n\t\tconst primaryName = this.getPrimaryFieldName(options, name, fieldOptions)\n\t\tif (!fieldOptions[primaryName]) {\n\t\t\tfieldOptions[primaryName] = this.createDefaultPrimary(primaryName)\n\t\t}\n\t\tconst primaryField = fieldOptions[primaryName]\n\t\tif (primaryField.type !== FieldBuilder.Type.Column) {\n\t\t\tthrow new SchemaBuilderError(`${name}: Primary field must be a column`)\n\t\t}\n\t\tprimaryField.options.primary = true\n\t\tprimaryField.options.nullable = false\n\n\t\tthis.entities[name] = {\n\t\t\tname: name,\n\t\t\tprimary: primaryName,\n\t\t\tprimaryColumn: primaryField.options.columnName || this.conventions.getColumnName(primaryName),\n\t\t\tunique: this.createUnique(name, options, fieldOptions),\n\t\t\tfields: {},\n\t\t\tindexes: [],\n\t\t\ttableName: options.tableName || this.conventions.getTableName(name),\n\t\t\teventLog: {\n\t\t\t\tenabled: true,\n\t\t\t},\n\t\t\t...(options.orderBy !== undefined ? { orderBy: options.orderBy } : {}),\n\t\t}\n\t}\n\n\tpublic addEnum(name: string, values: string[]): void {\n\t\tthis.enums[name] = values\n\t}\n\n\tpublic createSchema(): Model.Schema {\n\t\tfor (let entityName in this.fieldOptions) {\n\t\t\tlet primaryField = this.entities[entityName].primary\n\t\t\tthis.processField(entityName, primaryField)\n\t\t\tfor (let fieldName in this.fieldOptions[entityName]) {\n\t\t\t\tif (fieldName === primaryField) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tthis.processField(entityName, fieldName)\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\tenums: this.enums,\n\t\t\tentities: this.entities,\n\t\t}\n\t}\n\n\tprivate processField(entityName: string, fieldName: string): void {\n\t\tconst processor = this.createProcessor(entityName, fieldName)\n\t\tprocessor.process(\n\t\t\tentityName,\n\t\t\tfieldName,\n\t\t\tthis.fieldOptions[entityName][fieldName].options,\n\t\t\tthis.registerField.bind(this),\n\t\t)\n\t}\n\n\tprivate createProcessor(entityName: string, fieldName: string): FieldProcessor<any> {\n\t\tconst field: FieldBuilder.Options = this.fieldOptions[entityName][fieldName]\n\n\t\tif (field.type === FieldBuilder.Type.Column) {\n\t\t\treturn new ColumnProcessor(this.conventions)\n\t\t}\n\t\tthis.checkTarget(entityName, fieldName, field.options)\n\t\tswitch (field.type) {\n\t\t\tcase FieldBuilder.Type.ManyHasMany:\n\t\t\t\treturn new ManyHasManyProcessor(this.conventions)\n\t\t\tcase FieldBuilder.Type.OneHasOne:\n\t\t\t\treturn new OneHasOneProcessor(this.conventions)\n\t\t\tcase FieldBuilder.Type.OneHasMany:\n\t\t\t\treturn new OneHasManyProcessor(this.conventions)\n\t\t\tcase FieldBuilder.Type.ManyHasOne:\n\t\t\t\treturn new ManyHasOneProcessor(this.conventions)\n\t\t}\n\n\t\tthrow new Error()\n\t}\n\n\tprivate checkTarget(entityName: string, fieldName: string, options: { target: string }) {\n\t\tif (!this.entities[options.target]) {\n\t\t\tthrow new SchemaBuilderError(`${entityName}::${fieldName}: undefined target entity ${options.target}`)\n\t\t}\n\t}\n\n\tprivate registerField(entityName: string, field: Model.AnyColumn | Model.AnyRelation) {\n\t\tif (!this.entities[entityName]) {\n\t\t\tthrow new SchemaBuilderError(`Undefined entity ${entityName}`)\n\t\t}\n\t\tif (this.entities[entityName].fields[field.name]) {\n\t\t\tthrow new SchemaBuilderError(`${entityName}: Field ${field.name} is already defined`)\n\t\t}\n\t\tthis.entities[entityName].fields[field.name] = field\n\t}\n\n\tprivate getPrimaryFieldName(\n\t\tentityOptions: EntityBuilder.EntityOptions,\n\t\tentityName: string,\n\t\tfields: FieldBuilder.Map,\n\t) {\n\t\tlet primary: string[] = []\n\t\tif (entityOptions.primary) {\n\t\t\tprimary.push(entityOptions.primary)\n\t\t}\n\t\tfor (let name in fields) {\n\t\t\tconst field: FieldBuilder.Options = fields[name]\n\t\t\tif (field.type !== FieldBuilder.Type.Column) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!field.options.primary) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (!primary.includes(name)) {\n\t\t\t\tprimary.push(name)\n\t\t\t}\n\t\t}\n\t\tif (primary.length > 1) {\n\t\t\tthrow new SchemaBuilderError(`${entityName}: Only single column can be a primary. Found: ${primary.join(', ')}`)\n\t\t}\n\t\treturn primary.length === 1 ? primary[0] : this.conventions.getPrimaryField()\n\t}\n\n\tprivate createDefaultPrimary(fieldName: string): FieldBuilder.Options {\n\t\treturn {\n\t\t\ttype: FieldBuilder.Type.Column,\n\t\t\toptions: {\n\t\t\t\tnullable: false,\n\t\t\t\ttype: Model.ColumnType.Uuid,\n\t\t\t\tprimary: true,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate createUnique(\n\t\tentityName: string,\n\t\toptions: EntityBuilder.EntityOptions,\n\t\tfieldOptions: FieldBuilder.Map,\n\t): Model.Uniques {\n\t\tconst unique: Model.UniqueConstraint[] = []\n\n\t\tfor (const singleUnique of options.unique || []) {\n\t\t\tunique.push(singleUnique)\n\t\t}\n\t\tfor (let fieldName in fieldOptions) {\n\t\t\tconst options = fieldOptions[fieldName]\n\n\t\t\tif (options.type === FieldBuilder.Type.Column && options.options.unique) {\n\t\t\t\tunique.push({ fields: [fieldName] })\n\t\t\t}\n\t\t}\n\t\treturn unique\n\t}\n}\n"],"names":["options"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"UniqueDefinition.cjs","sources":["../../../../../../packages/schema-definition/src/model/definition/UniqueDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { DecoratorFunction } from '../../utils'\nimport { Model } from '@contember/schema'\n\nexport type UniqueOptions<T> = {\n\tfields: (keyof T & string)[]\n\ttiming?: Model.ConstraintTiming\n}\nexport function Unique<T>(options: UniqueOptions<T>): DecoratorFunction<T>\nexport function Unique<T>(...fields: (keyof T & string)[]): DecoratorFunction<T>\nexport function Unique<T>(options: UniqueOptions<T> | keyof T & string, ...args: (keyof T & string)[]): DecoratorFunction<T> {\n\treturn extendEntity(({ entity }) => {\n\t\tconst unique = typeof options !== 'object'\n\t\t\t? { fields: [options, ...args] }\n\t\t\t: options\n\t\treturn {\n\t\t\t...entity,\n\t\t\tunique: [\n\t\t\t\t...entity.unique,\n\t\t\t\tunique,\n\t\t\t],\n\t\t}\n\t})\n}\n"],"names":["extendEntity"],"mappings":";;;AAUgB,SAAA,OAAU,YAAiD,MAAkD;AAC5H,SAAOA,WAAa,aAAA,CAAC,EAAE,aAAa;AAC7B,UAAA,SAAS,OAAO,YAAY,WAC/B,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAA,IAC3B;AACI,WAAA;AAAA,MACN,GAAG;AAAA,MACH,QAAQ;AAAA,QACP,GAAG,OAAO;AAAA,QACV;AAAA,MAAA;AAAA,IAEF;AAAA,EAAA,CACA;AACF;;"}
1
+ {"version":3,"file":"UniqueDefinition.cjs","sources":["../../../../../../packages/schema-definition/src/model/definition/UniqueDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { DecoratorFunction } from '../../utils'\nimport { Model } from '@contember/schema'\n\nexport type UniqueOptions<T> = {\n\tfields: (keyof T & string)[]\n\n} & (\n\t| {\n\t\tindex?: false\n\t\ttiming?: Model.ConstraintTiming\n\t}\n\t| {\n\t\tindex: true\n\t\tnulls?: Model.NullsDistinctBehaviour\n\t}\n)\nexport function Unique<T>(options: UniqueOptions<T>): DecoratorFunction<T>\nexport function Unique<T>(...fields: (keyof T & string)[]): DecoratorFunction<T>\nexport function Unique<T>(options: UniqueOptions<T> | keyof T & string, ...args: (keyof T & string)[]): DecoratorFunction<T> {\n\treturn extendEntity(({ entity }) => {\n\t\tconst unique = typeof options !== 'object'\n\t\t\t? { fields: [options, ...args] }\n\t\t\t: options\n\t\treturn {\n\t\t\t...entity,\n\t\t\tunique: [\n\t\t\t\t...entity.unique,\n\t\t\t\tunique,\n\t\t\t],\n\t\t}\n\t})\n}\n"],"names":["extendEntity"],"mappings":";;;AAmBgB,SAAA,OAAU,YAAiD,MAAkD;AAC5H,SAAOA,WAAa,aAAA,CAAC,EAAE,aAAa;AAC7B,UAAA,SAAS,OAAO,YAAY,WAC/B,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAA,IAC3B;AACI,WAAA;AAAA,MACN,GAAG;AAAA,MACH,QAAQ;AAAA,QACP,GAAG,OAAO;AAAA,QACV;AAAA,MAAA;AAAA,IAEF;AAAA,EAAA,CACA;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"UniqueDefinition.js","sources":["../../../../../../packages/schema-definition/src/model/definition/UniqueDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { DecoratorFunction } from '../../utils'\nimport { Model } from '@contember/schema'\n\nexport type UniqueOptions<T> = {\n\tfields: (keyof T & string)[]\n\ttiming?: Model.ConstraintTiming\n}\nexport function Unique<T>(options: UniqueOptions<T>): DecoratorFunction<T>\nexport function Unique<T>(...fields: (keyof T & string)[]): DecoratorFunction<T>\nexport function Unique<T>(options: UniqueOptions<T> | keyof T & string, ...args: (keyof T & string)[]): DecoratorFunction<T> {\n\treturn extendEntity(({ entity }) => {\n\t\tconst unique = typeof options !== 'object'\n\t\t\t? { fields: [options, ...args] }\n\t\t\t: options\n\t\treturn {\n\t\t\t...entity,\n\t\t\tunique: [\n\t\t\t\t...entity.unique,\n\t\t\t\tunique,\n\t\t\t],\n\t\t}\n\t})\n}\n"],"names":[],"mappings":";AAUgB,SAAA,OAAU,YAAiD,MAAkD;AAC5H,SAAO,aAAa,CAAC,EAAE,aAAa;AAC7B,UAAA,SAAS,OAAO,YAAY,WAC/B,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAA,IAC3B;AACI,WAAA;AAAA,MACN,GAAG;AAAA,MACH,QAAQ;AAAA,QACP,GAAG,OAAO;AAAA,QACV;AAAA,MAAA;AAAA,IAEF;AAAA,EAAA,CACA;AACF;"}
1
+ {"version":3,"file":"UniqueDefinition.js","sources":["../../../../../../packages/schema-definition/src/model/definition/UniqueDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { DecoratorFunction } from '../../utils'\nimport { Model } from '@contember/schema'\n\nexport type UniqueOptions<T> = {\n\tfields: (keyof T & string)[]\n\n} & (\n\t| {\n\t\tindex?: false\n\t\ttiming?: Model.ConstraintTiming\n\t}\n\t| {\n\t\tindex: true\n\t\tnulls?: Model.NullsDistinctBehaviour\n\t}\n)\nexport function Unique<T>(options: UniqueOptions<T>): DecoratorFunction<T>\nexport function Unique<T>(...fields: (keyof T & string)[]): DecoratorFunction<T>\nexport function Unique<T>(options: UniqueOptions<T> | keyof T & string, ...args: (keyof T & string)[]): DecoratorFunction<T> {\n\treturn extendEntity(({ entity }) => {\n\t\tconst unique = typeof options !== 'object'\n\t\t\t? { fields: [options, ...args] }\n\t\t\t: options\n\t\treturn {\n\t\t\t...entity,\n\t\t\tunique: [\n\t\t\t\t...entity.unique,\n\t\t\t\tunique,\n\t\t\t],\n\t\t}\n\t})\n}\n"],"names":[],"mappings":";AAmBgB,SAAA,OAAU,YAAiD,MAAkD;AAC5H,SAAO,aAAa,CAAC,EAAE,aAAa;AAC7B,UAAA,SAAS,OAAO,YAAY,WAC/B,EAAE,QAAQ,CAAC,SAAS,GAAG,IAAI,EAAA,IAC3B;AACI,WAAA;AAAA,MACN,GAAG;AAAA,MACH,QAAQ;AAAA,QACP,GAAG,OAAO;AAAA,QACV;AAAA,MAAA;AAAA,IAEF;AAAA,EAAA,CACA;AACF;"}
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
3
  const extensions = require("./extensions.cjs");
4
- const View = (sql, { dependencies } = {}) => extensions.extendEntity(({ entity, entityRegistry }) => {
4
+ const View = (sql, { dependencies, idSource, materialized } = {}) => extensions.extendEntity(({ entity, entityRegistry }) => {
5
5
  const dependenciesResolved = typeof dependencies === "function" ? dependencies() : dependencies;
6
6
  if (dependenciesResolved?.some((it) => it === void 0)) {
7
7
  throw `"undefined" value detected in dependencies of view entity ${entity.name}. This is possibly caused by circular imports.
@@ -17,7 +17,9 @@ dependencies: () => [MyEntity]
17
17
  ...entity,
18
18
  view: {
19
19
  sql,
20
- ...dependenciesResolved ? { dependencies: dependenciesResolved.map((it) => entityRegistry.getName(it)) } : {}
20
+ ...dependenciesResolved ? { dependencies: dependenciesResolved.map((it) => entityRegistry.getName(it)) } : {},
21
+ ...idSource ? { idSource } : {},
22
+ ...materialized ? { materialized: true } : {}
21
23
  }
22
24
  };
23
25
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ViewDefinition.cjs","sources":["../../../../../../packages/schema-definition/src/model/definition/ViewDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { EntityConstructor } from './types'\n\nexport const View = (sql: string, { dependencies }: { dependencies?: (() => EntityConstructor[]) | EntityConstructor[] } = {}) =>\n\textendEntity(({ entity, entityRegistry }) => {\n\t\tconst dependenciesResolved = typeof dependencies === 'function' ? dependencies() : dependencies\n\t\tif (dependenciesResolved?.some(it => it === undefined)) {\n\t\t\tthrow `\"undefined\" value detected in dependencies of view entity ${entity.name}. This is possibly caused by circular imports.\nPlease wrap the array of dependencies into a function returning this array.\n\nInstead of:\ndependencies: [MyEntity]\nUse:\ndependencies: () => [MyEntity]\n`\n\t\t}\n\t\treturn ({\n\t\t\t...entity,\n\t\t\tview: {\n\t\t\t\tsql,\n\t\t\t\t...(dependenciesResolved ? { dependencies: dependenciesResolved.map(it => entityRegistry.getName(it)) } : {}),\n\t\t\t},\n\t\t})\n\t})\n"],"names":["extendEntity"],"mappings":";;;AAGO,MAAM,OAAO,CAAC,KAAa,EAAE,aAAa,IAA0E,OAC1HA,WAAAA,aAAa,CAAC,EAAE,QAAQ,qBAAqB;AAC5C,QAAM,uBAAuB,OAAO,iBAAiB,aAAa,aAAiB,IAAA;AACnF,MAAI,sBAAsB,KAAK,CAAM,OAAA,OAAO,MAAS,GAAG;AACjD,UAAA,6DAA6D,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AASvE,SAAA;AAAA,IACP,GAAG;AAAA,IACH,MAAM;AAAA,MACL;AAAA,MACA,GAAI,uBAAuB,EAAE,cAAc,qBAAqB,IAAI,CAAM,OAAA,eAAe,QAAQ,EAAE,CAAC,EAAA,IAAM,CAAA;AAAA,IAAC;AAAA,EAE7G;AACD,CAAC;;"}
1
+ {"version":3,"file":"ViewDefinition.cjs","sources":["../../../../../../packages/schema-definition/src/model/definition/ViewDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { EntityConstructor } from './types'\nimport { DecoratorFunction } from '../../utils'\n\nexport type ViewOptions<T> = {\n\tdependencies?: (() => EntityConstructor[]) | EntityConstructor[]\n\tidSource?: readonly ((keyof T) & string)[]\n\tmaterialized?: boolean\n}\n\nexport const View = <T>(sql: string, { dependencies, idSource, materialized }: ViewOptions<T> = {}): DecoratorFunction<T> =>\n\textendEntity(({ entity, entityRegistry }) => {\n\t\tconst dependenciesResolved = typeof dependencies === 'function' ? dependencies() : dependencies\n\t\tif (dependenciesResolved?.some(it => it === undefined)) {\n\t\t\tthrow `\"undefined\" value detected in dependencies of view entity ${entity.name}. This is possibly caused by circular imports.\nPlease wrap the array of dependencies into a function returning this array.\n\nInstead of:\ndependencies: [MyEntity]\nUse:\ndependencies: () => [MyEntity]\n`\n\t\t}\n\t\treturn ({\n\t\t\t...entity,\n\t\t\tview: {\n\t\t\t\tsql,\n\t\t\t\t...(dependenciesResolved ? { dependencies: dependenciesResolved.map(it => entityRegistry.getName(it)) } : {}),\n\t\t\t\t...(idSource ? { idSource } : {}),\n\t\t\t\t...(materialized ? { materialized: true } : {}),\n\t\t\t},\n\t\t})\n\t})\n"],"names":["extendEntity"],"mappings":";;;AAUO,MAAM,OAAO,CAAI,KAAa,EAAE,cAAc,UAAU,iBAAiC,CAAA,MAC/FA,WAAAA,aAAa,CAAC,EAAE,QAAQ,qBAAqB;AAC5C,QAAM,uBAAuB,OAAO,iBAAiB,aAAa,aAAiB,IAAA;AACnF,MAAI,sBAAsB,KAAK,CAAM,OAAA,OAAO,MAAS,GAAG;AACjD,UAAA,6DAA6D,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AASvE,SAAA;AAAA,IACP,GAAG;AAAA,IACH,MAAM;AAAA,MACL;AAAA,MACA,GAAI,uBAAuB,EAAE,cAAc,qBAAqB,IAAI,CAAM,OAAA,eAAe,QAAQ,EAAE,CAAC,MAAM,CAAC;AAAA,MAC3G,GAAI,WAAW,EAAE,SAAA,IAAa,CAAC;AAAA,MAC/B,GAAI,eAAe,EAAE,cAAc,SAAS,CAAA;AAAA,IAAC;AAAA,EAE/C;AACD,CAAC;;"}
@@ -1,5 +1,5 @@
1
1
  import { extendEntity } from "./extensions.js";
2
- const View = (sql, { dependencies } = {}) => extendEntity(({ entity, entityRegistry }) => {
2
+ const View = (sql, { dependencies, idSource, materialized } = {}) => extendEntity(({ entity, entityRegistry }) => {
3
3
  const dependenciesResolved = typeof dependencies === "function" ? dependencies() : dependencies;
4
4
  if (dependenciesResolved?.some((it) => it === void 0)) {
5
5
  throw `"undefined" value detected in dependencies of view entity ${entity.name}. This is possibly caused by circular imports.
@@ -15,7 +15,9 @@ dependencies: () => [MyEntity]
15
15
  ...entity,
16
16
  view: {
17
17
  sql,
18
- ...dependenciesResolved ? { dependencies: dependenciesResolved.map((it) => entityRegistry.getName(it)) } : {}
18
+ ...dependenciesResolved ? { dependencies: dependenciesResolved.map((it) => entityRegistry.getName(it)) } : {},
19
+ ...idSource ? { idSource } : {},
20
+ ...materialized ? { materialized: true } : {}
19
21
  }
20
22
  };
21
23
  });
@@ -1 +1 @@
1
- {"version":3,"file":"ViewDefinition.js","sources":["../../../../../../packages/schema-definition/src/model/definition/ViewDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { EntityConstructor } from './types'\n\nexport const View = (sql: string, { dependencies }: { dependencies?: (() => EntityConstructor[]) | EntityConstructor[] } = {}) =>\n\textendEntity(({ entity, entityRegistry }) => {\n\t\tconst dependenciesResolved = typeof dependencies === 'function' ? dependencies() : dependencies\n\t\tif (dependenciesResolved?.some(it => it === undefined)) {\n\t\t\tthrow `\"undefined\" value detected in dependencies of view entity ${entity.name}. This is possibly caused by circular imports.\nPlease wrap the array of dependencies into a function returning this array.\n\nInstead of:\ndependencies: [MyEntity]\nUse:\ndependencies: () => [MyEntity]\n`\n\t\t}\n\t\treturn ({\n\t\t\t...entity,\n\t\t\tview: {\n\t\t\t\tsql,\n\t\t\t\t...(dependenciesResolved ? { dependencies: dependenciesResolved.map(it => entityRegistry.getName(it)) } : {}),\n\t\t\t},\n\t\t})\n\t})\n"],"names":[],"mappings":";AAGO,MAAM,OAAO,CAAC,KAAa,EAAE,aAAa,IAA0E,OAC1H,aAAa,CAAC,EAAE,QAAQ,qBAAqB;AAC5C,QAAM,uBAAuB,OAAO,iBAAiB,aAAa,aAAiB,IAAA;AACnF,MAAI,sBAAsB,KAAK,CAAM,OAAA,OAAO,MAAS,GAAG;AACjD,UAAA,6DAA6D,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AASvE,SAAA;AAAA,IACP,GAAG;AAAA,IACH,MAAM;AAAA,MACL;AAAA,MACA,GAAI,uBAAuB,EAAE,cAAc,qBAAqB,IAAI,CAAM,OAAA,eAAe,QAAQ,EAAE,CAAC,EAAA,IAAM,CAAA;AAAA,IAAC;AAAA,EAE7G;AACD,CAAC;"}
1
+ {"version":3,"file":"ViewDefinition.js","sources":["../../../../../../packages/schema-definition/src/model/definition/ViewDefinition.ts"],"sourcesContent":["import { extendEntity } from './extensions'\nimport { EntityConstructor } from './types'\nimport { DecoratorFunction } from '../../utils'\n\nexport type ViewOptions<T> = {\n\tdependencies?: (() => EntityConstructor[]) | EntityConstructor[]\n\tidSource?: readonly ((keyof T) & string)[]\n\tmaterialized?: boolean\n}\n\nexport const View = <T>(sql: string, { dependencies, idSource, materialized }: ViewOptions<T> = {}): DecoratorFunction<T> =>\n\textendEntity(({ entity, entityRegistry }) => {\n\t\tconst dependenciesResolved = typeof dependencies === 'function' ? dependencies() : dependencies\n\t\tif (dependenciesResolved?.some(it => it === undefined)) {\n\t\t\tthrow `\"undefined\" value detected in dependencies of view entity ${entity.name}. This is possibly caused by circular imports.\nPlease wrap the array of dependencies into a function returning this array.\n\nInstead of:\ndependencies: [MyEntity]\nUse:\ndependencies: () => [MyEntity]\n`\n\t\t}\n\t\treturn ({\n\t\t\t...entity,\n\t\t\tview: {\n\t\t\t\tsql,\n\t\t\t\t...(dependenciesResolved ? { dependencies: dependenciesResolved.map(it => entityRegistry.getName(it)) } : {}),\n\t\t\t\t...(idSource ? { idSource } : {}),\n\t\t\t\t...(materialized ? { materialized: true } : {}),\n\t\t\t},\n\t\t})\n\t})\n"],"names":[],"mappings":";AAUO,MAAM,OAAO,CAAI,KAAa,EAAE,cAAc,UAAU,iBAAiC,CAAA,MAC/F,aAAa,CAAC,EAAE,QAAQ,qBAAqB;AAC5C,QAAM,uBAAuB,OAAO,iBAAiB,aAAa,aAAiB,IAAA;AACnF,MAAI,sBAAsB,KAAK,CAAM,OAAA,OAAO,MAAS,GAAG;AACjD,UAAA,6DAA6D,OAAO,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAA;AASvE,SAAA;AAAA,IACP,GAAG;AAAA,IACH,MAAM;AAAA,MACL;AAAA,MACA,GAAI,uBAAuB,EAAE,cAAc,qBAAqB,IAAI,CAAM,OAAA,eAAe,QAAQ,EAAE,CAAC,MAAM,CAAC;AAAA,MAC3G,GAAI,WAAW,EAAE,SAAA,IAAa,CAAC;AAAA,MAC/B,GAAI,eAAe,EAAE,cAAc,SAAS,CAAA;AAAA,IAAC;AAAA,EAE/C;AACD,CAAC;"}
@@ -23,6 +23,9 @@ class ColumnDefinition extends FieldDefinition.FieldDefinition {
23
23
  columnType(columnType) {
24
24
  return this.withOption("columnType", columnType);
25
25
  }
26
+ list() {
27
+ return this.withOption("list", true);
28
+ }
26
29
  nullable() {
27
30
  return this.withOption("nullable", true);
28
31
  }
@@ -41,14 +44,22 @@ class ColumnDefinition extends FieldDefinition.FieldDefinition {
41
44
  typeAlias(alias) {
42
45
  return this.withOption("typeAlias", alias);
43
46
  }
44
- createField({ name, conventions, enumRegistry, entityName }) {
45
- const { type, nullable, columnName, enumDefinition, default: defaultValue, columnType, typeAlias, sequence } = this.options;
47
+ /**
48
+ * Collation for string columns
49
+ */
50
+ collation(collation) {
51
+ return this.withOption("collation", collation);
52
+ }
53
+ createField({ name, conventions, enumRegistry, entityName, options }) {
54
+ const { type, nullable, columnName, enumDefinition, default: defaultValue, columnType, typeAlias, sequence, list, collation = options.defaultCollation } = this.options;
46
55
  const common = {
47
56
  name,
48
57
  columnName: columnName || conventions.getColumnName(name),
49
58
  nullable: nullable === void 0 ? true : nullable,
59
+ ...list ? { list } : {},
50
60
  ...defaultValue !== void 0 ? { default: defaultValue } : {},
51
- ...sequence !== void 0 ? { sequence } : {}
61
+ ...sequence !== void 0 ? { sequence } : {},
62
+ ...type === schema.Model.ColumnType.String && collation !== void 0 ? { collation } : {}
52
63
  };
53
64
  if (type === schema.Model.ColumnType.Enum) {
54
65
  if (typeAlias) {
@@ -95,6 +106,9 @@ function doubleColumn() {
95
106
  function dateColumn() {
96
107
  return column(schema.Model.ColumnType.Date);
97
108
  }
109
+ function timeColumn() {
110
+ return column(schema.Model.ColumnType.Time);
111
+ }
98
112
  function dateTimeColumn(args) {
99
113
  const col = column(schema.Model.ColumnType.DateTime);
100
114
  if (!args?.precision) {
@@ -121,5 +135,6 @@ exports.enumColumn = enumColumn;
121
135
  exports.intColumn = intColumn;
122
136
  exports.jsonColumn = jsonColumn;
123
137
  exports.stringColumn = stringColumn;
138
+ exports.timeColumn = timeColumn;
124
139
  exports.uuidColumn = uuidColumn;
125
140
  //# sourceMappingURL=ColumnDefinition.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnDefinition.cjs","sources":["../../../../../../../packages/schema-definition/src/model/definition/fieldDefinitions/ColumnDefinition.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { CreateFieldContext, FieldDefinition } from './FieldDefinition'\nimport { EnumDefinition } from '../EnumDefinition'\nimport { resolveDefaultColumnType } from '@contember/schema-utils'\n\nexport class ColumnDefinition extends FieldDefinition<ColumnDefinitionOptions> {\n\ttype = 'ColumnDefinition' as const\n\n\n\tpublic static create(\n\t\ttype: Model.ColumnType,\n\t\ttypeOptions: ColumnTypeOptions = {},\n\t): ColumnDefinition {\n\t\treturn new ColumnDefinition({\n\t\t\ttype: type,\n\t\t\t...typeOptions,\n\t\t})\n\t}\n\n\n\tpublic columnName(columnName: string): ColumnDefinition {\n\t\treturn this.withOption('columnName', columnName)\n\t}\n\n\tpublic columnType(columnType: string): ColumnDefinition {\n\t\treturn this.withOption('columnType', columnType)\n\t}\n\n\tpublic nullable(): ColumnDefinition {\n\t\treturn this.withOption('nullable', true)\n\t}\n\n\tpublic notNull(): ColumnDefinition {\n\t\treturn this.withOption('nullable', false)\n\t}\n\n\tpublic sequence(options?: Partial<Model.ColumnTypeDefinition['sequence']>): ColumnDefinition {\n\t\treturn this.withOption('sequence', { precedence: 'BY DEFAULT', ...options })\n\t}\n\n\tpublic unique(options: { timing?: Model.ConstraintTiming } = {}): ColumnDefinition {\n\t\treturn this.withOption('unique', options)\n\t}\n\n\tpublic default(value: ColumnDefinition['options']['default']): ColumnDefinition {\n\t\treturn this.withOption('default', value)\n\t}\n\n\tpublic typeAlias(alias: string): ColumnDefinition {\n\t\treturn this.withOption('typeAlias', alias)\n\t}\n\n\tcreateField({ name, conventions, enumRegistry, entityName }: CreateFieldContext): Model.AnyField {\n\t\tconst { type, nullable, columnName, enumDefinition, default: defaultValue, columnType, typeAlias, sequence } = this.options\n\t\tconst common = {\n\t\t\tname: name,\n\t\t\tcolumnName: columnName || conventions.getColumnName(name),\n\t\t\tnullable: nullable === undefined ? true : nullable,\n\t\t\t...(defaultValue !== undefined ? { default: defaultValue } : {}),\n\t\t\t...(sequence !== undefined ? { sequence } : {}),\n\t\t}\n\t\tif (type === Model.ColumnType.Enum) {\n\t\t\tif (typeAlias) {\n\t\t\t\tthrow new Error('GraphQL type alias cannot be specified for enum type')\n\t\t\t}\n\t\t\tlet enumName: string\n\t\t\tif (!enumDefinition) {\n\t\t\t\tthrow new Error()\n\t\t\t}\n\t\t\tif (enumRegistry.has(enumDefinition)) {\n\t\t\t\tenumName = enumRegistry.getName(enumDefinition)\n\t\t\t} else {\n\t\t\t\tenumName = entityName + name.substring(0, 1).toUpperCase() + name.substring(1)\n\t\t\t\tenumRegistry.register(enumName, enumDefinition)\n\t\t\t}\n\n\t\t\treturn { ...common, type: type, columnType: enumName }\n\t\t}\n\t\treturn {\n\t\t\t...common,\n\t\t\ttype: type,\n\t\t\tcolumnType: columnType || resolveDefaultColumnType(type),\n\t\t\t...(typeAlias !== undefined ? { typeAlias } : {}),\n\t\t}\n\t}\n\n\tprotected withOption<K extends keyof ColumnDefinitionOptions>(key: K, value: ColumnDefinitionOptions[K]): ColumnDefinition {\n\t\treturn new ColumnDefinition({ ...this.options, [key]: value })\n\t}\n}\n\nexport function column(type: Model.ColumnType, typeOptions: ColumnTypeOptions = {}) {\n\treturn ColumnDefinition.create(type, typeOptions)\n}\n\nexport function stringColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.String)\n}\n\nexport function intColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Int)\n}\n\nexport function boolColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Bool)\n}\n\nexport function doubleColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Double)\n}\n\nexport function dateColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Date)\n}\n\nexport function dateTimeColumn(args?: { precision?: number }): ColumnDefinition {\n\tconst col = column(Model.ColumnType.DateTime)\n\tif (!args?.precision) {\n\t\treturn col\n\t}\n\treturn col.columnType(`${resolveDefaultColumnType(Model.ColumnType.DateTime)}(${args.precision})`)\n}\n\nexport function jsonColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Json)\n}\n\nexport function enumColumn(enumDefinition: EnumDefinition): ColumnDefinition {\n\treturn column(Model.ColumnType.Enum, { enumDefinition })\n}\n\nexport function uuidColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Uuid)\n}\n\nexport type ColumnTypeOptions = {\n\tenumDefinition?: EnumDefinition\n}\nexport type ColumnDefinitionOptions = {\n\ttype: Model.ColumnType\n\tcolumnType?: string\n\ttypeAlias?: string\n\tcolumnName?: string\n\tunique?: { timing?: Model.ConstraintTiming }\n\tnullable?: boolean\n\tdefault?: Model.ColumnTypeDefinition['default']\n\tsequence?: Model.ColumnTypeDefinition['sequence']\n} & ColumnTypeOptions\n"],"names":["FieldDefinition","Model","resolveDefaultColumnType"],"mappings":"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"}
1
+ {"version":3,"file":"ColumnDefinition.cjs","sources":["../../../../../../../packages/schema-definition/src/model/definition/fieldDefinitions/ColumnDefinition.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { CreateFieldContext, FieldDefinition } from './FieldDefinition'\nimport { EnumDefinition } from '../EnumDefinition'\nimport { resolveDefaultColumnType } from '@contember/schema-utils'\n\nexport class ColumnDefinition extends FieldDefinition<ColumnDefinitionOptions> {\n\ttype = 'ColumnDefinition' as const\n\n\n\tpublic static create(\n\t\ttype: Model.ColumnType,\n\t\ttypeOptions: ColumnTypeOptions = {},\n\t): ColumnDefinition {\n\t\treturn new ColumnDefinition({\n\t\t\ttype: type,\n\t\t\t...typeOptions,\n\t\t})\n\t}\n\n\n\tpublic columnName(columnName: string): ColumnDefinition {\n\t\treturn this.withOption('columnName', columnName)\n\t}\n\n\tpublic columnType(columnType: string): ColumnDefinition {\n\t\treturn this.withOption('columnType', columnType)\n\t}\n\n\tpublic list(): ColumnDefinition {\n\t\treturn this.withOption('list', true)\n\t}\n\n\tpublic nullable(): ColumnDefinition {\n\t\treturn this.withOption('nullable', true)\n\t}\n\n\tpublic notNull(): ColumnDefinition {\n\t\treturn this.withOption('nullable', false)\n\t}\n\n\tpublic sequence(options?: Partial<Model.ColumnTypeDefinition['sequence']>): ColumnDefinition {\n\t\treturn this.withOption('sequence', { precedence: 'BY DEFAULT', ...options })\n\t}\n\n\tpublic unique(options: { timing?: Model.ConstraintTiming } = {}): ColumnDefinition {\n\t\treturn this.withOption('unique', options)\n\t}\n\n\tpublic default(value: ColumnDefinition['options']['default']): ColumnDefinition {\n\t\treturn this.withOption('default', value)\n\t}\n\n\tpublic typeAlias(alias: string): ColumnDefinition {\n\t\treturn this.withOption('typeAlias', alias)\n\t}\n\n\t/**\n\t * Collation for string columns\n\t */\n\tpublic collation(collation: Model.Collation): ColumnDefinition {\n\t\treturn this.withOption('collation', collation)\n\t}\n\n\tcreateField({ name, conventions, enumRegistry, entityName, options }: CreateFieldContext): Model.AnyField {\n\t\tconst { type, nullable, columnName, enumDefinition, default: defaultValue, columnType, typeAlias, sequence, list, collation = options.defaultCollation } = this.options\n\t\tconst common = {\n\t\t\tname: name,\n\t\t\tcolumnName: columnName || conventions.getColumnName(name),\n\t\t\tnullable: nullable === undefined ? true : nullable,\n\t\t\t...(list ? { list } : {}),\n\t\t\t...(defaultValue !== undefined ? { default: defaultValue } : {}),\n\t\t\t...(sequence !== undefined ? { sequence } : {}),\n\t\t\t...(type === Model.ColumnType.String && collation !== undefined ? { collation } : {}),\n\t\t}\n\t\tif (type === Model.ColumnType.Enum) {\n\t\t\tif (typeAlias) {\n\t\t\t\tthrow new Error('GraphQL type alias cannot be specified for enum type')\n\t\t\t}\n\t\t\tlet enumName: string\n\t\t\tif (!enumDefinition) {\n\t\t\t\tthrow new Error()\n\t\t\t}\n\t\t\tif (enumRegistry.has(enumDefinition)) {\n\t\t\t\tenumName = enumRegistry.getName(enumDefinition)\n\t\t\t} else {\n\t\t\t\tenumName = entityName + name.substring(0, 1).toUpperCase() + name.substring(1)\n\t\t\t\tenumRegistry.register(enumName, enumDefinition)\n\t\t\t}\n\n\t\t\treturn { ...common, type: type, columnType: enumName }\n\t\t}\n\t\treturn {\n\t\t\t...common,\n\t\t\ttype: type,\n\t\t\tcolumnType: columnType || resolveDefaultColumnType(type),\n\t\t\t...(typeAlias !== undefined ? { typeAlias } : {}),\n\t\t}\n\t}\n\n\tprotected withOption<K extends keyof ColumnDefinitionOptions>(key: K, value: ColumnDefinitionOptions[K]): ColumnDefinition {\n\t\treturn new ColumnDefinition({ ...this.options, [key]: value })\n\t}\n}\n\nexport function column(type: Model.ColumnType, typeOptions: ColumnTypeOptions = {}) {\n\treturn ColumnDefinition.create(type, typeOptions)\n}\n\nexport function stringColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.String)\n}\n\nexport function intColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Int)\n}\n\nexport function boolColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Bool)\n}\n\nexport function doubleColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Double)\n}\n\nexport function dateColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Date)\n}\n\nexport function timeColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Time)\n}\n\nexport function dateTimeColumn(args?: { precision?: number }): ColumnDefinition {\n\tconst col = column(Model.ColumnType.DateTime)\n\tif (!args?.precision) {\n\t\treturn col\n\t}\n\treturn col.columnType(`${resolveDefaultColumnType(Model.ColumnType.DateTime)}(${args.precision})`)\n}\n\nexport function jsonColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Json)\n}\n\nexport function enumColumn(enumDefinition: EnumDefinition): ColumnDefinition {\n\treturn column(Model.ColumnType.Enum, { enumDefinition })\n}\n\nexport function uuidColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Uuid)\n}\n\nexport type ColumnTypeOptions = {\n\tenumDefinition?: EnumDefinition\n}\nexport type ColumnDefinitionOptions = {\n\ttype: Model.ColumnType\n\tcolumnType?: string\n\tlist?: boolean\n\ttypeAlias?: string\n\tcolumnName?: string\n\tunique?: { timing?: Model.ConstraintTiming }\n\tnullable?: boolean\n\tdefault?: Model.ColumnTypeDefinition['default']\n\tsequence?: Model.ColumnTypeDefinition['sequence']\n\tcollation?: Model.Collation\n} & ColumnTypeOptions\n\n"],"names":["FieldDefinition","Model","resolveDefaultColumnType"],"mappings":"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"}
@@ -21,6 +21,9 @@ class ColumnDefinition extends FieldDefinition {
21
21
  columnType(columnType) {
22
22
  return this.withOption("columnType", columnType);
23
23
  }
24
+ list() {
25
+ return this.withOption("list", true);
26
+ }
24
27
  nullable() {
25
28
  return this.withOption("nullable", true);
26
29
  }
@@ -39,14 +42,22 @@ class ColumnDefinition extends FieldDefinition {
39
42
  typeAlias(alias) {
40
43
  return this.withOption("typeAlias", alias);
41
44
  }
42
- createField({ name, conventions, enumRegistry, entityName }) {
43
- const { type, nullable, columnName, enumDefinition, default: defaultValue, columnType, typeAlias, sequence } = this.options;
45
+ /**
46
+ * Collation for string columns
47
+ */
48
+ collation(collation) {
49
+ return this.withOption("collation", collation);
50
+ }
51
+ createField({ name, conventions, enumRegistry, entityName, options }) {
52
+ const { type, nullable, columnName, enumDefinition, default: defaultValue, columnType, typeAlias, sequence, list, collation = options.defaultCollation } = this.options;
44
53
  const common = {
45
54
  name,
46
55
  columnName: columnName || conventions.getColumnName(name),
47
56
  nullable: nullable === void 0 ? true : nullable,
57
+ ...list ? { list } : {},
48
58
  ...defaultValue !== void 0 ? { default: defaultValue } : {},
49
- ...sequence !== void 0 ? { sequence } : {}
59
+ ...sequence !== void 0 ? { sequence } : {},
60
+ ...type === Model.ColumnType.String && collation !== void 0 ? { collation } : {}
50
61
  };
51
62
  if (type === Model.ColumnType.Enum) {
52
63
  if (typeAlias) {
@@ -93,6 +104,9 @@ function doubleColumn() {
93
104
  function dateColumn() {
94
105
  return column(Model.ColumnType.Date);
95
106
  }
107
+ function timeColumn() {
108
+ return column(Model.ColumnType.Time);
109
+ }
96
110
  function dateTimeColumn(args) {
97
111
  const col = column(Model.ColumnType.DateTime);
98
112
  if (!args?.precision) {
@@ -120,6 +134,7 @@ export {
120
134
  intColumn,
121
135
  jsonColumn,
122
136
  stringColumn,
137
+ timeColumn,
123
138
  uuidColumn
124
139
  };
125
140
  //# sourceMappingURL=ColumnDefinition.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColumnDefinition.js","sources":["../../../../../../../packages/schema-definition/src/model/definition/fieldDefinitions/ColumnDefinition.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { CreateFieldContext, FieldDefinition } from './FieldDefinition'\nimport { EnumDefinition } from '../EnumDefinition'\nimport { resolveDefaultColumnType } from '@contember/schema-utils'\n\nexport class ColumnDefinition extends FieldDefinition<ColumnDefinitionOptions> {\n\ttype = 'ColumnDefinition' as const\n\n\n\tpublic static create(\n\t\ttype: Model.ColumnType,\n\t\ttypeOptions: ColumnTypeOptions = {},\n\t): ColumnDefinition {\n\t\treturn new ColumnDefinition({\n\t\t\ttype: type,\n\t\t\t...typeOptions,\n\t\t})\n\t}\n\n\n\tpublic columnName(columnName: string): ColumnDefinition {\n\t\treturn this.withOption('columnName', columnName)\n\t}\n\n\tpublic columnType(columnType: string): ColumnDefinition {\n\t\treturn this.withOption('columnType', columnType)\n\t}\n\n\tpublic nullable(): ColumnDefinition {\n\t\treturn this.withOption('nullable', true)\n\t}\n\n\tpublic notNull(): ColumnDefinition {\n\t\treturn this.withOption('nullable', false)\n\t}\n\n\tpublic sequence(options?: Partial<Model.ColumnTypeDefinition['sequence']>): ColumnDefinition {\n\t\treturn this.withOption('sequence', { precedence: 'BY DEFAULT', ...options })\n\t}\n\n\tpublic unique(options: { timing?: Model.ConstraintTiming } = {}): ColumnDefinition {\n\t\treturn this.withOption('unique', options)\n\t}\n\n\tpublic default(value: ColumnDefinition['options']['default']): ColumnDefinition {\n\t\treturn this.withOption('default', value)\n\t}\n\n\tpublic typeAlias(alias: string): ColumnDefinition {\n\t\treturn this.withOption('typeAlias', alias)\n\t}\n\n\tcreateField({ name, conventions, enumRegistry, entityName }: CreateFieldContext): Model.AnyField {\n\t\tconst { type, nullable, columnName, enumDefinition, default: defaultValue, columnType, typeAlias, sequence } = this.options\n\t\tconst common = {\n\t\t\tname: name,\n\t\t\tcolumnName: columnName || conventions.getColumnName(name),\n\t\t\tnullable: nullable === undefined ? true : nullable,\n\t\t\t...(defaultValue !== undefined ? { default: defaultValue } : {}),\n\t\t\t...(sequence !== undefined ? { sequence } : {}),\n\t\t}\n\t\tif (type === Model.ColumnType.Enum) {\n\t\t\tif (typeAlias) {\n\t\t\t\tthrow new Error('GraphQL type alias cannot be specified for enum type')\n\t\t\t}\n\t\t\tlet enumName: string\n\t\t\tif (!enumDefinition) {\n\t\t\t\tthrow new Error()\n\t\t\t}\n\t\t\tif (enumRegistry.has(enumDefinition)) {\n\t\t\t\tenumName = enumRegistry.getName(enumDefinition)\n\t\t\t} else {\n\t\t\t\tenumName = entityName + name.substring(0, 1).toUpperCase() + name.substring(1)\n\t\t\t\tenumRegistry.register(enumName, enumDefinition)\n\t\t\t}\n\n\t\t\treturn { ...common, type: type, columnType: enumName }\n\t\t}\n\t\treturn {\n\t\t\t...common,\n\t\t\ttype: type,\n\t\t\tcolumnType: columnType || resolveDefaultColumnType(type),\n\t\t\t...(typeAlias !== undefined ? { typeAlias } : {}),\n\t\t}\n\t}\n\n\tprotected withOption<K extends keyof ColumnDefinitionOptions>(key: K, value: ColumnDefinitionOptions[K]): ColumnDefinition {\n\t\treturn new ColumnDefinition({ ...this.options, [key]: value })\n\t}\n}\n\nexport function column(type: Model.ColumnType, typeOptions: ColumnTypeOptions = {}) {\n\treturn ColumnDefinition.create(type, typeOptions)\n}\n\nexport function stringColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.String)\n}\n\nexport function intColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Int)\n}\n\nexport function boolColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Bool)\n}\n\nexport function doubleColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Double)\n}\n\nexport function dateColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Date)\n}\n\nexport function dateTimeColumn(args?: { precision?: number }): ColumnDefinition {\n\tconst col = column(Model.ColumnType.DateTime)\n\tif (!args?.precision) {\n\t\treturn col\n\t}\n\treturn col.columnType(`${resolveDefaultColumnType(Model.ColumnType.DateTime)}(${args.precision})`)\n}\n\nexport function jsonColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Json)\n}\n\nexport function enumColumn(enumDefinition: EnumDefinition): ColumnDefinition {\n\treturn column(Model.ColumnType.Enum, { enumDefinition })\n}\n\nexport function uuidColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Uuid)\n}\n\nexport type ColumnTypeOptions = {\n\tenumDefinition?: EnumDefinition\n}\nexport type ColumnDefinitionOptions = {\n\ttype: Model.ColumnType\n\tcolumnType?: string\n\ttypeAlias?: string\n\tcolumnName?: string\n\tunique?: { timing?: Model.ConstraintTiming }\n\tnullable?: boolean\n\tdefault?: Model.ColumnTypeDefinition['default']\n\tsequence?: Model.ColumnTypeDefinition['sequence']\n} & ColumnTypeOptions\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ColumnDefinition.js","sources":["../../../../../../../packages/schema-definition/src/model/definition/fieldDefinitions/ColumnDefinition.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { CreateFieldContext, FieldDefinition } from './FieldDefinition'\nimport { EnumDefinition } from '../EnumDefinition'\nimport { resolveDefaultColumnType } from '@contember/schema-utils'\n\nexport class ColumnDefinition extends FieldDefinition<ColumnDefinitionOptions> {\n\ttype = 'ColumnDefinition' as const\n\n\n\tpublic static create(\n\t\ttype: Model.ColumnType,\n\t\ttypeOptions: ColumnTypeOptions = {},\n\t): ColumnDefinition {\n\t\treturn new ColumnDefinition({\n\t\t\ttype: type,\n\t\t\t...typeOptions,\n\t\t})\n\t}\n\n\n\tpublic columnName(columnName: string): ColumnDefinition {\n\t\treturn this.withOption('columnName', columnName)\n\t}\n\n\tpublic columnType(columnType: string): ColumnDefinition {\n\t\treturn this.withOption('columnType', columnType)\n\t}\n\n\tpublic list(): ColumnDefinition {\n\t\treturn this.withOption('list', true)\n\t}\n\n\tpublic nullable(): ColumnDefinition {\n\t\treturn this.withOption('nullable', true)\n\t}\n\n\tpublic notNull(): ColumnDefinition {\n\t\treturn this.withOption('nullable', false)\n\t}\n\n\tpublic sequence(options?: Partial<Model.ColumnTypeDefinition['sequence']>): ColumnDefinition {\n\t\treturn this.withOption('sequence', { precedence: 'BY DEFAULT', ...options })\n\t}\n\n\tpublic unique(options: { timing?: Model.ConstraintTiming } = {}): ColumnDefinition {\n\t\treturn this.withOption('unique', options)\n\t}\n\n\tpublic default(value: ColumnDefinition['options']['default']): ColumnDefinition {\n\t\treturn this.withOption('default', value)\n\t}\n\n\tpublic typeAlias(alias: string): ColumnDefinition {\n\t\treturn this.withOption('typeAlias', alias)\n\t}\n\n\t/**\n\t * Collation for string columns\n\t */\n\tpublic collation(collation: Model.Collation): ColumnDefinition {\n\t\treturn this.withOption('collation', collation)\n\t}\n\n\tcreateField({ name, conventions, enumRegistry, entityName, options }: CreateFieldContext): Model.AnyField {\n\t\tconst { type, nullable, columnName, enumDefinition, default: defaultValue, columnType, typeAlias, sequence, list, collation = options.defaultCollation } = this.options\n\t\tconst common = {\n\t\t\tname: name,\n\t\t\tcolumnName: columnName || conventions.getColumnName(name),\n\t\t\tnullable: nullable === undefined ? true : nullable,\n\t\t\t...(list ? { list } : {}),\n\t\t\t...(defaultValue !== undefined ? { default: defaultValue } : {}),\n\t\t\t...(sequence !== undefined ? { sequence } : {}),\n\t\t\t...(type === Model.ColumnType.String && collation !== undefined ? { collation } : {}),\n\t\t}\n\t\tif (type === Model.ColumnType.Enum) {\n\t\t\tif (typeAlias) {\n\t\t\t\tthrow new Error('GraphQL type alias cannot be specified for enum type')\n\t\t\t}\n\t\t\tlet enumName: string\n\t\t\tif (!enumDefinition) {\n\t\t\t\tthrow new Error()\n\t\t\t}\n\t\t\tif (enumRegistry.has(enumDefinition)) {\n\t\t\t\tenumName = enumRegistry.getName(enumDefinition)\n\t\t\t} else {\n\t\t\t\tenumName = entityName + name.substring(0, 1).toUpperCase() + name.substring(1)\n\t\t\t\tenumRegistry.register(enumName, enumDefinition)\n\t\t\t}\n\n\t\t\treturn { ...common, type: type, columnType: enumName }\n\t\t}\n\t\treturn {\n\t\t\t...common,\n\t\t\ttype: type,\n\t\t\tcolumnType: columnType || resolveDefaultColumnType(type),\n\t\t\t...(typeAlias !== undefined ? { typeAlias } : {}),\n\t\t}\n\t}\n\n\tprotected withOption<K extends keyof ColumnDefinitionOptions>(key: K, value: ColumnDefinitionOptions[K]): ColumnDefinition {\n\t\treturn new ColumnDefinition({ ...this.options, [key]: value })\n\t}\n}\n\nexport function column(type: Model.ColumnType, typeOptions: ColumnTypeOptions = {}) {\n\treturn ColumnDefinition.create(type, typeOptions)\n}\n\nexport function stringColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.String)\n}\n\nexport function intColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Int)\n}\n\nexport function boolColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Bool)\n}\n\nexport function doubleColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Double)\n}\n\nexport function dateColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Date)\n}\n\nexport function timeColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Time)\n}\n\nexport function dateTimeColumn(args?: { precision?: number }): ColumnDefinition {\n\tconst col = column(Model.ColumnType.DateTime)\n\tif (!args?.precision) {\n\t\treturn col\n\t}\n\treturn col.columnType(`${resolveDefaultColumnType(Model.ColumnType.DateTime)}(${args.precision})`)\n}\n\nexport function jsonColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Json)\n}\n\nexport function enumColumn(enumDefinition: EnumDefinition): ColumnDefinition {\n\treturn column(Model.ColumnType.Enum, { enumDefinition })\n}\n\nexport function uuidColumn(): ColumnDefinition {\n\treturn column(Model.ColumnType.Uuid)\n}\n\nexport type ColumnTypeOptions = {\n\tenumDefinition?: EnumDefinition\n}\nexport type ColumnDefinitionOptions = {\n\ttype: Model.ColumnType\n\tcolumnType?: string\n\tlist?: boolean\n\ttypeAlias?: string\n\tcolumnName?: string\n\tunique?: { timing?: Model.ConstraintTiming }\n\tnullable?: boolean\n\tdefault?: Model.ColumnTypeDefinition['default']\n\tsequence?: Model.ColumnTypeDefinition['sequence']\n\tcollation?: Model.Collation\n} & ColumnTypeOptions\n\n"],"names":[],"mappings":"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"}
@@ -25,7 +25,8 @@ class Entity {
25
25
  function createModel(definitions, options = {}) {
26
26
  const schemaBuilder = new SchemaBuilder.SchemaBuilder(
27
27
  new schemaUtils.DefaultNamingConventions(),
28
- options.strictDefinitionValidator
28
+ options.strictDefinitionValidator,
29
+ { defaultCollation: options.defaultCollation }
29
30
  );
30
31
  for (const [name, definition] of Object.entries(definitions)) {
31
32
  if (definition instanceof EnumDefinition.EnumDefinition) {
@@ -51,6 +52,7 @@ exports.enumColumn = ColumnDefinition.enumColumn;
51
52
  exports.intColumn = ColumnDefinition.intColumn;
52
53
  exports.jsonColumn = ColumnDefinition.jsonColumn;
53
54
  exports.stringColumn = ColumnDefinition.stringColumn;
55
+ exports.timeColumn = ColumnDefinition.timeColumn;
54
56
  exports.uuidColumn = ColumnDefinition.uuidColumn;
55
57
  exports.FieldDefinition = FieldDefinition.FieldDefinition;
56
58
  exports.ManyHasManyDefinition = ManyHasManyDefinition.ManyHasManyDefinition;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../../../packages/schema-definition/src/model/definition/index.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { EnumDefinition } from './EnumDefinition'\nimport { SchemaBuilder } from './internal'\nimport 'reflect-metadata'\nimport { FieldDefinition } from './fieldDefinitions'\nimport { isEntityConstructor } from '../../utils'\nimport { DefaultNamingConventions } from '@contember/schema-utils'\nimport { StrictOptions, StrictDefinitionValidator } from '../../strict'\n\nexport * from './fieldDefinitions'\nexport * from './EventLogDefinition'\nexport * from './IndexDefinition'\nexport * from './OrderByDefinition'\nexport * from './EnumDefinition'\nexport * from './UniqueDefinition'\nexport * from './ViewDefinition'\nexport { extendEntity, type EntityExtension } from './extensions'\n\nexport abstract class Entity {\n\t[key: string]: FieldDefinition<any> | undefined\n}\n\nexport type ModelDefinition<M> = {\n\t[K in keyof M]: unknown\n}\n\nexport function createModel<M extends ModelDefinition<M>>(definitions: M, options: {\n\tstrictDefinitionValidator?: StrictDefinitionValidator\n} = {}): Model.Schema {\n\tconst schemaBuilder = new SchemaBuilder(\n\t\tnew DefaultNamingConventions(),\n\t\toptions.strictDefinitionValidator,\n\t)\n\tfor (const [name, definition] of Object.entries(definitions)) {\n\t\tif (definition instanceof EnumDefinition) {\n\t\t\tschemaBuilder.addEnum(name, definition)\n\t\t} else if (isEntityConstructor(definition)) {\n\t\t\tschemaBuilder.addEntity(name, definition)\n\t\t}\n\t}\n\tconst schema = schemaBuilder.createSchema()\n\treturn schema\n}\n\nexport const OnDelete = Model.OnDelete\nexport const OrderDirection = Model.OrderDirection\nexport { EnumDefinition }\n"],"names":["SchemaBuilder","DefaultNamingConventions","EnumDefinition","isEntityConstructor","schema","Model"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAkBO,MAAe,OAAO;AAE7B;AAMO,SAAS,YAA0C,aAAgB,UAEtE,IAAkB;AACrB,QAAM,gBAAgB,IAAIA,cAAA;AAAA,IACzB,IAAIC,qCAAyB;AAAA,IAC7B,QAAQ;AAAA,EACT;AACA,aAAW,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC7D,QAAI,sBAAsBC,eAAAA,gBAAgB;AAC3B,oBAAA,QAAQ,MAAM,UAAU;AAAA,IAAA,WAC5BC,uBAAAA,oBAAoB,UAAU,GAAG;AAC7B,oBAAA,UAAU,MAAM,UAAU;AAAA,IAAA;AAAA,EACzC;AAEK,QAAAC,UAAS,cAAc,aAAa;AACnC,SAAAA;AACR;AAEO,MAAM,WAAWC,OAAAA,MAAM;AACvB,MAAM,iBAAiBA,OAAAA,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../../../packages/schema-definition/src/model/definition/index.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { EnumDefinition } from './EnumDefinition'\nimport { SchemaBuilder } from './internal'\nimport 'reflect-metadata'\nimport { FieldDefinition } from './fieldDefinitions'\nimport { isEntityConstructor } from '../../utils'\nimport { DefaultNamingConventions } from '@contember/schema-utils'\nimport { StrictOptions, StrictDefinitionValidator } from '../../strict'\n\nexport * from './fieldDefinitions'\nexport * from './EventLogDefinition'\nexport * from './IndexDefinition'\nexport * from './OrderByDefinition'\nexport * from './EnumDefinition'\nexport * from './UniqueDefinition'\nexport * from './ViewDefinition'\nexport { extendEntity, type EntityExtension } from './extensions'\n\nexport abstract class Entity {\n\t[key: string]: FieldDefinition<any> | undefined\n}\n\nexport type ModelDefinition<M> = {\n\t[K in keyof M]: unknown\n}\n\nexport function createModel<M extends ModelDefinition<M>>(definitions: M, options: {\n\tstrictDefinitionValidator?: StrictDefinitionValidator\n\tdefaultCollation?: string\n} = {}): Model.Schema {\n\tconst schemaBuilder = new SchemaBuilder(\n\t\tnew DefaultNamingConventions(),\n\t\toptions.strictDefinitionValidator,\n\t\t{ defaultCollation: options.defaultCollation },\n\t)\n\tfor (const [name, definition] of Object.entries(definitions)) {\n\t\tif (definition instanceof EnumDefinition) {\n\t\t\tschemaBuilder.addEnum(name, definition)\n\t\t} else if (isEntityConstructor(definition)) {\n\t\t\tschemaBuilder.addEntity(name, definition)\n\t\t}\n\t}\n\tconst schema = schemaBuilder.createSchema()\n\treturn schema\n}\n\nexport const OnDelete = Model.OnDelete\nexport const OrderDirection = Model.OrderDirection\nexport { EnumDefinition }\n"],"names":["SchemaBuilder","DefaultNamingConventions","EnumDefinition","isEntityConstructor","schema","Model"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAkBO,MAAe,OAAO;AAE7B;AAMO,SAAS,YAA0C,aAAgB,UAGtE,IAAkB;AACrB,QAAM,gBAAgB,IAAIA,cAAA;AAAA,IACzB,IAAIC,qCAAyB;AAAA,IAC7B,QAAQ;AAAA,IACR,EAAE,kBAAkB,QAAQ,iBAAiB;AAAA,EAC9C;AACA,aAAW,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC7D,QAAI,sBAAsBC,eAAAA,gBAAgB;AAC3B,oBAAA,QAAQ,MAAM,UAAU;AAAA,IAAA,WAC5BC,uBAAAA,oBAAoB,UAAU,GAAG;AAC7B,oBAAA,UAAU,MAAM,UAAU;AAAA,IAAA;AAAA,EACzC;AAEK,QAAAC,UAAS,cAAc,aAAa;AACnC,SAAAA;AACR;AAEO,MAAM,WAAWC,OAAAA,MAAM;AACvB,MAAM,iBAAiBA,OAAAA,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -5,7 +5,7 @@ import { SchemaBuilder } from "./internal/SchemaBuilder.js";
5
5
  import "reflect-metadata";
6
6
  import { isEntityConstructor } from "../../utils/filterEntityDefinition.js";
7
7
  import { DefaultNamingConventions } from "@contember/schema-utils";
8
- import { ColumnDefinition, boolColumn, column, dateColumn, dateTimeColumn, doubleColumn, enumColumn, intColumn, jsonColumn, stringColumn, uuidColumn } from "./fieldDefinitions/ColumnDefinition.js";
8
+ import { ColumnDefinition, boolColumn, column, dateColumn, dateTimeColumn, doubleColumn, enumColumn, intColumn, jsonColumn, stringColumn, timeColumn, uuidColumn } from "./fieldDefinitions/ColumnDefinition.js";
9
9
  import { FieldDefinition } from "./fieldDefinitions/FieldDefinition.js";
10
10
  import { ManyHasManyDefinition, manyHasMany } from "./fieldDefinitions/ManyHasManyDefinition.js";
11
11
  import { ManyHasManyInverseDefinition, manyHasManyInverse } from "./fieldDefinitions/ManyHasManyInverseDefinition.js";
@@ -24,7 +24,8 @@ class Entity {
24
24
  function createModel(definitions, options = {}) {
25
25
  const schemaBuilder = new SchemaBuilder(
26
26
  new DefaultNamingConventions(),
27
- options.strictDefinitionValidator
27
+ options.strictDefinitionValidator,
28
+ { defaultCollation: options.defaultCollation }
28
29
  );
29
30
  for (const [name, definition] of Object.entries(definitions)) {
30
31
  if (definition instanceof EnumDefinition) {
@@ -74,6 +75,7 @@ export {
74
75
  oneHasOne,
75
76
  oneHasOneInverse,
76
77
  stringColumn,
78
+ timeColumn,
77
79
  uuidColumn
78
80
  };
79
81
  //# sourceMappingURL=index.js.map