edinburgh 0.1.2 → 0.3.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.
@@ -1,8 +1,8 @@
1
- import { DatabaseError } from "olmdb";
2
1
  import * as olmdb from "olmdb";
2
+ import { DatabaseError } from "olmdb";
3
3
  import { TypeWrapper, identifier } from "./types.js";
4
- import { TARGET_SYMBOL, PrimaryIndex } from "./indexes.js";
5
- import { assert, addErrorPath, logLevel } from "./utils.js";
4
+ import { PrimaryIndex } from "./indexes.js";
5
+ import { addErrorPath, logLevel, tryDelayedInits, delayedInits } from "./utils.js";
6
6
  /**
7
7
  * Create a field definition for a model property.
8
8
  *
@@ -29,59 +29,24 @@ export function field(type, options = {}) {
29
29
  return options;
30
30
  }
31
31
  // Model registration and initialization
32
- let uninitializedModels = new Set();
33
32
  export const modelRegistry = {};
34
33
  export function resetModelCaches() {
35
34
  for (const model of Object.values(modelRegistry)) {
36
- for (const index of model._indexes || []) {
35
+ for (const index of model._secondaries || []) {
37
36
  index._cachedIndexId = undefined;
38
37
  }
38
+ delete model._primary?._cachedIndexId;
39
39
  }
40
40
  }
41
41
  function isObjectEmpty(obj) {
42
- for (let key in obj) {
43
- if (obj.hasOwnProperty(key))
44
- return false;
42
+ for (let _ of Object.keys(obj)) {
43
+ return false;
45
44
  }
46
45
  return true;
47
46
  }
48
- let onSave;
49
- /**
50
- * Set a callback function to be called after a model is saved and committed.
51
- *
52
- * @param callback The callback function to set. As arguments, it receives the model instance, the new key (undefined in case of a delete), and the old key (undefined in case of a create).
53
- */
54
- export function setOnSaveCallback(callback) {
55
- onSave = callback;
56
- }
57
- const onSaveQueue = [];
58
- function onSaveRevert() {
59
- onSaveQueue.length = 0;
60
- }
61
- function onSaveCommit() {
62
- if (onSave) {
63
- for (let arr of onSaveQueue) {
64
- onSave(...arr);
65
- }
66
- }
67
- onSaveQueue.length = 0;
68
- }
69
- function queueOnSave(arr) {
70
- if (onSave) {
71
- if (!onSaveQueue.length) {
72
- olmdb.onCommit(onSaveCommit);
73
- olmdb.onRevert(onSaveRevert);
74
- }
75
- onSaveQueue.push(arr);
76
- }
77
- }
78
47
  /**
79
48
  * Register a model class with the Edinburgh ORM system.
80
49
  *
81
- * This decorator function transforms the model class to use a proxy-based constructor
82
- * that enables change tracking and automatic field initialization. It also extracts
83
- * field metadata and sets up default values on the prototype.
84
- *
85
50
  * @template T - The model class type.
86
51
  * @param MyModel - The model class to register.
87
52
  * @returns The enhanced model class with ORM capabilities.
@@ -104,16 +69,14 @@ export function registerModel(MyModel) {
104
69
  MockModel[name] = MyModel[name];
105
70
  }
106
71
  }
107
- // Initialize an empty `fields` object, and set it on both constructors, as well as on the prototype.
108
- MockModel.fields = MockModel.prototype._fields = {};
109
72
  MockModel.tableName ||= MyModel.name; // Set the table name to the class name if not already set
110
73
  // Register the constructor by name
111
74
  if (MockModel.tableName in modelRegistry)
112
75
  throw new DatabaseError(`Model with table name '${MockModel.tableName}' already registered`, 'INIT_ERROR');
113
76
  modelRegistry[MockModel.tableName] = MockModel;
114
77
  // Attempt to instantiate the class and gather field metadata
115
- uninitializedModels.add(MyModel);
116
- initModels();
78
+ delayedInits.add(MyModel);
79
+ tryDelayedInits();
117
80
  return MockModel;
118
81
  }
119
82
  export function getMockModel(OrgModel) {
@@ -122,16 +85,16 @@ export function getMockModel(OrgModel) {
122
85
  return OrgModel;
123
86
  if (AnyOrgModel._mock)
124
87
  return AnyOrgModel._mock;
88
+ const name = OrgModel.tableName || OrgModel.name;
125
89
  const MockModel = function (initial) {
126
- if (uninitializedModels.has(this.constructor)) {
90
+ if (delayedInits.has(this.constructor)) {
127
91
  throw new DatabaseError("Cannot instantiate while linked models haven't been registered yet", 'INIT_ERROR');
128
92
  }
129
93
  if (initial && !isObjectEmpty(initial)) {
130
94
  Object.assign(this, initial);
131
- const modifiedInstances = olmdb.getTransactionData(MODIFIED_INSTANCES_SYMBOL);
132
- modifiedInstances.add(this);
133
95
  }
134
- return new Proxy(this, modificationTracker);
96
+ const instances = olmdb.getTransactionData(INSTANCES_SYMBOL);
97
+ instances.add(this);
135
98
  };
136
99
  // We want .constructor to point at our fake constructor function.
137
100
  OrgModel.prototype.constructor = MockModel;
@@ -142,25 +105,88 @@ export function getMockModel(OrgModel) {
142
105
  AnyOrgModel._mock = MockModel;
143
106
  return MockModel;
144
107
  }
145
- function initModels() {
146
- for (const OrgModel of uninitializedModels) {
147
- const MockModel = getMockModel(OrgModel);
108
+ // Model base class and related symbols/state
109
+ const INIT_INSTANCE_SYMBOL = Symbol();
110
+ /** @internal Symbol used to attach modified instances to running transaction */
111
+ export const INSTANCES_SYMBOL = Symbol('instances');
112
+ /**
113
+ * Base class for all database models in the Edinburgh ORM.
114
+ *
115
+ * Models represent database entities with typed fields, automatic serialization,
116
+ * change tracking, and relationship management. All model classes should extend
117
+ * this base class and be decorated with `@registerModel`.
118
+ *
119
+ * @template SUB - The concrete model subclass (for proper typing).
120
+ *
121
+ * @example
122
+ * ```typescript
123
+ * ⁣@E.registerModel
124
+ * class User extends E.Model<User> {
125
+ * static pk = E.index(User, ["id"], "primary");
126
+ *
127
+ * id = E.field(E.identifier);
128
+ * name = E.field(E.string);
129
+ * email = E.field(E.string);
130
+ *
131
+ * static byEmail = E.index(User, "email", "unique");
132
+ * }
133
+ * ```
134
+ */
135
+ export class Model {
136
+ static _primary;
137
+ /** @internal All non-primary indexes for this model. */
138
+ static _secondaries;
139
+ /** The database table name (defaults to class name). */
140
+ static tableName;
141
+ /** Field configuration metadata. */
142
+ static fields;
143
+ /*
144
+ * IMPORTANT: We cannot use instance property initializers here, because we will be
145
+ * initializing the class through a fake constructor that will skip these. This is
146
+ * intentional, as we don't want to run the initializers for the fields.
147
+ */
148
+ /**
149
+ * @internal
150
+ * - !_oldValues: New instance, not yet saved.
151
+ * - _oldValues && _primaryKey: Loaded (possibly only partial, still lazy) from disk, _oldValues contains (partial) old values
152
+ */
153
+ _oldValues;
154
+ _primaryKey;
155
+ /**
156
+ * This property can be used in `setOnSave` callbacks to determine how a model instance has changed.
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;
166
+ constructor(initial = {}) {
167
+ // This constructor will only be called once, from `initModels`. All other instances will
168
+ // be created by the 'fake' constructor. The typing for `initial` *is* important though.
169
+ if (initial !== INIT_INSTANCE_SYMBOL) {
170
+ throw new DatabaseError("The model needs a @registerModel decorator", 'INIT_ERROR');
171
+ }
172
+ }
173
+ static _delayedInit() {
174
+ const MockModel = getMockModel(this);
148
175
  // Create an instance (the only one to ever exist) of the actual class,
149
176
  // in order to gather field config data.
150
177
  let instance;
151
178
  try {
152
- instance = new OrgModel(INIT_INSTANCE_SYMBOL);
179
+ instance = new this(INIT_INSTANCE_SYMBOL);
153
180
  }
154
181
  catch (e) {
155
182
  if (!(e instanceof ReferenceError))
156
183
  throw e;
157
184
  // ReferenceError: Cannot access 'SomeLinkedClass' before initialization.
158
185
  // We'll try again after the next class has successfully initialized.
159
- continue;
186
+ return false;
160
187
  }
161
- uninitializedModels.delete(OrgModel);
162
188
  // If no primary key exists, create one using 'id' field
163
- if (!MockModel._pk) {
189
+ if (!MockModel._primary) {
164
190
  // If no `id` field exists, add it automatically
165
191
  if (!instance.id) {
166
192
  instance.id = { type: identifier };
@@ -168,6 +194,7 @@ function initModels() {
168
194
  // @ts-ignore-next-line - `id` is not part of the type, but the user probably shouldn't touch it anyhow
169
195
  new PrimaryIndex(MockModel, ['id']);
170
196
  }
197
+ MockModel.fields = MockModel.prototype._fields = {};
171
198
  for (const key in instance) {
172
199
  const value = instance[key];
173
200
  // Check if this property contains field metadata
@@ -190,7 +217,8 @@ function initModels() {
190
217
  Object.defineProperty(this, key, {
191
218
  value: val,
192
219
  configurable: true,
193
- writable: true
220
+ writable: true,
221
+ enumerable: true,
194
222
  });
195
223
  },
196
224
  configurable: true,
@@ -202,103 +230,102 @@ function initModels() {
202
230
  }
203
231
  }
204
232
  if (logLevel >= 1) {
205
- console.log(`Registered model ${MockModel.tableName}[${MockModel._pk._fieldNames.join(',')}] with fields: ${Object.keys(MockModel.fields).join(' ')}`);
233
+ console.log(`Registered model ${MockModel.tableName} with fields: ${Object.keys(MockModel.fields).join(' ')}`);
206
234
  }
235
+ return true;
236
+ }
237
+ _setLoadedField(fieldName, value) {
238
+ const orgValues = this._oldValues ||= Object.create(Object.getPrototypeOf(this));
239
+ if (orgValues.hasOwnProperty(fieldName))
240
+ return; // Already loaded earlier (as part of index key?)
241
+ const fieldType = this._fields[fieldName].type;
242
+ this[fieldName] = value;
243
+ orgValues[fieldName] = fieldType.clone(value);
207
244
  }
208
- }
209
- // Model base class and related symbols/state
210
- const INIT_INSTANCE_SYMBOL = Symbol();
211
- /** @internal Symbol used to attach modified instances to running transaction */
212
- export const MODIFIED_INSTANCES_SYMBOL = Symbol('modifiedInstances');
213
- /**
214
- * Base class for all database models in the Edinburgh ORM.
215
- *
216
- * Models represent database entities with typed fields, automatic serialization,
217
- * change tracking, and relationship management. All model classes should extend
218
- * this base class and be decorated with `@registerModel`.
219
- *
220
- * @template SUB - The concrete model subclass (for proper typing).
221
- *
222
- * @example
223
- * ```typescript
224
- * ⁣@E.registerModel
225
- * class User extends E.Model<User> {
226
- * static pk = E.index(User, ["id"], "primary");
227
- *
228
- * id = E.field(E.identifier);
229
- * name = E.field(E.string);
230
- * email = E.field(E.string);
231
- *
232
- * static byEmail = E.index(User, "email", "unique");
233
- * }
234
- * ```
235
- */
236
- export class Model {
237
- /** @internal Primary key index for this model. */
238
- static _pk;
239
- /** @internal All indexes for this model, the primary key being first. */
240
- static _indexes;
241
- /** The database table name (defaults to class name). */
242
- static tableName;
243
- /** Field configuration metadata. */
244
- static fields;
245
- /*
246
- * IMPORTANT: We cannot use instance property initializers here, because we will be
247
- * initializing the class through a fake constructor that will skip these. This is
248
- * intentional, as we don't want to run the initializers for the fields.
249
- */
250
- /** @internal Field configuration for this instance. */
251
- _fields;
252
245
  /**
253
- * @internal State tracking for this model instance:
254
- * - undefined: new instance, unmodified
255
- * - 1: new instance, modified (and in modifiedInstances)
256
- * - 2: loaded from disk, unmodified
257
- * - 3: persistence disabled
258
- * - array: loaded from disk, modified (and in modifiedInstances), array values are original index buffers
246
+ * @returns The primary key for this instance, or undefined if not yet saved.
259
247
  */
260
- _state;
261
- constructor(initial = {}) {
262
- // This constructor will only be called once, from `initModels`. All other instances will
263
- // be created by the 'fake' constructor. The typing for `initial` *is* important though.
264
- if (initial !== INIT_INSTANCE_SYMBOL) {
265
- throw new DatabaseError("The model needs a @registerModel decorator", 'INIT_ERROR');
266
- }
248
+ getPrimaryKey() {
249
+ return this._primaryKey;
267
250
  }
268
- _save() {
269
- // For performance, we'll work on the unproxied object, as we know we don't require change tracking for save.
270
- const unproxiedModel = (this[TARGET_SYMBOL] || this);
271
- unproxiedModel.validate(true);
272
- // Handle unique indexes
273
- const indexes = this.constructor._indexes;
274
- const originalKeys = typeof unproxiedModel._state === 'object' ? unproxiedModel._state : undefined;
275
- const newPk = indexes[0]._save(unproxiedModel, originalKeys?.[0]);
276
- for (let i = 1; i < indexes.length; i++) {
277
- indexes[i]._save(unproxiedModel, originalKeys?.[i]);
278
- }
279
- queueOnSave([this, newPk, originalKeys?.[0]]);
280
- unproxiedModel._state = 2; // Loaded from disk, unmodified
251
+ _getCreatePrimaryKey() {
252
+ return this._primaryKey ||= this.constructor._primary._instanceToKeySingleton(this);
281
253
  }
282
- /**
283
- * Load a model instance by primary key.
284
- * @param args - Primary key field values.
285
- * @returns The model instance if found, undefined otherwise.
286
- *
287
- * @example
288
- * ```typescript
289
- * const user = User.load("user123");
290
- * const post = Post.load("post456", "en");
291
- * ```
292
- */
293
- static load(...args) {
294
- return this._pk.get(...args);
254
+ isLazyField(field) {
255
+ const descr = this.constructor._primary._lazyDescriptors[field];
256
+ return !!(descr && 'get' in descr && descr.get === Reflect.getOwnPropertyDescriptor(this, field)?.get);
257
+ }
258
+ _onCommit(onSaveQueue) {
259
+ const oldValues = this._oldValues;
260
+ let changed;
261
+ if (oldValues) {
262
+ // We're doing an update. Note that we may still be in a lazy state, and we don't want to load
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);
300
+ for (const index of this.constructor._secondaries || []) {
301
+ index._delete(this);
302
+ }
303
+ changed = "deleted";
304
+ }
305
+ else {
306
+ // New instance
307
+ // Raise any validation errors
308
+ this.validate(true);
309
+ // Make sure the primary key does not already exist
310
+ if (olmdb.get(this._getCreatePrimaryKey())) {
311
+ throw new DatabaseError("Unique constraint violation", "UNIQUE_CONSTRAINT");
312
+ }
313
+ // Insert the primary index
314
+ this.constructor._primary._write(this);
315
+ // Insert all secondaries
316
+ for (const index of this.constructor._secondaries || []) {
317
+ index._write(this);
318
+ }
319
+ changed = "created";
320
+ }
321
+ if (onSaveQueue) {
322
+ this.changed = changed;
323
+ onSaveQueue.push(this);
324
+ }
295
325
  }
296
326
  /**
297
327
  * Prevent this instance from being persisted to the database.
298
328
  *
299
- * Removes the instance from the modified instances set and disables
300
- * automatic persistence at transaction commit.
301
- *
302
329
  * @returns This model instance for chaining.
303
330
  *
304
331
  * @example
@@ -309,12 +336,19 @@ export class Model {
309
336
  * ```
310
337
  */
311
338
  preventPersist() {
312
- const modifiedInstances = olmdb.getTransactionData(MODIFIED_INSTANCES_SYMBOL);
313
- const unproxiedModel = this[TARGET_SYMBOL] || this;
314
- modifiedInstances.delete(unproxiedModel);
315
- unproxiedModel._state = 3; // no persist
339
+ const instances = olmdb.getTransactionData(INSTANCES_SYMBOL);
340
+ instances.delete(this);
316
341
  return this;
317
342
  }
343
+ /**
344
+ * Find all instances of this model in the database, ordered by primary key.
345
+ * @param opts - Optional parameters.
346
+ * @param opts.reverse - If true, iterate in reverse order.
347
+ * @returns An iterator.
348
+ */
349
+ static findAll(opts) {
350
+ return this._primary.find(opts);
351
+ }
318
352
  /**
319
353
  * Delete this model instance from the database.
320
354
  *
@@ -327,16 +361,9 @@ export class Model {
327
361
  * ```
328
362
  */
329
363
  delete() {
330
- const unproxiedModel = (this[TARGET_SYMBOL] || this);
331
- if (this._state === 2 || typeof this._state === 'object') {
332
- for (const index of unproxiedModel.constructor._indexes) {
333
- const key = index._getKeyFromModel(unproxiedModel, true);
334
- olmdb.del(key);
335
- if (index instanceof PrimaryIndex)
336
- queueOnSave([this, undefined, key]);
337
- }
338
- }
339
- this.preventPersist();
364
+ if (!this._primaryKey)
365
+ throw new DatabaseError("Cannot delete unsaved instance", "NOT_SAVED");
366
+ this._oldValues = undefined;
340
367
  }
341
368
  /**
342
369
  * Validate all fields in this model instance.
@@ -355,11 +382,12 @@ export class Model {
355
382
  validate(raise = false) {
356
383
  const errors = [];
357
384
  for (const [key, fieldConfig] of Object.entries(this._fields)) {
358
- for (const error of fieldConfig.type.getErrors(this, key)) {
359
- addErrorPath(error, key);
385
+ let e = fieldConfig.type.getError(this[key]);
386
+ if (e) {
387
+ e = addErrorPath(e, this.constructor.tableName + "." + key);
360
388
  if (raise)
361
- throw error;
362
- errors.push(error);
389
+ throw e;
390
+ errors.push(e);
363
391
  }
364
392
  }
365
393
  return errors;
@@ -378,80 +406,4 @@ export class Model {
378
406
  return this.validate().length === 0;
379
407
  }
380
408
  }
381
- // We use recursive proxies to track modifications made to, say, arrays within models. In
382
- // order to know which model a nested object belongs to, we maintain a WeakMap that maps
383
- // objects to their owner (unproxied) model.
384
- const modificationOwnerMap = new WeakMap();
385
- // A cache for the proxies around nested objects, so that we don't need to recreate them
386
- // every time we access a property on a nested object (and so that their identity remains
387
- // the same).
388
- const modificationProxyCache = new WeakMap();
389
- // Single proxy handler for both models and nested objects
390
- export const modificationTracker = {
391
- get(target, prop) {
392
- if (prop === TARGET_SYMBOL)
393
- return target;
394
- const value = target[prop];
395
- if (!value || typeof value !== 'object' || (value instanceof Model))
396
- return value;
397
- // Check cache first
398
- let proxy = modificationProxyCache.get(value);
399
- if (proxy)
400
- return proxy;
401
- let model;
402
- if (target instanceof Model) {
403
- if (!target._fields[prop]) {
404
- // No need to track properties that are not model fields.
405
- return value;
406
- }
407
- model = target;
408
- }
409
- else {
410
- model = modificationOwnerMap.get(target);
411
- assert(model);
412
- }
413
- let state = model._state;
414
- if (state !== undefined && state !== 2) {
415
- // We don't need to track changes for this model (anymore). So we can just return the unproxied object.
416
- // As we doing the modificationProxyCache lookup first, the identity of returned objects will not change:
417
- // once a proxied object is returned, the same property will always return a proxied object.
418
- return value;
419
- }
420
- if (modificationOwnerMap.get(value)) {
421
- throw new DatabaseError("Object cannot be embedded in multiple model instances", 'VALUE_ERROR');
422
- }
423
- modificationOwnerMap.set(value, model);
424
- proxy = new Proxy(value, modificationTracker);
425
- modificationProxyCache.set(value, proxy);
426
- return proxy;
427
- },
428
- set(target, prop, value) {
429
- let model;
430
- if (target instanceof Model) {
431
- model = target;
432
- if (!model._fields[prop]) {
433
- // No need to track properties that are not model fields.
434
- target[prop] = value;
435
- return true;
436
- }
437
- }
438
- else {
439
- model = modificationOwnerMap.get(target);
440
- assert(model);
441
- }
442
- let state = model._state;
443
- if (state === undefined || state === 2) {
444
- const modifiedInstances = olmdb.getTransactionData(MODIFIED_INSTANCES_SYMBOL);
445
- modifiedInstances.add(model);
446
- if (state === 2) {
447
- model._state = model.constructor._indexes.map(idx => idx._getKeyFromModel(model, true));
448
- }
449
- else {
450
- model._state = 1;
451
- }
452
- }
453
- target[prop] = value;
454
- return true;
455
- }
456
- };
457
409
  //# sourceMappingURL=models.js.map
@@ -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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"}