@contember/schema-definition
Advanced tools
Comparing version 1.0.0-alpha.1 to 1.0.0-alpha.2
import { Model } from '@contember/schema'; | ||
import { DecoratorFunction, EntityConstructor, FieldsDefinition } from './types'; | ||
export declare type EntityExtension = (entity: Model.Entity, definition: FieldsDefinition) => Model.Entity; | ||
import { EntityRegistry } from './internal'; | ||
interface EntityExtensionArgs { | ||
entity: Model.Entity; | ||
definition: FieldsDefinition; | ||
registry: EntityRegistry; | ||
} | ||
export declare type EntityExtension = (args: EntityExtensionArgs) => Model.Entity; | ||
export declare const extendEntity: <T>(extension: EntityExtension) => DecoratorFunction<T>; | ||
export declare const applyEntityExtensions: (cls: EntityConstructor, entity: Model.Entity, definition: FieldsDefinition) => Model.Entity; | ||
export declare const applyEntityExtensions: (cls: EntityConstructor, args: EntityExtensionArgs) => Model.Entity; | ||
export {}; | ||
//# sourceMappingURL=extensions.d.ts.map |
@@ -11,4 +11,4 @@ "use strict"; | ||
exports.extendEntity = extendEntity; | ||
const applyEntityExtensions = (cls, entity, definition) => (Reflect.getMetadata('extensions', cls) || []).reduce((entity, ext) => ext(entity, definition), entity); | ||
const applyEntityExtensions = (cls, args) => (Reflect.getMetadata('extensions', cls) || []).reduce((entity, ext) => ext({ ...args, entity }), args.entity); | ||
exports.applyEntityExtensions = applyEntityExtensions; | ||
//# sourceMappingURL=extensions.js.map |
@@ -52,3 +52,3 @@ "use strict"; | ||
}; | ||
return (0, extensions_1.applyEntityExtensions)(definition, entity, definitionInstance); | ||
return (0, extensions_1.applyEntityExtensions)(definition, { entity, definition: definitionInstance, registry: this.entityRegistry }); | ||
}); | ||
@@ -55,0 +55,0 @@ return { |
@@ -7,3 +7,3 @@ "use strict"; | ||
function Unique(options, ...args) { | ||
return (0, extensions_1.extendEntity)(entity => { | ||
return (0, extensions_1.extendEntity)(({ entity }) => { | ||
const fields = (typeof options !== 'object' ? [options, ...args] : options.fields); | ||
@@ -10,0 +10,0 @@ const name = typeof options === 'object' && options.name |
@@ -1,2 +0,5 @@ | ||
export declare const View: (sql: string) => import("./types").DecoratorFunction<unknown>; | ||
import { EntityConstructor } from './types'; | ||
export declare const View: (sql: string, { dependencies }?: { | ||
dependencies?: EntityConstructor<any>[] | undefined; | ||
}) => import("./types").DecoratorFunction<unknown>; | ||
//# sourceMappingURL=ViewDefinition.d.ts.map |
@@ -5,6 +5,7 @@ "use strict"; | ||
const extensions_1 = require("./extensions"); | ||
const View = (sql) => (0, extensions_1.extendEntity)(entity => ({ | ||
const View = (sql, { dependencies } = {}) => (0, extensions_1.extendEntity)(({ entity, registry }) => ({ | ||
...entity, | ||
view: { | ||
sql, | ||
...(dependencies ? { dependencies: dependencies === null || dependencies === void 0 ? void 0 : dependencies.map(it => registry.getName(it)) } : {}), | ||
}, | ||
@@ -11,0 +12,0 @@ })); |
{ | ||
"name": "@contember/schema-definition", | ||
"version": "1.0.0-alpha.1", | ||
"version": "1.0.0-alpha.2", | ||
"license": "Apache-2.0", | ||
@@ -11,4 +11,4 @@ "main": "dist/src/index.js", | ||
"dependencies": { | ||
"@contember/schema": "^1.0.0-alpha.1", | ||
"@contember/schema-utils": "^1.0.0-alpha.1", | ||
"@contember/schema": "^1.0.0-alpha.2", | ||
"@contember/schema-utils": "^1.0.0-alpha.2", | ||
"reflect-metadata": "^0.1.13" | ||
@@ -15,0 +15,0 @@ }, |
import { Model } from '@contember/schema' | ||
import { DecoratorFunction, EntityConstructor, FieldsDefinition } from './types' | ||
import { EntityRegistry } from './internal' | ||
export type EntityExtension = (entity: Model.Entity, definition: FieldsDefinition) => Model.Entity | ||
interface EntityExtensionArgs { | ||
entity: Model.Entity | ||
definition: FieldsDefinition | ||
registry: EntityRegistry | ||
} | ||
export type EntityExtension = (args: EntityExtensionArgs) => Model.Entity | ||
export const extendEntity = <T>(extension: EntityExtension): DecoratorFunction<T> => { | ||
@@ -14,8 +21,7 @@ return function (cls: EntityConstructor) { | ||
cls: EntityConstructor, | ||
entity: Model.Entity, | ||
definition: FieldsDefinition, | ||
args: EntityExtensionArgs, | ||
): Model.Entity => | ||
((Reflect.getMetadata('extensions', cls) || []) as EntityExtension[]).reduce( | ||
(entity, ext) => ext(entity, definition), | ||
entity, | ||
(entity, ext) => ext({ ...args, entity }), | ||
args.entity, | ||
) |
@@ -58,3 +58,3 @@ import { Model } from '@contember/schema' | ||
} | ||
return applyEntityExtensions(definition, entity, definitionInstance) | ||
return applyEntityExtensions(definition, { entity, definition: definitionInstance, registry: this.entityRegistry }) | ||
}) | ||
@@ -61,0 +61,0 @@ |
@@ -9,3 +9,3 @@ import { DecoratorFunction } from './types' | ||
export function Unique<T>(options: UniqueOptions<T> | keyof T, ...args: (keyof T)[]): DecoratorFunction<T> { | ||
return extendEntity(entity => { | ||
return extendEntity(({ entity }) => { | ||
const fields = (typeof options !== 'object' ? [options, ...args] : options.fields) as string[] | ||
@@ -12,0 +12,0 @@ const name = |
import { extendEntity } from './extensions' | ||
import { EntityConstructor } from './types' | ||
export const View = (sql: string) => | ||
extendEntity(entity => ({ | ||
export const View = (sql: string, { dependencies }: { dependencies?: EntityConstructor[] } = {}) => | ||
extendEntity(({ entity, registry }) => ({ | ||
...entity, | ||
view: { | ||
sql, | ||
...(dependencies ? { dependencies: dependencies?.map(it => registry.getName(it)) } : {}), | ||
}, | ||
})) |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
354344
4848