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