@contember/schema-definition 2.1.0-alpha.1 → 2.1.0-alpha.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +10 -3
- package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.cjs.map +1 -1
- package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.js +10 -3
- package/dist/development/src/model/definition/fieldDefinitions/ColumnDefinition.js.map +1 -1
- package/dist/development/src/model/definition/index.cjs +2 -1
- package/dist/development/src/model/definition/index.cjs.map +1 -1
- package/dist/development/src/model/definition/index.js +2 -1
- 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/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 +10 -3
- package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.cjs.map +1 -1
- package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.js +10 -3
- package/dist/production/src/model/definition/fieldDefinitions/ColumnDefinition.js.map +1 -1
- package/dist/production/src/model/definition/index.cjs +2 -1
- package/dist/production/src/model/definition/index.cjs.map +1 -1
- package/dist/production/src/model/definition/index.js +2 -1
- 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/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 +1 -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 +6 -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/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/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 +12 -2
- package/src/model/definition/index.ts +2 -0
- package/src/model/definition/internal/SchemaBuilder.ts +6 -1
|
@@ -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;"}
|
|
@@ -44,15 +44,22 @@ class ColumnDefinition extends FieldDefinition.FieldDefinition {
|
|
|
44
44
|
typeAlias(alias) {
|
|
45
45
|
return this.withOption("typeAlias", alias);
|
|
46
46
|
}
|
|
47
|
-
|
|
48
|
-
|
|
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;
|
|
49
55
|
const common = {
|
|
50
56
|
name,
|
|
51
57
|
columnName: columnName || conventions.getColumnName(name),
|
|
52
58
|
nullable: nullable === void 0 ? true : nullable,
|
|
53
59
|
...list ? { list } : {},
|
|
54
60
|
...defaultValue !== void 0 ? { default: defaultValue } : {},
|
|
55
|
-
...sequence !== void 0 ? { sequence } : {}
|
|
61
|
+
...sequence !== void 0 ? { sequence } : {},
|
|
62
|
+
...type === schema.Model.ColumnType.String && collation !== void 0 ? { collation } : {}
|
|
56
63
|
};
|
|
57
64
|
if (type === schema.Model.ColumnType.Enum) {
|
|
58
65
|
if (typeAlias) {
|
|
@@ -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 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\tcreateField({ name, conventions, enumRegistry, entityName }: CreateFieldContext): Model.AnyField {\n\t\tconst { type, nullable, columnName, enumDefinition, default: defaultValue, columnType, typeAlias, sequence, list } = 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}\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} & 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,OAAyB;AACxB,WAAA,KAAK,WAAW,QAAQ,IAAI;AAAA,EAAA;AAAA,EAG7B,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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"}
|
|
@@ -42,15 +42,22 @@ class ColumnDefinition extends FieldDefinition {
|
|
|
42
42
|
typeAlias(alias) {
|
|
43
43
|
return this.withOption("typeAlias", alias);
|
|
44
44
|
}
|
|
45
|
-
|
|
46
|
-
|
|
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;
|
|
47
53
|
const common = {
|
|
48
54
|
name,
|
|
49
55
|
columnName: columnName || conventions.getColumnName(name),
|
|
50
56
|
nullable: nullable === void 0 ? true : nullable,
|
|
51
57
|
...list ? { list } : {},
|
|
52
58
|
...defaultValue !== void 0 ? { default: defaultValue } : {},
|
|
53
|
-
...sequence !== void 0 ? { sequence } : {}
|
|
59
|
+
...sequence !== void 0 ? { sequence } : {},
|
|
60
|
+
...type === Model.ColumnType.String && collation !== void 0 ? { collation } : {}
|
|
54
61
|
};
|
|
55
62
|
if (type === Model.ColumnType.Enum) {
|
|
56
63
|
if (typeAlias) {
|
|
@@ -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 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\tcreateField({ name, conventions, enumRegistry, entityName }: CreateFieldContext): Model.AnyField {\n\t\tconst { type, nullable, columnName, enumDefinition, default: defaultValue, columnType, typeAlias, sequence, list } = 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}\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} & 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,OAAyB;AACxB,WAAA,KAAK,WAAW,QAAQ,IAAI;AAAA,EAAA;AAAA,EAG7B,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) {
|
|
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -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) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","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":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAkBO,MAAe,OAAO;AAE7B;AAMO,SAAS,YAA0C,aAAgB,
|
|
1
|
+
{"version":3,"file":"index.js","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":[],"mappings":";;;;;;;;;;;;;;;;;;;;;AAkBO,MAAe,OAAO;AAE7B;AAMO,SAAS,YAA0C,aAAgB,UAGtE,IAAkB;AACrB,QAAM,gBAAgB,IAAI;AAAA,IACzB,IAAI,yBAAyB;AAAA,IAC7B,QAAQ;AAAA,IACR,EAAE,kBAAkB,QAAQ,iBAAiB;AAAA,EAC9C;AACA,aAAW,CAAC,MAAM,UAAU,KAAK,OAAO,QAAQ,WAAW,GAAG;AAC7D,QAAI,sBAAsB,gBAAgB;AAC3B,oBAAA,QAAQ,MAAM,UAAU;AAAA,IAAA,WAC5B,oBAAoB,UAAU,GAAG;AAC7B,oBAAA,UAAU,MAAM,UAAU;AAAA,IAAA;AAAA,EACzC;AAEK,QAAA,SAAS,cAAc,aAAa;AACnC,SAAA;AACR;AAEO,MAAM,WAAW,MAAM;AACvB,MAAM,iBAAiB,MAAM;"}
|
|
@@ -12,9 +12,10 @@ var __defProp = Object.defineProperty;
|
|
|
12
12
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
13
13
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
14
14
|
class SchemaBuilder {
|
|
15
|
-
constructor(conventions, strictDefinitionValidator = new strict.StrictDefinitionValidator({})) {
|
|
15
|
+
constructor(conventions, strictDefinitionValidator = new strict.StrictDefinitionValidator({}), options) {
|
|
16
16
|
this.conventions = conventions;
|
|
17
17
|
this.strictDefinitionValidator = strictDefinitionValidator;
|
|
18
|
+
this.options = options;
|
|
18
19
|
__publicField(this, "entityRegistry", new EntityRegistry.EntityRegistry());
|
|
19
20
|
__publicField(this, "enumRegistry", new EnumRegistry.EnumRegistry());
|
|
20
21
|
}
|
|
@@ -43,7 +44,8 @@ class SchemaBuilder {
|
|
|
43
44
|
conventions: this.conventions,
|
|
44
45
|
enumRegistry: this.enumRegistry,
|
|
45
46
|
entityRegistry: this.entityRegistry,
|
|
46
|
-
strictDefinitionValidator: this.strictDefinitionValidator
|
|
47
|
+
strictDefinitionValidator: this.strictDefinitionValidator,
|
|
48
|
+
options: this.options
|
|
47
49
|
});
|
|
48
50
|
}).reduce((acc, field) => {
|
|
49
51
|
if (acc[field.name]) {
|
|
@@ -70,7 +72,8 @@ class SchemaBuilder {
|
|
|
70
72
|
entityRegistry: this.entityRegistry,
|
|
71
73
|
conventions: this.conventions,
|
|
72
74
|
enumRegistry: this.enumRegistry,
|
|
73
|
-
strictDefinitionValidator: this.strictDefinitionValidator
|
|
75
|
+
strictDefinitionValidator: this.strictDefinitionValidator,
|
|
76
|
+
options: this.options
|
|
74
77
|
});
|
|
75
78
|
});
|
|
76
79
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaBuilder.cjs","sources":["../../../../../../../packages/schema-definition/src/model/definition/internal/SchemaBuilder.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { NamingConventions } from '@contember/schema-utils'\nimport 'reflect-metadata'\nimport { tuple } from '../../../utils'\nimport { EntityConstructor, FieldsDefinition } from '../types'\nimport { EnumDefinition } from '../EnumDefinition'\nimport { EntityRegistry } from './EntityRegistry'\nimport { EnumRegistry } from './EnumRegistry'\nimport { ColumnDefinition } from '../fieldDefinitions'\nimport { applyEntityExtensions } from '../extensions'\nimport { StrictOptions, StrictDefinitionValidator } from '../../../strict'\n\nexport class SchemaBuilder {\n\tprivate entityRegistry = new EntityRegistry()\n\n\tprivate enumRegistry = new EnumRegistry()\n\n\tconstructor(\n\t\tprivate readonly conventions: NamingConventions,\n\t\tprivate readonly strictDefinitionValidator: StrictDefinitionValidator = new StrictDefinitionValidator({}),\n\t) {}\n\n\tpublic addEntity(name: string, entity: EntityConstructor): void {\n\t\tthis.entityRegistry.register(name, entity)\n\t}\n\n\tpublic addEnum(name: string, definition: EnumDefinition): void {\n\t\tthis.enumRegistry.register(name, definition)\n\t}\n\n\tpublic createSchema(): Model.Schema {\n\t\tconst entities = Object.entries(this.entityRegistry.entities).map(([entityName, definition]): Model.Entity => {\n\t\t\tconst definitionInstance: FieldsDefinition = new definition()\n\n\t\t\tObject.entries(definitionInstance).forEach(([fieldName, fieldDefinition]) => {\n\t\t\t\tif (typeof fieldDefinition !== 'object' || !('createField' in fieldDefinition)) {\n\t\t\t\t\tthrow `Entity \"${entityName}\": field \"${fieldName}\" does not contain expected field definition. Check that you are correctly invoking methods of the definition builder.`\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst primaryName = this.conventions.getPrimaryField()\n\n\t\t\tconst fields: Model.Entity['fields'] = [\n\t\t\t\t...definitionInstance[primaryName] ? [] : [tuple(primaryName, this.createPrimaryColumn())],\n\t\t\t\t...Object.entries(definitionInstance),\n\t\t\t]\n\t\t\t\t.map(([name, definition]) => {\n\t\t\t\t\treturn definition.createField({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tentityName,\n\t\t\t\t\t\tconventions: this.conventions,\n\t\t\t\t\t\tenumRegistry: this.enumRegistry,\n\t\t\t\t\t\tentityRegistry: this.entityRegistry,\n\t\t\t\t\t\tstrictDefinitionValidator: this.strictDefinitionValidator,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.reduce<Model.Entity['fields']>((acc, field) => {\n\t\t\t\t\tif (acc[field.name]) {\n\t\t\t\t\t\tthrow new Error(`Entity ${entityName}: field ${field.name} is already registered`)\n\t\t\t\t\t}\n\t\t\t\t\treturn { ...acc, [field.name]: field }\n\t\t\t\t}, {})\n\n\n\t\t\tconst entity: Model.Entity = {\n\t\t\t\tname: entityName,\n\t\t\t\tprimary: primaryName,\n\t\t\t\tprimaryColumn: (fields[primaryName] as Model.AnyColumn).columnName,\n\t\t\t\tunique: this.createUnique(entityName, definitionInstance),\n\t\t\t\tindexes: [],\n\t\t\t\tfields: fields,\n\t\t\t\ttableName: this.conventions.getTableName(entityName),\n\t\t\t\teventLog: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t},\n\t\t\t}\n\t\t\treturn applyEntityExtensions(definition, {\n\t\t\t\tentity,\n\t\t\t\tdefinition: definitionInstance,\n\t\t\t\tregistry: this.entityRegistry,\n\t\t\t\tentityRegistry: this.entityRegistry,\n\t\t\t\tconventions: this.conventions,\n\t\t\t\tenumRegistry: this.enumRegistry,\n\t\t\t\tstrictDefinitionValidator: this.strictDefinitionValidator,\n\t\t\t})\n\t\t})\n\n\t\treturn {\n\t\t\tenums: Object.entries(this.enumRegistry.enums).reduce((acc, [name, def]) => ({ ...acc, [name]: def.values }), {}),\n\t\t\tentities: entities.reduce((acc, entity) => ({ ...acc, [entity.name]: entity }), {}),\n\t\t}\n\t}\n\n\tprivate createPrimaryColumn(): ColumnDefinition {\n\t\treturn new ColumnDefinition({\n\t\t\tnullable: false,\n\t\t\ttype: Model.ColumnType.Uuid,\n\t\t})\n\t}\n\n\tprivate createUnique(entityName: string, fieldDefinitions: FieldsDefinition): Model.
|
|
1
|
+
{"version":3,"file":"SchemaBuilder.cjs","sources":["../../../../../../../packages/schema-definition/src/model/definition/internal/SchemaBuilder.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { NamingConventions } from '@contember/schema-utils'\nimport 'reflect-metadata'\nimport { tuple } from '../../../utils'\nimport { EntityConstructor, FieldsDefinition } from '../types'\nimport { EnumDefinition } from '../EnumDefinition'\nimport { EntityRegistry } from './EntityRegistry'\nimport { EnumRegistry } from './EnumRegistry'\nimport { ColumnDefinition } from '../fieldDefinitions'\nimport { applyEntityExtensions } from '../extensions'\nimport { StrictOptions, StrictDefinitionValidator } from '../../../strict'\n\nexport class SchemaBuilder {\n\tprivate entityRegistry = new EntityRegistry()\n\n\tprivate enumRegistry = new EnumRegistry()\n\n\tconstructor(\n\t\tprivate readonly conventions: NamingConventions,\n\t\tprivate readonly strictDefinitionValidator: StrictDefinitionValidator = new StrictDefinitionValidator({}),\n\t\tprivate readonly options: {\n\t\t\tdefaultCollation?: string\n\t\t},\n\t) {}\n\n\tpublic addEntity(name: string, entity: EntityConstructor): void {\n\t\tthis.entityRegistry.register(name, entity)\n\t}\n\n\tpublic addEnum(name: string, definition: EnumDefinition): void {\n\t\tthis.enumRegistry.register(name, definition)\n\t}\n\n\tpublic createSchema(): Model.Schema {\n\t\tconst entities = Object.entries(this.entityRegistry.entities).map(([entityName, definition]): Model.Entity => {\n\t\t\tconst definitionInstance: FieldsDefinition = new definition()\n\n\t\t\tObject.entries(definitionInstance).forEach(([fieldName, fieldDefinition]) => {\n\t\t\t\tif (typeof fieldDefinition !== 'object' || !('createField' in fieldDefinition)) {\n\t\t\t\t\tthrow `Entity \"${entityName}\": field \"${fieldName}\" does not contain expected field definition. Check that you are correctly invoking methods of the definition builder.`\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst primaryName = this.conventions.getPrimaryField()\n\n\t\t\tconst fields: Model.Entity['fields'] = [\n\t\t\t\t...definitionInstance[primaryName] ? [] : [tuple(primaryName, this.createPrimaryColumn())],\n\t\t\t\t...Object.entries(definitionInstance),\n\t\t\t]\n\t\t\t\t.map(([name, definition]) => {\n\t\t\t\t\treturn definition.createField({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tentityName,\n\t\t\t\t\t\tconventions: this.conventions,\n\t\t\t\t\t\tenumRegistry: this.enumRegistry,\n\t\t\t\t\t\tentityRegistry: this.entityRegistry,\n\t\t\t\t\t\tstrictDefinitionValidator: this.strictDefinitionValidator,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.reduce<Model.Entity['fields']>((acc, field) => {\n\t\t\t\t\tif (acc[field.name]) {\n\t\t\t\t\t\tthrow new Error(`Entity ${entityName}: field ${field.name} is already registered`)\n\t\t\t\t\t}\n\t\t\t\t\treturn { ...acc, [field.name]: field }\n\t\t\t\t}, {})\n\n\n\t\t\tconst entity: Model.Entity = {\n\t\t\t\tname: entityName,\n\t\t\t\tprimary: primaryName,\n\t\t\t\tprimaryColumn: (fields[primaryName] as Model.AnyColumn).columnName,\n\t\t\t\tunique: this.createUnique(entityName, definitionInstance),\n\t\t\t\tindexes: [],\n\t\t\t\tfields: fields,\n\t\t\t\ttableName: this.conventions.getTableName(entityName),\n\t\t\t\teventLog: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t},\n\t\t\t}\n\t\t\treturn applyEntityExtensions(definition, {\n\t\t\t\tentity,\n\t\t\t\tdefinition: definitionInstance,\n\t\t\t\tregistry: this.entityRegistry,\n\t\t\t\tentityRegistry: this.entityRegistry,\n\t\t\t\tconventions: this.conventions,\n\t\t\t\tenumRegistry: this.enumRegistry,\n\t\t\t\tstrictDefinitionValidator: this.strictDefinitionValidator,\n\t\t\t\toptions: this.options,\n\t\t\t})\n\t\t})\n\n\t\treturn {\n\t\t\tenums: Object.entries(this.enumRegistry.enums).reduce((acc, [name, def]) => ({ ...acc, [name]: def.values }), {}),\n\t\t\tentities: entities.reduce((acc, entity) => ({ ...acc, [entity.name]: entity }), {}),\n\t\t}\n\t}\n\n\tprivate createPrimaryColumn(): ColumnDefinition {\n\t\treturn new ColumnDefinition({\n\t\t\tnullable: false,\n\t\t\ttype: Model.ColumnType.Uuid,\n\t\t})\n\t}\n\n\tprivate createUnique(entityName: string, fieldDefinitions: FieldsDefinition): Model.Uniques {\n\t\tconst unique: Model.UniqueConstraint[] = []\n\t\tfor (const [fieldName, definition] of Object.entries(fieldDefinitions)) {\n\t\t\tif (definition.options.unique) {\n\t\t\t\tunique.push({ fields: [fieldName], ...definition.options.unique })\n\t\t\t}\n\t\t}\n\t\treturn unique\n\t}\n}\n"],"names":["StrictDefinitionValidator","EntityRegistry","EnumRegistry","tuple","definition","applyEntityExtensions","ColumnDefinition","Model"],"mappings":"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"}
|
|
@@ -10,9 +10,10 @@ var __defProp = Object.defineProperty;
|
|
|
10
10
|
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
11
11
|
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
12
12
|
class SchemaBuilder {
|
|
13
|
-
constructor(conventions, strictDefinitionValidator = new StrictDefinitionValidator({})) {
|
|
13
|
+
constructor(conventions, strictDefinitionValidator = new StrictDefinitionValidator({}), options) {
|
|
14
14
|
this.conventions = conventions;
|
|
15
15
|
this.strictDefinitionValidator = strictDefinitionValidator;
|
|
16
|
+
this.options = options;
|
|
16
17
|
__publicField(this, "entityRegistry", new EntityRegistry());
|
|
17
18
|
__publicField(this, "enumRegistry", new EnumRegistry());
|
|
18
19
|
}
|
|
@@ -41,7 +42,8 @@ class SchemaBuilder {
|
|
|
41
42
|
conventions: this.conventions,
|
|
42
43
|
enumRegistry: this.enumRegistry,
|
|
43
44
|
entityRegistry: this.entityRegistry,
|
|
44
|
-
strictDefinitionValidator: this.strictDefinitionValidator
|
|
45
|
+
strictDefinitionValidator: this.strictDefinitionValidator,
|
|
46
|
+
options: this.options
|
|
45
47
|
});
|
|
46
48
|
}).reduce((acc, field) => {
|
|
47
49
|
if (acc[field.name]) {
|
|
@@ -68,7 +70,8 @@ class SchemaBuilder {
|
|
|
68
70
|
entityRegistry: this.entityRegistry,
|
|
69
71
|
conventions: this.conventions,
|
|
70
72
|
enumRegistry: this.enumRegistry,
|
|
71
|
-
strictDefinitionValidator: this.strictDefinitionValidator
|
|
73
|
+
strictDefinitionValidator: this.strictDefinitionValidator,
|
|
74
|
+
options: this.options
|
|
72
75
|
});
|
|
73
76
|
});
|
|
74
77
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaBuilder.js","sources":["../../../../../../../packages/schema-definition/src/model/definition/internal/SchemaBuilder.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { NamingConventions } from '@contember/schema-utils'\nimport 'reflect-metadata'\nimport { tuple } from '../../../utils'\nimport { EntityConstructor, FieldsDefinition } from '../types'\nimport { EnumDefinition } from '../EnumDefinition'\nimport { EntityRegistry } from './EntityRegistry'\nimport { EnumRegistry } from './EnumRegistry'\nimport { ColumnDefinition } from '../fieldDefinitions'\nimport { applyEntityExtensions } from '../extensions'\nimport { StrictOptions, StrictDefinitionValidator } from '../../../strict'\n\nexport class SchemaBuilder {\n\tprivate entityRegistry = new EntityRegistry()\n\n\tprivate enumRegistry = new EnumRegistry()\n\n\tconstructor(\n\t\tprivate readonly conventions: NamingConventions,\n\t\tprivate readonly strictDefinitionValidator: StrictDefinitionValidator = new StrictDefinitionValidator({}),\n\t) {}\n\n\tpublic addEntity(name: string, entity: EntityConstructor): void {\n\t\tthis.entityRegistry.register(name, entity)\n\t}\n\n\tpublic addEnum(name: string, definition: EnumDefinition): void {\n\t\tthis.enumRegistry.register(name, definition)\n\t}\n\n\tpublic createSchema(): Model.Schema {\n\t\tconst entities = Object.entries(this.entityRegistry.entities).map(([entityName, definition]): Model.Entity => {\n\t\t\tconst definitionInstance: FieldsDefinition = new definition()\n\n\t\t\tObject.entries(definitionInstance).forEach(([fieldName, fieldDefinition]) => {\n\t\t\t\tif (typeof fieldDefinition !== 'object' || !('createField' in fieldDefinition)) {\n\t\t\t\t\tthrow `Entity \"${entityName}\": field \"${fieldName}\" does not contain expected field definition. Check that you are correctly invoking methods of the definition builder.`\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst primaryName = this.conventions.getPrimaryField()\n\n\t\t\tconst fields: Model.Entity['fields'] = [\n\t\t\t\t...definitionInstance[primaryName] ? [] : [tuple(primaryName, this.createPrimaryColumn())],\n\t\t\t\t...Object.entries(definitionInstance),\n\t\t\t]\n\t\t\t\t.map(([name, definition]) => {\n\t\t\t\t\treturn definition.createField({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tentityName,\n\t\t\t\t\t\tconventions: this.conventions,\n\t\t\t\t\t\tenumRegistry: this.enumRegistry,\n\t\t\t\t\t\tentityRegistry: this.entityRegistry,\n\t\t\t\t\t\tstrictDefinitionValidator: this.strictDefinitionValidator,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.reduce<Model.Entity['fields']>((acc, field) => {\n\t\t\t\t\tif (acc[field.name]) {\n\t\t\t\t\t\tthrow new Error(`Entity ${entityName}: field ${field.name} is already registered`)\n\t\t\t\t\t}\n\t\t\t\t\treturn { ...acc, [field.name]: field }\n\t\t\t\t}, {})\n\n\n\t\t\tconst entity: Model.Entity = {\n\t\t\t\tname: entityName,\n\t\t\t\tprimary: primaryName,\n\t\t\t\tprimaryColumn: (fields[primaryName] as Model.AnyColumn).columnName,\n\t\t\t\tunique: this.createUnique(entityName, definitionInstance),\n\t\t\t\tindexes: [],\n\t\t\t\tfields: fields,\n\t\t\t\ttableName: this.conventions.getTableName(entityName),\n\t\t\t\teventLog: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t},\n\t\t\t}\n\t\t\treturn applyEntityExtensions(definition, {\n\t\t\t\tentity,\n\t\t\t\tdefinition: definitionInstance,\n\t\t\t\tregistry: this.entityRegistry,\n\t\t\t\tentityRegistry: this.entityRegistry,\n\t\t\t\tconventions: this.conventions,\n\t\t\t\tenumRegistry: this.enumRegistry,\n\t\t\t\tstrictDefinitionValidator: this.strictDefinitionValidator,\n\t\t\t})\n\t\t})\n\n\t\treturn {\n\t\t\tenums: Object.entries(this.enumRegistry.enums).reduce((acc, [name, def]) => ({ ...acc, [name]: def.values }), {}),\n\t\t\tentities: entities.reduce((acc, entity) => ({ ...acc, [entity.name]: entity }), {}),\n\t\t}\n\t}\n\n\tprivate createPrimaryColumn(): ColumnDefinition {\n\t\treturn new ColumnDefinition({\n\t\t\tnullable: false,\n\t\t\ttype: Model.ColumnType.Uuid,\n\t\t})\n\t}\n\n\tprivate createUnique(entityName: string, fieldDefinitions: FieldsDefinition): Model.
|
|
1
|
+
{"version":3,"file":"SchemaBuilder.js","sources":["../../../../../../../packages/schema-definition/src/model/definition/internal/SchemaBuilder.ts"],"sourcesContent":["import { Model } from '@contember/schema'\nimport { NamingConventions } from '@contember/schema-utils'\nimport 'reflect-metadata'\nimport { tuple } from '../../../utils'\nimport { EntityConstructor, FieldsDefinition } from '../types'\nimport { EnumDefinition } from '../EnumDefinition'\nimport { EntityRegistry } from './EntityRegistry'\nimport { EnumRegistry } from './EnumRegistry'\nimport { ColumnDefinition } from '../fieldDefinitions'\nimport { applyEntityExtensions } from '../extensions'\nimport { StrictOptions, StrictDefinitionValidator } from '../../../strict'\n\nexport class SchemaBuilder {\n\tprivate entityRegistry = new EntityRegistry()\n\n\tprivate enumRegistry = new EnumRegistry()\n\n\tconstructor(\n\t\tprivate readonly conventions: NamingConventions,\n\t\tprivate readonly strictDefinitionValidator: StrictDefinitionValidator = new StrictDefinitionValidator({}),\n\t\tprivate readonly options: {\n\t\t\tdefaultCollation?: string\n\t\t},\n\t) {}\n\n\tpublic addEntity(name: string, entity: EntityConstructor): void {\n\t\tthis.entityRegistry.register(name, entity)\n\t}\n\n\tpublic addEnum(name: string, definition: EnumDefinition): void {\n\t\tthis.enumRegistry.register(name, definition)\n\t}\n\n\tpublic createSchema(): Model.Schema {\n\t\tconst entities = Object.entries(this.entityRegistry.entities).map(([entityName, definition]): Model.Entity => {\n\t\t\tconst definitionInstance: FieldsDefinition = new definition()\n\n\t\t\tObject.entries(definitionInstance).forEach(([fieldName, fieldDefinition]) => {\n\t\t\t\tif (typeof fieldDefinition !== 'object' || !('createField' in fieldDefinition)) {\n\t\t\t\t\tthrow `Entity \"${entityName}\": field \"${fieldName}\" does not contain expected field definition. Check that you are correctly invoking methods of the definition builder.`\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst primaryName = this.conventions.getPrimaryField()\n\n\t\t\tconst fields: Model.Entity['fields'] = [\n\t\t\t\t...definitionInstance[primaryName] ? [] : [tuple(primaryName, this.createPrimaryColumn())],\n\t\t\t\t...Object.entries(definitionInstance),\n\t\t\t]\n\t\t\t\t.map(([name, definition]) => {\n\t\t\t\t\treturn definition.createField({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tentityName,\n\t\t\t\t\t\tconventions: this.conventions,\n\t\t\t\t\t\tenumRegistry: this.enumRegistry,\n\t\t\t\t\t\tentityRegistry: this.entityRegistry,\n\t\t\t\t\t\tstrictDefinitionValidator: this.strictDefinitionValidator,\n\t\t\t\t\t\toptions: this.options,\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t\t.reduce<Model.Entity['fields']>((acc, field) => {\n\t\t\t\t\tif (acc[field.name]) {\n\t\t\t\t\t\tthrow new Error(`Entity ${entityName}: field ${field.name} is already registered`)\n\t\t\t\t\t}\n\t\t\t\t\treturn { ...acc, [field.name]: field }\n\t\t\t\t}, {})\n\n\n\t\t\tconst entity: Model.Entity = {\n\t\t\t\tname: entityName,\n\t\t\t\tprimary: primaryName,\n\t\t\t\tprimaryColumn: (fields[primaryName] as Model.AnyColumn).columnName,\n\t\t\t\tunique: this.createUnique(entityName, definitionInstance),\n\t\t\t\tindexes: [],\n\t\t\t\tfields: fields,\n\t\t\t\ttableName: this.conventions.getTableName(entityName),\n\t\t\t\teventLog: {\n\t\t\t\t\tenabled: true,\n\t\t\t\t},\n\t\t\t}\n\t\t\treturn applyEntityExtensions(definition, {\n\t\t\t\tentity,\n\t\t\t\tdefinition: definitionInstance,\n\t\t\t\tregistry: this.entityRegistry,\n\t\t\t\tentityRegistry: this.entityRegistry,\n\t\t\t\tconventions: this.conventions,\n\t\t\t\tenumRegistry: this.enumRegistry,\n\t\t\t\tstrictDefinitionValidator: this.strictDefinitionValidator,\n\t\t\t\toptions: this.options,\n\t\t\t})\n\t\t})\n\n\t\treturn {\n\t\t\tenums: Object.entries(this.enumRegistry.enums).reduce((acc, [name, def]) => ({ ...acc, [name]: def.values }), {}),\n\t\t\tentities: entities.reduce((acc, entity) => ({ ...acc, [entity.name]: entity }), {}),\n\t\t}\n\t}\n\n\tprivate createPrimaryColumn(): ColumnDefinition {\n\t\treturn new ColumnDefinition({\n\t\t\tnullable: false,\n\t\t\ttype: Model.ColumnType.Uuid,\n\t\t})\n\t}\n\n\tprivate createUnique(entityName: string, fieldDefinitions: FieldsDefinition): Model.Uniques {\n\t\tconst unique: Model.UniqueConstraint[] = []\n\t\tfor (const [fieldName, definition] of Object.entries(fieldDefinitions)) {\n\t\t\tif (definition.options.unique) {\n\t\t\t\tunique.push({ fields: [fieldName], ...definition.options.unique })\n\t\t\t}\n\t\t}\n\t\treturn unique\n\t}\n}\n"],"names":["definition"],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const MetadataStore = require("../../utils/MetadataStore.cjs");
|
|
4
|
+
const entityAclExtensionsStore = MetadataStore.createMetadataStore([]);
|
|
5
|
+
const extendEntityAcl = (extension) => {
|
|
6
|
+
return function(cls) {
|
|
7
|
+
entityAclExtensionsStore.update(cls, (current) => [...current, extension]);
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
const applyEntityAclExtensions = (cls, args) => entityAclExtensionsStore.get(cls).reduce(
|
|
11
|
+
(permissions, ext) => ext({ ...args, permissions }),
|
|
12
|
+
args.permissions
|
|
13
|
+
);
|
|
14
|
+
exports.applyEntityAclExtensions = applyEntityAclExtensions;
|
|
15
|
+
exports.extendEntityAcl = extendEntityAcl;
|
|
16
|
+
//# sourceMappingURL=aclExtensions.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aclExtensions.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/aclExtensions.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { createMetadataStore, DecoratorFunction, EntityConstructor } from '../../utils'\nimport { Role } from './roles'\n\nexport type EntityAclExtensionArgs =\n\t& {\n\t\tentity: Model.Entity\n\t\trole: Role\n\t\tpermissions: Acl.EntityPermissions\n\t}\n\nconst entityAclExtensionsStore = createMetadataStore<EntityAclExtension[]>([])\n\nexport type EntityAclExtension = (args: EntityAclExtensionArgs) => Acl.EntityPermissions\nexport const extendEntityAcl = <T>(extension: EntityAclExtension): DecoratorFunction<T> => {\n\treturn function (cls: EntityConstructor) {\n\t\tentityAclExtensionsStore.update(cls, current => [...current, extension])\n\t}\n}\n\nexport const applyEntityAclExtensions = (\n\tcls: EntityConstructor,\n\targs: EntityAclExtensionArgs,\n): Acl.EntityPermissions =>\n\tentityAclExtensionsStore.get(cls).reduce(\n\t\t(permissions, ext) => ext({ ...args, permissions }),\n\t\targs.permissions,\n\t)\n"],"names":["createMetadataStore"],"mappings":";;;AAWA,MAAM,2BAA2BA,cAA0C,oBAAA,EAAE;AAGhE,MAAA,kBAAkB,CAAI,cAAwD;AAC1F,SAAO,SAAU,KAAwB;AACxC,6BAAyB,OAAO,KAAK,CAAA,YAAW,CAAC,GAAG,SAAS,SAAS,CAAC;AAAA,EACxE;AACD;AAEO,MAAM,2BAA2B,CACvC,KACA,SAEA,yBAAyB,IAAI,GAAG,EAAE;AAAA,EACjC,CAAC,aAAa,QAAQ,IAAI,EAAE,GAAG,MAAM,aAAa;AAAA,EAClD,KAAK;AACN;;;"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { createMetadataStore } from "../../utils/MetadataStore.js";
|
|
2
|
+
const entityAclExtensionsStore = createMetadataStore([]);
|
|
3
|
+
const extendEntityAcl = (extension) => {
|
|
4
|
+
return function(cls) {
|
|
5
|
+
entityAclExtensionsStore.update(cls, (current) => [...current, extension]);
|
|
6
|
+
};
|
|
7
|
+
};
|
|
8
|
+
const applyEntityAclExtensions = (cls, args) => entityAclExtensionsStore.get(cls).reduce(
|
|
9
|
+
(permissions, ext) => ext({ ...args, permissions }),
|
|
10
|
+
args.permissions
|
|
11
|
+
);
|
|
12
|
+
export {
|
|
13
|
+
applyEntityAclExtensions,
|
|
14
|
+
extendEntityAcl
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=aclExtensions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aclExtensions.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/aclExtensions.ts"],"sourcesContent":["import { Acl, Model } from '@contember/schema'\nimport { createMetadataStore, DecoratorFunction, EntityConstructor } from '../../utils'\nimport { Role } from './roles'\n\nexport type EntityAclExtensionArgs =\n\t& {\n\t\tentity: Model.Entity\n\t\trole: Role\n\t\tpermissions: Acl.EntityPermissions\n\t}\n\nconst entityAclExtensionsStore = createMetadataStore<EntityAclExtension[]>([])\n\nexport type EntityAclExtension = (args: EntityAclExtensionArgs) => Acl.EntityPermissions\nexport const extendEntityAcl = <T>(extension: EntityAclExtension): DecoratorFunction<T> => {\n\treturn function (cls: EntityConstructor) {\n\t\tentityAclExtensionsStore.update(cls, current => [...current, extension])\n\t}\n}\n\nexport const applyEntityAclExtensions = (\n\tcls: EntityConstructor,\n\targs: EntityAclExtensionArgs,\n): Acl.EntityPermissions =>\n\tentityAclExtensionsStore.get(cls).reduce(\n\t\t(permissions, ext) => ext({ ...args, permissions }),\n\t\targs.permissions,\n\t)\n"],"names":[],"mappings":";AAWA,MAAM,2BAA2B,oBAA0C,EAAE;AAGhE,MAAA,kBAAkB,CAAI,cAAwD;AAC1F,SAAO,SAAU,KAAwB;AACxC,6BAAyB,OAAO,KAAK,CAAA,YAAW,CAAC,GAAG,SAAS,SAAS,CAAC;AAAA,EACxE;AACD;AAEO,MAAM,2BAA2B,CACvC,KACA,SAEA,yBAAyB,IAAI,GAAG,EAAE;AAAA,EACjC,CAAC,aAAa,QAAQ,IAAI,EAAE,GAAG,MAAM,aAAa;AAAA,EAClD,KAAK;AACN;"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
-
const
|
|
3
|
+
const aclExtensions = require("./aclExtensions.cjs");
|
|
4
4
|
const allowCustomPrimary = (role) => {
|
|
5
|
-
return (
|
|
6
|
-
if (!role) {
|
|
7
|
-
|
|
8
|
-
} else {
|
|
9
|
-
stores.allowCustomPrimaryStore.update(entity, (val) => [...val, ...Array.isArray(role) ? role : [role]]);
|
|
5
|
+
return aclExtensions.extendEntityAcl(({ permissions, role: currentRole }) => {
|
|
6
|
+
if (!role || role === currentRole || Array.isArray(role) && role.includes(currentRole)) {
|
|
7
|
+
return { ...permissions, operations: { customPrimary: true } };
|
|
10
8
|
}
|
|
11
|
-
|
|
9
|
+
return permissions;
|
|
10
|
+
});
|
|
12
11
|
};
|
|
13
12
|
exports.allowCustomPrimary = allowCustomPrimary;
|
|
14
13
|
//# sourceMappingURL=customPrimary.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customPrimary.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport {
|
|
1
|
+
{"version":3,"file":"customPrimary.cjs","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { DecoratorFunction } from '../../utils'\nimport { extendEntityAcl } from './aclExtensions'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":["extendEntityAcl"],"mappings":";;;AAIa,MAAA,qBAAqB,CAAC,SAAiD;AACnF,SAAOA,8BAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC1D,QAAA,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AACzF,aAAO,EAAE,GAAG,aAAa,YAAY,EAAE,eAAe,OAAO;AAAA,IAAA;AAEvD,WAAA;AAAA,EAAA,CACP;AACF;;"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { extendEntityAcl } from "./aclExtensions.js";
|
|
2
2
|
const allowCustomPrimary = (role) => {
|
|
3
|
-
return (
|
|
4
|
-
if (!role) {
|
|
5
|
-
|
|
6
|
-
} else {
|
|
7
|
-
allowCustomPrimaryStore.update(entity, (val) => [...val, ...Array.isArray(role) ? role : [role]]);
|
|
3
|
+
return extendEntityAcl(({ permissions, role: currentRole }) => {
|
|
4
|
+
if (!role || role === currentRole || Array.isArray(role) && role.includes(currentRole)) {
|
|
5
|
+
return { ...permissions, operations: { customPrimary: true } };
|
|
8
6
|
}
|
|
9
|
-
|
|
7
|
+
return permissions;
|
|
8
|
+
});
|
|
10
9
|
};
|
|
11
10
|
export {
|
|
12
11
|
allowCustomPrimary
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"customPrimary.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport {
|
|
1
|
+
{"version":3,"file":"customPrimary.js","sources":["../../../../../../packages/schema-definition/src/acl/definition/customPrimary.ts"],"sourcesContent":["import { Role } from './roles'\nimport { DecoratorFunction } from '../../utils'\nimport { extendEntityAcl } from './aclExtensions'\n\nexport const allowCustomPrimary = (role?: Role | Role[]): DecoratorFunction<any> => {\n\treturn extendEntityAcl(({ permissions, role: currentRole }) => {\n\t\tif (!role || role === currentRole || (Array.isArray(role) && role.includes(currentRole))) {\n\t\t\treturn { ...permissions, operations: { customPrimary: true } }\n\t\t}\n\t\treturn permissions\n\t})\n}\n"],"names":[],"mappings":";AAIa,MAAA,qBAAqB,CAAC,SAAiD;AACnF,SAAO,gBAAgB,CAAC,EAAE,aAAa,MAAM,kBAAkB;AAC1D,QAAA,CAAC,QAAQ,SAAS,eAAgB,MAAM,QAAQ,IAAI,KAAK,KAAK,SAAS,WAAW,GAAI;AACzF,aAAO,EAAE,GAAG,aAAa,YAAY,EAAE,eAAe,OAAO;AAAA,IAAA;AAEvD,WAAA;AAAA,EAAA,CACP;AACF;"}
|