edinburgh 0.3.0 → 0.4.2
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/LICENSE +1 -1
- package/README.md +691 -212
- package/build/src/datapack.d.ts +22 -3
- package/build/src/datapack.js +105 -41
- package/build/src/datapack.js.map +1 -1
- package/build/src/edinburgh.d.ts +31 -13
- package/build/src/edinburgh.js +149 -62
- package/build/src/edinburgh.js.map +1 -1
- package/build/src/indexes.d.ts +78 -56
- package/build/src/indexes.js +519 -284
- package/build/src/indexes.js.map +1 -1
- package/build/src/migrate-cli.d.ts +20 -0
- package/build/src/migrate-cli.js +122 -0
- package/build/src/migrate-cli.js.map +1 -0
- package/build/src/migrate.d.ts +33 -0
- package/build/src/migrate.js +225 -0
- package/build/src/migrate.js.map +1 -0
- package/build/src/models.d.ts +130 -25
- package/build/src/models.js +271 -169
- package/build/src/models.js.map +1 -1
- package/build/src/types.d.ts +24 -7
- package/build/src/types.js +49 -15
- package/build/src/types.js.map +1 -1
- package/build/src/utils.d.ts +6 -10
- package/build/src/utils.js +26 -32
- package/build/src/utils.js.map +1 -1
- package/package.json +12 -10
- package/skill/SKILL.md +1349 -0
- package/src/datapack.ts +117 -46
- package/src/edinburgh.ts +156 -64
- package/src/indexes.ts +550 -287
- package/src/migrate-cli.ts +138 -0
- package/src/migrate.ts +267 -0
- package/src/models.ts +352 -184
- package/src/types.ts +59 -16
- package/src/utils.ts +32 -32
package/build/src/models.js
CHANGED
|
@@ -1,8 +1,26 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
1
|
+
import { DatabaseError } from "olmdb/lowlevel";
|
|
2
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
3
3
|
import { TypeWrapper, identifier } from "./types.js";
|
|
4
|
+
import { scheduleInit } from "./edinburgh.js";
|
|
5
|
+
export const txnStorage = new AsyncLocalStorage();
|
|
6
|
+
const PREVENT_PERSIST_DESCRIPTOR = {
|
|
7
|
+
get() {
|
|
8
|
+
throw new DatabaseError("Operation not allowed after preventPersist()", "NO_PERSIST");
|
|
9
|
+
},
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* Returns the current transaction from AsyncLocalStorage.
|
|
13
|
+
* Throws if called outside a transact() callback.
|
|
14
|
+
* @internal
|
|
15
|
+
*/
|
|
16
|
+
export function currentTxn() {
|
|
17
|
+
const txn = txnStorage.getStore();
|
|
18
|
+
if (!txn)
|
|
19
|
+
throw new DatabaseError("No active transaction. Operations must be performed within a transact() callback.", 'NO_TRANSACTION');
|
|
20
|
+
return txn;
|
|
21
|
+
}
|
|
4
22
|
import { PrimaryIndex } from "./indexes.js";
|
|
5
|
-
import { addErrorPath, logLevel,
|
|
23
|
+
import { addErrorPath, logLevel, dbGet, hashBytes } from "./utils.js";
|
|
6
24
|
/**
|
|
7
25
|
* Create a field definition for a model property.
|
|
8
26
|
*
|
|
@@ -30,14 +48,6 @@ export function field(type, options = {}) {
|
|
|
30
48
|
}
|
|
31
49
|
// Model registration and initialization
|
|
32
50
|
export const modelRegistry = {};
|
|
33
|
-
export function resetModelCaches() {
|
|
34
|
-
for (const model of Object.values(modelRegistry)) {
|
|
35
|
-
for (const index of model._secondaries || []) {
|
|
36
|
-
index._cachedIndexId = undefined;
|
|
37
|
-
}
|
|
38
|
-
delete model._primary?._cachedIndexId;
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
51
|
function isObjectEmpty(obj) {
|
|
42
52
|
for (let _ of Object.keys(obj)) {
|
|
43
53
|
return false;
|
|
@@ -65,18 +75,19 @@ export function registerModel(MyModel) {
|
|
|
65
75
|
const MockModel = getMockModel(MyModel);
|
|
66
76
|
// Copy own static methods/properties
|
|
67
77
|
for (const name of Object.getOwnPropertyNames(MyModel)) {
|
|
68
|
-
if (name !== 'length' && name !== 'prototype' && name !== 'name' && name !== 'mock') {
|
|
78
|
+
if (name !== 'length' && name !== 'prototype' && name !== 'name' && name !== 'mock' && name !== 'override') {
|
|
69
79
|
MockModel[name] = MyModel[name];
|
|
70
80
|
}
|
|
71
81
|
}
|
|
72
|
-
MockModel.tableName ||= MyModel.name;
|
|
82
|
+
MockModel.tableName ||= MyModel.name;
|
|
73
83
|
// Register the constructor by name
|
|
74
|
-
if (MockModel.tableName in modelRegistry)
|
|
75
|
-
|
|
84
|
+
if (MockModel.tableName in modelRegistry) {
|
|
85
|
+
if (!MyModel.override) {
|
|
86
|
+
throw new DatabaseError(`Model with table name '${MockModel.tableName}' already registered`, 'INIT_ERROR');
|
|
87
|
+
}
|
|
88
|
+
delete modelRegistry[MockModel.tableName];
|
|
89
|
+
}
|
|
76
90
|
modelRegistry[MockModel.tableName] = MockModel;
|
|
77
|
-
// Attempt to instantiate the class and gather field metadata
|
|
78
|
-
delayedInits.add(MyModel);
|
|
79
|
-
tryDelayedInits();
|
|
80
91
|
return MockModel;
|
|
81
92
|
}
|
|
82
93
|
export function getMockModel(OrgModel) {
|
|
@@ -85,16 +96,14 @@ export function getMockModel(OrgModel) {
|
|
|
85
96
|
return OrgModel;
|
|
86
97
|
if (AnyOrgModel._mock)
|
|
87
98
|
return AnyOrgModel._mock;
|
|
88
|
-
const
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
if (initial
|
|
99
|
+
const MockModel = function (initial, txn = currentTxn()) {
|
|
100
|
+
// This constructor should only be called when the user does 'new Model'. We'll bypass this when
|
|
101
|
+
// loading objects. Add to 'instances', so the object will be saved.
|
|
102
|
+
this._txn = txn;
|
|
103
|
+
txn.instances.add(this);
|
|
104
|
+
if (initial) {
|
|
94
105
|
Object.assign(this, initial);
|
|
95
106
|
}
|
|
96
|
-
const instances = olmdb.getTransactionData(INSTANCES_SYMBOL);
|
|
97
|
-
instances.add(this);
|
|
98
107
|
};
|
|
99
108
|
// We want .constructor to point at our fake constructor function.
|
|
100
109
|
OrgModel.prototype.constructor = MockModel;
|
|
@@ -102,13 +111,13 @@ export function getMockModel(OrgModel) {
|
|
|
102
111
|
Object.setPrototypeOf(MockModel, Object.getPrototypeOf(OrgModel));
|
|
103
112
|
MockModel.prototype = OrgModel.prototype;
|
|
104
113
|
MockModel._isMock = true;
|
|
114
|
+
MockModel._original = OrgModel;
|
|
105
115
|
AnyOrgModel._mock = MockModel;
|
|
116
|
+
scheduleInit();
|
|
106
117
|
return MockModel;
|
|
107
118
|
}
|
|
108
119
|
// Model base class and related symbols/state
|
|
109
120
|
const INIT_INSTANCE_SYMBOL = Symbol();
|
|
110
|
-
/** @internal Symbol used to attach modified instances to running transaction */
|
|
111
|
-
export const INSTANCES_SYMBOL = Symbol('instances');
|
|
112
121
|
/**
|
|
113
122
|
* Base class for all database models in the Edinburgh ORM.
|
|
114
123
|
*
|
|
@@ -116,19 +125,49 @@ export const INSTANCES_SYMBOL = Symbol('instances');
|
|
|
116
125
|
* change tracking, and relationship management. All model classes should extend
|
|
117
126
|
* this base class and be decorated with `@registerModel`.
|
|
118
127
|
*
|
|
128
|
+
* ### Schema Evolution
|
|
129
|
+
*
|
|
130
|
+
* Edinburgh tracks the schema version of each model automatically. When you add, remove, or
|
|
131
|
+
* change the types of fields, or add/remove indexes, Edinburgh detects the new schema version.
|
|
132
|
+
*
|
|
133
|
+
* **Lazy migration:** Changes to non-key field values are migrated lazily, when a row with an
|
|
134
|
+
* old schema version is read from disk, it is deserialized using the old schema and optionally
|
|
135
|
+
* transformed by the static `migrate()` function. This happens transparently on every read
|
|
136
|
+
* and requires no downtime or batch processing.
|
|
137
|
+
*
|
|
138
|
+
* **Batch migration (via `npx migrate-edinburgh` or `runMigration()`):** Certain schema changes
|
|
139
|
+
* require an explicit migration run:
|
|
140
|
+
* - Adding or removing secondary/unique indexes
|
|
141
|
+
* - Changing the fields or types of an existing index
|
|
142
|
+
* - A `migrate()` function that changes values used in secondary index fields
|
|
143
|
+
*
|
|
144
|
+
* The batch migration tool populates new indexes, deletes orphaned ones, and updates index
|
|
145
|
+
* entries whose values were changed by `migrate()`. It does *not* rewrite primary data rows
|
|
146
|
+
* (lazy migration handles that).
|
|
147
|
+
*
|
|
148
|
+
* ### Lifecycle Hooks
|
|
149
|
+
*
|
|
150
|
+
* - **`static migrate(record)`**: Called when deserializing rows written with an older schema
|
|
151
|
+
* version. Receives a plain record object; mutate it in-place to match the current schema.
|
|
152
|
+
* See {@link Model.migrate}.
|
|
153
|
+
*
|
|
154
|
+
* - **`preCommit()`**: Called on each modified instance right before the transaction commits.
|
|
155
|
+
* Useful for computing derived fields, enforcing cross-field invariants, or creating related
|
|
156
|
+
* instances. See {@link Model.preCommit}.
|
|
157
|
+
*
|
|
119
158
|
* @template SUB - The concrete model subclass (for proper typing).
|
|
120
159
|
*
|
|
121
160
|
* @example
|
|
122
161
|
* ```typescript
|
|
123
162
|
* @E.registerModel
|
|
124
163
|
* class User extends E.Model<User> {
|
|
125
|
-
* static pk = E.
|
|
164
|
+
* static pk = E.primary(User, "id");
|
|
126
165
|
*
|
|
127
166
|
* id = E.field(E.identifier);
|
|
128
167
|
* name = E.field(E.string);
|
|
129
168
|
* email = E.field(E.string);
|
|
130
169
|
*
|
|
131
|
-
* static byEmail = E.
|
|
170
|
+
* static byEmail = E.unique(User, "email");
|
|
132
171
|
* }
|
|
133
172
|
* ```
|
|
134
173
|
*/
|
|
@@ -138,6 +177,8 @@ export class Model {
|
|
|
138
177
|
static _secondaries;
|
|
139
178
|
/** The database table name (defaults to class name). */
|
|
140
179
|
static tableName;
|
|
180
|
+
/** When true, registerModel replaces an existing model with the same tableName. */
|
|
181
|
+
static override;
|
|
141
182
|
/** Field configuration metadata. */
|
|
142
183
|
static fields;
|
|
143
184
|
/*
|
|
@@ -147,181 +188,191 @@ export class Model {
|
|
|
147
188
|
*/
|
|
148
189
|
/**
|
|
149
190
|
* @internal
|
|
150
|
-
* -
|
|
151
|
-
* - _oldValues
|
|
191
|
+
* - _oldValues===undefined: New instance, not yet saved.
|
|
192
|
+
* - _oldValues===null: Instance is to be deleted.
|
|
193
|
+
* - _oldValues is an object: Loaded (possibly only partial, still lazy) from disk, _oldValues contains (partial) old values
|
|
152
194
|
*/
|
|
153
195
|
_oldValues;
|
|
154
196
|
_primaryKey;
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
* If the value is undefined, the instance has been created. If it's "deleted" the instance has
|
|
158
|
-
* been deleted. If its an object, the instance has been modified and the object contains the old values.
|
|
159
|
-
*
|
|
160
|
-
* Note: this property should **not** be accessed *during* a `transact()` -- it's state is an implementation
|
|
161
|
-
* detail that may change semantics at any minor release.
|
|
162
|
-
*/
|
|
163
|
-
changed;
|
|
164
|
-
// Reference the static `fields` property; the mock constructor copies it here for performance
|
|
165
|
-
_fields;
|
|
197
|
+
_primaryKeyHash;
|
|
198
|
+
_txn;
|
|
166
199
|
constructor(initial = {}) {
|
|
167
200
|
// This constructor will only be called once, from `initModels`. All other instances will
|
|
168
201
|
// be created by the 'fake' constructor. The typing for `initial` *is* important though.
|
|
169
|
-
if (initial
|
|
170
|
-
|
|
171
|
-
|
|
202
|
+
if (initial === INIT_INSTANCE_SYMBOL)
|
|
203
|
+
return;
|
|
204
|
+
throw new DatabaseError("The model needs a @registerModel decorator", 'INIT_ERROR');
|
|
172
205
|
}
|
|
173
|
-
static _delayedInit() {
|
|
206
|
+
static async _delayedInit(cleared) {
|
|
174
207
|
const MockModel = getMockModel(this);
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
}
|
|
181
|
-
catch (e) {
|
|
182
|
-
if (!(e instanceof ReferenceError))
|
|
183
|
-
throw e;
|
|
184
|
-
// ReferenceError: Cannot access 'SomeLinkedClass' before initialization.
|
|
185
|
-
// We'll try again after the next class has successfully initialized.
|
|
186
|
-
return false;
|
|
208
|
+
if (cleared) {
|
|
209
|
+
MockModel._primary._indexId = undefined;
|
|
210
|
+
MockModel._primary._versions.clear();
|
|
211
|
+
for (const sec of MockModel._secondaries || [])
|
|
212
|
+
sec._indexId = undefined;
|
|
187
213
|
}
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
}
|
|
197
|
-
MockModel.fields = MockModel.prototype._fields = {};
|
|
198
|
-
for (const key in instance) {
|
|
199
|
-
const value = instance[key];
|
|
200
|
-
// Check if this property contains field metadata
|
|
201
|
-
if (value && value.type instanceof TypeWrapper) {
|
|
202
|
-
// Set the configuration on the constructor's `fields` property
|
|
203
|
-
MockModel.fields[key] = value;
|
|
204
|
-
// Set default value on the prototype
|
|
205
|
-
const defObj = value.default === undefined ? value.type : value;
|
|
206
|
-
const def = defObj.default;
|
|
207
|
-
if (typeof def === 'function') {
|
|
208
|
-
// The default is a function. We'll define a getter on the property in the model prototype,
|
|
209
|
-
// and once it is read, we'll run the function and set the value as a plain old property
|
|
210
|
-
// on the instance object.
|
|
211
|
-
Object.defineProperty(MockModel.prototype, key, {
|
|
212
|
-
get() {
|
|
213
|
-
// This will call set(), which will define the property on the instance.
|
|
214
|
-
return (this[key] = def.call(defObj, this));
|
|
215
|
-
},
|
|
216
|
-
set(val) {
|
|
217
|
-
Object.defineProperty(this, key, {
|
|
218
|
-
value: val,
|
|
219
|
-
configurable: true,
|
|
220
|
-
writable: true,
|
|
221
|
-
enumerable: true,
|
|
222
|
-
});
|
|
223
|
-
},
|
|
224
|
-
configurable: true,
|
|
225
|
-
});
|
|
214
|
+
if (!MockModel.fields) {
|
|
215
|
+
// First-time init: gather field configs from a temporary instance of the original class.
|
|
216
|
+
const OrgModel = MockModel._original || this;
|
|
217
|
+
const instance = new OrgModel(INIT_INSTANCE_SYMBOL);
|
|
218
|
+
// If no primary key exists, create one using 'id' field
|
|
219
|
+
if (!MockModel._primary) {
|
|
220
|
+
if (!instance.id) {
|
|
221
|
+
instance.id = { type: identifier };
|
|
226
222
|
}
|
|
227
|
-
|
|
228
|
-
|
|
223
|
+
// @ts-ignore-next-line - `id` is not part of the type, but the user probably shouldn't touch it anyhow
|
|
224
|
+
new PrimaryIndex(MockModel, ['id']);
|
|
225
|
+
}
|
|
226
|
+
MockModel.fields = {};
|
|
227
|
+
for (const key in instance) {
|
|
228
|
+
const value = instance[key];
|
|
229
|
+
// Check if this property contains field metadata
|
|
230
|
+
if (value && value.type instanceof TypeWrapper) {
|
|
231
|
+
// Set the configuration on the constructor's `fields` property
|
|
232
|
+
MockModel.fields[key] = value;
|
|
233
|
+
// Set default value on the prototype
|
|
234
|
+
const defObj = value.default === undefined ? value.type : value;
|
|
235
|
+
const def = defObj.default;
|
|
236
|
+
if (typeof def === 'function') {
|
|
237
|
+
// The default is a function. We'll define a getter on the property in the model prototype,
|
|
238
|
+
// and once it is read, we'll run the function and set the value as a plain old property
|
|
239
|
+
// on the instance object.
|
|
240
|
+
Object.defineProperty(MockModel.prototype, key, {
|
|
241
|
+
get() {
|
|
242
|
+
// This will call set(), which will define the property on the instance.
|
|
243
|
+
return (this[key] = def.call(defObj, this));
|
|
244
|
+
},
|
|
245
|
+
set(val) {
|
|
246
|
+
Object.defineProperty(this, key, {
|
|
247
|
+
value: val,
|
|
248
|
+
configurable: true,
|
|
249
|
+
writable: true,
|
|
250
|
+
enumerable: true,
|
|
251
|
+
});
|
|
252
|
+
},
|
|
253
|
+
configurable: true,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
else if (def !== undefined) {
|
|
257
|
+
MockModel.prototype[key] = def;
|
|
258
|
+
}
|
|
229
259
|
}
|
|
230
260
|
}
|
|
261
|
+
if (logLevel >= 1) {
|
|
262
|
+
console.log(`[edinburgh] Registered model ${MockModel.tableName} with fields: ${Object.keys(MockModel.fields).join(' ')}`);
|
|
263
|
+
}
|
|
231
264
|
}
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
265
|
+
// Always run index inits (idempotent, skip if already initialized)
|
|
266
|
+
await MockModel._primary._delayedInit();
|
|
267
|
+
for (const sec of MockModel._secondaries || [])
|
|
268
|
+
await sec._delayedInit();
|
|
269
|
+
await MockModel._primary._initVersioning();
|
|
236
270
|
}
|
|
237
271
|
_setLoadedField(fieldName, value) {
|
|
238
|
-
const
|
|
239
|
-
if (
|
|
272
|
+
const oldValues = this._oldValues;
|
|
273
|
+
if (oldValues.hasOwnProperty(fieldName))
|
|
240
274
|
return; // Already loaded earlier (as part of index key?)
|
|
241
|
-
const fieldType = this._fields[fieldName].type;
|
|
242
275
|
this[fieldName] = value;
|
|
243
|
-
|
|
276
|
+
if (typeof value === 'object' && value !== null) {
|
|
277
|
+
const fieldType = this.constructor.fields[fieldName].type;
|
|
278
|
+
oldValues[fieldName] = fieldType.clone(value);
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
// This path is just an optimization
|
|
282
|
+
oldValues[fieldName] = value;
|
|
283
|
+
}
|
|
244
284
|
}
|
|
245
285
|
/**
|
|
246
|
-
* @returns The primary key for this instance
|
|
286
|
+
* @returns The primary key for this instance.
|
|
247
287
|
*/
|
|
248
288
|
getPrimaryKey() {
|
|
249
|
-
|
|
289
|
+
let key = this._primaryKey;
|
|
290
|
+
if (key === undefined) {
|
|
291
|
+
key = this.constructor._primary._serializeKeyFields(this).toUint8Array();
|
|
292
|
+
this._setPrimaryKey(key);
|
|
293
|
+
}
|
|
294
|
+
return key;
|
|
295
|
+
}
|
|
296
|
+
_setPrimaryKey(key, hash) {
|
|
297
|
+
this._primaryKey = key;
|
|
298
|
+
this._primaryKeyHash = hash ?? hashBytes(key);
|
|
299
|
+
Object.defineProperties(this, this.constructor._primary._freezePrimaryKeyDescriptors);
|
|
250
300
|
}
|
|
251
|
-
|
|
252
|
-
|
|
301
|
+
/**
|
|
302
|
+
* @returns A 53-bit positive integer non-cryptographic hash of the primary key, or undefined if not yet saved.
|
|
303
|
+
*/
|
|
304
|
+
getPrimaryKeyHash() {
|
|
305
|
+
if (this._primaryKeyHash === undefined)
|
|
306
|
+
this.getPrimaryKey();
|
|
307
|
+
return this._primaryKeyHash;
|
|
253
308
|
}
|
|
254
309
|
isLazyField(field) {
|
|
255
310
|
const descr = this.constructor._primary._lazyDescriptors[field];
|
|
256
311
|
return !!(descr && 'get' in descr && descr.get === Reflect.getOwnPropertyDescriptor(this, field)?.get);
|
|
257
312
|
}
|
|
258
|
-
|
|
313
|
+
_write(txn) {
|
|
259
314
|
const oldValues = this._oldValues;
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
// the whole object just to see if something changed.
|
|
264
|
-
// Delete all items from this.changed that have not actually changed.
|
|
265
|
-
const fields = this._fields;
|
|
266
|
-
changed = {};
|
|
267
|
-
for (const fieldName of Object.keys(oldValues)) {
|
|
268
|
-
const oldValue = oldValues[fieldName];
|
|
269
|
-
if (!fields[fieldName].type.equals(this[fieldName], oldValue)) {
|
|
270
|
-
changed[fieldName] = oldValue;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
if (isObjectEmpty(changed))
|
|
274
|
-
return; // No changes, nothing to do
|
|
275
|
-
// Make sure primary has not been changed
|
|
276
|
-
for (const field of this.constructor._primary._fieldTypes.keys()) {
|
|
277
|
-
if (changed.hasOwnProperty(field)) {
|
|
278
|
-
throw new DatabaseError(`Cannot modify primary key field: ${field}`, "CHANGE_PRIMARY");
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
// We have changes. Now it's okay for any lazy fields to be loaded (which the validate will trigger).
|
|
282
|
-
// Raise any validation errors
|
|
283
|
-
this.validate(true);
|
|
284
|
-
// Update the primary index
|
|
285
|
-
this.constructor._primary._write(this);
|
|
286
|
-
// Update any secondaries with changed fields
|
|
287
|
-
for (const index of this.constructor._secondaries || []) {
|
|
288
|
-
for (const field of index._fieldTypes.keys()) {
|
|
289
|
-
if (changed.hasOwnProperty(field)) {
|
|
290
|
-
// We need to update this index - first delete the old one
|
|
291
|
-
index._delete(oldValues);
|
|
292
|
-
index._write(this);
|
|
293
|
-
break;
|
|
294
|
-
}
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
else if (this._primaryKey) { // Deleted instance
|
|
299
|
-
this.constructor._primary._delete(this);
|
|
315
|
+
if (oldValues === null) { // Delete instance
|
|
316
|
+
const pk = this._primaryKey;
|
|
317
|
+
this.constructor._primary._delete(txn, pk, this);
|
|
300
318
|
for (const index of this.constructor._secondaries || []) {
|
|
301
|
-
index._delete(this);
|
|
319
|
+
index._delete(txn, pk, this);
|
|
302
320
|
}
|
|
303
|
-
|
|
321
|
+
return "deleted";
|
|
304
322
|
}
|
|
305
|
-
|
|
306
|
-
// New instance
|
|
307
|
-
// Raise any validation errors
|
|
323
|
+
if (oldValues === undefined) { // Create instance
|
|
308
324
|
this.validate(true);
|
|
309
325
|
// Make sure the primary key does not already exist
|
|
310
|
-
|
|
326
|
+
const pk = this.getPrimaryKey();
|
|
327
|
+
if (dbGet(txn.id, pk)) {
|
|
311
328
|
throw new DatabaseError("Unique constraint violation", "UNIQUE_CONSTRAINT");
|
|
312
329
|
}
|
|
313
330
|
// Insert the primary index
|
|
314
|
-
this.constructor._primary._write(this);
|
|
331
|
+
this.constructor._primary._write(txn, pk, this);
|
|
315
332
|
// Insert all secondaries
|
|
316
333
|
for (const index of this.constructor._secondaries || []) {
|
|
317
|
-
index._write(this);
|
|
334
|
+
index._write(txn, pk, this);
|
|
335
|
+
}
|
|
336
|
+
return "created";
|
|
337
|
+
}
|
|
338
|
+
// oldValues is an object.
|
|
339
|
+
// We're doing an update. Note that we may still be in a lazy state, and we don't want to load
|
|
340
|
+
// the whole object just to see if something changed.
|
|
341
|
+
// Add old values of changed fields to 'changed'.
|
|
342
|
+
const fields = this.constructor.fields;
|
|
343
|
+
let changed = {};
|
|
344
|
+
for (const fieldName in oldValues) {
|
|
345
|
+
const oldValue = oldValues[fieldName];
|
|
346
|
+
const newValue = this[fieldName];
|
|
347
|
+
if (newValue !== oldValue && !fields[fieldName].type.equals(newValue, oldValue)) {
|
|
348
|
+
changed[fieldName] = oldValue;
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
if (isObjectEmpty(changed))
|
|
352
|
+
return; // No changes, nothing to do
|
|
353
|
+
// Make sure primary has not been changed
|
|
354
|
+
for (const field of this.constructor._primary._fieldTypes.keys()) {
|
|
355
|
+
if (changed.hasOwnProperty(field)) {
|
|
356
|
+
throw new DatabaseError(`Cannot modify primary key field: ${field}`, "CHANGE_PRIMARY");
|
|
318
357
|
}
|
|
319
|
-
changed = "created";
|
|
320
358
|
}
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
359
|
+
// We have changes. Now it's okay for any lazy fields to be loaded (which the validate will trigger).
|
|
360
|
+
// Raise any validation errors
|
|
361
|
+
this.validate(true);
|
|
362
|
+
// Update the primary index
|
|
363
|
+
const pk = this._primaryKey;
|
|
364
|
+
this.constructor._primary._write(txn, pk, this);
|
|
365
|
+
// Update any secondaries with changed fields
|
|
366
|
+
for (const index of this.constructor._secondaries || []) {
|
|
367
|
+
for (const field of index._fieldTypes.keys()) {
|
|
368
|
+
if (changed.hasOwnProperty(field)) {
|
|
369
|
+
index._delete(txn, pk, oldValues);
|
|
370
|
+
index._write(txn, pk, this);
|
|
371
|
+
break;
|
|
372
|
+
}
|
|
373
|
+
}
|
|
324
374
|
}
|
|
375
|
+
return changed;
|
|
325
376
|
}
|
|
326
377
|
/**
|
|
327
378
|
* Prevent this instance from being persisted to the database.
|
|
@@ -336,8 +387,9 @@ export class Model {
|
|
|
336
387
|
* ```
|
|
337
388
|
*/
|
|
338
389
|
preventPersist() {
|
|
339
|
-
|
|
340
|
-
|
|
390
|
+
this._txn.instances.delete(this);
|
|
391
|
+
// Have access to '_txn' throw a descriptive error:
|
|
392
|
+
Object.defineProperty(this, "_txn", PREVENT_PERSIST_DESCRIPTOR);
|
|
341
393
|
return this;
|
|
342
394
|
}
|
|
343
395
|
/**
|
|
@@ -349,6 +401,36 @@ export class Model {
|
|
|
349
401
|
static findAll(opts) {
|
|
350
402
|
return this._primary.find(opts);
|
|
351
403
|
}
|
|
404
|
+
/**
|
|
405
|
+
* Load an existing instance by primary key and update it, or create a new one.
|
|
406
|
+
*
|
|
407
|
+
* The provided object must contain all primary key fields. If a matching row exists,
|
|
408
|
+
* the remaining properties from `obj` are set on the loaded instance. Otherwise a
|
|
409
|
+
* new instance is created with `obj` as its initial properties.
|
|
410
|
+
*
|
|
411
|
+
* @param obj - Partial model data that **must** include every primary key field.
|
|
412
|
+
* @returns The loaded-and-updated or newly created instance.
|
|
413
|
+
*/
|
|
414
|
+
static replaceInto(obj) {
|
|
415
|
+
const pk = this._primary;
|
|
416
|
+
const keyArgs = [];
|
|
417
|
+
for (const fieldName of pk._fieldTypes.keys()) {
|
|
418
|
+
if (!(fieldName in obj)) {
|
|
419
|
+
throw new DatabaseError(`replaceInto: missing primary key field '${fieldName}'`, "MISSING_PRIMARY_KEY");
|
|
420
|
+
}
|
|
421
|
+
keyArgs.push(obj[fieldName]);
|
|
422
|
+
}
|
|
423
|
+
const existing = pk.get(...keyArgs);
|
|
424
|
+
if (existing) {
|
|
425
|
+
for (const key in obj) {
|
|
426
|
+
if (!pk._fieldTypes.has(key)) {
|
|
427
|
+
existing[key] = obj[key];
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
return existing;
|
|
431
|
+
}
|
|
432
|
+
return new this(obj);
|
|
433
|
+
}
|
|
352
434
|
/**
|
|
353
435
|
* Delete this model instance from the database.
|
|
354
436
|
*
|
|
@@ -361,9 +443,9 @@ export class Model {
|
|
|
361
443
|
* ```
|
|
362
444
|
*/
|
|
363
445
|
delete() {
|
|
364
|
-
if (
|
|
446
|
+
if (this._oldValues === undefined)
|
|
365
447
|
throw new DatabaseError("Cannot delete unsaved instance", "NOT_SAVED");
|
|
366
|
-
this._oldValues =
|
|
448
|
+
this._oldValues = null;
|
|
367
449
|
}
|
|
368
450
|
/**
|
|
369
451
|
* Validate all fields in this model instance.
|
|
@@ -381,7 +463,7 @@ export class Model {
|
|
|
381
463
|
*/
|
|
382
464
|
validate(raise = false) {
|
|
383
465
|
const errors = [];
|
|
384
|
-
for (const [key, fieldConfig] of Object.entries(this.
|
|
466
|
+
for (const [key, fieldConfig] of Object.entries(this.constructor.fields)) {
|
|
385
467
|
let e = fieldConfig.type.getError(this[key]);
|
|
386
468
|
if (e) {
|
|
387
469
|
e = addErrorPath(e, this.constructor.tableName + "." + key);
|
|
@@ -405,5 +487,25 @@ export class Model {
|
|
|
405
487
|
isValid() {
|
|
406
488
|
return this.validate().length === 0;
|
|
407
489
|
}
|
|
490
|
+
getState() {
|
|
491
|
+
if (this._oldValues === null)
|
|
492
|
+
return "deleted";
|
|
493
|
+
if (this._oldValues === undefined)
|
|
494
|
+
return "created";
|
|
495
|
+
for (const [key, descr] of Object.entries(this.constructor._primary._lazyDescriptors)) {
|
|
496
|
+
if (descr && 'get' in descr && descr.get === Reflect.getOwnPropertyDescriptor(this, key)?.get) {
|
|
497
|
+
return "lazy";
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
return "loaded";
|
|
501
|
+
}
|
|
502
|
+
toString() {
|
|
503
|
+
const primary = this.constructor._primary;
|
|
504
|
+
const pk = primary._keyToArray(this._primaryKey || primary._serializeKeyFields(this).toUint8Array(false));
|
|
505
|
+
return `{Model:${this.constructor.tableName} ${this.getState()} ${pk}}`;
|
|
506
|
+
}
|
|
507
|
+
[Symbol.for('nodejs.util.inspect.custom')]() {
|
|
508
|
+
return this.toString();
|
|
509
|
+
}
|
|
408
510
|
}
|
|
409
511
|
//# sourceMappingURL=models.js.map
|
package/build/src/models.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/models.ts"],"names":[],"mappings":"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"}
|