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