@contember/schema-utils 2.0.0-alpha.9 → 2.0.0-beta.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (204) hide show
  1. package/dist/development/index.cjs +2 -0
  2. package/dist/development/index.cjs.map +1 -1
  3. package/dist/development/index.js +2 -0
  4. package/dist/development/index.js.map +1 -1
  5. package/dist/development/src/acl/AllowAllPermissionFactory.cjs.map +1 -1
  6. package/dist/development/src/acl/AllowAllPermissionFactory.js.map +1 -1
  7. package/dist/development/src/acl/PredicateDefinitionProcessor.cjs.map +1 -1
  8. package/dist/development/src/acl/PredicateDefinitionProcessor.js.map +1 -1
  9. package/dist/development/src/acl/schemaUtils.cjs.map +1 -1
  10. package/dist/development/src/acl/schemaUtils.js.map +1 -1
  11. package/dist/development/src/dataUtils.cjs.map +1 -1
  12. package/dist/development/src/dataUtils.js.map +1 -1
  13. package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.cjs +1 -2
  14. package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.cjs.map +1 -1
  15. package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.js +1 -2
  16. package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.js.map +1 -1
  17. package/dist/development/src/definition-generator/DefinitionCodeGenerator.cjs +5 -9
  18. package/dist/development/src/definition-generator/DefinitionCodeGenerator.cjs.map +1 -1
  19. package/dist/development/src/definition-generator/DefinitionCodeGenerator.js +5 -9
  20. package/dist/development/src/definition-generator/DefinitionCodeGenerator.js.map +1 -1
  21. package/dist/development/src/definition-generator/DefinitionNamingConventions.cjs.map +1 -1
  22. package/dist/development/src/definition-generator/DefinitionNamingConventions.js.map +1 -1
  23. package/dist/development/src/definition-generator/TsDefinitionGenerator.cjs.map +1 -1
  24. package/dist/development/src/definition-generator/TsDefinitionGenerator.js.map +1 -1
  25. package/dist/development/src/lax/LaxSchemaConverter.cjs.map +1 -1
  26. package/dist/development/src/lax/LaxSchemaConverter.js.map +1 -1
  27. package/dist/development/src/lax/schema.cjs.map +1 -1
  28. package/dist/development/src/lax/schema.js.map +1 -1
  29. package/dist/development/src/model/NamingConventions.cjs.map +1 -1
  30. package/dist/development/src/model/NamingConventions.js.map +1 -1
  31. package/dist/development/src/model/modelUtils.cjs.map +1 -1
  32. package/dist/development/src/model/modelUtils.js.map +1 -1
  33. package/dist/development/src/model/resolveDefaultColumnType.cjs.map +1 -1
  34. package/dist/development/src/model/resolveDefaultColumnType.js.map +1 -1
  35. package/dist/development/src/schemaChecksum.cjs +9 -0
  36. package/dist/development/src/schemaChecksum.cjs.map +1 -0
  37. package/dist/development/src/schemaChecksum.js +9 -0
  38. package/dist/development/src/schemaChecksum.js.map +1 -0
  39. package/dist/development/src/schemaFilter.cjs.map +1 -1
  40. package/dist/development/src/schemaFilter.js.map +1 -1
  41. package/dist/development/src/schemaNormalizer.cjs.map +1 -1
  42. package/dist/development/src/schemaNormalizer.js.map +1 -1
  43. package/dist/development/src/type-schema/acl.cjs.map +1 -1
  44. package/dist/development/src/type-schema/acl.js.map +1 -1
  45. package/dist/development/src/type-schema/actions.cjs.map +1 -1
  46. package/dist/development/src/type-schema/actions.js.map +1 -1
  47. package/dist/development/src/type-schema/condition.cjs.map +1 -1
  48. package/dist/development/src/type-schema/condition.js.map +1 -1
  49. package/dist/development/src/type-schema/model.cjs +6 -1
  50. package/dist/development/src/type-schema/model.cjs.map +1 -1
  51. package/dist/development/src/type-schema/model.js +7 -1
  52. package/dist/development/src/type-schema/model.js.map +1 -1
  53. package/dist/development/src/type-schema/settings.cjs +1 -0
  54. package/dist/development/src/type-schema/settings.cjs.map +1 -1
  55. package/dist/development/src/type-schema/settings.js +1 -0
  56. package/dist/development/src/type-schema/settings.js.map +1 -1
  57. package/dist/development/src/type-schema/validation.cjs.map +1 -1
  58. package/dist/development/src/type-schema/validation.js.map +1 -1
  59. package/dist/development/src/type-schema/where.cjs.map +1 -1
  60. package/dist/development/src/type-schema/where.js.map +1 -1
  61. package/dist/development/src/utils/deepCompare.cjs.map +1 -1
  62. package/dist/development/src/utils/deepCompare.js.map +1 -1
  63. package/dist/development/src/utils/printJsValue.cjs.map +1 -1
  64. package/dist/development/src/utils/printJsValue.js.map +1 -1
  65. package/dist/development/src/validation/AclValidator.cjs.map +1 -1
  66. package/dist/development/src/validation/AclValidator.js.map +1 -1
  67. package/dist/development/src/validation/ActionsValidator.cjs.map +1 -1
  68. package/dist/development/src/validation/ActionsValidator.js.map +1 -1
  69. package/dist/development/src/validation/MembershipResolver.cjs.map +1 -1
  70. package/dist/development/src/validation/MembershipResolver.js.map +1 -1
  71. package/dist/development/src/validation/ModelValidator.cjs.map +1 -1
  72. package/dist/development/src/validation/ModelValidator.js.map +1 -1
  73. package/dist/development/src/validation/SchemaValidator.cjs.map +1 -1
  74. package/dist/development/src/validation/SchemaValidator.js.map +1 -1
  75. package/dist/development/src/validation/ValidationValidator.cjs.map +1 -1
  76. package/dist/development/src/validation/ValidationValidator.js.map +1 -1
  77. package/dist/development/src/validation/errors.cjs.map +1 -1
  78. package/dist/development/src/validation/errors.js.map +1 -1
  79. package/dist/production/index.cjs +2 -0
  80. package/dist/production/index.cjs.map +1 -1
  81. package/dist/production/index.js +2 -0
  82. package/dist/production/index.js.map +1 -1
  83. package/dist/production/src/acl/AllowAllPermissionFactory.cjs.map +1 -1
  84. package/dist/production/src/acl/AllowAllPermissionFactory.js.map +1 -1
  85. package/dist/production/src/acl/PredicateDefinitionProcessor.cjs.map +1 -1
  86. package/dist/production/src/acl/PredicateDefinitionProcessor.js.map +1 -1
  87. package/dist/production/src/acl/schemaUtils.cjs.map +1 -1
  88. package/dist/production/src/acl/schemaUtils.js.map +1 -1
  89. package/dist/production/src/dataUtils.cjs.map +1 -1
  90. package/dist/production/src/dataUtils.js.map +1 -1
  91. package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.cjs +1 -2
  92. package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.cjs.map +1 -1
  93. package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.js +1 -2
  94. package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.js.map +1 -1
  95. package/dist/production/src/definition-generator/DefinitionCodeGenerator.cjs +5 -9
  96. package/dist/production/src/definition-generator/DefinitionCodeGenerator.cjs.map +1 -1
  97. package/dist/production/src/definition-generator/DefinitionCodeGenerator.js +5 -9
  98. package/dist/production/src/definition-generator/DefinitionCodeGenerator.js.map +1 -1
  99. package/dist/production/src/definition-generator/DefinitionNamingConventions.cjs.map +1 -1
  100. package/dist/production/src/definition-generator/DefinitionNamingConventions.js.map +1 -1
  101. package/dist/production/src/definition-generator/TsDefinitionGenerator.cjs.map +1 -1
  102. package/dist/production/src/definition-generator/TsDefinitionGenerator.js.map +1 -1
  103. package/dist/production/src/lax/LaxSchemaConverter.cjs.map +1 -1
  104. package/dist/production/src/lax/LaxSchemaConverter.js.map +1 -1
  105. package/dist/production/src/lax/schema.cjs.map +1 -1
  106. package/dist/production/src/lax/schema.js.map +1 -1
  107. package/dist/production/src/model/NamingConventions.cjs.map +1 -1
  108. package/dist/production/src/model/NamingConventions.js.map +1 -1
  109. package/dist/production/src/model/modelUtils.cjs.map +1 -1
  110. package/dist/production/src/model/modelUtils.js.map +1 -1
  111. package/dist/production/src/model/resolveDefaultColumnType.cjs.map +1 -1
  112. package/dist/production/src/model/resolveDefaultColumnType.js.map +1 -1
  113. package/dist/production/src/schemaChecksum.cjs +9 -0
  114. package/dist/production/src/schemaChecksum.cjs.map +1 -0
  115. package/dist/production/src/schemaChecksum.js +9 -0
  116. package/dist/production/src/schemaChecksum.js.map +1 -0
  117. package/dist/production/src/schemaFilter.cjs.map +1 -1
  118. package/dist/production/src/schemaFilter.js.map +1 -1
  119. package/dist/production/src/schemaNormalizer.cjs.map +1 -1
  120. package/dist/production/src/schemaNormalizer.js.map +1 -1
  121. package/dist/production/src/type-schema/acl.cjs.map +1 -1
  122. package/dist/production/src/type-schema/acl.js.map +1 -1
  123. package/dist/production/src/type-schema/actions.cjs.map +1 -1
  124. package/dist/production/src/type-schema/actions.js.map +1 -1
  125. package/dist/production/src/type-schema/condition.cjs.map +1 -1
  126. package/dist/production/src/type-schema/condition.js.map +1 -1
  127. package/dist/production/src/type-schema/model.cjs +6 -1
  128. package/dist/production/src/type-schema/model.cjs.map +1 -1
  129. package/dist/production/src/type-schema/model.js +7 -1
  130. package/dist/production/src/type-schema/model.js.map +1 -1
  131. package/dist/production/src/type-schema/settings.cjs +1 -0
  132. package/dist/production/src/type-schema/settings.cjs.map +1 -1
  133. package/dist/production/src/type-schema/settings.js +1 -0
  134. package/dist/production/src/type-schema/settings.js.map +1 -1
  135. package/dist/production/src/type-schema/validation.cjs.map +1 -1
  136. package/dist/production/src/type-schema/validation.js.map +1 -1
  137. package/dist/production/src/type-schema/where.cjs.map +1 -1
  138. package/dist/production/src/type-schema/where.js.map +1 -1
  139. package/dist/production/src/utils/deepCompare.cjs.map +1 -1
  140. package/dist/production/src/utils/deepCompare.js.map +1 -1
  141. package/dist/production/src/utils/printJsValue.cjs.map +1 -1
  142. package/dist/production/src/utils/printJsValue.js.map +1 -1
  143. package/dist/production/src/validation/AclValidator.cjs.map +1 -1
  144. package/dist/production/src/validation/AclValidator.js.map +1 -1
  145. package/dist/production/src/validation/ActionsValidator.cjs.map +1 -1
  146. package/dist/production/src/validation/ActionsValidator.js.map +1 -1
  147. package/dist/production/src/validation/MembershipResolver.cjs.map +1 -1
  148. package/dist/production/src/validation/MembershipResolver.js.map +1 -1
  149. package/dist/production/src/validation/ModelValidator.cjs.map +1 -1
  150. package/dist/production/src/validation/ModelValidator.js.map +1 -1
  151. package/dist/production/src/validation/SchemaValidator.cjs.map +1 -1
  152. package/dist/production/src/validation/SchemaValidator.js.map +1 -1
  153. package/dist/production/src/validation/ValidationValidator.cjs.map +1 -1
  154. package/dist/production/src/validation/ValidationValidator.js.map +1 -1
  155. package/dist/production/src/validation/errors.cjs.map +1 -1
  156. package/dist/production/src/validation/errors.js.map +1 -1
  157. package/dist/tests/cases/unit/modelSchema.test.d.ts +2 -0
  158. package/dist/tests/cases/unit/modelSchema.test.d.ts.map +1 -0
  159. package/dist/tests/cases/unit/schemas/acl.d.ts +7 -7
  160. package/dist/tests/cases/unit/schemas/acl.d.ts.map +1 -1
  161. package/dist/tests/cases/unit/schemas/basic.d.ts +1 -1
  162. package/dist/tests/cases/unit/schemas/basic.d.ts.map +1 -1
  163. package/dist/tests/cases/unit/schemas/complex.d.ts +12 -0
  164. package/dist/tests/cases/unit/schemas/complex.d.ts.map +1 -0
  165. package/dist/tests/cases/unit/schemas/enum.d.ts +3 -3
  166. package/dist/tests/cases/unit/schemas/enum.d.ts.map +1 -1
  167. package/dist/tests/cases/unit/schemas/relations.d.ts +7 -7
  168. package/dist/tests/cases/unit/schemas/relations.d.ts.map +1 -1
  169. package/dist/tests/cases/unit/schemas/unique.d.ts +1 -1
  170. package/dist/tests/cases/unit/schemas/unique.d.ts.map +1 -1
  171. package/dist/tests/cases/unit/schemas/view.d.ts +4 -0
  172. package/dist/tests/cases/unit/schemas/view.d.ts.map +1 -0
  173. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  174. package/dist/types/dataUtils.d.ts +1 -1
  175. package/dist/types/dataUtils.d.ts.map +1 -1
  176. package/dist/types/definition-generator/DefinitionCodeGenerator.d.ts.map +1 -1
  177. package/dist/types/index.d.ts +1 -0
  178. package/dist/types/index.d.ts.map +1 -1
  179. package/dist/types/schemaChecksum.d.ts +3 -0
  180. package/dist/types/schemaChecksum.d.ts.map +1 -0
  181. package/dist/types/tsconfig.tsbuildinfo +1 -1
  182. package/dist/types/type-schema/model.d.ts.map +1 -1
  183. package/dist/types/type-schema/settings.d.ts +20 -28
  184. package/dist/types/type-schema/settings.d.ts.map +1 -1
  185. package/package.json +6 -6
  186. package/src/dataUtils.ts +2 -2
  187. package/src/definition-generator/AclDefinitionCodeGenerator.ts +1 -1
  188. package/src/definition-generator/DefinitionCodeGenerator.ts +10 -18
  189. package/src/index.ts +1 -0
  190. package/src/schemaChecksum.ts +12 -0
  191. package/src/type-schema/model.ts +7 -1
  192. package/src/type-schema/settings.ts +1 -0
  193. package/tests/cases/unit/conditionSchema.test.ts +8 -8
  194. package/tests/cases/unit/deepCompare.test.ts +4 -4
  195. package/tests/cases/unit/laxSchemaConverter.test.ts +4 -4
  196. package/tests/cases/unit/membershipResolver.test.ts +17 -17
  197. package/tests/cases/unit/modelSchema.test.ts +88 -0
  198. package/tests/cases/unit/modelValidator.test.ts +3 -3
  199. package/tests/cases/unit/printJsvalue.test.ts +49 -61
  200. package/tests/cases/unit/schemas/acl.ts +7 -9
  201. package/tests/cases/unit/schemas/complex.ts +38 -0
  202. package/tests/cases/unit/schemas/view.ts +6 -0
  203. package/tests/cases/unit/tsDefinitionGenerator.test.ts +5 -1
  204. package/tests/cases/unit/whereSchema.test.ts +10 -10
@@ -1 +1 @@
1
- {"version":3,"file":"LaxSchemaConverter.cjs","sources":["../../../../../packages/schema-utils/src/lax/LaxSchemaConverter.ts"],"sourcesContent":["import { Model, Schema, Writable } from '@contember/schema'\nimport { LaxSchema, LaxSchemaColumn, LaxSchemaEnum, LaxSchemaField, LaxSchemaRelation } from './schema'\nimport { DefaultNamingConventions, NamingConventions, resolveDefaultColumnType } from '../model'\nimport { emptySchema } from '../index'\n\nconst simpleColumnTypes: { [K in LaxSchemaColumn['type']]: { type: Model.ColumnType; columnType: string } } = {\n\tboolean: { type: Model.ColumnType.Bool, columnType: 'boolean' },\n\tint: { type: Model.ColumnType.Int, columnType: 'integer' },\n\tdate: { type: Model.ColumnType.Date, columnType: 'date' },\n\tdatetime: { type: Model.ColumnType.DateTime, columnType: 'timestamptz' },\n\tfloat: { type: Model.ColumnType.Double, columnType: 'double precision' },\n\tjson: { type: Model.ColumnType.Json, columnType: 'jsonb' },\n\tstring: { type: Model.ColumnType.String, columnType: 'text' },\n}\n\nconst isColumnDefinition = (field: LaxSchemaField): field is LaxSchemaColumn => field.type in simpleColumnTypes\n\nexport class LaxSchemaConverter {\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic convert(): Schema {\n\t\tconst builder = new LaxSchemaBuilder(this.schema, this.conventions)\n\t\treturn builder.build()\n\t}\n\n}\n\nclass LaxSchemaBuilder {\n\tprivate readonly entities: Record<string, Model.Entity> = {}\n\tprivate readonly enums: Record<string, string[]> = {}\n\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic build(): Schema {\n\t\tfor (const [entityName, entityDefinition] of Object.entries(this.schema.entities)) {\n\t\t\tfor (const [fieldName, fieldDefinition] of Object.entries(entityDefinition.fields)) {\n\t\t\t\tif (isColumnDefinition(fieldDefinition)) {\n\t\t\t\t\tthis.processColumn(entityName, fieldName, fieldDefinition)\n\n\t\t\t\t} else if (fieldDefinition.type === 'enum') {\n\t\t\t\t\tthis.processEnum(entityName, fieldName, fieldDefinition)\n\n\t\t\t\t} else {\n\t\t\t\t\tthis.processRelation(entityName, fieldName, fieldDefinition)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...emptySchema,\n\t\t\tmodel: {\n\t\t\t\tenums: this.enums,\n\t\t\t\tentities: this.entities,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate processColumn(entityName: string, fieldName: string, columnDef: LaxSchemaColumn) {\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: simpleColumnTypes[columnDef.type].type,\n\t\t\tnullable: !columnDef.notNull,\n\t\t\tcolumnType: simpleColumnTypes[columnDef.type].columnType,\n\t\t})\n\t}\n\n\tprivate processEnum(entityName: string, fieldName: string, enumDef: LaxSchemaEnum) {\n\t\tthis.enums[enumDef.enumName] = Array.from(new Set([...this.enums[enumDef.enumName] ?? [], ...enumDef.values]))\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: Model.ColumnType.Enum,\n\t\t\tnullable: !enumDef.notNull,\n\t\t\tcolumnType: enumDef.enumName,\n\t\t})\n\t}\n\n\tprivate processRelation(entityName: string, fieldName: string, relDef: LaxSchemaRelation) {\n\t\tswitch (relDef.type) {\n\t\t\tcase 'manyHasMany':\n\t\t\t\tconst joiningColumns = this.conventions.getJoiningTableColumnNames(entityName, fieldName, relDef.targetEntity, relDef.targetField)\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningTable: {\n\t\t\t\t\t\ttableName: this.conventions.getJoiningTableName(entityName, fieldName),\n\t\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[0],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinverseJoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[1],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\teventLog: { enabled: true },\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'manyHasManyInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'manyHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasMany':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOneInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate registerField(entityName: string, field: Model.AnyField) {\n\t\tconst entity = this.getEntity(entityName)\n\t\t;(entity.fields as Writable<Model.Entity['fields']>)[field.name] = field\n\t}\n\n\n\tprivate getEntity(entityName: string): Model.Entity {\n\t\treturn this.entities[entityName] ??= {\n\t\t\tname: entityName,\n\t\t\tunique: [],\n\t\t\tindexes: [],\n\t\t\tprimary: 'id',\n\t\t\tprimaryColumn: 'id',\n\t\t\ttableName: this.conventions.getTableName(entityName),\n\t\t\teventLog: { enabled: true },\n\t\t\tfields: {\n\t\t\t\tid: {\n\t\t\t\t\tname: 'id',\n\t\t\t\t\tcolumnName: 'id',\n\t\t\t\t\ttype: Model.ColumnType.Uuid,\n\t\t\t\t\tcolumnType: resolveDefaultColumnType(Model.ColumnType.Uuid),\n\t\t\t\t\tnullable: false,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":["Model","schema","DefaultNamingConventions","emptySchema","resolveDefaultColumnType"],"mappings":"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"}
1
+ {"version":3,"file":"LaxSchemaConverter.cjs","sources":["../../../../../packages/schema-utils/src/lax/LaxSchemaConverter.ts"],"sourcesContent":["import { Model, Schema, Writable } from '@contember/schema'\nimport { LaxSchema, LaxSchemaColumn, LaxSchemaEnum, LaxSchemaField, LaxSchemaRelation } from './schema'\nimport { DefaultNamingConventions, NamingConventions, resolveDefaultColumnType } from '../model'\nimport { emptySchema } from '../index'\n\nconst simpleColumnTypes: { [K in LaxSchemaColumn['type']]: { type: Model.ColumnType; columnType: string } } = {\n\tboolean: { type: Model.ColumnType.Bool, columnType: 'boolean' },\n\tint: { type: Model.ColumnType.Int, columnType: 'integer' },\n\tdate: { type: Model.ColumnType.Date, columnType: 'date' },\n\tdatetime: { type: Model.ColumnType.DateTime, columnType: 'timestamptz' },\n\tfloat: { type: Model.ColumnType.Double, columnType: 'double precision' },\n\tjson: { type: Model.ColumnType.Json, columnType: 'jsonb' },\n\tstring: { type: Model.ColumnType.String, columnType: 'text' },\n}\n\nconst isColumnDefinition = (field: LaxSchemaField): field is LaxSchemaColumn => field.type in simpleColumnTypes\n\nexport class LaxSchemaConverter {\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic convert(): Schema {\n\t\tconst builder = new LaxSchemaBuilder(this.schema, this.conventions)\n\t\treturn builder.build()\n\t}\n\n}\n\nclass LaxSchemaBuilder {\n\tprivate readonly entities: Record<string, Model.Entity> = {}\n\tprivate readonly enums: Record<string, string[]> = {}\n\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic build(): Schema {\n\t\tfor (const [entityName, entityDefinition] of Object.entries(this.schema.entities)) {\n\t\t\tfor (const [fieldName, fieldDefinition] of Object.entries(entityDefinition.fields)) {\n\t\t\t\tif (isColumnDefinition(fieldDefinition)) {\n\t\t\t\t\tthis.processColumn(entityName, fieldName, fieldDefinition)\n\n\t\t\t\t} else if (fieldDefinition.type === 'enum') {\n\t\t\t\t\tthis.processEnum(entityName, fieldName, fieldDefinition)\n\n\t\t\t\t} else {\n\t\t\t\t\tthis.processRelation(entityName, fieldName, fieldDefinition)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...emptySchema,\n\t\t\tmodel: {\n\t\t\t\tenums: this.enums,\n\t\t\t\tentities: this.entities,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate processColumn(entityName: string, fieldName: string, columnDef: LaxSchemaColumn) {\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: simpleColumnTypes[columnDef.type].type,\n\t\t\tnullable: !columnDef.notNull,\n\t\t\tcolumnType: simpleColumnTypes[columnDef.type].columnType,\n\t\t})\n\t}\n\n\tprivate processEnum(entityName: string, fieldName: string, enumDef: LaxSchemaEnum) {\n\t\tthis.enums[enumDef.enumName] = Array.from(new Set([...this.enums[enumDef.enumName] ?? [], ...enumDef.values]))\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: Model.ColumnType.Enum,\n\t\t\tnullable: !enumDef.notNull,\n\t\t\tcolumnType: enumDef.enumName,\n\t\t})\n\t}\n\n\tprivate processRelation(entityName: string, fieldName: string, relDef: LaxSchemaRelation) {\n\t\tswitch (relDef.type) {\n\t\t\tcase 'manyHasMany':\n\t\t\t\tconst joiningColumns = this.conventions.getJoiningTableColumnNames(entityName, fieldName, relDef.targetEntity, relDef.targetField)\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningTable: {\n\t\t\t\t\t\ttableName: this.conventions.getJoiningTableName(entityName, fieldName),\n\t\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[0],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinverseJoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[1],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\teventLog: { enabled: true },\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'manyHasManyInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'manyHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasMany':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOneInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate registerField(entityName: string, field: Model.AnyField) {\n\t\tconst entity = this.getEntity(entityName)\n\t\t;(entity.fields as Writable<Model.Entity['fields']>)[field.name] = field\n\t}\n\n\n\tprivate getEntity(entityName: string): Model.Entity {\n\t\treturn this.entities[entityName] ??= {\n\t\t\tname: entityName,\n\t\t\tunique: [],\n\t\t\tindexes: [],\n\t\t\tprimary: 'id',\n\t\t\tprimaryColumn: 'id',\n\t\t\ttableName: this.conventions.getTableName(entityName),\n\t\t\teventLog: { enabled: true },\n\t\t\tfields: {\n\t\t\t\tid: {\n\t\t\t\t\tname: 'id',\n\t\t\t\t\tcolumnName: 'id',\n\t\t\t\t\ttype: Model.ColumnType.Uuid,\n\t\t\t\t\tcolumnType: resolveDefaultColumnType(Model.ColumnType.Uuid),\n\t\t\t\t\tnullable: false,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":["Model","schema","DefaultNamingConventions","emptySchema","resolveDefaultColumnType"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"LaxSchemaConverter.js","sources":["../../../../../packages/schema-utils/src/lax/LaxSchemaConverter.ts"],"sourcesContent":["import { Model, Schema, Writable } from '@contember/schema'\nimport { LaxSchema, LaxSchemaColumn, LaxSchemaEnum, LaxSchemaField, LaxSchemaRelation } from './schema'\nimport { DefaultNamingConventions, NamingConventions, resolveDefaultColumnType } from '../model'\nimport { emptySchema } from '../index'\n\nconst simpleColumnTypes: { [K in LaxSchemaColumn['type']]: { type: Model.ColumnType; columnType: string } } = {\n\tboolean: { type: Model.ColumnType.Bool, columnType: 'boolean' },\n\tint: { type: Model.ColumnType.Int, columnType: 'integer' },\n\tdate: { type: Model.ColumnType.Date, columnType: 'date' },\n\tdatetime: { type: Model.ColumnType.DateTime, columnType: 'timestamptz' },\n\tfloat: { type: Model.ColumnType.Double, columnType: 'double precision' },\n\tjson: { type: Model.ColumnType.Json, columnType: 'jsonb' },\n\tstring: { type: Model.ColumnType.String, columnType: 'text' },\n}\n\nconst isColumnDefinition = (field: LaxSchemaField): field is LaxSchemaColumn => field.type in simpleColumnTypes\n\nexport class LaxSchemaConverter {\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic convert(): Schema {\n\t\tconst builder = new LaxSchemaBuilder(this.schema, this.conventions)\n\t\treturn builder.build()\n\t}\n\n}\n\nclass LaxSchemaBuilder {\n\tprivate readonly entities: Record<string, Model.Entity> = {}\n\tprivate readonly enums: Record<string, string[]> = {}\n\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic build(): Schema {\n\t\tfor (const [entityName, entityDefinition] of Object.entries(this.schema.entities)) {\n\t\t\tfor (const [fieldName, fieldDefinition] of Object.entries(entityDefinition.fields)) {\n\t\t\t\tif (isColumnDefinition(fieldDefinition)) {\n\t\t\t\t\tthis.processColumn(entityName, fieldName, fieldDefinition)\n\n\t\t\t\t} else if (fieldDefinition.type === 'enum') {\n\t\t\t\t\tthis.processEnum(entityName, fieldName, fieldDefinition)\n\n\t\t\t\t} else {\n\t\t\t\t\tthis.processRelation(entityName, fieldName, fieldDefinition)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...emptySchema,\n\t\t\tmodel: {\n\t\t\t\tenums: this.enums,\n\t\t\t\tentities: this.entities,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate processColumn(entityName: string, fieldName: string, columnDef: LaxSchemaColumn) {\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: simpleColumnTypes[columnDef.type].type,\n\t\t\tnullable: !columnDef.notNull,\n\t\t\tcolumnType: simpleColumnTypes[columnDef.type].columnType,\n\t\t})\n\t}\n\n\tprivate processEnum(entityName: string, fieldName: string, enumDef: LaxSchemaEnum) {\n\t\tthis.enums[enumDef.enumName] = Array.from(new Set([...this.enums[enumDef.enumName] ?? [], ...enumDef.values]))\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: Model.ColumnType.Enum,\n\t\t\tnullable: !enumDef.notNull,\n\t\t\tcolumnType: enumDef.enumName,\n\t\t})\n\t}\n\n\tprivate processRelation(entityName: string, fieldName: string, relDef: LaxSchemaRelation) {\n\t\tswitch (relDef.type) {\n\t\t\tcase 'manyHasMany':\n\t\t\t\tconst joiningColumns = this.conventions.getJoiningTableColumnNames(entityName, fieldName, relDef.targetEntity, relDef.targetField)\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningTable: {\n\t\t\t\t\t\ttableName: this.conventions.getJoiningTableName(entityName, fieldName),\n\t\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[0],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinverseJoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[1],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\teventLog: { enabled: true },\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'manyHasManyInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'manyHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasMany':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOneInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate registerField(entityName: string, field: Model.AnyField) {\n\t\tconst entity = this.getEntity(entityName)\n\t\t;(entity.fields as Writable<Model.Entity['fields']>)[field.name] = field\n\t}\n\n\n\tprivate getEntity(entityName: string): Model.Entity {\n\t\treturn this.entities[entityName] ??= {\n\t\t\tname: entityName,\n\t\t\tunique: [],\n\t\t\tindexes: [],\n\t\t\tprimary: 'id',\n\t\t\tprimaryColumn: 'id',\n\t\t\ttableName: this.conventions.getTableName(entityName),\n\t\t\teventLog: { enabled: true },\n\t\t\tfields: {\n\t\t\t\tid: {\n\t\t\t\t\tname: 'id',\n\t\t\t\t\tcolumnName: 'id',\n\t\t\t\t\ttype: Model.ColumnType.Uuid,\n\t\t\t\t\tcolumnType: resolveDefaultColumnType(Model.ColumnType.Uuid),\n\t\t\t\t\tnullable: false,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LaxSchemaConverter.js","sources":["../../../../../packages/schema-utils/src/lax/LaxSchemaConverter.ts"],"sourcesContent":["import { Model, Schema, Writable } from '@contember/schema'\nimport { LaxSchema, LaxSchemaColumn, LaxSchemaEnum, LaxSchemaField, LaxSchemaRelation } from './schema'\nimport { DefaultNamingConventions, NamingConventions, resolveDefaultColumnType } from '../model'\nimport { emptySchema } from '../index'\n\nconst simpleColumnTypes: { [K in LaxSchemaColumn['type']]: { type: Model.ColumnType; columnType: string } } = {\n\tboolean: { type: Model.ColumnType.Bool, columnType: 'boolean' },\n\tint: { type: Model.ColumnType.Int, columnType: 'integer' },\n\tdate: { type: Model.ColumnType.Date, columnType: 'date' },\n\tdatetime: { type: Model.ColumnType.DateTime, columnType: 'timestamptz' },\n\tfloat: { type: Model.ColumnType.Double, columnType: 'double precision' },\n\tjson: { type: Model.ColumnType.Json, columnType: 'jsonb' },\n\tstring: { type: Model.ColumnType.String, columnType: 'text' },\n}\n\nconst isColumnDefinition = (field: LaxSchemaField): field is LaxSchemaColumn => field.type in simpleColumnTypes\n\nexport class LaxSchemaConverter {\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic convert(): Schema {\n\t\tconst builder = new LaxSchemaBuilder(this.schema, this.conventions)\n\t\treturn builder.build()\n\t}\n\n}\n\nclass LaxSchemaBuilder {\n\tprivate readonly entities: Record<string, Model.Entity> = {}\n\tprivate readonly enums: Record<string, string[]> = {}\n\n\tconstructor(\n\t\tprivate readonly schema: LaxSchema,\n\t\tprivate readonly conventions: NamingConventions = new DefaultNamingConventions(),\n\t) {\n\t}\n\n\tpublic build(): Schema {\n\t\tfor (const [entityName, entityDefinition] of Object.entries(this.schema.entities)) {\n\t\t\tfor (const [fieldName, fieldDefinition] of Object.entries(entityDefinition.fields)) {\n\t\t\t\tif (isColumnDefinition(fieldDefinition)) {\n\t\t\t\t\tthis.processColumn(entityName, fieldName, fieldDefinition)\n\n\t\t\t\t} else if (fieldDefinition.type === 'enum') {\n\t\t\t\t\tthis.processEnum(entityName, fieldName, fieldDefinition)\n\n\t\t\t\t} else {\n\t\t\t\t\tthis.processRelation(entityName, fieldName, fieldDefinition)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...emptySchema,\n\t\t\tmodel: {\n\t\t\t\tenums: this.enums,\n\t\t\t\tentities: this.entities,\n\t\t\t},\n\t\t}\n\t}\n\n\tprivate processColumn(entityName: string, fieldName: string, columnDef: LaxSchemaColumn) {\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: simpleColumnTypes[columnDef.type].type,\n\t\t\tnullable: !columnDef.notNull,\n\t\t\tcolumnType: simpleColumnTypes[columnDef.type].columnType,\n\t\t})\n\t}\n\n\tprivate processEnum(entityName: string, fieldName: string, enumDef: LaxSchemaEnum) {\n\t\tthis.enums[enumDef.enumName] = Array.from(new Set([...this.enums[enumDef.enumName] ?? [], ...enumDef.values]))\n\t\tconst columnName = this.conventions.getColumnName(fieldName)\n\t\tthis.registerField(entityName, {\n\t\t\tname: fieldName,\n\t\t\tcolumnName: columnName,\n\t\t\ttype: Model.ColumnType.Enum,\n\t\t\tnullable: !enumDef.notNull,\n\t\t\tcolumnType: enumDef.enumName,\n\t\t})\n\t}\n\n\tprivate processRelation(entityName: string, fieldName: string, relDef: LaxSchemaRelation) {\n\t\tswitch (relDef.type) {\n\t\t\tcase 'manyHasMany':\n\t\t\t\tconst joiningColumns = this.conventions.getJoiningTableColumnNames(entityName, fieldName, relDef.targetEntity, relDef.targetField)\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningTable: {\n\t\t\t\t\t\ttableName: this.conventions.getJoiningTableName(entityName, fieldName),\n\t\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[0],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinverseJoiningColumn: {\n\t\t\t\t\t\t\tcolumnName: joiningColumns[1],\n\t\t\t\t\t\t\tonDelete: Model.OnDelete.cascade,\n\t\t\t\t\t\t},\n\t\t\t\t\t\teventLog: { enabled: true },\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'manyHasManyInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'manyHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.ManyHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasMany':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasMany,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOne':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\tinversedBy: relDef.targetField,\n\t\t\t\t\tjoiningColumn: {\n\t\t\t\t\t\tcolumnName: this.conventions.getJoiningColumnName(fieldName),\n\t\t\t\t\t\tonDelete: Model.OnDelete.restrict,\n\t\t\t\t\t},\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tif (!this.schema.entities[relDef.targetEntity].fields[relDef.targetField]) {\n\t\t\t\t\tthis.processRelation(relDef.targetEntity, relDef.targetField, {\n\t\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\t\ttargetEntity: entityName,\n\t\t\t\t\t\ttargetField: fieldName,\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tbreak\n\t\t\tcase 'oneHasOneInverse':\n\t\t\t\tthis.registerField(entityName, {\n\t\t\t\t\ttype: Model.RelationType.OneHasOne,\n\t\t\t\t\tname: fieldName,\n\t\t\t\t\ttarget: relDef.targetEntity,\n\t\t\t\t\townedBy: relDef.targetField,\n\t\t\t\t\tnullable: !relDef.notNull,\n\t\t\t\t})\n\t\t\t\tbreak\n\t\t}\n\t}\n\n\tprivate registerField(entityName: string, field: Model.AnyField) {\n\t\tconst entity = this.getEntity(entityName)\n\t\t;(entity.fields as Writable<Model.Entity['fields']>)[field.name] = field\n\t}\n\n\n\tprivate getEntity(entityName: string): Model.Entity {\n\t\treturn this.entities[entityName] ??= {\n\t\t\tname: entityName,\n\t\t\tunique: [],\n\t\t\tindexes: [],\n\t\t\tprimary: 'id',\n\t\t\tprimaryColumn: 'id',\n\t\t\ttableName: this.conventions.getTableName(entityName),\n\t\t\teventLog: { enabled: true },\n\t\t\tfields: {\n\t\t\t\tid: {\n\t\t\t\t\tname: 'id',\n\t\t\t\t\tcolumnName: 'id',\n\t\t\t\t\ttype: Model.ColumnType.Uuid,\n\t\t\t\t\tcolumnType: resolveDefaultColumnType(Model.ColumnType.Uuid),\n\t\t\t\t\tnullable: false,\n\t\t\t\t},\n\t\t\t},\n\t\t}\n\t}\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.cjs","sources":["../../../../../packages/schema-utils/src/lax/schema.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\n\nconst LaxSchemaEnumInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvalues: Typesafe.array(Typesafe.string),\n\t\tenumName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t\tunique: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaColumnInner = Typesafe.partial({\n\tnotNull: Typesafe.boolean,\n\tunique: Typesafe.boolean,\n})\n\nconst LaxSchemaRelationInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttargetEntity: Typesafe.string,\n\t\ttargetField: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaField = Typesafe.discriminatedUnion('type', {\n\toneHasOne: LaxSchemaRelationInner,\n\toneHasOneInverse: LaxSchemaRelationInner,\n\tmanyHasMany: LaxSchemaRelationInner,\n\tmanyHasManyInverse: LaxSchemaRelationInner,\n\toneHasMany: LaxSchemaRelationInner,\n\tmanyHasOne: LaxSchemaRelationInner,\n\tint: LaxSchemaColumnInner,\n\tfloat: LaxSchemaColumnInner,\n\tboolean: LaxSchemaColumnInner,\n\tstring: LaxSchemaColumnInner,\n\tjson: LaxSchemaColumnInner,\n\tdate: LaxSchemaColumnInner,\n\tdatetime: LaxSchemaColumnInner,\n\tenum: LaxSchemaEnumInner,\n})\n\nexport type LaxSchemaField = ReturnType<typeof LaxSchemaField>\nexport type LaxSchemaEnum = Extract<LaxSchemaField, { type: 'enum' }>\nexport type LaxSchemaColumn = Extract<LaxSchemaField, { type: 'int' | 'float' | 'boolean' | 'string' | 'json' | 'datetime' | 'date' | 'uuid' }>\nexport type LaxSchemaRelation = Extract<LaxSchemaField, {type: 'oneHasOne' | 'oneHasOneInverse' | 'manyHasMany' | 'manyHasManyInverse' | 'oneHasMany' | 'manyHasOne' }>\n\nconst LaxSchemaEntity = Typesafe.object({\n\tfields: Typesafe.record(Typesafe.string, LaxSchemaField),\n})\nexport type LaxSchemaEntity = ReturnType<typeof LaxSchemaEntity>\n\nexport const LaxSchema = Typesafe.object({\n\tentities: Typesafe.record(\n\t\tTypesafe.string,\n\t\tLaxSchemaEntity,\n\t),\n})\nexport type LaxSchema = ReturnType<typeof LaxSchema>\n"],"names":["Typesafe"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEA,MAAM,qBAAqBA,oBAAS;AAAA,EACnCA,oBAAS,OAAO;AAAA,IACf,QAAQA,oBAAS,MAAMA,oBAAS,MAAM;AAAA,IACtC,UAAUA,oBAAS;AAAA,EAAA,CACnB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,SAASA,oBAAS;AAAA,IAClB,QAAQA,oBAAS;AAAA,EAAA,CACjB;AACF;AAEA,MAAM,uBAAuBA,oBAAS,QAAQ;AAAA,EAC7C,SAASA,oBAAS;AAAA,EAClB,QAAQA,oBAAS;AAClB,CAAC;AAED,MAAM,yBAAyBA,oBAAS;AAAA,EACvCA,oBAAS,OAAO;AAAA,IACf,cAAcA,oBAAS;AAAA,IACvB,aAAaA,oBAAS;AAAA,EAAA,CACtB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,SAASA,oBAAS;AAAA,EAAA,CAClB;AACF;AAEA,MAAM,iBAAiBA,oBAAS,mBAAmB,QAAQ;AAAA,EAC1D,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AACP,CAAC;AAOD,MAAM,kBAAkBA,oBAAS,OAAO;AAAA,EACvC,QAAQA,oBAAS,OAAOA,oBAAS,QAAQ,cAAc;AACxD,CAAC;AAGY,MAAA,YAAYA,oBAAS,OAAO;AAAA,EACxC,UAAUA,oBAAS;AAAA,IAClBA,oBAAS;AAAA,IACT;AAAA,EACD;AACD,CAAC;;"}
1
+ {"version":3,"file":"schema.cjs","sources":["../../../../../packages/schema-utils/src/lax/schema.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\n\nconst LaxSchemaEnumInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvalues: Typesafe.array(Typesafe.string),\n\t\tenumName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t\tunique: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaColumnInner = Typesafe.partial({\n\tnotNull: Typesafe.boolean,\n\tunique: Typesafe.boolean,\n})\n\nconst LaxSchemaRelationInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttargetEntity: Typesafe.string,\n\t\ttargetField: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaField = Typesafe.discriminatedUnion('type', {\n\toneHasOne: LaxSchemaRelationInner,\n\toneHasOneInverse: LaxSchemaRelationInner,\n\tmanyHasMany: LaxSchemaRelationInner,\n\tmanyHasManyInverse: LaxSchemaRelationInner,\n\toneHasMany: LaxSchemaRelationInner,\n\tmanyHasOne: LaxSchemaRelationInner,\n\tint: LaxSchemaColumnInner,\n\tfloat: LaxSchemaColumnInner,\n\tboolean: LaxSchemaColumnInner,\n\tstring: LaxSchemaColumnInner,\n\tjson: LaxSchemaColumnInner,\n\tdate: LaxSchemaColumnInner,\n\tdatetime: LaxSchemaColumnInner,\n\tenum: LaxSchemaEnumInner,\n})\n\nexport type LaxSchemaField = ReturnType<typeof LaxSchemaField>\nexport type LaxSchemaEnum = Extract<LaxSchemaField, { type: 'enum' }>\nexport type LaxSchemaColumn = Extract<LaxSchemaField, { type: 'int' | 'float' | 'boolean' | 'string' | 'json' | 'datetime' | 'date' | 'uuid' }>\nexport type LaxSchemaRelation = Extract<LaxSchemaField, {type: 'oneHasOne' | 'oneHasOneInverse' | 'manyHasMany' | 'manyHasManyInverse' | 'oneHasMany' | 'manyHasOne' }>\n\nconst LaxSchemaEntity = Typesafe.object({\n\tfields: Typesafe.record(Typesafe.string, LaxSchemaField),\n})\nexport type LaxSchemaEntity = ReturnType<typeof LaxSchemaEntity>\n\nexport const LaxSchema = Typesafe.object({\n\tentities: Typesafe.record(\n\t\tTypesafe.string,\n\t\tLaxSchemaEntity,\n\t),\n})\nexport type LaxSchema = ReturnType<typeof LaxSchema>\n"],"names":["Typesafe"],"mappings":";;;;;;;;;;;;;;;;;;;;AAEA,MAAM,qBAAqBA,oBAAS;AAAA,EACnCA,oBAAS,OAAO;AAAA,IACf,QAAQA,oBAAS,MAAMA,oBAAS,MAAM;AAAA,IACtC,UAAUA,oBAAS;AAAA,EAAA,CACnB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,SAASA,oBAAS;AAAA,IAClB,QAAQA,oBAAS;AAAA,EACjB,CAAA;AACF;AAEA,MAAM,uBAAuBA,oBAAS,QAAQ;AAAA,EAC7C,SAASA,oBAAS;AAAA,EAClB,QAAQA,oBAAS;AAClB,CAAC;AAED,MAAM,yBAAyBA,oBAAS;AAAA,EACvCA,oBAAS,OAAO;AAAA,IACf,cAAcA,oBAAS;AAAA,IACvB,aAAaA,oBAAS;AAAA,EAAA,CACtB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,SAASA,oBAAS;AAAA,EAClB,CAAA;AACF;AAEA,MAAM,iBAAiBA,oBAAS,mBAAmB,QAAQ;AAAA,EAC1D,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AACP,CAAC;AAOD,MAAM,kBAAkBA,oBAAS,OAAO;AAAA,EACvC,QAAQA,oBAAS,OAAOA,oBAAS,QAAQ,cAAc;AACxD,CAAC;AAGY,MAAA,YAAYA,oBAAS,OAAO;AAAA,EACxC,UAAUA,oBAAS;AAAA,IAClBA,oBAAS;AAAA,IACT;AAAA,EAAA;AAEF,CAAC;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sources":["../../../../../packages/schema-utils/src/lax/schema.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\n\nconst LaxSchemaEnumInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvalues: Typesafe.array(Typesafe.string),\n\t\tenumName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t\tunique: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaColumnInner = Typesafe.partial({\n\tnotNull: Typesafe.boolean,\n\tunique: Typesafe.boolean,\n})\n\nconst LaxSchemaRelationInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttargetEntity: Typesafe.string,\n\t\ttargetField: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaField = Typesafe.discriminatedUnion('type', {\n\toneHasOne: LaxSchemaRelationInner,\n\toneHasOneInverse: LaxSchemaRelationInner,\n\tmanyHasMany: LaxSchemaRelationInner,\n\tmanyHasManyInverse: LaxSchemaRelationInner,\n\toneHasMany: LaxSchemaRelationInner,\n\tmanyHasOne: LaxSchemaRelationInner,\n\tint: LaxSchemaColumnInner,\n\tfloat: LaxSchemaColumnInner,\n\tboolean: LaxSchemaColumnInner,\n\tstring: LaxSchemaColumnInner,\n\tjson: LaxSchemaColumnInner,\n\tdate: LaxSchemaColumnInner,\n\tdatetime: LaxSchemaColumnInner,\n\tenum: LaxSchemaEnumInner,\n})\n\nexport type LaxSchemaField = ReturnType<typeof LaxSchemaField>\nexport type LaxSchemaEnum = Extract<LaxSchemaField, { type: 'enum' }>\nexport type LaxSchemaColumn = Extract<LaxSchemaField, { type: 'int' | 'float' | 'boolean' | 'string' | 'json' | 'datetime' | 'date' | 'uuid' }>\nexport type LaxSchemaRelation = Extract<LaxSchemaField, {type: 'oneHasOne' | 'oneHasOneInverse' | 'manyHasMany' | 'manyHasManyInverse' | 'oneHasMany' | 'manyHasOne' }>\n\nconst LaxSchemaEntity = Typesafe.object({\n\tfields: Typesafe.record(Typesafe.string, LaxSchemaField),\n})\nexport type LaxSchemaEntity = ReturnType<typeof LaxSchemaEntity>\n\nexport const LaxSchema = Typesafe.object({\n\tentities: Typesafe.record(\n\t\tTypesafe.string,\n\t\tLaxSchemaEntity,\n\t),\n})\nexport type LaxSchema = ReturnType<typeof LaxSchema>\n"],"names":[],"mappings":";AAEA,MAAM,qBAAqB,SAAS;AAAA,EACnC,SAAS,OAAO;AAAA,IACf,QAAQ,SAAS,MAAM,SAAS,MAAM;AAAA,IACtC,UAAU,SAAS;AAAA,EAAA,CACnB;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,SAAS,SAAS;AAAA,IAClB,QAAQ,SAAS;AAAA,EAAA,CACjB;AACF;AAEA,MAAM,uBAAuB,SAAS,QAAQ;AAAA,EAC7C,SAAS,SAAS;AAAA,EAClB,QAAQ,SAAS;AAClB,CAAC;AAED,MAAM,yBAAyB,SAAS;AAAA,EACvC,SAAS,OAAO;AAAA,IACf,cAAc,SAAS;AAAA,IACvB,aAAa,SAAS;AAAA,EAAA,CACtB;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,SAAS,SAAS;AAAA,EAAA,CAClB;AACF;AAEA,MAAM,iBAAiB,SAAS,mBAAmB,QAAQ;AAAA,EAC1D,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AACP,CAAC;AAOD,MAAM,kBAAkB,SAAS,OAAO;AAAA,EACvC,QAAQ,SAAS,OAAO,SAAS,QAAQ,cAAc;AACxD,CAAC;AAGY,MAAA,YAAY,SAAS,OAAO;AAAA,EACxC,UAAU,SAAS;AAAA,IAClB,SAAS;AAAA,IACT;AAAA,EACD;AACD,CAAC;"}
1
+ {"version":3,"file":"schema.js","sources":["../../../../../packages/schema-utils/src/lax/schema.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\n\nconst LaxSchemaEnumInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvalues: Typesafe.array(Typesafe.string),\n\t\tenumName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t\tunique: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaColumnInner = Typesafe.partial({\n\tnotNull: Typesafe.boolean,\n\tunique: Typesafe.boolean,\n})\n\nconst LaxSchemaRelationInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttargetEntity: Typesafe.string,\n\t\ttargetField: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaField = Typesafe.discriminatedUnion('type', {\n\toneHasOne: LaxSchemaRelationInner,\n\toneHasOneInverse: LaxSchemaRelationInner,\n\tmanyHasMany: LaxSchemaRelationInner,\n\tmanyHasManyInverse: LaxSchemaRelationInner,\n\toneHasMany: LaxSchemaRelationInner,\n\tmanyHasOne: LaxSchemaRelationInner,\n\tint: LaxSchemaColumnInner,\n\tfloat: LaxSchemaColumnInner,\n\tboolean: LaxSchemaColumnInner,\n\tstring: LaxSchemaColumnInner,\n\tjson: LaxSchemaColumnInner,\n\tdate: LaxSchemaColumnInner,\n\tdatetime: LaxSchemaColumnInner,\n\tenum: LaxSchemaEnumInner,\n})\n\nexport type LaxSchemaField = ReturnType<typeof LaxSchemaField>\nexport type LaxSchemaEnum = Extract<LaxSchemaField, { type: 'enum' }>\nexport type LaxSchemaColumn = Extract<LaxSchemaField, { type: 'int' | 'float' | 'boolean' | 'string' | 'json' | 'datetime' | 'date' | 'uuid' }>\nexport type LaxSchemaRelation = Extract<LaxSchemaField, {type: 'oneHasOne' | 'oneHasOneInverse' | 'manyHasMany' | 'manyHasManyInverse' | 'oneHasMany' | 'manyHasOne' }>\n\nconst LaxSchemaEntity = Typesafe.object({\n\tfields: Typesafe.record(Typesafe.string, LaxSchemaField),\n})\nexport type LaxSchemaEntity = ReturnType<typeof LaxSchemaEntity>\n\nexport const LaxSchema = Typesafe.object({\n\tentities: Typesafe.record(\n\t\tTypesafe.string,\n\t\tLaxSchemaEntity,\n\t),\n})\nexport type LaxSchema = ReturnType<typeof LaxSchema>\n"],"names":[],"mappings":";AAEA,MAAM,qBAAqB,SAAS;AAAA,EACnC,SAAS,OAAO;AAAA,IACf,QAAQ,SAAS,MAAM,SAAS,MAAM;AAAA,IACtC,UAAU,SAAS;AAAA,EAAA,CACnB;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,SAAS,SAAS;AAAA,IAClB,QAAQ,SAAS;AAAA,EACjB,CAAA;AACF;AAEA,MAAM,uBAAuB,SAAS,QAAQ;AAAA,EAC7C,SAAS,SAAS;AAAA,EAClB,QAAQ,SAAS;AAClB,CAAC;AAED,MAAM,yBAAyB,SAAS;AAAA,EACvC,SAAS,OAAO;AAAA,IACf,cAAc,SAAS;AAAA,IACvB,aAAa,SAAS;AAAA,EAAA,CACtB;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,SAAS,SAAS;AAAA,EAClB,CAAA;AACF;AAEA,MAAM,iBAAiB,SAAS,mBAAmB,QAAQ;AAAA,EAC1D,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AACP,CAAC;AAOD,MAAM,kBAAkB,SAAS,OAAO;AAAA,EACvC,QAAQ,SAAS,OAAO,SAAS,QAAQ,cAAc;AACxD,CAAC;AAGY,MAAA,YAAY,SAAS,OAAO;AAAA,EACxC,UAAU,SAAS;AAAA,IAClB,SAAS;AAAA,IACT;AAAA,EAAA;AAEF,CAAC;"}
@@ -1 +1 @@
1
- {"version":3,"file":"NamingConventions.cjs","sources":["../../../../../packages/schema-utils/src/model/NamingConventions.ts"],"sourcesContent":["export interface NamingConventions {\n\tgetPrimaryField(): string\n\n\tgetColumnName(fieldName: string): string\n\n\tgetTableName(entityName: string): string\n\n\tgetJoiningColumnName(relationName: string): string\n\n\tgetJoiningTableName(entity: string, relation: string): string\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string]\n}\n\nconst toUnderscore = (s: string) => s.replace(/([A-Z]+)/g, (x, y) => '_' + y.toLowerCase()).replace(/^_/, '')\nexport class DefaultNamingConventions implements NamingConventions {\n\tgetPrimaryField(): string {\n\t\treturn 'id'\n\t}\n\n\tgetColumnName(fieldName: string): string {\n\t\treturn toUnderscore(fieldName)\n\t}\n\n\tgetTableName(entityName: string): string {\n\t\treturn toUnderscore(entityName)\n\t}\n\n\tgetJoiningColumnName(relationName: string): string {\n\t\treturn toUnderscore(relationName) + '_id'\n\t}\n\n\tgetJoiningTableName(entity: string, relation: string): string {\n\t\treturn toUnderscore(entity) + '_' + toUnderscore(relation)\n\t}\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string] {\n\t\treturn [\n\t\t\ttoUnderscore(owningEntity) + '_id',\n\t\t\ttoUnderscore(inverseEntity === owningEntity ? owningRelation : inverseEntity) + '_id',\n\t\t]\n\t}\n}\n"],"names":[],"mappings":";;AAmBA,MAAM,eAAe,CAAC,MAAc,EAAE,QAAQ,aAAa,CAAC,GAAG,MAAM,MAAM,EAAE,YAAa,CAAA,EAAE,QAAQ,MAAM,EAAE;AACrG,MAAM,yBAAsD;AAAA,EAClE,kBAA0B;AAClB,WAAA;AAAA,EACR;AAAA,EAEA,cAAc,WAA2B;AACxC,WAAO,aAAa,SAAS;AAAA,EAC9B;AAAA,EAEA,aAAa,YAA4B;AACxC,WAAO,aAAa,UAAU;AAAA,EAC/B;AAAA,EAEA,qBAAqB,cAA8B;AAC3C,WAAA,aAAa,YAAY,IAAI;AAAA,EACrC;AAAA,EAEA,oBAAoB,QAAgB,UAA0B;AAC7D,WAAO,aAAa,MAAM,IAAI,MAAM,aAAa,QAAQ;AAAA,EAC1D;AAAA,EAEA,2BACC,cACA,gBACA,eACA,iBACmB;AACZ,WAAA;AAAA,MACN,aAAa,YAAY,IAAI;AAAA,MAC7B,aAAa,kBAAkB,eAAe,iBAAiB,aAAa,IAAI;AAAA,IAAA;AAAA,EAElF;AACD;;"}
1
+ {"version":3,"file":"NamingConventions.cjs","sources":["../../../../../packages/schema-utils/src/model/NamingConventions.ts"],"sourcesContent":["export interface NamingConventions {\n\tgetPrimaryField(): string\n\n\tgetColumnName(fieldName: string): string\n\n\tgetTableName(entityName: string): string\n\n\tgetJoiningColumnName(relationName: string): string\n\n\tgetJoiningTableName(entity: string, relation: string): string\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string]\n}\n\nconst toUnderscore = (s: string) => s.replace(/([A-Z]+)/g, (x, y) => '_' + y.toLowerCase()).replace(/^_/, '')\nexport class DefaultNamingConventions implements NamingConventions {\n\tgetPrimaryField(): string {\n\t\treturn 'id'\n\t}\n\n\tgetColumnName(fieldName: string): string {\n\t\treturn toUnderscore(fieldName)\n\t}\n\n\tgetTableName(entityName: string): string {\n\t\treturn toUnderscore(entityName)\n\t}\n\n\tgetJoiningColumnName(relationName: string): string {\n\t\treturn toUnderscore(relationName) + '_id'\n\t}\n\n\tgetJoiningTableName(entity: string, relation: string): string {\n\t\treturn toUnderscore(entity) + '_' + toUnderscore(relation)\n\t}\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string] {\n\t\treturn [\n\t\t\ttoUnderscore(owningEntity) + '_id',\n\t\t\ttoUnderscore(inverseEntity === owningEntity ? owningRelation : inverseEntity) + '_id',\n\t\t]\n\t}\n}\n"],"names":[],"mappings":";;AAmBA,MAAM,eAAe,CAAC,MAAc,EAAE,QAAQ,aAAa,CAAC,GAAG,MAAM,MAAM,EAAE,YAAY,CAAC,EAAE,QAAQ,MAAM,EAAE;AACrG,MAAM,yBAAsD;AAAA,EAClE,kBAA0B;AAClB,WAAA;AAAA,EAAA;AAAA,EAGR,cAAc,WAA2B;AACxC,WAAO,aAAa,SAAS;AAAA,EAAA;AAAA,EAG9B,aAAa,YAA4B;AACxC,WAAO,aAAa,UAAU;AAAA,EAAA;AAAA,EAG/B,qBAAqB,cAA8B;AAC3C,WAAA,aAAa,YAAY,IAAI;AAAA,EAAA;AAAA,EAGrC,oBAAoB,QAAgB,UAA0B;AAC7D,WAAO,aAAa,MAAM,IAAI,MAAM,aAAa,QAAQ;AAAA,EAAA;AAAA,EAG1D,2BACC,cACA,gBACA,eACA,iBACmB;AACZ,WAAA;AAAA,MACN,aAAa,YAAY,IAAI;AAAA,MAC7B,aAAa,kBAAkB,eAAe,iBAAiB,aAAa,IAAI;AAAA,IACjF;AAAA,EAAA;AAEF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"NamingConventions.js","sources":["../../../../../packages/schema-utils/src/model/NamingConventions.ts"],"sourcesContent":["export interface NamingConventions {\n\tgetPrimaryField(): string\n\n\tgetColumnName(fieldName: string): string\n\n\tgetTableName(entityName: string): string\n\n\tgetJoiningColumnName(relationName: string): string\n\n\tgetJoiningTableName(entity: string, relation: string): string\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string]\n}\n\nconst toUnderscore = (s: string) => s.replace(/([A-Z]+)/g, (x, y) => '_' + y.toLowerCase()).replace(/^_/, '')\nexport class DefaultNamingConventions implements NamingConventions {\n\tgetPrimaryField(): string {\n\t\treturn 'id'\n\t}\n\n\tgetColumnName(fieldName: string): string {\n\t\treturn toUnderscore(fieldName)\n\t}\n\n\tgetTableName(entityName: string): string {\n\t\treturn toUnderscore(entityName)\n\t}\n\n\tgetJoiningColumnName(relationName: string): string {\n\t\treturn toUnderscore(relationName) + '_id'\n\t}\n\n\tgetJoiningTableName(entity: string, relation: string): string {\n\t\treturn toUnderscore(entity) + '_' + toUnderscore(relation)\n\t}\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string] {\n\t\treturn [\n\t\t\ttoUnderscore(owningEntity) + '_id',\n\t\t\ttoUnderscore(inverseEntity === owningEntity ? owningRelation : inverseEntity) + '_id',\n\t\t]\n\t}\n}\n"],"names":[],"mappings":"AAmBA,MAAM,eAAe,CAAC,MAAc,EAAE,QAAQ,aAAa,CAAC,GAAG,MAAM,MAAM,EAAE,YAAa,CAAA,EAAE,QAAQ,MAAM,EAAE;AACrG,MAAM,yBAAsD;AAAA,EAClE,kBAA0B;AAClB,WAAA;AAAA,EACR;AAAA,EAEA,cAAc,WAA2B;AACxC,WAAO,aAAa,SAAS;AAAA,EAC9B;AAAA,EAEA,aAAa,YAA4B;AACxC,WAAO,aAAa,UAAU;AAAA,EAC/B;AAAA,EAEA,qBAAqB,cAA8B;AAC3C,WAAA,aAAa,YAAY,IAAI;AAAA,EACrC;AAAA,EAEA,oBAAoB,QAAgB,UAA0B;AAC7D,WAAO,aAAa,MAAM,IAAI,MAAM,aAAa,QAAQ;AAAA,EAC1D;AAAA,EAEA,2BACC,cACA,gBACA,eACA,iBACmB;AACZ,WAAA;AAAA,MACN,aAAa,YAAY,IAAI;AAAA,MAC7B,aAAa,kBAAkB,eAAe,iBAAiB,aAAa,IAAI;AAAA,IAAA;AAAA,EAElF;AACD;"}
1
+ {"version":3,"file":"NamingConventions.js","sources":["../../../../../packages/schema-utils/src/model/NamingConventions.ts"],"sourcesContent":["export interface NamingConventions {\n\tgetPrimaryField(): string\n\n\tgetColumnName(fieldName: string): string\n\n\tgetTableName(entityName: string): string\n\n\tgetJoiningColumnName(relationName: string): string\n\n\tgetJoiningTableName(entity: string, relation: string): string\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string]\n}\n\nconst toUnderscore = (s: string) => s.replace(/([A-Z]+)/g, (x, y) => '_' + y.toLowerCase()).replace(/^_/, '')\nexport class DefaultNamingConventions implements NamingConventions {\n\tgetPrimaryField(): string {\n\t\treturn 'id'\n\t}\n\n\tgetColumnName(fieldName: string): string {\n\t\treturn toUnderscore(fieldName)\n\t}\n\n\tgetTableName(entityName: string): string {\n\t\treturn toUnderscore(entityName)\n\t}\n\n\tgetJoiningColumnName(relationName: string): string {\n\t\treturn toUnderscore(relationName) + '_id'\n\t}\n\n\tgetJoiningTableName(entity: string, relation: string): string {\n\t\treturn toUnderscore(entity) + '_' + toUnderscore(relation)\n\t}\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string] {\n\t\treturn [\n\t\t\ttoUnderscore(owningEntity) + '_id',\n\t\t\ttoUnderscore(inverseEntity === owningEntity ? owningRelation : inverseEntity) + '_id',\n\t\t]\n\t}\n}\n"],"names":[],"mappings":"AAmBA,MAAM,eAAe,CAAC,MAAc,EAAE,QAAQ,aAAa,CAAC,GAAG,MAAM,MAAM,EAAE,YAAY,CAAC,EAAE,QAAQ,MAAM,EAAE;AACrG,MAAM,yBAAsD;AAAA,EAClE,kBAA0B;AAClB,WAAA;AAAA,EAAA;AAAA,EAGR,cAAc,WAA2B;AACxC,WAAO,aAAa,SAAS;AAAA,EAAA;AAAA,EAG9B,aAAa,YAA4B;AACxC,WAAO,aAAa,UAAU;AAAA,EAAA;AAAA,EAG/B,qBAAqB,cAA8B;AAC3C,WAAA,aAAa,YAAY,IAAI;AAAA,EAAA;AAAA,EAGrC,oBAAoB,QAAgB,UAA0B;AAC7D,WAAO,aAAa,MAAM,IAAI,MAAM,aAAa,QAAQ;AAAA,EAAA;AAAA,EAG1D,2BACC,cACA,gBACA,eACA,iBACmB;AACZ,WAAA;AAAA,MACN,aAAa,YAAY,IAAI;AAAA,MAC7B,aAAa,kBAAkB,eAAe,iBAAiB,aAAa,IAAI;AAAA,IACjF;AAAA,EAAA;AAEF;"}
@@ -1 +1 @@
1
- {"version":3,"file":"modelUtils.cjs","sources":["../../../../../packages/schema-utils/src/model/modelUtils.ts"],"sourcesContent":["import { assertNever, isIt } from '../utils'\nimport { Model } from '@contember/schema'\n\nexport enum ModelErrorCode {\n\tENTITY_NOT_FOUND = 'entityNotFound',\n\tFIELD_NOT_FOUND = 'fieldNotFound',\n\tNOT_RELATION = 'notRelation',\n\tNOT_OWNING_SIDE = 'notOwningSide',\n}\n\nexport class ModelError extends Error {\n\tconstructor(public readonly code: ModelErrorCode, message: string) {\n\t\tsuper(message)\n\t}\n}\n\nconst createEntityNotFoundError = (entityName: string) =>\n\tnew ModelError(ModelErrorCode.ENTITY_NOT_FOUND, `Entity ${entityName} not found`)\n\nconst createFieldNotFoundError = (entityName: string, fieldName: string) =>\n\tnew ModelError(ModelErrorCode.FIELD_NOT_FOUND, `Field ${fieldName} of entity ${entityName} not found`)\n\nexport const getEntity = (schema: Model.Schema, entityName: string): Model.Entity => {\n\tconst entity = schema.entities[entityName]\n\tif (!entity) {\n\t\tthrow createEntityNotFoundError(entityName)\n\t}\n\treturn entity\n}\n\nexport const getField = (entity: Model.Entity, fieldName: string): Model.AnyField => {\n\tconst field = entity.fields[fieldName]\n\tif (!field) {\n\t\tthrow createFieldNotFoundError(entity.name, fieldName)\n\t}\n\treturn field\n}\n\nexport const getColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\tvisitColumn: ({ column }) => column.columnName,\n\t\tvisitRelation: ({ entity, relation }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn relation.joiningColumn.columnName\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const tryGetColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\ttry {\n\t\treturn getColumnName(schema, entity, fieldName)\n\t} catch (e) {\n\t\tif (e instanceof ModelError && e.code === ModelErrorCode.NOT_OWNING_SIDE) {\n\t\t\treturn undefined\n\t\t}\n\t\tthrow e\n\t}\n}\n\nexport const getColumnType = (schema: Model.Schema, entity: Model.Entity, fieldName: string): string => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\t// TODO solve enum handling properly maybe we should distinguish between domain and column type\n\t\tvisitColumn: ({ column }) => (column.type === Model.ColumnType.Enum ? 'text' : column.columnType),\n\t\tvisitRelation: ({ entity, relation, targetEntity }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn getColumnType(schema, targetEntity, targetEntity.primary)\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const getTargetEntity = (\n\tschema: Model.Schema,\n\tentity: Model.Entity,\n\trelationName: string,\n): Model.Entity | null => {\n\treturn acceptFieldVisitor(schema, entity, relationName, {\n\t\tvisitColumn: () => null,\n\t\tvisitRelation: ({ targetEntity }) => targetEntity,\n\t})\n}\n\nexport const acceptEveryFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tvisitor: Model.FieldVisitor<T>,\n): { [fieldName: string]: T } => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst result: { [fieldName: string]: T } = {}\n\tfor (const field in entityObj.fields) {\n\t\tresult[field] = acceptFieldVisitor(schema, entityObj, field, visitor)\n\t}\n\treturn result\n}\n\nexport const acceptFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tfield: string | Model.AnyField,\n\tvisitor: Model.FieldVisitor<T>,\n): T => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst fieldObj: Model.AnyField = typeof field === 'string' ? entityObj.fields[field] : field\n\tif (!fieldObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof field === 'string' ? field : 'unknown')\n\t}\n\n\tif (isIt<Model.AnyColumn>(fieldObj, 'columnType')) {\n\t\treturn visitor.visitColumn({\n\t\t\tentity: entityObj,\n\t\t\tcolumn: fieldObj,\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationVisitor<T>>(visitor, 'visitRelation')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitRelation.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByGenericTypeVisitor<T>>(visitor, 'visitHasMany')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitHasOne.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByTypeVisitor<T>>(visitor, 'visitManyHasManyInverse')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, visitor)\n\t}\n\n\tthrow new Error()\n}\n\nexport const acceptRelationTypeVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\trelation: string | Model.AnyRelation,\n\tvisitor: Model.RelationByTypeVisitor<T>,\n): T => {\n\tconst entityObj = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst relationObj: Model.AnyField = typeof relation === 'string' ? entityObj.fields[relation] : relation\n\tif (!relationObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof relation === 'string' ? relation : 'unknown')\n\t}\n\n\tif (!isRelation(relationObj)) {\n\t\tthrow new ModelError(\n\t\t\tModelErrorCode.NOT_RELATION,\n\t\t\t`Field ${relationObj.name} of entity ${entityObj.name} is not a relation`,\n\t\t)\n\t}\n\n\tconst targetEntity = getEntity(schema, relationObj.target)\n\n\tif (isInverseRelation(relationObj)) {\n\t\tconst targetRelation = targetEntity.fields[relationObj.ownedBy]\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyInverse({\n\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyOwningRelation,\n\t\t\t\t},\n\t\t\t\t)\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneInverse({\n\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasMany:\n\t\t\t\treturn visitor.visitOneHasMany({\n\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasOneRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t} else if (isOwningRelation(relationObj)) {\n\t\tconst targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null\n\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyOwning({\n\t\t\t\t\ttype: 'manyHasManyOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneOwning({\n\t\t\t\t\ttype: 'oneHasOneOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.ManyHasOne:\n\t\t\t\treturn visitor.visitManyHasOne({\n\t\t\t\t\ttype: 'manyHasOne',\n\t\t\t\t\tentity: entityObj, //\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasManyRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t}\n\n\tthrow new Error('Invalid relation type')\n}\n\nexport const isRelation = (field: Model.AnyField): field is Model.AnyRelation => {\n\treturn isIt<Model.Relation>(field, 'target')\n}\n\nexport const isInverseRelation = (relation: Model.Relation): relation is Model.InverseRelation => {\n\treturn (relation as Model.InverseRelation).ownedBy !== undefined\n}\n\nexport const isOwningRelation = (relation: Model.Relation): relation is Model.OwningRelation => {\n\treturn !isInverseRelation(relation)\n}\n\nexport const isColumn = (field: Model.AnyField): field is Model.AnyColumn => isIt<Model.AnyColumn>(field, 'columnType')\n\nexport const emptyModelSchema: Model.Schema = { entities: {}, enums: {} }\n"],"names":["ModelErrorCode","schema","entity","isIt","Model","assertNever"],"mappings":"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"}
1
+ {"version":3,"file":"modelUtils.cjs","sources":["../../../../../packages/schema-utils/src/model/modelUtils.ts"],"sourcesContent":["import { assertNever, isIt } from '../utils'\nimport { Model } from '@contember/schema'\n\nexport enum ModelErrorCode {\n\tENTITY_NOT_FOUND = 'entityNotFound',\n\tFIELD_NOT_FOUND = 'fieldNotFound',\n\tNOT_RELATION = 'notRelation',\n\tNOT_OWNING_SIDE = 'notOwningSide',\n}\n\nexport class ModelError extends Error {\n\tconstructor(public readonly code: ModelErrorCode, message: string) {\n\t\tsuper(message)\n\t}\n}\n\nconst createEntityNotFoundError = (entityName: string) =>\n\tnew ModelError(ModelErrorCode.ENTITY_NOT_FOUND, `Entity ${entityName} not found`)\n\nconst createFieldNotFoundError = (entityName: string, fieldName: string) =>\n\tnew ModelError(ModelErrorCode.FIELD_NOT_FOUND, `Field ${fieldName} of entity ${entityName} not found`)\n\nexport const getEntity = (schema: Model.Schema, entityName: string): Model.Entity => {\n\tconst entity = schema.entities[entityName]\n\tif (!entity) {\n\t\tthrow createEntityNotFoundError(entityName)\n\t}\n\treturn entity\n}\n\nexport const getField = (entity: Model.Entity, fieldName: string): Model.AnyField => {\n\tconst field = entity.fields[fieldName]\n\tif (!field) {\n\t\tthrow createFieldNotFoundError(entity.name, fieldName)\n\t}\n\treturn field\n}\n\nexport const getColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\tvisitColumn: ({ column }) => column.columnName,\n\t\tvisitRelation: ({ entity, relation }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn relation.joiningColumn.columnName\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const tryGetColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\ttry {\n\t\treturn getColumnName(schema, entity, fieldName)\n\t} catch (e) {\n\t\tif (e instanceof ModelError && e.code === ModelErrorCode.NOT_OWNING_SIDE) {\n\t\t\treturn undefined\n\t\t}\n\t\tthrow e\n\t}\n}\n\nexport const getColumnType = (schema: Model.Schema, entity: Model.Entity, fieldName: string): string => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\t// TODO solve enum handling properly maybe we should distinguish between domain and column type\n\t\tvisitColumn: ({ column }) => (column.type === Model.ColumnType.Enum ? 'text' : column.columnType),\n\t\tvisitRelation: ({ entity, relation, targetEntity }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn getColumnType(schema, targetEntity, targetEntity.primary)\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const getTargetEntity = (\n\tschema: Model.Schema,\n\tentity: Model.Entity,\n\trelationName: string,\n): Model.Entity | null => {\n\treturn acceptFieldVisitor(schema, entity, relationName, {\n\t\tvisitColumn: () => null,\n\t\tvisitRelation: ({ targetEntity }) => targetEntity,\n\t})\n}\n\nexport const acceptEveryFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tvisitor: Model.FieldVisitor<T>,\n): { [fieldName: string]: T } => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst result: { [fieldName: string]: T } = {}\n\tfor (const field in entityObj.fields) {\n\t\tresult[field] = acceptFieldVisitor(schema, entityObj, field, visitor)\n\t}\n\treturn result\n}\n\nexport const acceptFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tfield: string | Model.AnyField,\n\tvisitor: Model.FieldVisitor<T>,\n): T => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst fieldObj: Model.AnyField = typeof field === 'string' ? entityObj.fields[field] : field\n\tif (!fieldObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof field === 'string' ? field : 'unknown')\n\t}\n\n\tif (isIt<Model.AnyColumn>(fieldObj, 'columnType')) {\n\t\treturn visitor.visitColumn({\n\t\t\tentity: entityObj,\n\t\t\tcolumn: fieldObj,\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationVisitor<T>>(visitor, 'visitRelation')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitRelation.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByGenericTypeVisitor<T>>(visitor, 'visitHasMany')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitHasOne.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByTypeVisitor<T>>(visitor, 'visitManyHasManyInverse')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, visitor)\n\t}\n\n\tthrow new Error()\n}\n\nexport const acceptRelationTypeVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\trelation: string | Model.AnyRelation,\n\tvisitor: Model.RelationByTypeVisitor<T>,\n): T => {\n\tconst entityObj = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst relationObj: Model.AnyField = typeof relation === 'string' ? entityObj.fields[relation] : relation\n\tif (!relationObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof relation === 'string' ? relation : 'unknown')\n\t}\n\n\tif (!isRelation(relationObj)) {\n\t\tthrow new ModelError(\n\t\t\tModelErrorCode.NOT_RELATION,\n\t\t\t`Field ${relationObj.name} of entity ${entityObj.name} is not a relation`,\n\t\t)\n\t}\n\n\tconst targetEntity = getEntity(schema, relationObj.target)\n\n\tif (isInverseRelation(relationObj)) {\n\t\tconst targetRelation = targetEntity.fields[relationObj.ownedBy]\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyInverse({\n\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyOwningRelation,\n\t\t\t\t},\n\t\t\t\t)\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneInverse({\n\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasMany:\n\t\t\t\treturn visitor.visitOneHasMany({\n\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasOneRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t} else if (isOwningRelation(relationObj)) {\n\t\tconst targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null\n\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyOwning({\n\t\t\t\t\ttype: 'manyHasManyOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneOwning({\n\t\t\t\t\ttype: 'oneHasOneOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.ManyHasOne:\n\t\t\t\treturn visitor.visitManyHasOne({\n\t\t\t\t\ttype: 'manyHasOne',\n\t\t\t\t\tentity: entityObj, //\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasManyRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t}\n\n\tthrow new Error('Invalid relation type')\n}\n\nexport const isRelation = (field: Model.AnyField): field is Model.AnyRelation => {\n\treturn isIt<Model.Relation>(field, 'target')\n}\n\nexport const isInverseRelation = (relation: Model.Relation): relation is Model.InverseRelation => {\n\treturn (relation as Model.InverseRelation).ownedBy !== undefined\n}\n\nexport const isOwningRelation = (relation: Model.Relation): relation is Model.OwningRelation => {\n\treturn !isInverseRelation(relation)\n}\n\nexport const isColumn = (field: Model.AnyField): field is Model.AnyColumn => isIt<Model.AnyColumn>(field, 'columnType')\n\nexport const emptyModelSchema: Model.Schema = { entities: {}, enums: {} }\n"],"names":["ModelErrorCode","schema","entity","isIt","Model","assertNever"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"modelUtils.js","sources":["../../../../../packages/schema-utils/src/model/modelUtils.ts"],"sourcesContent":["import { assertNever, isIt } from '../utils'\nimport { Model } from '@contember/schema'\n\nexport enum ModelErrorCode {\n\tENTITY_NOT_FOUND = 'entityNotFound',\n\tFIELD_NOT_FOUND = 'fieldNotFound',\n\tNOT_RELATION = 'notRelation',\n\tNOT_OWNING_SIDE = 'notOwningSide',\n}\n\nexport class ModelError extends Error {\n\tconstructor(public readonly code: ModelErrorCode, message: string) {\n\t\tsuper(message)\n\t}\n}\n\nconst createEntityNotFoundError = (entityName: string) =>\n\tnew ModelError(ModelErrorCode.ENTITY_NOT_FOUND, `Entity ${entityName} not found`)\n\nconst createFieldNotFoundError = (entityName: string, fieldName: string) =>\n\tnew ModelError(ModelErrorCode.FIELD_NOT_FOUND, `Field ${fieldName} of entity ${entityName} not found`)\n\nexport const getEntity = (schema: Model.Schema, entityName: string): Model.Entity => {\n\tconst entity = schema.entities[entityName]\n\tif (!entity) {\n\t\tthrow createEntityNotFoundError(entityName)\n\t}\n\treturn entity\n}\n\nexport const getField = (entity: Model.Entity, fieldName: string): Model.AnyField => {\n\tconst field = entity.fields[fieldName]\n\tif (!field) {\n\t\tthrow createFieldNotFoundError(entity.name, fieldName)\n\t}\n\treturn field\n}\n\nexport const getColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\tvisitColumn: ({ column }) => column.columnName,\n\t\tvisitRelation: ({ entity, relation }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn relation.joiningColumn.columnName\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const tryGetColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\ttry {\n\t\treturn getColumnName(schema, entity, fieldName)\n\t} catch (e) {\n\t\tif (e instanceof ModelError && e.code === ModelErrorCode.NOT_OWNING_SIDE) {\n\t\t\treturn undefined\n\t\t}\n\t\tthrow e\n\t}\n}\n\nexport const getColumnType = (schema: Model.Schema, entity: Model.Entity, fieldName: string): string => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\t// TODO solve enum handling properly maybe we should distinguish between domain and column type\n\t\tvisitColumn: ({ column }) => (column.type === Model.ColumnType.Enum ? 'text' : column.columnType),\n\t\tvisitRelation: ({ entity, relation, targetEntity }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn getColumnType(schema, targetEntity, targetEntity.primary)\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const getTargetEntity = (\n\tschema: Model.Schema,\n\tentity: Model.Entity,\n\trelationName: string,\n): Model.Entity | null => {\n\treturn acceptFieldVisitor(schema, entity, relationName, {\n\t\tvisitColumn: () => null,\n\t\tvisitRelation: ({ targetEntity }) => targetEntity,\n\t})\n}\n\nexport const acceptEveryFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tvisitor: Model.FieldVisitor<T>,\n): { [fieldName: string]: T } => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst result: { [fieldName: string]: T } = {}\n\tfor (const field in entityObj.fields) {\n\t\tresult[field] = acceptFieldVisitor(schema, entityObj, field, visitor)\n\t}\n\treturn result\n}\n\nexport const acceptFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tfield: string | Model.AnyField,\n\tvisitor: Model.FieldVisitor<T>,\n): T => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst fieldObj: Model.AnyField = typeof field === 'string' ? entityObj.fields[field] : field\n\tif (!fieldObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof field === 'string' ? field : 'unknown')\n\t}\n\n\tif (isIt<Model.AnyColumn>(fieldObj, 'columnType')) {\n\t\treturn visitor.visitColumn({\n\t\t\tentity: entityObj,\n\t\t\tcolumn: fieldObj,\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationVisitor<T>>(visitor, 'visitRelation')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitRelation.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByGenericTypeVisitor<T>>(visitor, 'visitHasMany')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitHasOne.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByTypeVisitor<T>>(visitor, 'visitManyHasManyInverse')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, visitor)\n\t}\n\n\tthrow new Error()\n}\n\nexport const acceptRelationTypeVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\trelation: string | Model.AnyRelation,\n\tvisitor: Model.RelationByTypeVisitor<T>,\n): T => {\n\tconst entityObj = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst relationObj: Model.AnyField = typeof relation === 'string' ? entityObj.fields[relation] : relation\n\tif (!relationObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof relation === 'string' ? relation : 'unknown')\n\t}\n\n\tif (!isRelation(relationObj)) {\n\t\tthrow new ModelError(\n\t\t\tModelErrorCode.NOT_RELATION,\n\t\t\t`Field ${relationObj.name} of entity ${entityObj.name} is not a relation`,\n\t\t)\n\t}\n\n\tconst targetEntity = getEntity(schema, relationObj.target)\n\n\tif (isInverseRelation(relationObj)) {\n\t\tconst targetRelation = targetEntity.fields[relationObj.ownedBy]\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyInverse({\n\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyOwningRelation,\n\t\t\t\t},\n\t\t\t\t)\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneInverse({\n\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasMany:\n\t\t\t\treturn visitor.visitOneHasMany({\n\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasOneRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t} else if (isOwningRelation(relationObj)) {\n\t\tconst targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null\n\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyOwning({\n\t\t\t\t\ttype: 'manyHasManyOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneOwning({\n\t\t\t\t\ttype: 'oneHasOneOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.ManyHasOne:\n\t\t\t\treturn visitor.visitManyHasOne({\n\t\t\t\t\ttype: 'manyHasOne',\n\t\t\t\t\tentity: entityObj, //\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasManyRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t}\n\n\tthrow new Error('Invalid relation type')\n}\n\nexport const isRelation = (field: Model.AnyField): field is Model.AnyRelation => {\n\treturn isIt<Model.Relation>(field, 'target')\n}\n\nexport const isInverseRelation = (relation: Model.Relation): relation is Model.InverseRelation => {\n\treturn (relation as Model.InverseRelation).ownedBy !== undefined\n}\n\nexport const isOwningRelation = (relation: Model.Relation): relation is Model.OwningRelation => {\n\treturn !isInverseRelation(relation)\n}\n\nexport const isColumn = (field: Model.AnyField): field is Model.AnyColumn => isIt<Model.AnyColumn>(field, 'columnType')\n\nexport const emptyModelSchema: Model.Schema = { entities: {}, enums: {} }\n"],"names":["ModelErrorCode","entity"],"mappings":";;;AAGY,IAAA,mCAAAA,oBAAL;AACNA,kBAAA,kBAAmB,IAAA;AACnBA,kBAAA,iBAAkB,IAAA;AAClBA,kBAAA,cAAe,IAAA;AACfA,kBAAA,iBAAkB,IAAA;AAJPA,SAAAA;AAAA,GAAA,kBAAA,CAAA,CAAA;AAOL,MAAM,mBAAmB,MAAM;AAAA,EACrC,YAA4B,MAAsB,SAAiB;AAClE,UAAM,OAAO;AADc,SAAA,OAAA;AAAA,EAE5B;AACD;AAEA,MAAM,4BAA4B,CAAC,eAClC,IAAI,WAAW,kBAAiC,UAAU,UAAU,YAAY;AAEjF,MAAM,2BAA2B,CAAC,YAAoB,cACrD,IAAI,WAAW,iBAAgC,SAAS,SAAS,cAAc,UAAU,YAAY;AAEzF,MAAA,YAAY,CAAC,QAAsB,eAAqC;AAC9E,QAAA,SAAS,OAAO,SAAS,UAAU;AACzC,MAAI,CAAC,QAAQ;AACZ,UAAM,0BAA0B,UAAU;AAAA,EAC3C;AACO,SAAA;AACR;AAEa,MAAA,WAAW,CAAC,QAAsB,cAAsC;AAC9E,QAAA,QAAQ,OAAO,OAAO,SAAS;AACrC,MAAI,CAAC,OAAO;AACL,UAAA,yBAAyB,OAAO,MAAM,SAAS;AAAA,EACtD;AACO,SAAA;AACR;AAEO,MAAM,gBAAgB,CAAC,QAAsB,QAAsB,cAAsB;AACxF,SAAA,mBAAmB,QAAQ,QAAQ,WAAW;AAAA,IACpD,aAAa,CAAC,EAAE,aAAa,OAAO;AAAA,IACpC,eAAe,CAAC,EAAE,QAAAC,SAAQ,eAAe;AACpC,UAAA,KAAkC,UAAU,eAAe,GAAG;AACjE,eAAO,SAAS,cAAc;AAAA,MAC/B;AACA,YAAM,IAAI;AAAA,QACT;AAAA,QACA,SAAS,SAAS,IAAI,cAAcA,QAAO,IAAI;AAAA,MAAA;AAAA,IAEjD;AAAA,EAAA,CACA;AACF;AAEO,MAAM,mBAAmB,CAAC,QAAsB,QAAsB,cAAsB;AAC9F,MAAA;AACI,WAAA,cAAc,QAAQ,QAAQ,SAAS;AAAA,WACtC,GAAG;AACX,QAAI,aAAa,cAAc,EAAE,SAAS,iBAAgC;AAClE,aAAA;AAAA,IACR;AACM,UAAA;AAAA,EACP;AACD;AAEO,MAAM,gBAAgB,CAAC,QAAsB,QAAsB,cAA8B;AAChG,SAAA,mBAAmB,QAAQ,QAAQ,WAAW;AAAA;AAAA,IAEpD,aAAa,CAAC,EAAE,OAAO,MAAO,OAAO,SAAS,MAAM,WAAW,OAAO,SAAS,OAAO;AAAA,IACtF,eAAe,CAAC,EAAE,QAAAA,SAAQ,UAAU,mBAAmB;AAClD,UAAA,KAAkC,UAAU,eAAe,GAAG;AACjE,eAAO,cAAc,QAAQ,cAAc,aAAa,OAAO;AAAA,MAChE;AACA,YAAM,IAAI;AAAA,QACT;AAAA,QACA,SAAS,SAAS,IAAI,cAAcA,QAAO,IAAI;AAAA,MAAA;AAAA,IAEjD;AAAA,EAAA,CACA;AACF;AAEO,MAAM,kBAAkB,CAC9B,QACA,QACA,iBACyB;AAClB,SAAA,mBAAmB,QAAQ,QAAQ,cAAc;AAAA,IACvD,aAAa,MAAM;AAAA,IACnB,eAAe,CAAC,EAAE,aAAA,MAAmB;AAAA,EAAA,CACrC;AACF;AAEO,MAAM,0BAA0B,CACtC,QACA,QACA,YACgC;AAChC,QAAM,YAA0B,OAAO,WAAW,WAAW,UAAU,QAAQ,MAAM,IAAI;AAEzF,QAAM,SAAqC,CAAA;AAChC,aAAA,SAAS,UAAU,QAAQ;AACrC,WAAO,KAAK,IAAI,mBAAmB,QAAQ,WAAW,OAAO,OAAO;AAAA,EACrE;AACO,SAAA;AACR;AAEO,MAAM,qBAAqB,CACjC,QACA,QACA,OACA,YACO;AACP,QAAM,YAA0B,OAAO,WAAW,WAAW,UAAU,QAAQ,MAAM,IAAI;AAEzF,QAAM,WAA2B,OAAO,UAAU,WAAW,UAAU,OAAO,KAAK,IAAI;AACvF,MAAI,CAAC,UAAU;AACd,UAAM,yBAAyB,UAAU,MAAM,OAAO,UAAU,WAAW,QAAQ,SAAS;AAAA,EAC7F;AAEI,MAAA,KAAsB,UAAU,YAAY,GAAG;AAClD,WAAO,QAAQ,YAAY;AAAA,MAC1B,QAAQ;AAAA,MACR,QAAQ;AAAA,IAAA,CACR;AAAA,EACF;AAEI,MAAA,KAAwD,SAAS,eAAe,GAAG;AAC/E,WAAA,0BAA0B,QAAQ,WAAW,UAAU;AAAA,MAC7D,yBAAyB,QAAQ,cAAc,KAAK,OAAO;AAAA,MAC3D,wBAAwB,QAAQ,cAAc,KAAK,OAAO;AAAA,MAC1D,iBAAiB,QAAQ,cAAc,KAAK,OAAO;AAAA,MACnD,uBAAuB,QAAQ,cAAc,KAAK,OAAO;AAAA,MACzD,sBAAsB,QAAQ,cAAc,KAAK,OAAO;AAAA,MACxD,iBAAiB,QAAQ,cAAc,KAAK,OAAO;AAAA,IAAA,CACnD;AAAA,EACF;AAEI,MAAA,KAAqE,SAAS,cAAc,GAAG;AAC3F,WAAA,0BAA0B,QAAQ,WAAW,UAAU;AAAA,MAC7D,yBAAyB,QAAQ,aAAa,KAAK,OAAO;AAAA,MAC1D,wBAAwB,QAAQ,aAAa,KAAK,OAAO;AAAA,MACzD,iBAAiB,QAAQ,aAAa,KAAK,OAAO;AAAA,MAClD,uBAAuB,QAAQ,YAAY,KAAK,OAAO;AAAA,MACvD,sBAAsB,QAAQ,YAAY,KAAK,OAAO;AAAA,MACtD,iBAAiB,QAAQ,YAAY,KAAK,OAAO;AAAA,IAAA,CACjD;AAAA,EACF;AAEI,MAAA,KAA8D,SAAS,yBAAyB,GAAG;AACtG,WAAO,0BAA0B,QAAQ,WAAW,UAAU,OAAO;AAAA,EACtE;AAEA,QAAM,IAAI,MAAM;AACjB;AAEO,MAAM,4BAA4B,CACxC,QACA,QACA,UACA,YACO;AACP,QAAM,YAAY,OAAO,WAAW,WAAW,UAAU,QAAQ,MAAM,IAAI;AAE3E,QAAM,cAA8B,OAAO,aAAa,WAAW,UAAU,OAAO,QAAQ,IAAI;AAChG,MAAI,CAAC,aAAa;AACjB,UAAM,yBAAyB,UAAU,MAAM,OAAO,aAAa,WAAW,WAAW,SAAS;AAAA,EACnG;AAEI,MAAA,CAAC,WAAW,WAAW,GAAG;AAC7B,UAAM,IAAI;AAAA,MACT;AAAA,MACA,SAAS,YAAY,IAAI,cAAc,UAAU,IAAI;AAAA,IAAA;AAAA,EAEvD;AAEA,QAAM,eAAe,UAAU,QAAQ,YAAY,MAAM;AAErD,MAAA,kBAAkB,WAAW,GAAG;AACnC,UAAM,iBAAiB,aAAa,OAAO,YAAY,OAAO;AAC9D,YAAQ,YAAY,MAAM;AAAA,MACzB,KAAK,MAAM,aAAa;AACvB,eAAO,QAAQ;AAAA,UAAwB;AAAA,YACtC,MAAM;AAAA,YACN,QAAQ;AAAA,YACR,UAAU;AAAA,YACV;AAAA,YACA;AAAA,UACD;AAAA,QAAA;AAAA,MAED,KAAK,MAAM,aAAa;AACvB,eAAO,QAAQ,sBAAsB;AAAA,UACpC,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QAAA,CACA;AAAA,MACF,KAAK,MAAM,aAAa;AACvB,eAAO,QAAQ,gBAAgB;AAAA,UAC9B,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QAAA,CACA;AAAA,MACF;AACC,eAAO,YAAuB;AAAA,IAChC;AAAA,EAAA,WACU,iBAAiB,WAAW,GAAG;AACzC,UAAM,iBAAiB,YAAY,aAAa,aAAa,OAAO,YAAY,UAAU,IAAI;AAE9F,YAAQ,YAAY,MAAM;AAAA,MACzB,KAAK,MAAM,aAAa;AACvB,eAAO,QAAQ,uBAAuB;AAAA,UACrC,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QAAA,CACA;AAAA,MACF,KAAK,MAAM,aAAa;AACvB,eAAO,QAAQ,qBAAqB;AAAA,UACnC,MAAM;AAAA,UACN,QAAQ;AAAA,UACR,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QAAA,CACA;AAAA,MACF,KAAK,MAAM,aAAa;AACvB,eAAO,QAAQ,gBAAgB;AAAA,UAC9B,MAAM;AAAA,UACN,QAAQ;AAAA;AAAA,UACR,UAAU;AAAA,UACV;AAAA,UACA;AAAA,QAAA,CACA;AAAA,MACF;AACC,eAAO,YAAuB;AAAA,IAChC;AAAA,EACD;AAEM,QAAA,IAAI,MAAM,uBAAuB;AACxC;AAEa,MAAA,aAAa,CAAC,UAAsD;AACzE,SAAA,KAAqB,OAAO,QAAQ;AAC5C;AAEa,MAAA,oBAAoB,CAAC,aAAgE;AACjG,SAAQ,SAAmC,YAAY;AACxD;AAEa,MAAA,mBAAmB,CAAC,aAA+D;AACxF,SAAA,CAAC,kBAAkB,QAAQ;AACnC;AAEO,MAAM,WAAW,CAAC,UAAoD,KAAsB,OAAO,YAAY;AAE/G,MAAM,mBAAiC,EAAE,UAAU,CAAI,GAAA,OAAO,CAAG,EAAA;"}
1
+ {"version":3,"file":"modelUtils.js","sources":["../../../../../packages/schema-utils/src/model/modelUtils.ts"],"sourcesContent":["import { assertNever, isIt } from '../utils'\nimport { Model } from '@contember/schema'\n\nexport enum ModelErrorCode {\n\tENTITY_NOT_FOUND = 'entityNotFound',\n\tFIELD_NOT_FOUND = 'fieldNotFound',\n\tNOT_RELATION = 'notRelation',\n\tNOT_OWNING_SIDE = 'notOwningSide',\n}\n\nexport class ModelError extends Error {\n\tconstructor(public readonly code: ModelErrorCode, message: string) {\n\t\tsuper(message)\n\t}\n}\n\nconst createEntityNotFoundError = (entityName: string) =>\n\tnew ModelError(ModelErrorCode.ENTITY_NOT_FOUND, `Entity ${entityName} not found`)\n\nconst createFieldNotFoundError = (entityName: string, fieldName: string) =>\n\tnew ModelError(ModelErrorCode.FIELD_NOT_FOUND, `Field ${fieldName} of entity ${entityName} not found`)\n\nexport const getEntity = (schema: Model.Schema, entityName: string): Model.Entity => {\n\tconst entity = schema.entities[entityName]\n\tif (!entity) {\n\t\tthrow createEntityNotFoundError(entityName)\n\t}\n\treturn entity\n}\n\nexport const getField = (entity: Model.Entity, fieldName: string): Model.AnyField => {\n\tconst field = entity.fields[fieldName]\n\tif (!field) {\n\t\tthrow createFieldNotFoundError(entity.name, fieldName)\n\t}\n\treturn field\n}\n\nexport const getColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\tvisitColumn: ({ column }) => column.columnName,\n\t\tvisitRelation: ({ entity, relation }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn relation.joiningColumn.columnName\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const tryGetColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\ttry {\n\t\treturn getColumnName(schema, entity, fieldName)\n\t} catch (e) {\n\t\tif (e instanceof ModelError && e.code === ModelErrorCode.NOT_OWNING_SIDE) {\n\t\t\treturn undefined\n\t\t}\n\t\tthrow e\n\t}\n}\n\nexport const getColumnType = (schema: Model.Schema, entity: Model.Entity, fieldName: string): string => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\t// TODO solve enum handling properly maybe we should distinguish between domain and column type\n\t\tvisitColumn: ({ column }) => (column.type === Model.ColumnType.Enum ? 'text' : column.columnType),\n\t\tvisitRelation: ({ entity, relation, targetEntity }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn getColumnType(schema, targetEntity, targetEntity.primary)\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const getTargetEntity = (\n\tschema: Model.Schema,\n\tentity: Model.Entity,\n\trelationName: string,\n): Model.Entity | null => {\n\treturn acceptFieldVisitor(schema, entity, relationName, {\n\t\tvisitColumn: () => null,\n\t\tvisitRelation: ({ targetEntity }) => targetEntity,\n\t})\n}\n\nexport const acceptEveryFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tvisitor: Model.FieldVisitor<T>,\n): { [fieldName: string]: T } => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst result: { [fieldName: string]: T } = {}\n\tfor (const field in entityObj.fields) {\n\t\tresult[field] = acceptFieldVisitor(schema, entityObj, field, visitor)\n\t}\n\treturn result\n}\n\nexport const acceptFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tfield: string | Model.AnyField,\n\tvisitor: Model.FieldVisitor<T>,\n): T => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst fieldObj: Model.AnyField = typeof field === 'string' ? entityObj.fields[field] : field\n\tif (!fieldObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof field === 'string' ? field : 'unknown')\n\t}\n\n\tif (isIt<Model.AnyColumn>(fieldObj, 'columnType')) {\n\t\treturn visitor.visitColumn({\n\t\t\tentity: entityObj,\n\t\t\tcolumn: fieldObj,\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationVisitor<T>>(visitor, 'visitRelation')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitRelation.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByGenericTypeVisitor<T>>(visitor, 'visitHasMany')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitHasOne.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByTypeVisitor<T>>(visitor, 'visitManyHasManyInverse')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, visitor)\n\t}\n\n\tthrow new Error()\n}\n\nexport const acceptRelationTypeVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\trelation: string | Model.AnyRelation,\n\tvisitor: Model.RelationByTypeVisitor<T>,\n): T => {\n\tconst entityObj = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst relationObj: Model.AnyField = typeof relation === 'string' ? entityObj.fields[relation] : relation\n\tif (!relationObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof relation === 'string' ? relation : 'unknown')\n\t}\n\n\tif (!isRelation(relationObj)) {\n\t\tthrow new ModelError(\n\t\t\tModelErrorCode.NOT_RELATION,\n\t\t\t`Field ${relationObj.name} of entity ${entityObj.name} is not a relation`,\n\t\t)\n\t}\n\n\tconst targetEntity = getEntity(schema, relationObj.target)\n\n\tif (isInverseRelation(relationObj)) {\n\t\tconst targetRelation = targetEntity.fields[relationObj.ownedBy]\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyInverse({\n\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyOwningRelation,\n\t\t\t\t},\n\t\t\t\t)\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneInverse({\n\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasMany:\n\t\t\t\treturn visitor.visitOneHasMany({\n\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasOneRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t} else if (isOwningRelation(relationObj)) {\n\t\tconst targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null\n\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyOwning({\n\t\t\t\t\ttype: 'manyHasManyOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneOwning({\n\t\t\t\t\ttype: 'oneHasOneOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.ManyHasOne:\n\t\t\t\treturn visitor.visitManyHasOne({\n\t\t\t\t\ttype: 'manyHasOne',\n\t\t\t\t\tentity: entityObj, //\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasManyRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t}\n\n\tthrow new Error('Invalid relation type')\n}\n\nexport const isRelation = (field: Model.AnyField): field is Model.AnyRelation => {\n\treturn isIt<Model.Relation>(field, 'target')\n}\n\nexport const isInverseRelation = (relation: Model.Relation): relation is Model.InverseRelation => {\n\treturn (relation as Model.InverseRelation).ownedBy !== undefined\n}\n\nexport const isOwningRelation = (relation: Model.Relation): relation is Model.OwningRelation => {\n\treturn !isInverseRelation(relation)\n}\n\nexport const isColumn = (field: Model.AnyField): field is Model.AnyColumn => isIt<Model.AnyColumn>(field, 'columnType')\n\nexport const emptyModelSchema: Model.Schema = { entities: {}, enums: {} }\n"],"names":["ModelErrorCode","entity"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolveDefaultColumnType.cjs","sources":["../../../../../packages/schema-utils/src/model/resolveDefaultColumnType.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { assertNever } from '../utils'\n\nexport const resolveDefaultColumnType = (type: Exclude<Model.ColumnType, Model.ColumnType.Enum>): string => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn 'integer'\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn 'double precision'\n\t\tcase Model.ColumnType.String:\n\t\t\treturn 'text'\n\t\tcase Model.ColumnType.Uuid:\n\t\t\treturn 'uuid'\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn 'boolean'\n\t\tcase Model.ColumnType.DateTime:\n\t\t\treturn 'timestamptz'\n\t\tcase Model.ColumnType.Date:\n\t\t\treturn 'date'\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn 'jsonb'\n\t\tdefault:\n\t\t\treturn assertNever(type)\n\t}\n}\n"],"names":["Model","assertNever"],"mappings":";;;;AAGa,MAAA,2BAA2B,CAAC,SAAmE;AAC3G,UAAQ,MAAM;AAAA,IACb,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR;AACC,aAAOC,YAAAA,YAAgB;AAAA,EACzB;AACD;;"}
1
+ {"version":3,"file":"resolveDefaultColumnType.cjs","sources":["../../../../../packages/schema-utils/src/model/resolveDefaultColumnType.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { assertNever } from '../utils'\n\nexport const resolveDefaultColumnType = (type: Exclude<Model.ColumnType, Model.ColumnType.Enum>): string => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn 'integer'\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn 'double precision'\n\t\tcase Model.ColumnType.String:\n\t\t\treturn 'text'\n\t\tcase Model.ColumnType.Uuid:\n\t\t\treturn 'uuid'\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn 'boolean'\n\t\tcase Model.ColumnType.DateTime:\n\t\t\treturn 'timestamptz'\n\t\tcase Model.ColumnType.Date:\n\t\t\treturn 'date'\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn 'jsonb'\n\t\tdefault:\n\t\t\treturn assertNever(type)\n\t}\n}\n"],"names":["Model","assertNever"],"mappings":";;;;AAGa,MAAA,2BAA2B,CAAC,SAAmE;AAC3G,UAAQ,MAAM;AAAA,IACb,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAKA,OAAAA,MAAM,WAAW;AACd,aAAA;AAAA,IACR;AACC,aAAOC,wBAAgB;AAAA,EAAA;AAE1B;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolveDefaultColumnType.js","sources":["../../../../../packages/schema-utils/src/model/resolveDefaultColumnType.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { assertNever } from '../utils'\n\nexport const resolveDefaultColumnType = (type: Exclude<Model.ColumnType, Model.ColumnType.Enum>): string => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn 'integer'\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn 'double precision'\n\t\tcase Model.ColumnType.String:\n\t\t\treturn 'text'\n\t\tcase Model.ColumnType.Uuid:\n\t\t\treturn 'uuid'\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn 'boolean'\n\t\tcase Model.ColumnType.DateTime:\n\t\t\treturn 'timestamptz'\n\t\tcase Model.ColumnType.Date:\n\t\t\treturn 'date'\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn 'jsonb'\n\t\tdefault:\n\t\t\treturn assertNever(type)\n\t}\n}\n"],"names":[],"mappings":";;AAGa,MAAA,2BAA2B,CAAC,SAAmE;AAC3G,UAAQ,MAAM;AAAA,IACb,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR;AACC,aAAO,YAAgB;AAAA,EACzB;AACD;"}
1
+ {"version":3,"file":"resolveDefaultColumnType.js","sources":["../../../../../packages/schema-utils/src/model/resolveDefaultColumnType.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { assertNever } from '../utils'\n\nexport const resolveDefaultColumnType = (type: Exclude<Model.ColumnType, Model.ColumnType.Enum>): string => {\n\tswitch (type) {\n\t\tcase Model.ColumnType.Int:\n\t\t\treturn 'integer'\n\t\tcase Model.ColumnType.Double:\n\t\t\treturn 'double precision'\n\t\tcase Model.ColumnType.String:\n\t\t\treturn 'text'\n\t\tcase Model.ColumnType.Uuid:\n\t\t\treturn 'uuid'\n\t\tcase Model.ColumnType.Bool:\n\t\t\treturn 'boolean'\n\t\tcase Model.ColumnType.DateTime:\n\t\t\treturn 'timestamptz'\n\t\tcase Model.ColumnType.Date:\n\t\t\treturn 'date'\n\t\tcase Model.ColumnType.Json:\n\t\t\treturn 'jsonb'\n\t\tdefault:\n\t\t\treturn assertNever(type)\n\t}\n}\n"],"names":[],"mappings":";;AAGa,MAAA,2BAA2B,CAAC,SAAmE;AAC3G,UAAQ,MAAM;AAAA,IACb,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR,KAAK,MAAM,WAAW;AACd,aAAA;AAAA,IACR;AACC,aAAO,YAAgB;AAAA,EAAA;AAE1B;"}
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const crypto = require("node:crypto");
4
+ const calculateSchemaChecksum = (schema) => {
5
+ const jsonSchema = JSON.stringify(schema);
6
+ return crypto.createHash("md5").update(jsonSchema).digest("hex");
7
+ };
8
+ exports.calculateSchemaChecksum = calculateSchemaChecksum;
9
+ //# sourceMappingURL=schemaChecksum.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaChecksum.cjs","sources":["../../../../packages/schema-utils/src/schemaChecksum.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\nimport crypto from 'node:crypto'\n\n\nexport const calculateSchemaChecksum = (schema: Schema): string => {\n\tconst jsonSchema = JSON.stringify(schema)\n\n\treturn crypto\n\t\t.createHash('md5')\n\t\t.update(jsonSchema)\n\t\t.digest('hex')\n}\n"],"names":[],"mappings":";;;AAIa,MAAA,0BAA0B,CAAC,WAA2B;AAC5D,QAAA,aAAa,KAAK,UAAU,MAAM;AAEjC,SAAA,OACL,WAAW,KAAK,EAChB,OAAO,UAAU,EACjB,OAAO,KAAK;AACf;;"}
@@ -0,0 +1,9 @@
1
+ import crypto__default from "node:crypto";
2
+ const calculateSchemaChecksum = (schema) => {
3
+ const jsonSchema = JSON.stringify(schema);
4
+ return crypto__default.createHash("md5").update(jsonSchema).digest("hex");
5
+ };
6
+ export {
7
+ calculateSchemaChecksum
8
+ };
9
+ //# sourceMappingURL=schemaChecksum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemaChecksum.js","sources":["../../../../packages/schema-utils/src/schemaChecksum.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\nimport crypto from 'node:crypto'\n\n\nexport const calculateSchemaChecksum = (schema: Schema): string => {\n\tconst jsonSchema = JSON.stringify(schema)\n\n\treturn crypto\n\t\t.createHash('md5')\n\t\t.update(jsonSchema)\n\t\t.digest('hex')\n}\n"],"names":["crypto"],"mappings":";AAIa,MAAA,0BAA0B,CAAC,WAA2B;AAC5D,QAAA,aAAa,KAAK,UAAU,MAAM;AAEjC,SAAAA,gBACL,WAAW,KAAK,EAChB,OAAO,UAAU,EACjB,OAAO,KAAK;AACf;"}
@@ -1 +1 @@
1
- {"version":3,"file":"schemaFilter.cjs","sources":["../../../../packages/schema-utils/src/schemaFilter.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\n\nexport const filterSchemaByStage = <S extends Schema>(schema: S, stageSlug: string): S => {\n\tconst roles = Object.entries(schema.acl.roles)\n\t\t.filter(\n\t\t\t([, value]) =>\n\t\t\t\t!value.stages\n\t\t\t\t|| value.stages === '*'\n\t\t\t\t|| !!value.stages.find(pattern => !!new RegExp(pattern).exec(stageSlug)),\n\t\t)\n\t\t.map(([name, definition], index, roles) => [\n\t\t\tname,\n\t\t\t{\n\t\t\t\t...definition,\n\t\t\t\t...(definition.inherits\n\t\t\t\t\t? {\n\t\t\t\t\t\tinherits: definition.inherits.filter(it => roles.map(([role]) => role).includes(it)),\n\t\t\t\t\t }\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t])\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: Object.fromEntries(roles),\n\t\t},\n\t}\n}\n"],"names":["roles"],"mappings":";;AAEa,MAAA,sBAAsB,CAAmB,QAAW,cAAyB;AACzF,QAAM,QAAQ,OAAO,QAAQ,OAAO,IAAI,KAAK,EAC3C;AAAA,IACA,CAAC,CAAG,EAAA,KAAK,MACR,CAAC,MAAM,UACJ,MAAM,WAAW,OACjB,CAAC,CAAC,MAAM,OAAO,KAAK,CAAA,YAAW,CAAC,CAAC,IAAI,OAAO,OAAO,EAAE,KAAK,SAAS,CAAC;AAAA,EAAA,EAExE,IAAI,CAAC,CAAC,MAAM,UAAU,GAAG,OAAOA,WAAU;AAAA,IAC1C;AAAA,IACA;AAAA,MACC,GAAG;AAAA,MACH,GAAI,WAAW,WACZ;AAAA,QACD,UAAU,WAAW,SAAS,OAAO,QAAMA,OAAM,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI,EAAE,SAAS,EAAE,CAAC;AAAA,MAAA,IAElF,CAAC;AAAA,IACL;AAAA,EAAA,CACA;AACK,SAAA;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,MACJ,GAAG,OAAO;AAAA,MACV,OAAO,OAAO,YAAY,KAAK;AAAA,IAChC;AAAA,EAAA;AAEF;;"}
1
+ {"version":3,"file":"schemaFilter.cjs","sources":["../../../../packages/schema-utils/src/schemaFilter.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\n\nexport const filterSchemaByStage = <S extends Schema>(schema: S, stageSlug: string): S => {\n\tconst roles = Object.entries(schema.acl.roles)\n\t\t.filter(\n\t\t\t([, value]) =>\n\t\t\t\t!value.stages\n\t\t\t\t|| value.stages === '*'\n\t\t\t\t|| !!value.stages.find(pattern => !!new RegExp(pattern).exec(stageSlug)),\n\t\t)\n\t\t.map(([name, definition], index, roles) => [\n\t\t\tname,\n\t\t\t{\n\t\t\t\t...definition,\n\t\t\t\t...(definition.inherits\n\t\t\t\t\t? {\n\t\t\t\t\t\tinherits: definition.inherits.filter(it => roles.map(([role]) => role).includes(it)),\n\t\t\t\t\t }\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t])\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: Object.fromEntries(roles),\n\t\t},\n\t}\n}\n"],"names":["roles"],"mappings":";;AAEa,MAAA,sBAAsB,CAAmB,QAAW,cAAyB;AACzF,QAAM,QAAQ,OAAO,QAAQ,OAAO,IAAI,KAAK,EAC3C;AAAA,IACA,CAAC,CAAG,EAAA,KAAK,MACR,CAAC,MAAM,UACJ,MAAM,WAAW,OACjB,CAAC,CAAC,MAAM,OAAO,KAAK,CAAA,YAAW,CAAC,CAAC,IAAI,OAAO,OAAO,EAAE,KAAK,SAAS,CAAC;AAAA,EAAA,EAExE,IAAI,CAAC,CAAC,MAAM,UAAU,GAAG,OAAOA,WAAU;AAAA,IAC1C;AAAA,IACA;AAAA,MACC,GAAG;AAAA,MACH,GAAI,WAAW,WACZ;AAAA,QACD,UAAU,WAAW,SAAS,OAAO,QAAMA,OAAM,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI,EAAE,SAAS,EAAE,CAAC;AAAA,MAAA,IAElF,CAAA;AAAA,IAAC;AAAA,EACL,CACA;AACK,SAAA;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,MACJ,GAAG,OAAO;AAAA,MACV,OAAO,OAAO,YAAY,KAAK;AAAA,IAAA;AAAA,EAEjC;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"schemaFilter.js","sources":["../../../../packages/schema-utils/src/schemaFilter.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\n\nexport const filterSchemaByStage = <S extends Schema>(schema: S, stageSlug: string): S => {\n\tconst roles = Object.entries(schema.acl.roles)\n\t\t.filter(\n\t\t\t([, value]) =>\n\t\t\t\t!value.stages\n\t\t\t\t|| value.stages === '*'\n\t\t\t\t|| !!value.stages.find(pattern => !!new RegExp(pattern).exec(stageSlug)),\n\t\t)\n\t\t.map(([name, definition], index, roles) => [\n\t\t\tname,\n\t\t\t{\n\t\t\t\t...definition,\n\t\t\t\t...(definition.inherits\n\t\t\t\t\t? {\n\t\t\t\t\t\tinherits: definition.inherits.filter(it => roles.map(([role]) => role).includes(it)),\n\t\t\t\t\t }\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t])\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: Object.fromEntries(roles),\n\t\t},\n\t}\n}\n"],"names":["roles"],"mappings":"AAEa,MAAA,sBAAsB,CAAmB,QAAW,cAAyB;AACzF,QAAM,QAAQ,OAAO,QAAQ,OAAO,IAAI,KAAK,EAC3C;AAAA,IACA,CAAC,CAAG,EAAA,KAAK,MACR,CAAC,MAAM,UACJ,MAAM,WAAW,OACjB,CAAC,CAAC,MAAM,OAAO,KAAK,CAAA,YAAW,CAAC,CAAC,IAAI,OAAO,OAAO,EAAE,KAAK,SAAS,CAAC;AAAA,EAAA,EAExE,IAAI,CAAC,CAAC,MAAM,UAAU,GAAG,OAAOA,WAAU;AAAA,IAC1C;AAAA,IACA;AAAA,MACC,GAAG;AAAA,MACH,GAAI,WAAW,WACZ;AAAA,QACD,UAAU,WAAW,SAAS,OAAO,QAAMA,OAAM,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI,EAAE,SAAS,EAAE,CAAC;AAAA,MAAA,IAElF,CAAC;AAAA,IACL;AAAA,EAAA,CACA;AACK,SAAA;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,MACJ,GAAG,OAAO;AAAA,MACV,OAAO,OAAO,YAAY,KAAK;AAAA,IAChC;AAAA,EAAA;AAEF;"}
1
+ {"version":3,"file":"schemaFilter.js","sources":["../../../../packages/schema-utils/src/schemaFilter.ts"],"sourcesContent":["import { Schema } from '@contember/schema'\n\nexport const filterSchemaByStage = <S extends Schema>(schema: S, stageSlug: string): S => {\n\tconst roles = Object.entries(schema.acl.roles)\n\t\t.filter(\n\t\t\t([, value]) =>\n\t\t\t\t!value.stages\n\t\t\t\t|| value.stages === '*'\n\t\t\t\t|| !!value.stages.find(pattern => !!new RegExp(pattern).exec(stageSlug)),\n\t\t)\n\t\t.map(([name, definition], index, roles) => [\n\t\t\tname,\n\t\t\t{\n\t\t\t\t...definition,\n\t\t\t\t...(definition.inherits\n\t\t\t\t\t? {\n\t\t\t\t\t\tinherits: definition.inherits.filter(it => roles.map(([role]) => role).includes(it)),\n\t\t\t\t\t }\n\t\t\t\t\t: {}),\n\t\t\t},\n\t\t])\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: Object.fromEntries(roles),\n\t\t},\n\t}\n}\n"],"names":["roles"],"mappings":"AAEa,MAAA,sBAAsB,CAAmB,QAAW,cAAyB;AACzF,QAAM,QAAQ,OAAO,QAAQ,OAAO,IAAI,KAAK,EAC3C;AAAA,IACA,CAAC,CAAG,EAAA,KAAK,MACR,CAAC,MAAM,UACJ,MAAM,WAAW,OACjB,CAAC,CAAC,MAAM,OAAO,KAAK,CAAA,YAAW,CAAC,CAAC,IAAI,OAAO,OAAO,EAAE,KAAK,SAAS,CAAC;AAAA,EAAA,EAExE,IAAI,CAAC,CAAC,MAAM,UAAU,GAAG,OAAOA,WAAU;AAAA,IAC1C;AAAA,IACA;AAAA,MACC,GAAG;AAAA,MACH,GAAI,WAAW,WACZ;AAAA,QACD,UAAU,WAAW,SAAS,OAAO,QAAMA,OAAM,IAAI,CAAC,CAAC,IAAI,MAAM,IAAI,EAAE,SAAS,EAAE,CAAC;AAAA,MAAA,IAElF,CAAA;AAAA,IAAC;AAAA,EACL,CACA;AACK,SAAA;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,MACJ,GAAG,OAAO;AAAA,MACV,OAAO,OAAO,YAAY,KAAK;AAAA,IAAA;AAAA,EAEjC;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"schemaNormalizer.cjs","sources":["../../../../packages/schema-utils/src/schemaNormalizer.ts"],"sourcesContent":["import { Acl, ProjectRole, Schema } from '@contember/schema'\nimport { AllowAllPermissionFactory } from './acl'\n\nexport const normalizeSchema = <S extends Schema>(schema: S): S => {\n\tconst adminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.ADMIN] ?? {}\n\tconst contentAdminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.CONTENT_ADMIN] ?? {}\n\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: {\n\t\t\t\t...schema.acl.roles,\n\t\t\t\t[ProjectRole.ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\tdebug: true,\n\t\t\t\t\t...adminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.CONTENT_ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\thistory: true,\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\t...contentAdminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.DEPLOYER]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tentities: {},\n\t\t\t\t\tvariables: {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"],"names":["schema","ProjectRole","AllowAllPermissionFactory"],"mappings":";;;;AAGa,MAAA,kBAAkB,CAAmBA,aAAiB;AAClE,QAAM,sBAAoDA,SAAO,IAAI,QAAQC,mBAAY,KAAK,KAAK;AACnG,QAAM,6BAA2DD,SAAO,IAAI,QAAQC,mBAAY,aAAa,KAAK;AAE3G,SAAA;AAAA,IACN,GAAGD;AAAAA,IACH,KAAK;AAAA,MACJ,GAAGA,SAAO;AAAA,MACV,OAAO;AAAA,QACN,GAAGA,SAAO,IAAI;AAAA,QACd,CAACC,OAAAA,YAAY,KAAK,GAAG;AAAA,UACpB,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAIC,0BAAA,0BAAA,EAA4B,OAAOF,SAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YACP;AAAA,UACD;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,QAAQ;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,OAAO;AAAA,UACP,GAAG;AAAA,QACJ;AAAA,QACA,CAACC,OAAAA,YAAY,aAAa,GAAG;AAAA,UAC5B,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAIC,0BAAA,0BAAA,EAA4B,OAAOF,SAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YACP;AAAA,UACD;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,GAAG;AAAA,QACJ;AAAA,QACA,CAACC,OAAAA,YAAY,QAAQ,GAAG;AAAA,UACvB,QAAQ;AAAA,UACR,UAAU,CAAC;AAAA,UACX,WAAW,CAAC;AAAA,QACb;AAAA,MACD;AAAA,IACD;AAAA,EAAA;AAEF;;"}
1
+ {"version":3,"file":"schemaNormalizer.cjs","sources":["../../../../packages/schema-utils/src/schemaNormalizer.ts"],"sourcesContent":["import { Acl, ProjectRole, Schema } from '@contember/schema'\nimport { AllowAllPermissionFactory } from './acl'\n\nexport const normalizeSchema = <S extends Schema>(schema: S): S => {\n\tconst adminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.ADMIN] ?? {}\n\tconst contentAdminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.CONTENT_ADMIN] ?? {}\n\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: {\n\t\t\t\t...schema.acl.roles,\n\t\t\t\t[ProjectRole.ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\tdebug: true,\n\t\t\t\t\t...adminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.CONTENT_ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\thistory: true,\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\t...contentAdminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.DEPLOYER]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tentities: {},\n\t\t\t\t\tvariables: {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"],"names":["schema","ProjectRole","AllowAllPermissionFactory"],"mappings":";;;;AAGa,MAAA,kBAAkB,CAAmBA,aAAiB;AAClE,QAAM,sBAAoDA,SAAO,IAAI,QAAQC,OAAY,YAAA,KAAK,KAAK,CAAC;AACpG,QAAM,6BAA2DD,SAAO,IAAI,QAAQC,OAAY,YAAA,aAAa,KAAK,CAAC;AAE5G,SAAA;AAAA,IACN,GAAGD;AAAAA,IACH,KAAK;AAAA,MACJ,GAAGA,SAAO;AAAA,MACV,OAAO;AAAA,QACN,GAAGA,SAAO,IAAI;AAAA,QACd,CAACC,OAAAA,YAAY,KAAK,GAAG;AAAA,UACpB,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAIC,0BAAA,0BAAA,EAA4B,OAAOF,SAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,QAAQ;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,OAAO;AAAA,UACP,GAAG;AAAA,QACJ;AAAA,QACA,CAACC,OAAAA,YAAY,aAAa,GAAG;AAAA,UAC5B,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAIC,0BAAA,0BAAA,EAA4B,OAAOF,SAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,GAAG;AAAA,QACJ;AAAA,QACA,CAACC,OAAAA,YAAY,QAAQ,GAAG;AAAA,UACvB,QAAQ;AAAA,UACR,UAAU,CAAC;AAAA,UACX,WAAW,CAAA;AAAA,QAAC;AAAA,MACb;AAAA,IACD;AAAA,EAEF;AACD;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"schemaNormalizer.js","sources":["../../../../packages/schema-utils/src/schemaNormalizer.ts"],"sourcesContent":["import { Acl, ProjectRole, Schema } from '@contember/schema'\nimport { AllowAllPermissionFactory } from './acl'\n\nexport const normalizeSchema = <S extends Schema>(schema: S): S => {\n\tconst adminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.ADMIN] ?? {}\n\tconst contentAdminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.CONTENT_ADMIN] ?? {}\n\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: {\n\t\t\t\t...schema.acl.roles,\n\t\t\t\t[ProjectRole.ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\tdebug: true,\n\t\t\t\t\t...adminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.CONTENT_ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\thistory: true,\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\t...contentAdminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.DEPLOYER]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tentities: {},\n\t\t\t\t\tvariables: {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"],"names":[],"mappings":";;AAGa,MAAA,kBAAkB,CAAmB,WAAiB;AAClE,QAAM,sBAAoD,OAAO,IAAI,QAAQ,YAAY,KAAK,KAAK;AACnG,QAAM,6BAA2D,OAAO,IAAI,QAAQ,YAAY,aAAa,KAAK;AAE3G,SAAA;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,MACJ,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,QACN,GAAG,OAAO,IAAI;AAAA,QACd,CAAC,YAAY,KAAK,GAAG;AAAA,UACpB,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAI,0BAAA,EAA4B,OAAO,OAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YACP;AAAA,UACD;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,QAAQ;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,OAAO;AAAA,UACP,GAAG;AAAA,QACJ;AAAA,QACA,CAAC,YAAY,aAAa,GAAG;AAAA,UAC5B,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAI,0BAAA,EAA4B,OAAO,OAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YACP;AAAA,UACD;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,GAAG;AAAA,QACJ;AAAA,QACA,CAAC,YAAY,QAAQ,GAAG;AAAA,UACvB,QAAQ;AAAA,UACR,UAAU,CAAC;AAAA,UACX,WAAW,CAAC;AAAA,QACb;AAAA,MACD;AAAA,IACD;AAAA,EAAA;AAEF;"}
1
+ {"version":3,"file":"schemaNormalizer.js","sources":["../../../../packages/schema-utils/src/schemaNormalizer.ts"],"sourcesContent":["import { Acl, ProjectRole, Schema } from '@contember/schema'\nimport { AllowAllPermissionFactory } from './acl'\n\nexport const normalizeSchema = <S extends Schema>(schema: S): S => {\n\tconst adminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.ADMIN] ?? {}\n\tconst contentAdminRoleDefinition: Partial<Acl.RolePermissions> = schema.acl.roles?.[ProjectRole.CONTENT_ADMIN] ?? {}\n\n\treturn {\n\t\t...schema,\n\t\tacl: {\n\t\t\t...schema.acl,\n\t\t\troles: {\n\t\t\t\t...schema.acl.roles,\n\t\t\t\t[ProjectRole.ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...adminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\tdebug: true,\n\t\t\t\t\t...adminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.CONTENT_ADMIN]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tvariables: {},\n\t\t\t\t\tentities: new AllowAllPermissionFactory().create(schema.model),\n\t\t\t\t\ts3: {\n\t\t\t\t\t\t'**': {\n\t\t\t\t\t\t\tupload: true,\n\t\t\t\t\t\t\tread: true,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tcontent: {\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.content,\n\t\t\t\t\t},\n\t\t\t\t\tsystem: {\n\t\t\t\t\t\thistory: true,\n\t\t\t\t\t\texport: true,\n\t\t\t\t\t\timport: true,\n\t\t\t\t\t\t...contentAdminRoleDefinition.system,\n\t\t\t\t\t},\n\t\t\t\t\t...contentAdminRoleDefinition,\n\t\t\t\t},\n\t\t\t\t[ProjectRole.DEPLOYER]: {\n\t\t\t\t\tstages: '*',\n\t\t\t\t\tentities: {},\n\t\t\t\t\tvariables: {},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t}\n}\n"],"names":[],"mappings":";;AAGa,MAAA,kBAAkB,CAAmB,WAAiB;AAClE,QAAM,sBAAoD,OAAO,IAAI,QAAQ,YAAY,KAAK,KAAK,CAAC;AACpG,QAAM,6BAA2D,OAAO,IAAI,QAAQ,YAAY,aAAa,KAAK,CAAC;AAE5G,SAAA;AAAA,IACN,GAAG;AAAA,IACH,KAAK;AAAA,MACJ,GAAG,OAAO;AAAA,MACV,OAAO;AAAA,QACN,GAAG,OAAO,IAAI;AAAA,QACd,CAAC,YAAY,KAAK,GAAG;AAAA,UACpB,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAI,0BAAA,EAA4B,OAAO,OAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,QAAQ;AAAA,YACP,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,oBAAoB;AAAA,UACxB;AAAA,UACA,OAAO;AAAA,UACP,GAAG;AAAA,QACJ;AAAA,QACA,CAAC,YAAY,aAAa,GAAG;AAAA,UAC5B,QAAQ;AAAA,UACR,WAAW,CAAC;AAAA,UACZ,UAAU,IAAI,0BAAA,EAA4B,OAAO,OAAO,KAAK;AAAA,UAC7D,IAAI;AAAA,YACH,MAAM;AAAA,cACL,QAAQ;AAAA,cACR,MAAM;AAAA,YAAA;AAAA,UAER;AAAA,UACA,SAAS;AAAA,YACR,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,QAAQ;AAAA,YACP,SAAS;AAAA,YACT,QAAQ;AAAA,YACR,QAAQ;AAAA,YACR,GAAG,2BAA2B;AAAA,UAC/B;AAAA,UACA,GAAG;AAAA,QACJ;AAAA,QACA,CAAC,YAAY,QAAQ,GAAG;AAAA,UACvB,QAAQ;AAAA,UACR,UAAU,CAAC;AAAA,UACX,WAAW,CAAA;AAAA,QAAC;AAAA,MACb;AAAA,IACD;AAAA,EAEF;AACD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"acl.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/acl.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport * as Typesafe from '@contember/typesafe'\nimport { conditionSchema } from './condition'\n\nconst membershipMatchRuleSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tTypesafe.literal(true),\n\t\tTypesafe.partial({\n\t\t\tvariables: Typesafe.union(\n\t\t\t\tTypesafe.literal(true),\n\t\t\t\tTypesafe.record(\n\t\t\t\t\tTypesafe.string,\n\t\t\t\t\tTypesafe.union(Typesafe.literal(true), Typesafe.string),\n\t\t\t\t),\n\t\t\t),\n\t\t}),\n\t),\n)\n\nconst tenantPermissionsSchema = Typesafe.partial({\n\tinvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tunmanagedInvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tmanage: membershipMatchRuleSchema,\n\tview: membershipMatchRuleSchema,\n})\nconst tenantSchemaCheck: Typesafe.Equals<Acl.TenantPermissions, ReturnType<typeof tenantPermissionsSchema>> = true\n\nconst systemPermissionsSchema = Typesafe.partial({\n\thistory: Typesafe.union(Typesafe.boolean, Typesafe.enumeration('any', 'none')),\n\tmigrate: Typesafe.boolean,\n\tassumeIdentity: Typesafe.boolean,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst systemSchemaCheck: Typesafe.Equals<Acl.SystemPermissions, ReturnType<typeof systemPermissionsSchema>> = true\n\nconst contentPermissionsSchema = Typesafe.partial({\n\tassumeMembership: membershipMatchRuleSchema,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst contentSchemaCheck: Typesafe.Equals<Acl.ContentPermissions, ReturnType<typeof contentPermissionsSchema>> = true\n\nconst entityVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.entity),\n\t\tentityName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst entityVariableSchemaCheck: Typesafe.Equals<Acl.EntityVariable, ReturnType<typeof entityVariableSchema>> = true\n\nconst predefinedVariableSchema = Typesafe.object({\n\ttype: Typesafe.literal(Acl.VariableType.predefined),\n\tvalue: Typesafe.enumeration('identityID', 'personID'),\n})\nconst conditionVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.condition),\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst conditionVariableSchemaCheck: Typesafe.Equals<Acl.ConditionVariable, ReturnType<typeof conditionVariableSchema>> = true\n\nconst variablesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tentityVariableSchema as Typesafe.Type<Acl.EntityVariable>,\n\t\tpredefinedVariableSchema,\n\t\tconditionVariableSchema as Typesafe.Type<Acl.ConditionVariable>,\n\t),\n)\n\nconst variableSchemaCheck: Typesafe.Equals<Acl.Variables, ReturnType<typeof variablesSchema>> = true\n\nconst fieldPermissionsSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(Typesafe.string, Typesafe.boolean),\n)\nconst predicatesSchema = Typesafe.record(\n\tTypesafe.string,\n\t(v, p): Acl.PredicateDefinition => Typesafe.anyJsonObject(v, p) as Acl.PredicateDefinition,\n)\n\nconst predicatesSchemaCheck: Typesafe.Equals<Acl.PredicateMap, ReturnType<typeof predicatesSchema>> = true\n\nconst entityOperationsSchema = Typesafe.partial({\n\tread: fieldPermissionsSchema,\n\tcreate: fieldPermissionsSchema,\n\tupdate: fieldPermissionsSchema,\n\tdelete: Typesafe.union(Typesafe.string, Typesafe.boolean),\n\tcustomPrimary: Typesafe.boolean,\n})\nconst opSchemaCheck: Typesafe.Equals<Acl.EntityOperations, ReturnType<typeof entityOperationsSchema>> = true\nconst entitiesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.object({\n\t\tpredicates: predicatesSchema,\n\t\toperations: entityOperationsSchema,\n\t}),\n)\nconst entitiesSchemaCheck: Typesafe.Equals<Acl.Permissions, ReturnType<typeof entitiesSchema>> = true\n\nconst baseRolePermissionsSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvariables: variablesSchema,\n\t\tentities: entitiesSchema,\n\t}),\n\tTypesafe.partial({\n\t\tinherits: Typesafe.array(Typesafe.string),\n\t\timplicit: Typesafe.boolean,\n\t\tstages: Typesafe.union(\n\t\t\tTypesafe.literal('*'),\n\t\t\tTypesafe.array(Typesafe.string),\n\t\t),\n\t\ttenant: tenantPermissionsSchema,\n\t\tsystem: systemPermissionsSchema,\n\t\tcontent: contentPermissionsSchema,\n\t\tdebug: Typesafe.boolean,\n\t}),\n)\nconst baseRolePermissionsCheck: Typesafe.Equals<Acl.BaseRolePermissions, ReturnType<typeof baseRolePermissionsSchema>> = true\n\nexport const aclSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\troles: Typesafe.record(\n\t\t\tTypesafe.string,\n\t\t\t(v, p): Acl.RolePermissions => {\n\t\t\t\tconst main: Acl.BaseRolePermissions = baseRolePermissionsSchema(v, p)\n\t\t\t\treturn {\n\t\t\t\t\t...(v as any),\n\t\t\t\t\t...main,\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t}),\n\tTypesafe.partial({\n\t\tcustomPrimary: Typesafe.boolean,\n\t}),\n)\nconst aclSchemaCheck: Typesafe.Equals<Acl.Schema, ReturnType<typeof aclSchema>> = true\n"],"names":["Typesafe","Acl","conditionSchema"],"mappings":"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"}
1
+ {"version":3,"file":"acl.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/acl.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport * as Typesafe from '@contember/typesafe'\nimport { conditionSchema } from './condition'\n\nconst membershipMatchRuleSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tTypesafe.literal(true),\n\t\tTypesafe.partial({\n\t\t\tvariables: Typesafe.union(\n\t\t\t\tTypesafe.literal(true),\n\t\t\t\tTypesafe.record(\n\t\t\t\t\tTypesafe.string,\n\t\t\t\t\tTypesafe.union(Typesafe.literal(true), Typesafe.string),\n\t\t\t\t),\n\t\t\t),\n\t\t}),\n\t),\n)\n\nconst tenantPermissionsSchema = Typesafe.partial({\n\tinvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tunmanagedInvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tmanage: membershipMatchRuleSchema,\n\tview: membershipMatchRuleSchema,\n})\nconst tenantSchemaCheck: Typesafe.Equals<Acl.TenantPermissions, ReturnType<typeof tenantPermissionsSchema>> = true\n\nconst systemPermissionsSchema = Typesafe.partial({\n\thistory: Typesafe.union(Typesafe.boolean, Typesafe.enumeration('any', 'none')),\n\tmigrate: Typesafe.boolean,\n\tassumeIdentity: Typesafe.boolean,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst systemSchemaCheck: Typesafe.Equals<Acl.SystemPermissions, ReturnType<typeof systemPermissionsSchema>> = true\n\nconst contentPermissionsSchema = Typesafe.partial({\n\tassumeMembership: membershipMatchRuleSchema,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst contentSchemaCheck: Typesafe.Equals<Acl.ContentPermissions, ReturnType<typeof contentPermissionsSchema>> = true\n\nconst entityVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.entity),\n\t\tentityName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst entityVariableSchemaCheck: Typesafe.Equals<Acl.EntityVariable, ReturnType<typeof entityVariableSchema>> = true\n\nconst predefinedVariableSchema = Typesafe.object({\n\ttype: Typesafe.literal(Acl.VariableType.predefined),\n\tvalue: Typesafe.enumeration('identityID', 'personID'),\n})\nconst conditionVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.condition),\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst conditionVariableSchemaCheck: Typesafe.Equals<Acl.ConditionVariable, ReturnType<typeof conditionVariableSchema>> = true\n\nconst variablesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tentityVariableSchema as Typesafe.Type<Acl.EntityVariable>,\n\t\tpredefinedVariableSchema,\n\t\tconditionVariableSchema as Typesafe.Type<Acl.ConditionVariable>,\n\t),\n)\n\nconst variableSchemaCheck: Typesafe.Equals<Acl.Variables, ReturnType<typeof variablesSchema>> = true\n\nconst fieldPermissionsSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(Typesafe.string, Typesafe.boolean),\n)\nconst predicatesSchema = Typesafe.record(\n\tTypesafe.string,\n\t(v, p): Acl.PredicateDefinition => Typesafe.anyJsonObject(v, p) as Acl.PredicateDefinition,\n)\n\nconst predicatesSchemaCheck: Typesafe.Equals<Acl.PredicateMap, ReturnType<typeof predicatesSchema>> = true\n\nconst entityOperationsSchema = Typesafe.partial({\n\tread: fieldPermissionsSchema,\n\tcreate: fieldPermissionsSchema,\n\tupdate: fieldPermissionsSchema,\n\tdelete: Typesafe.union(Typesafe.string, Typesafe.boolean),\n\tcustomPrimary: Typesafe.boolean,\n})\nconst opSchemaCheck: Typesafe.Equals<Acl.EntityOperations, ReturnType<typeof entityOperationsSchema>> = true\nconst entitiesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.object({\n\t\tpredicates: predicatesSchema,\n\t\toperations: entityOperationsSchema,\n\t}),\n)\nconst entitiesSchemaCheck: Typesafe.Equals<Acl.Permissions, ReturnType<typeof entitiesSchema>> = true\n\nconst baseRolePermissionsSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvariables: variablesSchema,\n\t\tentities: entitiesSchema,\n\t}),\n\tTypesafe.partial({\n\t\tinherits: Typesafe.array(Typesafe.string),\n\t\timplicit: Typesafe.boolean,\n\t\tstages: Typesafe.union(\n\t\t\tTypesafe.literal('*'),\n\t\t\tTypesafe.array(Typesafe.string),\n\t\t),\n\t\ttenant: tenantPermissionsSchema,\n\t\tsystem: systemPermissionsSchema,\n\t\tcontent: contentPermissionsSchema,\n\t\tdebug: Typesafe.boolean,\n\t}),\n)\nconst baseRolePermissionsCheck: Typesafe.Equals<Acl.BaseRolePermissions, ReturnType<typeof baseRolePermissionsSchema>> = true\n\nexport const aclSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\troles: Typesafe.record(\n\t\t\tTypesafe.string,\n\t\t\t(v, p): Acl.RolePermissions => {\n\t\t\t\tconst main: Acl.BaseRolePermissions = baseRolePermissionsSchema(v, p)\n\t\t\t\treturn {\n\t\t\t\t\t...(v as any),\n\t\t\t\t\t...main,\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t}),\n\tTypesafe.partial({\n\t\tcustomPrimary: Typesafe.boolean,\n\t}),\n)\nconst aclSchemaCheck: Typesafe.Equals<Acl.Schema, ReturnType<typeof aclSchema>> = true\n"],"names":["Typesafe","Acl","conditionSchema"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"acl.js","sources":["../../../../../packages/schema-utils/src/type-schema/acl.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport * as Typesafe from '@contember/typesafe'\nimport { conditionSchema } from './condition'\n\nconst membershipMatchRuleSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tTypesafe.literal(true),\n\t\tTypesafe.partial({\n\t\t\tvariables: Typesafe.union(\n\t\t\t\tTypesafe.literal(true),\n\t\t\t\tTypesafe.record(\n\t\t\t\t\tTypesafe.string,\n\t\t\t\t\tTypesafe.union(Typesafe.literal(true), Typesafe.string),\n\t\t\t\t),\n\t\t\t),\n\t\t}),\n\t),\n)\n\nconst tenantPermissionsSchema = Typesafe.partial({\n\tinvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tunmanagedInvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tmanage: membershipMatchRuleSchema,\n\tview: membershipMatchRuleSchema,\n})\nconst tenantSchemaCheck: Typesafe.Equals<Acl.TenantPermissions, ReturnType<typeof tenantPermissionsSchema>> = true\n\nconst systemPermissionsSchema = Typesafe.partial({\n\thistory: Typesafe.union(Typesafe.boolean, Typesafe.enumeration('any', 'none')),\n\tmigrate: Typesafe.boolean,\n\tassumeIdentity: Typesafe.boolean,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst systemSchemaCheck: Typesafe.Equals<Acl.SystemPermissions, ReturnType<typeof systemPermissionsSchema>> = true\n\nconst contentPermissionsSchema = Typesafe.partial({\n\tassumeMembership: membershipMatchRuleSchema,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst contentSchemaCheck: Typesafe.Equals<Acl.ContentPermissions, ReturnType<typeof contentPermissionsSchema>> = true\n\nconst entityVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.entity),\n\t\tentityName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst entityVariableSchemaCheck: Typesafe.Equals<Acl.EntityVariable, ReturnType<typeof entityVariableSchema>> = true\n\nconst predefinedVariableSchema = Typesafe.object({\n\ttype: Typesafe.literal(Acl.VariableType.predefined),\n\tvalue: Typesafe.enumeration('identityID', 'personID'),\n})\nconst conditionVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.condition),\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst conditionVariableSchemaCheck: Typesafe.Equals<Acl.ConditionVariable, ReturnType<typeof conditionVariableSchema>> = true\n\nconst variablesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tentityVariableSchema as Typesafe.Type<Acl.EntityVariable>,\n\t\tpredefinedVariableSchema,\n\t\tconditionVariableSchema as Typesafe.Type<Acl.ConditionVariable>,\n\t),\n)\n\nconst variableSchemaCheck: Typesafe.Equals<Acl.Variables, ReturnType<typeof variablesSchema>> = true\n\nconst fieldPermissionsSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(Typesafe.string, Typesafe.boolean),\n)\nconst predicatesSchema = Typesafe.record(\n\tTypesafe.string,\n\t(v, p): Acl.PredicateDefinition => Typesafe.anyJsonObject(v, p) as Acl.PredicateDefinition,\n)\n\nconst predicatesSchemaCheck: Typesafe.Equals<Acl.PredicateMap, ReturnType<typeof predicatesSchema>> = true\n\nconst entityOperationsSchema = Typesafe.partial({\n\tread: fieldPermissionsSchema,\n\tcreate: fieldPermissionsSchema,\n\tupdate: fieldPermissionsSchema,\n\tdelete: Typesafe.union(Typesafe.string, Typesafe.boolean),\n\tcustomPrimary: Typesafe.boolean,\n})\nconst opSchemaCheck: Typesafe.Equals<Acl.EntityOperations, ReturnType<typeof entityOperationsSchema>> = true\nconst entitiesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.object({\n\t\tpredicates: predicatesSchema,\n\t\toperations: entityOperationsSchema,\n\t}),\n)\nconst entitiesSchemaCheck: Typesafe.Equals<Acl.Permissions, ReturnType<typeof entitiesSchema>> = true\n\nconst baseRolePermissionsSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvariables: variablesSchema,\n\t\tentities: entitiesSchema,\n\t}),\n\tTypesafe.partial({\n\t\tinherits: Typesafe.array(Typesafe.string),\n\t\timplicit: Typesafe.boolean,\n\t\tstages: Typesafe.union(\n\t\t\tTypesafe.literal('*'),\n\t\t\tTypesafe.array(Typesafe.string),\n\t\t),\n\t\ttenant: tenantPermissionsSchema,\n\t\tsystem: systemPermissionsSchema,\n\t\tcontent: contentPermissionsSchema,\n\t\tdebug: Typesafe.boolean,\n\t}),\n)\nconst baseRolePermissionsCheck: Typesafe.Equals<Acl.BaseRolePermissions, ReturnType<typeof baseRolePermissionsSchema>> = true\n\nexport const aclSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\troles: Typesafe.record(\n\t\t\tTypesafe.string,\n\t\t\t(v, p): Acl.RolePermissions => {\n\t\t\t\tconst main: Acl.BaseRolePermissions = baseRolePermissionsSchema(v, p)\n\t\t\t\treturn {\n\t\t\t\t\t...(v as any),\n\t\t\t\t\t...main,\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t}),\n\tTypesafe.partial({\n\t\tcustomPrimary: Typesafe.boolean,\n\t}),\n)\nconst aclSchemaCheck: Typesafe.Equals<Acl.Schema, ReturnType<typeof aclSchema>> = true\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"acl.js","sources":["../../../../../packages/schema-utils/src/type-schema/acl.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport * as Typesafe from '@contember/typesafe'\nimport { conditionSchema } from './condition'\n\nconst membershipMatchRuleSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tTypesafe.literal(true),\n\t\tTypesafe.partial({\n\t\t\tvariables: Typesafe.union(\n\t\t\t\tTypesafe.literal(true),\n\t\t\t\tTypesafe.record(\n\t\t\t\t\tTypesafe.string,\n\t\t\t\t\tTypesafe.union(Typesafe.literal(true), Typesafe.string),\n\t\t\t\t),\n\t\t\t),\n\t\t}),\n\t),\n)\n\nconst tenantPermissionsSchema = Typesafe.partial({\n\tinvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tunmanagedInvite: Typesafe.union(Typesafe.boolean, membershipMatchRuleSchema),\n\tmanage: membershipMatchRuleSchema,\n\tview: membershipMatchRuleSchema,\n})\nconst tenantSchemaCheck: Typesafe.Equals<Acl.TenantPermissions, ReturnType<typeof tenantPermissionsSchema>> = true\n\nconst systemPermissionsSchema = Typesafe.partial({\n\thistory: Typesafe.union(Typesafe.boolean, Typesafe.enumeration('any', 'none')),\n\tmigrate: Typesafe.boolean,\n\tassumeIdentity: Typesafe.boolean,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst systemSchemaCheck: Typesafe.Equals<Acl.SystemPermissions, ReturnType<typeof systemPermissionsSchema>> = true\n\nconst contentPermissionsSchema = Typesafe.partial({\n\tassumeMembership: membershipMatchRuleSchema,\n\texport: Typesafe.boolean,\n\timport: Typesafe.boolean,\n})\nconst contentSchemaCheck: Typesafe.Equals<Acl.ContentPermissions, ReturnType<typeof contentPermissionsSchema>> = true\n\nconst entityVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.entity),\n\t\tentityName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst entityVariableSchemaCheck: Typesafe.Equals<Acl.EntityVariable, ReturnType<typeof entityVariableSchema>> = true\n\nconst predefinedVariableSchema = Typesafe.object({\n\ttype: Typesafe.literal(Acl.VariableType.predefined),\n\tvalue: Typesafe.enumeration('identityID', 'personID'),\n})\nconst conditionVariableSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal(Acl.VariableType.condition),\n\t}),\n\tTypesafe.partial({\n\t\tfallback: conditionSchema(),\n\t}),\n)\nconst conditionVariableSchemaCheck: Typesafe.Equals<Acl.ConditionVariable, ReturnType<typeof conditionVariableSchema>> = true\n\nconst variablesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(\n\t\tentityVariableSchema as Typesafe.Type<Acl.EntityVariable>,\n\t\tpredefinedVariableSchema,\n\t\tconditionVariableSchema as Typesafe.Type<Acl.ConditionVariable>,\n\t),\n)\n\nconst variableSchemaCheck: Typesafe.Equals<Acl.Variables, ReturnType<typeof variablesSchema>> = true\n\nconst fieldPermissionsSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.union(Typesafe.string, Typesafe.boolean),\n)\nconst predicatesSchema = Typesafe.record(\n\tTypesafe.string,\n\t(v, p): Acl.PredicateDefinition => Typesafe.anyJsonObject(v, p) as Acl.PredicateDefinition,\n)\n\nconst predicatesSchemaCheck: Typesafe.Equals<Acl.PredicateMap, ReturnType<typeof predicatesSchema>> = true\n\nconst entityOperationsSchema = Typesafe.partial({\n\tread: fieldPermissionsSchema,\n\tcreate: fieldPermissionsSchema,\n\tupdate: fieldPermissionsSchema,\n\tdelete: Typesafe.union(Typesafe.string, Typesafe.boolean),\n\tcustomPrimary: Typesafe.boolean,\n})\nconst opSchemaCheck: Typesafe.Equals<Acl.EntityOperations, ReturnType<typeof entityOperationsSchema>> = true\nconst entitiesSchema = Typesafe.record(\n\tTypesafe.string,\n\tTypesafe.object({\n\t\tpredicates: predicatesSchema,\n\t\toperations: entityOperationsSchema,\n\t}),\n)\nconst entitiesSchemaCheck: Typesafe.Equals<Acl.Permissions, ReturnType<typeof entitiesSchema>> = true\n\nconst baseRolePermissionsSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvariables: variablesSchema,\n\t\tentities: entitiesSchema,\n\t}),\n\tTypesafe.partial({\n\t\tinherits: Typesafe.array(Typesafe.string),\n\t\timplicit: Typesafe.boolean,\n\t\tstages: Typesafe.union(\n\t\t\tTypesafe.literal('*'),\n\t\t\tTypesafe.array(Typesafe.string),\n\t\t),\n\t\ttenant: tenantPermissionsSchema,\n\t\tsystem: systemPermissionsSchema,\n\t\tcontent: contentPermissionsSchema,\n\t\tdebug: Typesafe.boolean,\n\t}),\n)\nconst baseRolePermissionsCheck: Typesafe.Equals<Acl.BaseRolePermissions, ReturnType<typeof baseRolePermissionsSchema>> = true\n\nexport const aclSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\troles: Typesafe.record(\n\t\t\tTypesafe.string,\n\t\t\t(v, p): Acl.RolePermissions => {\n\t\t\t\tconst main: Acl.BaseRolePermissions = baseRolePermissionsSchema(v, p)\n\t\t\t\treturn {\n\t\t\t\t\t...(v as any),\n\t\t\t\t\t...main,\n\t\t\t\t}\n\t\t\t},\n\t\t),\n\t}),\n\tTypesafe.partial({\n\t\tcustomPrimary: Typesafe.boolean,\n\t}),\n)\nconst aclSchemaCheck: Typesafe.Equals<Acl.Schema, ReturnType<typeof aclSchema>> = true\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"actions.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/actions.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Actions } from '@contember/schema'\n\nconst selectionNodeSchemaFactory = (): Typesafe.Type<Actions.SelectionNode> => {\n\treturn (input: unknown, path: PropertyKey[] = []): Actions.SelectionNode => {\n\t\treturn Typesafe.array(Typesafe.union(\n\t\t\tTypesafe.string,\n\t\t\tTypesafe.tuple(\n\t\t\t\tTypesafe.string,\n\t\t\t\tTypesafe.anyJsonObject,\n\t\t\t\tselectionNodeSchemaFactory(),\n\t\t\t),\n\t\t))(input, path)\n\t}\n}\n\nconst webhookTargetSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('webhook'),\n\t\tname: Typesafe.string,\n\t\turl: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\theaders: Typesafe.record(Typesafe.string, Typesafe.string),\n\t\ttimeoutMs: Typesafe.integer,\n\t\tmaxAttempts: Typesafe.integer,\n\t\tinitialRepeatIntervalMs: Typesafe.integer,\n\t\tbatchSize: Typesafe.integer,\n\t\tbody: Typesafe.anyJsonObject,\n\t\tpayloadPath: Typesafe.array(Typesafe.string),\n\t}),\n)\nconst webhookTargetSchemaCheck: Typesafe.Equals<Actions.WebhookTarget, ReturnType<typeof webhookTargetSchema>> = true\n\nconst anyTargetSchema: Typesafe.Type<Actions.AnyTarget> = Typesafe.union(webhookTargetSchema)\n\nconst watchTriggerSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('watch'),\n\t\tname: Typesafe.string,\n\t\tentity: Typesafe.string,\n\t\twatch: selectionNodeSchemaFactory(),\n\t\ttarget: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tselection: selectionNodeSchemaFactory(),\n\t\tpriority: Typesafe.integer,\n\t}),\n)\n\nconst watchTriggerSchemaCheck: Typesafe.Equals<Actions.WatchTrigger, ReturnType<typeof watchTriggerSchema>> = true\n\n\nconst basicTriggerSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('basic'),\n\t\tname: Typesafe.string,\n\t\tentity: Typesafe.string,\n\t\tcreate: Typesafe.boolean,\n\t\tdelete: Typesafe.boolean,\n\t\tupdate: Typesafe.union(Typesafe.boolean, Typesafe.array(Typesafe.string)),\n\t\ttarget: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tselection: selectionNodeSchemaFactory(),\n\t\tpriority: Typesafe.integer,\n\t}),\n)\n\nconst basicTriggerSchemaCheck: Typesafe.Equals<Actions.BasicTrigger, ReturnType<typeof basicTriggerSchema>> = true\n\n\nconst anyTriggerSchema = Typesafe.union(\n\twatchTriggerSchema,\n\tbasicTriggerSchema,\n)\n\nexport const actionsSchema = Typesafe.object({\n\ttriggers: Typesafe.record(Typesafe.string, anyTriggerSchema),\n\ttargets: Typesafe.record(Typesafe.string, anyTargetSchema),\n})\n"],"names":["Typesafe"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGA,MAAM,6BAA6B,MAA4C;AAC9E,SAAO,CAAC,OAAgB,OAAsB,OAA8B;AACpE,WAAAA,oBAAS,MAAMA,oBAAS;AAAA,MAC9BA,oBAAS;AAAA,MACTA,oBAAS;AAAA,QACRA,oBAAS;AAAA,QACTA,oBAAS;AAAA,QACT,2BAA2B;AAAA,MAC5B;AAAA,IAAA,CACA,EAAE,OAAO,IAAI;AAAA,EAAA;AAEhB;AAEA,MAAM,sBAAsBA,oBAAS;AAAA,EACpCA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQ,SAAS;AAAA,IAChC,MAAMA,oBAAS;AAAA,IACf,KAAKA,oBAAS;AAAA,EAAA,CACd;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,SAASA,oBAAS,OAAOA,oBAAS,QAAQA,oBAAS,MAAM;AAAA,IACzD,WAAWA,oBAAS;AAAA,IACpB,aAAaA,oBAAS;AAAA,IACtB,yBAAyBA,oBAAS;AAAA,IAClC,WAAWA,oBAAS;AAAA,IACpB,MAAMA,oBAAS;AAAA,IACf,aAAaA,oBAAS,MAAMA,oBAAS,MAAM;AAAA,EAAA,CAC3C;AACF;AAGA,MAAM,kBAAoDA,oBAAS,MAAM,mBAAmB;AAE5F,MAAM,qBAAqBA,oBAAS;AAAA,EACnCA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQ,OAAO;AAAA,IAC9B,MAAMA,oBAAS;AAAA,IACf,QAAQA,oBAAS;AAAA,IACjB,OAAO,2BAA2B;AAAA,IAClC,QAAQA,oBAAS;AAAA,EAAA,CACjB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,WAAW,2BAA2B;AAAA,IACtC,UAAUA,oBAAS;AAAA,EAAA,CACnB;AACF;AAKA,MAAM,qBAAqBA,oBAAS;AAAA,EACnCA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQ,OAAO;AAAA,IAC9B,MAAMA,oBAAS;AAAA,IACf,QAAQA,oBAAS;AAAA,IACjB,QAAQA,oBAAS;AAAA,IACjB,QAAQA,oBAAS;AAAA,IACjB,QAAQA,oBAAS,MAAMA,oBAAS,SAASA,oBAAS,MAAMA,oBAAS,MAAM,CAAC;AAAA,IACxE,QAAQA,oBAAS;AAAA,EAAA,CACjB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,WAAW,2BAA2B;AAAA,IACtC,UAAUA,oBAAS;AAAA,EAAA,CACnB;AACF;AAKA,MAAM,mBAAmBA,oBAAS;AAAA,EACjC;AAAA,EACA;AACD;AAEa,MAAA,gBAAgBA,oBAAS,OAAO;AAAA,EAC5C,UAAUA,oBAAS,OAAOA,oBAAS,QAAQ,gBAAgB;AAAA,EAC3D,SAASA,oBAAS,OAAOA,oBAAS,QAAQ,eAAe;AAC1D,CAAC;;"}
1
+ {"version":3,"file":"actions.cjs","sources":["../../../../../packages/schema-utils/src/type-schema/actions.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\nimport { Actions } from '@contember/schema'\n\nconst selectionNodeSchemaFactory = (): Typesafe.Type<Actions.SelectionNode> => {\n\treturn (input: unknown, path: PropertyKey[] = []): Actions.SelectionNode => {\n\t\treturn Typesafe.array(Typesafe.union(\n\t\t\tTypesafe.string,\n\t\t\tTypesafe.tuple(\n\t\t\t\tTypesafe.string,\n\t\t\t\tTypesafe.anyJsonObject,\n\t\t\t\tselectionNodeSchemaFactory(),\n\t\t\t),\n\t\t))(input, path)\n\t}\n}\n\nconst webhookTargetSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('webhook'),\n\t\tname: Typesafe.string,\n\t\turl: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\theaders: Typesafe.record(Typesafe.string, Typesafe.string),\n\t\ttimeoutMs: Typesafe.integer,\n\t\tmaxAttempts: Typesafe.integer,\n\t\tinitialRepeatIntervalMs: Typesafe.integer,\n\t\tbatchSize: Typesafe.integer,\n\t\tbody: Typesafe.anyJsonObject,\n\t\tpayloadPath: Typesafe.array(Typesafe.string),\n\t}),\n)\nconst webhookTargetSchemaCheck: Typesafe.Equals<Actions.WebhookTarget, ReturnType<typeof webhookTargetSchema>> = true\n\nconst anyTargetSchema: Typesafe.Type<Actions.AnyTarget> = Typesafe.union(webhookTargetSchema)\n\nconst watchTriggerSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('watch'),\n\t\tname: Typesafe.string,\n\t\tentity: Typesafe.string,\n\t\twatch: selectionNodeSchemaFactory(),\n\t\ttarget: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tselection: selectionNodeSchemaFactory(),\n\t\tpriority: Typesafe.integer,\n\t}),\n)\n\nconst watchTriggerSchemaCheck: Typesafe.Equals<Actions.WatchTrigger, ReturnType<typeof watchTriggerSchema>> = true\n\n\nconst basicTriggerSchema = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttype: Typesafe.literal('basic'),\n\t\tname: Typesafe.string,\n\t\tentity: Typesafe.string,\n\t\tcreate: Typesafe.boolean,\n\t\tdelete: Typesafe.boolean,\n\t\tupdate: Typesafe.union(Typesafe.boolean, Typesafe.array(Typesafe.string)),\n\t\ttarget: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tselection: selectionNodeSchemaFactory(),\n\t\tpriority: Typesafe.integer,\n\t}),\n)\n\nconst basicTriggerSchemaCheck: Typesafe.Equals<Actions.BasicTrigger, ReturnType<typeof basicTriggerSchema>> = true\n\n\nconst anyTriggerSchema = Typesafe.union(\n\twatchTriggerSchema,\n\tbasicTriggerSchema,\n)\n\nexport const actionsSchema = Typesafe.object({\n\ttriggers: Typesafe.record(Typesafe.string, anyTriggerSchema),\n\ttargets: Typesafe.record(Typesafe.string, anyTargetSchema),\n})\n"],"names":["Typesafe"],"mappings":";;;;;;;;;;;;;;;;;;;;AAGA,MAAM,6BAA6B,MAA4C;AAC9E,SAAO,CAAC,OAAgB,OAAsB,OAA8B;AACpE,WAAAA,oBAAS,MAAMA,oBAAS;AAAA,MAC9BA,oBAAS;AAAA,MACTA,oBAAS;AAAA,QACRA,oBAAS;AAAA,QACTA,oBAAS;AAAA,QACT,2BAA2B;AAAA,MAAA;AAAA,IAC5B,CACA,EAAE,OAAO,IAAI;AAAA,EACf;AACD;AAEA,MAAM,sBAAsBA,oBAAS;AAAA,EACpCA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQ,SAAS;AAAA,IAChC,MAAMA,oBAAS;AAAA,IACf,KAAKA,oBAAS;AAAA,EAAA,CACd;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,SAASA,oBAAS,OAAOA,oBAAS,QAAQA,oBAAS,MAAM;AAAA,IACzD,WAAWA,oBAAS;AAAA,IACpB,aAAaA,oBAAS;AAAA,IACtB,yBAAyBA,oBAAS;AAAA,IAClC,WAAWA,oBAAS;AAAA,IACpB,MAAMA,oBAAS;AAAA,IACf,aAAaA,oBAAS,MAAMA,oBAAS,MAAM;AAAA,EAC3C,CAAA;AACF;AAGA,MAAM,kBAAoDA,oBAAS,MAAM,mBAAmB;AAE5F,MAAM,qBAAqBA,oBAAS;AAAA,EACnCA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQ,OAAO;AAAA,IAC9B,MAAMA,oBAAS;AAAA,IACf,QAAQA,oBAAS;AAAA,IACjB,OAAO,2BAA2B;AAAA,IAClC,QAAQA,oBAAS;AAAA,EAAA,CACjB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,WAAW,2BAA2B;AAAA,IACtC,UAAUA,oBAAS;AAAA,EACnB,CAAA;AACF;AAKA,MAAM,qBAAqBA,oBAAS;AAAA,EACnCA,oBAAS,OAAO;AAAA,IACf,MAAMA,oBAAS,QAAQ,OAAO;AAAA,IAC9B,MAAMA,oBAAS;AAAA,IACf,QAAQA,oBAAS;AAAA,IACjB,QAAQA,oBAAS;AAAA,IACjB,QAAQA,oBAAS;AAAA,IACjB,QAAQA,oBAAS,MAAMA,oBAAS,SAASA,oBAAS,MAAMA,oBAAS,MAAM,CAAC;AAAA,IACxE,QAAQA,oBAAS;AAAA,EAAA,CACjB;AAAA,EACDA,oBAAS,QAAQ;AAAA,IAChB,WAAW,2BAA2B;AAAA,IACtC,UAAUA,oBAAS;AAAA,EACnB,CAAA;AACF;AAKA,MAAM,mBAAmBA,oBAAS;AAAA,EACjC;AAAA,EACA;AACD;AAEa,MAAA,gBAAgBA,oBAAS,OAAO;AAAA,EAC5C,UAAUA,oBAAS,OAAOA,oBAAS,QAAQ,gBAAgB;AAAA,EAC3D,SAASA,oBAAS,OAAOA,oBAAS,QAAQ,eAAe;AAC1D,CAAC;;"}