@contember/schema-utils 2.1.0-alpha.3 → 2.1.0-alpha.35
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/package.json +11 -6
- package/src/acl/AllowAllPermissionFactory.ts +1 -1
- package/src/acl/PredicateDefinitionProcessor.ts +5 -7
- package/src/dataUtils.ts +1 -1
- package/src/definition-generator/AclDefinitionCodeGenerator.ts +7 -8
- package/src/definition-generator/DefinitionCodeGenerator.ts +8 -14
- package/src/definition-generator/DefinitionNamingConventions.ts +50 -1
- package/src/index.ts +2 -2
- package/src/lax/LaxSchemaConverter.ts +0 -4
- package/src/lax/schema.ts +4 -1
- package/src/model/modelUtils.ts +2 -4
- package/src/schemaChecksum.ts +0 -1
- package/src/schemaFilter.ts +1 -1
- package/src/type-schema/acl.ts +15 -12
- package/src/type-schema/actions.ts +1 -2
- package/src/type-schema/condition.ts +25 -20
- package/src/type-schema/model.ts +12 -8
- package/src/type-schema/validation.ts +5 -4
- package/src/type-schema/where.ts +11 -9
- package/src/utils/deepCompare.ts +1 -1
- package/src/utils/printJsValue.ts +23 -25
- package/src/validation/AclValidator.ts +0 -2
- package/src/validation/ActionsValidator.ts +7 -7
- package/src/validation/MembershipResolver.ts +10 -9
- package/src/validation/ModelValidator.ts +43 -32
- package/src/validation/SchemaValidator.ts +7 -6
- package/src/validation/ValidationValidator.ts +1 -3
- package/src/validation/errors.ts +0 -3
- package/tests/cases/unit/conditionSchema.test.ts +1 -2
- package/tests/cases/unit/deepCompare.test.ts +2 -3
- package/tests/cases/unit/laxSchemaConverter.test.ts +0 -4
- package/tests/cases/unit/membershipResolver.test.ts +136 -49
- package/tests/cases/unit/modelSchema.test.ts +4 -4
- package/tests/cases/unit/modelValidator.test.ts +0 -1
- package/tests/cases/unit/printJsvalue.test.ts +11 -7
- package/tests/cases/unit/whereSchema.test.ts +19 -18
- package/dist/development/index.cjs +0 -110
- package/dist/development/index.cjs.map +0 -1
- package/dist/development/index.js +0 -94
- package/dist/development/index.js.map +0 -1
- package/dist/development/src/acl/AllowAllPermissionFactory.cjs +0 -42
- package/dist/development/src/acl/AllowAllPermissionFactory.cjs.map +0 -1
- package/dist/development/src/acl/AllowAllPermissionFactory.js +0 -42
- package/dist/development/src/acl/AllowAllPermissionFactory.js.map +0 -1
- package/dist/development/src/acl/PredicateDefinitionProcessor.cjs +0 -71
- package/dist/development/src/acl/PredicateDefinitionProcessor.cjs.map +0 -1
- package/dist/development/src/acl/PredicateDefinitionProcessor.js +0 -71
- package/dist/development/src/acl/PredicateDefinitionProcessor.js.map +0 -1
- package/dist/development/src/acl/schemaUtils.cjs +0 -11
- package/dist/development/src/acl/schemaUtils.cjs.map +0 -1
- package/dist/development/src/acl/schemaUtils.js +0 -11
- package/dist/development/src/acl/schemaUtils.js.map +0 -1
- package/dist/development/src/dataUtils.cjs +0 -59
- package/dist/development/src/dataUtils.cjs.map +0 -1
- package/dist/development/src/dataUtils.js +0 -59
- package/dist/development/src/dataUtils.js.map +0 -1
- package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.cjs +0 -117
- package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.cjs.map +0 -1
- package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.js +0 -117
- package/dist/development/src/definition-generator/AclDefinitionCodeGenerator.js.map +0 -1
- package/dist/development/src/definition-generator/DefinitionCodeGenerator.cjs +0 -218
- package/dist/development/src/definition-generator/DefinitionCodeGenerator.cjs.map +0 -1
- package/dist/development/src/definition-generator/DefinitionCodeGenerator.js +0 -218
- package/dist/development/src/definition-generator/DefinitionCodeGenerator.js.map +0 -1
- package/dist/development/src/definition-generator/DefinitionNamingConventions.cjs +0 -19
- package/dist/development/src/definition-generator/DefinitionNamingConventions.cjs.map +0 -1
- package/dist/development/src/definition-generator/DefinitionNamingConventions.js +0 -19
- package/dist/development/src/definition-generator/DefinitionNamingConventions.js.map +0 -1
- package/dist/development/src/definition-generator/TsDefinitionGenerator.cjs +0 -17
- package/dist/development/src/definition-generator/TsDefinitionGenerator.cjs.map +0 -1
- package/dist/development/src/definition-generator/TsDefinitionGenerator.js +0 -17
- package/dist/development/src/definition-generator/TsDefinitionGenerator.js.map +0 -1
- package/dist/development/src/lax/LaxSchemaConverter.cjs +0 -202
- package/dist/development/src/lax/LaxSchemaConverter.cjs.map +0 -1
- package/dist/development/src/lax/LaxSchemaConverter.js +0 -202
- package/dist/development/src/lax/LaxSchemaConverter.js.map +0 -1
- package/dist/development/src/lax/schema.cjs +0 -70
- package/dist/development/src/lax/schema.cjs.map +0 -1
- package/dist/development/src/lax/schema.js +0 -53
- package/dist/development/src/lax/schema.js.map +0 -1
- package/dist/development/src/model/NamingConventions.cjs +0 -28
- package/dist/development/src/model/NamingConventions.cjs.map +0 -1
- package/dist/development/src/model/NamingConventions.js +0 -28
- package/dist/development/src/model/NamingConventions.js.map +0 -1
- package/dist/development/src/model/modelUtils.cjs +0 -231
- package/dist/development/src/model/modelUtils.cjs.map +0 -1
- package/dist/development/src/model/modelUtils.js +0 -231
- package/dist/development/src/model/modelUtils.js.map +0 -1
- package/dist/development/src/model/resolveDefaultColumnType.cjs +0 -30
- package/dist/development/src/model/resolveDefaultColumnType.cjs.map +0 -1
- package/dist/development/src/model/resolveDefaultColumnType.js +0 -30
- package/dist/development/src/model/resolveDefaultColumnType.js.map +0 -1
- package/dist/development/src/schemaChecksum.cjs +0 -9
- package/dist/development/src/schemaChecksum.cjs.map +0 -1
- package/dist/development/src/schemaChecksum.js +0 -9
- package/dist/development/src/schemaChecksum.js.map +0 -1
- package/dist/development/src/schemaFilter.cjs +0 -24
- package/dist/development/src/schemaFilter.cjs.map +0 -1
- package/dist/development/src/schemaFilter.js +0 -24
- package/dist/development/src/schemaFilter.js.map +0 -1
- package/dist/development/src/schemaNormalizer.cjs +0 -72
- package/dist/development/src/schemaNormalizer.cjs.map +0 -1
- package/dist/development/src/schemaNormalizer.js +0 -72
- package/dist/development/src/schemaNormalizer.js.map +0 -1
- package/dist/development/src/type-schema/acl.cjs +0 -146
- package/dist/development/src/type-schema/acl.cjs.map +0 -1
- package/dist/development/src/type-schema/acl.js +0 -129
- package/dist/development/src/type-schema/acl.js.map +0 -1
- package/dist/development/src/type-schema/actions.cjs +0 -87
- package/dist/development/src/type-schema/actions.cjs.map +0 -1
- package/dist/development/src/type-schema/actions.js +0 -70
- package/dist/development/src/type-schema/actions.js.map +0 -1
- package/dist/development/src/type-schema/condition.cjs +0 -89
- package/dist/development/src/type-schema/condition.cjs.map +0 -1
- package/dist/development/src/type-schema/condition.js +0 -72
- package/dist/development/src/type-schema/condition.js.map +0 -1
- package/dist/development/src/type-schema/model.cjs +0 -217
- package/dist/development/src/type-schema/model.cjs.map +0 -1
- package/dist/development/src/type-schema/model.js +0 -201
- package/dist/development/src/type-schema/model.js.map +0 -1
- package/dist/development/src/type-schema/settings.cjs +0 -34
- package/dist/development/src/type-schema/settings.cjs.map +0 -1
- package/dist/development/src/type-schema/settings.js +0 -17
- package/dist/development/src/type-schema/settings.js.map +0 -1
- package/dist/development/src/type-schema/validation.cjs +0 -115
- package/dist/development/src/type-schema/validation.cjs.map +0 -1
- package/dist/development/src/type-schema/validation.js +0 -98
- package/dist/development/src/type-schema/validation.js.map +0 -1
- package/dist/development/src/type-schema/where.cjs +0 -44
- package/dist/development/src/type-schema/where.cjs.map +0 -1
- package/dist/development/src/type-schema/where.js +0 -27
- package/dist/development/src/type-schema/where.js.map +0 -1
- package/dist/development/src/utils/assertNever.cjs +0 -7
- package/dist/development/src/utils/assertNever.cjs.map +0 -1
- package/dist/development/src/utils/assertNever.js +0 -7
- package/dist/development/src/utils/assertNever.js.map +0 -1
- package/dist/development/src/utils/deepCompare.cjs +0 -134
- package/dist/development/src/utils/deepCompare.cjs.map +0 -1
- package/dist/development/src/utils/deepCompare.js +0 -134
- package/dist/development/src/utils/deepCompare.js.map +0 -1
- package/dist/development/src/utils/isIt.cjs +0 -7
- package/dist/development/src/utils/isIt.cjs.map +0 -1
- package/dist/development/src/utils/isIt.js +0 -7
- package/dist/development/src/utils/isIt.js.map +0 -1
- package/dist/development/src/utils/printJsValue.cjs +0 -42
- package/dist/development/src/utils/printJsValue.cjs.map +0 -1
- package/dist/development/src/utils/printJsValue.js +0 -42
- package/dist/development/src/utils/printJsValue.js.map +0 -1
- package/dist/development/src/validation/AclValidator.cjs +0 -168
- package/dist/development/src/validation/AclValidator.cjs.map +0 -1
- package/dist/development/src/validation/AclValidator.js +0 -168
- package/dist/development/src/validation/AclValidator.js.map +0 -1
- package/dist/development/src/validation/ActionsValidator.cjs +0 -127
- package/dist/development/src/validation/ActionsValidator.cjs.map +0 -1
- package/dist/development/src/validation/ActionsValidator.js +0 -110
- package/dist/development/src/validation/ActionsValidator.js.map +0 -1
- package/dist/development/src/validation/MembershipResolver.cjs +0 -126
- package/dist/development/src/validation/MembershipResolver.cjs.map +0 -1
- package/dist/development/src/validation/MembershipResolver.js +0 -126
- package/dist/development/src/validation/MembershipResolver.js.map +0 -1
- package/dist/development/src/validation/ModelValidator.cjs +0 -310
- package/dist/development/src/validation/ModelValidator.cjs.map +0 -1
- package/dist/development/src/validation/ModelValidator.js +0 -310
- package/dist/development/src/validation/ModelValidator.js.map +0 -1
- package/dist/development/src/validation/SchemaValidator.cjs +0 -29
- package/dist/development/src/validation/SchemaValidator.cjs.map +0 -1
- package/dist/development/src/validation/SchemaValidator.js +0 -29
- package/dist/development/src/validation/SchemaValidator.js.map +0 -1
- package/dist/development/src/validation/ValidationValidator.cjs +0 -121
- package/dist/development/src/validation/ValidationValidator.cjs.map +0 -1
- package/dist/development/src/validation/ValidationValidator.js +0 -121
- package/dist/development/src/validation/ValidationValidator.js.map +0 -1
- package/dist/development/src/validation/errors.cjs +0 -16
- package/dist/development/src/validation/errors.cjs.map +0 -1
- package/dist/development/src/validation/errors.js +0 -16
- package/dist/development/src/validation/errors.js.map +0 -1
- package/dist/production/index.cjs +0 -110
- package/dist/production/index.cjs.map +0 -1
- package/dist/production/index.js +0 -94
- package/dist/production/index.js.map +0 -1
- package/dist/production/src/acl/AllowAllPermissionFactory.cjs +0 -42
- package/dist/production/src/acl/AllowAllPermissionFactory.cjs.map +0 -1
- package/dist/production/src/acl/AllowAllPermissionFactory.js +0 -42
- package/dist/production/src/acl/AllowAllPermissionFactory.js.map +0 -1
- package/dist/production/src/acl/PredicateDefinitionProcessor.cjs +0 -71
- package/dist/production/src/acl/PredicateDefinitionProcessor.cjs.map +0 -1
- package/dist/production/src/acl/PredicateDefinitionProcessor.js +0 -71
- package/dist/production/src/acl/PredicateDefinitionProcessor.js.map +0 -1
- package/dist/production/src/acl/schemaUtils.cjs +0 -11
- package/dist/production/src/acl/schemaUtils.cjs.map +0 -1
- package/dist/production/src/acl/schemaUtils.js +0 -11
- package/dist/production/src/acl/schemaUtils.js.map +0 -1
- package/dist/production/src/dataUtils.cjs +0 -59
- package/dist/production/src/dataUtils.cjs.map +0 -1
- package/dist/production/src/dataUtils.js +0 -59
- package/dist/production/src/dataUtils.js.map +0 -1
- package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.cjs +0 -117
- package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.cjs.map +0 -1
- package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.js +0 -117
- package/dist/production/src/definition-generator/AclDefinitionCodeGenerator.js.map +0 -1
- package/dist/production/src/definition-generator/DefinitionCodeGenerator.cjs +0 -218
- package/dist/production/src/definition-generator/DefinitionCodeGenerator.cjs.map +0 -1
- package/dist/production/src/definition-generator/DefinitionCodeGenerator.js +0 -218
- package/dist/production/src/definition-generator/DefinitionCodeGenerator.js.map +0 -1
- package/dist/production/src/definition-generator/DefinitionNamingConventions.cjs +0 -19
- package/dist/production/src/definition-generator/DefinitionNamingConventions.cjs.map +0 -1
- package/dist/production/src/definition-generator/DefinitionNamingConventions.js +0 -19
- package/dist/production/src/definition-generator/DefinitionNamingConventions.js.map +0 -1
- package/dist/production/src/definition-generator/TsDefinitionGenerator.cjs +0 -17
- package/dist/production/src/definition-generator/TsDefinitionGenerator.cjs.map +0 -1
- package/dist/production/src/definition-generator/TsDefinitionGenerator.js +0 -17
- package/dist/production/src/definition-generator/TsDefinitionGenerator.js.map +0 -1
- package/dist/production/src/lax/LaxSchemaConverter.cjs +0 -202
- package/dist/production/src/lax/LaxSchemaConverter.cjs.map +0 -1
- package/dist/production/src/lax/LaxSchemaConverter.js +0 -202
- package/dist/production/src/lax/LaxSchemaConverter.js.map +0 -1
- package/dist/production/src/lax/schema.cjs +0 -70
- package/dist/production/src/lax/schema.cjs.map +0 -1
- package/dist/production/src/lax/schema.js +0 -53
- package/dist/production/src/lax/schema.js.map +0 -1
- package/dist/production/src/model/NamingConventions.cjs +0 -28
- package/dist/production/src/model/NamingConventions.cjs.map +0 -1
- package/dist/production/src/model/NamingConventions.js +0 -28
- package/dist/production/src/model/NamingConventions.js.map +0 -1
- package/dist/production/src/model/modelUtils.cjs +0 -231
- package/dist/production/src/model/modelUtils.cjs.map +0 -1
- package/dist/production/src/model/modelUtils.js +0 -231
- package/dist/production/src/model/modelUtils.js.map +0 -1
- package/dist/production/src/model/resolveDefaultColumnType.cjs +0 -30
- package/dist/production/src/model/resolveDefaultColumnType.cjs.map +0 -1
- package/dist/production/src/model/resolveDefaultColumnType.js +0 -30
- package/dist/production/src/model/resolveDefaultColumnType.js.map +0 -1
- package/dist/production/src/schemaChecksum.cjs +0 -9
- package/dist/production/src/schemaChecksum.cjs.map +0 -1
- package/dist/production/src/schemaChecksum.js +0 -9
- package/dist/production/src/schemaChecksum.js.map +0 -1
- package/dist/production/src/schemaFilter.cjs +0 -24
- package/dist/production/src/schemaFilter.cjs.map +0 -1
- package/dist/production/src/schemaFilter.js +0 -24
- package/dist/production/src/schemaFilter.js.map +0 -1
- package/dist/production/src/schemaNormalizer.cjs +0 -72
- package/dist/production/src/schemaNormalizer.cjs.map +0 -1
- package/dist/production/src/schemaNormalizer.js +0 -72
- package/dist/production/src/schemaNormalizer.js.map +0 -1
- package/dist/production/src/type-schema/acl.cjs +0 -146
- package/dist/production/src/type-schema/acl.cjs.map +0 -1
- package/dist/production/src/type-schema/acl.js +0 -129
- package/dist/production/src/type-schema/acl.js.map +0 -1
- package/dist/production/src/type-schema/actions.cjs +0 -87
- package/dist/production/src/type-schema/actions.cjs.map +0 -1
- package/dist/production/src/type-schema/actions.js +0 -70
- package/dist/production/src/type-schema/actions.js.map +0 -1
- package/dist/production/src/type-schema/condition.cjs +0 -89
- package/dist/production/src/type-schema/condition.cjs.map +0 -1
- package/dist/production/src/type-schema/condition.js +0 -72
- package/dist/production/src/type-schema/condition.js.map +0 -1
- package/dist/production/src/type-schema/model.cjs +0 -217
- package/dist/production/src/type-schema/model.cjs.map +0 -1
- package/dist/production/src/type-schema/model.js +0 -201
- package/dist/production/src/type-schema/model.js.map +0 -1
- package/dist/production/src/type-schema/settings.cjs +0 -34
- package/dist/production/src/type-schema/settings.cjs.map +0 -1
- package/dist/production/src/type-schema/settings.js +0 -17
- package/dist/production/src/type-schema/settings.js.map +0 -1
- package/dist/production/src/type-schema/validation.cjs +0 -115
- package/dist/production/src/type-schema/validation.cjs.map +0 -1
- package/dist/production/src/type-schema/validation.js +0 -98
- package/dist/production/src/type-schema/validation.js.map +0 -1
- package/dist/production/src/type-schema/where.cjs +0 -44
- package/dist/production/src/type-schema/where.cjs.map +0 -1
- package/dist/production/src/type-schema/where.js +0 -27
- package/dist/production/src/type-schema/where.js.map +0 -1
- package/dist/production/src/utils/assertNever.cjs +0 -7
- package/dist/production/src/utils/assertNever.cjs.map +0 -1
- package/dist/production/src/utils/assertNever.js +0 -7
- package/dist/production/src/utils/assertNever.js.map +0 -1
- package/dist/production/src/utils/deepCompare.cjs +0 -134
- package/dist/production/src/utils/deepCompare.cjs.map +0 -1
- package/dist/production/src/utils/deepCompare.js +0 -134
- package/dist/production/src/utils/deepCompare.js.map +0 -1
- package/dist/production/src/utils/isIt.cjs +0 -7
- package/dist/production/src/utils/isIt.cjs.map +0 -1
- package/dist/production/src/utils/isIt.js +0 -7
- package/dist/production/src/utils/isIt.js.map +0 -1
- package/dist/production/src/utils/printJsValue.cjs +0 -42
- package/dist/production/src/utils/printJsValue.cjs.map +0 -1
- package/dist/production/src/utils/printJsValue.js +0 -42
- package/dist/production/src/utils/printJsValue.js.map +0 -1
- package/dist/production/src/validation/AclValidator.cjs +0 -168
- package/dist/production/src/validation/AclValidator.cjs.map +0 -1
- package/dist/production/src/validation/AclValidator.js +0 -168
- package/dist/production/src/validation/AclValidator.js.map +0 -1
- package/dist/production/src/validation/ActionsValidator.cjs +0 -127
- package/dist/production/src/validation/ActionsValidator.cjs.map +0 -1
- package/dist/production/src/validation/ActionsValidator.js +0 -110
- package/dist/production/src/validation/ActionsValidator.js.map +0 -1
- package/dist/production/src/validation/MembershipResolver.cjs +0 -126
- package/dist/production/src/validation/MembershipResolver.cjs.map +0 -1
- package/dist/production/src/validation/MembershipResolver.js +0 -126
- package/dist/production/src/validation/MembershipResolver.js.map +0 -1
- package/dist/production/src/validation/ModelValidator.cjs +0 -310
- package/dist/production/src/validation/ModelValidator.cjs.map +0 -1
- package/dist/production/src/validation/ModelValidator.js +0 -310
- package/dist/production/src/validation/ModelValidator.js.map +0 -1
- package/dist/production/src/validation/SchemaValidator.cjs +0 -29
- package/dist/production/src/validation/SchemaValidator.cjs.map +0 -1
- package/dist/production/src/validation/SchemaValidator.js +0 -29
- package/dist/production/src/validation/SchemaValidator.js.map +0 -1
- package/dist/production/src/validation/ValidationValidator.cjs +0 -121
- package/dist/production/src/validation/ValidationValidator.cjs.map +0 -1
- package/dist/production/src/validation/ValidationValidator.js +0 -121
- package/dist/production/src/validation/ValidationValidator.js.map +0 -1
- package/dist/production/src/validation/errors.cjs +0 -16
- package/dist/production/src/validation/errors.cjs.map +0 -1
- package/dist/production/src/validation/errors.js +0 -16
- package/dist/production/src/validation/errors.js.map +0 -1
- package/dist/tests/cases/unit/conditionSchema.test.d.ts +0 -2
- package/dist/tests/cases/unit/conditionSchema.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/deepCompare.test.d.ts +0 -2
- package/dist/tests/cases/unit/deepCompare.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/laxSchemaConverter.test.d.ts +0 -2
- package/dist/tests/cases/unit/laxSchemaConverter.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/membershipResolver.test.d.ts +0 -2
- package/dist/tests/cases/unit/membershipResolver.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/modelSchema.test.d.ts +0 -2
- package/dist/tests/cases/unit/modelSchema.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/modelValidator.test.d.ts +0 -2
- package/dist/tests/cases/unit/modelValidator.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/printJsvalue.test.d.ts +0 -2
- package/dist/tests/cases/unit/printJsvalue.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/schemas/acl.d.ts +0 -12
- package/dist/tests/cases/unit/schemas/acl.d.ts.map +0 -1
- package/dist/tests/cases/unit/schemas/basic.d.ts +0 -4
- package/dist/tests/cases/unit/schemas/basic.d.ts.map +0 -1
- package/dist/tests/cases/unit/schemas/complex.d.ts +0 -12
- package/dist/tests/cases/unit/schemas/complex.d.ts.map +0 -1
- package/dist/tests/cases/unit/schemas/enum.d.ts +0 -6
- package/dist/tests/cases/unit/schemas/enum.d.ts.map +0 -1
- package/dist/tests/cases/unit/schemas/relations.d.ts +0 -14
- package/dist/tests/cases/unit/schemas/relations.d.ts.map +0 -1
- package/dist/tests/cases/unit/schemas/unique.d.ts +0 -4
- package/dist/tests/cases/unit/schemas/unique.d.ts.map +0 -1
- package/dist/tests/cases/unit/schemas/view.d.ts +0 -4
- package/dist/tests/cases/unit/schemas/view.d.ts.map +0 -1
- package/dist/tests/cases/unit/tsDefinitionGenerator.test.d.ts +0 -2
- package/dist/tests/cases/unit/tsDefinitionGenerator.test.d.ts.map +0 -1
- package/dist/tests/cases/unit/whereSchema.test.d.ts +0 -2
- package/dist/tests/cases/unit/whereSchema.test.d.ts.map +0 -1
- package/dist/tests/tsconfig.tsbuildinfo +0 -1
- package/dist/types/acl/AllowAllPermissionFactory.d.ts +0 -7
- package/dist/types/acl/AllowAllPermissionFactory.d.ts.map +0 -1
- package/dist/types/acl/PredicateDefinitionProcessor.d.ts +0 -32
- package/dist/types/acl/PredicateDefinitionProcessor.d.ts.map +0 -1
- package/dist/types/acl/index.d.ts +0 -4
- package/dist/types/acl/index.d.ts.map +0 -1
- package/dist/types/acl/schemaUtils.d.ts +0 -3
- package/dist/types/acl/schemaUtils.d.ts.map +0 -1
- package/dist/types/dataUtils.d.ts +0 -18
- package/dist/types/dataUtils.d.ts.map +0 -1
- package/dist/types/definition-generator/AclDefinitionCodeGenerator.d.ts +0 -19
- package/dist/types/definition-generator/AclDefinitionCodeGenerator.d.ts.map +0 -1
- package/dist/types/definition-generator/DefinitionCodeGenerator.d.ts +0 -27
- package/dist/types/definition-generator/DefinitionCodeGenerator.d.ts.map +0 -1
- package/dist/types/definition-generator/DefinitionNamingConventions.d.ts +0 -7
- package/dist/types/definition-generator/DefinitionNamingConventions.d.ts.map +0 -1
- package/dist/types/definition-generator/TsDefinitionGenerator.d.ts +0 -12
- package/dist/types/definition-generator/TsDefinitionGenerator.d.ts.map +0 -1
- package/dist/types/definition-generator/index.d.ts +0 -5
- package/dist/types/definition-generator/index.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -15
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/lax/LaxSchemaConverter.d.ts +0 -10
- package/dist/types/lax/LaxSchemaConverter.d.ts.map +0 -1
- package/dist/types/lax/index.d.ts +0 -3
- package/dist/types/lax/index.d.ts.map +0 -1
- package/dist/types/lax/schema.d.ts +0 -285
- package/dist/types/lax/schema.d.ts.map +0 -1
- package/dist/types/model/NamingConventions.d.ts +0 -17
- package/dist/types/model/NamingConventions.d.ts.map +0 -1
- package/dist/types/model/index.d.ts +0 -4
- package/dist/types/model/index.d.ts.map +0 -1
- package/dist/types/model/modelUtils.d.ts +0 -28
- package/dist/types/model/modelUtils.d.ts.map +0 -1
- package/dist/types/model/resolveDefaultColumnType.d.ts +0 -3
- package/dist/types/model/resolveDefaultColumnType.d.ts.map +0 -1
- package/dist/types/schemaChecksum.d.ts +0 -3
- package/dist/types/schemaChecksum.d.ts.map +0 -1
- package/dist/types/schemaFilter.d.ts +0 -3
- package/dist/types/schemaFilter.d.ts.map +0 -1
- package/dist/types/schemaNormalizer.d.ts +0 -3
- package/dist/types/schemaNormalizer.d.ts.map +0 -1
- package/dist/types/tsconfig.tsbuildinfo +0 -1
- package/dist/types/type-schema/acl.d.ts +0 -10
- package/dist/types/type-schema/acl.d.ts.map +0 -1
- package/dist/types/type-schema/actions.d.ts +0 -31
- package/dist/types/type-schema/actions.d.ts.map +0 -1
- package/dist/types/type-schema/condition.d.ts +0 -4
- package/dist/types/type-schema/condition.d.ts.map +0 -1
- package/dist/types/type-schema/index.d.ts +0 -6
- package/dist/types/type-schema/index.d.ts.map +0 -1
- package/dist/types/type-schema/model.d.ts +0 -30
- package/dist/types/type-schema/model.d.ts.map +0 -1
- package/dist/types/type-schema/settings.d.ts +0 -41
- package/dist/types/type-schema/settings.d.ts.map +0 -1
- package/dist/types/type-schema/validation.d.ts +0 -15
- package/dist/types/type-schema/validation.d.ts.map +0 -1
- package/dist/types/type-schema/where.d.ts +0 -7
- package/dist/types/type-schema/where.d.ts.map +0 -1
- package/dist/types/utils/assertNever.d.ts +0 -2
- package/dist/types/utils/assertNever.d.ts.map +0 -1
- package/dist/types/utils/deepCompare.d.ts +0 -13
- package/dist/types/utils/deepCompare.d.ts.map +0 -1
- package/dist/types/utils/index.d.ts +0 -4
- package/dist/types/utils/index.d.ts.map +0 -1
- package/dist/types/utils/isIt.d.ts +0 -2
- package/dist/types/utils/isIt.d.ts.map +0 -1
- package/dist/types/utils/printJsValue.d.ts +0 -13
- package/dist/types/utils/printJsValue.d.ts.map +0 -1
- package/dist/types/validation/AclValidator.d.ts +0 -20
- package/dist/types/validation/AclValidator.d.ts.map +0 -1
- package/dist/types/validation/ActionsValidator.d.ts +0 -13
- package/dist/types/validation/ActionsValidator.d.ts.map +0 -1
- package/dist/types/validation/MembershipResolver.d.ts +0 -37
- package/dist/types/validation/MembershipResolver.d.ts.map +0 -1
- package/dist/types/validation/ModelValidator.d.ts +0 -20
- package/dist/types/validation/ModelValidator.d.ts.map +0 -1
- package/dist/types/validation/SchemaValidator.d.ts +0 -11
- package/dist/types/validation/SchemaValidator.d.ts.map +0 -1
- package/dist/types/validation/ValidationValidator.d.ts +0 -14
- package/dist/types/validation/ValidationValidator.d.ts.map +0 -1
- package/dist/types/validation/errors.d.ts +0 -14
- package/dist/types/validation/errors.d.ts.map +0 -1
- package/dist/types/validation/index.d.ts +0 -7
- package/dist/types/validation/index.d.ts.map +0 -1
- package/tests/cases/unit/schemas/.eslintignore +0 -1
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import * as Typesafe from "@contember/typesafe";
|
|
2
|
-
const LaxSchemaEnumInner = Typesafe.intersection(
|
|
3
|
-
Typesafe.object({
|
|
4
|
-
values: Typesafe.array(Typesafe.string),
|
|
5
|
-
enumName: Typesafe.string
|
|
6
|
-
}),
|
|
7
|
-
Typesafe.partial({
|
|
8
|
-
notNull: Typesafe.boolean,
|
|
9
|
-
unique: Typesafe.boolean
|
|
10
|
-
})
|
|
11
|
-
);
|
|
12
|
-
const LaxSchemaColumnInner = Typesafe.partial({
|
|
13
|
-
notNull: Typesafe.boolean,
|
|
14
|
-
unique: Typesafe.boolean
|
|
15
|
-
});
|
|
16
|
-
const LaxSchemaRelationInner = Typesafe.intersection(
|
|
17
|
-
Typesafe.object({
|
|
18
|
-
targetEntity: Typesafe.string,
|
|
19
|
-
targetField: Typesafe.string
|
|
20
|
-
}),
|
|
21
|
-
Typesafe.partial({
|
|
22
|
-
notNull: Typesafe.boolean
|
|
23
|
-
})
|
|
24
|
-
);
|
|
25
|
-
const LaxSchemaField = Typesafe.discriminatedUnion("type", {
|
|
26
|
-
oneHasOne: LaxSchemaRelationInner,
|
|
27
|
-
oneHasOneInverse: LaxSchemaRelationInner,
|
|
28
|
-
manyHasMany: LaxSchemaRelationInner,
|
|
29
|
-
manyHasManyInverse: LaxSchemaRelationInner,
|
|
30
|
-
oneHasMany: LaxSchemaRelationInner,
|
|
31
|
-
manyHasOne: LaxSchemaRelationInner,
|
|
32
|
-
int: LaxSchemaColumnInner,
|
|
33
|
-
float: LaxSchemaColumnInner,
|
|
34
|
-
boolean: LaxSchemaColumnInner,
|
|
35
|
-
string: LaxSchemaColumnInner,
|
|
36
|
-
json: LaxSchemaColumnInner,
|
|
37
|
-
date: LaxSchemaColumnInner,
|
|
38
|
-
datetime: LaxSchemaColumnInner,
|
|
39
|
-
enum: LaxSchemaEnumInner
|
|
40
|
-
});
|
|
41
|
-
const LaxSchemaEntity = Typesafe.object({
|
|
42
|
-
fields: Typesafe.record(Typesafe.string, LaxSchemaField)
|
|
43
|
-
});
|
|
44
|
-
const LaxSchema = Typesafe.object({
|
|
45
|
-
entities: Typesafe.record(
|
|
46
|
-
Typesafe.string,
|
|
47
|
-
LaxSchemaEntity
|
|
48
|
-
)
|
|
49
|
-
});
|
|
50
|
-
export {
|
|
51
|
-
LaxSchema
|
|
52
|
-
};
|
|
53
|
-
//# sourceMappingURL=schema.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"schema.js","sources":["../../../../../packages/schema-utils/src/lax/schema.ts"],"sourcesContent":["import * as Typesafe from '@contember/typesafe'\n\nconst LaxSchemaEnumInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\tvalues: Typesafe.array(Typesafe.string),\n\t\tenumName: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t\tunique: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaColumnInner = Typesafe.partial({\n\tnotNull: Typesafe.boolean,\n\tunique: Typesafe.boolean,\n})\n\nconst LaxSchemaRelationInner = Typesafe.intersection(\n\tTypesafe.object({\n\t\ttargetEntity: Typesafe.string,\n\t\ttargetField: Typesafe.string,\n\t}),\n\tTypesafe.partial({\n\t\tnotNull: Typesafe.boolean,\n\t}),\n)\n\nconst LaxSchemaField = Typesafe.discriminatedUnion('type', {\n\toneHasOne: LaxSchemaRelationInner,\n\toneHasOneInverse: LaxSchemaRelationInner,\n\tmanyHasMany: LaxSchemaRelationInner,\n\tmanyHasManyInverse: LaxSchemaRelationInner,\n\toneHasMany: LaxSchemaRelationInner,\n\tmanyHasOne: LaxSchemaRelationInner,\n\tint: LaxSchemaColumnInner,\n\tfloat: LaxSchemaColumnInner,\n\tboolean: LaxSchemaColumnInner,\n\tstring: LaxSchemaColumnInner,\n\tjson: LaxSchemaColumnInner,\n\tdate: LaxSchemaColumnInner,\n\tdatetime: LaxSchemaColumnInner,\n\tenum: LaxSchemaEnumInner,\n})\n\nexport type LaxSchemaField = ReturnType<typeof LaxSchemaField>\nexport type LaxSchemaEnum = Extract<LaxSchemaField, { type: 'enum' }>\nexport type LaxSchemaColumn = Extract<LaxSchemaField, { type: 'int' | 'float' | 'boolean' | 'string' | 'json' | 'datetime' | 'date' | 'uuid' }>\nexport type LaxSchemaRelation = Extract<LaxSchemaField, {type: 'oneHasOne' | 'oneHasOneInverse' | 'manyHasMany' | 'manyHasManyInverse' | 'oneHasMany' | 'manyHasOne' }>\n\nconst LaxSchemaEntity = Typesafe.object({\n\tfields: Typesafe.record(Typesafe.string, LaxSchemaField),\n})\nexport type LaxSchemaEntity = ReturnType<typeof LaxSchemaEntity>\n\nexport const LaxSchema = Typesafe.object({\n\tentities: Typesafe.record(\n\t\tTypesafe.string,\n\t\tLaxSchemaEntity,\n\t),\n})\nexport type LaxSchema = ReturnType<typeof LaxSchema>\n"],"names":[],"mappings":";AAEA,MAAM,qBAAqB,SAAS;AAAA,EACnC,SAAS,OAAO;AAAA,IACf,QAAQ,SAAS,MAAM,SAAS,MAAM;AAAA,IACtC,UAAU,SAAS;AAAA,EAAA,CACnB;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,SAAS,SAAS;AAAA,IAClB,QAAQ,SAAS;AAAA,EACjB,CAAA;AACF;AAEA,MAAM,uBAAuB,SAAS,QAAQ;AAAA,EAC7C,SAAS,SAAS;AAAA,EAClB,QAAQ,SAAS;AAClB,CAAC;AAED,MAAM,yBAAyB,SAAS;AAAA,EACvC,SAAS,OAAO;AAAA,IACf,cAAc,SAAS;AAAA,IACvB,aAAa,SAAS;AAAA,EAAA,CACtB;AAAA,EACD,SAAS,QAAQ;AAAA,IAChB,SAAS,SAAS;AAAA,EAClB,CAAA;AACF;AAEA,MAAM,iBAAiB,SAAS,mBAAmB,QAAQ;AAAA,EAC1D,WAAW;AAAA,EACX,kBAAkB;AAAA,EAClB,aAAa;AAAA,EACb,oBAAoB;AAAA,EACpB,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,KAAK;AAAA,EACL,OAAO;AAAA,EACP,SAAS;AAAA,EACT,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,MAAM;AAAA,EACN,UAAU;AAAA,EACV,MAAM;AACP,CAAC;AAOD,MAAM,kBAAkB,SAAS,OAAO;AAAA,EACvC,QAAQ,SAAS,OAAO,SAAS,QAAQ,cAAc;AACxD,CAAC;AAGY,MAAA,YAAY,SAAS,OAAO;AAAA,EACxC,UAAU,SAAS;AAAA,IAClB,SAAS;AAAA,IACT;AAAA,EAAA;AAEF,CAAC;"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const toUnderscore = (s) => s.replace(/([A-Z]+)/g, (x, y) => "_" + y.toLowerCase()).replace(/^_/, "");
|
|
4
|
-
class DefaultNamingConventions {
|
|
5
|
-
getPrimaryField() {
|
|
6
|
-
return "id";
|
|
7
|
-
}
|
|
8
|
-
getColumnName(fieldName) {
|
|
9
|
-
return toUnderscore(fieldName);
|
|
10
|
-
}
|
|
11
|
-
getTableName(entityName) {
|
|
12
|
-
return toUnderscore(entityName);
|
|
13
|
-
}
|
|
14
|
-
getJoiningColumnName(relationName) {
|
|
15
|
-
return toUnderscore(relationName) + "_id";
|
|
16
|
-
}
|
|
17
|
-
getJoiningTableName(entity, relation) {
|
|
18
|
-
return toUnderscore(entity) + "_" + toUnderscore(relation);
|
|
19
|
-
}
|
|
20
|
-
getJoiningTableColumnNames(owningEntity, owningRelation, inverseEntity, inverseRelation) {
|
|
21
|
-
return [
|
|
22
|
-
toUnderscore(owningEntity) + "_id",
|
|
23
|
-
toUnderscore(inverseEntity === owningEntity ? owningRelation : inverseEntity) + "_id"
|
|
24
|
-
];
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
exports.DefaultNamingConventions = DefaultNamingConventions;
|
|
28
|
-
//# sourceMappingURL=NamingConventions.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NamingConventions.cjs","sources":["../../../../../packages/schema-utils/src/model/NamingConventions.ts"],"sourcesContent":["export interface NamingConventions {\n\tgetPrimaryField(): string\n\n\tgetColumnName(fieldName: string): string\n\n\tgetTableName(entityName: string): string\n\n\tgetJoiningColumnName(relationName: string): string\n\n\tgetJoiningTableName(entity: string, relation: string): string\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string]\n}\n\nconst toUnderscore = (s: string) => s.replace(/([A-Z]+)/g, (x, y) => '_' + y.toLowerCase()).replace(/^_/, '')\nexport class DefaultNamingConventions implements NamingConventions {\n\tgetPrimaryField(): string {\n\t\treturn 'id'\n\t}\n\n\tgetColumnName(fieldName: string): string {\n\t\treturn toUnderscore(fieldName)\n\t}\n\n\tgetTableName(entityName: string): string {\n\t\treturn toUnderscore(entityName)\n\t}\n\n\tgetJoiningColumnName(relationName: string): string {\n\t\treturn toUnderscore(relationName) + '_id'\n\t}\n\n\tgetJoiningTableName(entity: string, relation: string): string {\n\t\treturn toUnderscore(entity) + '_' + toUnderscore(relation)\n\t}\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string] {\n\t\treturn [\n\t\t\ttoUnderscore(owningEntity) + '_id',\n\t\t\ttoUnderscore(inverseEntity === owningEntity ? owningRelation : inverseEntity) + '_id',\n\t\t]\n\t}\n}\n"],"names":[],"mappings":";;AAmBA,MAAM,eAAe,CAAC,MAAc,EAAE,QAAQ,aAAa,CAAC,GAAG,MAAM,MAAM,EAAE,YAAY,CAAC,EAAE,QAAQ,MAAM,EAAE;AACrG,MAAM,yBAAsD;AAAA,EAClE,kBAA0B;AAClB,WAAA;AAAA,EAAA;AAAA,EAGR,cAAc,WAA2B;AACxC,WAAO,aAAa,SAAS;AAAA,EAAA;AAAA,EAG9B,aAAa,YAA4B;AACxC,WAAO,aAAa,UAAU;AAAA,EAAA;AAAA,EAG/B,qBAAqB,cAA8B;AAC3C,WAAA,aAAa,YAAY,IAAI;AAAA,EAAA;AAAA,EAGrC,oBAAoB,QAAgB,UAA0B;AAC7D,WAAO,aAAa,MAAM,IAAI,MAAM,aAAa,QAAQ;AAAA,EAAA;AAAA,EAG1D,2BACC,cACA,gBACA,eACA,iBACmB;AACZ,WAAA;AAAA,MACN,aAAa,YAAY,IAAI;AAAA,MAC7B,aAAa,kBAAkB,eAAe,iBAAiB,aAAa,IAAI;AAAA,IACjF;AAAA,EAAA;AAEF;;"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
const toUnderscore = (s) => s.replace(/([A-Z]+)/g, (x, y) => "_" + y.toLowerCase()).replace(/^_/, "");
|
|
2
|
-
class DefaultNamingConventions {
|
|
3
|
-
getPrimaryField() {
|
|
4
|
-
return "id";
|
|
5
|
-
}
|
|
6
|
-
getColumnName(fieldName) {
|
|
7
|
-
return toUnderscore(fieldName);
|
|
8
|
-
}
|
|
9
|
-
getTableName(entityName) {
|
|
10
|
-
return toUnderscore(entityName);
|
|
11
|
-
}
|
|
12
|
-
getJoiningColumnName(relationName) {
|
|
13
|
-
return toUnderscore(relationName) + "_id";
|
|
14
|
-
}
|
|
15
|
-
getJoiningTableName(entity, relation) {
|
|
16
|
-
return toUnderscore(entity) + "_" + toUnderscore(relation);
|
|
17
|
-
}
|
|
18
|
-
getJoiningTableColumnNames(owningEntity, owningRelation, inverseEntity, inverseRelation) {
|
|
19
|
-
return [
|
|
20
|
-
toUnderscore(owningEntity) + "_id",
|
|
21
|
-
toUnderscore(inverseEntity === owningEntity ? owningRelation : inverseEntity) + "_id"
|
|
22
|
-
];
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
export {
|
|
26
|
-
DefaultNamingConventions
|
|
27
|
-
};
|
|
28
|
-
//# sourceMappingURL=NamingConventions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"NamingConventions.js","sources":["../../../../../packages/schema-utils/src/model/NamingConventions.ts"],"sourcesContent":["export interface NamingConventions {\n\tgetPrimaryField(): string\n\n\tgetColumnName(fieldName: string): string\n\n\tgetTableName(entityName: string): string\n\n\tgetJoiningColumnName(relationName: string): string\n\n\tgetJoiningTableName(entity: string, relation: string): string\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string]\n}\n\nconst toUnderscore = (s: string) => s.replace(/([A-Z]+)/g, (x, y) => '_' + y.toLowerCase()).replace(/^_/, '')\nexport class DefaultNamingConventions implements NamingConventions {\n\tgetPrimaryField(): string {\n\t\treturn 'id'\n\t}\n\n\tgetColumnName(fieldName: string): string {\n\t\treturn toUnderscore(fieldName)\n\t}\n\n\tgetTableName(entityName: string): string {\n\t\treturn toUnderscore(entityName)\n\t}\n\n\tgetJoiningColumnName(relationName: string): string {\n\t\treturn toUnderscore(relationName) + '_id'\n\t}\n\n\tgetJoiningTableName(entity: string, relation: string): string {\n\t\treturn toUnderscore(entity) + '_' + toUnderscore(relation)\n\t}\n\n\tgetJoiningTableColumnNames(\n\t\towningEntity: string,\n\t\towningRelation: string,\n\t\tinverseEntity: string,\n\t\tinverseRelation?: string,\n\t): [string, string] {\n\t\treturn [\n\t\t\ttoUnderscore(owningEntity) + '_id',\n\t\t\ttoUnderscore(inverseEntity === owningEntity ? owningRelation : inverseEntity) + '_id',\n\t\t]\n\t}\n}\n"],"names":[],"mappings":"AAmBA,MAAM,eAAe,CAAC,MAAc,EAAE,QAAQ,aAAa,CAAC,GAAG,MAAM,MAAM,EAAE,YAAY,CAAC,EAAE,QAAQ,MAAM,EAAE;AACrG,MAAM,yBAAsD;AAAA,EAClE,kBAA0B;AAClB,WAAA;AAAA,EAAA;AAAA,EAGR,cAAc,WAA2B;AACxC,WAAO,aAAa,SAAS;AAAA,EAAA;AAAA,EAG9B,aAAa,YAA4B;AACxC,WAAO,aAAa,UAAU;AAAA,EAAA;AAAA,EAG/B,qBAAqB,cAA8B;AAC3C,WAAA,aAAa,YAAY,IAAI;AAAA,EAAA;AAAA,EAGrC,oBAAoB,QAAgB,UAA0B;AAC7D,WAAO,aAAa,MAAM,IAAI,MAAM,aAAa,QAAQ;AAAA,EAAA;AAAA,EAG1D,2BACC,cACA,gBACA,eACA,iBACmB;AACZ,WAAA;AAAA,MACN,aAAa,YAAY,IAAI;AAAA,MAC7B,aAAa,kBAAkB,eAAe,iBAAiB,aAAa,IAAI;AAAA,IACjF;AAAA,EAAA;AAEF;"}
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const assertNever = require("../utils/assertNever.cjs");
|
|
4
|
-
const isIt = require("../utils/isIt.cjs");
|
|
5
|
-
const schema = require("@contember/schema");
|
|
6
|
-
var ModelErrorCode = /* @__PURE__ */ ((ModelErrorCode2) => {
|
|
7
|
-
ModelErrorCode2["ENTITY_NOT_FOUND"] = "entityNotFound";
|
|
8
|
-
ModelErrorCode2["FIELD_NOT_FOUND"] = "fieldNotFound";
|
|
9
|
-
ModelErrorCode2["NOT_RELATION"] = "notRelation";
|
|
10
|
-
ModelErrorCode2["NOT_OWNING_SIDE"] = "notOwningSide";
|
|
11
|
-
return ModelErrorCode2;
|
|
12
|
-
})(ModelErrorCode || {});
|
|
13
|
-
class ModelError extends Error {
|
|
14
|
-
constructor(code, message) {
|
|
15
|
-
super(message);
|
|
16
|
-
this.code = code;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
const createEntityNotFoundError = (entityName) => new ModelError("entityNotFound", `Entity ${entityName} not found`);
|
|
20
|
-
const createFieldNotFoundError = (entityName, fieldName) => new ModelError("fieldNotFound", `Field ${fieldName} of entity ${entityName} not found`);
|
|
21
|
-
const getEntity = (schema2, entityName) => {
|
|
22
|
-
const entity = schema2.entities[entityName];
|
|
23
|
-
if (!entity) {
|
|
24
|
-
throw createEntityNotFoundError(entityName);
|
|
25
|
-
}
|
|
26
|
-
return entity;
|
|
27
|
-
};
|
|
28
|
-
const getField = (entity, fieldName) => {
|
|
29
|
-
const field = entity.fields[fieldName];
|
|
30
|
-
if (!field) {
|
|
31
|
-
throw createFieldNotFoundError(entity.name, fieldName);
|
|
32
|
-
}
|
|
33
|
-
return field;
|
|
34
|
-
};
|
|
35
|
-
const getColumnName = (schema2, entity, fieldName) => {
|
|
36
|
-
return acceptFieldVisitor(schema2, entity, fieldName, {
|
|
37
|
-
visitColumn: ({ column }) => column.columnName,
|
|
38
|
-
visitRelation: ({ entity: entity2, relation }) => {
|
|
39
|
-
if (isIt.isIt(relation, "joiningColumn")) {
|
|
40
|
-
return relation.joiningColumn.columnName;
|
|
41
|
-
}
|
|
42
|
-
throw new ModelError(
|
|
43
|
-
"notOwningSide",
|
|
44
|
-
`Field ${relation.name} of entity ${entity2.name} is not an owning side`
|
|
45
|
-
);
|
|
46
|
-
}
|
|
47
|
-
});
|
|
48
|
-
};
|
|
49
|
-
const tryGetColumnName = (schema2, entity, fieldName) => {
|
|
50
|
-
try {
|
|
51
|
-
return getColumnName(schema2, entity, fieldName);
|
|
52
|
-
} catch (e) {
|
|
53
|
-
if (e instanceof ModelError && e.code === "notOwningSide") {
|
|
54
|
-
return void 0;
|
|
55
|
-
}
|
|
56
|
-
throw e;
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
const getColumnType = (schema$1, entity, fieldName) => {
|
|
60
|
-
return acceptFieldVisitor(schema$1, entity, fieldName, {
|
|
61
|
-
// TODO solve enum handling properly maybe we should distinguish between domain and column type
|
|
62
|
-
visitColumn: ({ column }) => (column.type === schema.Model.ColumnType.Enum ? "text" : column.columnType) + (column.list ? "[]" : ""),
|
|
63
|
-
visitRelation: ({ entity: entity2, relation, targetEntity }) => {
|
|
64
|
-
if (isIt.isIt(relation, "joiningColumn")) {
|
|
65
|
-
return getColumnType(schema$1, targetEntity, targetEntity.primary);
|
|
66
|
-
}
|
|
67
|
-
throw new ModelError(
|
|
68
|
-
"notOwningSide",
|
|
69
|
-
`Field ${relation.name} of entity ${entity2.name} is not an owning side`
|
|
70
|
-
);
|
|
71
|
-
}
|
|
72
|
-
});
|
|
73
|
-
};
|
|
74
|
-
const getTargetEntity = (schema2, entity, relationName) => {
|
|
75
|
-
return acceptFieldVisitor(schema2, entity, relationName, {
|
|
76
|
-
visitColumn: () => null,
|
|
77
|
-
visitRelation: ({ targetEntity }) => targetEntity
|
|
78
|
-
});
|
|
79
|
-
};
|
|
80
|
-
const acceptEveryFieldVisitor = (schema2, entity, visitor) => {
|
|
81
|
-
const entityObj = typeof entity === "string" ? getEntity(schema2, entity) : entity;
|
|
82
|
-
const result = {};
|
|
83
|
-
for (const field in entityObj.fields) {
|
|
84
|
-
result[field] = acceptFieldVisitor(schema2, entityObj, field, visitor);
|
|
85
|
-
}
|
|
86
|
-
return result;
|
|
87
|
-
};
|
|
88
|
-
const acceptFieldVisitor = (schema2, entity, field, visitor) => {
|
|
89
|
-
const entityObj = typeof entity === "string" ? getEntity(schema2, entity) : entity;
|
|
90
|
-
const fieldObj = typeof field === "string" ? entityObj.fields[field] : field;
|
|
91
|
-
if (!fieldObj) {
|
|
92
|
-
throw createFieldNotFoundError(entityObj.name, typeof field === "string" ? field : "unknown");
|
|
93
|
-
}
|
|
94
|
-
if (isIt.isIt(fieldObj, "columnType")) {
|
|
95
|
-
return visitor.visitColumn({
|
|
96
|
-
entity: entityObj,
|
|
97
|
-
column: fieldObj
|
|
98
|
-
});
|
|
99
|
-
}
|
|
100
|
-
if (isIt.isIt(visitor, "visitRelation")) {
|
|
101
|
-
return acceptRelationTypeVisitor(schema2, entityObj, fieldObj, {
|
|
102
|
-
visitManyHasManyInverse: visitor.visitRelation.bind(visitor),
|
|
103
|
-
visitManyHasManyOwning: visitor.visitRelation.bind(visitor),
|
|
104
|
-
visitOneHasMany: visitor.visitRelation.bind(visitor),
|
|
105
|
-
visitOneHasOneInverse: visitor.visitRelation.bind(visitor),
|
|
106
|
-
visitOneHasOneOwning: visitor.visitRelation.bind(visitor),
|
|
107
|
-
visitManyHasOne: visitor.visitRelation.bind(visitor)
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
if (isIt.isIt(visitor, "visitHasMany")) {
|
|
111
|
-
return acceptRelationTypeVisitor(schema2, entityObj, fieldObj, {
|
|
112
|
-
visitManyHasManyInverse: visitor.visitHasMany.bind(visitor),
|
|
113
|
-
visitManyHasManyOwning: visitor.visitHasMany.bind(visitor),
|
|
114
|
-
visitOneHasMany: visitor.visitHasMany.bind(visitor),
|
|
115
|
-
visitOneHasOneInverse: visitor.visitHasOne.bind(visitor),
|
|
116
|
-
visitOneHasOneOwning: visitor.visitHasOne.bind(visitor),
|
|
117
|
-
visitManyHasOne: visitor.visitHasOne.bind(visitor)
|
|
118
|
-
});
|
|
119
|
-
}
|
|
120
|
-
if (isIt.isIt(visitor, "visitManyHasManyInverse")) {
|
|
121
|
-
return acceptRelationTypeVisitor(schema2, entityObj, fieldObj, visitor);
|
|
122
|
-
}
|
|
123
|
-
throw new Error();
|
|
124
|
-
};
|
|
125
|
-
const acceptRelationTypeVisitor = (schema$1, entity, relation, visitor) => {
|
|
126
|
-
const entityObj = typeof entity === "string" ? getEntity(schema$1, entity) : entity;
|
|
127
|
-
const relationObj = typeof relation === "string" ? entityObj.fields[relation] : relation;
|
|
128
|
-
if (!relationObj) {
|
|
129
|
-
throw createFieldNotFoundError(entityObj.name, typeof relation === "string" ? relation : "unknown");
|
|
130
|
-
}
|
|
131
|
-
if (!isRelation(relationObj)) {
|
|
132
|
-
throw new ModelError(
|
|
133
|
-
"notRelation",
|
|
134
|
-
`Field ${relationObj.name} of entity ${entityObj.name} is not a relation`
|
|
135
|
-
);
|
|
136
|
-
}
|
|
137
|
-
const targetEntity = getEntity(schema$1, relationObj.target);
|
|
138
|
-
if (isInverseRelation(relationObj)) {
|
|
139
|
-
const targetRelation = targetEntity.fields[relationObj.ownedBy];
|
|
140
|
-
switch (relationObj.type) {
|
|
141
|
-
case schema.Model.RelationType.ManyHasMany:
|
|
142
|
-
return visitor.visitManyHasManyInverse(
|
|
143
|
-
{
|
|
144
|
-
type: "manyHasManyInverse",
|
|
145
|
-
entity: entityObj,
|
|
146
|
-
relation: relationObj,
|
|
147
|
-
targetEntity,
|
|
148
|
-
targetRelation
|
|
149
|
-
}
|
|
150
|
-
);
|
|
151
|
-
case schema.Model.RelationType.OneHasOne:
|
|
152
|
-
return visitor.visitOneHasOneInverse({
|
|
153
|
-
type: "oneHasOneInverse",
|
|
154
|
-
entity: entityObj,
|
|
155
|
-
relation: relationObj,
|
|
156
|
-
targetEntity,
|
|
157
|
-
targetRelation
|
|
158
|
-
});
|
|
159
|
-
case schema.Model.RelationType.OneHasMany:
|
|
160
|
-
return visitor.visitOneHasMany({
|
|
161
|
-
type: "oneHasMany",
|
|
162
|
-
entity: entityObj,
|
|
163
|
-
relation: relationObj,
|
|
164
|
-
targetEntity,
|
|
165
|
-
targetRelation
|
|
166
|
-
});
|
|
167
|
-
default:
|
|
168
|
-
return assertNever.assertNever();
|
|
169
|
-
}
|
|
170
|
-
} else if (isOwningRelation(relationObj)) {
|
|
171
|
-
const targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null;
|
|
172
|
-
switch (relationObj.type) {
|
|
173
|
-
case schema.Model.RelationType.ManyHasMany:
|
|
174
|
-
return visitor.visitManyHasManyOwning({
|
|
175
|
-
type: "manyHasManyOwning",
|
|
176
|
-
entity: entityObj,
|
|
177
|
-
relation: relationObj,
|
|
178
|
-
targetEntity,
|
|
179
|
-
targetRelation
|
|
180
|
-
});
|
|
181
|
-
case schema.Model.RelationType.OneHasOne:
|
|
182
|
-
return visitor.visitOneHasOneOwning({
|
|
183
|
-
type: "oneHasOneOwning",
|
|
184
|
-
entity: entityObj,
|
|
185
|
-
relation: relationObj,
|
|
186
|
-
targetEntity,
|
|
187
|
-
targetRelation
|
|
188
|
-
});
|
|
189
|
-
case schema.Model.RelationType.ManyHasOne:
|
|
190
|
-
return visitor.visitManyHasOne({
|
|
191
|
-
type: "manyHasOne",
|
|
192
|
-
entity: entityObj,
|
|
193
|
-
//
|
|
194
|
-
relation: relationObj,
|
|
195
|
-
targetEntity,
|
|
196
|
-
targetRelation
|
|
197
|
-
});
|
|
198
|
-
default:
|
|
199
|
-
return assertNever.assertNever();
|
|
200
|
-
}
|
|
201
|
-
}
|
|
202
|
-
throw new Error("Invalid relation type");
|
|
203
|
-
};
|
|
204
|
-
const isRelation = (field) => {
|
|
205
|
-
return isIt.isIt(field, "target");
|
|
206
|
-
};
|
|
207
|
-
const isInverseRelation = (relation) => {
|
|
208
|
-
return relation.ownedBy !== void 0;
|
|
209
|
-
};
|
|
210
|
-
const isOwningRelation = (relation) => {
|
|
211
|
-
return !isInverseRelation(relation);
|
|
212
|
-
};
|
|
213
|
-
const isColumn = (field) => isIt.isIt(field, "columnType");
|
|
214
|
-
const emptyModelSchema = { entities: {}, enums: {} };
|
|
215
|
-
exports.ModelError = ModelError;
|
|
216
|
-
exports.ModelErrorCode = ModelErrorCode;
|
|
217
|
-
exports.acceptEveryFieldVisitor = acceptEveryFieldVisitor;
|
|
218
|
-
exports.acceptFieldVisitor = acceptFieldVisitor;
|
|
219
|
-
exports.acceptRelationTypeVisitor = acceptRelationTypeVisitor;
|
|
220
|
-
exports.emptyModelSchema = emptyModelSchema;
|
|
221
|
-
exports.getColumnName = getColumnName;
|
|
222
|
-
exports.getColumnType = getColumnType;
|
|
223
|
-
exports.getEntity = getEntity;
|
|
224
|
-
exports.getField = getField;
|
|
225
|
-
exports.getTargetEntity = getTargetEntity;
|
|
226
|
-
exports.isColumn = isColumn;
|
|
227
|
-
exports.isInverseRelation = isInverseRelation;
|
|
228
|
-
exports.isOwningRelation = isOwningRelation;
|
|
229
|
-
exports.isRelation = isRelation;
|
|
230
|
-
exports.tryGetColumnName = tryGetColumnName;
|
|
231
|
-
//# sourceMappingURL=modelUtils.cjs.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modelUtils.cjs","sources":["../../../../../packages/schema-utils/src/model/modelUtils.ts"],"sourcesContent":["import { assertNever, isIt } from '../utils'\nimport { Model } from '@contember/schema'\n\nexport enum ModelErrorCode {\n\tENTITY_NOT_FOUND = 'entityNotFound',\n\tFIELD_NOT_FOUND = 'fieldNotFound',\n\tNOT_RELATION = 'notRelation',\n\tNOT_OWNING_SIDE = 'notOwningSide',\n}\n\nexport class ModelError extends Error {\n\tconstructor(public readonly code: ModelErrorCode, message: string) {\n\t\tsuper(message)\n\t}\n}\n\nconst createEntityNotFoundError = (entityName: string) =>\n\tnew ModelError(ModelErrorCode.ENTITY_NOT_FOUND, `Entity ${entityName} not found`)\n\nconst createFieldNotFoundError = (entityName: string, fieldName: string) =>\n\tnew ModelError(ModelErrorCode.FIELD_NOT_FOUND, `Field ${fieldName} of entity ${entityName} not found`)\n\nexport const getEntity = (schema: Model.Schema, entityName: string): Model.Entity => {\n\tconst entity = schema.entities[entityName]\n\tif (!entity) {\n\t\tthrow createEntityNotFoundError(entityName)\n\t}\n\treturn entity\n}\n\nexport const getField = (entity: Model.Entity, fieldName: string): Model.AnyField => {\n\tconst field = entity.fields[fieldName]\n\tif (!field) {\n\t\tthrow createFieldNotFoundError(entity.name, fieldName)\n\t}\n\treturn field\n}\n\nexport const getColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\tvisitColumn: ({ column }) => column.columnName,\n\t\tvisitRelation: ({ entity, relation }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn relation.joiningColumn.columnName\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const tryGetColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\ttry {\n\t\treturn getColumnName(schema, entity, fieldName)\n\t} catch (e) {\n\t\tif (e instanceof ModelError && e.code === ModelErrorCode.NOT_OWNING_SIDE) {\n\t\t\treturn undefined\n\t\t}\n\t\tthrow e\n\t}\n}\n\nexport const getColumnType = (schema: Model.Schema, entity: Model.Entity, fieldName: string): string => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\t// TODO solve enum handling properly maybe we should distinguish between domain and column type\n\t\tvisitColumn: ({ column }) => (column.type === Model.ColumnType.Enum ? 'text' : column.columnType) + (column.list ? '[]' : ''),\n\t\tvisitRelation: ({ entity, relation, targetEntity }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn getColumnType(schema, targetEntity, targetEntity.primary)\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const getTargetEntity = (\n\tschema: Model.Schema,\n\tentity: Model.Entity,\n\trelationName: string,\n): Model.Entity | null => {\n\treturn acceptFieldVisitor(schema, entity, relationName, {\n\t\tvisitColumn: () => null,\n\t\tvisitRelation: ({ targetEntity }) => targetEntity,\n\t})\n}\n\nexport const acceptEveryFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tvisitor: Model.FieldVisitor<T>,\n): { [fieldName: string]: T } => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst result: { [fieldName: string]: T } = {}\n\tfor (const field in entityObj.fields) {\n\t\tresult[field] = acceptFieldVisitor(schema, entityObj, field, visitor)\n\t}\n\treturn result\n}\n\nexport const acceptFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tfield: string | Model.AnyField,\n\tvisitor: Model.FieldVisitor<T>,\n): T => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst fieldObj: Model.AnyField = typeof field === 'string' ? entityObj.fields[field] : field\n\tif (!fieldObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof field === 'string' ? field : 'unknown')\n\t}\n\n\tif (isIt<Model.AnyColumn>(fieldObj, 'columnType')) {\n\t\treturn visitor.visitColumn({\n\t\t\tentity: entityObj,\n\t\t\tcolumn: fieldObj,\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationVisitor<T>>(visitor, 'visitRelation')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitRelation.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByGenericTypeVisitor<T>>(visitor, 'visitHasMany')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitHasOne.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByTypeVisitor<T>>(visitor, 'visitManyHasManyInverse')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, visitor)\n\t}\n\n\tthrow new Error()\n}\n\nexport const acceptRelationTypeVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\trelation: string | Model.AnyRelation,\n\tvisitor: Model.RelationByTypeVisitor<T>,\n): T => {\n\tconst entityObj = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst relationObj: Model.AnyField = typeof relation === 'string' ? entityObj.fields[relation] : relation\n\tif (!relationObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof relation === 'string' ? relation : 'unknown')\n\t}\n\n\tif (!isRelation(relationObj)) {\n\t\tthrow new ModelError(\n\t\t\tModelErrorCode.NOT_RELATION,\n\t\t\t`Field ${relationObj.name} of entity ${entityObj.name} is not a relation`,\n\t\t)\n\t}\n\n\tconst targetEntity = getEntity(schema, relationObj.target)\n\n\tif (isInverseRelation(relationObj)) {\n\t\tconst targetRelation = targetEntity.fields[relationObj.ownedBy]\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyInverse({\n\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyOwningRelation,\n\t\t\t\t},\n\t\t\t\t)\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneInverse({\n\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasMany:\n\t\t\t\treturn visitor.visitOneHasMany({\n\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasOneRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t} else if (isOwningRelation(relationObj)) {\n\t\tconst targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null\n\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyOwning({\n\t\t\t\t\ttype: 'manyHasManyOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneOwning({\n\t\t\t\t\ttype: 'oneHasOneOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.ManyHasOne:\n\t\t\t\treturn visitor.visitManyHasOne({\n\t\t\t\t\ttype: 'manyHasOne',\n\t\t\t\t\tentity: entityObj, //\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasManyRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t}\n\n\tthrow new Error('Invalid relation type')\n}\n\nexport const isRelation = (field: Model.AnyField): field is Model.AnyRelation => {\n\treturn isIt<Model.Relation>(field, 'target')\n}\n\nexport const isInverseRelation = (relation: Model.Relation): relation is Model.InverseRelation => {\n\treturn (relation as Model.InverseRelation).ownedBy !== undefined\n}\n\nexport const isOwningRelation = (relation: Model.Relation): relation is Model.OwningRelation => {\n\treturn !isInverseRelation(relation)\n}\n\nexport const isColumn = (field: Model.AnyField): field is Model.AnyColumn => isIt<Model.AnyColumn>(field, 'columnType')\n\nexport const emptyModelSchema: Model.Schema = { entities: {}, enums: {} }\n"],"names":["ModelErrorCode","schema","entity","isIt","Model","assertNever"],"mappings":"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"}
|
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
import { assertNever } from "../utils/assertNever.js";
|
|
2
|
-
import { isIt } from "../utils/isIt.js";
|
|
3
|
-
import { Model } from "@contember/schema";
|
|
4
|
-
var ModelErrorCode = /* @__PURE__ */ ((ModelErrorCode2) => {
|
|
5
|
-
ModelErrorCode2["ENTITY_NOT_FOUND"] = "entityNotFound";
|
|
6
|
-
ModelErrorCode2["FIELD_NOT_FOUND"] = "fieldNotFound";
|
|
7
|
-
ModelErrorCode2["NOT_RELATION"] = "notRelation";
|
|
8
|
-
ModelErrorCode2["NOT_OWNING_SIDE"] = "notOwningSide";
|
|
9
|
-
return ModelErrorCode2;
|
|
10
|
-
})(ModelErrorCode || {});
|
|
11
|
-
class ModelError extends Error {
|
|
12
|
-
constructor(code, message) {
|
|
13
|
-
super(message);
|
|
14
|
-
this.code = code;
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
const createEntityNotFoundError = (entityName) => new ModelError("entityNotFound", `Entity ${entityName} not found`);
|
|
18
|
-
const createFieldNotFoundError = (entityName, fieldName) => new ModelError("fieldNotFound", `Field ${fieldName} of entity ${entityName} not found`);
|
|
19
|
-
const getEntity = (schema, entityName) => {
|
|
20
|
-
const entity = schema.entities[entityName];
|
|
21
|
-
if (!entity) {
|
|
22
|
-
throw createEntityNotFoundError(entityName);
|
|
23
|
-
}
|
|
24
|
-
return entity;
|
|
25
|
-
};
|
|
26
|
-
const getField = (entity, fieldName) => {
|
|
27
|
-
const field = entity.fields[fieldName];
|
|
28
|
-
if (!field) {
|
|
29
|
-
throw createFieldNotFoundError(entity.name, fieldName);
|
|
30
|
-
}
|
|
31
|
-
return field;
|
|
32
|
-
};
|
|
33
|
-
const getColumnName = (schema, entity, fieldName) => {
|
|
34
|
-
return acceptFieldVisitor(schema, entity, fieldName, {
|
|
35
|
-
visitColumn: ({ column }) => column.columnName,
|
|
36
|
-
visitRelation: ({ entity: entity2, relation }) => {
|
|
37
|
-
if (isIt(relation, "joiningColumn")) {
|
|
38
|
-
return relation.joiningColumn.columnName;
|
|
39
|
-
}
|
|
40
|
-
throw new ModelError(
|
|
41
|
-
"notOwningSide",
|
|
42
|
-
`Field ${relation.name} of entity ${entity2.name} is not an owning side`
|
|
43
|
-
);
|
|
44
|
-
}
|
|
45
|
-
});
|
|
46
|
-
};
|
|
47
|
-
const tryGetColumnName = (schema, entity, fieldName) => {
|
|
48
|
-
try {
|
|
49
|
-
return getColumnName(schema, entity, fieldName);
|
|
50
|
-
} catch (e) {
|
|
51
|
-
if (e instanceof ModelError && e.code === "notOwningSide") {
|
|
52
|
-
return void 0;
|
|
53
|
-
}
|
|
54
|
-
throw e;
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
const getColumnType = (schema, entity, fieldName) => {
|
|
58
|
-
return acceptFieldVisitor(schema, entity, fieldName, {
|
|
59
|
-
// TODO solve enum handling properly maybe we should distinguish between domain and column type
|
|
60
|
-
visitColumn: ({ column }) => (column.type === Model.ColumnType.Enum ? "text" : column.columnType) + (column.list ? "[]" : ""),
|
|
61
|
-
visitRelation: ({ entity: entity2, relation, targetEntity }) => {
|
|
62
|
-
if (isIt(relation, "joiningColumn")) {
|
|
63
|
-
return getColumnType(schema, targetEntity, targetEntity.primary);
|
|
64
|
-
}
|
|
65
|
-
throw new ModelError(
|
|
66
|
-
"notOwningSide",
|
|
67
|
-
`Field ${relation.name} of entity ${entity2.name} is not an owning side`
|
|
68
|
-
);
|
|
69
|
-
}
|
|
70
|
-
});
|
|
71
|
-
};
|
|
72
|
-
const getTargetEntity = (schema, entity, relationName) => {
|
|
73
|
-
return acceptFieldVisitor(schema, entity, relationName, {
|
|
74
|
-
visitColumn: () => null,
|
|
75
|
-
visitRelation: ({ targetEntity }) => targetEntity
|
|
76
|
-
});
|
|
77
|
-
};
|
|
78
|
-
const acceptEveryFieldVisitor = (schema, entity, visitor) => {
|
|
79
|
-
const entityObj = typeof entity === "string" ? getEntity(schema, entity) : entity;
|
|
80
|
-
const result = {};
|
|
81
|
-
for (const field in entityObj.fields) {
|
|
82
|
-
result[field] = acceptFieldVisitor(schema, entityObj, field, visitor);
|
|
83
|
-
}
|
|
84
|
-
return result;
|
|
85
|
-
};
|
|
86
|
-
const acceptFieldVisitor = (schema, entity, field, visitor) => {
|
|
87
|
-
const entityObj = typeof entity === "string" ? getEntity(schema, entity) : entity;
|
|
88
|
-
const fieldObj = typeof field === "string" ? entityObj.fields[field] : field;
|
|
89
|
-
if (!fieldObj) {
|
|
90
|
-
throw createFieldNotFoundError(entityObj.name, typeof field === "string" ? field : "unknown");
|
|
91
|
-
}
|
|
92
|
-
if (isIt(fieldObj, "columnType")) {
|
|
93
|
-
return visitor.visitColumn({
|
|
94
|
-
entity: entityObj,
|
|
95
|
-
column: fieldObj
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
if (isIt(visitor, "visitRelation")) {
|
|
99
|
-
return acceptRelationTypeVisitor(schema, entityObj, fieldObj, {
|
|
100
|
-
visitManyHasManyInverse: visitor.visitRelation.bind(visitor),
|
|
101
|
-
visitManyHasManyOwning: visitor.visitRelation.bind(visitor),
|
|
102
|
-
visitOneHasMany: visitor.visitRelation.bind(visitor),
|
|
103
|
-
visitOneHasOneInverse: visitor.visitRelation.bind(visitor),
|
|
104
|
-
visitOneHasOneOwning: visitor.visitRelation.bind(visitor),
|
|
105
|
-
visitManyHasOne: visitor.visitRelation.bind(visitor)
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
if (isIt(visitor, "visitHasMany")) {
|
|
109
|
-
return acceptRelationTypeVisitor(schema, entityObj, fieldObj, {
|
|
110
|
-
visitManyHasManyInverse: visitor.visitHasMany.bind(visitor),
|
|
111
|
-
visitManyHasManyOwning: visitor.visitHasMany.bind(visitor),
|
|
112
|
-
visitOneHasMany: visitor.visitHasMany.bind(visitor),
|
|
113
|
-
visitOneHasOneInverse: visitor.visitHasOne.bind(visitor),
|
|
114
|
-
visitOneHasOneOwning: visitor.visitHasOne.bind(visitor),
|
|
115
|
-
visitManyHasOne: visitor.visitHasOne.bind(visitor)
|
|
116
|
-
});
|
|
117
|
-
}
|
|
118
|
-
if (isIt(visitor, "visitManyHasManyInverse")) {
|
|
119
|
-
return acceptRelationTypeVisitor(schema, entityObj, fieldObj, visitor);
|
|
120
|
-
}
|
|
121
|
-
throw new Error();
|
|
122
|
-
};
|
|
123
|
-
const acceptRelationTypeVisitor = (schema, entity, relation, visitor) => {
|
|
124
|
-
const entityObj = typeof entity === "string" ? getEntity(schema, entity) : entity;
|
|
125
|
-
const relationObj = typeof relation === "string" ? entityObj.fields[relation] : relation;
|
|
126
|
-
if (!relationObj) {
|
|
127
|
-
throw createFieldNotFoundError(entityObj.name, typeof relation === "string" ? relation : "unknown");
|
|
128
|
-
}
|
|
129
|
-
if (!isRelation(relationObj)) {
|
|
130
|
-
throw new ModelError(
|
|
131
|
-
"notRelation",
|
|
132
|
-
`Field ${relationObj.name} of entity ${entityObj.name} is not a relation`
|
|
133
|
-
);
|
|
134
|
-
}
|
|
135
|
-
const targetEntity = getEntity(schema, relationObj.target);
|
|
136
|
-
if (isInverseRelation(relationObj)) {
|
|
137
|
-
const targetRelation = targetEntity.fields[relationObj.ownedBy];
|
|
138
|
-
switch (relationObj.type) {
|
|
139
|
-
case Model.RelationType.ManyHasMany:
|
|
140
|
-
return visitor.visitManyHasManyInverse(
|
|
141
|
-
{
|
|
142
|
-
type: "manyHasManyInverse",
|
|
143
|
-
entity: entityObj,
|
|
144
|
-
relation: relationObj,
|
|
145
|
-
targetEntity,
|
|
146
|
-
targetRelation
|
|
147
|
-
}
|
|
148
|
-
);
|
|
149
|
-
case Model.RelationType.OneHasOne:
|
|
150
|
-
return visitor.visitOneHasOneInverse({
|
|
151
|
-
type: "oneHasOneInverse",
|
|
152
|
-
entity: entityObj,
|
|
153
|
-
relation: relationObj,
|
|
154
|
-
targetEntity,
|
|
155
|
-
targetRelation
|
|
156
|
-
});
|
|
157
|
-
case Model.RelationType.OneHasMany:
|
|
158
|
-
return visitor.visitOneHasMany({
|
|
159
|
-
type: "oneHasMany",
|
|
160
|
-
entity: entityObj,
|
|
161
|
-
relation: relationObj,
|
|
162
|
-
targetEntity,
|
|
163
|
-
targetRelation
|
|
164
|
-
});
|
|
165
|
-
default:
|
|
166
|
-
return assertNever();
|
|
167
|
-
}
|
|
168
|
-
} else if (isOwningRelation(relationObj)) {
|
|
169
|
-
const targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null;
|
|
170
|
-
switch (relationObj.type) {
|
|
171
|
-
case Model.RelationType.ManyHasMany:
|
|
172
|
-
return visitor.visitManyHasManyOwning({
|
|
173
|
-
type: "manyHasManyOwning",
|
|
174
|
-
entity: entityObj,
|
|
175
|
-
relation: relationObj,
|
|
176
|
-
targetEntity,
|
|
177
|
-
targetRelation
|
|
178
|
-
});
|
|
179
|
-
case Model.RelationType.OneHasOne:
|
|
180
|
-
return visitor.visitOneHasOneOwning({
|
|
181
|
-
type: "oneHasOneOwning",
|
|
182
|
-
entity: entityObj,
|
|
183
|
-
relation: relationObj,
|
|
184
|
-
targetEntity,
|
|
185
|
-
targetRelation
|
|
186
|
-
});
|
|
187
|
-
case Model.RelationType.ManyHasOne:
|
|
188
|
-
return visitor.visitManyHasOne({
|
|
189
|
-
type: "manyHasOne",
|
|
190
|
-
entity: entityObj,
|
|
191
|
-
//
|
|
192
|
-
relation: relationObj,
|
|
193
|
-
targetEntity,
|
|
194
|
-
targetRelation
|
|
195
|
-
});
|
|
196
|
-
default:
|
|
197
|
-
return assertNever();
|
|
198
|
-
}
|
|
199
|
-
}
|
|
200
|
-
throw new Error("Invalid relation type");
|
|
201
|
-
};
|
|
202
|
-
const isRelation = (field) => {
|
|
203
|
-
return isIt(field, "target");
|
|
204
|
-
};
|
|
205
|
-
const isInverseRelation = (relation) => {
|
|
206
|
-
return relation.ownedBy !== void 0;
|
|
207
|
-
};
|
|
208
|
-
const isOwningRelation = (relation) => {
|
|
209
|
-
return !isInverseRelation(relation);
|
|
210
|
-
};
|
|
211
|
-
const isColumn = (field) => isIt(field, "columnType");
|
|
212
|
-
const emptyModelSchema = { entities: {}, enums: {} };
|
|
213
|
-
export {
|
|
214
|
-
ModelError,
|
|
215
|
-
ModelErrorCode,
|
|
216
|
-
acceptEveryFieldVisitor,
|
|
217
|
-
acceptFieldVisitor,
|
|
218
|
-
acceptRelationTypeVisitor,
|
|
219
|
-
emptyModelSchema,
|
|
220
|
-
getColumnName,
|
|
221
|
-
getColumnType,
|
|
222
|
-
getEntity,
|
|
223
|
-
getField,
|
|
224
|
-
getTargetEntity,
|
|
225
|
-
isColumn,
|
|
226
|
-
isInverseRelation,
|
|
227
|
-
isOwningRelation,
|
|
228
|
-
isRelation,
|
|
229
|
-
tryGetColumnName
|
|
230
|
-
};
|
|
231
|
-
//# sourceMappingURL=modelUtils.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"modelUtils.js","sources":["../../../../../packages/schema-utils/src/model/modelUtils.ts"],"sourcesContent":["import { assertNever, isIt } from '../utils'\nimport { Model } from '@contember/schema'\n\nexport enum ModelErrorCode {\n\tENTITY_NOT_FOUND = 'entityNotFound',\n\tFIELD_NOT_FOUND = 'fieldNotFound',\n\tNOT_RELATION = 'notRelation',\n\tNOT_OWNING_SIDE = 'notOwningSide',\n}\n\nexport class ModelError extends Error {\n\tconstructor(public readonly code: ModelErrorCode, message: string) {\n\t\tsuper(message)\n\t}\n}\n\nconst createEntityNotFoundError = (entityName: string) =>\n\tnew ModelError(ModelErrorCode.ENTITY_NOT_FOUND, `Entity ${entityName} not found`)\n\nconst createFieldNotFoundError = (entityName: string, fieldName: string) =>\n\tnew ModelError(ModelErrorCode.FIELD_NOT_FOUND, `Field ${fieldName} of entity ${entityName} not found`)\n\nexport const getEntity = (schema: Model.Schema, entityName: string): Model.Entity => {\n\tconst entity = schema.entities[entityName]\n\tif (!entity) {\n\t\tthrow createEntityNotFoundError(entityName)\n\t}\n\treturn entity\n}\n\nexport const getField = (entity: Model.Entity, fieldName: string): Model.AnyField => {\n\tconst field = entity.fields[fieldName]\n\tif (!field) {\n\t\tthrow createFieldNotFoundError(entity.name, fieldName)\n\t}\n\treturn field\n}\n\nexport const getColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\tvisitColumn: ({ column }) => column.columnName,\n\t\tvisitRelation: ({ entity, relation }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn relation.joiningColumn.columnName\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const tryGetColumnName = (schema: Model.Schema, entity: Model.Entity, fieldName: string) => {\n\ttry {\n\t\treturn getColumnName(schema, entity, fieldName)\n\t} catch (e) {\n\t\tif (e instanceof ModelError && e.code === ModelErrorCode.NOT_OWNING_SIDE) {\n\t\t\treturn undefined\n\t\t}\n\t\tthrow e\n\t}\n}\n\nexport const getColumnType = (schema: Model.Schema, entity: Model.Entity, fieldName: string): string => {\n\treturn acceptFieldVisitor(schema, entity, fieldName, {\n\t\t// TODO solve enum handling properly maybe we should distinguish between domain and column type\n\t\tvisitColumn: ({ column }) => (column.type === Model.ColumnType.Enum ? 'text' : column.columnType) + (column.list ? '[]' : ''),\n\t\tvisitRelation: ({ entity, relation, targetEntity }) => {\n\t\t\tif (isIt<Model.JoiningColumnRelation>(relation, 'joiningColumn')) {\n\t\t\t\treturn getColumnType(schema, targetEntity, targetEntity.primary)\n\t\t\t}\n\t\t\tthrow new ModelError(\n\t\t\t\tModelErrorCode.NOT_OWNING_SIDE,\n\t\t\t\t`Field ${relation.name} of entity ${entity.name} is not an owning side`,\n\t\t\t)\n\t\t},\n\t})\n}\n\nexport const getTargetEntity = (\n\tschema: Model.Schema,\n\tentity: Model.Entity,\n\trelationName: string,\n): Model.Entity | null => {\n\treturn acceptFieldVisitor(schema, entity, relationName, {\n\t\tvisitColumn: () => null,\n\t\tvisitRelation: ({ targetEntity }) => targetEntity,\n\t})\n}\n\nexport const acceptEveryFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tvisitor: Model.FieldVisitor<T>,\n): { [fieldName: string]: T } => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst result: { [fieldName: string]: T } = {}\n\tfor (const field in entityObj.fields) {\n\t\tresult[field] = acceptFieldVisitor(schema, entityObj, field, visitor)\n\t}\n\treturn result\n}\n\nexport const acceptFieldVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\tfield: string | Model.AnyField,\n\tvisitor: Model.FieldVisitor<T>,\n): T => {\n\tconst entityObj: Model.Entity = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst fieldObj: Model.AnyField = typeof field === 'string' ? entityObj.fields[field] : field\n\tif (!fieldObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof field === 'string' ? field : 'unknown')\n\t}\n\n\tif (isIt<Model.AnyColumn>(fieldObj, 'columnType')) {\n\t\treturn visitor.visitColumn({\n\t\t\tentity: entityObj,\n\t\t\tcolumn: fieldObj,\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationVisitor<T>>(visitor, 'visitRelation')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitRelation.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitRelation.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitRelation.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByGenericTypeVisitor<T>>(visitor, 'visitHasMany')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, {\n\t\t\tvisitManyHasManyInverse: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitManyHasManyOwning: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasMany: visitor.visitHasMany.bind(visitor),\n\t\t\tvisitOneHasOneInverse: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitOneHasOneOwning: visitor.visitHasOne.bind(visitor),\n\t\t\tvisitManyHasOne: visitor.visitHasOne.bind(visitor),\n\t\t})\n\t}\n\n\tif (isIt<Model.ColumnVisitor<T> & Model.RelationByTypeVisitor<T>>(visitor, 'visitManyHasManyInverse')) {\n\t\treturn acceptRelationTypeVisitor(schema, entityObj, fieldObj, visitor)\n\t}\n\n\tthrow new Error()\n}\n\nexport const acceptRelationTypeVisitor = <T>(\n\tschema: Model.Schema,\n\tentity: string | Model.Entity,\n\trelation: string | Model.AnyRelation,\n\tvisitor: Model.RelationByTypeVisitor<T>,\n): T => {\n\tconst entityObj = typeof entity === 'string' ? getEntity(schema, entity) : entity\n\n\tconst relationObj: Model.AnyField = typeof relation === 'string' ? entityObj.fields[relation] : relation\n\tif (!relationObj) {\n\t\tthrow createFieldNotFoundError(entityObj.name, typeof relation === 'string' ? relation : 'unknown')\n\t}\n\n\tif (!isRelation(relationObj)) {\n\t\tthrow new ModelError(\n\t\t\tModelErrorCode.NOT_RELATION,\n\t\t\t`Field ${relationObj.name} of entity ${entityObj.name} is not a relation`,\n\t\t)\n\t}\n\n\tconst targetEntity = getEntity(schema, relationObj.target)\n\n\tif (isInverseRelation(relationObj)) {\n\t\tconst targetRelation = targetEntity.fields[relationObj.ownedBy]\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyInverse({\n\t\t\t\t\ttype: 'manyHasManyInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyOwningRelation,\n\t\t\t\t},\n\t\t\t\t)\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneInverse({\n\t\t\t\t\ttype: 'oneHasOneInverse',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneOwningRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasMany:\n\t\t\t\treturn visitor.visitOneHasMany({\n\t\t\t\t\ttype: 'oneHasMany',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasOneRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t} else if (isOwningRelation(relationObj)) {\n\t\tconst targetRelation = relationObj.inversedBy ? targetEntity.fields[relationObj.inversedBy] : null\n\n\t\tswitch (relationObj.type) {\n\t\t\tcase Model.RelationType.ManyHasMany:\n\t\t\t\treturn visitor.visitManyHasManyOwning({\n\t\t\t\t\ttype: 'manyHasManyOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.ManyHasManyInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.OneHasOne:\n\t\t\t\treturn visitor.visitOneHasOneOwning({\n\t\t\t\t\ttype: 'oneHasOneOwning',\n\t\t\t\t\tentity: entityObj,\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasOneInverseRelation,\n\t\t\t\t})\n\t\t\tcase Model.RelationType.ManyHasOne:\n\t\t\t\treturn visitor.visitManyHasOne({\n\t\t\t\t\ttype: 'manyHasOne',\n\t\t\t\t\tentity: entityObj, //\n\t\t\t\t\trelation: relationObj,\n\t\t\t\t\ttargetEntity: targetEntity,\n\t\t\t\t\ttargetRelation: targetRelation as Model.OneHasManyRelation,\n\t\t\t\t})\n\t\t\tdefault:\n\t\t\t\treturn assertNever(relationObj)\n\t\t}\n\t}\n\n\tthrow new Error('Invalid relation type')\n}\n\nexport const isRelation = (field: Model.AnyField): field is Model.AnyRelation => {\n\treturn isIt<Model.Relation>(field, 'target')\n}\n\nexport const isInverseRelation = (relation: Model.Relation): relation is Model.InverseRelation => {\n\treturn (relation as Model.InverseRelation).ownedBy !== undefined\n}\n\nexport const isOwningRelation = (relation: Model.Relation): relation is Model.OwningRelation => {\n\treturn !isInverseRelation(relation)\n}\n\nexport const isColumn = (field: Model.AnyField): field is Model.AnyColumn => isIt<Model.AnyColumn>(field, 'columnType')\n\nexport const emptyModelSchema: Model.Schema = { entities: {}, enums: {} }\n"],"names":["ModelErrorCode","entity"],"mappings":"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"}
|