@arcaelas/dynamite 1.0.25 → 2.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 (129) 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 +38 -0
  8. package/build/cjs/core/decorator.js +38 -0
  9. package/build/cjs/core/decorator.js.map +1 -0
  10. package/build/cjs/core/table.d.ts +55 -0
  11. package/build/cjs/core/table.js +851 -0
  12. package/build/cjs/core/table.js.map +1 -0
  13. package/build/cjs/decorators/indexes.d.ts +20 -0
  14. package/build/cjs/decorators/indexes.js +45 -0
  15. package/build/cjs/decorators/indexes.js.map +1 -0
  16. package/{src → build/cjs}/decorators/relations.d.ts +8 -7
  17. package/{src → build/cjs}/decorators/relations.js +9 -8
  18. package/build/cjs/decorators/relations.js.map +1 -0
  19. package/build/cjs/decorators/timestamps.d.ts +20 -0
  20. package/build/cjs/decorators/timestamps.js +34 -0
  21. package/build/cjs/decorators/timestamps.js.map +1 -0
  22. package/build/cjs/decorators/transforms.d.ts +41 -0
  23. package/build/cjs/decorators/transforms.js +98 -0
  24. package/build/cjs/decorators/transforms.js.map +1 -0
  25. package/{src → build/cjs}/index.d.ts +5 -3
  26. package/{src → build/cjs}/index.js +7 -6
  27. package/build/cjs/index.js.map +1 -0
  28. package/build/cjs/package.json +1 -0
  29. package/build/cjs/test/basic.d.ts +1 -0
  30. package/build/cjs/test/basic.js +248 -0
  31. package/build/cjs/test/basic.js.map +1 -0
  32. package/build/cjs/test/bulk.d.ts +1 -0
  33. package/build/cjs/test/bulk.js +108 -0
  34. package/build/cjs/test/bulk.js.map +1 -0
  35. package/build/cjs/test/contracts.d.ts +1 -0
  36. package/build/cjs/test/contracts.js +343 -0
  37. package/build/cjs/test/contracts.js.map +1 -0
  38. package/build/cjs/test/filters.d.ts +1 -0
  39. package/build/cjs/test/filters.js +190 -0
  40. package/build/cjs/test/filters.js.map +1 -0
  41. package/build/cjs/test/index.d.ts +1 -0
  42. package/build/cjs/test/index.js +36 -0
  43. package/build/cjs/test/index.js.map +1 -0
  44. package/build/cjs/test/query_scan.d.ts +1 -0
  45. package/build/cjs/test/query_scan.js +195 -0
  46. package/build/cjs/test/query_scan.js.map +1 -0
  47. package/build/cjs/test/relations.d.ts +1 -0
  48. package/build/cjs/test/relations.js +246 -0
  49. package/build/cjs/test/relations.js.map +1 -0
  50. package/build/cjs/test/transactions.d.ts +1 -0
  51. package/build/cjs/test/transactions.js +145 -0
  52. package/build/cjs/test/transactions.js.map +1 -0
  53. package/{src → build/cjs}/utils/relations.d.ts +1 -0
  54. package/{src → build/cjs}/utils/relations.js +5 -10
  55. package/build/cjs/utils/relations.js.map +1 -0
  56. package/build/cjs/utils/ulid.d.ts +10 -0
  57. package/build/cjs/utils/ulid.js +55 -0
  58. package/build/cjs/utils/ulid.js.map +1 -0
  59. package/build/esm/@types/index.d.ts +213 -0
  60. package/build/esm/@types/index.js +8 -0
  61. package/build/esm/@types/index.js.map +1 -0
  62. package/build/esm/core/client.d.ts +96 -0
  63. package/build/esm/core/client.js +375 -0
  64. package/build/esm/core/client.js.map +1 -0
  65. package/build/esm/core/decorator.d.ts +38 -0
  66. package/build/esm/core/decorator.js +34 -0
  67. package/build/esm/core/decorator.js.map +1 -0
  68. package/build/esm/core/table.d.ts +55 -0
  69. package/build/esm/core/table.js +848 -0
  70. package/build/esm/core/table.js.map +1 -0
  71. package/build/esm/decorators/indexes.d.ts +20 -0
  72. package/build/esm/decorators/indexes.js +42 -0
  73. package/build/esm/decorators/indexes.js.map +1 -0
  74. package/build/esm/decorators/relations.d.ts +75 -0
  75. package/build/esm/decorators/relations.js +112 -0
  76. package/build/esm/decorators/relations.js.map +1 -0
  77. package/build/esm/decorators/timestamps.d.ts +20 -0
  78. package/build/esm/decorators/timestamps.js +31 -0
  79. package/build/esm/decorators/timestamps.js.map +1 -0
  80. package/build/esm/decorators/transforms.d.ts +41 -0
  81. package/build/esm/decorators/transforms.js +92 -0
  82. package/build/esm/decorators/transforms.js.map +1 -0
  83. package/build/esm/index.d.ts +17 -0
  84. package/build/esm/index.js +24 -0
  85. package/build/esm/index.js.map +1 -0
  86. package/build/esm/package.json +1 -0
  87. package/build/esm/test/basic.d.ts +1 -0
  88. package/build/esm/test/basic.js +245 -0
  89. package/build/esm/test/basic.js.map +1 -0
  90. package/build/esm/test/bulk.d.ts +1 -0
  91. package/build/esm/test/bulk.js +105 -0
  92. package/build/esm/test/bulk.js.map +1 -0
  93. package/build/esm/test/contracts.d.ts +1 -0
  94. package/build/esm/test/contracts.js +340 -0
  95. package/build/esm/test/contracts.js.map +1 -0
  96. package/build/esm/test/filters.d.ts +1 -0
  97. package/build/esm/test/filters.js +187 -0
  98. package/build/esm/test/filters.js.map +1 -0
  99. package/build/esm/test/index.d.ts +1 -0
  100. package/build/esm/test/index.js +31 -0
  101. package/build/esm/test/index.js.map +1 -0
  102. package/build/esm/test/query_scan.d.ts +1 -0
  103. package/build/esm/test/query_scan.js +192 -0
  104. package/build/esm/test/query_scan.js.map +1 -0
  105. package/build/esm/test/relations.d.ts +1 -0
  106. package/build/esm/test/relations.js +243 -0
  107. package/build/esm/test/relations.js.map +1 -0
  108. package/build/esm/test/transactions.d.ts +1 -0
  109. package/build/esm/test/transactions.js +142 -0
  110. package/build/esm/test/transactions.js.map +1 -0
  111. package/build/esm/utils/relations.d.ts +42 -0
  112. package/build/esm/utils/relations.js +207 -0
  113. package/build/esm/utils/relations.js.map +1 -0
  114. package/build/esm/utils/ulid.d.ts +10 -0
  115. package/build/esm/utils/ulid.js +52 -0
  116. package/build/esm/utils/ulid.js.map +1 -0
  117. package/package.json +31 -9
  118. package/src/core/client.js +0 -294
  119. package/src/core/decorator.d.ts +0 -29
  120. package/src/core/decorator.js +0 -103
  121. package/src/core/table.d.ts +0 -81
  122. package/src/core/table.js +0 -892
  123. package/src/decorators/indexes.d.ts +0 -38
  124. package/src/decorators/indexes.js +0 -59
  125. package/src/decorators/timestamps.d.ts +0 -54
  126. package/src/decorators/timestamps.js +0 -72
  127. package/src/decorators/transforms.d.ts +0 -99
  128. package/src/decorators/transforms.js +0 -166
  129. /package/{src → build/cjs}/@types/index.js +0 -0
@@ -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>;
@@ -0,0 +1,243 @@
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, ManyToMany, } from "../index.js";
11
+ // -- 4 niveles: Org -> Dept -> Employee -> Task --
12
+ let Org = class Org extends Table {
13
+ };
14
+ __decorate([
15
+ PrimaryKey(),
16
+ __metadata("design:type", Object)
17
+ ], Org.prototype, "id", void 0);
18
+ __decorate([
19
+ NotNull(),
20
+ __metadata("design:type", String)
21
+ ], Org.prototype, "name", void 0);
22
+ __decorate([
23
+ HasMany(() => Dept, 'org_id', 'id'),
24
+ __metadata("design:type", Object)
25
+ ], Org.prototype, "departments", void 0);
26
+ Org = __decorate([
27
+ Name('test_rel_orgs')
28
+ ], Org);
29
+ let Dept = class Dept extends Table {
30
+ };
31
+ __decorate([
32
+ PrimaryKey(),
33
+ __metadata("design:type", Object)
34
+ ], Dept.prototype, "id", void 0);
35
+ __decorate([
36
+ NotNull(),
37
+ __metadata("design:type", String)
38
+ ], Dept.prototype, "name", void 0);
39
+ __decorate([
40
+ Default(''),
41
+ __metadata("design:type", String)
42
+ ], Dept.prototype, "org_id", void 0);
43
+ __decorate([
44
+ BelongsTo(() => Org, 'id', 'org_id'),
45
+ __metadata("design:type", Object)
46
+ ], Dept.prototype, "org", void 0);
47
+ __decorate([
48
+ HasMany(() => Employee, 'dept_id', 'id'),
49
+ __metadata("design:type", Object)
50
+ ], Dept.prototype, "employees", void 0);
51
+ Dept = __decorate([
52
+ Name('test_rel_depts')
53
+ ], Dept);
54
+ let Employee = class Employee extends Table {
55
+ };
56
+ __decorate([
57
+ PrimaryKey(),
58
+ __metadata("design:type", Object)
59
+ ], Employee.prototype, "id", void 0);
60
+ __decorate([
61
+ NotNull(),
62
+ __metadata("design:type", String)
63
+ ], Employee.prototype, "name", void 0);
64
+ __decorate([
65
+ Default(''),
66
+ __metadata("design:type", String)
67
+ ], Employee.prototype, "dept_id", void 0);
68
+ __decorate([
69
+ BelongsTo(() => Dept, 'id', 'dept_id'),
70
+ __metadata("design:type", Object)
71
+ ], Employee.prototype, "department", void 0);
72
+ __decorate([
73
+ HasMany(() => EmpTask, 'employee_id', 'id'),
74
+ __metadata("design:type", Object)
75
+ ], Employee.prototype, "tasks", void 0);
76
+ __decorate([
77
+ ManyToMany(() => Project, 'test_rel_emp_projects', 'employee_id', 'project_id'),
78
+ __metadata("design:type", Object)
79
+ ], Employee.prototype, "projects", void 0);
80
+ Employee = __decorate([
81
+ Name('test_rel_employees')
82
+ ], Employee);
83
+ let EmpTask = class EmpTask extends Table {
84
+ };
85
+ __decorate([
86
+ PrimaryKey(),
87
+ __metadata("design:type", Object)
88
+ ], EmpTask.prototype, "id", void 0);
89
+ __decorate([
90
+ NotNull(),
91
+ __metadata("design:type", String)
92
+ ], EmpTask.prototype, "title", void 0);
93
+ __decorate([
94
+ Default(''),
95
+ __metadata("design:type", String)
96
+ ], EmpTask.prototype, "employee_id", void 0);
97
+ __decorate([
98
+ BelongsTo(() => Employee, 'id', 'employee_id'),
99
+ __metadata("design:type", Object)
100
+ ], EmpTask.prototype, "employee", void 0);
101
+ EmpTask = __decorate([
102
+ Name('test_rel_tasks')
103
+ ], EmpTask);
104
+ let Project = class Project extends Table {
105
+ };
106
+ __decorate([
107
+ PrimaryKey(),
108
+ __metadata("design:type", Object)
109
+ ], Project.prototype, "id", void 0);
110
+ __decorate([
111
+ NotNull(),
112
+ __metadata("design:type", String)
113
+ ], Project.prototype, "name", void 0);
114
+ __decorate([
115
+ ManyToMany(() => Employee, 'test_rel_emp_projects', 'project_id', 'employee_id'),
116
+ __metadata("design:type", Object)
117
+ ], Project.prototype, "members", void 0);
118
+ Project = __decorate([
119
+ Name('test_rel_projects')
120
+ ], Project);
121
+ let passed = 0;
122
+ let failed = 0;
123
+ function assert(label, condition, detail) {
124
+ if (condition) {
125
+ console.log(` OK ${label}`);
126
+ passed++;
127
+ }
128
+ else {
129
+ console.error(` FAIL ${label}${detail ? ` -- ${detail}` : ''}`);
130
+ failed++;
131
+ }
132
+ }
133
+ export default async function relations() {
134
+ console.log('\n=== RELATIONS ===\n');
135
+ const dynamite = new Dynamite({
136
+ tables: [Org, Dept, Employee, EmpTask, Project],
137
+ region: 'local',
138
+ endpoint: 'http://localhost:8000',
139
+ credentials: { accessKeyId: 'local', secretAccessKey: 'local' },
140
+ });
141
+ await dynamite.connect();
142
+ await dynamite.sync();
143
+ // -- Seed data --
144
+ const org = await Org.create({ name: 'Acme Corp' });
145
+ const eng = await Dept.create({ name: 'Engineering', org_id: org.id });
146
+ const sales = await Dept.create({ name: 'Sales', org_id: org.id });
147
+ const e1 = await Employee.create({ name: 'Alice', dept_id: eng.id });
148
+ const e2 = await Employee.create({ name: 'Bob', dept_id: eng.id });
149
+ const e3 = await Employee.create({ name: 'Charlie', dept_id: sales.id });
150
+ await EmpTask.create({ title: 'Build API', employee_id: e1.id });
151
+ await EmpTask.create({ title: 'Write tests', employee_id: e1.id });
152
+ await EmpTask.create({ title: 'Code review', employee_id: e2.id });
153
+ await EmpTask.create({ title: 'Close deal', employee_id: e3.id });
154
+ const p1 = await Project.create({ name: 'Project Alpha' });
155
+ const p2 = await Project.create({ name: 'Project Beta' });
156
+ // -- HasMany --
157
+ console.log('-- HasMany --');
158
+ const org_with_depts = await Org.where({ id: org.id }, { include: { departments: true } });
159
+ assert('Org -> departments', org_with_depts[0]?.departments?.length === 2);
160
+ const eng_with_emps = await Dept.where({ id: eng.id }, { include: { employees: true } });
161
+ assert('Dept -> employees', eng_with_emps[0]?.employees?.length === 2);
162
+ // -- BelongsTo --
163
+ console.log('\n-- BelongsTo --');
164
+ const dept_with_org = await Dept.where({ id: eng.id }, { include: { org: true } });
165
+ assert('Dept -> org', dept_with_org[0]?.org?.name === 'Acme Corp');
166
+ const emp_with_dept = await Employee.where({ id: e1.id }, { include: { department: true } });
167
+ assert('Employee -> department', emp_with_dept[0]?.department?.name === 'Engineering');
168
+ // -- HasMany con opciones (limit) --
169
+ console.log('\n-- HasMany con opciones --');
170
+ const e1_tasks_limited = await Employee.where({ id: e1.id }, {
171
+ include: { tasks: { limit: 1 } }
172
+ });
173
+ assert('HasMany con limit:1', e1_tasks_limited[0]?.tasks?.length === 1);
174
+ // -- Include recursivo 2 niveles: Org -> Dept -> Employee --
175
+ console.log('\n-- Include recursivo 2 niveles --');
176
+ const org_2lvl = await Org.where({ id: org.id }, {
177
+ include: {
178
+ departments: {
179
+ include: { employees: true }
180
+ }
181
+ }
182
+ });
183
+ const all_emps = org_2lvl[0]?.departments?.flatMap((d) => d.employees || []);
184
+ assert('Org -> Dept -> Employee (2 niveles)', all_emps?.length === 3);
185
+ // -- Include recursivo 3 niveles: Org -> Dept -> Employee -> Task --
186
+ console.log('\n-- Include recursivo 3 niveles --');
187
+ const org_3lvl = await Org.where({ id: org.id }, {
188
+ include: {
189
+ departments: {
190
+ include: {
191
+ employees: {
192
+ include: { tasks: true }
193
+ }
194
+ }
195
+ }
196
+ }
197
+ });
198
+ const eng_dept = org_3lvl[0]?.departments?.find((d) => d.name === 'Engineering');
199
+ const alice = eng_dept?.employees?.find((e) => e.name === 'Alice');
200
+ assert('3 niveles: Alice tiene 2 tasks', alice?.tasks?.length === 2);
201
+ const bob = eng_dept?.employees?.find((e) => e.name === 'Bob');
202
+ assert('3 niveles: Bob tiene 1 task', bob?.tasks?.length === 1);
203
+ const sales_dept = org_3lvl[0]?.departments?.find((d) => d.name === 'Sales');
204
+ const charlie = sales_dept?.employees?.find((e) => e.name === 'Charlie');
205
+ assert('3 niveles: Charlie tiene 1 task', charlie?.tasks?.length === 1);
206
+ // -- ManyToMany: attach --
207
+ console.log('\n-- ManyToMany --');
208
+ await e1.attach(Project, p1.id);
209
+ await e1.attach(Project, p2.id);
210
+ await e2.attach(Project, p1.id);
211
+ const e1_projects = await Employee.where({ id: e1.id }, { include: { projects: true } });
212
+ assert('attach: Alice tiene 2 projects', e1_projects[0]?.projects?.length === 2);
213
+ const p1_members = await Project.where({ id: p1.id }, { include: { members: true } });
214
+ assert('attach: Project Alpha tiene 2 members', p1_members[0]?.members?.length === 2);
215
+ // -- ManyToMany: detach --
216
+ await e1.detach(Project, p2.id);
217
+ const e1_after_detach = await Employee.where({ id: e1.id }, { include: { projects: true } });
218
+ assert('detach: Alice tiene 1 project', e1_after_detach[0]?.projects?.length === 1);
219
+ // -- ManyToMany: sync --
220
+ await e1.sync(Project, [p2.id]);
221
+ const e1_after_sync = await Employee.where({ id: e1.id }, { include: { projects: true } });
222
+ assert('sync: Alice solo tiene Project Beta', e1_after_sync[0]?.projects?.length === 1);
223
+ assert('sync: es Project Beta', e1_after_sync[0]?.projects?.[0]?.name === 'Project Beta');
224
+ // -- Include recursivo 3 niveles + ManyToMany --
225
+ console.log('\n-- Recursivo + ManyToMany --');
226
+ const org_full = await Org.where({ id: org.id }, {
227
+ include: {
228
+ departments: {
229
+ include: {
230
+ employees: {
231
+ include: { tasks: true, projects: true }
232
+ }
233
+ }
234
+ }
235
+ }
236
+ });
237
+ const eng_full = org_full[0]?.departments?.find((d) => d.name === 'Engineering');
238
+ const alice_full = eng_full?.employees?.find((e) => e.name === 'Alice');
239
+ assert('full tree: Alice tasks + projects', alice_full?.tasks?.length === 2 && alice_full?.projects?.length === 1);
240
+ console.log(`\n Relations: ${passed} passed, ${failed} failed`);
241
+ return failed;
242
+ }
243
+ //# sourceMappingURL=relations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"relations.js","sourceRoot":"","sources":["../../../src/test/relations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export default function transactions(): Promise<number>;
@@ -0,0 +1,142 @@
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, CreatedAt, Name, } from "../index.js";
11
+ let Account = class Account extends Table {
12
+ };
13
+ __decorate([
14
+ PrimaryKey(),
15
+ __metadata("design:type", Object)
16
+ ], Account.prototype, "id", void 0);
17
+ __decorate([
18
+ NotNull(),
19
+ __metadata("design:type", String)
20
+ ], Account.prototype, "name", void 0);
21
+ __decorate([
22
+ Default(() => 0),
23
+ __metadata("design:type", Object)
24
+ ], Account.prototype, "balance", void 0);
25
+ __decorate([
26
+ CreatedAt(),
27
+ __metadata("design:type", Object)
28
+ ], Account.prototype, "created_at", void 0);
29
+ Account = __decorate([
30
+ Name('test_tx_accounts')
31
+ ], Account);
32
+ let TxLog = class TxLog extends Table {
33
+ };
34
+ __decorate([
35
+ PrimaryKey(),
36
+ __metadata("design:type", Object)
37
+ ], TxLog.prototype, "id", void 0);
38
+ __decorate([
39
+ Default(''),
40
+ __metadata("design:type", String)
41
+ ], TxLog.prototype, "account_id", void 0);
42
+ __decorate([
43
+ Default(''),
44
+ __metadata("design:type", String)
45
+ ], TxLog.prototype, "action", void 0);
46
+ __decorate([
47
+ Default(() => 0),
48
+ __metadata("design:type", Object)
49
+ ], TxLog.prototype, "amount", void 0);
50
+ TxLog = __decorate([
51
+ Name('test_tx_logs')
52
+ ], TxLog);
53
+ let passed = 0;
54
+ let failed = 0;
55
+ function assert(label, condition, detail) {
56
+ if (condition) {
57
+ console.log(` OK ${label}`);
58
+ passed++;
59
+ }
60
+ else {
61
+ console.error(` FAIL ${label}${detail ? ` -- ${detail}` : ''}`);
62
+ failed++;
63
+ }
64
+ }
65
+ export default async function transactions() {
66
+ console.log('\n=== TRANSACTIONS ===\n');
67
+ const dynamite = new Dynamite({
68
+ tables: [Account, TxLog],
69
+ region: 'local',
70
+ endpoint: 'http://localhost:8000',
71
+ credentials: { accessKeyId: 'local', secretAccessKey: 'local' },
72
+ });
73
+ await dynamite.connect();
74
+ await dynamite.sync();
75
+ // -- Multi-create en tx --
76
+ console.log('-- Multi-create --');
77
+ let a1, a2;
78
+ await dynamite.tx(async (tx) => {
79
+ a1 = await Account.create({ name: 'Alice', balance: 1000 }, tx);
80
+ a2 = await Account.create({ name: 'Bob', balance: 500 }, tx);
81
+ });
82
+ assert('tx multi-create: ambos persistidos', a1.__isPersisted && a2.__isPersisted);
83
+ const alice = await Account.first({ id: a1.id });
84
+ const bob = await Account.first({ id: a2.id });
85
+ assert('tx multi-create: Alice en DB', alice?.name === 'Alice' && alice?.balance === 1000);
86
+ assert('tx multi-create: Bob en DB', bob?.name === 'Bob' && bob?.balance === 500);
87
+ // -- Create + increment en tx --
88
+ console.log('\n-- Create + increment --');
89
+ let log1;
90
+ await dynamite.tx(async (tx) => {
91
+ log1 = await TxLog.create({ account_id: a1.id, action: 'deposit', amount: 200 }, tx);
92
+ await Account.increment('balance', 200, { id: a1.id }, tx);
93
+ });
94
+ const alice_after = await Account.first({ id: a1.id });
95
+ assert('tx increment: balance +200', alice_after?.balance === 1200);
96
+ assert('tx increment: log creado', log1.__isPersisted === true);
97
+ const log_check = await TxLog.first({ id: log1.id });
98
+ assert('tx increment: log en DB', log_check?.action === 'deposit');
99
+ // -- Transferencia atomica (decrement + increment + log) --
100
+ console.log('\n-- Transferencia atomica --');
101
+ await dynamite.tx(async (tx) => {
102
+ await Account.decrement('balance', 300, { id: a1.id }, tx);
103
+ await Account.increment('balance', 300, { id: a2.id }, tx);
104
+ await TxLog.create({ account_id: a1.id, action: 'transfer_out', amount: 300 }, tx);
105
+ await TxLog.create({ account_id: a2.id, action: 'transfer_in', amount: 300 }, tx);
106
+ });
107
+ const alice_transfer = await Account.first({ id: a1.id });
108
+ const bob_transfer = await Account.first({ id: a2.id });
109
+ assert('transferencia: Alice 1200-300=900', alice_transfer?.balance === 900);
110
+ assert('transferencia: Bob 500+300=800', bob_transfer?.balance === 800);
111
+ // -- Tx fallida: nada se persiste --
112
+ console.log('\n-- Tx fallida --');
113
+ const alice_before_fail = alice_transfer.balance;
114
+ let failed_account;
115
+ try {
116
+ await dynamite.tx(async (tx) => {
117
+ failed_account = await Account.create({ name: 'Ghost' }, tx);
118
+ await Account.increment('balance', 99999, { id: a1.id }, tx);
119
+ throw new Error('Simulated failure');
120
+ });
121
+ }
122
+ catch { }
123
+ assert('tx fallida: instancia no persistida', failed_account.__isPersisted === false);
124
+ const alice_after_fail = await Account.first({ id: a1.id });
125
+ assert('tx fallida: balance intacto', alice_after_fail?.balance === alice_before_fail);
126
+ const ghost = await Account.where({ name: 'Ghost' });
127
+ assert('tx fallida: Ghost no existe', ghost.length === 0);
128
+ // -- Tx con multiples operaciones (>25, auto-chunk) --
129
+ console.log('\n-- Auto-chunk (30 creates) --');
130
+ const ids = [];
131
+ await dynamite.tx(async (tx) => {
132
+ for (let i = 0; i < 30; i++) {
133
+ const acc = await Account.create({ name: `Bulk_${i}`, balance: i }, tx);
134
+ ids.push(acc.id);
135
+ }
136
+ });
137
+ const bulk_check = await Account.where({ name: { $include: 'Bulk_' } });
138
+ assert('auto-chunk: 30 registros creados', bulk_check.length === 30);
139
+ console.log(`\n Transactions: ${passed} passed, ${failed} failed`);
140
+ return failed;
141
+ }
142
+ //# sourceMappingURL=transactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../../src/test/transactions.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EACL,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EACtC,IAAI,GACvB,MAAM,UAAU,CAAC;AAIlB,IAAM,OAAO,GAAb,MAAM,OAAQ,SAAQ,KAAc;CAMnC,CAAA;AAJS;IADP,UAAU,EAAE;;mCACwB;AAClB;IAAlB,OAAO,EAAE;;qCAAsB;AACN;IAAzB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;wCAA2C;AACvC;IAApB,SAAS,EAAE;;2CAA8C;AALtD,OAAO;IADZ,IAAI,CAAC,kBAAkB,CAAC;GACnB,OAAO,CAMZ;AAGD,IAAM,KAAK,GAAX,MAAM,KAAM,SAAQ,KAAY;CAM/B,CAAA;AAJS;IADP,UAAU,EAAE;;iCACwB;AAChB;IAApB,OAAO,CAAC,EAAE,CAAC;;yCAA4B;AACnB;IAApB,OAAO,CAAC,EAAE,CAAC;;qCAAwB;AACV;IAAzB,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;;qCAA0C;AALvD,KAAK;IADV,IAAI,CAAC,cAAc,CAAC;GACf,KAAK,CAMV;AAED,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,SAAS,MAAM,CAAC,KAAa,EAAE,SAAkB,EAAE,MAAe;IAChE,IAAI,SAAS,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,CAAC;IAAC,CAAC;SACtD,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,WAAW,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAAC,MAAM,EAAE,CAAC;IAAC,CAAC;AACvF,CAAC;AAED,MAAM,CAAC,OAAO,CAAC,KAAK,UAAU,YAAY;IACxC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;IAExC,MAAM,QAAQ,GAAG,IAAI,QAAQ,CAAC;QAC5B,MAAM,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;QACxB,MAAM,EAAE,OAAO;QACf,QAAQ,EAAE,uBAAuB;QACjC,WAAW,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE;KAChE,CAAC,CAAC;IACH,MAAM,QAAQ,CAAC,OAAO,EAAE,CAAC;IACzB,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEtB,2BAA2B;IAC3B,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,IAAI,EAAuB,EAAE,EAAuB,CAAC;IACrD,MAAM,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC7B,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;QAChE,EAAE,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;IACH,MAAM,CAAC,oCAAoC,EAAG,EAAU,CAAC,aAAa,IAAK,EAAU,CAAC,aAAa,CAAC,CAAC;IACrG,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAChD,MAAM,CAAC,8BAA8B,EAAE,KAAK,EAAE,IAAI,KAAK,OAAO,IAAI,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC;IAC3F,MAAM,CAAC,4BAA4B,EAAE,GAAG,EAAE,IAAI,KAAK,KAAK,IAAI,GAAG,EAAE,OAAO,KAAK,GAAG,CAAC,CAAC;IAElF,iCAAiC;IACjC,OAAO,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;IAC1C,IAAI,IAAuB,CAAC;IAC5B,MAAM,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC7B,IAAI,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,EAAG,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACtF,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACxD,MAAM,CAAC,4BAA4B,EAAE,WAAW,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC;IACpE,MAAM,CAAC,0BAA0B,EAAG,IAAY,CAAC,aAAa,KAAK,IAAI,CAAC,CAAC;IACzE,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,IAAK,CAAC,EAAE,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,yBAAyB,EAAE,SAAS,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC;IAEnE,4DAA4D;IAC5D,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;IAC7C,MAAM,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC7B,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5D,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QAC5D,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,EAAG,CAAC,EAAE,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;QACpF,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,EAAG,CAAC,EAAE,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE,EAAE,CAAC,CAAC;IACrF,CAAC,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC3D,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IACzD,MAAM,CAAC,mCAAmC,EAAE,cAAc,EAAE,OAAO,KAAK,GAAG,CAAC,CAAC;IAC7E,MAAM,CAAC,gCAAgC,EAAE,YAAY,EAAE,OAAO,KAAK,GAAG,CAAC,CAAC;IAExE,qCAAqC;IACrC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;IAClC,MAAM,iBAAiB,GAAG,cAAe,CAAC,OAAO,CAAC;IAClD,IAAI,cAAmC,CAAC;IACxC,IAAI,CAAC;QACH,MAAM,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;YAC7B,cAAc,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;YAC7D,MAAM,OAAO,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAG,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;YAC9D,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,MAAM,CAAC,qCAAqC,EAAG,cAAsB,CAAC,aAAa,KAAK,KAAK,CAAC,CAAC;IAC/F,MAAM,gBAAgB,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,EAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,CAAC,6BAA6B,EAAE,gBAAgB,EAAE,OAAO,KAAK,iBAAiB,CAAC,CAAC;IACvF,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACrD,MAAM,CAAC,6BAA6B,EAAE,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC;IAE1D,uDAAuD;IACvD,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE;QAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;IACH,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;IACxE,MAAM,CAAC,kCAAkC,EAAE,UAAU,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC;IAErE,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,YAAY,MAAM,SAAS,CAAC,CAAC;IACpE,OAAO,MAAM,CAAC;AAChB,CAAC"}