@arcaelas/dynamite 1.0.10 → 1.0.13

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.
Files changed (105) hide show
  1. package/LICENSE.txt +32 -0
  2. package/README.txt +206 -0
  3. package/package.json +5 -4
  4. package/src/@types/index.d.ts +96 -0
  5. package/src/@types/index.js +9 -0
  6. package/{build/src → src}/core/client.d.ts +4 -0
  7. package/{build/src → src}/core/client.js +14 -2
  8. package/src/core/table.d.ts +98 -0
  9. package/src/core/table.js +459 -0
  10. package/src/core/wrapper.d.ts +17 -0
  11. package/src/core/wrapper.js +46 -0
  12. package/src/decorators/belongs_to.d.ts +1 -0
  13. package/src/decorators/belongs_to.js +24 -0
  14. package/src/decorators/created_at.d.ts +1 -0
  15. package/{build/src → src}/decorators/created_at.js +0 -7
  16. package/src/decorators/default.d.ts +1 -0
  17. package/{build/src → src}/decorators/default.js +2 -12
  18. package/src/decorators/has_many.d.ts +1 -0
  19. package/src/decorators/has_many.js +24 -0
  20. package/{build/src → src}/decorators/index.d.ts +4 -1
  21. package/src/decorators/index.js +36 -0
  22. package/src/decorators/index_sort.d.ts +12 -0
  23. package/src/decorators/index_sort.js +43 -0
  24. package/src/decorators/mutate.d.ts +2 -0
  25. package/{build/src → src}/decorators/mutate.js +2 -11
  26. package/src/decorators/name.d.ts +1 -0
  27. package/src/decorators/name.js +28 -0
  28. package/src/decorators/not_null.d.ts +1 -0
  29. package/{build/src → src}/decorators/not_null.js +0 -7
  30. package/src/decorators/primary_key.d.ts +6 -0
  31. package/src/decorators/primary_key.js +30 -0
  32. package/src/decorators/updated_at.d.ts +12 -0
  33. package/src/decorators/updated_at.js +26 -0
  34. package/src/decorators/validate.d.ts +1 -0
  35. package/{build/src → src}/decorators/validate.js +0 -7
  36. package/{build/src → src}/index.d.ts +9 -0
  37. package/{build/src → src}/index.js +14 -5
  38. package/{build/src → src}/utils/batch-relations.js +2 -1
  39. package/src/utils/circular-detector.d.ts +82 -0
  40. package/src/utils/circular-detector.js +209 -0
  41. package/src/utils/memory-manager.d.ts +42 -0
  42. package/src/utils/memory-manager.js +108 -0
  43. package/{build/src → src}/utils/projection.js +3 -2
  44. package/src/utils/relations.d.ts +17 -0
  45. package/src/utils/relations.js +166 -0
  46. package/src/utils/security-validator.d.ts +49 -0
  47. package/src/utils/security-validator.js +152 -0
  48. package/src/utils/throttle-manager.d.ts +78 -0
  49. package/src/utils/throttle-manager.js +196 -0
  50. package/src/utils/transaction-manager.d.ts +88 -0
  51. package/src/utils/transaction-manager.js +298 -0
  52. package/build/__tests__/crud.spec.d.ts +0 -7
  53. package/build/__tests__/crud.spec.js +0 -287
  54. package/build/__tests__/crud.spec.js.map +0 -1
  55. package/build/__tests__/debug-decorators.spec.d.ts +0 -7
  56. package/build/__tests__/debug-decorators.spec.js +0 -143
  57. package/build/__tests__/debug-decorators.spec.js.map +0 -1
  58. package/build/__tests__/decorators.spec.d.ts +0 -7
  59. package/build/__tests__/decorators.spec.js +0 -203
  60. package/build/__tests__/decorators.spec.js.map +0 -1
  61. package/build/__tests__/instance-crud.spec.d.ts +0 -7
  62. package/build/__tests__/instance-crud.spec.js +0 -184
  63. package/build/__tests__/instance-crud.spec.js.map +0 -1
  64. package/build/src/core/client.js.map +0 -1
  65. package/build/src/core/table.d.ts +0 -164
  66. package/build/src/core/table.js +0 -406
  67. package/build/src/core/table.js.map +0 -1
  68. package/build/src/core/wrapper.d.ts +0 -54
  69. package/build/src/core/wrapper.js +0 -27
  70. package/build/src/core/wrapper.js.map +0 -1
  71. package/build/src/decorators/created_at.d.ts +0 -8
  72. package/build/src/decorators/created_at.js.map +0 -1
  73. package/build/src/decorators/default.d.ts +0 -8
  74. package/build/src/decorators/default.js.map +0 -1
  75. package/build/src/decorators/index.js +0 -26
  76. package/build/src/decorators/index.js.map +0 -1
  77. package/build/src/decorators/index_sort.d.ts +0 -8
  78. package/build/src/decorators/index_sort.js +0 -30
  79. package/build/src/decorators/index_sort.js.map +0 -1
  80. package/build/src/decorators/mutate.d.ts +0 -9
  81. package/build/src/decorators/mutate.js.map +0 -1
  82. package/build/src/decorators/name.d.ts +0 -8
  83. package/build/src/decorators/name.js +0 -42
  84. package/build/src/decorators/name.js.map +0 -1
  85. package/build/src/decorators/not_null.d.ts +0 -8
  86. package/build/src/decorators/not_null.js.map +0 -1
  87. package/build/src/decorators/primary_key.d.ts +0 -8
  88. package/build/src/decorators/primary_key.js +0 -26
  89. package/build/src/decorators/primary_key.js.map +0 -1
  90. package/build/src/decorators/updated_at.d.ts +0 -8
  91. package/build/src/decorators/updated_at.js +0 -18
  92. package/build/src/decorators/updated_at.js.map +0 -1
  93. package/build/src/decorators/validate.d.ts +0 -8
  94. package/build/src/decorators/validate.js.map +0 -1
  95. package/build/src/index.js.map +0 -1
  96. package/build/src/utils/batch-relations.js.map +0 -1
  97. package/build/src/utils/naming.js.map +0 -1
  98. package/build/src/utils/projection.js.map +0 -1
  99. package/build/src/utils/relations.d.ts +0 -23
  100. package/build/src/utils/relations.js +0 -205
  101. package/build/src/utils/relations.js.map +0 -1
  102. /package/{build/src → src}/utils/batch-relations.d.ts +0 -0
  103. /package/{build/src → src}/utils/naming.d.ts +0 -0
  104. /package/{build/src → src}/utils/naming.js +0 -0
  105. /package/{build/src → src}/utils/projection.d.ts +0 -0
@@ -1,203 +0,0 @@
1
- "use strict";
2
- /**
3
- * @file decorators.spec.ts
4
- * @descripcion Tests de decoradores y metadatos
5
- * @autor Miguel Alejandro
6
- * @fecha 2025-01-27
7
- */
8
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
9
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
- return c > 3 && r && Object.defineProperty(target, key, r), r;
13
- };
14
- var __metadata = (this && this.__metadata) || function (k, v) {
15
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16
- };
17
- var __importDefault = (this && this.__importDefault) || function (mod) {
18
- return (mod && mod.__esModule) ? mod : { "default": mod };
19
- };
20
- Object.defineProperty(exports, "__esModule", { value: true });
21
- const client_1 = require("../src/core/client");
22
- const table_1 = __importDefault(require("../src/core/table"));
23
- const created_at_1 = __importDefault(require("../src/decorators/created_at"));
24
- const default_1 = __importDefault(require("../src/decorators/default"));
25
- const mutate_1 = __importDefault(require("../src/decorators/mutate"));
26
- const primary_key_1 = __importDefault(require("../src/decorators/primary_key"));
27
- const updated_at_1 = __importDefault(require("../src/decorators/updated_at"));
28
- const validate_1 = __importDefault(require("../src/decorators/validate"));
29
- const relations_1 = require("../src/utils/relations");
30
- // =============================================================================
31
- // MODELOS DE PRUEBA PARA DECORADORES
32
- // =============================================================================
33
- class TestConfig extends table_1.default {
34
- }
35
- __decorate([
36
- (0, primary_key_1.default)(),
37
- __metadata("design:type", Object)
38
- ], TestConfig.prototype, "id", void 0);
39
- __decorate([
40
- (0, default_1.default)(() => new Date().toISOString()),
41
- __metadata("design:type", Object)
42
- ], TestConfig.prototype, "timestamp", void 0);
43
- __decorate([
44
- (0, default_1.default)(() => []),
45
- __metadata("design:type", Object)
46
- ], TestConfig.prototype, "tags", void 0);
47
- __decorate([
48
- (0, default_1.default)(() => ({ active: true, count: 0 })),
49
- __metadata("design:type", Object)
50
- ], TestConfig.prototype, "status", void 0);
51
- class Article extends table_1.default {
52
- }
53
- __decorate([
54
- (0, primary_key_1.default)(),
55
- __metadata("design:type", Object)
56
- ], Article.prototype, "id", void 0);
57
- __decorate([
58
- (0, default_1.default)("Default Title"),
59
- (0, validate_1.default)((v) => (typeof v === "string" && v.length >= 3) || "Título muy corto"),
60
- (0, mutate_1.default)((v) => typeof v === "string" ? v.trim().toUpperCase() : String(v)),
61
- __metadata("design:type", Object)
62
- ], Article.prototype, "title", void 0);
63
- __decorate([
64
- (0, default_1.default)("draft"),
65
- (0, mutate_1.default)((v) => (typeof v === "string" ? v.toLowerCase() : String(v))),
66
- __metadata("design:type", Object)
67
- ], Article.prototype, "status", void 0);
68
- __decorate([
69
- (0, default_1.default)(""),
70
- __metadata("design:type", Object)
71
- ], Article.prototype, "content", void 0);
72
- __decorate([
73
- (0, default_1.default)("unknown"),
74
- __metadata("design:type", Object)
75
- ], Article.prototype, "author", void 0);
76
- __decorate([
77
- (0, created_at_1.default)(),
78
- __metadata("design:type", Object)
79
- ], Article.prototype, "created_at", void 0);
80
- __decorate([
81
- (0, updated_at_1.default)(),
82
- __metadata("design:type", Object)
83
- ], Article.prototype, "updated_at", void 0);
84
- // =============================================================================
85
- // CONFIGURACIÓN DE CLIENTE PARA TESTS DE DECORADORES
86
- // =============================================================================
87
- const client = new client_1.Dynamite({
88
- region: "local",
89
- endpoint: "http://localhost:8000",
90
- credentials: { accessKeyId: "x", secretAccessKey: "x" },
91
- tables: [TestConfig, Article],
92
- });
93
- // =============================================================================
94
- // SUITE DE TESTS DE DECORADORES
95
- // =============================================================================
96
- describe("🎨 Decorators", () => {
97
- jest.setTimeout(30_000);
98
- beforeAll(async () => {
99
- await client.sync();
100
- client.connect();
101
- });
102
- afterEach(async () => {
103
- // Limpieza después de cada test
104
- try {
105
- await TestConfig.destroy("test1");
106
- await TestConfig.destroy("test2");
107
- await Article.destroy("art1");
108
- await Article.destroy("art2");
109
- }
110
- catch (e) {
111
- // Ignorar errores de limpieza
112
- }
113
- });
114
- afterAll(() => {
115
- // Limpiar interval para evitar warning de Jest
116
- (0, relations_1.stopCleanupInterval)();
117
- });
118
- // ===========================================================================
119
- // TESTS @DEFAULT
120
- // ===========================================================================
121
- describe("@Default", () => {
122
- it("aplica valores por defecto simples", () => {
123
- const a = new Article({ id: "art1" });
124
- expect(a.title).toBe("DEFAULT TITLE"); // Valor mutado por @Mutate toUpperCase
125
- expect(a.status).toBe("draft");
126
- expect(a.content).toBe("");
127
- expect(a.author).toBe("unknown");
128
- });
129
- it("aplica valores por defecto de funciones", () => {
130
- const c = new TestConfig({ id: "test1" });
131
- expect(c.timestamp).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/);
132
- expect(Array.isArray(c.tags)).toBe(true);
133
- expect(c.tags).toEqual([]);
134
- expect(typeof c.status).toBe("object");
135
- expect(c.status.active).toBe(true);
136
- expect(c.status.count).toBe(0);
137
- });
138
- it("valores y mutaciones funcionan correctamente", () => {
139
- const a = new Article({ id: "test1", title: "Test Title" });
140
- a.status = undefined;
141
- a.title = " VALID TITLE ";
142
- expect(a.status).toBe("draft");
143
- expect(a.title).toBe("VALID TITLE");
144
- expect(() => (a.title = "ab")).toThrow("Título muy corto");
145
- });
146
- });
147
- // ===========================================================================
148
- // TESTS @MUTATE
149
- // ===========================================================================
150
- describe("@Mutate", () => {
151
- it("transforma valores antes de asignar", () => {
152
- const a = new Article({ id: "art1", title: "Test Title" });
153
- a.title = " lower case title ";
154
- a.status = "PUBLISHED";
155
- expect(a.title).toBe("LOWER CASE TITLE"); // trim + toUpperCase
156
- expect(a.status).toBe("published"); // toLowerCase
157
- });
158
- });
159
- // ===========================================================================
160
- // TESTS @VALIDATE
161
- // ===========================================================================
162
- describe("@Validate", () => {
163
- it("valida campos correctamente", () => {
164
- const a = new Article({ id: "art1", title: "Valid Title" });
165
- expect(() => {
166
- a.title = "ab"; // Muy corto
167
- }).toThrow("Título muy corto");
168
- });
169
- });
170
- // ===========================================================================
171
- // TESTS @CREATEDAT / @UPDATEDAT
172
- // ===========================================================================
173
- describe("@CreatedAt / @UpdatedAt", () => {
174
- it("@CreatedAt y @UpdatedAt", async () => {
175
- const a = new Article({ id: "a1" });
176
- expect(a.created_at).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/);
177
- expect(a.updated_at).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/);
178
- const initialUpdated = a.updated_at;
179
- // Simular pausa y actualizar updated_at directamente (comportamiento real del decorador)
180
- await new Promise((resolve) => setTimeout(resolve, 10));
181
- a.updated_at = "trigger"; // Trigger del decorador @UpdatedAt
182
- expect(a.updated_at).not.toBe(initialUpdated);
183
- });
184
- });
185
- // ===========================================================================
186
- // TESTS ORDEN DE EJECUCIÓN
187
- // ===========================================================================
188
- describe("orden de ejecución: Default → Mutate → Validate", () => {
189
- it("ejecuta decoradores en orden correcto", () => {
190
- const a = new Article({ id: "art1", title: "Test Title" });
191
- // Default se aplica primero (valor inicial)
192
- expect(a.status).toBe("draft");
193
- // Mutate transforma el valor
194
- a.status = "PUBLISHED";
195
- expect(a.status).toBe("published"); // toLowerCase
196
- // Validate puede fallar después de mutación
197
- expect(() => {
198
- a.title = "x"; // Muy corto después de trim
199
- }).toThrow("Título muy corto");
200
- });
201
- });
202
- });
203
- //# sourceMappingURL=decorators.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"decorators.spec.js","sourceRoot":"","sources":["../../__tests__/decorators.spec.ts"],"names":[],"mappings":"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"}
@@ -1,7 +0,0 @@
1
- /**
2
- * @file instance-crud.spec.ts
3
- * @descripcion Tests de métodos de instancia y operaciones CRUD
4
- * @autor Miguel Alejandro
5
- * @fecha 2025-01-27
6
- */
7
- export {};
@@ -1,184 +0,0 @@
1
- "use strict";
2
- /**
3
- * @file instance-crud.spec.ts
4
- * @descripcion Tests de métodos de instancia y operaciones CRUD
5
- * @autor Miguel Alejandro
6
- * @fecha 2025-01-27
7
- */
8
- var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
9
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
11
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
12
- return c > 3 && r && Object.defineProperty(target, key, r), r;
13
- };
14
- var __metadata = (this && this.__metadata) || function (k, v) {
15
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
16
- };
17
- var __importDefault = (this && this.__importDefault) || function (mod) {
18
- return (mod && mod.__esModule) ? mod : { "default": mod };
19
- };
20
- Object.defineProperty(exports, "__esModule", { value: true });
21
- const client_1 = require("../src/core/client");
22
- const relations_1 = require("../src/utils/relations");
23
- const table_1 = __importDefault(require("../src/core/table"));
24
- const primary_key_1 = __importDefault(require("../src/decorators/primary_key"));
25
- const default_1 = __importDefault(require("../src/decorators/default"));
26
- const created_at_1 = __importDefault(require("../src/decorators/created_at"));
27
- const updated_at_1 = __importDefault(require("../src/decorators/updated_at"));
28
- // =============================================================================
29
- // MODELOS DE PRUEBA PARA INSTANCIAS
30
- // =============================================================================
31
- class User extends table_1.default {
32
- }
33
- __decorate([
34
- (0, primary_key_1.default)(),
35
- __metadata("design:type", Object)
36
- ], User.prototype, "id", void 0);
37
- __decorate([
38
- (0, default_1.default)("test@example.com"),
39
- __metadata("design:type", Object)
40
- ], User.prototype, "email", void 0);
41
- __decorate([
42
- (0, default_1.default)(18),
43
- __metadata("design:type", Object)
44
- ], User.prototype, "age", void 0);
45
- __decorate([
46
- (0, created_at_1.default)(),
47
- __metadata("design:type", Object)
48
- ], User.prototype, "created_at", void 0);
49
- __decorate([
50
- (0, updated_at_1.default)(),
51
- __metadata("design:type", Object)
52
- ], User.prototype, "updated_at", void 0);
53
- // =============================================================================
54
- // CONFIGURACIÓN DE CLIENTE PARA TESTS DE INSTANCIA
55
- // =============================================================================
56
- const client = new client_1.Dynamite({
57
- region: "local",
58
- endpoint: "http://localhost:8000",
59
- credentials: { accessKeyId: "x", secretAccessKey: "x" },
60
- tables: [User],
61
- });
62
- // =============================================================================
63
- // SUITE DE TESTS DE INSTANCIA
64
- // =============================================================================
65
- describe("🔧 Instance Methods", () => {
66
- jest.setTimeout(30_000);
67
- beforeAll(async () => {
68
- await client.sync();
69
- client.connect();
70
- });
71
- afterEach(async () => {
72
- // Limpieza después de cada test
73
- try {
74
- await User.destroy("inst1");
75
- await User.destroy("inst2");
76
- await User.destroy("inst3");
77
- }
78
- catch (e) {
79
- // Ignorar errores de limpieza
80
- }
81
- });
82
- afterAll(() => {
83
- // Limpiar interval para evitar warning de Jest
84
- (0, relations_1.stopCleanupInterval)();
85
- });
86
- // ===========================================================================
87
- // TESTS SAVE()
88
- // ===========================================================================
89
- describe("save()", () => {
90
- it("crea nuevo registro", async () => {
91
- const user = new User({ id: "inst1", email: "save@test.com", age: 25 });
92
- await user.save();
93
- const found = await User.where("id", "inst1");
94
- expect(found).toHaveLength(1);
95
- expect(found[0].email).toBe("save@test.com");
96
- expect(found[0].age).toBe(25);
97
- });
98
- it("actualiza registro existente", async () => {
99
- // Crear registro inicial
100
- await User.create({ id: "inst1", email: "initial@test.com", age: 20 });
101
- // Modificar y guardar
102
- const user = new User({ id: "inst1", email: "updated@test.com", age: 30 });
103
- await user.save();
104
- const found = await User.where("id", "inst1");
105
- expect(found).toHaveLength(1);
106
- expect(found[0].email).toBe("updated@test.com");
107
- expect(found[0].age).toBe(30);
108
- });
109
- });
110
- // ===========================================================================
111
- // TESTS UPDATE()
112
- // ===========================================================================
113
- describe("update()", () => {
114
- it("modifica registro existente", async () => {
115
- const user = new User({ id: "inst1", email: "original@test.com", age: 25 });
116
- await user.save();
117
- await user.update({ email: "modified@test.com" });
118
- const found = await User.where("id", "inst1");
119
- expect(found[0].email).toBe("modified@test.com");
120
- expect(found[0].age).toBe(25); // No cambió
121
- });
122
- });
123
- // ===========================================================================
124
- // TESTS DESTROY()
125
- // ===========================================================================
126
- describe("destroy()", () => {
127
- it("elimina instancia", async () => {
128
- const user = new User({ id: "inst1", email: "delete@test.com", age: 25 });
129
- await user.save();
130
- await user.destroy();
131
- const found = await User.where("id", "inst1");
132
- expect(found).toHaveLength(0);
133
- });
134
- });
135
- // ===========================================================================
136
- // TESTS TIMESTAMPS AUTOMÁTICOS
137
- // ===========================================================================
138
- describe("timestamps automáticos", () => {
139
- it("asigna created_at y updated_at automáticamente", async () => {
140
- const user = new User({ id: "inst1", email: "time@test.com", age: 25 });
141
- expect(user.created_at).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/);
142
- expect(user.updated_at).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/);
143
- const originalUpdated = user.updated_at;
144
- // Simular pausa y actualizar updated_at directamente (comportamiento real del decorador)
145
- await new Promise(resolve => setTimeout(resolve, 10));
146
- user.updated_at = "trigger"; // Trigger del decorador @UpdatedAt
147
- expect(user.updated_at).not.toBe(originalUpdated);
148
- });
149
- });
150
- // ===========================================================================
151
- // TESTS MÚLTIPLES INSTANCIAS
152
- // ===========================================================================
153
- describe("múltiples instancias independientes", () => {
154
- it("maneja múltiples instancias sin conflictos", async () => {
155
- const user1 = new User({ id: "inst1", email: "user1@test.com", age: 20 });
156
- const user2 = new User({ id: "inst2", email: "user2@test.com", age: 30 });
157
- const user3 = new User({ id: "inst3", email: "user3@test.com", age: 40 });
158
- await Promise.all([user1.save(), user2.save(), user3.save()]);
159
- const found = await User.where({});
160
- expect(found.length).toBeGreaterThanOrEqual(3);
161
- const emails = found.map(u => u.email);
162
- expect(emails).toContain("user1@test.com");
163
- expect(emails).toContain("user2@test.com");
164
- expect(emails).toContain("user3@test.com");
165
- });
166
- });
167
- // ===========================================================================
168
- // TESTS SERIALIZACIÓN
169
- // ===========================================================================
170
- describe("serialización", () => {
171
- it("toJSON() serializa solo campos con decoradores", () => {
172
- const user = new User({ id: "inst1", email: "json@test.com", age: 25 });
173
- user.extraField = "no debería aparecer";
174
- const json = user.toJSON();
175
- expect(json.id).toBe("inst1");
176
- expect(json.email).toBe("json@test.com");
177
- expect(json.age).toBe(25);
178
- expect(json.created_at).toBeDefined();
179
- expect(json.updated_at).toBeDefined();
180
- expect(json.extraField).toBeUndefined();
181
- });
182
- });
183
- });
184
- //# sourceMappingURL=instance-crud.spec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"instance-crud.spec.js","sourceRoot":"","sources":["../../__tests__/instance-crud.spec.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/core/client.ts"],"names":[],"mappings":"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"}
@@ -1,164 +0,0 @@
1
- import { InferAttributes, STORE, WrapperEntry } from "./wrapper";
2
- /** Base Table class for DynamoDB ORM with CRUD operations */
3
- export default class Table<T extends {} = any> {
4
- protected [STORE]: {
5
- [K in keyof T]?: T[K];
6
- };
7
- /** Initialize table instance with data */
8
- constructor(data: InferAttributes<T>);
9
- /** Save instance to database (create or update) */
10
- save(): Promise<this>;
11
- /** Update instance with partial data */
12
- update(patch: Partial<InferAttributes<T>>): Promise<this>;
13
- /** Delete instance from database */
14
- destroy(): Promise<void>;
15
- static create<M extends Table>(this: {
16
- new (data: InferAttributes<M>): M;
17
- prototype: M;
18
- }, data: InferAttributes<M>): Promise<M>;
19
- static update<M extends Table>(this: {
20
- new (data: InferAttributes<M>): M;
21
- prototype: M;
22
- }, id: string, record: InferAttributes<M>): Promise<void>;
23
- /**
24
- * Actualiza múltiples registros que coincidan con los filtros especificados
25
- * @param updates - Objeto con los valores a actualizar
26
- * @param filters - Filtros para seleccionar qué registros actualizar
27
- * @returns Número de registros actualizados
28
- */
29
- static updateWhere<M extends Table>(this: {
30
- new (data: InferAttributes<M>): M;
31
- prototype: M;
32
- }, updates: Partial<InferAttributes<M>>, filters: Partial<InferAttributes<M>>): Promise<number>;
33
- static destroy<M extends Table>(this: {
34
- new (data: InferAttributes<M>): M;
35
- prototype: M;
36
- }, id: string): Promise<null>;
37
- /**
38
- * Realiza una consulta sobre la tabla, devolviendo una lista de resultados
39
- * según condiciones y opciones de paginación/orden. Utiliza `QueryCommand`
40
- * si la condición es por PK/SK con igualdad, o `ScanCommand` como fallback.
41
- *
42
- * @template M Instancia de la clase Table.
43
- * @template K Clave de atributos inferida.
44
- *
45
- * @param key - Clave a filtrar (ej. "id").
46
- * @param value - Valor a comparar (equivalente a '=' implícito).
47
- * @param options - (Opcional) Opciones de paginación: { limit, skip, order }.
48
- *
49
- * @example
50
- * await User.where('id', 'u1');
51
- * await User.where('email', '=', 'a@b.com', { limit: 5, order: 'DESC' });
52
- * await User.where({ email: 'x@y.com' }, { skip: 10, limit: 1 });
53
- *
54
- * @param filters - Objeto con pares clave/valor para consulta tipo AND.
55
- * @param options - (Opcional) Opciones de paginación: { limit, skip, order }.
56
- *
57
- * @returns - Array de instancias de la tabla que cumplen la condición.
58
- */
59
- static where<M extends Table, K extends keyof InferAttributes<M>>(this: {
60
- new (data: InferAttributes<M>): M;
61
- prototype: M;
62
- }, key: K, value: InferAttributes<M>[K], options?: {
63
- limit?: number;
64
- skip?: number;
65
- order?: "ASC" | "DESC";
66
- include?: Record<string, any>;
67
- }): Promise<M[]>;
68
- static where<M extends Table, K extends keyof InferAttributes<M>>(this: {
69
- new (data: InferAttributes<M>): M;
70
- prototype: M;
71
- }, key: K, op: "=" | "!=" | "<" | "<=" | ">" | ">=" | "in" | "not-in", value: InferAttributes<M>[K] | InferAttributes<M>[K][], options?: {
72
- limit?: number;
73
- skip?: number;
74
- order?: "ASC" | "DESC";
75
- include?: Record<string, any>;
76
- }): Promise<M[]>;
77
- static where<M extends Table>(this: {
78
- new (data: InferAttributes<M>): M;
79
- prototype: M;
80
- }, filters: Partial<{
81
- [K in keyof InferAttributes<M>]: InferAttributes<M>[K] | InferAttributes<M>[K][];
82
- }>, options?: {
83
- limit?: number;
84
- skip?: number;
85
- order?: "ASC" | "DESC";
86
- include?: Record<string, any>;
87
- }): Promise<M[]>;
88
- /**
89
- * Obtiene el primer elemento que coincida con la condición especificada.
90
- * Equivalente a where() con { limit: 1, skip: 0, order: "ASC" }.
91
- *
92
- * @template M Instancia de la clase Table.
93
- * @template K Clave de atributos inferida.
94
- *
95
- * @param key - Clave a filtrar (ej. "id").
96
- * @param value - Valor a comparar (equivalente a '=' implícito).
97
- *
98
- * @example
99
- * const user = await User.first('id', 'u1');
100
- * const firstActive = await User.first('status', '=', 'active');
101
- * const firstMatch = await User.first({ email: 'test@example.com' });
102
- *
103
- * @returns - El primer elemento encontrado o undefined si no hay coincidencias.
104
- */
105
- static first<M extends Table, K extends keyof InferAttributes<M>>(this: {
106
- new (data: InferAttributes<M>): M;
107
- prototype: M;
108
- }, key: K, value: InferAttributes<M>[K]): Promise<M | undefined>;
109
- static first<M extends Table, K extends keyof InferAttributes<M>>(this: {
110
- new (data: InferAttributes<M>): M;
111
- prototype: M;
112
- }, key: K, op: "=" | "!=" | "<" | "<=" | ">" | ">=" | "in" | "not-in", value: InferAttributes<M>[K] | InferAttributes<M>[K][]): Promise<M | undefined>;
113
- static first<M extends Table>(this: {
114
- new (data: InferAttributes<M>): M;
115
- prototype: M;
116
- }, filters: Partial<{
117
- [K in keyof InferAttributes<M>]: InferAttributes<M>[K] | InferAttributes<M>[K][];
118
- }>): Promise<M | undefined>;
119
- /**
120
- * Obtiene el último elemento que coincida con la condición especificada.
121
- * Equivalente a where() con { limit: 1, skip: 0, order: "DESC" }.
122
- *
123
- * @template M Instancia de la clase Table.
124
- * @template K Clave de atributos inferida.
125
- *
126
- * @param key - Clave a filtrar (ej. "id").
127
- * @param value - Valor a comparar (equivalente a '=' implícito).
128
- *
129
- * @example
130
- * const user = await User.last('id', 'u1');
131
- * const lastActive = await User.last('status', '=', 'active');
132
- * const lastMatch = await User.last({ email: 'test@example.com' });
133
- *
134
- * @returns - El último elemento encontrado o undefined si no hay coincidencias.
135
- */
136
- static last<M extends Table, K extends keyof InferAttributes<M>>(this: {
137
- new (data: InferAttributes<M>): M;
138
- prototype: M;
139
- }, key: K, value: InferAttributes<M>[K]): Promise<M | undefined>;
140
- static last<M extends Table, K extends keyof InferAttributes<M>>(this: {
141
- new (data: InferAttributes<M>): M;
142
- prototype: M;
143
- }, key: K, op: "=" | "!=" | "<" | "<=" | ">" | ">=" | "in" | "not-in", value: InferAttributes<M>[K] | InferAttributes<M>[K][]): Promise<M | undefined>;
144
- static last<M extends Table>(this: {
145
- new (data: InferAttributes<M>): M;
146
- prototype: M;
147
- }, filters: Partial<{
148
- [K in keyof InferAttributes<M>]: InferAttributes<M>[K] | InferAttributes<M>[K][];
149
- }>): Promise<M | undefined>;
150
- /**
151
- * Obtiene los metadatos del modelo para uso interno del sistema de relaciones.
152
- *
153
- * @template M Instancia de la clase Table.
154
- * @returns Los metadatos del wrapper del modelo.
155
- */
156
- static getMeta<M extends Table>(this: {
157
- new (data: InferAttributes<M>): M;
158
- prototype: M;
159
- }): WrapperEntry;
160
- toJSON(): Record<string, unknown>;
161
- toString(): string;
162
- }
163
- export { STORE };
164
- export type { WrapperEntry };