@arcaelas/dynamite 1.0.29 → 3.1.0

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 (142) hide show
  1. package/README.md +13 -13
  2. package/{src → build/cjs}/@types/index.d.ts +26 -1
  3. package/build/cjs/@types/index.js.map +1 -0
  4. package/{src → build/cjs}/core/client.d.ts +22 -19
  5. package/build/cjs/core/client.js +384 -0
  6. package/build/cjs/core/client.js.map +1 -0
  7. package/build/cjs/core/decorator.d.ts +50 -0
  8. package/build/cjs/core/decorator.js +52 -0
  9. package/build/cjs/core/decorator.js.map +1 -0
  10. package/build/cjs/core/table.d.ts +73 -0
  11. package/build/cjs/core/table.js +953 -0
  12. package/build/cjs/core/table.js.map +1 -0
  13. package/build/cjs/decorators/hooks.d.ts +35 -0
  14. package/build/cjs/decorators/hooks.js +50 -0
  15. package/build/cjs/decorators/hooks.js.map +1 -0
  16. package/build/cjs/decorators/indexes.d.ts +20 -0
  17. package/build/cjs/decorators/indexes.js +45 -0
  18. package/build/cjs/decorators/indexes.js.map +1 -0
  19. package/{src → build/cjs}/decorators/relations.d.ts +8 -7
  20. package/{src → build/cjs}/decorators/relations.js +9 -8
  21. package/build/cjs/decorators/relations.js.map +1 -0
  22. package/build/cjs/decorators/timestamps.d.ts +20 -0
  23. package/build/cjs/decorators/timestamps.js +34 -0
  24. package/build/cjs/decorators/timestamps.js.map +1 -0
  25. package/build/cjs/decorators/transforms.d.ts +41 -0
  26. package/build/cjs/decorators/transforms.js +98 -0
  27. package/build/cjs/decorators/transforms.js.map +1 -0
  28. package/{src → build/cjs}/index.d.ts +7 -3
  29. package/{src → build/cjs}/index.js +15 -6
  30. package/build/cjs/index.js.map +1 -0
  31. package/build/cjs/package.json +1 -0
  32. package/build/cjs/test/basic.d.ts +1 -0
  33. package/build/cjs/test/basic.js +248 -0
  34. package/build/cjs/test/basic.js.map +1 -0
  35. package/build/cjs/test/bulk.d.ts +1 -0
  36. package/build/cjs/test/bulk.js +108 -0
  37. package/build/cjs/test/bulk.js.map +1 -0
  38. package/build/cjs/test/contracts.d.ts +1 -0
  39. package/build/cjs/test/contracts.js +343 -0
  40. package/build/cjs/test/contracts.js.map +1 -0
  41. package/build/cjs/test/filters.d.ts +1 -0
  42. package/build/cjs/test/filters.js +190 -0
  43. package/build/cjs/test/filters.js.map +1 -0
  44. package/build/cjs/test/hooks.d.ts +1 -0
  45. package/build/cjs/test/hooks.js +191 -0
  46. package/build/cjs/test/hooks.js.map +1 -0
  47. package/build/cjs/test/index.js +38 -0
  48. package/build/cjs/test/index.js.map +1 -0
  49. package/build/cjs/test/query_scan.d.ts +1 -0
  50. package/build/cjs/test/query_scan.js +195 -0
  51. package/build/cjs/test/query_scan.js.map +1 -0
  52. package/build/cjs/test/relations.d.ts +1 -0
  53. package/build/cjs/test/relations.js +246 -0
  54. package/build/cjs/test/relations.js.map +1 -0
  55. package/build/cjs/test/transactions.d.ts +1 -0
  56. package/build/cjs/test/transactions.js +145 -0
  57. package/build/cjs/test/transactions.js.map +1 -0
  58. package/{src → build/cjs}/utils/relations.js +1 -8
  59. package/build/cjs/utils/relations.js.map +1 -0
  60. package/build/cjs/utils/ulid.d.ts +10 -0
  61. package/build/cjs/utils/ulid.js +55 -0
  62. package/build/cjs/utils/ulid.js.map +1 -0
  63. package/build/esm/@types/index.d.ts +213 -0
  64. package/build/esm/@types/index.js +8 -0
  65. package/build/esm/@types/index.js.map +1 -0
  66. package/build/esm/core/client.d.ts +96 -0
  67. package/build/esm/core/client.js +375 -0
  68. package/build/esm/core/client.js.map +1 -0
  69. package/build/esm/core/decorator.d.ts +50 -0
  70. package/build/esm/core/decorator.js +47 -0
  71. package/build/esm/core/decorator.js.map +1 -0
  72. package/build/esm/core/table.d.ts +73 -0
  73. package/build/esm/core/table.js +950 -0
  74. package/build/esm/core/table.js.map +1 -0
  75. package/build/esm/decorators/hooks.d.ts +35 -0
  76. package/build/esm/decorators/hooks.js +47 -0
  77. package/build/esm/decorators/hooks.js.map +1 -0
  78. package/build/esm/decorators/indexes.d.ts +20 -0
  79. package/build/esm/decorators/indexes.js +42 -0
  80. package/build/esm/decorators/indexes.js.map +1 -0
  81. package/build/esm/decorators/relations.d.ts +75 -0
  82. package/build/esm/decorators/relations.js +112 -0
  83. package/build/esm/decorators/relations.js.map +1 -0
  84. package/build/esm/decorators/timestamps.d.ts +20 -0
  85. package/build/esm/decorators/timestamps.js +31 -0
  86. package/build/esm/decorators/timestamps.js.map +1 -0
  87. package/build/esm/decorators/transforms.d.ts +41 -0
  88. package/build/esm/decorators/transforms.js +92 -0
  89. package/build/esm/decorators/transforms.js.map +1 -0
  90. package/build/esm/index.d.ts +19 -0
  91. package/build/esm/index.js +26 -0
  92. package/build/esm/index.js.map +1 -0
  93. package/build/esm/package.json +1 -0
  94. package/build/esm/test/basic.d.ts +1 -0
  95. package/build/esm/test/basic.js +245 -0
  96. package/build/esm/test/basic.js.map +1 -0
  97. package/build/esm/test/bulk.d.ts +1 -0
  98. package/build/esm/test/bulk.js +105 -0
  99. package/build/esm/test/bulk.js.map +1 -0
  100. package/build/esm/test/contracts.d.ts +1 -0
  101. package/build/esm/test/contracts.js +340 -0
  102. package/build/esm/test/contracts.js.map +1 -0
  103. package/build/esm/test/filters.d.ts +1 -0
  104. package/build/esm/test/filters.js +187 -0
  105. package/build/esm/test/filters.js.map +1 -0
  106. package/build/esm/test/hooks.d.ts +1 -0
  107. package/build/esm/test/hooks.js +188 -0
  108. package/build/esm/test/hooks.js.map +1 -0
  109. package/build/esm/test/index.d.ts +1 -0
  110. package/build/esm/test/index.js +33 -0
  111. package/build/esm/test/index.js.map +1 -0
  112. package/build/esm/test/query_scan.d.ts +1 -0
  113. package/build/esm/test/query_scan.js +192 -0
  114. package/build/esm/test/query_scan.js.map +1 -0
  115. package/build/esm/test/relations.d.ts +1 -0
  116. package/build/esm/test/relations.js +243 -0
  117. package/build/esm/test/relations.js.map +1 -0
  118. package/build/esm/test/transactions.d.ts +1 -0
  119. package/build/esm/test/transactions.js +142 -0
  120. package/build/esm/test/transactions.js.map +1 -0
  121. package/build/esm/utils/relations.d.ts +42 -0
  122. package/build/esm/utils/relations.js +207 -0
  123. package/build/esm/utils/relations.js.map +1 -0
  124. package/build/esm/utils/ulid.d.ts +10 -0
  125. package/build/esm/utils/ulid.js +52 -0
  126. package/build/esm/utils/ulid.js.map +1 -0
  127. package/package.json +31 -9
  128. package/src/core/client.js +0 -296
  129. package/src/core/decorator.d.ts +0 -29
  130. package/src/core/decorator.js +0 -103
  131. package/src/core/table.d.ts +0 -81
  132. package/src/core/table.js +0 -892
  133. package/src/decorators/indexes.d.ts +0 -38
  134. package/src/decorators/indexes.js +0 -59
  135. package/src/decorators/timestamps.d.ts +0 -54
  136. package/src/decorators/timestamps.js +0 -72
  137. package/src/decorators/transforms.d.ts +0 -99
  138. package/src/decorators/transforms.js +0 -166
  139. package/src/index.test.js +0 -37
  140. /package/{src → build/cjs}/@types/index.js +0 -0
  141. /package/{src/index.test.d.ts → build/cjs/test/index.d.ts} +0 -0
  142. /package/{src → build/cjs}/utils/relations.d.ts +0 -0
@@ -0,0 +1,188 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Dynamite, Table, PrimaryKey, Default, Name, DeleteAt, BeforeCreate, AfterCreate, BeforeUpdate, AfterUpdate, BeforeDestroy, AfterDestroy, } from "../index.js";
11
+ const calls = [];
12
+ let HUser = class HUser extends Table {
13
+ // Dos @BeforeCreate para validar el orden de ejecución (declaración top-to-bottom)
14
+ fill_slug() { this.slug = String(this.name).toLowerCase(); calls.push('beforeCreate'); }
15
+ mark_create() { calls.push('beforeCreate2'); }
16
+ after_create() { calls.push('afterCreate'); }
17
+ before_update(changes) { calls.push('beforeUpdate:' + Object.keys(changes ?? {}).sort().join(',')); }
18
+ after_update() { calls.push('afterUpdate'); }
19
+ before_destroy() { calls.push('beforeDestroy'); }
20
+ after_destroy() { calls.push('afterDestroy'); }
21
+ };
22
+ __decorate([
23
+ PrimaryKey(),
24
+ __metadata("design:type", Object)
25
+ ], HUser.prototype, "id", void 0);
26
+ __decorate([
27
+ Default(''),
28
+ __metadata("design:type", String)
29
+ ], HUser.prototype, "name", void 0);
30
+ __decorate([
31
+ Default(''),
32
+ __metadata("design:type", String)
33
+ ], HUser.prototype, "slug", void 0);
34
+ __decorate([
35
+ Default(() => 0),
36
+ __metadata("design:type", Object)
37
+ ], HUser.prototype, "version", void 0);
38
+ __decorate([
39
+ DeleteAt(),
40
+ __metadata("design:type", Object)
41
+ ], HUser.prototype, "deleted_at", void 0);
42
+ __decorate([
43
+ BeforeCreate(),
44
+ __metadata("design:type", Function),
45
+ __metadata("design:paramtypes", []),
46
+ __metadata("design:returntype", void 0)
47
+ ], HUser.prototype, "fill_slug", null);
48
+ __decorate([
49
+ BeforeCreate(),
50
+ __metadata("design:type", Function),
51
+ __metadata("design:paramtypes", []),
52
+ __metadata("design:returntype", void 0)
53
+ ], HUser.prototype, "mark_create", null);
54
+ __decorate([
55
+ AfterCreate(),
56
+ __metadata("design:type", Function),
57
+ __metadata("design:paramtypes", []),
58
+ __metadata("design:returntype", void 0)
59
+ ], HUser.prototype, "after_create", null);
60
+ __decorate([
61
+ BeforeUpdate(),
62
+ __metadata("design:type", Function),
63
+ __metadata("design:paramtypes", [Object]),
64
+ __metadata("design:returntype", void 0)
65
+ ], HUser.prototype, "before_update", null);
66
+ __decorate([
67
+ AfterUpdate(),
68
+ __metadata("design:type", Function),
69
+ __metadata("design:paramtypes", []),
70
+ __metadata("design:returntype", void 0)
71
+ ], HUser.prototype, "after_update", null);
72
+ __decorate([
73
+ BeforeDestroy(),
74
+ __metadata("design:type", Function),
75
+ __metadata("design:paramtypes", []),
76
+ __metadata("design:returntype", void 0)
77
+ ], HUser.prototype, "before_destroy", null);
78
+ __decorate([
79
+ AfterDestroy(),
80
+ __metadata("design:type", Function),
81
+ __metadata("design:paramtypes", []),
82
+ __metadata("design:returntype", void 0)
83
+ ], HUser.prototype, "after_destroy", null);
84
+ HUser = __decorate([
85
+ Name('test_hook_users')
86
+ ], HUser);
87
+ let passed = 0;
88
+ let failed = 0;
89
+ function assert(label, condition, detail) {
90
+ if (condition) {
91
+ console.log(` OK ${label}`);
92
+ passed++;
93
+ }
94
+ else {
95
+ console.error(` FAIL ${label}${detail ? ` -- ${detail}` : ''}`);
96
+ failed++;
97
+ }
98
+ }
99
+ export default async function hooks() {
100
+ console.log('\n=== HOOKS ===\n');
101
+ const dynamite = new Dynamite({
102
+ tables: [HUser],
103
+ region: 'local',
104
+ endpoint: 'http://localhost:8000',
105
+ credentials: { accessKeyId: 'local', secretAccessKey: 'local' },
106
+ });
107
+ await dynamite.connect();
108
+ await dynamite.sync();
109
+ // =====================================================
110
+ // 1. Opt-in vs opt-out en create
111
+ // =====================================================
112
+ console.log('-- create opt-in / opt-out --');
113
+ calls.length = 0;
114
+ const u_no = await HUser.create({ name: 'Ann' });
115
+ assert('create sin hook: no ejecuta hooks', calls.length === 0);
116
+ assert('create sin hook: beforeCreate no mutó slug', u_no.slug === '');
117
+ calls.length = 0;
118
+ const u_yes = await HUser.create({ name: 'Bob' }, { hook: true });
119
+ assert('create con hook: orden beforeCreate -> beforeCreate2 -> afterCreate', JSON.stringify(calls) === JSON.stringify(['beforeCreate', 'beforeCreate2', 'afterCreate']), JSON.stringify(calls));
120
+ assert('create con hook: beforeCreate mutó slug en la instancia', u_yes.slug === 'bob');
121
+ const u_yes_db = await HUser.first({ id: u_yes.id });
122
+ assert('create con hook: mutación persistida', u_yes_db?.slug === 'bob');
123
+ // =====================================================
124
+ // 2. Update de instancia
125
+ // =====================================================
126
+ console.log('\n-- instance update --');
127
+ calls.length = 0;
128
+ await u_yes.update({ name: 'Bobby' }, { hook: true });
129
+ assert('instance update con hook: beforeUpdate recibe changes', calls.includes('beforeUpdate:name'));
130
+ assert('instance update con hook: afterUpdate ejecutado', calls.includes('afterUpdate'));
131
+ const bobby = await HUser.first({ id: u_yes.id });
132
+ assert('instance update con hook: persistido', bobby?.name === 'Bobby');
133
+ calls.length = 0;
134
+ await u_yes.update({ name: 'Bib' });
135
+ assert('instance update sin hook: no ejecuta hooks', calls.length === 0);
136
+ const bib = await HUser.first({ id: u_yes.id });
137
+ assert('instance update sin hook: persistido igual', bib?.name === 'Bib');
138
+ // =====================================================
139
+ // 3. Update estático masivo: una vez por entidad
140
+ // =====================================================
141
+ console.log('\n-- static update masivo --');
142
+ await HUser.create({ name: 'batch' });
143
+ await HUser.create({ name: 'batch' });
144
+ calls.length = 0;
145
+ const affected = await HUser.update({ version: 7 }, { name: 'batch' }, { hook: true });
146
+ const before_count = calls.filter(c => c.startsWith('beforeUpdate')).length;
147
+ const after_count = calls.filter(c => c === 'afterUpdate').length;
148
+ assert('static update masivo: afecta 2 registros', affected === 2);
149
+ assert('static update masivo: beforeUpdate por entidad', before_count === 2);
150
+ assert('static update masivo: afterUpdate por entidad', after_count === 2);
151
+ // =====================================================
152
+ // 4. Destroy de instancia (soft delete)
153
+ // =====================================================
154
+ console.log('\n-- instance destroy (soft) --');
155
+ calls.length = 0;
156
+ await u_yes.destroy({ hook: true });
157
+ assert('instance destroy con hook: beforeDestroy + afterDestroy', calls.includes('beforeDestroy') && calls.includes('afterDestroy'));
158
+ const after_soft = await HUser.where({ id: u_yes.id });
159
+ assert('instance destroy: excluido de where (soft delete)', after_soft.length === 0);
160
+ // =====================================================
161
+ // 5. Delete estático con hooks de destroy
162
+ // =====================================================
163
+ console.log('\n-- static delete --');
164
+ const del_user = await HUser.create({ name: 'to_delete' });
165
+ calls.length = 0;
166
+ const deleted = await HUser.delete({ id: del_user.id }, { hook: true });
167
+ assert('static delete con hook: retorna 1', deleted === 1);
168
+ assert('static delete con hook: beforeDestroy + afterDestroy', calls.includes('beforeDestroy') && calls.includes('afterDestroy'));
169
+ const del_check = await HUser.where({ id: del_user.id }, { _includeTrashed: true });
170
+ assert('static delete con hook: eliminado (hard)', del_check.length === 0);
171
+ // =====================================================
172
+ // 6. Hooks dentro de una transacción
173
+ // =====================================================
174
+ console.log('\n-- hooks en transacción --');
175
+ calls.length = 0;
176
+ let tx_user;
177
+ await dynamite.tx(async (tx) => {
178
+ tx_user = await HUser.create({ name: 'TxHook' }, { hook: true, tx });
179
+ assert('tx: afterCreate aún no corre antes del commit', !calls.includes('afterCreate'));
180
+ });
181
+ assert('tx: beforeCreate corrió durante create', calls.includes('beforeCreate'));
182
+ assert('tx: afterCreate corrió tras el commit', calls.includes('afterCreate'));
183
+ const tx_db = await HUser.first({ id: tx_user.id });
184
+ assert('tx: registro persistido con slug mutado', tx_db?.slug === 'txhook');
185
+ console.log(`\n Hooks: ${passed} passed, ${failed} failed`);
186
+ return failed;
187
+ }
188
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/test/hooks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,33 @@
1
+ import basic from './basic.js';
2
+ import transactions from './transactions.js';
3
+ import relations from './relations.js';
4
+ import filters from './filters.js';
5
+ import bulk from './bulk.js';
6
+ import query_scan from './query_scan.js';
7
+ import contracts from './contracts.js';
8
+ import hooks from './hooks.js';
9
+ (async function () {
10
+ try {
11
+ let total_failures = 0;
12
+ total_failures += await basic();
13
+ total_failures += await transactions();
14
+ total_failures += await relations();
15
+ total_failures += await filters();
16
+ total_failures += await bulk();
17
+ total_failures += await query_scan();
18
+ total_failures += await contracts();
19
+ total_failures += await hooks();
20
+ console.log(`\n${'='.repeat(40)}`);
21
+ console.log(total_failures === 0
22
+ ? ` ALL TESTS PASSED`
23
+ : ` ${total_failures} TOTAL FAILURES`);
24
+ console.log('='.repeat(40));
25
+ process.exit(total_failures > 0 ? 1 : 0);
26
+ }
27
+ catch (error) {
28
+ console.error('\nFatal error:', error.message);
29
+ console.error(error.stack);
30
+ process.exit(1);
31
+ }
32
+ })();
33
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/test/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,SAAS,CAAC;AAC5B,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,IAAI,MAAM,QAAQ,CAAC;AAC1B,OAAO,UAAU,MAAM,cAAc,CAAC;AACtC,OAAO,SAAS,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,MAAM,SAAS,CAAC;AAE5B,CAAC,KAAK;IACJ,IAAI,CAAC;QACH,IAAI,cAAc,GAAG,CAAC,CAAC;QACvB,cAAc,IAAI,MAAM,KAAK,EAAE,CAAC;QAChC,cAAc,IAAI,MAAM,YAAY,EAAE,CAAC;QACvC,cAAc,IAAI,MAAM,SAAS,EAAE,CAAC;QACpC,cAAc,IAAI,MAAM,OAAO,EAAE,CAAC;QAClC,cAAc,IAAI,MAAM,IAAI,EAAE,CAAC;QAC/B,cAAc,IAAI,MAAM,UAAU,EAAE,CAAC;QACrC,cAAc,IAAI,MAAM,SAAS,EAAE,CAAC;QACpC,cAAc,IAAI,MAAM,KAAK,EAAE,CAAC;QAEhC,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,cAAc,KAAK,CAAC;YAC9B,CAAC,CAAC,oBAAoB;YACtB,CAAC,CAAC,KAAK,cAAc,iBAAiB,CACvC,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QAC/C,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ export default function query_scan(): Promise<number>;
@@ -0,0 +1,192 @@
1
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
2
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
3
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
4
+ 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;
5
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
6
+ };
7
+ var __metadata = (this && this.__metadata) || function (k, v) {
8
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
+ };
10
+ import { Dynamite, Table, PrimaryKey, Default, NotNull, Name, HasMany, BelongsTo, } from "../index.js";
11
+ import { requireClient } from "../core/client.js";
12
+ let Author = class Author extends Table {
13
+ };
14
+ __decorate([
15
+ PrimaryKey(),
16
+ __metadata("design:type", Object)
17
+ ], Author.prototype, "id", void 0);
18
+ __decorate([
19
+ NotNull(),
20
+ __metadata("design:type", String)
21
+ ], Author.prototype, "name", void 0);
22
+ __decorate([
23
+ HasMany(() => Book, 'author_id', 'id'),
24
+ __metadata("design:type", Object)
25
+ ], Author.prototype, "books", void 0);
26
+ Author = __decorate([
27
+ Name('test_qs_authors')
28
+ ], Author);
29
+ let Book = class Book extends Table {
30
+ };
31
+ __decorate([
32
+ PrimaryKey(),
33
+ __metadata("design:type", Object)
34
+ ], Book.prototype, "id", void 0);
35
+ __decorate([
36
+ NotNull(),
37
+ __metadata("design:type", String)
38
+ ], Book.prototype, "title", void 0);
39
+ __decorate([
40
+ Default(''),
41
+ __metadata("design:type", String)
42
+ ], Book.prototype, "author_id", void 0);
43
+ __decorate([
44
+ Default(() => 0),
45
+ __metadata("design:type", Object)
46
+ ], Book.prototype, "pages", void 0);
47
+ __decorate([
48
+ BelongsTo(() => Author, 'id', 'author_id'),
49
+ __metadata("design:type", Object)
50
+ ], Book.prototype, "author", void 0);
51
+ Book = __decorate([
52
+ Name('test_qs_books')
53
+ ], Book);
54
+ let passed = 0;
55
+ let failed = 0;
56
+ function assert(label, condition, detail) {
57
+ if (condition) {
58
+ console.log(` OK ${label}`);
59
+ passed++;
60
+ }
61
+ else {
62
+ console.error(` FAIL ${label}${detail ? ` -- ${detail}` : ''}`);
63
+ failed++;
64
+ }
65
+ }
66
+ // Interceptor para trackear que comando se usó
67
+ function trackCommands() {
68
+ const client = requireClient();
69
+ const log = [];
70
+ const original = client.send.bind(client);
71
+ client.send = async (cmd) => {
72
+ log.push(cmd.constructor.name);
73
+ return original(cmd);
74
+ };
75
+ return {
76
+ log,
77
+ last: () => log[log.length - 1],
78
+ reset: () => { log.length = 0; },
79
+ restore: () => { client.send = original; },
80
+ };
81
+ }
82
+ export default async function query_scan() {
83
+ console.log('\n=== QUERY vs SCAN ===\n');
84
+ const dynamite = new Dynamite({
85
+ tables: [Author, Book],
86
+ region: 'local',
87
+ endpoint: 'http://localhost:8000',
88
+ credentials: { accessKeyId: 'local', secretAccessKey: 'local' },
89
+ });
90
+ await dynamite.connect();
91
+ await dynamite.sync();
92
+ // Seed
93
+ const a1 = await Author.create({ name: 'Tolkien' });
94
+ const a2 = await Author.create({ name: 'Asimov' });
95
+ for (let i = 0; i < 10; i++) {
96
+ await Book.create({ title: `Book_${i}`, author_id: i < 6 ? a1.id : a2.id, pages: (i + 1) * 50 });
97
+ }
98
+ const tracker = trackCommands();
99
+ // -- Query por PK --
100
+ console.log('-- Query por PK --');
101
+ tracker.reset();
102
+ const by_pk = await Author.where({ id: a1.id });
103
+ assert('where por PK usa QueryCommand', tracker.last() === 'QueryCommand');
104
+ assert('where por PK retorna correcto', by_pk[0]?.name === 'Tolkien');
105
+ // -- Query por PK con first --
106
+ tracker.reset();
107
+ const first_pk = await Author.first({ id: a1.id });
108
+ assert('first por PK usa QueryCommand', tracker.log.includes('QueryCommand'));
109
+ assert('first por PK retorna correcto', first_pk?.name === 'Tolkien');
110
+ // -- Scan por campo sin GSI --
111
+ console.log('\n-- Scan por campo sin GSI --');
112
+ tracker.reset();
113
+ const by_name = await Author.where({ name: 'Tolkien' });
114
+ assert('where por name usa ScanCommand', tracker.last() === 'ScanCommand');
115
+ assert('where por name retorna correcto', by_name[0]?.name === 'Tolkien');
116
+ // -- Query por GSI (author_id en books) --
117
+ console.log('\n-- Query por GSI --');
118
+ tracker.reset();
119
+ const by_fk = await Book.where({ author_id: a1.id });
120
+ // author_id tiene GSI porque Author.@HasMany lo declara y connect() lo registra
121
+ const used_query = tracker.log.includes('QueryCommand');
122
+ const used_scan = tracker.log.includes('ScanCommand');
123
+ if (used_query) {
124
+ assert('where por FK (author_id) usa QueryCommand', true);
125
+ }
126
+ else {
127
+ // GSI puede no existir si sync no corrió en este runtime, fallback a Scan es correcto
128
+ assert('where por FK (author_id) usa ScanCommand (GSI no creado)', used_scan);
129
+ }
130
+ assert('where por FK retorna 6 books', by_fk.length === 6);
131
+ // -- Scan con operadores no-eq --
132
+ console.log('\n-- Scan con operadores --');
133
+ tracker.reset();
134
+ await Book.where({ pages: { $gt: 200 } });
135
+ assert('$gt usa ScanCommand (no es $eq)', tracker.last() === 'ScanCommand');
136
+ tracker.reset();
137
+ await Book.where({ title: { $include: 'Book' } });
138
+ assert('$include usa ScanCommand', tracker.last() === 'ScanCommand');
139
+ tracker.reset();
140
+ await Book.where({ author_id: { $in: [a1.id, a2.id] } });
141
+ assert('$in usa ScanCommand (no es $eq)', tracker.last() === 'ScanCommand');
142
+ // -- Query por PK + filtros adicionales --
143
+ console.log('\n-- Query PK + filtros extra --');
144
+ tracker.reset();
145
+ // No aplica: where con PK + otro campo. PK va a KeyCondition, el resto a Filter
146
+ // Pero _extractPK requiere que el filtro sea SOLO la PK para optimizar update/delete
147
+ // En where(), la detección busca cualquier campo con $eq que sea PK
148
+ const pk_plus = await Book.where({ id: by_fk[0].id });
149
+ assert('PK en filtro mixto usa Query', tracker.log.includes('QueryCommand'));
150
+ // -- Self-healing: GSI inexistente fallback a Scan --
151
+ console.log('\n-- Self-healing --');
152
+ // Forzar un GSI falso
153
+ const book_schema = Book[Symbol.for('dynamite:schema')] || Book[Object.getOwnPropertySymbols(Book).find(s => s.description === 'dynamite:schema')];
154
+ if (book_schema) {
155
+ book_schema.gsis.add('fake_field');
156
+ tracker.reset();
157
+ // Esto intentará Query con GSI fake_field_index, fallará, y caerá a Scan
158
+ try {
159
+ // Necesitamos un filtro por fake_field con $eq para que intente Query
160
+ // Pero fake_field no está en schema.columns, así que el where lanzará "Unknown column"
161
+ // El self-healing solo aplica cuando el campo existe en schema pero el GSI no existe en DynamoDB
162
+ // Simulamos agregando una columna fake temporalmente
163
+ book_schema.columns['fake_field'] = { name: 'fake_field', get: [], set: [], store: {} };
164
+ await Book.where({ fake_field: 'test' });
165
+ assert('self-healing: GSI inexistente cae a Scan sin error', true);
166
+ assert('self-healing: GSI removido del cache', !book_schema.gsis.has('fake_field'));
167
+ delete book_schema.columns['fake_field'];
168
+ }
169
+ catch (e) {
170
+ delete book_schema.columns['fake_field'];
171
+ book_schema.gsis.delete('fake_field');
172
+ assert('self-healing: error inesperado', false, e.message);
173
+ }
174
+ }
175
+ // -- Performance comparison (informativo) --
176
+ console.log('\n-- Performance (informativo) --');
177
+ const scan_start = Date.now();
178
+ for (let i = 0; i < 50; i++)
179
+ await Book.where({ pages: { $gt: 100 } });
180
+ const scan_time = Date.now() - scan_start;
181
+ const query_start = Date.now();
182
+ for (let i = 0; i < 50; i++)
183
+ await Book.where({ id: by_fk[0].id });
184
+ const query_time = Date.now() - query_start;
185
+ console.log(` 50x Scan: ${scan_time}ms (${(scan_time / 50).toFixed(1)}ms/query)`);
186
+ console.log(` 50x Query PK: ${query_time}ms (${(query_time / 50).toFixed(1)}ms/query)`);
187
+ assert('Query PK es mas rapido que Scan', query_time < scan_time, `Query:${query_time}ms vs Scan:${scan_time}ms`);
188
+ tracker.restore();
189
+ console.log(`\n Query vs Scan: ${passed} passed, ${failed} failed`);
190
+ return failed;
191
+ }
192
+ //# sourceMappingURL=query_scan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query_scan.js","sourceRoot":"","sources":["../../../src/test/query_scan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export default function relations(): Promise<number>;