UNPKG

artmapper

Version:

Spring Boot clone for Node.js with TypeScript/JavaScript - JPA-like ORM, Lombok decorators, dependency injection, and MySQL support

211 lines 7.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.REQUIRED_ARGS_CONSTRUCTOR_METADATA_KEY = exports.ALL_ARGS_CONSTRUCTOR_METADATA_KEY = exports.NO_ARGS_CONSTRUCTOR_METADATA_KEY = exports.EQUALS_AND_HASH_CODE_METADATA_KEY = exports.TO_STRING_METADATA_KEY = exports.BUILDER_METADATA_KEY = exports.SETTER_METADATA_KEY = exports.GETTER_METADATA_KEY = exports.DATA_METADATA_KEY = void 0; exports.Data = Data; exports.Getter = Getter; exports.Setter = Setter; exports.Builder = Builder; exports.ToString = ToString; exports.EqualsAndHashCode = EqualsAndHashCode; exports.NoArgsConstructor = NoArgsConstructor; exports.AllArgsConstructor = AllArgsConstructor; exports.RequiredArgsConstructor = RequiredArgsConstructor; require("reflect-metadata"); exports.DATA_METADATA_KEY = Symbol('data'); exports.GETTER_METADATA_KEY = Symbol('getter'); exports.SETTER_METADATA_KEY = Symbol('setter'); exports.BUILDER_METADATA_KEY = Symbol('builder'); exports.TO_STRING_METADATA_KEY = Symbol('toString'); exports.EQUALS_AND_HASH_CODE_METADATA_KEY = Symbol('equalsAndHashCode'); exports.NO_ARGS_CONSTRUCTOR_METADATA_KEY = Symbol('noArgsConstructor'); exports.ALL_ARGS_CONSTRUCTOR_METADATA_KEY = Symbol('allArgsConstructor'); exports.REQUIRED_ARGS_CONSTRUCTOR_METADATA_KEY = Symbol('requiredArgsConstructor'); /** * Lombok @Data equivalent - generates getters, setters, toString, equals, hashCode, and constructors */ function Data() { return function (target) { Reflect.defineMetadata(exports.DATA_METADATA_KEY, true, target); // Apply all Lombok features generateGetters(target); generateSetters(target); generateToString(target); generateEqualsAndHashCode(target); generateNoArgsConstructor(target); }; } /** * Lombok @Getter - generates getter methods for all properties */ function Getter(accessLevel) { return function (target) { Reflect.defineMetadata(exports.GETTER_METADATA_KEY, { accessLevel: accessLevel || 'PUBLIC' }, target); generateGetters(target); }; } /** * Lombok @Setter - generates setter methods for all properties */ function Setter(accessLevel) { return function (target) { Reflect.defineMetadata(exports.SETTER_METADATA_KEY, { accessLevel: accessLevel || 'PUBLIC' }, target); generateSetters(target); }; } /** * Lombok @Builder - generates a builder pattern */ function Builder() { return function (target) { Reflect.defineMetadata(exports.BUILDER_METADATA_KEY, true, target); generateBuilder(target); }; } /** * Lombok @ToString - generates toString method */ function ToString(includeFieldNames) { return function (target) { Reflect.defineMetadata(exports.TO_STRING_METADATA_KEY, { includeFieldNames: includeFieldNames !== false }, target); generateToString(target); }; } /** * Lombok @EqualsAndHashCode - generates equals and hashCode methods */ function EqualsAndHashCode() { return function (target) { Reflect.defineMetadata(exports.EQUALS_AND_HASH_CODE_METADATA_KEY, true, target); generateEqualsAndHashCode(target); }; } /** * Lombok @NoArgsConstructor - generates no-args constructor */ function NoArgsConstructor() { return function (target) { Reflect.defineMetadata(exports.NO_ARGS_CONSTRUCTOR_METADATA_KEY, true, target); generateNoArgsConstructor(target); }; } /** * Lombok @AllArgsConstructor - generates constructor with all fields */ function AllArgsConstructor() { return function (target) { Reflect.defineMetadata(exports.ALL_ARGS_CONSTRUCTOR_METADATA_KEY, true, target); generateAllArgsConstructor(target); }; } /** * Lombok @RequiredArgsConstructor - generates constructor with required fields */ function RequiredArgsConstructor() { return function (target) { Reflect.defineMetadata(exports.REQUIRED_ARGS_CONSTRUCTOR_METADATA_KEY, true, target); generateRequiredArgsConstructor(target); }; } // Helper functions to generate code function generateGetters(target) { const prototype = target.prototype; const propertyNames = Object.getOwnPropertyNames(prototype).filter(name => name !== 'constructor' && typeof prototype[name] !== 'function'); propertyNames.forEach(prop => { const getterName = `get${capitalize(prop)}`; if (!prototype[getterName]) { Object.defineProperty(prototype, getterName, { get: function () { return this[prop]; }, enumerable: false, configurable: true, }); } }); } function generateSetters(target) { const prototype = target.prototype; const propertyNames = Object.getOwnPropertyNames(prototype).filter(name => name !== 'constructor' && typeof prototype[name] !== 'function'); propertyNames.forEach(prop => { const setterName = `set${capitalize(prop)}`; if (!prototype[setterName]) { prototype[setterName] = function (value) { this[prop] = value; return this; }; } }); } function generateToString(target) { const prototype = target.prototype; if (!prototype.toString || prototype.toString === Object.prototype.toString) { prototype.toString = function () { const props = Object.keys(this).map(key => `${key}=${this[key]}`); return `${target.name}(${props.join(', ')})`; }; } } function generateEqualsAndHashCode(target) { const prototype = target.prototype; if (!prototype.equals) { prototype.equals = function (other) { if (this === other) return true; if (!other || this.constructor !== other.constructor) return false; const keys = Object.keys(this); return keys.every(key => this[key] === other[key]); }; } if (!prototype.hashCode) { prototype.hashCode = function () { const keys = Object.keys(this).sort(); let hash = 0; keys.forEach(key => { const value = this[key]; const valueHash = value === null ? 0 : typeof value === 'object' ? JSON.stringify(value).length : String(value).length; hash = ((hash << 5) - hash) + valueHash; hash = hash & hash; }); return hash; }; } } function generateNoArgsConstructor(target) { // TypeScript classes already have no-args constructor by default // This is mainly for metadata tracking } function generateAllArgsConstructor(target) { // In TypeScript, we can't dynamically modify constructors // This would need to be handled at compile time or through factory methods } function generateRequiredArgsConstructor(target) { // Similar to AllArgsConstructor, would need compile-time transformation } function generateBuilder(target) { const prototype = target.prototype; if (!prototype.builder) { target.builder = function () { return new BuilderClass(target); }; } } class BuilderClass { constructor(targetClass) { this.targetClass = targetClass; this.data = {}; } set(key, value) { this.data[key] = value; return this; } build() { const instance = Object.create(this.targetClass.prototype); Object.assign(instance, this.data); return instance; } } function capitalize(str) { return str.charAt(0).toUpperCase() + str.slice(1); } //# sourceMappingURL=lombok.js.map