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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/dist/development/index.cjs +1 -0
  2. package/dist/development/index.cjs.map +1 -1
  3. package/dist/development/index.js +2 -1
  4. package/dist/development/index.js.map +1 -1
  5. package/dist/development/src/acl/definition/aclExtensions.cjs +16 -0
  6. package/dist/development/src/acl/definition/aclExtensions.cjs.map +1 -0
  7. package/dist/development/src/acl/definition/aclExtensions.js +16 -0
  8. package/dist/development/src/acl/definition/aclExtensions.js.map +1 -0
  9. package/dist/development/src/acl/definition/customPrimary.cjs +6 -7
  10. package/dist/development/src/acl/definition/customPrimary.cjs.map +1 -1
  11. package/dist/development/src/acl/definition/customPrimary.js +6 -7
  12. package/dist/development/src/acl/definition/customPrimary.js.map +1 -1
  13. package/dist/development/src/acl/definition/internal/AclFactory.cjs +39 -39
  14. package/dist/development/src/acl/definition/internal/AclFactory.cjs.map +1 -1
  15. package/dist/development/src/acl/definition/internal/AclFactory.js +40 -40
  16. package/dist/development/src/acl/definition/internal/AclFactory.js.map +1 -1
  17. package/dist/development/src/acl/definition/internal/stores.cjs +0 -4
  18. package/dist/development/src/acl/definition/internal/stores.cjs.map +1 -1
  19. package/dist/development/src/acl/definition/internal/stores.js +0 -4
  20. package/dist/development/src/acl/definition/internal/stores.js.map +1 -1
  21. package/dist/development/src/createSchema.cjs +4 -1
  22. package/dist/development/src/createSchema.cjs.map +1 -1
  23. package/dist/development/src/createSchema.js +4 -1
  24. package/dist/development/src/createSchema.js.map +1 -1
  25. package/dist/development/src/model/builder/SchemaBuilderInternal.cjs.map +1 -1
  26. package/dist/development/src/model/builder/SchemaBuilderInternal.js.map +1 -1
  27. package/dist/development/src/model/definition/UniqueDefinition.cjs.map +1 -1
  28. package/dist/development/src/model/definition/UniqueDefinition.js.map +1 -1
  29. package/dist/development/src/model/definition/ViewDefinition.cjs +4 -2
  30. package/dist/development/src/model/definition/ViewDefinition.cjs.map +1 -1
  31. package/dist/development/src/model/definition/ViewDefinition.js +4 -2
  32. package/dist/development/src/model/definition/ViewDefinition.js.map +1 -1
  33. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.cjs +18 -3
  34. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.cjs.map +1 -1
  35. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.js +18 -3
  36. package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.js.map +1 -1
  37. package/dist/development/src/model/definition/index.cjs +3 -1
  38. package/dist/development/src/model/definition/index.cjs.map +1 -1
  39. package/dist/development/src/model/definition/index.js +4 -2
  40. package/dist/development/src/model/definition/index.js.map +1 -1
  41. package/dist/development/src/model/definition/internal/SchemaBuilder.cjs +6 -3
  42. package/dist/development/src/model/definition/internal/SchemaBuilder.cjs.map +1 -1
  43. package/dist/development/src/model/definition/internal/SchemaBuilder.js +6 -3
  44. package/dist/development/src/model/definition/internal/SchemaBuilder.js.map +1 -1
  45. package/dist/development/src/presets.cjs +10 -1
  46. package/dist/development/src/presets.cjs.map +1 -1
  47. package/dist/development/src/presets.js +10 -1
  48. package/dist/development/src/presets.js.map +1 -1
  49. package/dist/production/index.cjs +1 -0
  50. package/dist/production/index.cjs.map +1 -1
  51. package/dist/production/index.js +2 -1
  52. package/dist/production/index.js.map +1 -1
  53. package/dist/production/src/acl/definition/aclExtensions.cjs +16 -0
  54. package/dist/production/src/acl/definition/aclExtensions.cjs.map +1 -0
  55. package/dist/production/src/acl/definition/aclExtensions.js +16 -0
  56. package/dist/production/src/acl/definition/aclExtensions.js.map +1 -0
  57. package/dist/production/src/acl/definition/customPrimary.cjs +6 -7
  58. package/dist/production/src/acl/definition/customPrimary.cjs.map +1 -1
  59. package/dist/production/src/acl/definition/customPrimary.js +6 -7
  60. package/dist/production/src/acl/definition/customPrimary.js.map +1 -1
  61. package/dist/production/src/acl/definition/internal/AclFactory.cjs +39 -39
  62. package/dist/production/src/acl/definition/internal/AclFactory.cjs.map +1 -1
  63. package/dist/production/src/acl/definition/internal/AclFactory.js +40 -40
  64. package/dist/production/src/acl/definition/internal/AclFactory.js.map +1 -1
  65. package/dist/production/src/acl/definition/internal/stores.cjs +0 -4
  66. package/dist/production/src/acl/definition/internal/stores.cjs.map +1 -1
  67. package/dist/production/src/acl/definition/internal/stores.js +0 -4
  68. package/dist/production/src/acl/definition/internal/stores.js.map +1 -1
  69. package/dist/production/src/createSchema.cjs +4 -1
  70. package/dist/production/src/createSchema.cjs.map +1 -1
  71. package/dist/production/src/createSchema.js +4 -1
  72. package/dist/production/src/createSchema.js.map +1 -1
  73. package/dist/production/src/model/builder/SchemaBuilderInternal.cjs.map +1 -1
  74. package/dist/production/src/model/builder/SchemaBuilderInternal.js.map +1 -1
  75. package/dist/production/src/model/definition/UniqueDefinition.cjs.map +1 -1
  76. package/dist/production/src/model/definition/UniqueDefinition.js.map +1 -1
  77. package/dist/production/src/model/definition/ViewDefinition.cjs +4 -2
  78. package/dist/production/src/model/definition/ViewDefinition.cjs.map +1 -1
  79. package/dist/production/src/model/definition/ViewDefinition.js +4 -2
  80. package/dist/production/src/model/definition/ViewDefinition.js.map +1 -1
  81. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.cjs +18 -3
  82. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.cjs.map +1 -1
  83. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.js +18 -3
  84. package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.js.map +1 -1
  85. package/dist/production/src/model/definition/index.cjs +3 -1
  86. package/dist/production/src/model/definition/index.cjs.map +1 -1
  87. package/dist/production/src/model/definition/index.js +4 -2
  88. package/dist/production/src/model/definition/index.js.map +1 -1
  89. package/dist/production/src/model/definition/internal/SchemaBuilder.cjs +6 -3
  90. package/dist/production/src/model/definition/internal/SchemaBuilder.cjs.map +1 -1
  91. package/dist/production/src/model/definition/internal/SchemaBuilder.js +6 -3
  92. package/dist/production/src/model/definition/internal/SchemaBuilder.js.map +1 -1
  93. package/dist/production/src/presets.cjs +10 -1
  94. package/dist/production/src/presets.cjs.map +1 -1
  95. package/dist/production/src/presets.js +10 -1
  96. package/dist/production/src/presets.js.map +1 -1
  97. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  98. package/dist/types/acl/builder/PermissionsBuilder.d.ts.map +1 -1
  99. package/dist/types/acl/builder/PredicateReference.d.ts.map +1 -1
  100. package/dist/types/acl/definition/aclExtensions.d.ts +12 -0
  101. package/dist/types/acl/definition/aclExtensions.d.ts.map +1 -0
  102. package/dist/types/acl/definition/customPrimary.d.ts.map +1 -1
  103. package/dist/types/acl/definition/index.d.ts.map +1 -1
  104. package/dist/types/acl/definition/internal/AclFactory.d.ts +1 -1
  105. package/dist/types/acl/definition/internal/AclFactory.d.ts.map +1 -1
  106. package/dist/types/acl/definition/internal/createPredicateName.d.ts.map +1 -1
  107. package/dist/types/acl/definition/internal/stores.d.ts +0 -2
  108. package/dist/types/acl/definition/internal/stores.d.ts.map +1 -1
  109. package/dist/types/acl/definition/permissions.d.ts.map +1 -1
  110. package/dist/types/acl/definition/references.d.ts.map +1 -1
  111. package/dist/types/acl/definition/roles.d.ts.map +1 -1
  112. package/dist/types/acl/definition/variables.d.ts.map +1 -1
  113. package/dist/types/actions/definition/index.d.ts.map +1 -1
  114. package/dist/types/actions/definition/targets.d.ts.map +1 -1
  115. package/dist/types/actions/definition/triggers.d.ts.map +1 -1
  116. package/dist/types/createSchema.d.ts +2 -1
  117. package/dist/types/createSchema.d.ts.map +1 -1
  118. package/dist/types/index.d.ts +2 -3
  119. package/dist/types/index.d.ts.map +1 -1
  120. package/dist/types/model/definition/UniqueDefinition.d.ts +6 -1
  121. package/dist/types/model/definition/UniqueDefinition.d.ts.map +1 -1
  122. package/dist/types/model/definition/ViewDefinition.d.ts +6 -2
  123. package/dist/types/model/definition/ViewDefinition.d.ts.map +1 -1
  124. package/dist/types/model/definition/context.d.ts +3 -0
  125. package/dist/types/model/definition/context.d.ts.map +1 -1
  126. package/dist/types/model/definition/extensions.d.ts.map +1 -1
  127. package/dist/types/model/definition/fieldDefinitions/ColumnDefinition.d.ts +9 -1
  128. package/dist/types/model/definition/fieldDefinitions/ColumnDefinition.d.ts.map +1 -1
  129. package/dist/types/model/definition/fieldDefinitions/ManyHasManyDefinition.d.ts.map +1 -1
  130. package/dist/types/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.d.ts.map +1 -1
  131. package/dist/types/model/definition/fieldDefinitions/ManyHasOneDefinition.d.ts.map +1 -1
  132. package/dist/types/model/definition/fieldDefinitions/OneHasManyDefinition.d.ts.map +1 -1
  133. package/dist/types/model/definition/fieldDefinitions/OneHasOneDefinition.d.ts.map +1 -1
  134. package/dist/types/model/definition/fieldDefinitions/OneHasOneInverseDefinition.d.ts.map +1 -1
  135. package/dist/types/model/definition/index.d.ts +1 -0
  136. package/dist/types/model/definition/index.d.ts.map +1 -1
  137. package/dist/types/model/definition/internal/SchemaBuilder.d.ts +4 -1
  138. package/dist/types/model/definition/internal/SchemaBuilder.d.ts.map +1 -1
  139. package/dist/types/presets.d.ts +2 -0
  140. package/dist/types/presets.d.ts.map +1 -1
  141. package/dist/types/tsconfig.tsbuildinfo +1 -1
  142. package/dist/types/utils/MetadataStore.d.ts.map +1 -1
  143. package/dist/types/utils/filterEntityDefinition.d.ts.map +1 -1
  144. package/dist/types/utils/tuple.d.ts.map +1 -1
  145. package/dist/types/validation/index.d.ts.map +1 -1
  146. package/package.json +3 -3
  147. package/src/acl/definition/aclExtensions.ts +28 -0
  148. package/src/acl/definition/customPrimary.ts +7 -8
  149. package/src/acl/definition/internal/AclFactory.ts +41 -45
  150. package/src/acl/definition/internal/stores.ts +0 -3
  151. package/src/createSchema.ts +6 -2
  152. package/src/index.ts +1 -0
  153. package/src/model/builder/SchemaBuilderInternal.ts +1 -1
  154. package/src/model/definition/UniqueDefinition.ts +11 -2
  155. package/src/model/definition/ViewDefinition.ts +10 -1
  156. package/src/model/definition/context.ts +3 -0
  157. package/src/model/definition/fieldDefinitions/ColumnDefinition.ts +22 -2
  158. package/src/model/definition/index.ts +2 -0
  159. package/src/model/definition/internal/SchemaBuilder.ts +6 -1
  160. package/src/presets.ts +12 -0
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaBuilder.js","sources":["../../../../../../../packages/schema-definition/src/model/definition/internal/SchemaBuilder.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { NamingConventions } from '@contember/schema-utils'\nimport 'reflect-metadata'\nimport { tuple } from '../../../utils'\nimport { EntityConstructor, FieldsDefinition } from '../types'\nimport { EnumDefinition } from '../EnumDefinition'\nimport { EntityRegistry } from './EntityRegistry'\nimport { EnumRegistry } from './EnumRegistry'\nimport { ColumnDefinition } from '../fieldDefinitions'\nimport { applyEntityExtensions } from '../extensions'\nimport { StrictOptions, StrictDefinitionValidator } from '../../../strict'\n\nexport class SchemaBuilder {\n\tprivate entityRegistry = new EntityRegistry()\n\n\tprivate enumRegistry = new EnumRegistry()\n\n\tconstructor(\n\t\tprivate readonly conventions: NamingConventions,\n\t\tprivate readonly strictDefinitionValidator: StrictDefinitionValidator = new StrictDefinitionValidator({}),\n\t) {}\n\n\tpublic addEntity(name: string, entity: EntityConstructor): void {\n\t\tthis.entityRegistry.register(name, entity)\n\t}\n\n\tpublic addEnum(name: string, definition: EnumDefinition): void {\n\t\tthis.enumRegistry.register(name, definition)\n\t}\n\n\tpublic createSchema(): Model.Schema {\n\t\tconst entities = Object.entries(this.entityRegistry.entities).map(([entityName, definition]): Model.Entity => {\n\t\t\tconst definitionInstance: FieldsDefinition = new definition()\n\n\t\t\tObject.entries(definitionInstance).forEach(([fieldName, fieldDefinition]) => {\n\t\t\t\tif (typeof fieldDefinition !== 'object' || !('createField' in fieldDefinition)) {\n\t\t\t\t\tthrow `Entity \"${entityName}\": field \"${fieldName}\" does not contain expected field definition. Check that you are correctly invoking methods of the definition builder.`\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst primaryName = this.conventions.getPrimaryField()\n\n\t\t\tconst fields: Model.Entity['fields'] = [\n\t\t\t\t...definitionInstance[primaryName] ? [] : [tuple(primaryName, this.createPrimaryColumn())],\n\t\t\t\t...Object.entries(definitionInstance),\n\t\t\t]\n\t\t\t\t.map(([name, definition]) => {\n\t\t\t\t\treturn definition.createField({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tentityName,\n\t\t\t\t\t\tconventions: this.conventions,\n\t\t\t\t\t\tenumRegistry: this.enumRegistry,\n\t\t\t\t\t\tentityRegistry: this.entityRegistry,\n\t\t\t\t\t\tstrictDefinitionValidator: this.strictDefinitionValidator,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.reduce<Model.Entity['fields']>((acc, field) => {\n\t\t\t\t\tif (acc[field.name]) {\n\t\t\t\t\t\tthrow new Error(`Entity ${entityName}: field ${field.name} is already registered`)\n\t\t\t\t\t}\n\t\t\t\t\treturn { ...acc, [field.name]: field }\n\t\t\t\t}, {})\n\n\n\t\t\tconst entity: Model.Entity = {\n\t\t\t\tname: entityName,\n\t\t\t\tprimary: primaryName,\n\t\t\t\tprimaryColumn: (fields[primaryName] as Model.AnyColumn).columnName,\n\t\t\t\tunique: this.createUnique(entityName, definitionInstance),\n\t\t\t\tindexes: [],\n\t\t\t\tfields: fields,\n\t\t\t\ttableName: this.conventions.getTableName(entityName),\n\t\t\t\teventLog: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t},\n\t\t\t}\n\t\t\treturn applyEntityExtensions(definition, {\n\t\t\t\tentity,\n\t\t\t\tdefinition: definitionInstance,\n\t\t\t\tregistry: this.entityRegistry,\n\t\t\t\tentityRegistry: this.entityRegistry,\n\t\t\t\tconventions: this.conventions,\n\t\t\t\tenumRegistry: this.enumRegistry,\n\t\t\t\tstrictDefinitionValidator: this.strictDefinitionValidator,\n\t\t\t})\n\t\t})\n\n\t\treturn {\n\t\t\tenums: Object.entries(this.enumRegistry.enums).reduce((acc, [name, def]) => ({ ...acc, [name]: def.values }), {}),\n\t\t\tentities: entities.reduce((acc, entity) => ({ ...acc, [entity.name]: entity }), {}),\n\t\t}\n\t}\n\n\tprivate createPrimaryColumn(): ColumnDefinition {\n\t\treturn new ColumnDefinition({\n\t\t\tnullable: false,\n\t\t\ttype: Model.ColumnType.Uuid,\n\t\t})\n\t}\n\n\tprivate createUnique(entityName: string, fieldDefinitions: FieldsDefinition): Model.UniqueConstraints {\n\t\tconst unique: Model.UniqueConstraint[] = []\n\t\tfor (const [fieldName, definition] of Object.entries(fieldDefinitions)) {\n\t\t\tif (definition.options.unique) {\n\t\t\t\tunique.push({ fields: [fieldName], ...definition.options.unique })\n\t\t\t}\n\t\t}\n\t\treturn unique\n\t}\n}\n"],"names":["definition"],"mappings":"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"}
1
+ {"version":3,"file":"SchemaBuilder.js","sources":["../../../../../../../packages/schema-definition/src/model/definition/internal/SchemaBuilder.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { NamingConventions } from '@contember/schema-utils'\nimport 'reflect-metadata'\nimport { tuple } from '../../../utils'\nimport { EntityConstructor, FieldsDefinition } from '../types'\nimport { EnumDefinition } from '../EnumDefinition'\nimport { EntityRegistry } from './EntityRegistry'\nimport { EnumRegistry } from './EnumRegistry'\nimport { ColumnDefinition } from '../fieldDefinitions'\nimport { applyEntityExtensions } from '../extensions'\nimport { StrictOptions, StrictDefinitionValidator } from '../../../strict'\n\nexport class SchemaBuilder {\n\tprivate entityRegistry = new EntityRegistry()\n\n\tprivate enumRegistry = new EnumRegistry()\n\n\tconstructor(\n\t\tprivate readonly conventions: NamingConventions,\n\t\tprivate readonly strictDefinitionValidator: StrictDefinitionValidator = new StrictDefinitionValidator({}),\n\t\tprivate readonly options: {\n\t\t\tdefaultCollation?: string\n\t\t},\n\t) {}\n\n\tpublic addEntity(name: string, entity: EntityConstructor): void {\n\t\tthis.entityRegistry.register(name, entity)\n\t}\n\n\tpublic addEnum(name: string, definition: EnumDefinition): void {\n\t\tthis.enumRegistry.register(name, definition)\n\t}\n\n\tpublic createSchema(): Model.Schema {\n\t\tconst entities = Object.entries(this.entityRegistry.entities).map(([entityName, definition]): Model.Entity => {\n\t\t\tconst definitionInstance: FieldsDefinition = new definition()\n\n\t\t\tObject.entries(definitionInstance).forEach(([fieldName, fieldDefinition]) => {\n\t\t\t\tif (typeof fieldDefinition !== 'object' || !('createField' in fieldDefinition)) {\n\t\t\t\t\tthrow `Entity \"${entityName}\": field \"${fieldName}\" does not contain expected field definition. Check that you are correctly invoking methods of the definition builder.`\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst primaryName = this.conventions.getPrimaryField()\n\n\t\t\tconst fields: Model.Entity['fields'] = [\n\t\t\t\t...definitionInstance[primaryName] ? [] : [tuple(primaryName, this.createPrimaryColumn())],\n\t\t\t\t...Object.entries(definitionInstance),\n\t\t\t]\n\t\t\t\t.map(([name, definition]) => {\n\t\t\t\t\treturn definition.createField({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tentityName,\n\t\t\t\t\t\tconventions: this.conventions,\n\t\t\t\t\t\tenumRegistry: this.enumRegistry,\n\t\t\t\t\t\tentityRegistry: this.entityRegistry,\n\t\t\t\t\t\tstrictDefinitionValidator: this.strictDefinitionValidator,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.reduce<Model.Entity['fields']>((acc, field) => {\n\t\t\t\t\tif (acc[field.name]) {\n\t\t\t\t\t\tthrow new Error(`Entity ${entityName}: field ${field.name} is already registered`)\n\t\t\t\t\t}\n\t\t\t\t\treturn { ...acc, [field.name]: field }\n\t\t\t\t}, {})\n\n\n\t\t\tconst entity: Model.Entity = {\n\t\t\t\tname: entityName,\n\t\t\t\tprimary: primaryName,\n\t\t\t\tprimaryColumn: (fields[primaryName] as Model.AnyColumn).columnName,\n\t\t\t\tunique: this.createUnique(entityName, definitionInstance),\n\t\t\t\tindexes: [],\n\t\t\t\tfields: fields,\n\t\t\t\ttableName: this.conventions.getTableName(entityName),\n\t\t\t\teventLog: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t},\n\t\t\t}\n\t\t\treturn applyEntityExtensions(definition, {\n\t\t\t\tentity,\n\t\t\t\tdefinition: definitionInstance,\n\t\t\t\tregistry: this.entityRegistry,\n\t\t\t\tentityRegistry: this.entityRegistry,\n\t\t\t\tconventions: this.conventions,\n\t\t\t\tenumRegistry: this.enumRegistry,\n\t\t\t\tstrictDefinitionValidator: this.strictDefinitionValidator,\n\t\t\t\toptions: this.options,\n\t\t\t})\n\t\t})\n\n\t\treturn {\n\t\t\tenums: Object.entries(this.enumRegistry.enums).reduce((acc, [name, def]) => ({ ...acc, [name]: def.values }), {}),\n\t\t\tentities: entities.reduce((acc, entity) => ({ ...acc, [entity.name]: entity }), {}),\n\t\t}\n\t}\n\n\tprivate createPrimaryColumn(): ColumnDefinition {\n\t\treturn new ColumnDefinition({\n\t\t\tnullable: false,\n\t\t\ttype: Model.ColumnType.Uuid,\n\t\t})\n\t}\n\n\tprivate createUnique(entityName: string, fieldDefinitions: FieldsDefinition): Model.Uniques {\n\t\tconst unique: Model.UniqueConstraint[] = []\n\t\tfor (const [fieldName, definition] of Object.entries(fieldDefinitions)) {\n\t\t\tif (definition.options.unique) {\n\t\t\t\tunique.push({ fields: [fieldName], ...definition.options.unique })\n\t\t\t}\n\t\t}\n\t\treturn unique\n\t}\n}\n"],"names":["definition"],"mappings":"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"}
@@ -28,10 +28,19 @@ const v2_0preset = {
28
28
  useExistsInHasManyFilter: true
29
29
  }
30
30
  };
31
+ const v2_1preset = {
32
+ ...v2_0preset,
33
+ content: {
34
+ ...v2_0preset.content,
35
+ uuidVersion: 7
36
+ }
37
+ };
31
38
  const settingsPresets = {
32
39
  "v1.3": v1_3preset,
33
40
  "v1.4": v1_4preset,
34
- "v2.0": v2_0preset
41
+ "v2.0": v2_0preset,
42
+ "v2.1": v2_1preset,
43
+ "latest": v2_1preset
35
44
  };
36
45
  exports.settingsPresets = settingsPresets;
37
46
  //# sourceMappingURL=presets.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"presets.cjs","sources":["../../../../packages/schema-definition/src/presets.ts"],"sourcesContent":["import { Settings } from '@contember/schema'\n\nconst v1_3preset: Settings.Schema = {\n\tuseExistsInHasManyFilter: true,\n\ttenant: {\n\t\tinviteExpirationMinutes: 60 * 24 * 7, // 7 days\n\t},\n}\n\n\nconst v1_4preset: Settings.Schema = {\n\ttenant: {\n\t\tinviteExpirationMinutes: 60 * 24 * 7, // 7 days\n\t},\n\tcontent: {\n\t\tshortDateResponse: true,\n\t\tuseExistsInHasManyFilter: true,\n\t},\n}\n\nconst v2_0preset: Settings.Schema = {\n\ttenant: {\n\t\tinviteExpirationMinutes: 60 * 24 * 7, // 7 days\n\t},\n\tcontent: {\n\t\tshortDateResponse: true,\n\t\tfullDateTimeResponse: true,\n\t\tuseExistsInHasManyFilter: true,\n\t},\n}\n\nexport const settingsPresets = {\n\t'v1.3': v1_3preset,\n\t'v1.4': v1_4preset,\n\t'v2.0': v2_0preset,\n}\n"],"names":[],"mappings":";;AAEA,MAAM,aAA8B;AAAA,EACnC,0BAA0B;AAAA,EAC1B,QAAQ;AAAA,IACP,yBAAyB,KAAK,KAAK;AAAA;AAAA,EAAA;AAErC;AAGA,MAAM,aAA8B;AAAA,EACnC,QAAQ;AAAA,IACP,yBAAyB,KAAK,KAAK;AAAA;AAAA,EACpC;AAAA,EACA,SAAS;AAAA,IACR,mBAAmB;AAAA,IACnB,0BAA0B;AAAA,EAAA;AAE5B;AAEA,MAAM,aAA8B;AAAA,EACnC,QAAQ;AAAA,IACP,yBAAyB,KAAK,KAAK;AAAA;AAAA,EACpC;AAAA,EACA,SAAS;AAAA,IACR,mBAAmB;AAAA,IACnB,sBAAsB;AAAA,IACtB,0BAA0B;AAAA,EAAA;AAE5B;AAEO,MAAM,kBAAkB;AAAA,EAC9B,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AACT;;"}
1
+ {"version":3,"file":"presets.cjs","sources":["../../../../packages/schema-definition/src/presets.ts"],"sourcesContent":["import { Settings } from '@contember/schema'\n\nconst v1_3preset: Settings.Schema = {\n\tuseExistsInHasManyFilter: true,\n\ttenant: {\n\t\tinviteExpirationMinutes: 60 * 24 * 7, // 7 days\n\t},\n}\n\n\nconst v1_4preset: Settings.Schema = {\n\ttenant: {\n\t\tinviteExpirationMinutes: 60 * 24 * 7, // 7 days\n\t},\n\tcontent: {\n\t\tshortDateResponse: true,\n\t\tuseExistsInHasManyFilter: true,\n\t},\n}\n\nconst v2_0preset: Settings.Schema = {\n\ttenant: {\n\t\tinviteExpirationMinutes: 60 * 24 * 7, // 7 days\n\t},\n\tcontent: {\n\t\tshortDateResponse: true,\n\t\tfullDateTimeResponse: true,\n\t\tuseExistsInHasManyFilter: true,\n\t},\n}\n\n\nconst v2_1preset: Settings.Schema = {\n\t...v2_0preset,\n\tcontent: {\n\t\t...v2_0preset.content,\n\t\tuuidVersion: 7,\n\t},\n}\n\nexport const settingsPresets = {\n\t'v1.3': v1_3preset,\n\t'v1.4': v1_4preset,\n\t'v2.0': v2_0preset,\n\t'v2.1': v2_1preset,\n\n\t'latest': v2_1preset,\n}\n"],"names":[],"mappings":";;AAEA,MAAM,aAA8B;AAAA,EACnC,0BAA0B;AAAA,EAC1B,QAAQ;AAAA,IACP,yBAAyB,KAAK,KAAK;AAAA;AAAA,EAAA;AAErC;AAGA,MAAM,aAA8B;AAAA,EACnC,QAAQ;AAAA,IACP,yBAAyB,KAAK,KAAK;AAAA;AAAA,EACpC;AAAA,EACA,SAAS;AAAA,IACR,mBAAmB;AAAA,IACnB,0BAA0B;AAAA,EAAA;AAE5B;AAEA,MAAM,aAA8B;AAAA,EACnC,QAAQ;AAAA,IACP,yBAAyB,KAAK,KAAK;AAAA;AAAA,EACpC;AAAA,EACA,SAAS;AAAA,IACR,mBAAmB;AAAA,IACnB,sBAAsB;AAAA,IACtB,0BAA0B;AAAA,EAAA;AAE5B;AAGA,MAAM,aAA8B;AAAA,EACnC,GAAG;AAAA,EACH,SAAS;AAAA,IACR,GAAG,WAAW;AAAA,IACd,aAAa;AAAA,EAAA;AAEf;AAEO,MAAM,kBAAkB;AAAA,EAC9B,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EAER,UAAU;AACX;;"}
@@ -26,10 +26,19 @@ const v2_0preset = {
26
26
  useExistsInHasManyFilter: true
27
27
  }
28
28
  };
29
+ const v2_1preset = {
30
+ ...v2_0preset,
31
+ content: {
32
+ ...v2_0preset.content,
33
+ uuidVersion: 7
34
+ }
35
+ };
29
36
  const settingsPresets = {
30
37
  "v1.3": v1_3preset,
31
38
  "v1.4": v1_4preset,
32
- "v2.0": v2_0preset
39
+ "v2.0": v2_0preset,
40
+ "v2.1": v2_1preset,
41
+ "latest": v2_1preset
33
42
  };
34
43
  export {
35
44
  settingsPresets
@@ -1 +1 @@
1
- {"version":3,"file":"presets.js","sources":["../../../../packages/schema-definition/src/presets.ts"],"sourcesContent":["import { Settings } from '@contember/schema'\n\nconst v1_3preset: Settings.Schema = {\n\tuseExistsInHasManyFilter: true,\n\ttenant: {\n\t\tinviteExpirationMinutes: 60 * 24 * 7, // 7 days\n\t},\n}\n\n\nconst v1_4preset: Settings.Schema = {\n\ttenant: {\n\t\tinviteExpirationMinutes: 60 * 24 * 7, // 7 days\n\t},\n\tcontent: {\n\t\tshortDateResponse: true,\n\t\tuseExistsInHasManyFilter: true,\n\t},\n}\n\nconst v2_0preset: Settings.Schema = {\n\ttenant: {\n\t\tinviteExpirationMinutes: 60 * 24 * 7, // 7 days\n\t},\n\tcontent: {\n\t\tshortDateResponse: true,\n\t\tfullDateTimeResponse: true,\n\t\tuseExistsInHasManyFilter: true,\n\t},\n}\n\nexport const settingsPresets = {\n\t'v1.3': v1_3preset,\n\t'v1.4': v1_4preset,\n\t'v2.0': v2_0preset,\n}\n"],"names":[],"mappings":"AAEA,MAAM,aAA8B;AAAA,EACnC,0BAA0B;AAAA,EAC1B,QAAQ;AAAA,IACP,yBAAyB,KAAK,KAAK;AAAA;AAAA,EAAA;AAErC;AAGA,MAAM,aAA8B;AAAA,EACnC,QAAQ;AAAA,IACP,yBAAyB,KAAK,KAAK;AAAA;AAAA,EACpC;AAAA,EACA,SAAS;AAAA,IACR,mBAAmB;AAAA,IACnB,0BAA0B;AAAA,EAAA;AAE5B;AAEA,MAAM,aAA8B;AAAA,EACnC,QAAQ;AAAA,IACP,yBAAyB,KAAK,KAAK;AAAA;AAAA,EACpC;AAAA,EACA,SAAS;AAAA,IACR,mBAAmB;AAAA,IACnB,sBAAsB;AAAA,IACtB,0BAA0B;AAAA,EAAA;AAE5B;AAEO,MAAM,kBAAkB;AAAA,EAC9B,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AACT;"}
1
+ {"version":3,"file":"presets.js","sources":["../../../../packages/schema-definition/src/presets.ts"],"sourcesContent":["import { Settings } from '@contember/schema'\n\nconst v1_3preset: Settings.Schema = {\n\tuseExistsInHasManyFilter: true,\n\ttenant: {\n\t\tinviteExpirationMinutes: 60 * 24 * 7, // 7 days\n\t},\n}\n\n\nconst v1_4preset: Settings.Schema = {\n\ttenant: {\n\t\tinviteExpirationMinutes: 60 * 24 * 7, // 7 days\n\t},\n\tcontent: {\n\t\tshortDateResponse: true,\n\t\tuseExistsInHasManyFilter: true,\n\t},\n}\n\nconst v2_0preset: Settings.Schema = {\n\ttenant: {\n\t\tinviteExpirationMinutes: 60 * 24 * 7, // 7 days\n\t},\n\tcontent: {\n\t\tshortDateResponse: true,\n\t\tfullDateTimeResponse: true,\n\t\tuseExistsInHasManyFilter: true,\n\t},\n}\n\n\nconst v2_1preset: Settings.Schema = {\n\t...v2_0preset,\n\tcontent: {\n\t\t...v2_0preset.content,\n\t\tuuidVersion: 7,\n\t},\n}\n\nexport const settingsPresets = {\n\t'v1.3': v1_3preset,\n\t'v1.4': v1_4preset,\n\t'v2.0': v2_0preset,\n\t'v2.1': v2_1preset,\n\n\t'latest': v2_1preset,\n}\n"],"names":[],"mappings":"AAEA,MAAM,aAA8B;AAAA,EACnC,0BAA0B;AAAA,EAC1B,QAAQ;AAAA,IACP,yBAAyB,KAAK,KAAK;AAAA;AAAA,EAAA;AAErC;AAGA,MAAM,aAA8B;AAAA,EACnC,QAAQ;AAAA,IACP,yBAAyB,KAAK,KAAK;AAAA;AAAA,EACpC;AAAA,EACA,SAAS;AAAA,IACR,mBAAmB;AAAA,IACnB,0BAA0B;AAAA,EAAA;AAE5B;AAEA,MAAM,aAA8B;AAAA,EACnC,QAAQ;AAAA,IACP,yBAAyB,KAAK,KAAK;AAAA;AAAA,EACpC;AAAA,EACA,SAAS;AAAA,IACR,mBAAmB;AAAA,IACnB,sBAAsB;AAAA,IACtB,0BAA0B;AAAA,EAAA;AAE5B;AAGA,MAAM,aAA8B;AAAA,EACnC,GAAG;AAAA,EACH,SAAS;AAAA,IACR,GAAG,WAAW;AAAA,IACd,aAAa;AAAA,EAAA;AAEf;AAEO,MAAM,kBAAkB;AAAA,EAC9B,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,QAAQ;AAAA,EAER,UAAU;AACX;"}
@@ -71,6 +71,7 @@ const c = {
71
71
  intColumn: ColumnDefinition.intColumn,
72
72
  doubleColumn: ColumnDefinition.doubleColumn,
73
73
  dateColumn: ColumnDefinition.dateColumn,
74
+ timeColumn: ColumnDefinition.timeColumn,
74
75
  dateTimeColumn: ColumnDefinition.dateTimeColumn,
75
76
  jsonColumn: ColumnDefinition.jsonColumn,
76
77
  stringColumn: ColumnDefinition.stringColumn,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../packages/schema-definition/src/index.ts"],"sourcesContent":["import * as AclDefinition from './acl/definition'\nimport { Role } from './acl/definition'\nimport * as ActionsDefinition from './actions/definition'\nimport * as InputValidation from './validation'\nimport { SchemaDefinition } from './model'\nimport { createSchema } from './createSchema'\n\nexport { AllowAllPermissionFactory } from '@contember/schema-utils'\nexport { PermissionsBuilder } from './acl/builder/PermissionsBuilder'\nexport * from './model'\nexport * from './presets'\n\nexport type { Role }\nexport type { VariableDefinition } from './acl/definition'\nexport type {\n\tColumnDefinition,\n\tFieldDefinition,\n\tOneHasOneDefinition,\n\tOneHasOneInverseDefinition,\n\tOneHasManyDefinition,\n\tManyHasOneDefinition,\n\tManyHasManyDefinition,\n\tManyHasManyInverseDefinition,\n\tEnumDefinition,\n} from './model/definition'\n\nexport { AclDefinition, ActionsDefinition, SchemaDefinition, InputValidation, createSchema }\n\nexport const c = {\n\n\t// ACL\n\t// ACL entity decorators\n\tAllowCustomPrimary: AclDefinition.allowCustomPrimary,\n\tAllow: AclDefinition.allow,\n\t// ACL factories\n\tcreateRole: AclDefinition.createRole,\n\tcreateConditionVariable: AclDefinition.createConditionVariable,\n\tcreateEntityVariable: AclDefinition.createEntityVariable,\n\tcreatePredefinedVariable: AclDefinition.createPredefinedVariable,\n\t// ACL utilities\n\tcanCreate: AclDefinition.canCreate,\n\tcanRead: AclDefinition.canRead,\n\tcanUpdate: AclDefinition.canUpdate,\n\tcanDelete: AclDefinition.canDelete,\n\n\n\t// Actions\n\t// Actions entity decorators\n\tWatch: ActionsDefinition.watch,\n\tTrigger: ActionsDefinition.trigger,\n\t// Actions factories\n\tcreateActionsTarget: ActionsDefinition.createTarget,\n\n\n\t// Model\n\t// Model entity decorators\n\tExtendEntity: SchemaDefinition.extendEntity,\n\tIndex: SchemaDefinition.Index,\n\tUnique: SchemaDefinition.Unique,\n\tView: SchemaDefinition.View,\n\tDisableEventLog: SchemaDefinition.DisableEventLog,\n\tOrderBy: SchemaDefinition.OrderBy,\n\t// Model field factories\n\tcolumn: SchemaDefinition.column,\n\tboolColumn: SchemaDefinition.boolColumn,\n\tintColumn: SchemaDefinition.intColumn,\n\tdoubleColumn: SchemaDefinition.doubleColumn,\n\tdateColumn: SchemaDefinition.dateColumn,\n\tdateTimeColumn: SchemaDefinition.dateTimeColumn,\n\tjsonColumn: SchemaDefinition.jsonColumn,\n\tstringColumn: SchemaDefinition.stringColumn,\n\tenumColumn: SchemaDefinition.enumColumn,\n\tuuidColumn: SchemaDefinition.uuidColumn,\n\tmanyHasMany: SchemaDefinition.manyHasMany,\n\tmanyHasManyInverse: SchemaDefinition.manyHasManyInverse,\n\tmanyHasOne: SchemaDefinition.manyHasOne,\n\toneHasOne: SchemaDefinition.oneHasOne,\n\toneHasOneInverse: SchemaDefinition.oneHasOneInverse,\n\toneHasMany: SchemaDefinition.oneHasMany,\n\t// Model factories\n\tcreateEnum: SchemaDefinition.createEnum,\n\n\n\t// Validation\n\t// Validation field decorators\n\tAssert: InputValidation.assert,\n\tRequired: InputValidation.required,\n\tAssertDefined: InputValidation.assertDefined,\n\tAssertNotEmpty: InputValidation.assertNotEmpty,\n\tAssertPattern: InputValidation.assertPattern,\n\tAssertMinLength: InputValidation.assertMinLength,\n\tAssertMaxLength: InputValidation.assertMaxLength,\n\tValidateWhen: InputValidation.when,\n\t// Validation utilities\n\trules: InputValidation.rules,\n\n}\n"],"names":["AclDefinition.allowCustomPrimary","AclDefinition.allow","AclDefinition.createRole","AclDefinition.createConditionVariable","AclDefinition.createEntityVariable","AclDefinition.createPredefinedVariable","AclDefinition.canCreate","AclDefinition.canRead","AclDefinition.canUpdate","AclDefinition.canDelete","ActionsDefinition.watch","ActionsDefinition.trigger","ActionsDefinition.createTarget","SchemaDefinition.extendEntity","SchemaDefinition.Index","SchemaDefinition.Unique","SchemaDefinition.View","SchemaDefinition.DisableEventLog","SchemaDefinition.OrderBy","SchemaDefinition.column","SchemaDefinition.boolColumn","SchemaDefinition.intColumn","SchemaDefinition.doubleColumn","SchemaDefinition.dateColumn","SchemaDefinition.dateTimeColumn","SchemaDefinition.jsonColumn","SchemaDefinition.stringColumn","SchemaDefinition.enumColumn","SchemaDefinition.uuidColumn","SchemaDefinition.manyHasMany","SchemaDefinition.manyHasManyInverse","SchemaDefinition.manyHasOne","SchemaDefinition.oneHasOne","SchemaDefinition.oneHasOneInverse","SchemaDefinition.oneHasMany","SchemaDefinition.createEnum","InputValidation.assert","InputValidation.required","InputValidation.assertDefined","InputValidation.assertNotEmpty","InputValidation.assertPattern","InputValidation.assertMinLength","InputValidation.assertMaxLength","InputValidation.when","InputValidation.rules"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BO,MAAM,IAAI;AAAA;AAAA;AAAA,EAIhB,oBAAoBA,cAAc;AAAA,EAClC,OAAOC,YAAc;AAAA;AAAA,EAErB,YAAYC,MAAc;AAAA,EAC1B,yBAAyBC,UAAc;AAAA,EACvC,sBAAsBC,UAAc;AAAA,EACpC,0BAA0BC,UAAc;AAAA;AAAA,EAExC,WAAWC,WAAc;AAAA,EACzB,SAASC,WAAc;AAAA,EACvB,WAAWC,WAAc;AAAA,EACzB,WAAWC,WAAc;AAAA;AAAA;AAAA,EAKzB,OAAOC,SAAkB;AAAA,EACzB,SAASC,SAAkB;AAAA;AAAA,EAE3B,qBAAqBC,QAAkB;AAAA;AAAA;AAAA,EAKvC,cAAcC,WAAiB;AAAA,EAC/B,OAAOC,gBAAiB;AAAA,EACxB,QAAQC,iBAAiB;AAAA,EACzB,MAAMC,eAAiB;AAAA,EACvB,iBAAiBC,mBAAiB;AAAA,EAClC,SAASC,kBAAiB;AAAA;AAAA,EAE1B,QAAQC,iBAAiB;AAAA,EACzB,YAAYC,iBAAiB;AAAA,EAC7B,WAAWC,iBAAiB;AAAA,EAC5B,cAAcC,iBAAiB;AAAA,EAC/B,YAAYC,iBAAiB;AAAA,EAC7B,gBAAgBC,iBAAiB;AAAA,EACjC,YAAYC,iBAAiB;AAAA,EAC7B,cAAcC,iBAAiB;AAAA,EAC/B,YAAYC,iBAAiB;AAAA,EAC7B,YAAYC,iBAAiB;AAAA,EAC7B,aAAaC,sBAAiB;AAAA,EAC9B,oBAAoBC,6BAAiB;AAAA,EACrC,YAAYC,qBAAiB;AAAA,EAC7B,WAAWC,oBAAiB;AAAA,EAC5B,kBAAkBC,2BAAiB;AAAA,EACnC,YAAYC,qBAAiB;AAAA;AAAA,EAE7B,YAAYC,eAAiB;AAAA;AAAA;AAAA,EAK7B,QAAQC,QAAgB;AAAA,EACxB,UAAUC,QAAgB;AAAA,EAC1B,eAAeC,QAAgB;AAAA,EAC/B,gBAAgBC,QAAgB;AAAA,EAChC,eAAeC,QAAgB;AAAA,EAC/B,iBAAiBC,QAAgB;AAAA,EACjC,iBAAiBC,QAAgB;AAAA,EACjC,cAAcC,QAAgB;AAAA;AAAA,EAE9B,OAAOC,QAAAA;AAER;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../packages/schema-definition/src/index.ts"],"sourcesContent":["import * as AclDefinition from './acl/definition'\nimport { Role } from './acl/definition'\nimport * as ActionsDefinition from './actions/definition'\nimport * as InputValidation from './validation'\nimport { SchemaDefinition } from './model'\nimport { createSchema } from './createSchema'\n\nexport { AllowAllPermissionFactory } from '@contember/schema-utils'\nexport { PermissionsBuilder } from './acl/builder/PermissionsBuilder'\nexport * from './model'\nexport * from './presets'\n\nexport type { Role }\nexport type { VariableDefinition } from './acl/definition'\nexport type {\n\tColumnDefinition,\n\tFieldDefinition,\n\tOneHasOneDefinition,\n\tOneHasOneInverseDefinition,\n\tOneHasManyDefinition,\n\tManyHasOneDefinition,\n\tManyHasManyDefinition,\n\tManyHasManyInverseDefinition,\n\tEnumDefinition,\n} from './model/definition'\n\nexport { AclDefinition, ActionsDefinition, SchemaDefinition, InputValidation, createSchema }\n\nexport const c = {\n\n\t// ACL\n\t// ACL entity decorators\n\tAllowCustomPrimary: AclDefinition.allowCustomPrimary,\n\tAllow: AclDefinition.allow,\n\t// ACL factories\n\tcreateRole: AclDefinition.createRole,\n\tcreateConditionVariable: AclDefinition.createConditionVariable,\n\tcreateEntityVariable: AclDefinition.createEntityVariable,\n\tcreatePredefinedVariable: AclDefinition.createPredefinedVariable,\n\t// ACL utilities\n\tcanCreate: AclDefinition.canCreate,\n\tcanRead: AclDefinition.canRead,\n\tcanUpdate: AclDefinition.canUpdate,\n\tcanDelete: AclDefinition.canDelete,\n\n\n\t// Actions\n\t// Actions entity decorators\n\tWatch: ActionsDefinition.watch,\n\tTrigger: ActionsDefinition.trigger,\n\t// Actions factories\n\tcreateActionsTarget: ActionsDefinition.createTarget,\n\n\n\t// Model\n\t// Model entity decorators\n\tExtendEntity: SchemaDefinition.extendEntity,\n\tIndex: SchemaDefinition.Index,\n\tUnique: SchemaDefinition.Unique,\n\tView: SchemaDefinition.View,\n\tDisableEventLog: SchemaDefinition.DisableEventLog,\n\tOrderBy: SchemaDefinition.OrderBy,\n\t// Model field factories\n\tcolumn: SchemaDefinition.column,\n\tboolColumn: SchemaDefinition.boolColumn,\n\tintColumn: SchemaDefinition.intColumn,\n\tdoubleColumn: SchemaDefinition.doubleColumn,\n\tdateColumn: SchemaDefinition.dateColumn,\n\ttimeColumn: SchemaDefinition.timeColumn,\n\tdateTimeColumn: SchemaDefinition.dateTimeColumn,\n\tjsonColumn: SchemaDefinition.jsonColumn,\n\tstringColumn: SchemaDefinition.stringColumn,\n\tenumColumn: SchemaDefinition.enumColumn,\n\tuuidColumn: SchemaDefinition.uuidColumn,\n\tmanyHasMany: SchemaDefinition.manyHasMany,\n\tmanyHasManyInverse: SchemaDefinition.manyHasManyInverse,\n\tmanyHasOne: SchemaDefinition.manyHasOne,\n\toneHasOne: SchemaDefinition.oneHasOne,\n\toneHasOneInverse: SchemaDefinition.oneHasOneInverse,\n\toneHasMany: SchemaDefinition.oneHasMany,\n\t// Model factories\n\tcreateEnum: SchemaDefinition.createEnum,\n\n\n\t// Validation\n\t// Validation field decorators\n\tAssert: InputValidation.assert,\n\tRequired: InputValidation.required,\n\tAssertDefined: InputValidation.assertDefined,\n\tAssertNotEmpty: InputValidation.assertNotEmpty,\n\tAssertPattern: InputValidation.assertPattern,\n\tAssertMinLength: InputValidation.assertMinLength,\n\tAssertMaxLength: InputValidation.assertMaxLength,\n\tValidateWhen: InputValidation.when,\n\t// Validation utilities\n\trules: InputValidation.rules,\n\n}\n"],"names":["AclDefinition.allowCustomPrimary","AclDefinition.allow","AclDefinition.createRole","AclDefinition.createConditionVariable","AclDefinition.createEntityVariable","AclDefinition.createPredefinedVariable","AclDefinition.canCreate","AclDefinition.canRead","AclDefinition.canUpdate","AclDefinition.canDelete","ActionsDefinition.watch","ActionsDefinition.trigger","ActionsDefinition.createTarget","SchemaDefinition.extendEntity","SchemaDefinition.Index","SchemaDefinition.Unique","SchemaDefinition.View","SchemaDefinition.DisableEventLog","SchemaDefinition.OrderBy","SchemaDefinition.column","SchemaDefinition.boolColumn","SchemaDefinition.intColumn","SchemaDefinition.doubleColumn","SchemaDefinition.dateColumn","SchemaDefinition.timeColumn","SchemaDefinition.dateTimeColumn","SchemaDefinition.jsonColumn","SchemaDefinition.stringColumn","SchemaDefinition.enumColumn","SchemaDefinition.uuidColumn","SchemaDefinition.manyHasMany","SchemaDefinition.manyHasManyInverse","SchemaDefinition.manyHasOne","SchemaDefinition.oneHasOne","SchemaDefinition.oneHasOneInverse","SchemaDefinition.oneHasMany","SchemaDefinition.createEnum","InputValidation.assert","InputValidation.required","InputValidation.assertDefined","InputValidation.assertNotEmpty","InputValidation.assertPattern","InputValidation.assertMinLength","InputValidation.assertMaxLength","InputValidation.when","InputValidation.rules"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BO,MAAM,IAAI;AAAA;AAAA;AAAA,EAIhB,oBAAoBA,cAAc;AAAA,EAClC,OAAOC,YAAc;AAAA;AAAA,EAErB,YAAYC,MAAc;AAAA,EAC1B,yBAAyBC,UAAc;AAAA,EACvC,sBAAsBC,UAAc;AAAA,EACpC,0BAA0BC,UAAc;AAAA;AAAA,EAExC,WAAWC,WAAc;AAAA,EACzB,SAASC,WAAc;AAAA,EACvB,WAAWC,WAAc;AAAA,EACzB,WAAWC,WAAc;AAAA;AAAA;AAAA,EAKzB,OAAOC,SAAkB;AAAA,EACzB,SAASC,SAAkB;AAAA;AAAA,EAE3B,qBAAqBC,QAAkB;AAAA;AAAA;AAAA,EAKvC,cAAcC,WAAiB;AAAA,EAC/B,OAAOC,gBAAiB;AAAA,EACxB,QAAQC,iBAAiB;AAAA,EACzB,MAAMC,eAAiB;AAAA,EACvB,iBAAiBC,mBAAiB;AAAA,EAClC,SAASC,kBAAiB;AAAA;AAAA,EAE1B,QAAQC,iBAAiB;AAAA,EACzB,YAAYC,iBAAiB;AAAA,EAC7B,WAAWC,iBAAiB;AAAA,EAC5B,cAAcC,iBAAiB;AAAA,EAC/B,YAAYC,iBAAiB;AAAA,EAC7B,YAAYC,iBAAiB;AAAA,EAC7B,gBAAgBC,iBAAiB;AAAA,EACjC,YAAYC,iBAAiB;AAAA,EAC7B,cAAcC,iBAAiB;AAAA,EAC/B,YAAYC,iBAAiB;AAAA,EAC7B,YAAYC,iBAAiB;AAAA,EAC7B,aAAaC,sBAAiB;AAAA,EAC9B,oBAAoBC,6BAAiB;AAAA,EACrC,YAAYC,qBAAiB;AAAA,EAC7B,WAAWC,oBAAiB;AAAA,EAC5B,kBAAkBC,2BAAiB;AAAA,EACnC,YAAYC,qBAAiB;AAAA;AAAA,EAE7B,YAAYC,eAAiB;AAAA;AAAA;AAAA,EAK7B,QAAQC,QAAgB;AAAA,EACxB,UAAUC,QAAgB;AAAA,EAC1B,eAAeC,QAAgB;AAAA,EAC/B,gBAAgBC,QAAgB;AAAA,EAChC,eAAeC,QAAgB;AAAA,EAC/B,iBAAiBC,QAAgB;AAAA,EACjC,iBAAiBC,QAAgB;AAAA,EACjC,cAAcC,QAAgB;AAAA;AAAA,EAE9B,OAAOC,QAAAA;AAER;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -27,7 +27,7 @@ import { Unique } from "./src/model/definition/UniqueDefinition.js";
27
27
  import { View } from "./src/model/definition/ViewDefinition.js";
28
28
  import { DisableEventLog } from "./src/model/definition/EventLogDefinition.js";
29
29
  import { OrderBy } from "./src/model/definition/OrderByDefinition.js";
30
- import { column, boolColumn, intColumn, doubleColumn, dateColumn, dateTimeColumn, jsonColumn, stringColumn, enumColumn, uuidColumn } from "./src/model/definition/fieldDefinitions/ColumnDefinition.js";
30
+ import { column, boolColumn, intColumn, doubleColumn, dateColumn, timeColumn, dateTimeColumn, jsonColumn, stringColumn, enumColumn, uuidColumn } from "./src/model/definition/fieldDefinitions/ColumnDefinition.js";
31
31
  import { manyHasMany } from "./src/model/definition/fieldDefinitions/ManyHasManyDefinition.js";
32
32
  import { manyHasManyInverse } from "./src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.js";
33
33
  import { manyHasOne } from "./src/model/definition/fieldDefinitions/ManyHasOneDefinition.js";
@@ -70,6 +70,7 @@ const c = {
70
70
  intColumn,
71
71
  doubleColumn,
72
72
  dateColumn,
73
+ timeColumn,
73
74
  dateTimeColumn,
74
75
  jsonColumn,
75
76
  stringColumn,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../packages/schema-definition/src/index.ts"],"sourcesContent":["import * as AclDefinition from './acl/definition'\nimport { Role } from './acl/definition'\nimport * as ActionsDefinition from './actions/definition'\nimport * as InputValidation from './validation'\nimport { SchemaDefinition } from './model'\nimport { createSchema } from './createSchema'\n\nexport { AllowAllPermissionFactory } from '@contember/schema-utils'\nexport { PermissionsBuilder } from './acl/builder/PermissionsBuilder'\nexport * from './model'\nexport * from './presets'\n\nexport type { Role }\nexport type { VariableDefinition } from './acl/definition'\nexport type {\n\tColumnDefinition,\n\tFieldDefinition,\n\tOneHasOneDefinition,\n\tOneHasOneInverseDefinition,\n\tOneHasManyDefinition,\n\tManyHasOneDefinition,\n\tManyHasManyDefinition,\n\tManyHasManyInverseDefinition,\n\tEnumDefinition,\n} from './model/definition'\n\nexport { AclDefinition, ActionsDefinition, SchemaDefinition, InputValidation, createSchema }\n\nexport const c = {\n\n\t// ACL\n\t// ACL entity decorators\n\tAllowCustomPrimary: AclDefinition.allowCustomPrimary,\n\tAllow: AclDefinition.allow,\n\t// ACL factories\n\tcreateRole: AclDefinition.createRole,\n\tcreateConditionVariable: AclDefinition.createConditionVariable,\n\tcreateEntityVariable: AclDefinition.createEntityVariable,\n\tcreatePredefinedVariable: AclDefinition.createPredefinedVariable,\n\t// ACL utilities\n\tcanCreate: AclDefinition.canCreate,\n\tcanRead: AclDefinition.canRead,\n\tcanUpdate: AclDefinition.canUpdate,\n\tcanDelete: AclDefinition.canDelete,\n\n\n\t// Actions\n\t// Actions entity decorators\n\tWatch: ActionsDefinition.watch,\n\tTrigger: ActionsDefinition.trigger,\n\t// Actions factories\n\tcreateActionsTarget: ActionsDefinition.createTarget,\n\n\n\t// Model\n\t// Model entity decorators\n\tExtendEntity: SchemaDefinition.extendEntity,\n\tIndex: SchemaDefinition.Index,\n\tUnique: SchemaDefinition.Unique,\n\tView: SchemaDefinition.View,\n\tDisableEventLog: SchemaDefinition.DisableEventLog,\n\tOrderBy: SchemaDefinition.OrderBy,\n\t// Model field factories\n\tcolumn: SchemaDefinition.column,\n\tboolColumn: SchemaDefinition.boolColumn,\n\tintColumn: SchemaDefinition.intColumn,\n\tdoubleColumn: SchemaDefinition.doubleColumn,\n\tdateColumn: SchemaDefinition.dateColumn,\n\tdateTimeColumn: SchemaDefinition.dateTimeColumn,\n\tjsonColumn: SchemaDefinition.jsonColumn,\n\tstringColumn: SchemaDefinition.stringColumn,\n\tenumColumn: SchemaDefinition.enumColumn,\n\tuuidColumn: SchemaDefinition.uuidColumn,\n\tmanyHasMany: SchemaDefinition.manyHasMany,\n\tmanyHasManyInverse: SchemaDefinition.manyHasManyInverse,\n\tmanyHasOne: SchemaDefinition.manyHasOne,\n\toneHasOne: SchemaDefinition.oneHasOne,\n\toneHasOneInverse: SchemaDefinition.oneHasOneInverse,\n\toneHasMany: SchemaDefinition.oneHasMany,\n\t// Model factories\n\tcreateEnum: SchemaDefinition.createEnum,\n\n\n\t// Validation\n\t// Validation field decorators\n\tAssert: InputValidation.assert,\n\tRequired: InputValidation.required,\n\tAssertDefined: InputValidation.assertDefined,\n\tAssertNotEmpty: InputValidation.assertNotEmpty,\n\tAssertPattern: InputValidation.assertPattern,\n\tAssertMinLength: InputValidation.assertMinLength,\n\tAssertMaxLength: InputValidation.assertMaxLength,\n\tValidateWhen: InputValidation.when,\n\t// Validation utilities\n\trules: InputValidation.rules,\n\n}\n"],"names":["AclDefinition.allowCustomPrimary","AclDefinition.allow","ActionsDefinition.watch","ActionsDefinition.trigger","ActionsDefinition.createTarget","SchemaDefinition.extendEntity","InputValidation.assert","InputValidation.required","InputValidation.assertDefined","InputValidation.assertNotEmpty","InputValidation.assertPattern","InputValidation.assertMinLength","InputValidation.assertMaxLength","InputValidation.when"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BO,MAAM,IAAI;AAAA;AAAA;AAAA,EAIhB,oBAAoBA;AAAAA,EACpB,OAAOC;AAAAA;AAAAA,EAEP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAKA,OAAOC;AAAAA,EACP,SAASC;AAAAA;AAAAA,EAET,qBAAqBC;AAAAA;AAAAA;AAAAA,EAKrB,cAAcC;AAAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA;AAAA,EAKA,QAAQC;AAAAA,EACR,UAAUC;AAAAA,EACV,eAAeC;AAAAA,EACf,gBAAgBC;AAAAA,EAChB,eAAeC;AAAAA,EACf,iBAAiBC;AAAAA,EACjB,iBAAiBC;AAAAA,EACjB,cAAcC;AAAAA;AAAAA,EAEd;AAED;"}
1
+ {"version":3,"file":"index.js","sources":["../../../packages/schema-definition/src/index.ts"],"sourcesContent":["import * as AclDefinition from './acl/definition'\nimport { Role } from './acl/definition'\nimport * as ActionsDefinition from './actions/definition'\nimport * as InputValidation from './validation'\nimport { SchemaDefinition } from './model'\nimport { createSchema } from './createSchema'\n\nexport { AllowAllPermissionFactory } from '@contember/schema-utils'\nexport { PermissionsBuilder } from './acl/builder/PermissionsBuilder'\nexport * from './model'\nexport * from './presets'\n\nexport type { Role }\nexport type { VariableDefinition } from './acl/definition'\nexport type {\n\tColumnDefinition,\n\tFieldDefinition,\n\tOneHasOneDefinition,\n\tOneHasOneInverseDefinition,\n\tOneHasManyDefinition,\n\tManyHasOneDefinition,\n\tManyHasManyDefinition,\n\tManyHasManyInverseDefinition,\n\tEnumDefinition,\n} from './model/definition'\n\nexport { AclDefinition, ActionsDefinition, SchemaDefinition, InputValidation, createSchema }\n\nexport const c = {\n\n\t// ACL\n\t// ACL entity decorators\n\tAllowCustomPrimary: AclDefinition.allowCustomPrimary,\n\tAllow: AclDefinition.allow,\n\t// ACL factories\n\tcreateRole: AclDefinition.createRole,\n\tcreateConditionVariable: AclDefinition.createConditionVariable,\n\tcreateEntityVariable: AclDefinition.createEntityVariable,\n\tcreatePredefinedVariable: AclDefinition.createPredefinedVariable,\n\t// ACL utilities\n\tcanCreate: AclDefinition.canCreate,\n\tcanRead: AclDefinition.canRead,\n\tcanUpdate: AclDefinition.canUpdate,\n\tcanDelete: AclDefinition.canDelete,\n\n\n\t// Actions\n\t// Actions entity decorators\n\tWatch: ActionsDefinition.watch,\n\tTrigger: ActionsDefinition.trigger,\n\t// Actions factories\n\tcreateActionsTarget: ActionsDefinition.createTarget,\n\n\n\t// Model\n\t// Model entity decorators\n\tExtendEntity: SchemaDefinition.extendEntity,\n\tIndex: SchemaDefinition.Index,\n\tUnique: SchemaDefinition.Unique,\n\tView: SchemaDefinition.View,\n\tDisableEventLog: SchemaDefinition.DisableEventLog,\n\tOrderBy: SchemaDefinition.OrderBy,\n\t// Model field factories\n\tcolumn: SchemaDefinition.column,\n\tboolColumn: SchemaDefinition.boolColumn,\n\tintColumn: SchemaDefinition.intColumn,\n\tdoubleColumn: SchemaDefinition.doubleColumn,\n\tdateColumn: SchemaDefinition.dateColumn,\n\ttimeColumn: SchemaDefinition.timeColumn,\n\tdateTimeColumn: SchemaDefinition.dateTimeColumn,\n\tjsonColumn: SchemaDefinition.jsonColumn,\n\tstringColumn: SchemaDefinition.stringColumn,\n\tenumColumn: SchemaDefinition.enumColumn,\n\tuuidColumn: SchemaDefinition.uuidColumn,\n\tmanyHasMany: SchemaDefinition.manyHasMany,\n\tmanyHasManyInverse: SchemaDefinition.manyHasManyInverse,\n\tmanyHasOne: SchemaDefinition.manyHasOne,\n\toneHasOne: SchemaDefinition.oneHasOne,\n\toneHasOneInverse: SchemaDefinition.oneHasOneInverse,\n\toneHasMany: SchemaDefinition.oneHasMany,\n\t// Model factories\n\tcreateEnum: SchemaDefinition.createEnum,\n\n\n\t// Validation\n\t// Validation field decorators\n\tAssert: InputValidation.assert,\n\tRequired: InputValidation.required,\n\tAssertDefined: InputValidation.assertDefined,\n\tAssertNotEmpty: InputValidation.assertNotEmpty,\n\tAssertPattern: InputValidation.assertPattern,\n\tAssertMinLength: InputValidation.assertMinLength,\n\tAssertMaxLength: InputValidation.assertMaxLength,\n\tValidateWhen: InputValidation.when,\n\t// Validation utilities\n\trules: InputValidation.rules,\n\n}\n"],"names":["AclDefinition.allowCustomPrimary","AclDefinition.allow","ActionsDefinition.watch","ActionsDefinition.trigger","ActionsDefinition.createTarget","SchemaDefinition.extendEntity","InputValidation.assert","InputValidation.required","InputValidation.assertDefined","InputValidation.assertNotEmpty","InputValidation.assertPattern","InputValidation.assertMinLength","InputValidation.assertMaxLength","InputValidation.when"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BO,MAAM,IAAI;AAAA;AAAA;AAAA,EAIhB,oBAAoBA;AAAAA,EACpB,OAAOC;AAAAA;AAAAA,EAEP;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA;AAAA,EAKA,OAAOC;AAAAA,EACP,SAASC;AAAAA;AAAAA,EAET,qBAAqBC;AAAAA;AAAAA;AAAAA,EAKrB,cAAcC;AAAAA,EACd;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAAA,EAEA;AAAA;AAAA;AAAA,EAKA,QAAQC;AAAAA,EACR,UAAUC;AAAAA,EACV,eAAeC;AAAAA,EACf,gBAAgBC;AAAAA,EAChB,eAAeC;AAAAA,EACf,iBAAiBC;AAAAA,EACjB,iBAAiBC;AAAAA,EACjB,cAAcC;AAAAA;AAAAA,EAEd;AAED;"}
@@ -0,0 +1,16 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const MetadataStore = require("../../utils/MetadataStore.cjs");
4
+ const entityAclExtensionsStore = MetadataStore.createMetadataStore([]);
5
+ const extendEntityAcl = (extension) => {
6
+ return function(cls) {
7
+ entityAclExtensionsStore.update(cls, (current) => [...current, extension]);
8
+ };
9
+ };
10
+ const applyEntityAclExtensions = (cls, args) => entityAclExtensionsStore.get(cls).reduce(
11
+ (permissions, ext) => ext({ ...args, permissions }),
12
+ args.permissions
13
+ );
14
+ exports.applyEntityAclExtensions = applyEntityAclExtensions;
15
+ exports.extendEntityAcl = extendEntityAcl;
16
+ //# sourceMappingURL=aclExtensions.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aclExtensions.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/aclExtensions.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { createMetadataStore, DecoratorFunction, EntityConstructor } from '../../utils'\nimport { Role } from './roles'\n\nexport type EntityAclExtensionArgs =\n\t& {\n\t\tentity: Model.Entity\n\t\trole: Role\n\t\tpermissions: Acl.EntityPermissions\n\t}\n\nconst entityAclExtensionsStore = createMetadataStore<EntityAclExtension[]>([])\n\nexport type EntityAclExtension = (args: EntityAclExtensionArgs) => Acl.EntityPermissions\nexport const extendEntityAcl = <T>(extension: EntityAclExtension): DecoratorFunction<T> => {\n\treturn function (cls: EntityConstructor) {\n\t\tentityAclExtensionsStore.update(cls, current => [...current, extension])\n\t}\n}\n\nexport const applyEntityAclExtensions = (\n\tcls: EntityConstructor,\n\targs: EntityAclExtensionArgs,\n): Acl.EntityPermissions =>\n\tentityAclExtensionsStore.get(cls).reduce(\n\t\t(permissions, ext) => ext({ ...args, permissions }),\n\t\targs.permissions,\n\t)\n"],"names":["createMetadataStore"],"mappings":";;;AAWA,MAAM,2BAA2BA,cAA0C,oBAAA,EAAE;AAGhE,MAAA,kBAAkB,CAAI,cAAwD;AAC1F,SAAO,SAAU,KAAwB;AACxC,6BAAyB,OAAO,KAAK,CAAA,YAAW,CAAC,GAAG,SAAS,SAAS,CAAC;AAAA,EACxE;AACD;AAEO,MAAM,2BAA2B,CACvC,KACA,SAEA,yBAAyB,IAAI,GAAG,EAAE;AAAA,EACjC,CAAC,aAAa,QAAQ,IAAI,EAAE,GAAG,MAAM,aAAa;AAAA,EAClD,KAAK;AACN;;;"}
@@ -0,0 +1,16 @@
1
+ import { createMetadataStore } from "../../utils/MetadataStore.js";
2
+ const entityAclExtensionsStore = createMetadataStore([]);
3
+ const extendEntityAcl = (extension) => {
4
+ return function(cls) {
5
+ entityAclExtensionsStore.update(cls, (current) => [...current, extension]);
6
+ };
7
+ };
8
+ const applyEntityAclExtensions = (cls, args) => entityAclExtensionsStore.get(cls).reduce(
9
+ (permissions, ext) => ext({ ...args, permissions }),
10
+ args.permissions
11
+ );
12
+ export {
13
+ applyEntityAclExtensions,
14
+ extendEntityAcl
15
+ };
16
+ //# sourceMappingURL=aclExtensions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"aclExtensions.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/aclExtensions.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { createMetadataStore, DecoratorFunction, EntityConstructor } from '../../utils'\nimport { Role } from './roles'\n\nexport type EntityAclExtensionArgs =\n\t& {\n\t\tentity: Model.Entity\n\t\trole: Role\n\t\tpermissions: Acl.EntityPermissions\n\t}\n\nconst entityAclExtensionsStore = createMetadataStore<EntityAclExtension[]>([])\n\nexport type EntityAclExtension = (args: EntityAclExtensionArgs) => Acl.EntityPermissions\nexport const extendEntityAcl = <T>(extension: EntityAclExtension): DecoratorFunction<T> => {\n\treturn function (cls: EntityConstructor) {\n\t\tentityAclExtensionsStore.update(cls, current => [...current, extension])\n\t}\n}\n\nexport const applyEntityAclExtensions = (\n\tcls: EntityConstructor,\n\targs: EntityAclExtensionArgs,\n): Acl.EntityPermissions =>\n\tentityAclExtensionsStore.get(cls).reduce(\n\t\t(permissions, ext) => ext({ ...args, permissions }),\n\t\targs.permissions,\n\t)\n"],"names":[],"mappings":";AAWA,MAAM,2BAA2B,oBAA0C,EAAE;AAGhE,MAAA,kBAAkB,CAAI,cAAwD;AAC1F,SAAO,SAAU,KAAwB;AACxC,6BAAyB,OAAO,KAAK,CAAA,YAAW,CAAC,GAAG,SAAS,SAAS,CAAC;AAAA,EACxE;AACD;AAEO,MAAM,2BAA2B,CACvC,KACA,SAEA,yBAAyB,IAAI,GAAG,EAAE;AAAA,EACjC,CAAC,aAAa,QAAQ,IAAI,EAAE,GAAG,MAAM,aAAa;AAAA,EAClD,KAAK;AACN;"}
@@ -1,14 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const stores = require("./internal/stores.cjs");
3
+ const aclExtensions = require("./aclExtensions.cjs");
4
4
  const allowCustomPrimary = (role) => {
5
- return (entity) => {
6
- if (!role) {
7
- stores.allowCustomPrimaryAllRolesStore.update(entity, () => true);
8
- } else {
9
- stores.allowCustomPrimaryStore.update(entity, (val) => [...val, ...Array.isArray(role) ? role : [role]]);
5
+ return aclExtensions.extendEntityAcl(({ permissions, role: currentRole }) => {
6
+ if (!role || role === currentRole || Array.isArray(role) && role.includes(currentRole)) {
7
+ return { ...permissions, operations: { customPrimary: true } };
10
8
  }
11
- };
9
+ return permissions;
10
+ });
12
11
  };
13
12
  exports.allowCustomPrimary = allowCustomPrimary;
14
13
  //# sourceMappingURL=customPrimary.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"customPrimary.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { allowCustomPrimaryAllRolesStore, allowCustomPrimaryStore } from './internal/stores'\nimport { DecoratorFunction, EntityConstructor } from '../../utils'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn (entity: EntityConstructor) => {\n\t\tif (!role) {\n\t\t\tallowCustomPrimaryAllRolesStore.update(entity, () => true)\n\t\t} else {\n\t\t\tallowCustomPrimaryStore.update(entity, val => [...val, ...(Array.isArray(role) ? role : [role])])\n\t\t}\n\t}\n}\n"],"names":["allowCustomPrimaryAllRolesStore","allowCustomPrimaryStore"],"mappings":";;;AAIa,MAAA,qBAAqB,CAAC,SAAiD;AACnF,SAAO,CAAC,WAA8B;AACrC,QAAI,CAAC,MAAM;AACsBA,aAAAA,gCAAA,OAAO,QAAQ,MAAM,IAAI;AAAA,IAAA,OACnD;AACNC,aAAAA,wBAAwB,OAAO,QAAQ,CAAO,QAAA,CAAC,GAAG,KAAK,GAAI,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAE,CAAC;AAAA,IAAA;AAAA,EAElG;AACD;;"}
1
+ {"version":3,"file":"customPrimary.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { DecoratorFunction } from '../../utils'\nimport { extendEntityAcl } from './aclExtensions'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":["extendEntityAcl"],"mappings":";;;AAIa,MAAA,qBAAqB,CAAC,SAAiD;AACnF,SAAOA,8BAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC1D,QAAA,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AACzF,aAAO,EAAE,GAAG,aAAa,YAAY,EAAE,eAAe,OAAO;AAAA,IAAA;AAEvD,WAAA;AAAA,EAAA,CACP;AACF;;"}
@@ -1,12 +1,11 @@
1
- import { allowCustomPrimaryAllRolesStore, allowCustomPrimaryStore } from "./internal/stores.js";
1
+ import { extendEntityAcl } from "./aclExtensions.js";
2
2
  const allowCustomPrimary = (role) => {
3
- return (entity) => {
4
- if (!role) {
5
- allowCustomPrimaryAllRolesStore.update(entity, () => true);
6
- } else {
7
- allowCustomPrimaryStore.update(entity, (val) => [...val, ...Array.isArray(role) ? role : [role]]);
3
+ return extendEntityAcl(({ permissions, role: currentRole }) => {
4
+ if (!role || role === currentRole || Array.isArray(role) && role.includes(currentRole)) {
5
+ return { ...permissions, operations: { customPrimary: true } };
8
6
  }
9
- };
7
+ return permissions;
8
+ });
10
9
  };
11
10
  export {
12
11
  allowCustomPrimary
@@ -1 +1 @@
1
- {"version":3,"file":"customPrimary.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { allowCustomPrimaryAllRolesStore, allowCustomPrimaryStore } from './internal/stores'\nimport { DecoratorFunction, EntityConstructor } from '../../utils'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn (entity: EntityConstructor) => {\n\t\tif (!role) {\n\t\t\tallowCustomPrimaryAllRolesStore.update(entity, () => true)\n\t\t} else {\n\t\t\tallowCustomPrimaryStore.update(entity, val => [...val, ...(Array.isArray(role) ? role : [role])])\n\t\t}\n\t}\n}\n"],"names":[],"mappings":";AAIa,MAAA,qBAAqB,CAAC,SAAiD;AACnF,SAAO,CAAC,WAA8B;AACrC,QAAI,CAAC,MAAM;AACsB,sCAAA,OAAO,QAAQ,MAAM,IAAI;AAAA,IAAA,OACnD;AACN,8BAAwB,OAAO,QAAQ,CAAO,QAAA,CAAC,GAAG,KAAK,GAAI,MAAM,QAAQ,IAAI,IAAI,OAAO,CAAC,IAAI,CAAE,CAAC;AAAA,IAAA;AAAA,EAElG;AACD;"}
1
+ {"version":3,"file":"customPrimary.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { DecoratorFunction } from '../../utils'\nimport { extendEntityAcl } from './aclExtensions'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":[],"mappings":";AAIa,MAAA,qBAAqB,CAAC,SAAiD;AACnF,SAAO,gBAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC1D,QAAA,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AACzF,aAAO,EAAE,GAAG,aAAa,YAAY,EAAE,eAAe,OAAO;AAAA,IAAA;AAEvD,WAAA;AAAA,EAAA,CACP;AACF;"}
@@ -1,12 +1,12 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
- const schemaUtils = require("@contember/schema-utils");
4
3
  const EntityPredicateResolver = require("./EntityPredicateResolver.cjs");
5
4
  const stores = require("./stores.cjs");
6
5
  const roles = require("../roles.cjs");
7
6
  const variables = require("../variables.cjs");
8
7
  const filterEntityDefinition = require("../../../utils/filterEntityDefinition.cjs");
9
8
  require("reflect-metadata");
9
+ const aclExtensions = require("../aclExtensions.cjs");
10
10
  class AclFactory {
11
11
  constructor(model) {
12
12
  this.model = model;
@@ -24,49 +24,54 @@ class AclFactory {
24
24
  {
25
25
  ...role.options,
26
26
  stages: role.options.stages ?? "*",
27
- entities: this.createPermissions(rolePermissions),
27
+ entities: this.createPermissions(rolePermissions, Object.fromEntries(entityLikeDefinition), role),
28
28
  variables: this.createVariables(role, variables$1)
29
29
  }
30
30
  ];
31
31
  }))
32
32
  };
33
33
  }
34
- createPermissions(rolePermissions) {
35
- if (!rolePermissions) {
36
- return {};
37
- }
38
- return Object.fromEntries(Array.from(rolePermissions.keys()).map((entityName) => {
39
- const entity = schemaUtils.getEntity(this.model, entityName);
40
- const predicatesResolver = EntityPredicateResolver.EntityPredicatesResolver.create(rolePermissions, this.model, entity);
41
- const entityOperations = {};
42
- const noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entityName));
43
- if (noRootOptions?.length) {
44
- entityOperations.noRoot = noRootOptions;
34
+ createPermissions(rolePermissions, entityLikeDefinition, role) {
35
+ return Object.fromEntries(Object.values(this.model.entities).map((entity) => {
36
+ const permissions = rolePermissions ? this.createPermissionsFromAllow(rolePermissions, entity) : { predicates: {}, operations: {} };
37
+ const isEmpty = !rolePermissions?.has(entity.name);
38
+ const withExtensions = aclExtensions.applyEntityAclExtensions(entityLikeDefinition[entity.name], { entity, permissions, role });
39
+ if (isEmpty && withExtensions === permissions) {
40
+ return void 0;
45
41
  }
46
- for (const op of ["create", "update", "read"]) {
47
- const fieldPermissions = {};
48
- for (const field of Object.keys(entity.fields)) {
49
- const predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary);
50
- if (predicate !== void 0) {
51
- fieldPermissions[field] = predicate;
52
- }
53
- }
54
- if (Object.keys(fieldPermissions).length > 0) {
55
- entityOperations[op] = fieldPermissions;
42
+ return [
43
+ entity.name,
44
+ withExtensions
45
+ ];
46
+ }).filter((it) => it !== void 0));
47
+ }
48
+ createPermissionsFromAllow(rolePermissions, entity) {
49
+ const predicatesResolver = EntityPredicateResolver.EntityPredicatesResolver.create(rolePermissions, this.model, entity);
50
+ const entityOperations = {};
51
+ const noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entity.name));
52
+ if (noRootOptions?.length) {
53
+ entityOperations.noRoot = noRootOptions;
54
+ }
55
+ for (const op of ["create", "update", "read"]) {
56
+ const fieldPermissions = {};
57
+ for (const field of Object.keys(entity.fields)) {
58
+ const predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary);
59
+ if (predicate !== void 0) {
60
+ fieldPermissions[field] = predicate;
56
61
  }
57
62
  }
58
- const delPredicate = predicatesResolver.createFieldPredicate("delete", "", false);
59
- if (delPredicate !== void 0) {
60
- entityOperations.delete = delPredicate;
61
- }
62
- if (rolePermissions.get(entityName)?.allowCustomPrimary) {
63
- entityOperations.customPrimary = true;
63
+ if (Object.keys(fieldPermissions).length > 0) {
64
+ entityOperations[op] = fieldPermissions;
64
65
  }
65
- return [entityName, {
66
- predicates: predicatesResolver.getUsedPredicates(),
67
- operations: entityOperations
68
- }];
69
- }));
66
+ }
67
+ const delPredicate = predicatesResolver.createFieldPredicate("delete", "", false);
68
+ if (delPredicate !== void 0) {
69
+ entityOperations.delete = delPredicate;
70
+ }
71
+ return {
72
+ predicates: predicatesResolver.getUsedPredicates(),
73
+ operations: entityOperations
74
+ };
70
75
  }
71
76
  getNoRootOptions(entity, permissions) {
72
77
  const allowedRoot = /* @__PURE__ */ new Set();
@@ -99,7 +104,6 @@ class AclFactory {
99
104
  const rolePermissions = groupedPermissions.get(role) ?? /* @__PURE__ */ new Map();
100
105
  groupedPermissions.set(role, rolePermissions);
101
106
  const entityPermissions = rolePermissions.get(name) ?? {
102
- allowCustomPrimary: false,
103
107
  definitions: []
104
108
  };
105
109
  rolePermissions.set(name, entityPermissions);
@@ -113,10 +117,6 @@ class AclFactory {
113
117
  const entityPermissions = initEntityPermissions(role);
114
118
  entityPermissions.definitions.push(definition);
115
119
  }
116
- const rolesWithCustomPrimary = stores.allowCustomPrimaryAllRolesStore.get(entity) ? roles2 : stores.allowCustomPrimaryStore.get(entity);
117
- for (const role of rolesWithCustomPrimary) {
118
- initEntityPermissions(role).allowCustomPrimary = true;
119
- }
120
120
  }
121
121
  return groupedPermissions;
122
122
  }
@@ -1 +1 @@
1
- {"version":3,"file":"AclFactory.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/AclFactory.ts"],"sourcesContent":["import { Acl, Model, Writable } from '@contember/schema'\nimport { getEntity } from '@contember/schema-utils'\n\nimport { EntityPredicatesResolver } from './EntityPredicateResolver'\nimport { AllowDefinition } from '../permissions'\nimport {\n\tallowCustomPrimaryAllRolesStore,\n\tallowCustomPrimaryStore,\n\tallowDefinitionsStore,\n\tEntityPermissionsDefinition,\n} from './stores'\nimport { Role } from '../roles'\nimport { VariableDefinition } from '../variables'\nimport { filterEntityDefinition } from '../../../utils'\n\nexport class AclFactory {\n\tconstructor(\n\t\tprivate model: Model.Schema,\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Acl.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\t\tconst roles: Role[] = Object.values(exportedDefinitions).filter(it => it instanceof Role)\n\t\tconst variables: VariableDefinition[] = Object.values(exportedDefinitions).filter(it => it instanceof VariableDefinition)\n\n\t\tconst groupedPermissions = AclFactory.groupPermissions(entityLikeDefinition, roles)\n\n\t\treturn {\n\t\t\troles: Object.fromEntries(roles.map((role): [string, Acl.RolePermissions] => {\n\t\t\t\tconst rolePermissions = groupedPermissions.get(role)\n\t\t\t\treturn [\n\t\t\t\t\trole.name,\n\t\t\t\t\t{\n\t\t\t\t\t\t...role.options,\n\t\t\t\t\t\tstages: role.options.stages ?? '*',\n\t\t\t\t\t\tentities: this.createPermissions(rolePermissions),\n\t\t\t\t\t\tvariables: this.createVariables(role, variables),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t})),\n\t\t}\n\t}\n\n\tprivate createPermissions(rolePermissions: PermissionsByEntity | undefined): Acl.Permissions {\n\t\tif (!rolePermissions) {\n\t\t\treturn {}\n\t\t}\n\t\treturn Object.fromEntries(Array.from(rolePermissions.keys()).map((entityName): [string, Acl.EntityPermissions] => {\n\t\t\tconst entity = getEntity(this.model, entityName)\n\n\t\t\tconst predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity)\n\n\t\t\tconst entityOperations: Writable<Acl.EntityOperations> = {\n\t\t\t}\n\t\t\tconst noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entityName))\n\t\t\tif (noRootOptions?.length) {\n\t\t\t\tentityOperations.noRoot = noRootOptions\n\t\t\t}\n\t\t\tfor (const op of ['create', 'update', 'read'] as const) {\n\t\t\t\tconst fieldPermissions: Writable<Acl.FieldPermissions> = {}\n\t\t\t\tfor (const field of Object.keys(entity.fields)) {\n\t\t\t\t\tconst predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary)\n\t\t\t\t\tif (predicate !== undefined) {\n\t\t\t\t\t\tfieldPermissions[field] = predicate\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (Object.keys(fieldPermissions).length > 0) {\n\t\t\t\t\tentityOperations[op] = fieldPermissions\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst delPredicate = predicatesResolver.createFieldPredicate('delete', '', false)\n\t\t\tif (delPredicate !== undefined) {\n\t\t\t\tentityOperations.delete = delPredicate\n\t\t\t}\n\t\t\tif (rolePermissions.get(entityName)?.allowCustomPrimary) {\n\t\t\t\tentityOperations.customPrimary = true\n\t\t\t}\n\t\t\treturn [entityName, {\n\t\t\t\tpredicates: predicatesResolver.getUsedPredicates(),\n\t\t\t\toperations: entityOperations,\n\n\t\t\t}]\n\t\t}))\n\t}\n\n\n\tgetNoRootOptions(entity: Model.Entity, permissions?: EntityPermissions): Acl.EntityOperations['noRoot'] {\n\t\tconst allowedRoot = new Set<Acl.Operation>()\n\t\tconst disallowedRoot = new Set<Acl.Operation>()\n\t\tfor (const def of permissions?.definitions ?? []) {\n\t\t\tconst noRoot = def.through === true\n\t\t\tfor (const op of ['create', 'read', 'update', 'delete'] as const) {\n\t\t\t\tif (def[op]) {\n\t\t\t\t\tconst currentSet = noRoot ? disallowedRoot : allowedRoot\n\t\t\t\t\tcurrentSet.add(op as Acl.Operation)\n\n\t\t\t\t\tconst otherSet = noRoot ? allowedRoot : disallowedRoot\n\n\t\t\t\t\tif (otherSet.has(op as Acl.Operation)) {\n\t\t\t\t\t\tthrow new Error(`Operation ${op} cannot be both allowed and disallowed on root on entity ${entity.name}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn [...disallowedRoot.values()]\n\t}\n\n\tprivate createVariables(role: Role, variables: VariableDefinition[]): Acl.Variables {\n\t\tconst roleVariables = variables.filter(it => it.roles.includes(role))\n\t\treturn Object.fromEntries(roleVariables.map((variable): [string, Acl.Variable] => {\n\t\t\treturn [variable.name, variable.variable]\n\t\t}))\n\t}\n\n\tprivate static groupPermissions(entityLikeDefinition: [string, { new(): any }][], roles: Role[]): PermissionsByRoleAndEntity {\n\t\tconst groupedPermissions: PermissionsByRoleAndEntity = new Map()\n\t\tfor (const [name, entity] of entityLikeDefinition) {\n\t\t\tconst initEntityPermissions = (role: Role): EntityPermissions => {\n\t\t\t\tconst rolePermissions: PermissionsByEntity = groupedPermissions.get(role) ?? new Map()\n\t\t\t\tgroupedPermissions.set(role, rolePermissions)\n\t\t\t\tconst entityPermissions = rolePermissions.get(name) ?? {\n\t\t\t\t\tallowCustomPrimary: false,\n\t\t\t\t\tdefinitions: [],\n\t\t\t\t}\n\t\t\t\trolePermissions.set(name, entityPermissions)\n\t\t\t\treturn entityPermissions\n\t\t\t}\n\t\t\tconst metadata: EntityPermissionsDefinition[] = allowDefinitionsStore.get(entity)\n\t\t\tfor (const { role, ...definition } of metadata) {\n\t\t\t\tif (!roles.includes(role)) {\n\t\t\t\t\tthrow `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\tconst entityPermissions = initEntityPermissions(role)\n\t\t\t\tentityPermissions.definitions.push(definition)\n\t\t\t}\n\n\t\t\tconst rolesWithCustomPrimary = allowCustomPrimaryAllRolesStore.get(entity) ? roles : allowCustomPrimaryStore.get(entity)\n\t\t\tfor (const role of rolesWithCustomPrimary) {\n\t\t\t\tinitEntityPermissions(role).allowCustomPrimary = true\n\t\t\t}\n\t\t}\n\n\t\treturn groupedPermissions\n\t}\n}\n\n\nexport type EntityPermissions = { definitions: AllowDefinition<any>[]; allowCustomPrimary: boolean }\nexport type PermissionsByEntity = Map<string, EntityPermissions>\nexport type PermissionsByRoleAndEntity = Map<Role, PermissionsByEntity>\n"],"names":["filterEntityDefinition","roles","Role","variables","VariableDefinition","getEntity","EntityPredicatesResolver","allowDefinitionsStore","allowCustomPrimaryAllRolesStore","allowCustomPrimaryStore"],"mappings":"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"}
1
+ {"version":3,"file":"AclFactory.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/AclFactory.ts"],"sourcesContent":["import { Acl, Model, Writable } from '@contember/schema'\nimport { getEntity } from '@contember/schema-utils'\n\nimport { EntityPredicatesResolver } from './EntityPredicateResolver'\nimport { AllowDefinition } from '../permissions'\nimport {\n\tallowDefinitionsStore,\n\tEntityPermissionsDefinition,\n} from './stores'\nimport { Role } from '../roles'\nimport { VariableDefinition } from '../variables'\nimport { filterEntityDefinition } from '../../../utils'\nimport { applyEntityAclExtensions } from '../aclExtensions'\n\nexport class AclFactory {\n\tconstructor(\n\t\tprivate model: Model.Schema,\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Acl.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\t\tconst roles: Role[] = Object.values(exportedDefinitions).filter(it => it instanceof Role)\n\t\tconst variables: VariableDefinition[] = Object.values(exportedDefinitions).filter(it => it instanceof VariableDefinition)\n\n\t\tconst groupedPermissions = AclFactory.groupPermissions(entityLikeDefinition, roles)\n\n\t\treturn {\n\t\t\troles: Object.fromEntries(roles.map((role): [string, Acl.RolePermissions] => {\n\t\t\t\tconst rolePermissions = groupedPermissions.get(role)\n\t\t\t\treturn [\n\t\t\t\t\trole.name,\n\t\t\t\t\t{\n\t\t\t\t\t\t...role.options,\n\t\t\t\t\t\tstages: role.options.stages ?? '*',\n\t\t\t\t\t\tentities: this.createPermissions(rolePermissions, Object.fromEntries(entityLikeDefinition), role),\n\t\t\t\t\t\tvariables: this.createVariables(role, variables),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t})),\n\t\t}\n\t}\n\n\tprivate createPermissions(rolePermissions: PermissionsByEntity | undefined, entityLikeDefinition: Record<string, { new(): any }>, role: Role): Acl.Permissions {\n\t\treturn Object.fromEntries(Object.values(this.model.entities).map((entity): [string, Acl.EntityPermissions] | undefined => {\n\t\t\tconst permissions = rolePermissions ? this.createPermissionsFromAllow(rolePermissions, entity) : { predicates: {}, operations: {} }\n\t\t\tconst isEmpty = !rolePermissions?.has(entity.name)\n\t\t\tconst withExtensions = applyEntityAclExtensions(entityLikeDefinition[entity.name], { entity, permissions, role })\n\t\t\tif (isEmpty && withExtensions === permissions) {\n\t\t\t\treturn undefined\n\t\t\t}\n\t\t\treturn [\n\t\t\t\tentity.name,\n\t\t\t\twithExtensions,\n\t\t\t]\n\t\t}).filter(<T>(it: T | undefined): it is T => it !== undefined))\n\t}\n\n\tprivate createPermissionsFromAllow(rolePermissions: PermissionsByEntity, entity: Model.Entity): Acl.EntityPermissions {\n\t\tconst predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity)\n\n\t\tconst entityOperations: Writable<Acl.EntityOperations> = {}\n\t\tconst noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entity.name))\n\t\tif (noRootOptions?.length) {\n\t\t\tentityOperations.noRoot = noRootOptions\n\t\t}\n\t\tfor (const op of ['create', 'update', 'read'] as const) {\n\t\t\tconst fieldPermissions: Writable<Acl.FieldPermissions> = {}\n\t\t\tfor (const field of Object.keys(entity.fields)) {\n\t\t\t\tconst predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary)\n\t\t\t\tif (predicate !== undefined) {\n\t\t\t\t\tfieldPermissions[field] = predicate\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (Object.keys(fieldPermissions).length > 0) {\n\t\t\t\tentityOperations[op] = fieldPermissions\n\t\t\t}\n\t\t}\n\t\tconst delPredicate = predicatesResolver.createFieldPredicate('delete', '', false)\n\t\tif (delPredicate !== undefined) {\n\t\t\tentityOperations.delete = delPredicate\n\t\t}\n\t\treturn {\n\t\t\tpredicates: predicatesResolver.getUsedPredicates(),\n\t\t\toperations: entityOperations,\n\t\t}\n\t}\n\n\n\tgetNoRootOptions(entity: Model.Entity, permissions?: EntityPermissions): Acl.EntityOperations['noRoot'] {\n\t\tconst allowedRoot = new Set<Acl.Operation>()\n\t\tconst disallowedRoot = new Set<Acl.Operation>()\n\t\tfor (const def of permissions?.definitions ?? []) {\n\t\t\tconst noRoot = def.through === true\n\t\t\tfor (const op of ['create', 'read', 'update', 'delete'] as const) {\n\t\t\t\tif (def[op]) {\n\t\t\t\t\tconst currentSet = noRoot ? disallowedRoot : allowedRoot\n\t\t\t\t\tcurrentSet.add(op as Acl.Operation)\n\n\t\t\t\t\tconst otherSet = noRoot ? allowedRoot : disallowedRoot\n\n\t\t\t\t\tif (otherSet.has(op as Acl.Operation)) {\n\t\t\t\t\t\tthrow new Error(`Operation ${op} cannot be both allowed and disallowed on root on entity ${entity.name}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t\treturn [...disallowedRoot.values()]\n\t}\n\n\tprivate createVariables(role: Role, variables: VariableDefinition[]): Acl.Variables {\n\t\tconst roleVariables = variables.filter(it => it.roles.includes(role))\n\t\treturn Object.fromEntries(roleVariables.map((variable): [string, Acl.Variable] => {\n\t\t\treturn [variable.name, variable.variable]\n\t\t}))\n\t}\n\n\tprivate static groupPermissions(entityLikeDefinition: [string, { new(): any }][], roles: Role[]): PermissionsByRoleAndEntity {\n\t\tconst groupedPermissions: PermissionsByRoleAndEntity = new Map()\n\t\tfor (const [name, entity] of entityLikeDefinition) {\n\t\t\tconst initEntityPermissions = (role: Role): EntityPermissions => {\n\t\t\t\tconst rolePermissions: PermissionsByEntity = groupedPermissions.get(role) ?? new Map()\n\t\t\t\tgroupedPermissions.set(role, rolePermissions)\n\t\t\t\tconst entityPermissions = rolePermissions.get(name) ?? {\n\t\t\t\t\tdefinitions: [],\n\t\t\t\t}\n\t\t\t\trolePermissions.set(name, entityPermissions)\n\t\t\t\treturn entityPermissions\n\t\t\t}\n\t\t\tconst metadata: EntityPermissionsDefinition[] = allowDefinitionsStore.get(entity)\n\t\t\tfor (const { role, ...definition } of metadata) {\n\t\t\t\tif (!roles.includes(role)) {\n\t\t\t\t\tthrow `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\tconst entityPermissions = initEntityPermissions(role)\n\t\t\t\tentityPermissions.definitions.push(definition)\n\t\t\t}\n\t\t}\n\n\t\treturn groupedPermissions\n\t}\n}\n\n\nexport type EntityPermissions = { definitions: AllowDefinition<any>[] }\nexport type PermissionsByEntity = Map<string, EntityPermissions>\nexport type PermissionsByRoleAndEntity = Map<Role, PermissionsByEntity>\n"],"names":["filterEntityDefinition","roles","Role","variables","VariableDefinition","applyEntityAclExtensions","EntityPredicatesResolver","allowDefinitionsStore"],"mappings":"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"}
@@ -1,10 +1,10 @@
1
- import { getEntity } from "@contember/schema-utils";
2
1
  import { EntityPredicatesResolver } from "./EntityPredicateResolver.js";
3
- import { allowDefinitionsStore, allowCustomPrimaryAllRolesStore, allowCustomPrimaryStore } from "./stores.js";
2
+ import { allowDefinitionsStore } from "./stores.js";
4
3
  import { Role } from "../roles.js";
5
4
  import { VariableDefinition } from "../variables.js";
6
5
  import { filterEntityDefinition } from "../../../utils/filterEntityDefinition.js";
7
6
  import "reflect-metadata";
7
+ import { applyEntityAclExtensions } from "../aclExtensions.js";
8
8
  class AclFactory {
9
9
  constructor(model) {
10
10
  this.model = model;
@@ -22,49 +22,54 @@ class AclFactory {
22
22
  {
23
23
  ...role.options,
24
24
  stages: role.options.stages ?? "*",
25
- entities: this.createPermissions(rolePermissions),
25
+ entities: this.createPermissions(rolePermissions, Object.fromEntries(entityLikeDefinition), role),
26
26
  variables: this.createVariables(role, variables)
27
27
  }
28
28
  ];
29
29
  }))
30
30
  };
31
31
  }
32
- createPermissions(rolePermissions) {
33
- if (!rolePermissions) {
34
- return {};
35
- }
36
- return Object.fromEntries(Array.from(rolePermissions.keys()).map((entityName) => {
37
- const entity = getEntity(this.model, entityName);
38
- const predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity);
39
- const entityOperations = {};
40
- const noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entityName));
41
- if (noRootOptions?.length) {
42
- entityOperations.noRoot = noRootOptions;
32
+ createPermissions(rolePermissions, entityLikeDefinition, role) {
33
+ return Object.fromEntries(Object.values(this.model.entities).map((entity) => {
34
+ const permissions = rolePermissions ? this.createPermissionsFromAllow(rolePermissions, entity) : { predicates: {}, operations: {} };
35
+ const isEmpty = !rolePermissions?.has(entity.name);
36
+ const withExtensions = applyEntityAclExtensions(entityLikeDefinition[entity.name], { entity, permissions, role });
37
+ if (isEmpty && withExtensions === permissions) {
38
+ return void 0;
43
39
  }
44
- for (const op of ["create", "update", "read"]) {
45
- const fieldPermissions = {};
46
- for (const field of Object.keys(entity.fields)) {
47
- const predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary);
48
- if (predicate !== void 0) {
49
- fieldPermissions[field] = predicate;
50
- }
51
- }
52
- if (Object.keys(fieldPermissions).length > 0) {
53
- entityOperations[op] = fieldPermissions;
40
+ return [
41
+ entity.name,
42
+ withExtensions
43
+ ];
44
+ }).filter((it) => it !== void 0));
45
+ }
46
+ createPermissionsFromAllow(rolePermissions, entity) {
47
+ const predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity);
48
+ const entityOperations = {};
49
+ const noRootOptions = this.getNoRootOptions(entity, rolePermissions.get(entity.name));
50
+ if (noRootOptions?.length) {
51
+ entityOperations.noRoot = noRootOptions;
52
+ }
53
+ for (const op of ["create", "update", "read"]) {
54
+ const fieldPermissions = {};
55
+ for (const field of Object.keys(entity.fields)) {
56
+ const predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary);
57
+ if (predicate !== void 0) {
58
+ fieldPermissions[field] = predicate;
54
59
  }
55
60
  }
56
- const delPredicate = predicatesResolver.createFieldPredicate("delete", "", false);
57
- if (delPredicate !== void 0) {
58
- entityOperations.delete = delPredicate;
59
- }
60
- if (rolePermissions.get(entityName)?.allowCustomPrimary) {
61
- entityOperations.customPrimary = true;
61
+ if (Object.keys(fieldPermissions).length > 0) {
62
+ entityOperations[op] = fieldPermissions;
62
63
  }
63
- return [entityName, {
64
- predicates: predicatesResolver.getUsedPredicates(),
65
- operations: entityOperations
66
- }];
67
- }));
64
+ }
65
+ const delPredicate = predicatesResolver.createFieldPredicate("delete", "", false);
66
+ if (delPredicate !== void 0) {
67
+ entityOperations.delete = delPredicate;
68
+ }
69
+ return {
70
+ predicates: predicatesResolver.getUsedPredicates(),
71
+ operations: entityOperations
72
+ };
68
73
  }
69
74
  getNoRootOptions(entity, permissions) {
70
75
  const allowedRoot = /* @__PURE__ */ new Set();
@@ -97,7 +102,6 @@ class AclFactory {
97
102
  const rolePermissions = groupedPermissions.get(role) ?? /* @__PURE__ */ new Map();
98
103
  groupedPermissions.set(role, rolePermissions);
99
104
  const entityPermissions = rolePermissions.get(name) ?? {
100
- allowCustomPrimary: false,
101
105
  definitions: []
102
106
  };
103
107
  rolePermissions.set(name, entityPermissions);
@@ -111,10 +115,6 @@ class AclFactory {
111
115
  const entityPermissions = initEntityPermissions(role);
112
116
  entityPermissions.definitions.push(definition);
113
117
  }
114
- const rolesWithCustomPrimary = allowCustomPrimaryAllRolesStore.get(entity) ? roles : allowCustomPrimaryStore.get(entity);
115
- for (const role of rolesWithCustomPrimary) {
116
- initEntityPermissions(role).allowCustomPrimary = true;
117
- }
118
118
  }
119
119
  return groupedPermissions;
120
120
  }