artmapper
Version:
Spring Boot clone for Node.js with TypeScript/JavaScript - JPA-like ORM, Lombok decorators, dependency injection, and MySQL support
146 lines • 5.49 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ONE_TO_ONE_METADATA_KEY = exports.MANY_TO_MANY_METADATA_KEY = exports.MANY_TO_ONE_METADATA_KEY = exports.ONE_TO_MANY_METADATA_KEY = exports.GENERATED_VALUE_METADATA_KEY = exports.ID_METADATA_KEY = exports.COLUMN_METADATA_KEY = exports.TABLE_METADATA_KEY = exports.ENTITY_METADATA_KEY = void 0;
exports.Entity = Entity;
exports.Table = Table;
exports.Column = Column;
exports.Id = Id;
exports.GeneratedValue = GeneratedValue;
exports.OneToMany = OneToMany;
exports.ManyToOne = ManyToOne;
exports.ManyToMany = ManyToMany;
exports.OneToOne = OneToOne;
require("reflect-metadata");
exports.ENTITY_METADATA_KEY = Symbol('entity');
exports.TABLE_METADATA_KEY = Symbol('table');
exports.COLUMN_METADATA_KEY = Symbol('column');
exports.ID_METADATA_KEY = Symbol('id');
exports.GENERATED_VALUE_METADATA_KEY = Symbol('generatedValue');
exports.ONE_TO_MANY_METADATA_KEY = Symbol('oneToMany');
exports.MANY_TO_ONE_METADATA_KEY = Symbol('manyToOne');
exports.MANY_TO_MANY_METADATA_KEY = Symbol('manyToMany');
exports.ONE_TO_ONE_METADATA_KEY = Symbol('oneToOne');
/**
* Marks a class as a JPA entity
*/
function Entity(name) {
return function (target) {
Reflect.defineMetadata(exports.ENTITY_METADATA_KEY, { name: name || target.name }, target);
};
}
/**
* Specifies the table name for the entity
*/
function Table(name) {
return function (target) {
Reflect.defineMetadata(exports.TABLE_METADATA_KEY, { name }, target);
};
}
/**
* Marks a property as a database column
*/
function Column(options) {
return function (target, propertyKey) {
const existingColumns = Reflect.getMetadata(exports.COLUMN_METADATA_KEY, target.constructor) || {};
existingColumns[propertyKey] = {
name: options?.name || propertyKey,
type: options?.type,
nullable: options?.nullable !== false,
unique: options?.unique || false,
length: options?.length,
precision: options?.precision,
scale: options?.scale,
default: options?.default,
enum: options?.enum,
unsigned: options?.unsigned,
zerofill: options?.zerofill,
autoIncrement: options?.autoIncrement,
comment: options?.comment,
charset: options?.charset,
collate: options?.collate,
onUpdate: options?.onUpdate,
};
Reflect.defineMetadata(exports.COLUMN_METADATA_KEY, existingColumns, target.constructor);
};
}
/**
* Marks a property as the primary key
*/
function Id() {
return function (target, propertyKey) {
Reflect.defineMetadata(exports.ID_METADATA_KEY, propertyKey, target.constructor);
};
}
/**
* Specifies generation strategy for primary key
*/
function GeneratedValue(options) {
return function (target, propertyKey) {
Reflect.defineMetadata(exports.GENERATED_VALUE_METADATA_KEY, {
propertyKey,
strategy: options?.strategy || 'AUTO',
generator: options?.generator,
}, target.constructor);
};
}
/**
* One-to-many relationship
*/
function OneToMany(options) {
return function (target, propertyKey) {
const existingRelations = Reflect.getMetadata(exports.ONE_TO_MANY_METADATA_KEY, target.constructor) || {};
existingRelations[propertyKey] = {
targetEntity: options?.targetEntity,
cascade: options?.cascade || [],
fetch: options?.fetch || 'LAZY',
mappedBy: options?.mappedBy,
};
Reflect.defineMetadata(exports.ONE_TO_MANY_METADATA_KEY, existingRelations, target.constructor);
};
}
/**
* Many-to-one relationship
*/
function ManyToOne(options) {
return function (target, propertyKey) {
const existingRelations = Reflect.getMetadata(exports.MANY_TO_ONE_METADATA_KEY, target.constructor) || {};
existingRelations[propertyKey] = {
targetEntity: options?.targetEntity,
cascade: options?.cascade || [],
fetch: options?.fetch || 'EAGER',
joinColumn: options?.joinColumn,
};
Reflect.defineMetadata(exports.MANY_TO_ONE_METADATA_KEY, existingRelations, target.constructor);
};
}
/**
* Many-to-many relationship
*/
function ManyToMany(options) {
return function (target, propertyKey) {
const existingRelations = Reflect.getMetadata(exports.MANY_TO_MANY_METADATA_KEY, target.constructor) || {};
existingRelations[propertyKey] = {
targetEntity: options?.targetEntity,
cascade: options?.cascade || [],
fetch: options?.fetch || 'LAZY',
joinTable: options?.joinTable,
};
Reflect.defineMetadata(exports.MANY_TO_MANY_METADATA_KEY, existingRelations, target.constructor);
};
}
/**
* One-to-one relationship
*/
function OneToOne(options) {
return function (target, propertyKey) {
const existingRelations = Reflect.getMetadata(exports.ONE_TO_ONE_METADATA_KEY, target.constructor) || {};
existingRelations[propertyKey] = {
targetEntity: options?.targetEntity,
cascade: options?.cascade || [],
fetch: options?.fetch || 'EAGER',
joinColumn: options?.joinColumn,
};
Reflect.defineMetadata(exports.ONE_TO_ONE_METADATA_KEY, existingRelations, target.constructor);
};
}
//# sourceMappingURL=entity.js.map