@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.
- package/README.md +13 -13
- package/{src → build/cjs}/@types/index.d.ts +26 -1
- package/build/cjs/@types/index.js.map +1 -0
- package/{src → build/cjs}/core/client.d.ts +22 -19
- package/build/cjs/core/client.js +384 -0
- package/build/cjs/core/client.js.map +1 -0
- package/build/cjs/core/decorator.d.ts +38 -0
- package/build/cjs/core/decorator.js +38 -0
- package/build/cjs/core/decorator.js.map +1 -0
- package/build/cjs/core/table.d.ts +55 -0
- package/build/cjs/core/table.js +851 -0
- package/build/cjs/core/table.js.map +1 -0
- package/build/cjs/decorators/indexes.d.ts +20 -0
- package/build/cjs/decorators/indexes.js +45 -0
- package/build/cjs/decorators/indexes.js.map +1 -0
- package/{src → build/cjs}/decorators/relations.d.ts +8 -7
- package/{src → build/cjs}/decorators/relations.js +9 -8
- package/build/cjs/decorators/relations.js.map +1 -0
- package/build/cjs/decorators/timestamps.d.ts +20 -0
- package/build/cjs/decorators/timestamps.js +34 -0
- package/build/cjs/decorators/timestamps.js.map +1 -0
- package/build/cjs/decorators/transforms.d.ts +41 -0
- package/build/cjs/decorators/transforms.js +98 -0
- package/build/cjs/decorators/transforms.js.map +1 -0
- package/{src → build/cjs}/index.d.ts +5 -3
- package/{src → build/cjs}/index.js +7 -6
- package/build/cjs/index.js.map +1 -0
- package/build/cjs/package.json +1 -0
- package/build/cjs/test/basic.d.ts +1 -0
- package/build/cjs/test/basic.js +248 -0
- package/build/cjs/test/basic.js.map +1 -0
- package/build/cjs/test/bulk.d.ts +1 -0
- package/build/cjs/test/bulk.js +108 -0
- package/build/cjs/test/bulk.js.map +1 -0
- package/build/cjs/test/contracts.d.ts +1 -0
- package/build/cjs/test/contracts.js +343 -0
- package/build/cjs/test/contracts.js.map +1 -0
- package/build/cjs/test/filters.d.ts +1 -0
- package/build/cjs/test/filters.js +190 -0
- package/build/cjs/test/filters.js.map +1 -0
- package/build/cjs/test/index.d.ts +1 -0
- package/build/cjs/test/index.js +36 -0
- package/build/cjs/test/index.js.map +1 -0
- package/build/cjs/test/query_scan.d.ts +1 -0
- package/build/cjs/test/query_scan.js +195 -0
- package/build/cjs/test/query_scan.js.map +1 -0
- package/build/cjs/test/relations.d.ts +1 -0
- package/build/cjs/test/relations.js +246 -0
- package/build/cjs/test/relations.js.map +1 -0
- package/build/cjs/test/transactions.d.ts +1 -0
- package/build/cjs/test/transactions.js +145 -0
- package/build/cjs/test/transactions.js.map +1 -0
- package/{src → build/cjs}/utils/relations.d.ts +1 -0
- package/{src → build/cjs}/utils/relations.js +5 -10
- package/build/cjs/utils/relations.js.map +1 -0
- package/build/cjs/utils/ulid.d.ts +10 -0
- package/build/cjs/utils/ulid.js +55 -0
- package/build/cjs/utils/ulid.js.map +1 -0
- package/build/esm/@types/index.d.ts +213 -0
- package/build/esm/@types/index.js +8 -0
- package/build/esm/@types/index.js.map +1 -0
- package/build/esm/core/client.d.ts +96 -0
- package/build/esm/core/client.js +375 -0
- package/build/esm/core/client.js.map +1 -0
- package/build/esm/core/decorator.d.ts +38 -0
- package/build/esm/core/decorator.js +34 -0
- package/build/esm/core/decorator.js.map +1 -0
- package/build/esm/core/table.d.ts +55 -0
- package/build/esm/core/table.js +848 -0
- package/build/esm/core/table.js.map +1 -0
- package/build/esm/decorators/indexes.d.ts +20 -0
- package/build/esm/decorators/indexes.js +42 -0
- package/build/esm/decorators/indexes.js.map +1 -0
- package/build/esm/decorators/relations.d.ts +75 -0
- package/build/esm/decorators/relations.js +112 -0
- package/build/esm/decorators/relations.js.map +1 -0
- package/build/esm/decorators/timestamps.d.ts +20 -0
- package/build/esm/decorators/timestamps.js +31 -0
- package/build/esm/decorators/timestamps.js.map +1 -0
- package/build/esm/decorators/transforms.d.ts +41 -0
- package/build/esm/decorators/transforms.js +92 -0
- package/build/esm/decorators/transforms.js.map +1 -0
- package/build/esm/index.d.ts +17 -0
- package/build/esm/index.js +24 -0
- package/build/esm/index.js.map +1 -0
- package/build/esm/package.json +1 -0
- package/build/esm/test/basic.d.ts +1 -0
- package/build/esm/test/basic.js +245 -0
- package/build/esm/test/basic.js.map +1 -0
- package/build/esm/test/bulk.d.ts +1 -0
- package/build/esm/test/bulk.js +105 -0
- package/build/esm/test/bulk.js.map +1 -0
- package/build/esm/test/contracts.d.ts +1 -0
- package/build/esm/test/contracts.js +340 -0
- package/build/esm/test/contracts.js.map +1 -0
- package/build/esm/test/filters.d.ts +1 -0
- package/build/esm/test/filters.js +187 -0
- package/build/esm/test/filters.js.map +1 -0
- package/build/esm/test/index.d.ts +1 -0
- package/build/esm/test/index.js +31 -0
- package/build/esm/test/index.js.map +1 -0
- package/build/esm/test/query_scan.d.ts +1 -0
- package/build/esm/test/query_scan.js +192 -0
- package/build/esm/test/query_scan.js.map +1 -0
- package/build/esm/test/relations.d.ts +1 -0
- package/build/esm/test/relations.js +243 -0
- package/build/esm/test/relations.js.map +1 -0
- package/build/esm/test/transactions.d.ts +1 -0
- package/build/esm/test/transactions.js +142 -0
- package/build/esm/test/transactions.js.map +1 -0
- package/build/esm/utils/relations.d.ts +42 -0
- package/build/esm/utils/relations.js +207 -0
- package/build/esm/utils/relations.js.map +1 -0
- package/build/esm/utils/ulid.d.ts +10 -0
- package/build/esm/utils/ulid.js +52 -0
- package/build/esm/utils/ulid.js.map +1 -0
- package/package.json +31 -9
- package/src/core/client.js +0 -294
- package/src/core/decorator.d.ts +0 -29
- package/src/core/decorator.js +0 -103
- package/src/core/table.d.ts +0 -81
- package/src/core/table.js +0 -892
- package/src/decorators/indexes.d.ts +0 -38
- package/src/decorators/indexes.js +0 -59
- package/src/decorators/timestamps.d.ts +0 -54
- package/src/decorators/timestamps.js +0 -72
- package/src/decorators/transforms.d.ts +0 -99
- package/src/decorators/transforms.js +0 -166
- /package/{src → build/cjs}/@types/index.js +0 -0
|
@@ -0,0 +1,340 @@
|
|
|
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, Get, Set as SetDecorator, Validate, NotNull, Name, CreatedAt, UpdatedAt, DeleteAt, HasMany, BelongsTo, } from "../index.js";
|
|
11
|
+
// -- Modelos --
|
|
12
|
+
let CUser = class CUser extends Table {
|
|
13
|
+
};
|
|
14
|
+
__decorate([
|
|
15
|
+
PrimaryKey(),
|
|
16
|
+
__metadata("design:type", Object)
|
|
17
|
+
], CUser.prototype, "id", void 0);
|
|
18
|
+
__decorate([
|
|
19
|
+
Get((v) => typeof v === 'string' ? v.toUpperCase() : v),
|
|
20
|
+
Validate((next) => (typeof next === 'string' && next.length >= 2) || 'Min 2 chars'),
|
|
21
|
+
SetDecorator((next) => typeof next === 'string' ? next.trim() : next),
|
|
22
|
+
__metadata("design:type", String)
|
|
23
|
+
], CUser.prototype, "name", void 0);
|
|
24
|
+
__decorate([
|
|
25
|
+
Name('user_email'),
|
|
26
|
+
Default(''),
|
|
27
|
+
__metadata("design:type", String)
|
|
28
|
+
], CUser.prototype, "email", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
Default(() => 0),
|
|
31
|
+
__metadata("design:type", Object)
|
|
32
|
+
], CUser.prototype, "score", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
CreatedAt(),
|
|
35
|
+
__metadata("design:type", Object)
|
|
36
|
+
], CUser.prototype, "created_at", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
UpdatedAt(),
|
|
39
|
+
__metadata("design:type", Object)
|
|
40
|
+
], CUser.prototype, "updated_at", void 0);
|
|
41
|
+
__decorate([
|
|
42
|
+
DeleteAt(),
|
|
43
|
+
__metadata("design:type", Object)
|
|
44
|
+
], CUser.prototype, "deleted_at", void 0);
|
|
45
|
+
__decorate([
|
|
46
|
+
HasMany(() => CPost, 'user_id', 'id'),
|
|
47
|
+
__metadata("design:type", Object)
|
|
48
|
+
], CUser.prototype, "posts", void 0);
|
|
49
|
+
CUser = __decorate([
|
|
50
|
+
Name('test_contract_users')
|
|
51
|
+
], CUser);
|
|
52
|
+
let CPost = class CPost extends Table {
|
|
53
|
+
};
|
|
54
|
+
__decorate([
|
|
55
|
+
PrimaryKey(),
|
|
56
|
+
__metadata("design:type", Object)
|
|
57
|
+
], CPost.prototype, "id", void 0);
|
|
58
|
+
__decorate([
|
|
59
|
+
NotNull(),
|
|
60
|
+
__metadata("design:type", String)
|
|
61
|
+
], CPost.prototype, "title", void 0);
|
|
62
|
+
__decorate([
|
|
63
|
+
Default(''),
|
|
64
|
+
__metadata("design:type", String)
|
|
65
|
+
], CPost.prototype, "user_id", void 0);
|
|
66
|
+
__decorate([
|
|
67
|
+
BelongsTo(() => CUser, 'id', 'user_id'),
|
|
68
|
+
__metadata("design:type", Object)
|
|
69
|
+
], CPost.prototype, "author", void 0);
|
|
70
|
+
CPost = __decorate([
|
|
71
|
+
Name('test_contract_posts')
|
|
72
|
+
], CPost);
|
|
73
|
+
let passed = 0;
|
|
74
|
+
let failed = 0;
|
|
75
|
+
function assert(label, condition, detail) {
|
|
76
|
+
if (condition) {
|
|
77
|
+
console.log(` OK ${label}`);
|
|
78
|
+
passed++;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
console.error(` FAIL ${label}${detail ? ` -- ${detail}` : ''}`);
|
|
82
|
+
failed++;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
export default async function contracts() {
|
|
86
|
+
console.log('\n=== CONTRACTS ===\n');
|
|
87
|
+
const dynamite = new Dynamite({
|
|
88
|
+
tables: [CUser, CPost],
|
|
89
|
+
region: 'local',
|
|
90
|
+
endpoint: 'http://localhost:8000',
|
|
91
|
+
credentials: { accessKeyId: 'local', secretAccessKey: 'local' },
|
|
92
|
+
});
|
|
93
|
+
await dynamite.connect();
|
|
94
|
+
await dynamite.sync();
|
|
95
|
+
// =====================================================
|
|
96
|
+
// 1. Pipeline order: Set -> Validate -> Get
|
|
97
|
+
// =====================================================
|
|
98
|
+
console.log('-- Pipeline order --');
|
|
99
|
+
// Set trims, then Validate checks length >= 2. " ab " -> "ab" -> valid
|
|
100
|
+
const u1 = await CUser.create({ name: ' alice ' });
|
|
101
|
+
assert('Set runs before Validate: trimmed " alice " passes validation', u1.name === 'ALICE');
|
|
102
|
+
// Reject short value after trim: use a value that fails even untrimmed
|
|
103
|
+
let short_threw = false;
|
|
104
|
+
try {
|
|
105
|
+
await CUser.create({ name: 'x' });
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
short_threw = true;
|
|
109
|
+
}
|
|
110
|
+
assert('Validate rejects: "x" (1 char) -> fails', short_threw);
|
|
111
|
+
// Get transforms on read: stored as "alice", read as "ALICE"
|
|
112
|
+
const fetched = await CUser.first({ id: u1.id });
|
|
113
|
+
assert('Get transforms on read: "alice" -> "ALICE"', fetched?.name === 'ALICE');
|
|
114
|
+
// Multiple Sets on same field execute in declaration order
|
|
115
|
+
// name has: Set(trim) -> Validate(>=2) -> Get(upper)
|
|
116
|
+
// If order reversed (Validate before Set), " ab " (length 6) would pass without trim
|
|
117
|
+
const u_spaces = await CUser.create({ name: ' ab ' });
|
|
118
|
+
assert('Pipeline order preserved: trim then validate then upper', u_spaces.name === 'AB');
|
|
119
|
+
// =====================================================
|
|
120
|
+
// 2. @Name mapping roundtrip
|
|
121
|
+
// =====================================================
|
|
122
|
+
console.log('\n-- @Name mapping roundtrip --');
|
|
123
|
+
const u2 = await CUser.create({ name: 'bob', email: 'bob@test.com' });
|
|
124
|
+
// Write: email property -> user_email column in DynamoDB
|
|
125
|
+
// Read: user_email column -> email property
|
|
126
|
+
const read_back = await CUser.first({ id: u2.id });
|
|
127
|
+
assert('@Name write+read: email roundtrip', read_back?.email === 'bob@test.com');
|
|
128
|
+
// Filter by TS property name should work (mapped internally)
|
|
129
|
+
const by_email = await CUser.where({ email: 'bob@test.com' });
|
|
130
|
+
assert('@Name filter: where({ email }) works', by_email.length === 1 && by_email[0].id === u2.id);
|
|
131
|
+
// Update by TS property name
|
|
132
|
+
await CUser.update({ email: 'updated@test.com' }, { id: u2.id });
|
|
133
|
+
const after_update = await CUser.first({ id: u2.id });
|
|
134
|
+
assert('@Name update: email updated via TS name', after_update?.email === 'updated@test.com');
|
|
135
|
+
// =====================================================
|
|
136
|
+
// 3. Soft delete consistency
|
|
137
|
+
// =====================================================
|
|
138
|
+
console.log('\n-- Soft delete consistency --');
|
|
139
|
+
const u3 = await CUser.create({ name: 'charlie', email: 'c@test.com' });
|
|
140
|
+
// Normal where excludes nothing (deleted_at is null/absent)
|
|
141
|
+
const before = await CUser.where({ id: u3.id });
|
|
142
|
+
assert('before destroy: visible in where', before.length === 1);
|
|
143
|
+
// destroy() sets deleted_at, doesn't delete
|
|
144
|
+
await u3.destroy();
|
|
145
|
+
const after_destroy = await CUser.where({ id: u3.id });
|
|
146
|
+
assert('after destroy: excluded from where', after_destroy.length === 0);
|
|
147
|
+
// _includeTrashed shows it
|
|
148
|
+
const with_trashed = await CUser.where({ id: u3.id }, { _includeTrashed: true });
|
|
149
|
+
assert('_includeTrashed: visible', with_trashed.length === 1);
|
|
150
|
+
assert('_includeTrashed: has deleted_at timestamp', typeof with_trashed[0].deleted_at === 'string' && with_trashed[0].deleted_at.length > 0);
|
|
151
|
+
// forceDestroy actually removes from DB
|
|
152
|
+
await u3.forceDestroy();
|
|
153
|
+
const after_force = await CUser.where({ id: u3.id }, { _includeTrashed: true });
|
|
154
|
+
assert('forceDestroy: gone even with _includeTrashed', after_force.length === 0);
|
|
155
|
+
// Soft delete doesn't affect other records
|
|
156
|
+
const u1_still = await CUser.first({ id: u1.id });
|
|
157
|
+
assert('soft delete isolation: u1 still exists', u1_still?.id === u1.id);
|
|
158
|
+
// =====================================================
|
|
159
|
+
// 4. Transaction atomicity under failure
|
|
160
|
+
// =====================================================
|
|
161
|
+
console.log('\n-- Transaction atomicity --');
|
|
162
|
+
const u4 = await CUser.create({ name: 'dave', score: 100 });
|
|
163
|
+
const u5 = await CUser.create({ name: 'eve', score: 200 });
|
|
164
|
+
// Successful tx: both changes persist
|
|
165
|
+
await dynamite.tx(async (tx) => {
|
|
166
|
+
await CUser.increment('score', 50, { id: u4.id }, tx);
|
|
167
|
+
await CUser.increment('score', 50, { id: u5.id }, tx);
|
|
168
|
+
});
|
|
169
|
+
const d_after = await CUser.first({ id: u4.id });
|
|
170
|
+
const e_after = await CUser.first({ id: u5.id });
|
|
171
|
+
assert('tx success: dave 100+50=150', d_after?.score === 150);
|
|
172
|
+
assert('tx success: eve 200+50=250', e_after?.score === 250);
|
|
173
|
+
// Failed tx: neither change persists
|
|
174
|
+
try {
|
|
175
|
+
await dynamite.tx(async (tx) => {
|
|
176
|
+
await CUser.increment('score', 1000, { id: u4.id }, tx);
|
|
177
|
+
await CPost.create({ title: 'orphan', user_id: u4.id }, tx);
|
|
178
|
+
throw new Error('Forced rollback');
|
|
179
|
+
});
|
|
180
|
+
}
|
|
181
|
+
catch { }
|
|
182
|
+
const d_after_fail = await CUser.first({ id: u4.id });
|
|
183
|
+
assert('tx fail: dave score unchanged (150)', d_after_fail?.score === 150);
|
|
184
|
+
const orphan = await CPost.where({ title: 'orphan' });
|
|
185
|
+
assert('tx fail: orphan post not created', orphan.length === 0);
|
|
186
|
+
// Multiple creates in tx: all or nothing
|
|
187
|
+
let tx_ids = [];
|
|
188
|
+
try {
|
|
189
|
+
await dynamite.tx(async (tx) => {
|
|
190
|
+
for (let i = 0; i < 5; i++) {
|
|
191
|
+
const p = await CPost.create({ title: `tx_post_${i}`, user_id: u4.id }, tx);
|
|
192
|
+
tx_ids.push(p.id);
|
|
193
|
+
}
|
|
194
|
+
throw new Error('Abort after 5 creates');
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
catch { }
|
|
198
|
+
for (const tid of tx_ids) {
|
|
199
|
+
const found = await CPost.first({ id: tid });
|
|
200
|
+
assert(`tx all-or-nothing: post ${tid.slice(0, 8)} not persisted`, found === undefined);
|
|
201
|
+
}
|
|
202
|
+
// =====================================================
|
|
203
|
+
// 5. __isPersisted state machine
|
|
204
|
+
// =====================================================
|
|
205
|
+
console.log('\n-- __isPersisted state machine --');
|
|
206
|
+
// New instance: false
|
|
207
|
+
const fresh = new CUser({ name: 'frank' });
|
|
208
|
+
assert('new instance: __isPersisted = false', fresh.__isPersisted === false);
|
|
209
|
+
// After create: true
|
|
210
|
+
const created = await CUser.create({ name: 'grace' });
|
|
211
|
+
assert('after create: __isPersisted = true', created.__isPersisted === true);
|
|
212
|
+
// After save (new): true
|
|
213
|
+
const saved = new CUser({ name: 'heidi' });
|
|
214
|
+
assert('before save: __isPersisted = false', saved.__isPersisted === false);
|
|
215
|
+
await saved.save();
|
|
216
|
+
assert('after save: __isPersisted = true', saved.__isPersisted === true);
|
|
217
|
+
// In tx before commit: false
|
|
218
|
+
let tx_instance;
|
|
219
|
+
await dynamite.tx(async (tx) => {
|
|
220
|
+
tx_instance = await CUser.create({ name: 'ivan' }, tx);
|
|
221
|
+
assert('in tx before commit: false', tx_instance.__isPersisted === false);
|
|
222
|
+
});
|
|
223
|
+
assert('after tx commit: true', tx_instance.__isPersisted === true);
|
|
224
|
+
// Failed tx: stays false
|
|
225
|
+
let failed_instance;
|
|
226
|
+
try {
|
|
227
|
+
await dynamite.tx(async (tx) => {
|
|
228
|
+
failed_instance = await CUser.create({ name: 'judy' }, tx);
|
|
229
|
+
throw new Error('fail');
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
catch { }
|
|
233
|
+
assert('failed tx: stays false', failed_instance.__isPersisted === false);
|
|
234
|
+
// From where: true
|
|
235
|
+
const from_db = await CUser.first({ id: created.id });
|
|
236
|
+
assert('from where: __isPersisted = true', from_db.__isPersisted === true);
|
|
237
|
+
// =====================================================
|
|
238
|
+
// 6. Boundary inputs in where()
|
|
239
|
+
// =====================================================
|
|
240
|
+
console.log('\n-- Boundary inputs --');
|
|
241
|
+
// Use CUser for boundary tests -- filter by known good records to avoid @Validate issues on reconstruction
|
|
242
|
+
const all = await CUser.where({ id: u1.id });
|
|
243
|
+
assert('where with filter: returns records', all.length > 0);
|
|
244
|
+
// limit: 0 returns empty
|
|
245
|
+
const zero = await CUser.where({}, { limit: 0 });
|
|
246
|
+
assert('limit: 0 returns []', zero.length === 0);
|
|
247
|
+
// $in with 1 element
|
|
248
|
+
const in_one = await CUser.where({ id: { $in: [u1.id] } });
|
|
249
|
+
assert('$in with 1 element', in_one.length === 1 && in_one[0].id === u1.id);
|
|
250
|
+
// $in with many elements
|
|
251
|
+
const all_ids = all.map((u) => u.id);
|
|
252
|
+
const in_many = await CUser.where({ id: { $in: all_ids } }, { _includeTrashed: true });
|
|
253
|
+
assert('$in with many elements', in_many.length === all_ids.length);
|
|
254
|
+
// Unknown field throws
|
|
255
|
+
let unknown_threw = false;
|
|
256
|
+
try {
|
|
257
|
+
await CPost.where({ nonexistent: 'x' });
|
|
258
|
+
}
|
|
259
|
+
catch {
|
|
260
|
+
unknown_threw = true;
|
|
261
|
+
}
|
|
262
|
+
assert('unknown field throws', unknown_threw);
|
|
263
|
+
// $in empty throws
|
|
264
|
+
let in_empty_threw = false;
|
|
265
|
+
try {
|
|
266
|
+
await CPost.where({ id: { $in: [] } });
|
|
267
|
+
}
|
|
268
|
+
catch {
|
|
269
|
+
in_empty_threw = true;
|
|
270
|
+
}
|
|
271
|
+
assert('$in empty throws', in_empty_threw);
|
|
272
|
+
// =====================================================
|
|
273
|
+
// 7. CreatedAt immutability + UpdatedAt mutation
|
|
274
|
+
// =====================================================
|
|
275
|
+
console.log('\n-- Timestamp contracts --');
|
|
276
|
+
const ts_user = await CUser.create({ name: 'timestamps' });
|
|
277
|
+
const original_created = ts_user.created_at;
|
|
278
|
+
const original_updated = ts_user.updated_at;
|
|
279
|
+
await new Promise(r => setTimeout(r, 50));
|
|
280
|
+
await ts_user.update({ email: 'ts@test.com' });
|
|
281
|
+
const after = await CUser.first({ id: ts_user.id });
|
|
282
|
+
assert('CreatedAt immutable after update', after?.created_at === original_created);
|
|
283
|
+
assert('UpdatedAt changed after update', after?.updated_at !== original_updated);
|
|
284
|
+
// UpdatedAt respeta valor explícito
|
|
285
|
+
const explicit_ts = '2020-01-01T00:00:00.000Z';
|
|
286
|
+
const ts_explicit = await CUser.create({ name: 'ts_explicit', updated_at: explicit_ts });
|
|
287
|
+
assert('UpdatedAt respeta valor explicito', ts_explicit.updated_at === explicit_ts);
|
|
288
|
+
// =====================================================
|
|
289
|
+
// 8. PrimaryKey inmutable en update
|
|
290
|
+
// =====================================================
|
|
291
|
+
console.log('\n-- PrimaryKey immutability --');
|
|
292
|
+
const pk_user = await CUser.create({ name: 'pk_test' });
|
|
293
|
+
const original_pk = pk_user.id;
|
|
294
|
+
await pk_user.update({ name: 'pk_changed' });
|
|
295
|
+
assert('PK no cambia en instance update', pk_user.id === original_pk);
|
|
296
|
+
const pk_after = await CUser.first({ id: original_pk });
|
|
297
|
+
assert('PK no cambia en DB', pk_after?.name === 'PK_CHANGED');
|
|
298
|
+
// =====================================================
|
|
299
|
+
// 9. create() con PK duplicado
|
|
300
|
+
// =====================================================
|
|
301
|
+
console.log('\n-- PK duplicate --');
|
|
302
|
+
const dup_user = await CUser.create({ name: 'original' });
|
|
303
|
+
let dup_threw = false;
|
|
304
|
+
try {
|
|
305
|
+
await CUser.create({ id: dup_user.id, name: 'duplicate' });
|
|
306
|
+
}
|
|
307
|
+
catch (e) {
|
|
308
|
+
dup_threw = e.message.includes('already exists');
|
|
309
|
+
}
|
|
310
|
+
assert('create con PK duplicado lanza error', dup_threw);
|
|
311
|
+
const dup_check = await CUser.first({ id: dup_user.id });
|
|
312
|
+
assert('registro original intacto', dup_check?.name === 'ORIGINAL');
|
|
313
|
+
// =====================================================
|
|
314
|
+
// 10. Default en set pipeline (no lazy)
|
|
315
|
+
// =====================================================
|
|
316
|
+
console.log('\n-- Default eager (not lazy) --');
|
|
317
|
+
const eager = new CUser({ name: 'eager_test' });
|
|
318
|
+
assert('id existe desde construccion (no lazy)', typeof eager.id === 'string' && eager.id.length === 26);
|
|
319
|
+
assert('created_at existe desde construccion', typeof eager.created_at === 'string' && eager.created_at.length > 0);
|
|
320
|
+
assert('updated_at existe desde construccion', typeof eager.updated_at === 'string' && eager.updated_at.length > 0);
|
|
321
|
+
// Dos instancias secuenciales tienen IDs ordenados
|
|
322
|
+
const seq1 = new CUser({ name: 'seq1' });
|
|
323
|
+
const seq2 = new CUser({ name: 'seq2' });
|
|
324
|
+
assert('ULIDs secuenciales: seq1 < seq2', seq1.id < seq2.id);
|
|
325
|
+
// =====================================================
|
|
326
|
+
// 11. ULID secuencialidad en creates
|
|
327
|
+
// =====================================================
|
|
328
|
+
console.log('\n-- ULID sequential creates --');
|
|
329
|
+
const ids = [];
|
|
330
|
+
for (let i = 0; i < 20; i++) {
|
|
331
|
+
const u = await CUser.create({ name: `seq_${i}` });
|
|
332
|
+
ids.push(u.id);
|
|
333
|
+
}
|
|
334
|
+
const sorted_ids = [...ids].sort();
|
|
335
|
+
assert('20 creates secuenciales: IDs monotonicos', JSON.stringify(ids) === JSON.stringify(sorted_ids));
|
|
336
|
+
assert('20 creates secuenciales: todos unicos', new Set(ids).size === 20);
|
|
337
|
+
console.log(`\n Contracts: ${passed} passed, ${failed} failed`);
|
|
338
|
+
return failed;
|
|
339
|
+
}
|
|
340
|
+
//# sourceMappingURL=contracts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../../src/test/contracts.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function filters(): Promise<number>;
|
|
@@ -0,0 +1,187 @@
|
|
|
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, } from "../index.js";
|
|
11
|
+
let Product = class Product extends Table {
|
|
12
|
+
};
|
|
13
|
+
__decorate([
|
|
14
|
+
PrimaryKey(),
|
|
15
|
+
__metadata("design:type", Object)
|
|
16
|
+
], Product.prototype, "id", void 0);
|
|
17
|
+
__decorate([
|
|
18
|
+
NotNull(),
|
|
19
|
+
__metadata("design:type", String)
|
|
20
|
+
], Product.prototype, "name", void 0);
|
|
21
|
+
__decorate([
|
|
22
|
+
Default(''),
|
|
23
|
+
__metadata("design:type", String)
|
|
24
|
+
], Product.prototype, "category", void 0);
|
|
25
|
+
__decorate([
|
|
26
|
+
Default(() => 0),
|
|
27
|
+
__metadata("design:type", Object)
|
|
28
|
+
], Product.prototype, "price", void 0);
|
|
29
|
+
__decorate([
|
|
30
|
+
Default(() => 0),
|
|
31
|
+
__metadata("design:type", Object)
|
|
32
|
+
], Product.prototype, "stock", void 0);
|
|
33
|
+
__decorate([
|
|
34
|
+
Default(''),
|
|
35
|
+
__metadata("design:type", String)
|
|
36
|
+
], Product.prototype, "tags", void 0);
|
|
37
|
+
__decorate([
|
|
38
|
+
Default(() => true),
|
|
39
|
+
__metadata("design:type", Object)
|
|
40
|
+
], Product.prototype, "active", void 0);
|
|
41
|
+
Product = __decorate([
|
|
42
|
+
Name('test_filter_products')
|
|
43
|
+
], Product);
|
|
44
|
+
let passed = 0;
|
|
45
|
+
let failed = 0;
|
|
46
|
+
function assert(label, condition, detail) {
|
|
47
|
+
if (condition) {
|
|
48
|
+
console.log(` OK ${label}`);
|
|
49
|
+
passed++;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
console.error(` FAIL ${label}${detail ? ` -- ${detail}` : ''}`);
|
|
53
|
+
failed++;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export default async function filters() {
|
|
57
|
+
console.log('\n=== FILTERS ===\n');
|
|
58
|
+
const dynamite = new Dynamite({
|
|
59
|
+
tables: [Product],
|
|
60
|
+
region: 'local',
|
|
61
|
+
endpoint: 'http://localhost:8000',
|
|
62
|
+
credentials: { accessKeyId: 'local', secretAccessKey: 'local' },
|
|
63
|
+
});
|
|
64
|
+
await dynamite.connect();
|
|
65
|
+
await dynamite.sync();
|
|
66
|
+
// -- Seed 20 products --
|
|
67
|
+
const items = [];
|
|
68
|
+
for (let i = 0; i < 20; i++) {
|
|
69
|
+
items.push(Product.create({
|
|
70
|
+
name: `Product_${i}`,
|
|
71
|
+
category: i < 10 ? 'electronics' : 'clothing',
|
|
72
|
+
price: (i + 1) * 10,
|
|
73
|
+
stock: i % 3 === 0 ? 0 : (i + 1) * 5,
|
|
74
|
+
tags: i < 5 ? 'featured,new' : i < 15 ? 'sale' : 'clearance',
|
|
75
|
+
active: i < 18,
|
|
76
|
+
}));
|
|
77
|
+
}
|
|
78
|
+
const products = await Promise.all(items);
|
|
79
|
+
console.log(` Seeded ${products.length} products\n`);
|
|
80
|
+
// ===================== BASIC =====================
|
|
81
|
+
console.log('-- Filtros basicos --');
|
|
82
|
+
// $eq plano
|
|
83
|
+
const by_name = await Product.where({ name: 'Product_0' });
|
|
84
|
+
assert('$eq plano: name = Product_0', by_name.length === 1 && by_name[0].name === 'Product_0');
|
|
85
|
+
// $eq explicito
|
|
86
|
+
const by_eq = await Product.where({ name: { $eq: 'Product_5' } });
|
|
87
|
+
assert('$eq explicito', by_eq.length === 1);
|
|
88
|
+
// Sobrecarga key, value
|
|
89
|
+
const by_kv = await Product.where('name', 'Product_3');
|
|
90
|
+
assert('sobrecarga (key, value)', by_kv.length === 1);
|
|
91
|
+
// Sobrecarga key, operator, value
|
|
92
|
+
const by_kov = await Product.where('name', '=', 'Product_3');
|
|
93
|
+
assert('sobrecarga (key, op, value)', by_kov.length === 1);
|
|
94
|
+
// null ($eq null -> attribute_not_exists)
|
|
95
|
+
// Todos los productos tienen name, asi que buscar uno sin category custom
|
|
96
|
+
const no_results = await Product.where({ name: null });
|
|
97
|
+
assert('$eq null -> attribute_not_exists', no_results.length === 0);
|
|
98
|
+
// $ne
|
|
99
|
+
const not_electronics = await Product.where({ category: { $ne: 'electronics' } });
|
|
100
|
+
assert('$ne: no electronics', not_electronics.every(p => p.category !== 'electronics'));
|
|
101
|
+
assert('$ne: count correcto', not_electronics.length === 10);
|
|
102
|
+
// ===================== ADVANCED =====================
|
|
103
|
+
console.log('\n-- Filtros avanzados --');
|
|
104
|
+
// $gt
|
|
105
|
+
const expensive = await Product.where({ price: { $gt: 150 } });
|
|
106
|
+
assert('$gt: price > 150', expensive.every(p => p.price > 150));
|
|
107
|
+
assert('$gt: count', expensive.length === 5); // 160,170,180,190,200
|
|
108
|
+
// $gte
|
|
109
|
+
const gte150 = await Product.where({ price: { $gte: 150 } });
|
|
110
|
+
assert('$gte: price >= 150', gte150.length === 6); // 150,160,...,200
|
|
111
|
+
// $lt
|
|
112
|
+
const cheap = await Product.where({ price: { $lt: 50 } });
|
|
113
|
+
assert('$lt: price < 50', cheap.every(p => p.price < 50));
|
|
114
|
+
assert('$lt: count', cheap.length === 4); // 10,20,30,40
|
|
115
|
+
// $lte
|
|
116
|
+
const lte50 = await Product.where({ price: { $lte: 50 } });
|
|
117
|
+
assert('$lte: price <= 50', lte50.length === 5); // 10,20,30,40,50
|
|
118
|
+
// $in
|
|
119
|
+
const specific = await Product.where({ name: { $in: ['Product_0', 'Product_5', 'Product_19'] } });
|
|
120
|
+
assert('$in: 3 productos especificos', specific.length === 3);
|
|
121
|
+
// $in vacio lanza error
|
|
122
|
+
let in_empty_threw = false;
|
|
123
|
+
try {
|
|
124
|
+
await Product.where({ name: { $in: [] } });
|
|
125
|
+
}
|
|
126
|
+
catch {
|
|
127
|
+
in_empty_threw = true;
|
|
128
|
+
}
|
|
129
|
+
assert('$in vacio lanza error', in_empty_threw);
|
|
130
|
+
// $include (contains)
|
|
131
|
+
const featured = await Product.where({ tags: { $include: 'featured' } });
|
|
132
|
+
assert('$include: tags contiene featured', featured.length === 5);
|
|
133
|
+
// Multi-campo
|
|
134
|
+
const multi = await Product.where({ category: 'electronics', active: true });
|
|
135
|
+
assert('multi-campo: electronics + active', multi.length === 10 && multi.every(p => p.category === 'electronics'));
|
|
136
|
+
// ===================== SUPREME =====================
|
|
137
|
+
console.log('\n-- Filtros nivel supremo --');
|
|
138
|
+
// Rango: price >= 50 AND price <= 150
|
|
139
|
+
const range = await Product.where({ price: { $gte: 50, $lte: 150 } });
|
|
140
|
+
assert('rango: 50 <= price <= 150', range.every(p => p.price >= 50 && p.price <= 150));
|
|
141
|
+
assert('rango: count', range.length === 11); // 50,60,...,150
|
|
142
|
+
// Multi-campo + operadores: electronics + price > 80 + stock > 0
|
|
143
|
+
const complex = await Product.where({
|
|
144
|
+
category: 'electronics',
|
|
145
|
+
price: { $gt: 80 },
|
|
146
|
+
stock: { $gt: 0 },
|
|
147
|
+
});
|
|
148
|
+
assert('supremo: electronics + price>80 + stock>0', complex.every(p => p.category === 'electronics' && p.price > 80 && p.stock > 0));
|
|
149
|
+
// $ne null -> attribute_exists (campo existe)
|
|
150
|
+
const has_category = await Product.where({ category: { $ne: null } });
|
|
151
|
+
assert('$ne null: todos tienen category', has_category.length === 20);
|
|
152
|
+
// $include + rango
|
|
153
|
+
const sale_mid = await Product.where({
|
|
154
|
+
tags: { $include: 'sale' },
|
|
155
|
+
price: { $gte: 80, $lte: 120 },
|
|
156
|
+
});
|
|
157
|
+
assert('$include + rango', sale_mid.every(p => p.tags.includes('sale') && p.price >= 80 && p.price <= 120));
|
|
158
|
+
// Combinacion de todo: category + price range + active + tags
|
|
159
|
+
const ultimate = await Product.where({
|
|
160
|
+
category: 'electronics',
|
|
161
|
+
price: { $gte: 30, $lte: 90 },
|
|
162
|
+
active: true,
|
|
163
|
+
tags: { $include: 'sale' },
|
|
164
|
+
});
|
|
165
|
+
assert('ultimate: 4 condiciones combinadas', ultimate.every(p => p.category === 'electronics' &&
|
|
166
|
+
p.price >= 30 && p.price <= 90 &&
|
|
167
|
+
p.active === true &&
|
|
168
|
+
p.tags.includes('sale')));
|
|
169
|
+
// -- Paginacion --
|
|
170
|
+
console.log('\n-- Paginacion --');
|
|
171
|
+
const page1 = await Product.where({}, { limit: 5, order: { price: 'ASC' } });
|
|
172
|
+
assert('limit 5', page1.length === 5);
|
|
173
|
+
assert('order ASC', page1[0].price <= page1[4].price);
|
|
174
|
+
const page2 = await Product.where({}, { limit: 5, offset: 5, order: { price: 'ASC' } });
|
|
175
|
+
assert('offset 5 no repite', page2[0].price > page1[4].price);
|
|
176
|
+
const desc = await Product.where({}, { limit: 3, order: { price: 'DESC' } });
|
|
177
|
+
assert('order DESC', desc[0].price >= desc[2].price);
|
|
178
|
+
assert('DESC top = 200', desc[0].price === 200);
|
|
179
|
+
// -- Proyeccion --
|
|
180
|
+
console.log('\n-- Proyeccion --');
|
|
181
|
+
const projected = await Product.where({}, { attributes: ['name', 'price'], limit: 1 });
|
|
182
|
+
assert('attributes: tiene name', projected[0]?.name !== undefined);
|
|
183
|
+
assert('attributes: tiene price', projected[0]?.price !== undefined);
|
|
184
|
+
console.log(`\n Filters: ${passed} passed, ${failed} failed`);
|
|
185
|
+
return failed;
|
|
186
|
+
}
|
|
187
|
+
//# sourceMappingURL=filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../../src/test/filters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
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
|
+
(async function () {
|
|
9
|
+
try {
|
|
10
|
+
let total_failures = 0;
|
|
11
|
+
total_failures += await basic();
|
|
12
|
+
total_failures += await transactions();
|
|
13
|
+
total_failures += await relations();
|
|
14
|
+
total_failures += await filters();
|
|
15
|
+
total_failures += await bulk();
|
|
16
|
+
total_failures += await query_scan();
|
|
17
|
+
total_failures += await contracts();
|
|
18
|
+
console.log(`\n${'='.repeat(40)}`);
|
|
19
|
+
console.log(total_failures === 0
|
|
20
|
+
? ` ALL TESTS PASSED`
|
|
21
|
+
: ` ${total_failures} TOTAL FAILURES`);
|
|
22
|
+
console.log('='.repeat(40));
|
|
23
|
+
process.exit(total_failures > 0 ? 1 : 0);
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
console.error('\nFatal error:', error.message);
|
|
27
|
+
console.error(error.stack);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
})();
|
|
31
|
+
//# 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;AAEpC,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;QAEpC,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>;
|