UNPKG

@decaf-ts/core

Version:

Core persistence module for the decaf framework

60 lines 2.82 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.repository = repository; const injectable_decorators_1 = require("@decaf-ts/injectable-decorators"); const db_decorators_1 = require("@decaf-ts/db-decorators"); const decorator_validation_1 = require("@decaf-ts/decorator-validation"); const Repository_1 = require("./Repository.cjs"); const persistence_1 = require("./../persistence/index.cjs"); const decoration_1 = require("@decaf-ts/decoration"); /** * @description Repository decorator for model classes. * @summary Creates and registers a repository for a model class. Can be used as both a property decorator and a class decorator. * @template T - The model type that extends Model. * @param {Constructor<T>} model - The constructor of the model class. * @param {string} [flavour] - the required adapter's flavour/alias. If not provided, it will be retrieved from the model metadata.. * @return {any} - The decorator function. * @function repository * @mermaid * sequenceDiagram * participant C as Client Code * participant D as Decorator * participant R as Repository * participant M as Metadata * * C->>D: Apply @repository(Model) * alt Property Decorator * D->>D: Check if propertyKey exists * D->>+C: Return inject(name) decorator * else Class Decorator * D->>M: Set repository metadata on model * D->>R: Register model with Repository * D->>+C: Return injectable decorator with config * C->>C: Define DBKeys.CLASS property * end * @category Decorators */ function repository(model, flavour) { return ((original, propertyKey) => { if (propertyKey) { return (0, injectable_decorators_1.inject)(decoration_1.Metadata.constr(model))(original, propertyKey); } decoration_1.Metadata.set(db_decorators_1.DBKeys.REPOSITORY, decoration_1.Metadata.key(flavour || persistence_1.Adapter.currentFlavour, decorator_validation_1.Model.tableName(model)), original); (0, decoration_1.metadata)(db_decorators_1.DBKeys.REPOSITORY, original.name)(model); flavour = flavour || decoration_1.Metadata.get(original.constructor, persistence_1.PersistenceKeys.ADAPTER); Repository_1.Repository.register(decoration_1.Metadata.constr(model), original, flavour); return (0, injectable_decorators_1.injectable)(decoration_1.Metadata.constr(model), { callback: (instance) => { Object.defineProperty(instance, db_decorators_1.DBKeys.CLASS, { enumerable: false, configurable: false, writable: false, value: model, }); return instance; }, })(original); }); } //# sourceMappingURL=decorators.js.map