@contember/schema-definition 1.4.0-rc.7 → 2.0.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.
- package/dist/development/index.cjs +122 -0
- package/dist/development/index.cjs.map +1 -0
- package/dist/development/index.js +117 -0
- package/dist/development/index.js.map +1 -0
- package/dist/development/src/acl/builder/EntityPermissionsBuilder.cjs +119 -0
- package/dist/development/src/acl/builder/EntityPermissionsBuilder.cjs.map +1 -0
- package/dist/development/src/acl/builder/EntityPermissionsBuilder.js +120 -0
- package/dist/development/src/acl/builder/EntityPermissionsBuilder.js.map +1 -0
- package/dist/development/src/acl/builder/EntitySelector.cjs +32 -0
- package/dist/development/src/acl/builder/EntitySelector.cjs.map +1 -0
- package/dist/development/src/acl/builder/EntitySelector.js +33 -0
- package/dist/development/src/acl/builder/EntitySelector.js.map +1 -0
- package/dist/development/src/acl/builder/FieldPermissionsBuilder.cjs +59 -0
- package/dist/development/src/acl/builder/FieldPermissionsBuilder.cjs.map +1 -0
- package/dist/development/src/acl/builder/FieldPermissionsBuilder.js +60 -0
- package/dist/development/src/acl/builder/FieldPermissionsBuilder.js.map +1 -0
- package/dist/development/src/acl/builder/FieldSelector.cjs +26 -0
- package/dist/development/src/acl/builder/FieldSelector.cjs.map +1 -0
- package/dist/development/src/acl/builder/FieldSelector.js +27 -0
- package/dist/development/src/acl/builder/FieldSelector.js.map +1 -0
- package/dist/development/src/acl/builder/PermissionOverrider.cjs +31 -0
- package/dist/development/src/acl/builder/PermissionOverrider.cjs.map +1 -0
- package/dist/development/src/acl/builder/PermissionOverrider.js +32 -0
- package/dist/development/src/acl/builder/PermissionOverrider.js.map +1 -0
- package/dist/development/src/acl/builder/PermissionsBuilder.cjs +58 -0
- package/dist/development/src/acl/builder/PermissionsBuilder.cjs.map +1 -0
- package/dist/development/src/acl/builder/PermissionsBuilder.js +58 -0
- package/dist/development/src/acl/builder/PermissionsBuilder.js.map +1 -0
- package/dist/development/src/acl/builder/PredicateReference.cjs +43 -0
- package/dist/development/src/acl/builder/PredicateReference.cjs.map +1 -0
- package/dist/development/src/acl/builder/PredicateReference.js +43 -0
- package/dist/development/src/acl/builder/PredicateReference.js.map +1 -0
- package/dist/development/src/acl/definition/customPrimary.cjs +14 -0
- package/dist/development/src/acl/definition/customPrimary.cjs.map +1 -0
- package/dist/development/src/acl/definition/customPrimary.js +14 -0
- package/dist/development/src/acl/definition/customPrimary.js.map +1 -0
- package/dist/development/src/acl/definition/index.cjs +27 -0
- package/dist/development/src/acl/definition/index.cjs.map +1 -0
- package/dist/development/src/acl/definition/index.js +27 -0
- package/dist/development/src/acl/definition/index.js.map +1 -0
- package/dist/development/src/acl/definition/internal/AclFactory.cjs +103 -0
- package/dist/development/src/acl/definition/internal/AclFactory.cjs.map +1 -0
- package/dist/development/src/acl/definition/internal/AclFactory.js +103 -0
- package/dist/development/src/acl/definition/internal/AclFactory.js.map +1 -0
- package/dist/development/src/acl/definition/internal/EntityPredicateResolver.cjs +151 -0
- package/dist/development/src/acl/definition/internal/EntityPredicateResolver.cjs.map +1 -0
- package/dist/development/src/acl/definition/internal/EntityPredicateResolver.js +151 -0
- package/dist/development/src/acl/definition/internal/EntityPredicateResolver.js.map +1 -0
- package/dist/development/src/acl/definition/internal/createPredicateName.cjs +8 -0
- package/dist/development/src/acl/definition/internal/createPredicateName.cjs.map +1 -0
- package/dist/development/src/acl/definition/internal/createPredicateName.js +8 -0
- package/dist/development/src/acl/definition/internal/createPredicateName.js.map +1 -0
- package/dist/development/src/acl/definition/internal/stores.cjs +10 -0
- package/dist/development/src/acl/definition/internal/stores.cjs.map +1 -0
- package/dist/development/src/acl/definition/internal/stores.js +10 -0
- package/dist/development/src/acl/definition/internal/stores.js.map +1 -0
- package/dist/development/src/acl/definition/permissions.cjs +12 -0
- package/dist/development/src/acl/definition/permissions.cjs.map +1 -0
- package/dist/development/src/acl/definition/permissions.js +12 -0
- package/dist/development/src/acl/definition/permissions.js.map +1 -0
- package/dist/development/src/acl/definition/references.cjs +26 -0
- package/dist/development/src/acl/definition/references.cjs.map +1 -0
- package/dist/development/src/acl/definition/references.js +26 -0
- package/dist/development/src/acl/definition/references.js.map +1 -0
- package/dist/development/src/acl/definition/roles.cjs +14 -0
- package/dist/development/src/acl/definition/roles.cjs.map +1 -0
- package/dist/development/src/acl/definition/roles.js +14 -0
- package/dist/development/src/acl/definition/roles.js.map +1 -0
- package/dist/development/src/acl/definition/variables.cjs +36 -0
- package/dist/development/src/acl/definition/variables.cjs.map +1 -0
- package/dist/development/src/acl/definition/variables.js +36 -0
- package/dist/development/src/acl/definition/variables.js.map +1 -0
- package/dist/development/src/actions/definition/index.cjs +15 -0
- package/dist/development/src/actions/definition/index.cjs.map +1 -0
- package/dist/development/src/actions/definition/index.js +15 -0
- package/dist/development/src/actions/definition/index.js.map +1 -0
- package/dist/development/src/actions/definition/internal/ActionsFactory.cjs +179 -0
- package/dist/development/src/actions/definition/internal/ActionsFactory.cjs.map +1 -0
- package/dist/development/src/actions/definition/internal/ActionsFactory.js +179 -0
- package/dist/development/src/actions/definition/internal/ActionsFactory.js.map +1 -0
- package/dist/development/src/actions/definition/internal/store.cjs +6 -0
- package/dist/development/src/actions/definition/internal/store.cjs.map +1 -0
- package/dist/development/src/actions/definition/internal/store.js +6 -0
- package/dist/development/src/actions/definition/internal/store.js.map +1 -0
- package/dist/development/src/actions/definition/targets.cjs +15 -0
- package/dist/development/src/actions/definition/targets.cjs.map +1 -0
- package/dist/development/src/actions/definition/targets.js +15 -0
- package/dist/development/src/actions/definition/targets.js.map +1 -0
- package/dist/development/src/actions/definition/triggers.cjs +12 -0
- package/dist/development/src/actions/definition/triggers.cjs.map +1 -0
- package/dist/development/src/actions/definition/triggers.js +12 -0
- package/dist/development/src/actions/definition/triggers.js.map +1 -0
- package/dist/development/src/createSchema.cjs +26 -0
- package/dist/development/src/createSchema.cjs.map +1 -0
- package/dist/development/src/createSchema.js +26 -0
- package/dist/development/src/createSchema.js.map +1 -0
- package/dist/development/src/model/builder/ColumnBuilder.cjs +36 -0
- package/dist/development/src/model/builder/ColumnBuilder.cjs.map +1 -0
- package/dist/development/src/model/builder/ColumnBuilder.js +37 -0
- package/dist/development/src/model/builder/ColumnBuilder.js.map +1 -0
- package/dist/development/src/model/builder/EntityBuilder.cjs +69 -0
- package/dist/development/src/model/builder/EntityBuilder.cjs.map +1 -0
- package/dist/development/src/model/builder/EntityBuilder.js +70 -0
- package/dist/development/src/model/builder/EntityBuilder.js.map +1 -0
- package/dist/development/src/model/builder/FieldBuilder.cjs +14 -0
- package/dist/development/src/model/builder/FieldBuilder.cjs.map +1 -0
- package/dist/development/src/model/builder/FieldBuilder.js +15 -0
- package/dist/development/src/model/builder/FieldBuilder.js.map +1 -0
- package/dist/development/src/model/builder/ManyHasManyBuilder.cjs +35 -0
- package/dist/development/src/model/builder/ManyHasManyBuilder.cjs.map +1 -0
- package/dist/development/src/model/builder/ManyHasManyBuilder.js +36 -0
- package/dist/development/src/model/builder/ManyHasManyBuilder.js.map +1 -0
- package/dist/development/src/model/builder/ManyHasOneBuilder.cjs +36 -0
- package/dist/development/src/model/builder/ManyHasOneBuilder.cjs.map +1 -0
- package/dist/development/src/model/builder/ManyHasOneBuilder.js +37 -0
- package/dist/development/src/model/builder/ManyHasOneBuilder.js.map +1 -0
- package/dist/development/src/model/builder/OneHasManyBuilder.cjs +44 -0
- package/dist/development/src/model/builder/OneHasManyBuilder.cjs.map +1 -0
- package/dist/development/src/model/builder/OneHasManyBuilder.js +45 -0
- package/dist/development/src/model/builder/OneHasManyBuilder.js.map +1 -0
- package/dist/development/src/model/builder/OneHasOneBuilder.cjs +46 -0
- package/dist/development/src/model/builder/OneHasOneBuilder.cjs.map +1 -0
- package/dist/development/src/model/builder/OneHasOneBuilder.js +47 -0
- package/dist/development/src/model/builder/OneHasOneBuilder.js.map +1 -0
- package/dist/development/src/model/builder/SchemaBuilder.cjs +40 -0
- package/dist/development/src/model/builder/SchemaBuilder.cjs.map +1 -0
- package/dist/development/src/model/builder/SchemaBuilder.js +40 -0
- package/dist/development/src/model/builder/SchemaBuilder.js.map +1 -0
- package/dist/development/src/model/builder/SchemaBuilderError.cjs +6 -0
- package/dist/development/src/model/builder/SchemaBuilderError.cjs.map +1 -0
- package/dist/development/src/model/builder/SchemaBuilderError.js +6 -0
- package/dist/development/src/model/builder/SchemaBuilderError.js.map +1 -0
- package/dist/development/src/model/builder/SchemaBuilderInternal.cjs +153 -0
- package/dist/development/src/model/builder/SchemaBuilderInternal.cjs.map +1 -0
- package/dist/development/src/model/builder/SchemaBuilderInternal.js +154 -0
- package/dist/development/src/model/builder/SchemaBuilderInternal.js.map +1 -0
- package/dist/development/src/model/builder/internal/ColumnProcessor.cjs +34 -0
- package/dist/development/src/model/builder/internal/ColumnProcessor.cjs.map +1 -0
- package/dist/development/src/model/builder/internal/ColumnProcessor.js +35 -0
- package/dist/development/src/model/builder/internal/ColumnProcessor.js.map +1 -0
- package/dist/development/src/model/builder/internal/ManyHasManyProcessor.cjs +54 -0
- package/dist/development/src/model/builder/internal/ManyHasManyProcessor.cjs.map +1 -0
- package/dist/development/src/model/builder/internal/ManyHasManyProcessor.js +55 -0
- package/dist/development/src/model/builder/internal/ManyHasManyProcessor.js.map +1 -0
- package/dist/development/src/model/builder/internal/ManyHasOneProcessor.cjs +46 -0
- package/dist/development/src/model/builder/internal/ManyHasOneProcessor.cjs.map +1 -0
- package/dist/development/src/model/builder/internal/ManyHasOneProcessor.js +47 -0
- package/dist/development/src/model/builder/internal/ManyHasOneProcessor.js.map +1 -0
- package/dist/development/src/model/builder/internal/OneHasManyProcessor.cjs +44 -0
- package/dist/development/src/model/builder/internal/OneHasManyProcessor.cjs.map +1 -0
- package/dist/development/src/model/builder/internal/OneHasManyProcessor.js +45 -0
- package/dist/development/src/model/builder/internal/OneHasManyProcessor.js.map +1 -0
- package/dist/development/src/model/builder/internal/OneHasOneProcessor.cjs +50 -0
- package/dist/development/src/model/builder/internal/OneHasOneProcessor.cjs.map +1 -0
- package/dist/development/src/model/builder/internal/OneHasOneProcessor.js +51 -0
- package/dist/development/src/model/builder/internal/OneHasOneProcessor.js.map +1 -0
- package/dist/development/src/model/definition/EnumDefinition.cjs +13 -0
- package/dist/development/src/model/definition/EnumDefinition.cjs.map +1 -0
- package/dist/development/src/model/definition/EnumDefinition.js +13 -0
- package/dist/development/src/model/definition/EnumDefinition.js.map +1 -0
- package/dist/development/src/model/definition/EventLogDefinition.cjs +9 -0
- package/dist/development/src/model/definition/EventLogDefinition.cjs.map +1 -0
- package/dist/development/src/model/definition/EventLogDefinition.js +9 -0
- package/dist/development/src/model/definition/EventLogDefinition.js.map +1 -0
- package/dist/development/src/model/definition/IndexDefinition.cjs +17 -0
- package/dist/development/src/model/definition/IndexDefinition.cjs.map +1 -0
- package/dist/development/src/model/definition/IndexDefinition.js +17 -0
- package/dist/development/src/model/definition/IndexDefinition.js.map +1 -0
- package/dist/development/src/model/definition/OrderByDefinition.cjs +30 -0
- package/dist/development/src/model/definition/OrderByDefinition.cjs.map +1 -0
- package/dist/development/src/model/definition/OrderByDefinition.js +30 -0
- package/dist/development/src/model/definition/OrderByDefinition.js.map +1 -0
- package/dist/development/src/model/definition/UniqueDefinition.cjs +17 -0
- package/dist/development/src/model/definition/UniqueDefinition.cjs.map +1 -0
- package/dist/development/src/model/definition/UniqueDefinition.js +17 -0
- package/dist/development/src/model/definition/UniqueDefinition.js.map +1 -0
- package/dist/development/src/model/definition/ViewDefinition.cjs +25 -0
- package/dist/development/src/model/definition/ViewDefinition.cjs.map +1 -0
- package/dist/development/src/model/definition/ViewDefinition.js +25 -0
- package/dist/development/src/model/definition/ViewDefinition.js.map +1 -0
- package/dist/development/src/model/definition/extensions.cjs +16 -0
- package/dist/development/src/model/definition/extensions.cjs.map +1 -0
- package/dist/development/src/model/definition/extensions.js +16 -0
- package/dist/development/src/model/definition/extensions.js.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.cjs +118 -0
- package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.cjs.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.js +118 -0
- package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.js.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/FieldDefinition.cjs +12 -0
- package/dist/development/src/model/definition/fieldDefinitions/FieldDefinition.cjs.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/FieldDefinition.js +12 -0
- package/dist/development/src/model/definition/fieldDefinitions/FieldDefinition.js.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyDefinition.cjs +54 -0
- package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyDefinition.cjs.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyDefinition.js +54 -0
- package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyDefinition.js.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.cjs +37 -0
- package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.cjs.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.js +37 -0
- package/dist/development/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.js.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/ManyHasOneDefinition.cjs +57 -0
- package/dist/development/src/model/definition/fieldDefinitions/ManyHasOneDefinition.cjs.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/ManyHasOneDefinition.js +57 -0
- package/dist/development/src/model/definition/fieldDefinitions/ManyHasOneDefinition.js.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/OneHasManyDefinition.cjs +33 -0
- package/dist/development/src/model/definition/fieldDefinitions/OneHasManyDefinition.cjs.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/OneHasManyDefinition.js +33 -0
- package/dist/development/src/model/definition/fieldDefinitions/OneHasManyDefinition.js.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/OneHasOneDefinition.cjs +61 -0
- package/dist/development/src/model/definition/fieldDefinitions/OneHasOneDefinition.cjs.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/OneHasOneDefinition.js +61 -0
- package/dist/development/src/model/definition/fieldDefinitions/OneHasOneDefinition.js.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.cjs +36 -0
- package/dist/development/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.cjs.map +1 -0
- package/dist/development/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.js +36 -0
- package/dist/development/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.js.map +1 -0
- package/dist/development/src/model/definition/index.cjs +80 -0
- package/dist/development/src/model/definition/index.cjs.map +1 -0
- package/dist/development/src/model/definition/index.js +81 -0
- package/dist/development/src/model/definition/index.js.map +1 -0
- package/dist/development/src/model/definition/internal/EntityRegistry.cjs +29 -0
- package/dist/development/src/model/definition/internal/EntityRegistry.cjs.map +1 -0
- package/dist/development/src/model/definition/internal/EntityRegistry.js +29 -0
- package/dist/development/src/model/definition/internal/EntityRegistry.js.map +1 -0
- package/dist/development/src/model/definition/internal/EnumRegistry.cjs +29 -0
- package/dist/development/src/model/definition/internal/EnumRegistry.cjs.map +1 -0
- package/dist/development/src/model/definition/internal/EnumRegistry.js +29 -0
- package/dist/development/src/model/definition/internal/EnumRegistry.js.map +1 -0
- package/dist/development/src/model/definition/internal/SchemaBuilder.cjs +92 -0
- package/dist/development/src/model/definition/internal/SchemaBuilder.cjs.map +1 -0
- package/dist/development/src/model/definition/internal/SchemaBuilder.js +92 -0
- package/dist/development/src/model/definition/internal/SchemaBuilder.js.map +1 -0
- package/dist/development/src/presets.cjs +25 -0
- package/dist/development/src/presets.cjs.map +1 -0
- package/dist/development/src/presets.js +25 -0
- package/dist/development/src/presets.js.map +1 -0
- package/dist/development/src/strict.cjs +31 -0
- package/dist/development/src/strict.cjs.map +1 -0
- package/dist/development/src/strict.js +31 -0
- package/dist/development/src/strict.js.map +1 -0
- package/dist/development/src/utils/MetadataStore.cjs +19 -0
- package/dist/development/src/utils/MetadataStore.cjs.map +1 -0
- package/dist/development/src/utils/MetadataStore.js +19 -0
- package/dist/development/src/utils/MetadataStore.js.map +1 -0
- package/dist/development/src/utils/assertNever.cjs +7 -0
- package/dist/development/src/utils/assertNever.cjs.map +1 -0
- package/dist/development/src/utils/assertNever.js +7 -0
- package/dist/development/src/utils/assertNever.js.map +1 -0
- package/dist/development/src/utils/filterEntityDefinition.cjs +9 -0
- package/dist/development/src/utils/filterEntityDefinition.cjs.map +1 -0
- package/dist/development/src/utils/filterEntityDefinition.js +9 -0
- package/dist/development/src/utils/filterEntityDefinition.js.map +1 -0
- package/dist/development/src/utils/tuple.cjs +5 -0
- package/dist/development/src/utils/tuple.cjs.map +1 -0
- package/dist/development/src/utils/tuple.js +5 -0
- package/dist/development/src/utils/tuple.js.map +1 -0
- package/dist/development/src/validation/index.cjs +199 -0
- package/dist/development/src/validation/index.cjs.map +1 -0
- package/dist/development/src/validation/index.js +199 -0
- package/dist/development/src/validation/index.js.map +1 -0
- package/dist/production/index.cjs +122 -0
- package/dist/production/index.cjs.map +1 -0
- package/dist/production/index.js +117 -0
- package/dist/production/index.js.map +1 -0
- package/dist/production/src/acl/builder/EntityPermissionsBuilder.cjs +119 -0
- package/dist/production/src/acl/builder/EntityPermissionsBuilder.cjs.map +1 -0
- package/dist/production/src/acl/builder/EntityPermissionsBuilder.js +120 -0
- package/dist/production/src/acl/builder/EntityPermissionsBuilder.js.map +1 -0
- package/dist/production/src/acl/builder/EntitySelector.cjs +32 -0
- package/dist/production/src/acl/builder/EntitySelector.cjs.map +1 -0
- package/dist/production/src/acl/builder/EntitySelector.js +33 -0
- package/dist/production/src/acl/builder/EntitySelector.js.map +1 -0
- package/dist/production/src/acl/builder/FieldPermissionsBuilder.cjs +59 -0
- package/dist/production/src/acl/builder/FieldPermissionsBuilder.cjs.map +1 -0
- package/dist/production/src/acl/builder/FieldPermissionsBuilder.js +60 -0
- package/dist/production/src/acl/builder/FieldPermissionsBuilder.js.map +1 -0
- package/dist/production/src/acl/builder/FieldSelector.cjs +26 -0
- package/dist/production/src/acl/builder/FieldSelector.cjs.map +1 -0
- package/dist/production/src/acl/builder/FieldSelector.js +27 -0
- package/dist/production/src/acl/builder/FieldSelector.js.map +1 -0
- package/dist/production/src/acl/builder/PermissionOverrider.cjs +31 -0
- package/dist/production/src/acl/builder/PermissionOverrider.cjs.map +1 -0
- package/dist/production/src/acl/builder/PermissionOverrider.js +32 -0
- package/dist/production/src/acl/builder/PermissionOverrider.js.map +1 -0
- package/dist/production/src/acl/builder/PermissionsBuilder.cjs +58 -0
- package/dist/production/src/acl/builder/PermissionsBuilder.cjs.map +1 -0
- package/dist/production/src/acl/builder/PermissionsBuilder.js +58 -0
- package/dist/production/src/acl/builder/PermissionsBuilder.js.map +1 -0
- package/dist/production/src/acl/builder/PredicateReference.cjs +43 -0
- package/dist/production/src/acl/builder/PredicateReference.cjs.map +1 -0
- package/dist/production/src/acl/builder/PredicateReference.js +43 -0
- package/dist/production/src/acl/builder/PredicateReference.js.map +1 -0
- package/dist/production/src/acl/definition/customPrimary.cjs +14 -0
- package/dist/production/src/acl/definition/customPrimary.cjs.map +1 -0
- package/dist/production/src/acl/definition/customPrimary.js +14 -0
- package/dist/production/src/acl/definition/customPrimary.js.map +1 -0
- package/dist/production/src/acl/definition/index.cjs +27 -0
- package/dist/production/src/acl/definition/index.cjs.map +1 -0
- package/dist/production/src/acl/definition/index.js +27 -0
- package/dist/production/src/acl/definition/index.js.map +1 -0
- package/dist/production/src/acl/definition/internal/AclFactory.cjs +103 -0
- package/dist/production/src/acl/definition/internal/AclFactory.cjs.map +1 -0
- package/dist/production/src/acl/definition/internal/AclFactory.js +103 -0
- package/dist/production/src/acl/definition/internal/AclFactory.js.map +1 -0
- package/dist/production/src/acl/definition/internal/EntityPredicateResolver.cjs +151 -0
- package/dist/production/src/acl/definition/internal/EntityPredicateResolver.cjs.map +1 -0
- package/dist/production/src/acl/definition/internal/EntityPredicateResolver.js +151 -0
- package/dist/production/src/acl/definition/internal/EntityPredicateResolver.js.map +1 -0
- package/dist/production/src/acl/definition/internal/createPredicateName.cjs +8 -0
- package/dist/production/src/acl/definition/internal/createPredicateName.cjs.map +1 -0
- package/dist/production/src/acl/definition/internal/createPredicateName.js +8 -0
- package/dist/production/src/acl/definition/internal/createPredicateName.js.map +1 -0
- package/dist/production/src/acl/definition/internal/stores.cjs +10 -0
- package/dist/production/src/acl/definition/internal/stores.cjs.map +1 -0
- package/dist/production/src/acl/definition/internal/stores.js +10 -0
- package/dist/production/src/acl/definition/internal/stores.js.map +1 -0
- package/dist/production/src/acl/definition/permissions.cjs +12 -0
- package/dist/production/src/acl/definition/permissions.cjs.map +1 -0
- package/dist/production/src/acl/definition/permissions.js +12 -0
- package/dist/production/src/acl/definition/permissions.js.map +1 -0
- package/dist/production/src/acl/definition/references.cjs +26 -0
- package/dist/production/src/acl/definition/references.cjs.map +1 -0
- package/dist/production/src/acl/definition/references.js +26 -0
- package/dist/production/src/acl/definition/references.js.map +1 -0
- package/dist/production/src/acl/definition/roles.cjs +14 -0
- package/dist/production/src/acl/definition/roles.cjs.map +1 -0
- package/dist/production/src/acl/definition/roles.js +14 -0
- package/dist/production/src/acl/definition/roles.js.map +1 -0
- package/dist/production/src/acl/definition/variables.cjs +36 -0
- package/dist/production/src/acl/definition/variables.cjs.map +1 -0
- package/dist/production/src/acl/definition/variables.js +36 -0
- package/dist/production/src/acl/definition/variables.js.map +1 -0
- package/dist/production/src/actions/definition/index.cjs +15 -0
- package/dist/production/src/actions/definition/index.cjs.map +1 -0
- package/dist/production/src/actions/definition/index.js +15 -0
- package/dist/production/src/actions/definition/index.js.map +1 -0
- package/dist/production/src/actions/definition/internal/ActionsFactory.cjs +179 -0
- package/dist/production/src/actions/definition/internal/ActionsFactory.cjs.map +1 -0
- package/dist/production/src/actions/definition/internal/ActionsFactory.js +179 -0
- package/dist/production/src/actions/definition/internal/ActionsFactory.js.map +1 -0
- package/dist/production/src/actions/definition/internal/store.cjs +6 -0
- package/dist/production/src/actions/definition/internal/store.cjs.map +1 -0
- package/dist/production/src/actions/definition/internal/store.js +6 -0
- package/dist/production/src/actions/definition/internal/store.js.map +1 -0
- package/dist/production/src/actions/definition/targets.cjs +15 -0
- package/dist/production/src/actions/definition/targets.cjs.map +1 -0
- package/dist/production/src/actions/definition/targets.js +15 -0
- package/dist/production/src/actions/definition/targets.js.map +1 -0
- package/dist/production/src/actions/definition/triggers.cjs +12 -0
- package/dist/production/src/actions/definition/triggers.cjs.map +1 -0
- package/dist/production/src/actions/definition/triggers.js +12 -0
- package/dist/production/src/actions/definition/triggers.js.map +1 -0
- package/dist/production/src/createSchema.cjs +26 -0
- package/dist/production/src/createSchema.cjs.map +1 -0
- package/dist/production/src/createSchema.js +26 -0
- package/dist/production/src/createSchema.js.map +1 -0
- package/dist/production/src/model/builder/ColumnBuilder.cjs +36 -0
- package/dist/production/src/model/builder/ColumnBuilder.cjs.map +1 -0
- package/dist/production/src/model/builder/ColumnBuilder.js +37 -0
- package/dist/production/src/model/builder/ColumnBuilder.js.map +1 -0
- package/dist/production/src/model/builder/EntityBuilder.cjs +69 -0
- package/dist/production/src/model/builder/EntityBuilder.cjs.map +1 -0
- package/dist/production/src/model/builder/EntityBuilder.js +70 -0
- package/dist/production/src/model/builder/EntityBuilder.js.map +1 -0
- package/dist/production/src/model/builder/FieldBuilder.cjs +14 -0
- package/dist/production/src/model/builder/FieldBuilder.cjs.map +1 -0
- package/dist/production/src/model/builder/FieldBuilder.js +15 -0
- package/dist/production/src/model/builder/FieldBuilder.js.map +1 -0
- package/dist/production/src/model/builder/ManyHasManyBuilder.cjs +35 -0
- package/dist/production/src/model/builder/ManyHasManyBuilder.cjs.map +1 -0
- package/dist/production/src/model/builder/ManyHasManyBuilder.js +36 -0
- package/dist/production/src/model/builder/ManyHasManyBuilder.js.map +1 -0
- package/dist/production/src/model/builder/ManyHasOneBuilder.cjs +36 -0
- package/dist/production/src/model/builder/ManyHasOneBuilder.cjs.map +1 -0
- package/dist/production/src/model/builder/ManyHasOneBuilder.js +37 -0
- package/dist/production/src/model/builder/ManyHasOneBuilder.js.map +1 -0
- package/dist/production/src/model/builder/OneHasManyBuilder.cjs +44 -0
- package/dist/production/src/model/builder/OneHasManyBuilder.cjs.map +1 -0
- package/dist/production/src/model/builder/OneHasManyBuilder.js +45 -0
- package/dist/production/src/model/builder/OneHasManyBuilder.js.map +1 -0
- package/dist/production/src/model/builder/OneHasOneBuilder.cjs +46 -0
- package/dist/production/src/model/builder/OneHasOneBuilder.cjs.map +1 -0
- package/dist/production/src/model/builder/OneHasOneBuilder.js +47 -0
- package/dist/production/src/model/builder/OneHasOneBuilder.js.map +1 -0
- package/dist/production/src/model/builder/SchemaBuilder.cjs +40 -0
- package/dist/production/src/model/builder/SchemaBuilder.cjs.map +1 -0
- package/dist/production/src/model/builder/SchemaBuilder.js +40 -0
- package/dist/production/src/model/builder/SchemaBuilder.js.map +1 -0
- package/dist/production/src/model/builder/SchemaBuilderError.cjs +6 -0
- package/dist/production/src/model/builder/SchemaBuilderError.cjs.map +1 -0
- package/dist/production/src/model/builder/SchemaBuilderError.js +6 -0
- package/dist/production/src/model/builder/SchemaBuilderError.js.map +1 -0
- package/dist/production/src/model/builder/SchemaBuilderInternal.cjs +153 -0
- package/dist/production/src/model/builder/SchemaBuilderInternal.cjs.map +1 -0
- package/dist/production/src/model/builder/SchemaBuilderInternal.js +154 -0
- package/dist/production/src/model/builder/SchemaBuilderInternal.js.map +1 -0
- package/dist/production/src/model/builder/internal/ColumnProcessor.cjs +34 -0
- package/dist/production/src/model/builder/internal/ColumnProcessor.cjs.map +1 -0
- package/dist/production/src/model/builder/internal/ColumnProcessor.js +35 -0
- package/dist/production/src/model/builder/internal/ColumnProcessor.js.map +1 -0
- package/dist/production/src/model/builder/internal/ManyHasManyProcessor.cjs +54 -0
- package/dist/production/src/model/builder/internal/ManyHasManyProcessor.cjs.map +1 -0
- package/dist/production/src/model/builder/internal/ManyHasManyProcessor.js +55 -0
- package/dist/production/src/model/builder/internal/ManyHasManyProcessor.js.map +1 -0
- package/dist/production/src/model/builder/internal/ManyHasOneProcessor.cjs +46 -0
- package/dist/production/src/model/builder/internal/ManyHasOneProcessor.cjs.map +1 -0
- package/dist/production/src/model/builder/internal/ManyHasOneProcessor.js +47 -0
- package/dist/production/src/model/builder/internal/ManyHasOneProcessor.js.map +1 -0
- package/dist/production/src/model/builder/internal/OneHasManyProcessor.cjs +44 -0
- package/dist/production/src/model/builder/internal/OneHasManyProcessor.cjs.map +1 -0
- package/dist/production/src/model/builder/internal/OneHasManyProcessor.js +45 -0
- package/dist/production/src/model/builder/internal/OneHasManyProcessor.js.map +1 -0
- package/dist/production/src/model/builder/internal/OneHasOneProcessor.cjs +50 -0
- package/dist/production/src/model/builder/internal/OneHasOneProcessor.cjs.map +1 -0
- package/dist/production/src/model/builder/internal/OneHasOneProcessor.js +51 -0
- package/dist/production/src/model/builder/internal/OneHasOneProcessor.js.map +1 -0
- package/dist/production/src/model/definition/EnumDefinition.cjs +13 -0
- package/dist/production/src/model/definition/EnumDefinition.cjs.map +1 -0
- package/dist/production/src/model/definition/EnumDefinition.js +13 -0
- package/dist/production/src/model/definition/EnumDefinition.js.map +1 -0
- package/dist/production/src/model/definition/EventLogDefinition.cjs +9 -0
- package/dist/production/src/model/definition/EventLogDefinition.cjs.map +1 -0
- package/dist/production/src/model/definition/EventLogDefinition.js +9 -0
- package/dist/production/src/model/definition/EventLogDefinition.js.map +1 -0
- package/dist/production/src/model/definition/IndexDefinition.cjs +17 -0
- package/dist/production/src/model/definition/IndexDefinition.cjs.map +1 -0
- package/dist/production/src/model/definition/IndexDefinition.js +17 -0
- package/dist/production/src/model/definition/IndexDefinition.js.map +1 -0
- package/dist/production/src/model/definition/OrderByDefinition.cjs +30 -0
- package/dist/production/src/model/definition/OrderByDefinition.cjs.map +1 -0
- package/dist/production/src/model/definition/OrderByDefinition.js +30 -0
- package/dist/production/src/model/definition/OrderByDefinition.js.map +1 -0
- package/dist/production/src/model/definition/UniqueDefinition.cjs +17 -0
- package/dist/production/src/model/definition/UniqueDefinition.cjs.map +1 -0
- package/dist/production/src/model/definition/UniqueDefinition.js +17 -0
- package/dist/production/src/model/definition/UniqueDefinition.js.map +1 -0
- package/dist/production/src/model/definition/ViewDefinition.cjs +25 -0
- package/dist/production/src/model/definition/ViewDefinition.cjs.map +1 -0
- package/dist/production/src/model/definition/ViewDefinition.js +25 -0
- package/dist/production/src/model/definition/ViewDefinition.js.map +1 -0
- package/dist/production/src/model/definition/extensions.cjs +16 -0
- package/dist/production/src/model/definition/extensions.cjs.map +1 -0
- package/dist/production/src/model/definition/extensions.js +16 -0
- package/dist/production/src/model/definition/extensions.js.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.cjs +118 -0
- package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.cjs.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.js +118 -0
- package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.js.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/FieldDefinition.cjs +12 -0
- package/dist/production/src/model/definition/fieldDefinitions/FieldDefinition.cjs.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/FieldDefinition.js +12 -0
- package/dist/production/src/model/definition/fieldDefinitions/FieldDefinition.js.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyDefinition.cjs +54 -0
- package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyDefinition.cjs.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyDefinition.js +54 -0
- package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyDefinition.js.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.cjs +37 -0
- package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.cjs.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.js +37 -0
- package/dist/production/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.js.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/ManyHasOneDefinition.cjs +57 -0
- package/dist/production/src/model/definition/fieldDefinitions/ManyHasOneDefinition.cjs.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/ManyHasOneDefinition.js +57 -0
- package/dist/production/src/model/definition/fieldDefinitions/ManyHasOneDefinition.js.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/OneHasManyDefinition.cjs +33 -0
- package/dist/production/src/model/definition/fieldDefinitions/OneHasManyDefinition.cjs.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/OneHasManyDefinition.js +33 -0
- package/dist/production/src/model/definition/fieldDefinitions/OneHasManyDefinition.js.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/OneHasOneDefinition.cjs +61 -0
- package/dist/production/src/model/definition/fieldDefinitions/OneHasOneDefinition.cjs.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/OneHasOneDefinition.js +61 -0
- package/dist/production/src/model/definition/fieldDefinitions/OneHasOneDefinition.js.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.cjs +36 -0
- package/dist/production/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.cjs.map +1 -0
- package/dist/production/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.js +36 -0
- package/dist/production/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.js.map +1 -0
- package/dist/production/src/model/definition/index.cjs +80 -0
- package/dist/production/src/model/definition/index.cjs.map +1 -0
- package/dist/production/src/model/definition/index.js +81 -0
- package/dist/production/src/model/definition/index.js.map +1 -0
- package/dist/production/src/model/definition/internal/EntityRegistry.cjs +29 -0
- package/dist/production/src/model/definition/internal/EntityRegistry.cjs.map +1 -0
- package/dist/production/src/model/definition/internal/EntityRegistry.js +29 -0
- package/dist/production/src/model/definition/internal/EntityRegistry.js.map +1 -0
- package/dist/production/src/model/definition/internal/EnumRegistry.cjs +29 -0
- package/dist/production/src/model/definition/internal/EnumRegistry.cjs.map +1 -0
- package/dist/production/src/model/definition/internal/EnumRegistry.js +29 -0
- package/dist/production/src/model/definition/internal/EnumRegistry.js.map +1 -0
- package/dist/production/src/model/definition/internal/SchemaBuilder.cjs +92 -0
- package/dist/production/src/model/definition/internal/SchemaBuilder.cjs.map +1 -0
- package/dist/production/src/model/definition/internal/SchemaBuilder.js +92 -0
- package/dist/production/src/model/definition/internal/SchemaBuilder.js.map +1 -0
- package/dist/production/src/presets.cjs +25 -0
- package/dist/production/src/presets.cjs.map +1 -0
- package/dist/production/src/presets.js +25 -0
- package/dist/production/src/presets.js.map +1 -0
- package/dist/production/src/strict.cjs +31 -0
- package/dist/production/src/strict.cjs.map +1 -0
- package/dist/production/src/strict.js +31 -0
- package/dist/production/src/strict.js.map +1 -0
- package/dist/production/src/utils/MetadataStore.cjs +19 -0
- package/dist/production/src/utils/MetadataStore.cjs.map +1 -0
- package/dist/production/src/utils/MetadataStore.js +19 -0
- package/dist/production/src/utils/MetadataStore.js.map +1 -0
- package/dist/production/src/utils/assertNever.cjs +7 -0
- package/dist/production/src/utils/assertNever.cjs.map +1 -0
- package/dist/production/src/utils/assertNever.js +7 -0
- package/dist/production/src/utils/assertNever.js.map +1 -0
- package/dist/production/src/utils/filterEntityDefinition.cjs +9 -0
- package/dist/production/src/utils/filterEntityDefinition.cjs.map +1 -0
- package/dist/production/src/utils/filterEntityDefinition.js +9 -0
- package/dist/production/src/utils/filterEntityDefinition.js.map +1 -0
- package/dist/production/src/utils/tuple.cjs +5 -0
- package/dist/production/src/utils/tuple.cjs.map +1 -0
- package/dist/production/src/utils/tuple.js +5 -0
- package/dist/production/src/utils/tuple.js.map +1 -0
- package/dist/production/src/validation/index.cjs +199 -0
- package/dist/production/src/validation/index.cjs.map +1 -0
- package/dist/production/src/validation/index.js +199 -0
- package/dist/production/src/validation/index.js.map +1 -0
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/dist/types/acl/builder/PermissionsBuilder.d.ts.map +1 -0
- package/dist/types/acl/builder/PredicateReference.d.ts.map +1 -0
- package/dist/types/acl/definition/customPrimary.d.ts.map +1 -0
- package/dist/types/acl/definition/index.d.ts.map +1 -0
- package/dist/types/acl/definition/permissions.d.ts.map +1 -0
- package/dist/types/acl/definition/references.d.ts.map +1 -0
- package/dist/types/acl/definition/roles.d.ts.map +1 -0
- package/dist/types/acl/definition/variables.d.ts.map +1 -0
- package/dist/types/actions/definition/index.d.ts.map +1 -0
- package/dist/types/actions/definition/targets.d.ts +10 -0
- package/dist/types/actions/definition/targets.d.ts.map +1 -0
- package/dist/types/actions/definition/triggers.d.ts.map +1 -0
- package/dist/types/createSchema.d.ts +6 -0
- package/dist/types/createSchema.d.ts.map +1 -0
- package/dist/types/index.d.ts +85 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/model/definition/ViewDefinition.d.ts +5 -0
- package/dist/types/model/definition/ViewDefinition.d.ts.map +1 -0
- package/dist/types/model/definition/extensions.d.ts.map +1 -0
- package/dist/types/model/definition/index.d.ts +27 -0
- package/dist/types/model/definition/index.d.ts.map +1 -0
- package/dist/types/model/definition/types.d.ts +9 -0
- package/dist/types/model/definition/types.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -0
- package/dist/types/utils/MetadataStore.d.ts.map +1 -0
- package/dist/types/utils/filterEntityDefinition.d.ts.map +1 -0
- package/dist/types/utils/tuple.d.ts.map +1 -0
- package/dist/types/validation/index.d.ts.map +1 -0
- package/package.json +23 -11
- package/src/model/definition/index.ts +1 -1
- package/src/model/definition/types.ts +1 -1
- package/src/tsconfig.json +1 -1
- package/vitest.config.ts +3 -0
- package/dist/src/acl/builder/EntityPermissionsBuilder.js +0 -102
- package/dist/src/acl/builder/EntityPermissionsBuilder.js.map +0 -1
- package/dist/src/acl/builder/EntitySelector.js +0 -32
- package/dist/src/acl/builder/EntitySelector.js.map +0 -1
- package/dist/src/acl/builder/FieldPermissionsBuilder.js +0 -60
- package/dist/src/acl/builder/FieldPermissionsBuilder.js.map +0 -1
- package/dist/src/acl/builder/FieldSelector.js +0 -27
- package/dist/src/acl/builder/FieldSelector.js.map +0 -1
- package/dist/src/acl/builder/PermissionOverrider.js +0 -38
- package/dist/src/acl/builder/PermissionOverrider.js.map +0 -1
- package/dist/src/acl/builder/PermissionsBuilder.d.ts.map +0 -1
- package/dist/src/acl/builder/PermissionsBuilder.js +0 -58
- package/dist/src/acl/builder/PermissionsBuilder.js.map +0 -1
- package/dist/src/acl/builder/PredicateReference.d.ts.map +0 -1
- package/dist/src/acl/builder/PredicateReference.js +0 -36
- package/dist/src/acl/builder/PredicateReference.js.map +0 -1
- package/dist/src/acl/definition/customPrimary.d.ts.map +0 -1
- package/dist/src/acl/definition/customPrimary.js +0 -16
- package/dist/src/acl/definition/customPrimary.js.map +0 -1
- package/dist/src/acl/definition/index.d.ts.map +0 -1
- package/dist/src/acl/definition/index.js +0 -29
- package/dist/src/acl/definition/index.js.map +0 -1
- package/dist/src/acl/definition/internal/AclFactory.js +0 -106
- package/dist/src/acl/definition/internal/AclFactory.js.map +0 -1
- package/dist/src/acl/definition/internal/EntityPredicateResolver.js +0 -153
- package/dist/src/acl/definition/internal/EntityPredicateResolver.js.map +0 -1
- package/dist/src/acl/definition/internal/createPredicateName.js +0 -9
- package/dist/src/acl/definition/internal/createPredicateName.js.map +0 -1
- package/dist/src/acl/definition/internal/stores.js +0 -8
- package/dist/src/acl/definition/internal/stores.js.map +0 -1
- package/dist/src/acl/definition/permissions.d.ts.map +0 -1
- package/dist/src/acl/definition/permissions.js +0 -13
- package/dist/src/acl/definition/permissions.js.map +0 -1
- package/dist/src/acl/definition/references.d.ts.map +0 -1
- package/dist/src/acl/definition/references.js +0 -27
- package/dist/src/acl/definition/references.js.map +0 -1
- package/dist/src/acl/definition/roles.d.ts.map +0 -1
- package/dist/src/acl/definition/roles.js +0 -15
- package/dist/src/acl/definition/roles.js.map +0 -1
- package/dist/src/acl/definition/variables.d.ts.map +0 -1
- package/dist/src/acl/definition/variables.js +0 -25
- package/dist/src/acl/definition/variables.js.map +0 -1
- package/dist/src/actions/definition/index.d.ts.map +0 -1
- package/dist/src/actions/definition/index.js +0 -26
- package/dist/src/actions/definition/index.js.map +0 -1
- package/dist/src/actions/definition/internal/ActionsFactory.js +0 -183
- package/dist/src/actions/definition/internal/ActionsFactory.js.map +0 -1
- package/dist/src/actions/definition/internal/store.js +0 -6
- package/dist/src/actions/definition/internal/store.js.map +0 -1
- package/dist/src/actions/definition/targets.d.ts +0 -10
- package/dist/src/actions/definition/targets.d.ts.map +0 -1
- package/dist/src/actions/definition/targets.js +0 -13
- package/dist/src/actions/definition/targets.js.map +0 -1
- package/dist/src/actions/definition/triggers.d.ts.map +0 -1
- package/dist/src/actions/definition/triggers.js +0 -13
- package/dist/src/actions/definition/triggers.js.map +0 -1
- package/dist/src/createSchema.d.ts +0 -6
- package/dist/src/createSchema.d.ts.map +0 -1
- package/dist/src/createSchema.js +0 -24
- package/dist/src/createSchema.js.map +0 -1
- package/dist/src/index.d.ts +0 -85
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/index.js +0 -95
- package/dist/src/index.js.map +0 -1
- package/dist/src/model/builder/ColumnBuilder.js +0 -37
- package/dist/src/model/builder/ColumnBuilder.js.map +0 -1
- package/dist/src/model/builder/EntityBuilder.js +0 -61
- package/dist/src/model/builder/EntityBuilder.js.map +0 -1
- package/dist/src/model/builder/FieldBuilder.js +0 -15
- package/dist/src/model/builder/FieldBuilder.js.map +0 -1
- package/dist/src/model/builder/ManyHasManyBuilder.js +0 -33
- package/dist/src/model/builder/ManyHasManyBuilder.js.map +0 -1
- package/dist/src/model/builder/ManyHasOneBuilder.js +0 -34
- package/dist/src/model/builder/ManyHasOneBuilder.js.map +0 -1
- package/dist/src/model/builder/OneHasManyBuilder.js +0 -42
- package/dist/src/model/builder/OneHasManyBuilder.js.map +0 -1
- package/dist/src/model/builder/OneHasOneBuilder.js +0 -44
- package/dist/src/model/builder/OneHasOneBuilder.js.map +0 -1
- package/dist/src/model/builder/SchemaBuilder.js +0 -52
- package/dist/src/model/builder/SchemaBuilder.js.map +0 -1
- package/dist/src/model/builder/SchemaBuilderError.js +0 -7
- package/dist/src/model/builder/SchemaBuilderError.js.map +0 -1
- package/dist/src/model/builder/SchemaBuilderInternal.js +0 -146
- package/dist/src/model/builder/SchemaBuilderInternal.js.map +0 -1
- package/dist/src/model/builder/internal/ColumnProcessor.js +0 -32
- package/dist/src/model/builder/internal/ColumnProcessor.js.map +0 -1
- package/dist/src/model/builder/internal/FieldProcessor.js +0 -3
- package/dist/src/model/builder/internal/FieldProcessor.js.map +0 -1
- package/dist/src/model/builder/internal/ManyHasManyProcessor.js +0 -46
- package/dist/src/model/builder/internal/ManyHasManyProcessor.js.map +0 -1
- package/dist/src/model/builder/internal/ManyHasOneProcessor.js +0 -39
- package/dist/src/model/builder/internal/ManyHasOneProcessor.js.map +0 -1
- package/dist/src/model/builder/internal/OneHasManyProcessor.js +0 -41
- package/dist/src/model/builder/internal/OneHasManyProcessor.js.map +0 -1
- package/dist/src/model/builder/internal/OneHasOneProcessor.js +0 -40
- package/dist/src/model/builder/internal/OneHasOneProcessor.js.map +0 -1
- package/dist/src/model/builder/types.js +0 -3
- package/dist/src/model/builder/types.js.map +0 -1
- package/dist/src/model/definition/EnumDefinition.js +0 -14
- package/dist/src/model/definition/EnumDefinition.js.map +0 -1
- package/dist/src/model/definition/EventLogDefinition.js +0 -10
- package/dist/src/model/definition/EventLogDefinition.js.map +0 -1
- package/dist/src/model/definition/IndexDefinition.js +0 -18
- package/dist/src/model/definition/IndexDefinition.js.map +0 -1
- package/dist/src/model/definition/OrderByDefinition.js +0 -33
- package/dist/src/model/definition/OrderByDefinition.js.map +0 -1
- package/dist/src/model/definition/UniqueDefinition.js +0 -20
- package/dist/src/model/definition/UniqueDefinition.js.map +0 -1
- package/dist/src/model/definition/ViewDefinition.d.ts +0 -5
- package/dist/src/model/definition/ViewDefinition.d.ts.map +0 -1
- package/dist/src/model/definition/ViewDefinition.js +0 -26
- package/dist/src/model/definition/ViewDefinition.js.map +0 -1
- package/dist/src/model/definition/context.js +0 -3
- package/dist/src/model/definition/context.js.map +0 -1
- package/dist/src/model/definition/extensions.d.ts.map +0 -1
- package/dist/src/model/definition/extensions.js +0 -14
- package/dist/src/model/definition/extensions.js.map +0 -1
- package/dist/src/model/definition/fieldDefinitions/ColumnDefinition.js +0 -117
- package/dist/src/model/definition/fieldDefinitions/ColumnDefinition.js.map +0 -1
- package/dist/src/model/definition/fieldDefinitions/FieldDefinition.js +0 -13
- package/dist/src/model/definition/fieldDefinitions/FieldDefinition.js.map +0 -1
- package/dist/src/model/definition/fieldDefinitions/ManyHasManyDefinition.js +0 -47
- package/dist/src/model/definition/fieldDefinitions/ManyHasManyDefinition.js.map +0 -1
- package/dist/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.js +0 -36
- package/dist/src/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.js.map +0 -1
- package/dist/src/model/definition/fieldDefinitions/ManyHasOneDefinition.js +0 -55
- package/dist/src/model/definition/fieldDefinitions/ManyHasOneDefinition.js.map +0 -1
- package/dist/src/model/definition/fieldDefinitions/OneHasManyDefinition.js +0 -31
- package/dist/src/model/definition/fieldDefinitions/OneHasManyDefinition.js.map +0 -1
- package/dist/src/model/definition/fieldDefinitions/OneHasOneDefinition.js +0 -59
- package/dist/src/model/definition/fieldDefinitions/OneHasOneDefinition.js.map +0 -1
- package/dist/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.js +0 -35
- package/dist/src/model/definition/fieldDefinitions/OneHasOneInverseDefinition.js.map +0 -1
- package/dist/src/model/definition/fieldDefinitions/index.js +0 -25
- package/dist/src/model/definition/fieldDefinitions/index.js.map +0 -1
- package/dist/src/model/definition/index.d.ts +0 -27
- package/dist/src/model/definition/index.d.ts.map +0 -1
- package/dist/src/model/definition/index.js +0 -53
- package/dist/src/model/definition/index.js.map +0 -1
- package/dist/src/model/definition/internal/EntityRegistry.js +0 -27
- package/dist/src/model/definition/internal/EntityRegistry.js.map +0 -1
- package/dist/src/model/definition/internal/EnumRegistry.js +0 -27
- package/dist/src/model/definition/internal/EnumRegistry.js.map +0 -1
- package/dist/src/model/definition/internal/SchemaBuilder.js +0 -92
- package/dist/src/model/definition/internal/SchemaBuilder.js.map +0 -1
- package/dist/src/model/definition/internal/index.js +0 -20
- package/dist/src/model/definition/internal/index.js.map +0 -1
- package/dist/src/model/definition/types.d.ts +0 -9
- package/dist/src/model/definition/types.d.ts.map +0 -1
- package/dist/src/model/definition/types.js +0 -3
- package/dist/src/model/definition/types.js.map +0 -1
- package/dist/src/model/index.js +0 -20
- package/dist/src/model/index.js.map +0 -1
- package/dist/src/presets.js +0 -23
- package/dist/src/presets.js.map +0 -1
- package/dist/src/strict.js +0 -28
- package/dist/src/strict.js.map +0 -1
- package/dist/src/tsconfig.tsbuildinfo +0 -1
- package/dist/src/utils/MetadataStore.d.ts.map +0 -1
- package/dist/src/utils/MetadataStore.js +0 -22
- package/dist/src/utils/MetadataStore.js.map +0 -1
- package/dist/src/utils/assertNever.js +0 -8
- package/dist/src/utils/assertNever.js.map +0 -1
- package/dist/src/utils/decorators.js +0 -3
- package/dist/src/utils/decorators.js.map +0 -1
- package/dist/src/utils/filterEntityDefinition.d.ts.map +0 -1
- package/dist/src/utils/filterEntityDefinition.js +0 -11
- package/dist/src/utils/filterEntityDefinition.js.map +0 -1
- package/dist/src/utils/index.js +0 -22
- package/dist/src/utils/index.js.map +0 -1
- package/dist/src/utils/tuple.d.ts.map +0 -1
- package/dist/src/utils/tuple.js +0 -6
- package/dist/src/utils/tuple.js.map +0 -1
- package/dist/src/validation/index.d.ts.map +0 -1
- package/dist/src/validation/index.js +0 -190
- package/dist/src/validation/index.js.map +0 -1
- package/dist/tests/cases/unit/createSchema.test.js +0 -137
- package/dist/tests/cases/unit/createSchema.test.js.map +0 -1
- package/dist/tests/cases/unit/extendEntity.test.js +0 -40
- package/dist/tests/cases/unit/extendEntity.test.js.map +0 -1
- package/dist/tests/cases/unit/orderBy.test.js +0 -102
- package/dist/tests/cases/unit/orderBy.test.js.map +0 -1
- package/dist/tests/cases/unit/readAclDefinitions.test.js +0 -629
- package/dist/tests/cases/unit/readAclDefinitions.test.js.map +0 -1
- package/dist/tests/cases/unit/readActions.test.js +0 -109
- package/dist/tests/cases/unit/readActions.test.js.map +0 -1
- /package/dist/{src → types}/acl/builder/EntityPermissionsBuilder.d.ts +0 -0
- /package/dist/{src → types}/acl/builder/EntityPermissionsBuilder.d.ts.map +0 -0
- /package/dist/{src → types}/acl/builder/EntitySelector.d.ts +0 -0
- /package/dist/{src → types}/acl/builder/EntitySelector.d.ts.map +0 -0
- /package/dist/{src → types}/acl/builder/FieldPermissionsBuilder.d.ts +0 -0
- /package/dist/{src → types}/acl/builder/FieldPermissionsBuilder.d.ts.map +0 -0
- /package/dist/{src → types}/acl/builder/FieldSelector.d.ts +0 -0
- /package/dist/{src → types}/acl/builder/FieldSelector.d.ts.map +0 -0
- /package/dist/{src → types}/acl/builder/PermissionOverrider.d.ts +0 -0
- /package/dist/{src → types}/acl/builder/PermissionOverrider.d.ts.map +0 -0
- /package/dist/{src → types}/acl/builder/PermissionsBuilder.d.ts +0 -0
- /package/dist/{src → types}/acl/builder/PredicateReference.d.ts +0 -0
- /package/dist/{src → types}/acl/definition/customPrimary.d.ts +0 -0
- /package/dist/{src → types}/acl/definition/index.d.ts +0 -0
- /package/dist/{src → types}/acl/definition/internal/AclFactory.d.ts +0 -0
- /package/dist/{src → types}/acl/definition/internal/AclFactory.d.ts.map +0 -0
- /package/dist/{src → types}/acl/definition/internal/EntityPredicateResolver.d.ts +0 -0
- /package/dist/{src → types}/acl/definition/internal/EntityPredicateResolver.d.ts.map +0 -0
- /package/dist/{src → types}/acl/definition/internal/createPredicateName.d.ts +0 -0
- /package/dist/{src → types}/acl/definition/internal/createPredicateName.d.ts.map +0 -0
- /package/dist/{src → types}/acl/definition/internal/stores.d.ts +0 -0
- /package/dist/{src → types}/acl/definition/internal/stores.d.ts.map +0 -0
- /package/dist/{src → types}/acl/definition/permissions.d.ts +0 -0
- /package/dist/{src → types}/acl/definition/references.d.ts +0 -0
- /package/dist/{src → types}/acl/definition/roles.d.ts +0 -0
- /package/dist/{src → types}/acl/definition/variables.d.ts +0 -0
- /package/dist/{src → types}/actions/definition/index.d.ts +0 -0
- /package/dist/{src → types}/actions/definition/internal/ActionsFactory.d.ts +0 -0
- /package/dist/{src → types}/actions/definition/internal/ActionsFactory.d.ts.map +0 -0
- /package/dist/{src → types}/actions/definition/internal/store.d.ts +0 -0
- /package/dist/{src → types}/actions/definition/internal/store.d.ts.map +0 -0
- /package/dist/{src → types}/actions/definition/triggers.d.ts +0 -0
- /package/dist/{src → types}/model/builder/ColumnBuilder.d.ts +0 -0
- /package/dist/{src → types}/model/builder/ColumnBuilder.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/EntityBuilder.d.ts +0 -0
- /package/dist/{src → types}/model/builder/EntityBuilder.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/FieldBuilder.d.ts +0 -0
- /package/dist/{src → types}/model/builder/FieldBuilder.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/ManyHasManyBuilder.d.ts +0 -0
- /package/dist/{src → types}/model/builder/ManyHasManyBuilder.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/ManyHasOneBuilder.d.ts +0 -0
- /package/dist/{src → types}/model/builder/ManyHasOneBuilder.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/OneHasManyBuilder.d.ts +0 -0
- /package/dist/{src → types}/model/builder/OneHasManyBuilder.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/OneHasOneBuilder.d.ts +0 -0
- /package/dist/{src → types}/model/builder/OneHasOneBuilder.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/SchemaBuilder.d.ts +0 -0
- /package/dist/{src → types}/model/builder/SchemaBuilder.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/SchemaBuilderError.d.ts +0 -0
- /package/dist/{src → types}/model/builder/SchemaBuilderError.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/SchemaBuilderInternal.d.ts +0 -0
- /package/dist/{src → types}/model/builder/SchemaBuilderInternal.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/internal/ColumnProcessor.d.ts +0 -0
- /package/dist/{src → types}/model/builder/internal/ColumnProcessor.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/internal/FieldProcessor.d.ts +0 -0
- /package/dist/{src → types}/model/builder/internal/FieldProcessor.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/internal/ManyHasManyProcessor.d.ts +0 -0
- /package/dist/{src → types}/model/builder/internal/ManyHasManyProcessor.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/internal/ManyHasOneProcessor.d.ts +0 -0
- /package/dist/{src → types}/model/builder/internal/ManyHasOneProcessor.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/internal/OneHasManyProcessor.d.ts +0 -0
- /package/dist/{src → types}/model/builder/internal/OneHasManyProcessor.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/internal/OneHasOneProcessor.d.ts +0 -0
- /package/dist/{src → types}/model/builder/internal/OneHasOneProcessor.d.ts.map +0 -0
- /package/dist/{src → types}/model/builder/types.d.ts +0 -0
- /package/dist/{src → types}/model/builder/types.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/EnumDefinition.d.ts +0 -0
- /package/dist/{src → types}/model/definition/EnumDefinition.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/EventLogDefinition.d.ts +0 -0
- /package/dist/{src → types}/model/definition/EventLogDefinition.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/IndexDefinition.d.ts +0 -0
- /package/dist/{src → types}/model/definition/IndexDefinition.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/OrderByDefinition.d.ts +0 -0
- /package/dist/{src → types}/model/definition/OrderByDefinition.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/UniqueDefinition.d.ts +0 -0
- /package/dist/{src → types}/model/definition/UniqueDefinition.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/context.d.ts +0 -0
- /package/dist/{src → types}/model/definition/context.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/extensions.d.ts +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/ColumnDefinition.d.ts +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/ColumnDefinition.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/FieldDefinition.d.ts +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/FieldDefinition.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/ManyHasManyDefinition.d.ts +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/ManyHasManyDefinition.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.d.ts +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/ManyHasManyInverseDefinition.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/ManyHasOneDefinition.d.ts +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/ManyHasOneDefinition.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/OneHasManyDefinition.d.ts +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/OneHasManyDefinition.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/OneHasOneDefinition.d.ts +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/OneHasOneDefinition.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/OneHasOneInverseDefinition.d.ts +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/OneHasOneInverseDefinition.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/index.d.ts +0 -0
- /package/dist/{src → types}/model/definition/fieldDefinitions/index.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/internal/EntityRegistry.d.ts +0 -0
- /package/dist/{src → types}/model/definition/internal/EntityRegistry.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/internal/EnumRegistry.d.ts +0 -0
- /package/dist/{src → types}/model/definition/internal/EnumRegistry.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/internal/SchemaBuilder.d.ts +0 -0
- /package/dist/{src → types}/model/definition/internal/SchemaBuilder.d.ts.map +0 -0
- /package/dist/{src → types}/model/definition/internal/index.d.ts +0 -0
- /package/dist/{src → types}/model/definition/internal/index.d.ts.map +0 -0
- /package/dist/{src → types}/model/index.d.ts +0 -0
- /package/dist/{src → types}/model/index.d.ts.map +0 -0
- /package/dist/{src → types}/presets.d.ts +0 -0
- /package/dist/{src → types}/presets.d.ts.map +0 -0
- /package/dist/{src → types}/strict.d.ts +0 -0
- /package/dist/{src → types}/strict.d.ts.map +0 -0
- /package/dist/{src → types}/utils/MetadataStore.d.ts +0 -0
- /package/dist/{src → types}/utils/assertNever.d.ts +0 -0
- /package/dist/{src → types}/utils/assertNever.d.ts.map +0 -0
- /package/dist/{src → types}/utils/decorators.d.ts +0 -0
- /package/dist/{src → types}/utils/decorators.d.ts.map +0 -0
- /package/dist/{src → types}/utils/filterEntityDefinition.d.ts +0 -0
- /package/dist/{src → types}/utils/index.d.ts +0 -0
- /package/dist/{src → types}/utils/index.d.ts.map +0 -0
- /package/dist/{src → types}/utils/tuple.d.ts +0 -0
- /package/dist/{src → types}/validation/index.d.ts +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/index.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { AclFactory } from './internal/AclFactory'\n\nexport * from './customPrimary'\nexport * from './permissions'\nexport * from './references'\nexport * from './roles'\nexport * from './variables'\n\nexport const createAcl = (\n\texportedDefinitions: Record<string, any>,\n\tmodel: Model.Schema,\n): Acl.Schema => {\n\tconst aclFactory = new AclFactory(model)\n\treturn aclFactory.create(exportedDefinitions)\n}\n"],"names":[],"mappings":";;;;;;AASa,MAAA,YAAY,CACxB,qBACA,UACgB;AACV,QAAA,aAAa,IAAI,WAAW,KAAK;AAChC,SAAA,WAAW,OAAO,mBAAmB;AAC7C;"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const schemaUtils = require("@contember/schema-utils");
|
|
4
|
+
const EntityPredicateResolver = require("./EntityPredicateResolver.cjs");
|
|
5
|
+
const stores = require("./stores.cjs");
|
|
6
|
+
const roles = require("../roles.cjs");
|
|
7
|
+
const variables = require("../variables.cjs");
|
|
8
|
+
const filterEntityDefinition = require("../../../utils/filterEntityDefinition.cjs");
|
|
9
|
+
require("reflect-metadata");
|
|
10
|
+
class AclFactory {
|
|
11
|
+
constructor(model) {
|
|
12
|
+
this.model = model;
|
|
13
|
+
}
|
|
14
|
+
create(exportedDefinitions) {
|
|
15
|
+
const entityLikeDefinition = filterEntityDefinition.filterEntityDefinition(exportedDefinitions);
|
|
16
|
+
const roles$1 = Object.values(exportedDefinitions).filter((it) => it instanceof roles.Role);
|
|
17
|
+
const variables$1 = Object.values(exportedDefinitions).filter((it) => it instanceof variables.VariableDefinition);
|
|
18
|
+
const groupedPermissions = AclFactory.groupPermissions(entityLikeDefinition, roles$1);
|
|
19
|
+
return {
|
|
20
|
+
roles: Object.fromEntries(roles$1.map((role) => {
|
|
21
|
+
const rolePermissions = groupedPermissions.get(role);
|
|
22
|
+
return [
|
|
23
|
+
role.name,
|
|
24
|
+
{
|
|
25
|
+
...role.options,
|
|
26
|
+
stages: role.options.stages ?? "*",
|
|
27
|
+
entities: this.createPermissions(rolePermissions),
|
|
28
|
+
variables: this.createVariables(role, variables$1)
|
|
29
|
+
}
|
|
30
|
+
];
|
|
31
|
+
}))
|
|
32
|
+
};
|
|
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
|
+
for (const op of ["create", "update", "read"]) {
|
|
43
|
+
const fieldPermissions = {};
|
|
44
|
+
for (const field of Object.keys(entity.fields)) {
|
|
45
|
+
const predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary);
|
|
46
|
+
if (predicate !== void 0) {
|
|
47
|
+
fieldPermissions[field] = predicate;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (Object.keys(fieldPermissions).length > 0) {
|
|
51
|
+
entityOperations[op] = fieldPermissions;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
const delPredicate = predicatesResolver.createFieldPredicate("delete", "", false);
|
|
55
|
+
if (delPredicate !== void 0) {
|
|
56
|
+
entityOperations.delete = delPredicate;
|
|
57
|
+
}
|
|
58
|
+
if (rolePermissions.get(entityName)?.allowCustomPrimary) {
|
|
59
|
+
entityOperations.customPrimary = true;
|
|
60
|
+
}
|
|
61
|
+
return [entityName, {
|
|
62
|
+
predicates: predicatesResolver.getUsedPredicates(),
|
|
63
|
+
operations: entityOperations
|
|
64
|
+
}];
|
|
65
|
+
}));
|
|
66
|
+
}
|
|
67
|
+
createVariables(role, variables2) {
|
|
68
|
+
const roleVariables = variables2.filter((it) => it.roles.includes(role));
|
|
69
|
+
return Object.fromEntries(roleVariables.map((variable) => {
|
|
70
|
+
return [variable.name, variable.variable];
|
|
71
|
+
}));
|
|
72
|
+
}
|
|
73
|
+
static groupPermissions(entityLikeDefinition, roles2) {
|
|
74
|
+
const groupedPermissions = /* @__PURE__ */ new Map();
|
|
75
|
+
for (const [name, entity] of entityLikeDefinition) {
|
|
76
|
+
const initEntityPermissions = (role) => {
|
|
77
|
+
const rolePermissions = groupedPermissions.get(role) ?? /* @__PURE__ */ new Map();
|
|
78
|
+
groupedPermissions.set(role, rolePermissions);
|
|
79
|
+
const entityPermissions = rolePermissions.get(name) ?? {
|
|
80
|
+
allowCustomPrimary: false,
|
|
81
|
+
definitions: []
|
|
82
|
+
};
|
|
83
|
+
rolePermissions.set(name, entityPermissions);
|
|
84
|
+
return entityPermissions;
|
|
85
|
+
};
|
|
86
|
+
const metadata = stores.allowDefinitionsStore.get(entity);
|
|
87
|
+
for (const { role, ...definition } of metadata) {
|
|
88
|
+
if (!roles2.includes(role)) {
|
|
89
|
+
throw `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`;
|
|
90
|
+
}
|
|
91
|
+
const entityPermissions = initEntityPermissions(role);
|
|
92
|
+
entityPermissions.definitions.push(definition);
|
|
93
|
+
}
|
|
94
|
+
const rolesWithCustomPrimary = stores.allowCustomPrimaryAllRolesStore.get(entity) ? roles2 : stores.allowCustomPrimaryStore.get(entity);
|
|
95
|
+
for (const role of rolesWithCustomPrimary) {
|
|
96
|
+
initEntityPermissions(role).allowCustomPrimary = true;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return groupedPermissions;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
exports.AclFactory = AclFactory;
|
|
103
|
+
//# sourceMappingURL=AclFactory.cjs.map
|
|
@@ -0,0 +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\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\t\t\t}]\n\t\t}))\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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"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { getEntity } from "@contember/schema-utils";
|
|
2
|
+
import { EntityPredicatesResolver } from "./EntityPredicateResolver.js";
|
|
3
|
+
import { allowDefinitionsStore, allowCustomPrimaryAllRolesStore, allowCustomPrimaryStore } from "./stores.js";
|
|
4
|
+
import { Role } from "../roles.js";
|
|
5
|
+
import { VariableDefinition } from "../variables.js";
|
|
6
|
+
import { filterEntityDefinition } from "../../../utils/filterEntityDefinition.js";
|
|
7
|
+
import "reflect-metadata";
|
|
8
|
+
class AclFactory {
|
|
9
|
+
constructor(model) {
|
|
10
|
+
this.model = model;
|
|
11
|
+
}
|
|
12
|
+
create(exportedDefinitions) {
|
|
13
|
+
const entityLikeDefinition = filterEntityDefinition(exportedDefinitions);
|
|
14
|
+
const roles = Object.values(exportedDefinitions).filter((it) => it instanceof Role);
|
|
15
|
+
const variables = Object.values(exportedDefinitions).filter((it) => it instanceof VariableDefinition);
|
|
16
|
+
const groupedPermissions = AclFactory.groupPermissions(entityLikeDefinition, roles);
|
|
17
|
+
return {
|
|
18
|
+
roles: Object.fromEntries(roles.map((role) => {
|
|
19
|
+
const rolePermissions = groupedPermissions.get(role);
|
|
20
|
+
return [
|
|
21
|
+
role.name,
|
|
22
|
+
{
|
|
23
|
+
...role.options,
|
|
24
|
+
stages: role.options.stages ?? "*",
|
|
25
|
+
entities: this.createPermissions(rolePermissions),
|
|
26
|
+
variables: this.createVariables(role, variables)
|
|
27
|
+
}
|
|
28
|
+
];
|
|
29
|
+
}))
|
|
30
|
+
};
|
|
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
|
+
for (const op of ["create", "update", "read"]) {
|
|
41
|
+
const fieldPermissions = {};
|
|
42
|
+
for (const field of Object.keys(entity.fields)) {
|
|
43
|
+
const predicate = predicatesResolver.createFieldPredicate(op, field, field === entity.primary);
|
|
44
|
+
if (predicate !== void 0) {
|
|
45
|
+
fieldPermissions[field] = predicate;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (Object.keys(fieldPermissions).length > 0) {
|
|
49
|
+
entityOperations[op] = fieldPermissions;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
const delPredicate = predicatesResolver.createFieldPredicate("delete", "", false);
|
|
53
|
+
if (delPredicate !== void 0) {
|
|
54
|
+
entityOperations.delete = delPredicate;
|
|
55
|
+
}
|
|
56
|
+
if (rolePermissions.get(entityName)?.allowCustomPrimary) {
|
|
57
|
+
entityOperations.customPrimary = true;
|
|
58
|
+
}
|
|
59
|
+
return [entityName, {
|
|
60
|
+
predicates: predicatesResolver.getUsedPredicates(),
|
|
61
|
+
operations: entityOperations
|
|
62
|
+
}];
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
createVariables(role, variables) {
|
|
66
|
+
const roleVariables = variables.filter((it) => it.roles.includes(role));
|
|
67
|
+
return Object.fromEntries(roleVariables.map((variable) => {
|
|
68
|
+
return [variable.name, variable.variable];
|
|
69
|
+
}));
|
|
70
|
+
}
|
|
71
|
+
static groupPermissions(entityLikeDefinition, roles) {
|
|
72
|
+
const groupedPermissions = /* @__PURE__ */ new Map();
|
|
73
|
+
for (const [name, entity] of entityLikeDefinition) {
|
|
74
|
+
const initEntityPermissions = (role) => {
|
|
75
|
+
const rolePermissions = groupedPermissions.get(role) ?? /* @__PURE__ */ new Map();
|
|
76
|
+
groupedPermissions.set(role, rolePermissions);
|
|
77
|
+
const entityPermissions = rolePermissions.get(name) ?? {
|
|
78
|
+
allowCustomPrimary: false,
|
|
79
|
+
definitions: []
|
|
80
|
+
};
|
|
81
|
+
rolePermissions.set(name, entityPermissions);
|
|
82
|
+
return entityPermissions;
|
|
83
|
+
};
|
|
84
|
+
const metadata = allowDefinitionsStore.get(entity);
|
|
85
|
+
for (const { role, ...definition } of metadata) {
|
|
86
|
+
if (!roles.includes(role)) {
|
|
87
|
+
throw `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`;
|
|
88
|
+
}
|
|
89
|
+
const entityPermissions = initEntityPermissions(role);
|
|
90
|
+
entityPermissions.definitions.push(definition);
|
|
91
|
+
}
|
|
92
|
+
const rolesWithCustomPrimary = allowCustomPrimaryAllRolesStore.get(entity) ? roles : allowCustomPrimaryStore.get(entity);
|
|
93
|
+
for (const role of rolesWithCustomPrimary) {
|
|
94
|
+
initEntityPermissions(role).allowCustomPrimary = true;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return groupedPermissions;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
export {
|
|
101
|
+
AclFactory
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=AclFactory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AclFactory.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/AclFactory.ts"],"sourcesContent":["import { Acl, Model, Writable } from '@contember/schema'\nimport { getEntity } from '@contember/schema-utils'\n\nimport { EntityPredicatesResolver } from './EntityPredicateResolver'\nimport { AllowDefinition } from '../permissions'\nimport {\n\tallowCustomPrimaryAllRolesStore,\n\tallowCustomPrimaryStore,\n\tallowDefinitionsStore,\n\tEntityPermissionsDefinition,\n} from './stores'\nimport { Role } from '../roles'\nimport { VariableDefinition } from '../variables'\nimport { filterEntityDefinition } from '../../../utils'\n\nexport class AclFactory {\n\tconstructor(\n\t\tprivate model: Model.Schema,\n\t) {\n\t}\n\n\tpublic create(\n\t\texportedDefinitions: Record<string, any>,\n\t): Acl.Schema {\n\t\tconst entityLikeDefinition = filterEntityDefinition(exportedDefinitions)\n\t\tconst roles: Role[] = Object.values(exportedDefinitions).filter(it => it instanceof Role)\n\t\tconst variables: VariableDefinition[] = Object.values(exportedDefinitions).filter(it => it instanceof VariableDefinition)\n\n\t\tconst groupedPermissions = AclFactory.groupPermissions(entityLikeDefinition, roles)\n\n\t\treturn {\n\t\t\troles: Object.fromEntries(roles.map((role): [string, Acl.RolePermissions] => {\n\t\t\t\tconst rolePermissions = groupedPermissions.get(role)\n\t\t\t\treturn [\n\t\t\t\t\trole.name,\n\t\t\t\t\t{\n\t\t\t\t\t\t...role.options,\n\t\t\t\t\t\tstages: role.options.stages ?? '*',\n\t\t\t\t\t\tentities: this.createPermissions(rolePermissions),\n\t\t\t\t\t\tvariables: this.createVariables(role, variables),\n\t\t\t\t\t},\n\t\t\t\t]\n\t\t\t})),\n\t\t}\n\t}\n\n\tprivate createPermissions(rolePermissions: PermissionsByEntity | undefined): Acl.Permissions {\n\t\tif (!rolePermissions) {\n\t\t\treturn {}\n\t\t}\n\t\treturn Object.fromEntries(Array.from(rolePermissions.keys()).map((entityName): [string, Acl.EntityPermissions] => {\n\t\t\tconst entity = getEntity(this.model, entityName)\n\n\t\t\tconst predicatesResolver = EntityPredicatesResolver.create(rolePermissions, this.model, entity)\n\n\t\t\tconst entityOperations: Writable<Acl.EntityOperations> = {}\n\t\t\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\t\t\t}]\n\t\t}))\n\t}\n\n\tprivate createVariables(role: Role, variables: VariableDefinition[]): Acl.Variables {\n\t\tconst roleVariables = variables.filter(it => it.roles.includes(role))\n\t\treturn Object.fromEntries(roleVariables.map((variable): [string, Acl.Variable] => {\n\t\t\treturn [variable.name, variable.variable]\n\t\t}))\n\t}\n\n\tprivate static groupPermissions(entityLikeDefinition: [string, { new(): any }][], roles: Role[]): PermissionsByRoleAndEntity {\n\t\tconst groupedPermissions: PermissionsByRoleAndEntity = new Map()\n\t\tfor (const [name, entity] of entityLikeDefinition) {\n\t\t\tconst initEntityPermissions = (role: Role): EntityPermissions => {\n\t\t\t\tconst rolePermissions: PermissionsByEntity = groupedPermissions.get(role) ?? new Map()\n\t\t\t\tgroupedPermissions.set(role, rolePermissions)\n\t\t\t\tconst entityPermissions = rolePermissions.get(name) ?? {\n\t\t\t\t\tallowCustomPrimary: false,\n\t\t\t\t\tdefinitions: [],\n\t\t\t\t}\n\t\t\t\trolePermissions.set(name, entityPermissions)\n\t\t\t\treturn entityPermissions\n\t\t\t}\n\t\t\tconst metadata: EntityPermissionsDefinition[] = allowDefinitionsStore.get(entity)\n\t\t\tfor (const { role, ...definition } of metadata) {\n\t\t\t\tif (!roles.includes(role)) {\n\t\t\t\t\tthrow `Role ${role.name} used on entity ${name} is not registered. Have you exported it?`\n\t\t\t\t}\n\t\t\t\tconst entityPermissions = initEntityPermissions(role)\n\t\t\t\tentityPermissions.definitions.push(definition)\n\t\t\t}\n\n\t\t\tconst rolesWithCustomPrimary = allowCustomPrimaryAllRolesStore.get(entity) ? roles : allowCustomPrimaryStore.get(entity)\n\t\t\tfor (const role of rolesWithCustomPrimary) {\n\t\t\t\tinitEntityPermissions(role).allowCustomPrimary = true\n\t\t\t}\n\t\t}\n\n\t\treturn groupedPermissions\n\t}\n}\n\n\nexport type EntityPermissions = { definitions: AllowDefinition<any>[]; allowCustomPrimary: boolean }\nexport type PermissionsByEntity = Map<string, EntityPermissions>\nexport type PermissionsByRoleAndEntity = Map<Role, PermissionsByEntity>\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const node_util = require("node:util");
|
|
4
|
+
const schemaUtils = require("@contember/schema-utils");
|
|
5
|
+
const createPredicateName = require("./createPredicateName.cjs");
|
|
6
|
+
const references = require("../references.cjs");
|
|
7
|
+
const variables = require("../variables.cjs");
|
|
8
|
+
var __defProp = Object.defineProperty;
|
|
9
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
10
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, key + "", value);
|
|
11
|
+
class EntityPredicatesResolver {
|
|
12
|
+
constructor(aclDefinitions, predicates, predicateNamesMap, generatedNames) {
|
|
13
|
+
this.aclDefinitions = aclDefinitions;
|
|
14
|
+
this.predicates = predicates;
|
|
15
|
+
this.predicateNamesMap = predicateNamesMap;
|
|
16
|
+
this.generatedNames = generatedNames;
|
|
17
|
+
__publicField(this, "usedPredicates", []);
|
|
18
|
+
}
|
|
19
|
+
static create(rolePermissions, model, entity) {
|
|
20
|
+
const predicates = {};
|
|
21
|
+
const predicateNamesMap = /* @__PURE__ */ new Map();
|
|
22
|
+
const aclDefinitions = rolePermissions.get(entity.name)?.definitions ?? [];
|
|
23
|
+
const generatedNames = /* @__PURE__ */ new Set();
|
|
24
|
+
const definedNames = new Set(aclDefinitions.map((it) => it.name).filter((it) => it !== void 0));
|
|
25
|
+
for (const permission of aclDefinitions) {
|
|
26
|
+
if (!permission.when) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
const resolvedPredicate = EntityPredicatesResolver.resolvePredicate(model, entity, permission.when, rolePermissions);
|
|
30
|
+
let predicateName = permission.name ?? createPredicateName.createPredicateName(resolvedPredicate);
|
|
31
|
+
while (predicateName in predicates || definedNames.has(predicateName)) {
|
|
32
|
+
predicateName += "_";
|
|
33
|
+
}
|
|
34
|
+
if (!permission.name) {
|
|
35
|
+
generatedNames.add(predicateName);
|
|
36
|
+
}
|
|
37
|
+
predicates[predicateName] = resolvedPredicate;
|
|
38
|
+
predicateNamesMap.set(permission.when, predicateName);
|
|
39
|
+
}
|
|
40
|
+
for (const op of ["read", "update", "create"]) {
|
|
41
|
+
for (const definition of aclDefinitions) {
|
|
42
|
+
const fields = definition[op];
|
|
43
|
+
if (!Array.isArray(fields)) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
for (const field of fields) {
|
|
47
|
+
if (!(field in entity.fields)) {
|
|
48
|
+
throw `Field "${String(field)}" does not exist on entity "${entity.name}" in ${op} ACL definition.`;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return new EntityPredicatesResolver(aclDefinitions, predicates, predicateNamesMap, generatedNames);
|
|
54
|
+
}
|
|
55
|
+
createFieldPredicate(op, field, isPrimary) {
|
|
56
|
+
const fieldWhens = EntityPredicatesResolver.getMatchingWhens(this.aclDefinitions, op, field, isPrimary);
|
|
57
|
+
if (fieldWhens.length === 0) {
|
|
58
|
+
return void 0;
|
|
59
|
+
}
|
|
60
|
+
if (fieldWhens.includes(true)) {
|
|
61
|
+
return true;
|
|
62
|
+
}
|
|
63
|
+
const predicateNames = fieldWhens.map((it) => {
|
|
64
|
+
const name = this.predicateNamesMap.get(it);
|
|
65
|
+
if (!name) throw new Error("implementation error");
|
|
66
|
+
return name;
|
|
67
|
+
});
|
|
68
|
+
if (predicateNames.length === 1) {
|
|
69
|
+
this.usedPredicates.push(predicateNames[0]);
|
|
70
|
+
return predicateNames[0];
|
|
71
|
+
}
|
|
72
|
+
const predicate = { or: predicateNames.map((it) => this.predicates[it]) };
|
|
73
|
+
const origName = predicateNames.every((it) => this.generatedNames.has(it)) ? createPredicateName.createPredicateName(predicate) : predicateNames.join("_or_");
|
|
74
|
+
let predicateName = origName;
|
|
75
|
+
for (let i = 1; ; i++) {
|
|
76
|
+
if (!(predicateName in this.predicates)) {
|
|
77
|
+
this.predicates[predicateName] = predicate;
|
|
78
|
+
break;
|
|
79
|
+
} else if (node_util.isDeepStrictEqual(predicate, this.predicates[predicateName])) {
|
|
80
|
+
break;
|
|
81
|
+
} else {
|
|
82
|
+
predicateName = `${origName}_${i}`;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
this.usedPredicates.push(predicateName);
|
|
86
|
+
return predicateName;
|
|
87
|
+
}
|
|
88
|
+
getUsedPredicates() {
|
|
89
|
+
return Object.fromEntries(Object.entries(this.predicates).filter(([name]) => this.usedPredicates.includes(name)));
|
|
90
|
+
}
|
|
91
|
+
static resolvePredicate(model, entity, when, rolePermissionsByEntity) {
|
|
92
|
+
const processor = new schemaUtils.PredicateDefinitionProcessor(model);
|
|
93
|
+
return processor.process(entity, when, {
|
|
94
|
+
handleColumn(ctx) {
|
|
95
|
+
if (ctx.value instanceof variables.VariableDefinition) {
|
|
96
|
+
return ctx.value.name;
|
|
97
|
+
}
|
|
98
|
+
if (ctx.value instanceof references.PredicateEvaluationReference) {
|
|
99
|
+
throw `Predicate references are allowed only on relations.
|
|
100
|
+
You cannot use "can${upperCaseFirst(ctx.value.operation)}(${ctx.value.field ? JSON.stringify(ctx.value.field) : ""})" on a column "${ctx.column.name}" of entity "${ctx.entity.name}".`;
|
|
101
|
+
}
|
|
102
|
+
return ctx.value;
|
|
103
|
+
},
|
|
104
|
+
handleRelation(ctx) {
|
|
105
|
+
if (ctx.value instanceof variables.VariableDefinition) {
|
|
106
|
+
return { [ctx.targetEntity.primary]: ctx.value.name };
|
|
107
|
+
}
|
|
108
|
+
if (ctx.value instanceof references.PredicateEvaluationReference) {
|
|
109
|
+
const targetPermissions = rolePermissionsByEntity.get(ctx.targetEntity.name);
|
|
110
|
+
if (!targetPermissions) {
|
|
111
|
+
return { [ctx.targetEntity.primary]: { never: true } };
|
|
112
|
+
}
|
|
113
|
+
const ref = ctx.value;
|
|
114
|
+
const whens = EntityPredicatesResolver.getMatchingWhens(targetPermissions.definitions, ref.operation, ref.field ?? "", false);
|
|
115
|
+
if (whens.length === 0) {
|
|
116
|
+
return { [ctx.targetEntity.primary]: { never: true } };
|
|
117
|
+
}
|
|
118
|
+
if (whens.includes(true)) {
|
|
119
|
+
return { [ctx.targetEntity.primary]: { isNull: false } };
|
|
120
|
+
}
|
|
121
|
+
const predicates = whens.map(
|
|
122
|
+
(it) => EntityPredicatesResolver.resolvePredicate(model, ctx.targetEntity, it, rolePermissionsByEntity)
|
|
123
|
+
);
|
|
124
|
+
if (predicates.length > 1) {
|
|
125
|
+
return { or: predicates };
|
|
126
|
+
}
|
|
127
|
+
return predicates[0];
|
|
128
|
+
}
|
|
129
|
+
return ctx.value;
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
static getMatchingWhens(permissions, operation, field, isPrimary) {
|
|
134
|
+
return permissions.filter((it) => {
|
|
135
|
+
if (operation === "delete") {
|
|
136
|
+
return !!it.delete;
|
|
137
|
+
}
|
|
138
|
+
const op = it[operation];
|
|
139
|
+
if (!op) {
|
|
140
|
+
return false;
|
|
141
|
+
}
|
|
142
|
+
if (op === true) {
|
|
143
|
+
return !isPrimary;
|
|
144
|
+
}
|
|
145
|
+
return op.includes(field);
|
|
146
|
+
}).map((it) => it.when ?? true);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const upperCaseFirst = (string) => `${string.charAt(0).toUpperCase()}${string.substring(1)}`;
|
|
150
|
+
exports.EntityPredicatesResolver = EntityPredicatesResolver;
|
|
151
|
+
//# sourceMappingURL=EntityPredicateResolver.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityPredicateResolver.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/EntityPredicateResolver.ts"],"sourcesContent":["import { isDeepStrictEqual } from 'node:util'\n\nimport { Acl, Input, Model, Writable } from '@contember/schema'\nimport { PredicateDefinitionProcessor } from '@contember/schema-utils'\n\nimport { PermissionsByEntity } from './AclFactory'\nimport { createPredicateName } from './createPredicateName'\nimport { AllowDefinition, PredicateExtra, WhenDefinition } from '../permissions'\nimport { PredicateEvaluationReference } from '../references'\nimport { VariableDefinition } from '../variables'\n\nexport class EntityPredicatesResolver {\n\tprivate usedPredicates: string[] = []\n\n\tprivate constructor(\n\t\tprivate aclDefinitions: AllowDefinition<any>[],\n\t\tprivate predicates: Writable<Acl.PredicateMap>,\n\t\tprivate predicateNamesMap: Map<WhenDefinition, string>,\n\t\tprivate generatedNames: Set<string>,\n\t) {\n\t}\n\n\tpublic static create(\n\t\trolePermissions: PermissionsByEntity,\n\t\tmodel: Model.Schema,\n\t\tentity: Model.Entity,\n\t): EntityPredicatesResolver {\n\t\tconst predicates: Writable<Acl.PredicateMap> = {}\n\t\tconst predicateNamesMap = new Map<WhenDefinition, string>()\n\t\tconst aclDefinitions = rolePermissions.get(entity.name)?.definitions ?? []\n\t\tconst generatedNames = new Set<string>()\n\t\tconst definedNames = new Set<string>(aclDefinitions.map(it => it.name).filter((it): it is string => it !== undefined))\n\t\tfor (const permission of aclDefinitions) {\n\t\t\tif (!permission.when) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst resolvedPredicate = EntityPredicatesResolver.resolvePredicate(model, entity, permission.when, rolePermissions)\n\t\t\tlet predicateName = permission.name ?? createPredicateName(resolvedPredicate)\n\t\t\twhile (predicateName in predicates || definedNames.has(predicateName)) {\n\t\t\t\tpredicateName += '_'\n\t\t\t}\n\t\t\tif (!permission.name) {\n\t\t\t\tgeneratedNames.add(predicateName)\n\t\t\t}\n\t\t\tpredicates[predicateName] = resolvedPredicate\n\t\t\tpredicateNamesMap.set(permission.when, predicateName)\n\t\t}\n\t\tfor (const op of ['read', 'update', 'create'] as const) {\n\t\t\tfor (const definition of aclDefinitions) {\n\t\t\t\tconst fields = definition[op]\n\t\t\t\tif (!Array.isArray(fields)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor (const field of fields) {\n\t\t\t\t\tif (!(field in entity.fields)) {\n\t\t\t\t\t\tthrow `Field \"${String(field)}\" does not exist on entity \"${entity.name}\" in ${op} ACL definition.`\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new EntityPredicatesResolver(aclDefinitions, predicates, predicateNamesMap, generatedNames)\n\t}\n\n\tcreateFieldPredicate(op: 'create' | 'update' | 'read' | 'delete', field: string, isPrimary: boolean): true | undefined | string {\n\t\tconst fieldWhens = EntityPredicatesResolver.getMatchingWhens(this.aclDefinitions, op, field, isPrimary)\n\t\tif (fieldWhens.length === 0) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (fieldWhens.includes(true)) {\n\t\t\treturn true\n\t\t}\n\t\tconst predicateNames = (fieldWhens as WhenDefinition[]).map(it => {\n\t\t\tconst name = this.predicateNamesMap.get(it)\n\t\t\tif (!name) throw new Error('implementation error')\n\t\t\treturn name\n\t\t})\n\t\tif (predicateNames.length === 1) {\n\t\t\tthis.usedPredicates.push(predicateNames[0])\n\t\t\treturn predicateNames[0]\n\t\t}\n\n\n\t\tconst predicate = { or: predicateNames.map(it => this.predicates[it]) }\n\t\tconst origName = predicateNames.every(it => this.generatedNames.has(it)) ? createPredicateName(predicate) : predicateNames.join('_or_')\n\t\tlet predicateName = origName\n\t\tfor (let i = 1;; i++) {\n\t\t\tif (!(predicateName in this.predicates)) {\n\t\t\t\tthis.predicates[predicateName] = predicate\n\t\t\t\tbreak\n\t\t\t} else if (isDeepStrictEqual(predicate, this.predicates[predicateName])) {\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\tpredicateName = `${origName}_${i}`\n\t\t\t}\n\t\t}\n\t\tthis.usedPredicates.push(predicateName)\n\t\treturn predicateName\n\t}\n\n\tgetUsedPredicates(): Acl.PredicateMap {\n\t\treturn Object.fromEntries(Object.entries(this.predicates).filter(([name]) => this.usedPredicates.includes(name)))\n\t}\n\n\n\tprivate static resolvePredicate(\n\t\tmodel: Model.Schema,\n\t\tentity: Model.Entity,\n\t\twhen: WhenDefinition,\n\t\trolePermissionsByEntity: PermissionsByEntity,\n\t): Acl.PredicateDefinition {\n\t\tconst processor = new PredicateDefinitionProcessor(model)\n\t\treturn processor.process<Acl.PredicateReference | Input.Condition, PredicateExtra>(entity, when, {\n\t\t\thandleColumn(ctx) {\n\t\t\t\tif (ctx.value instanceof VariableDefinition) {\n\t\t\t\t\treturn ctx.value.name\n\t\t\t\t}\n\t\t\t\tif (ctx.value instanceof PredicateEvaluationReference) {\n\t\t\t\t\tthrow `Predicate references are allowed only on relations. \\nYou cannot use \"can${upperCaseFirst(ctx.value.operation)}(${ctx.value.field ? JSON.stringify(ctx.value.field) : ''})\" on a column \"${ctx.column.name}\" of entity \"${ctx.entity.name}\".`\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t\thandleRelation(ctx) {\n\t\t\t\tif (ctx.value instanceof VariableDefinition) {\n\t\t\t\t\treturn { [ctx.targetEntity.primary]: ctx.value.name }\n\t\t\t\t}\n\t\t\t\tif (ctx.value instanceof PredicateEvaluationReference) {\n\t\t\t\t\tconst targetPermissions = rolePermissionsByEntity.get(ctx.targetEntity.name)\n\t\t\t\t\tif (!targetPermissions) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { never: true } }\n\t\t\t\t\t}\n\t\t\t\t\tconst ref = ctx.value\n\t\t\t\t\tconst whens = EntityPredicatesResolver.getMatchingWhens(targetPermissions.definitions, ref.operation, ref.field ?? '', false)\n\t\t\t\t\tif (whens.length === 0) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { never: true } }\n\t\t\t\t\t}\n\t\t\t\t\tif (whens.includes(true)) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { isNull: false } }\n\t\t\t\t\t}\n\t\t\t\t\tconst predicates = (whens as WhenDefinition[]).map(it =>\n\t\t\t\t\t\tEntityPredicatesResolver.resolvePredicate(model, ctx.targetEntity, it, rolePermissionsByEntity),\n\t\t\t\t\t)\n\t\t\t\t\tif (predicates.length > 1) {\n\t\t\t\t\t\treturn { or: predicates }\n\t\t\t\t\t}\n\t\t\t\t\treturn predicates[0]\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t})\n\t}\n\n\tprivate static getMatchingWhens(\n\t\tpermissions: AllowDefinition<any>[],\n\t\toperation: 'delete' | 'read' | 'update' | 'create',\n\t\tfield: string,\n\t\tisPrimary: boolean,\n\t) {\n\t\treturn permissions\n\t\t\t.filter(it => {\n\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\treturn !!it.delete\n\t\t\t\t}\n\t\t\t\tconst op = it[operation]\n\t\t\t\tif (!op) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (op === true) {\n\t\t\t\t\treturn !isPrimary\n\t\t\t\t}\n\t\t\t\treturn op.includes(field)\n\t\t\t})\n\t\t\t.map(it => it.when ?? true)\n\t}\n}\n\nconst upperCaseFirst = (string: string) => `${string.charAt(0).toUpperCase()}${string.substring(1)}`\n"],"names":["createPredicateName","isDeepStrictEqual","PredicateDefinitionProcessor","VariableDefinition","PredicateEvaluationReference"],"mappings":";;;;;;;;;;AAWO,MAAM,yBAAyB;AAAA,EAG7B,YACC,gBACA,YACA,mBACA,gBACP;AAJO,SAAA,iBAAA;AACA,SAAA,aAAA;AACA,SAAA,oBAAA;AACA,SAAA,iBAAA;AANT,kBAAA,MAAQ,kBAA2B,CAAA,CAAC;AAAA,EAQpC;AAAA,EAEA,OAAc,OACb,iBACA,OACA,QAC2B;AAC3B,UAAM,aAAyC,CAAA;AACzC,UAAA,wCAAwB;AAC9B,UAAM,iBAAiB,gBAAgB,IAAI,OAAO,IAAI,GAAG,eAAe;AAClE,UAAA,qCAAqB;AAC3B,UAAM,eAAe,IAAI,IAAY,eAAe,IAAI,CAAM,OAAA,GAAG,IAAI,EAAE,OAAO,CAAC,OAAqB,OAAO,MAAS,CAAC;AACrH,eAAW,cAAc,gBAAgB;AACpC,UAAA,CAAC,WAAW,MAAM;AACrB;AAAA,MACD;AACA,YAAM,oBAAoB,yBAAyB,iBAAiB,OAAO,QAAQ,WAAW,MAAM,eAAe;AACnH,UAAI,gBAAgB,WAAW,QAAQA,oBAAA,oBAAoB,iBAAiB;AAC5E,aAAO,iBAAiB,cAAc,aAAa,IAAI,aAAa,GAAG;AACrD,yBAAA;AAAA,MAClB;AACI,UAAA,CAAC,WAAW,MAAM;AACrB,uBAAe,IAAI,aAAa;AAAA,MACjC;AACA,iBAAW,aAAa,IAAI;AACV,wBAAA,IAAI,WAAW,MAAM,aAAa;AAAA,IACrD;AACA,eAAW,MAAM,CAAC,QAAQ,UAAU,QAAQ,GAAY;AACvD,iBAAW,cAAc,gBAAgB;AAClC,cAAA,SAAS,WAAW,EAAE;AAC5B,YAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC3B;AAAA,QACD;AACA,mBAAW,SAAS,QAAQ;AACvB,cAAA,EAAE,SAAS,OAAO,SAAS;AACxB,kBAAA,UAAU,OAAO,KAAK,CAAC,+BAA+B,OAAO,IAAI,QAAQ,EAAE;AAAA,UAClF;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAEA,WAAO,IAAI,yBAAyB,gBAAgB,YAAY,mBAAmB,cAAc;AAAA,EAClG;AAAA,EAEA,qBAAqB,IAA6C,OAAe,WAA+C;AAC/H,UAAM,aAAa,yBAAyB,iBAAiB,KAAK,gBAAgB,IAAI,OAAO,SAAS;AAClG,QAAA,WAAW,WAAW,GAAG;AACrB,aAAA;AAAA,IACR;AACI,QAAA,WAAW,SAAS,IAAI,GAAG;AACvB,aAAA;AAAA,IACR;AACM,UAAA,iBAAkB,WAAgC,IAAI,CAAM,OAAA;AACjE,YAAM,OAAO,KAAK,kBAAkB,IAAI,EAAE;AAC1C,UAAI,CAAC,KAAY,OAAA,IAAI,MAAM,sBAAsB;AAC1C,aAAA;AAAA,IAAA,CACP;AACG,QAAA,eAAe,WAAW,GAAG;AAChC,WAAK,eAAe,KAAK,eAAe,CAAC,CAAC;AAC1C,aAAO,eAAe,CAAC;AAAA,IACxB;AAGM,UAAA,YAAY,EAAE,IAAI,eAAe,IAAI,QAAM,KAAK,WAAW,EAAE,CAAC,EAAE;AACtE,UAAM,WAAW,eAAe,MAAM,CAAA,OAAM,KAAK,eAAe,IAAI,EAAE,CAAC,IAAIA,oBAAAA,oBAAoB,SAAS,IAAI,eAAe,KAAK,MAAM;AACtI,QAAI,gBAAgB;AACX,aAAA,IAAI,KAAI,KAAK;AACjB,UAAA,EAAE,iBAAiB,KAAK,aAAa;AACnC,aAAA,WAAW,aAAa,IAAI;AACjC;AAAA,MAAA,WACUC,UAAkB,kBAAA,WAAW,KAAK,WAAW,aAAa,CAAC,GAAG;AACxE;AAAA,MAAA,OACM;AACU,wBAAA,GAAG,QAAQ,IAAI,CAAC;AAAA,MACjC;AAAA,IACD;AACK,SAAA,eAAe,KAAK,aAAa;AAC/B,WAAA;AAAA,EACR;AAAA,EAEA,oBAAsC;AACrC,WAAO,OAAO,YAAY,OAAO,QAAQ,KAAK,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,MAAM,KAAK,eAAe,SAAS,IAAI,CAAC,CAAC;AAAA,EACjH;AAAA,EAGA,OAAe,iBACd,OACA,QACA,MACA,yBAC0B;AACpB,UAAA,YAAY,IAAIC,yCAA6B,KAAK;AACjD,WAAA,UAAU,QAAkE,QAAQ,MAAM;AAAA,MAChG,aAAa,KAAK;AACb,YAAA,IAAI,iBAAiBC,8BAAoB;AAC5C,iBAAO,IAAI,MAAM;AAAA,QAClB;AACI,YAAA,IAAI,iBAAiBC,yCAA8B;AAChD,gBAAA;AAAA,qBAA4E,eAAe,IAAI,MAAM,SAAS,CAAC,IAAI,IAAI,MAAM,QAAQ,KAAK,UAAU,IAAI,MAAM,KAAK,IAAI,EAAE,mBAAmB,IAAI,OAAO,IAAI,gBAAgB,IAAI,OAAO,IAAI;AAAA,QACjP;AACA,eAAO,IAAI;AAAA,MACZ;AAAA,MACA,eAAe,KAAK;AACf,YAAA,IAAI,iBAAiBD,8BAAoB;AACrC,iBAAA,EAAE,CAAC,IAAI,aAAa,OAAO,GAAG,IAAI,MAAM;QAChD;AACI,YAAA,IAAI,iBAAiBC,yCAA8B;AACtD,gBAAM,oBAAoB,wBAAwB,IAAI,IAAI,aAAa,IAAI;AAC3E,cAAI,CAAC,mBAAmB;AAChB,mBAAA,EAAE,CAAC,IAAI,aAAa,OAAO,GAAG,EAAE,OAAO,KAAA;UAC/C;AACA,gBAAM,MAAM,IAAI;AACV,gBAAA,QAAQ,yBAAyB,iBAAiB,kBAAkB,aAAa,IAAI,WAAW,IAAI,SAAS,IAAI,KAAK;AACxH,cAAA,MAAM,WAAW,GAAG;AAChB,mBAAA,EAAE,CAAC,IAAI,aAAa,OAAO,GAAG,EAAE,OAAO,KAAA;UAC/C;AACI,cAAA,MAAM,SAAS,IAAI,GAAG;AAClB,mBAAA,EAAE,CAAC,IAAI,aAAa,OAAO,GAAG,EAAE,QAAQ,MAAA;UAChD;AACA,gBAAM,aAAc,MAA2B;AAAA,YAAI,QAClD,yBAAyB,iBAAiB,OAAO,IAAI,cAAc,IAAI,uBAAuB;AAAA,UAAA;AAE3F,cAAA,WAAW,SAAS,GAAG;AACnB,mBAAA,EAAE,IAAI;UACd;AACA,iBAAO,WAAW,CAAC;AAAA,QACpB;AACA,eAAO,IAAI;AAAA,MACZ;AAAA,IAAA,CACA;AAAA,EACF;AAAA,EAEA,OAAe,iBACd,aACA,WACA,OACA,WACC;AACM,WAAA,YACL,OAAO,CAAM,OAAA;AACb,UAAI,cAAc,UAAU;AACpB,eAAA,CAAC,CAAC,GAAG;AAAA,MACb;AACM,YAAA,KAAK,GAAG,SAAS;AACvB,UAAI,CAAC,IAAI;AACD,eAAA;AAAA,MACR;AACA,UAAI,OAAO,MAAM;AAChB,eAAO,CAAC;AAAA,MACT;AACO,aAAA,GAAG,SAAS,KAAK;AAAA,IAAA,CACxB,EACA,IAAI,CAAM,OAAA,GAAG,QAAQ,IAAI;AAAA,EAC5B;AACD;AAEA,MAAM,iBAAiB,CAAC,WAAmB,GAAG,OAAO,OAAO,CAAC,EAAE,YAAa,CAAA,GAAG,OAAO,UAAU,CAAC,CAAC;;"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { isDeepStrictEqual } from "node:util";
|
|
2
|
+
import { PredicateDefinitionProcessor } from "@contember/schema-utils";
|
|
3
|
+
import { createPredicateName } from "./createPredicateName.js";
|
|
4
|
+
import { PredicateEvaluationReference } from "../references.js";
|
|
5
|
+
import { VariableDefinition } from "../variables.js";
|
|
6
|
+
var __defProp = Object.defineProperty;
|
|
7
|
+
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
8
|
+
var __publicField = (obj, key, value) => __defNormalProp(obj, key + "", value);
|
|
9
|
+
class EntityPredicatesResolver {
|
|
10
|
+
constructor(aclDefinitions, predicates, predicateNamesMap, generatedNames) {
|
|
11
|
+
this.aclDefinitions = aclDefinitions;
|
|
12
|
+
this.predicates = predicates;
|
|
13
|
+
this.predicateNamesMap = predicateNamesMap;
|
|
14
|
+
this.generatedNames = generatedNames;
|
|
15
|
+
__publicField(this, "usedPredicates", []);
|
|
16
|
+
}
|
|
17
|
+
static create(rolePermissions, model, entity) {
|
|
18
|
+
const predicates = {};
|
|
19
|
+
const predicateNamesMap = /* @__PURE__ */ new Map();
|
|
20
|
+
const aclDefinitions = rolePermissions.get(entity.name)?.definitions ?? [];
|
|
21
|
+
const generatedNames = /* @__PURE__ */ new Set();
|
|
22
|
+
const definedNames = new Set(aclDefinitions.map((it) => it.name).filter((it) => it !== void 0));
|
|
23
|
+
for (const permission of aclDefinitions) {
|
|
24
|
+
if (!permission.when) {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const resolvedPredicate = EntityPredicatesResolver.resolvePredicate(model, entity, permission.when, rolePermissions);
|
|
28
|
+
let predicateName = permission.name ?? createPredicateName(resolvedPredicate);
|
|
29
|
+
while (predicateName in predicates || definedNames.has(predicateName)) {
|
|
30
|
+
predicateName += "_";
|
|
31
|
+
}
|
|
32
|
+
if (!permission.name) {
|
|
33
|
+
generatedNames.add(predicateName);
|
|
34
|
+
}
|
|
35
|
+
predicates[predicateName] = resolvedPredicate;
|
|
36
|
+
predicateNamesMap.set(permission.when, predicateName);
|
|
37
|
+
}
|
|
38
|
+
for (const op of ["read", "update", "create"]) {
|
|
39
|
+
for (const definition of aclDefinitions) {
|
|
40
|
+
const fields = definition[op];
|
|
41
|
+
if (!Array.isArray(fields)) {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
for (const field of fields) {
|
|
45
|
+
if (!(field in entity.fields)) {
|
|
46
|
+
throw `Field "${String(field)}" does not exist on entity "${entity.name}" in ${op} ACL definition.`;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return new EntityPredicatesResolver(aclDefinitions, predicates, predicateNamesMap, generatedNames);
|
|
52
|
+
}
|
|
53
|
+
createFieldPredicate(op, field, isPrimary) {
|
|
54
|
+
const fieldWhens = EntityPredicatesResolver.getMatchingWhens(this.aclDefinitions, op, field, isPrimary);
|
|
55
|
+
if (fieldWhens.length === 0) {
|
|
56
|
+
return void 0;
|
|
57
|
+
}
|
|
58
|
+
if (fieldWhens.includes(true)) {
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
const predicateNames = fieldWhens.map((it) => {
|
|
62
|
+
const name = this.predicateNamesMap.get(it);
|
|
63
|
+
if (!name) throw new Error("implementation error");
|
|
64
|
+
return name;
|
|
65
|
+
});
|
|
66
|
+
if (predicateNames.length === 1) {
|
|
67
|
+
this.usedPredicates.push(predicateNames[0]);
|
|
68
|
+
return predicateNames[0];
|
|
69
|
+
}
|
|
70
|
+
const predicate = { or: predicateNames.map((it) => this.predicates[it]) };
|
|
71
|
+
const origName = predicateNames.every((it) => this.generatedNames.has(it)) ? createPredicateName(predicate) : predicateNames.join("_or_");
|
|
72
|
+
let predicateName = origName;
|
|
73
|
+
for (let i = 1; ; i++) {
|
|
74
|
+
if (!(predicateName in this.predicates)) {
|
|
75
|
+
this.predicates[predicateName] = predicate;
|
|
76
|
+
break;
|
|
77
|
+
} else if (isDeepStrictEqual(predicate, this.predicates[predicateName])) {
|
|
78
|
+
break;
|
|
79
|
+
} else {
|
|
80
|
+
predicateName = `${origName}_${i}`;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
this.usedPredicates.push(predicateName);
|
|
84
|
+
return predicateName;
|
|
85
|
+
}
|
|
86
|
+
getUsedPredicates() {
|
|
87
|
+
return Object.fromEntries(Object.entries(this.predicates).filter(([name]) => this.usedPredicates.includes(name)));
|
|
88
|
+
}
|
|
89
|
+
static resolvePredicate(model, entity, when, rolePermissionsByEntity) {
|
|
90
|
+
const processor = new PredicateDefinitionProcessor(model);
|
|
91
|
+
return processor.process(entity, when, {
|
|
92
|
+
handleColumn(ctx) {
|
|
93
|
+
if (ctx.value instanceof VariableDefinition) {
|
|
94
|
+
return ctx.value.name;
|
|
95
|
+
}
|
|
96
|
+
if (ctx.value instanceof PredicateEvaluationReference) {
|
|
97
|
+
throw `Predicate references are allowed only on relations.
|
|
98
|
+
You cannot use "can${upperCaseFirst(ctx.value.operation)}(${ctx.value.field ? JSON.stringify(ctx.value.field) : ""})" on a column "${ctx.column.name}" of entity "${ctx.entity.name}".`;
|
|
99
|
+
}
|
|
100
|
+
return ctx.value;
|
|
101
|
+
},
|
|
102
|
+
handleRelation(ctx) {
|
|
103
|
+
if (ctx.value instanceof VariableDefinition) {
|
|
104
|
+
return { [ctx.targetEntity.primary]: ctx.value.name };
|
|
105
|
+
}
|
|
106
|
+
if (ctx.value instanceof PredicateEvaluationReference) {
|
|
107
|
+
const targetPermissions = rolePermissionsByEntity.get(ctx.targetEntity.name);
|
|
108
|
+
if (!targetPermissions) {
|
|
109
|
+
return { [ctx.targetEntity.primary]: { never: true } };
|
|
110
|
+
}
|
|
111
|
+
const ref = ctx.value;
|
|
112
|
+
const whens = EntityPredicatesResolver.getMatchingWhens(targetPermissions.definitions, ref.operation, ref.field ?? "", false);
|
|
113
|
+
if (whens.length === 0) {
|
|
114
|
+
return { [ctx.targetEntity.primary]: { never: true } };
|
|
115
|
+
}
|
|
116
|
+
if (whens.includes(true)) {
|
|
117
|
+
return { [ctx.targetEntity.primary]: { isNull: false } };
|
|
118
|
+
}
|
|
119
|
+
const predicates = whens.map(
|
|
120
|
+
(it) => EntityPredicatesResolver.resolvePredicate(model, ctx.targetEntity, it, rolePermissionsByEntity)
|
|
121
|
+
);
|
|
122
|
+
if (predicates.length > 1) {
|
|
123
|
+
return { or: predicates };
|
|
124
|
+
}
|
|
125
|
+
return predicates[0];
|
|
126
|
+
}
|
|
127
|
+
return ctx.value;
|
|
128
|
+
}
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
static getMatchingWhens(permissions, operation, field, isPrimary) {
|
|
132
|
+
return permissions.filter((it) => {
|
|
133
|
+
if (operation === "delete") {
|
|
134
|
+
return !!it.delete;
|
|
135
|
+
}
|
|
136
|
+
const op = it[operation];
|
|
137
|
+
if (!op) {
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
if (op === true) {
|
|
141
|
+
return !isPrimary;
|
|
142
|
+
}
|
|
143
|
+
return op.includes(field);
|
|
144
|
+
}).map((it) => it.when ?? true);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const upperCaseFirst = (string) => `${string.charAt(0).toUpperCase()}${string.substring(1)}`;
|
|
148
|
+
export {
|
|
149
|
+
EntityPredicatesResolver
|
|
150
|
+
};
|
|
151
|
+
//# sourceMappingURL=EntityPredicateResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EntityPredicateResolver.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/EntityPredicateResolver.ts"],"sourcesContent":["import { isDeepStrictEqual } from 'node:util'\n\nimport { Acl, Input, Model, Writable } from '@contember/schema'\nimport { PredicateDefinitionProcessor } from '@contember/schema-utils'\n\nimport { PermissionsByEntity } from './AclFactory'\nimport { createPredicateName } from './createPredicateName'\nimport { AllowDefinition, PredicateExtra, WhenDefinition } from '../permissions'\nimport { PredicateEvaluationReference } from '../references'\nimport { VariableDefinition } from '../variables'\n\nexport class EntityPredicatesResolver {\n\tprivate usedPredicates: string[] = []\n\n\tprivate constructor(\n\t\tprivate aclDefinitions: AllowDefinition<any>[],\n\t\tprivate predicates: Writable<Acl.PredicateMap>,\n\t\tprivate predicateNamesMap: Map<WhenDefinition, string>,\n\t\tprivate generatedNames: Set<string>,\n\t) {\n\t}\n\n\tpublic static create(\n\t\trolePermissions: PermissionsByEntity,\n\t\tmodel: Model.Schema,\n\t\tentity: Model.Entity,\n\t): EntityPredicatesResolver {\n\t\tconst predicates: Writable<Acl.PredicateMap> = {}\n\t\tconst predicateNamesMap = new Map<WhenDefinition, string>()\n\t\tconst aclDefinitions = rolePermissions.get(entity.name)?.definitions ?? []\n\t\tconst generatedNames = new Set<string>()\n\t\tconst definedNames = new Set<string>(aclDefinitions.map(it => it.name).filter((it): it is string => it !== undefined))\n\t\tfor (const permission of aclDefinitions) {\n\t\t\tif (!permission.when) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst resolvedPredicate = EntityPredicatesResolver.resolvePredicate(model, entity, permission.when, rolePermissions)\n\t\t\tlet predicateName = permission.name ?? createPredicateName(resolvedPredicate)\n\t\t\twhile (predicateName in predicates || definedNames.has(predicateName)) {\n\t\t\t\tpredicateName += '_'\n\t\t\t}\n\t\t\tif (!permission.name) {\n\t\t\t\tgeneratedNames.add(predicateName)\n\t\t\t}\n\t\t\tpredicates[predicateName] = resolvedPredicate\n\t\t\tpredicateNamesMap.set(permission.when, predicateName)\n\t\t}\n\t\tfor (const op of ['read', 'update', 'create'] as const) {\n\t\t\tfor (const definition of aclDefinitions) {\n\t\t\t\tconst fields = definition[op]\n\t\t\t\tif (!Array.isArray(fields)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tfor (const field of fields) {\n\t\t\t\t\tif (!(field in entity.fields)) {\n\t\t\t\t\t\tthrow `Field \"${String(field)}\" does not exist on entity \"${entity.name}\" in ${op} ACL definition.`\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn new EntityPredicatesResolver(aclDefinitions, predicates, predicateNamesMap, generatedNames)\n\t}\n\n\tcreateFieldPredicate(op: 'create' | 'update' | 'read' | 'delete', field: string, isPrimary: boolean): true | undefined | string {\n\t\tconst fieldWhens = EntityPredicatesResolver.getMatchingWhens(this.aclDefinitions, op, field, isPrimary)\n\t\tif (fieldWhens.length === 0) {\n\t\t\treturn undefined\n\t\t}\n\t\tif (fieldWhens.includes(true)) {\n\t\t\treturn true\n\t\t}\n\t\tconst predicateNames = (fieldWhens as WhenDefinition[]).map(it => {\n\t\t\tconst name = this.predicateNamesMap.get(it)\n\t\t\tif (!name) throw new Error('implementation error')\n\t\t\treturn name\n\t\t})\n\t\tif (predicateNames.length === 1) {\n\t\t\tthis.usedPredicates.push(predicateNames[0])\n\t\t\treturn predicateNames[0]\n\t\t}\n\n\n\t\tconst predicate = { or: predicateNames.map(it => this.predicates[it]) }\n\t\tconst origName = predicateNames.every(it => this.generatedNames.has(it)) ? createPredicateName(predicate) : predicateNames.join('_or_')\n\t\tlet predicateName = origName\n\t\tfor (let i = 1;; i++) {\n\t\t\tif (!(predicateName in this.predicates)) {\n\t\t\t\tthis.predicates[predicateName] = predicate\n\t\t\t\tbreak\n\t\t\t} else if (isDeepStrictEqual(predicate, this.predicates[predicateName])) {\n\t\t\t\tbreak\n\t\t\t} else {\n\t\t\t\tpredicateName = `${origName}_${i}`\n\t\t\t}\n\t\t}\n\t\tthis.usedPredicates.push(predicateName)\n\t\treturn predicateName\n\t}\n\n\tgetUsedPredicates(): Acl.PredicateMap {\n\t\treturn Object.fromEntries(Object.entries(this.predicates).filter(([name]) => this.usedPredicates.includes(name)))\n\t}\n\n\n\tprivate static resolvePredicate(\n\t\tmodel: Model.Schema,\n\t\tentity: Model.Entity,\n\t\twhen: WhenDefinition,\n\t\trolePermissionsByEntity: PermissionsByEntity,\n\t): Acl.PredicateDefinition {\n\t\tconst processor = new PredicateDefinitionProcessor(model)\n\t\treturn processor.process<Acl.PredicateReference | Input.Condition, PredicateExtra>(entity, when, {\n\t\t\thandleColumn(ctx) {\n\t\t\t\tif (ctx.value instanceof VariableDefinition) {\n\t\t\t\t\treturn ctx.value.name\n\t\t\t\t}\n\t\t\t\tif (ctx.value instanceof PredicateEvaluationReference) {\n\t\t\t\t\tthrow `Predicate references are allowed only on relations. \\nYou cannot use \"can${upperCaseFirst(ctx.value.operation)}(${ctx.value.field ? JSON.stringify(ctx.value.field) : ''})\" on a column \"${ctx.column.name}\" of entity \"${ctx.entity.name}\".`\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t\thandleRelation(ctx) {\n\t\t\t\tif (ctx.value instanceof VariableDefinition) {\n\t\t\t\t\treturn { [ctx.targetEntity.primary]: ctx.value.name }\n\t\t\t\t}\n\t\t\t\tif (ctx.value instanceof PredicateEvaluationReference) {\n\t\t\t\t\tconst targetPermissions = rolePermissionsByEntity.get(ctx.targetEntity.name)\n\t\t\t\t\tif (!targetPermissions) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { never: true } }\n\t\t\t\t\t}\n\t\t\t\t\tconst ref = ctx.value\n\t\t\t\t\tconst whens = EntityPredicatesResolver.getMatchingWhens(targetPermissions.definitions, ref.operation, ref.field ?? '', false)\n\t\t\t\t\tif (whens.length === 0) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { never: true } }\n\t\t\t\t\t}\n\t\t\t\t\tif (whens.includes(true)) {\n\t\t\t\t\t\treturn { [ctx.targetEntity.primary]: { isNull: false } }\n\t\t\t\t\t}\n\t\t\t\t\tconst predicates = (whens as WhenDefinition[]).map(it =>\n\t\t\t\t\t\tEntityPredicatesResolver.resolvePredicate(model, ctx.targetEntity, it, rolePermissionsByEntity),\n\t\t\t\t\t)\n\t\t\t\t\tif (predicates.length > 1) {\n\t\t\t\t\t\treturn { or: predicates }\n\t\t\t\t\t}\n\t\t\t\t\treturn predicates[0]\n\t\t\t\t}\n\t\t\t\treturn ctx.value\n\t\t\t},\n\t\t})\n\t}\n\n\tprivate static getMatchingWhens(\n\t\tpermissions: AllowDefinition<any>[],\n\t\toperation: 'delete' | 'read' | 'update' | 'create',\n\t\tfield: string,\n\t\tisPrimary: boolean,\n\t) {\n\t\treturn permissions\n\t\t\t.filter(it => {\n\t\t\t\tif (operation === 'delete') {\n\t\t\t\t\treturn !!it.delete\n\t\t\t\t}\n\t\t\t\tconst op = it[operation]\n\t\t\t\tif (!op) {\n\t\t\t\t\treturn false\n\t\t\t\t}\n\t\t\t\tif (op === true) {\n\t\t\t\t\treturn !isPrimary\n\t\t\t\t}\n\t\t\t\treturn op.includes(field)\n\t\t\t})\n\t\t\t.map(it => it.when ?? true)\n\t}\n}\n\nconst upperCaseFirst = (string: string) => `${string.charAt(0).toUpperCase()}${string.substring(1)}`\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const createPredicateName = (when) => {
|
|
4
|
+
const json = JSON.stringify(when);
|
|
5
|
+
return json.replace(/[^A-Za-z0-9]+/g, "_").slice(0, 30).replace(/^_|_$/g, "");
|
|
6
|
+
};
|
|
7
|
+
exports.createPredicateName = createPredicateName;
|
|
8
|
+
//# sourceMappingURL=createPredicateName.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPredicateName.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/createPredicateName.ts"],"sourcesContent":["import { WhenDefinition } from '../permissions'\n\nexport const createPredicateName = (when: WhenDefinition) => {\n\tconst json = JSON.stringify(when)\n\treturn json.replace(/[^A-Za-z0-9]+/g, '_').slice(0, 30).replace(/^_|_$/g, '')\n}\n"],"names":[],"mappings":";;AAEa,MAAA,sBAAsB,CAAC,SAAyB;AACtD,QAAA,OAAO,KAAK,UAAU,IAAI;AACzB,SAAA,KAAK,QAAQ,kBAAkB,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,QAAQ,UAAU,EAAE;AAC7E;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createPredicateName.js","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/createPredicateName.ts"],"sourcesContent":["import { WhenDefinition } from '../permissions'\n\nexport const createPredicateName = (when: WhenDefinition) => {\n\tconst json = JSON.stringify(when)\n\treturn json.replace(/[^A-Za-z0-9]+/g, '_').slice(0, 30).replace(/^_|_$/g, '')\n}\n"],"names":[],"mappings":"AAEa,MAAA,sBAAsB,CAAC,SAAyB;AACtD,QAAA,OAAO,KAAK,UAAU,IAAI;AACzB,SAAA,KAAK,QAAQ,kBAAkB,GAAG,EAAE,MAAM,GAAG,EAAE,EAAE,QAAQ,UAAU,EAAE;AAC7E;"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const MetadataStore = require("../../../utils/MetadataStore.cjs");
|
|
4
|
+
const allowCustomPrimaryStore = MetadataStore.createMetadataStore([]);
|
|
5
|
+
const allowCustomPrimaryAllRolesStore = MetadataStore.createMetadataStore(false);
|
|
6
|
+
const allowDefinitionsStore = MetadataStore.createMetadataStore([]);
|
|
7
|
+
exports.allowCustomPrimaryAllRolesStore = allowCustomPrimaryAllRolesStore;
|
|
8
|
+
exports.allowCustomPrimaryStore = allowCustomPrimaryStore;
|
|
9
|
+
exports.allowDefinitionsStore = allowDefinitionsStore;
|
|
10
|
+
//# sourceMappingURL=stores.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stores.cjs","sources":["../../../../../../../packages/schema-definition/src/acl/definition/internal/stores.ts"],"sourcesContent":["import { createMetadataStore } from '../../../utils/MetadataStore'\nimport { Role } from '../roles'\nimport { AllowDefinition } from '../permissions'\n\nexport const allowCustomPrimaryStore = createMetadataStore<Role[]>([])\nexport const allowCustomPrimaryAllRolesStore = createMetadataStore<boolean>(false)\n\nexport type EntityPermissionsDefinition =\n\t& AllowDefinition<any>\n\t& {\n\t\trole: Role<string>\n\t}\nexport const allowDefinitionsStore = createMetadataStore<EntityPermissionsDefinition[]>([])\n"],"names":["createMetadataStore"],"mappings":";;;AAIa,MAAA,0BAA0BA,cAA4B,oBAAA,EAAE;AACxD,MAAA,kCAAkCA,kCAA6B,KAAK;AAOpE,MAAA,wBAAwBA,cAAmD,oBAAA,CAAE,CAAA;;;;"}
|