edinburgh 0.4.5 → 0.5.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 (53) hide show
  1. package/README.md +268 -374
  2. package/build/src/datapack.js +1 -1
  3. package/build/src/datapack.js.map +1 -1
  4. package/build/src/edinburgh.d.ts +5 -5
  5. package/build/src/edinburgh.js +8 -7
  6. package/build/src/edinburgh.js.map +1 -1
  7. package/build/src/indexes.d.ts +46 -116
  8. package/build/src/indexes.js +148 -180
  9. package/build/src/indexes.js.map +1 -1
  10. package/build/src/migrate.js +11 -31
  11. package/build/src/migrate.js.map +1 -1
  12. package/build/src/models.d.ts +74 -49
  13. package/build/src/models.js +112 -165
  14. package/build/src/models.js.map +1 -1
  15. package/build/src/types.d.ts +30 -21
  16. package/build/src/types.js +16 -30
  17. package/build/src/types.js.map +1 -1
  18. package/package.json +1 -3
  19. package/skill/BaseIndex_batchProcess.md +1 -1
  20. package/skill/BaseIndex_find.md +2 -2
  21. package/skill/BaseIndex_find_2.md +7 -0
  22. package/skill/BaseIndex_find_3.md +7 -0
  23. package/skill/BaseIndex_find_4.md +7 -0
  24. package/skill/Model.md +5 -7
  25. package/skill/Model_batchProcess.md +8 -0
  26. package/skill/Model_delete.md +1 -1
  27. package/skill/Model_migrate.md +2 -4
  28. package/skill/Model_preCommit.md +2 -4
  29. package/skill/Model_preventPersist.md +1 -1
  30. package/skill/Model_replaceInto.md +2 -2
  31. package/skill/NonPrimaryIndex.md +10 -0
  32. package/skill/SKILL.md +146 -144
  33. package/skill/SecondaryIndex.md +2 -2
  34. package/skill/UniqueIndex.md +2 -2
  35. package/skill/defineModel.md +22 -0
  36. package/skill/field.md +2 -2
  37. package/skill/link.md +11 -9
  38. package/skill/transact.md +2 -2
  39. package/src/datapack.ts +1 -1
  40. package/src/edinburgh.ts +8 -9
  41. package/src/indexes.ts +157 -276
  42. package/src/migrate.ts +9 -30
  43. package/src/models.ts +188 -174
  44. package/src/types.ts +31 -26
  45. package/skill/Model_findAll.md +0 -12
  46. package/skill/PrimaryIndex.md +0 -8
  47. package/skill/PrimaryIndex_get.md +0 -17
  48. package/skill/PrimaryIndex_getLazy.md +0 -13
  49. package/skill/UniqueIndex_get.md +0 -17
  50. package/skill/index.md +0 -32
  51. package/skill/primary.md +0 -26
  52. package/skill/registerModel.md +0 -26
  53. package/skill/unique.md +0 -32
@@ -19,8 +19,8 @@ export function currentTxn() {
19
19
  throw new DatabaseError("No active transaction. Operations must be performed within a transact() callback.", 'NO_TRANSACTION');
20
20
  return txn;
21
21
  }
22
- import { PrimaryIndex } from "./indexes.js";
23
- import { addErrorPath, logLevel, dbGet, hashBytes, bytesEqual } from "./utils.js";
22
+ import { PrimaryIndex, UniqueIndex, SecondaryIndex } from "./indexes.js";
23
+ import { addErrorPath, dbGet, hashBytes } from "./utils.js";
24
24
  /**
25
25
  * Create a field definition for a model property.
26
26
  *
@@ -35,10 +35,10 @@ import { addErrorPath, logLevel, dbGet, hashBytes, bytesEqual } from "./utils.js
35
35
  *
36
36
  * @example
37
37
  * ```typescript
38
- * class User extends E.Model<User> {
38
+ * const User = E.defineModel(class {
39
39
  * name = E.field(E.string, {description: "User's full name"});
40
40
  * age = E.field(E.opt(E.number), {description: "User's age", default: 25});
41
- * }
41
+ * });
42
42
  * ```
43
43
  */
44
44
  export function field(type, options = {}) {
@@ -54,76 +54,90 @@ function isObjectEmpty(obj) {
54
54
  }
55
55
  return true;
56
56
  }
57
- /**
58
- * Register a model class with the Edinburgh ORM system.
59
- *
60
- * @template T - The model class type.
61
- * @param MyModel - The model class to register.
62
- * @returns The enhanced model class with ORM capabilities.
63
- *
64
- * @example
65
- * ```typescript
66
- * ⁣@E.registerModel
67
- * class User extends E.Model<User> {
68
- * static pk = E.index(User, ["id"], "primary");
69
- * id = E.field(E.identifier);
70
- * name = E.field(E.string);
71
- * }
72
- * ```
73
- */
74
- export function registerModel(MyModel) {
75
- const MockModel = getMockModel(MyModel);
76
- // Copy own static methods/properties
77
- for (const name of Object.getOwnPropertyNames(MyModel)) {
78
- if (name !== 'length' && name !== 'prototype' && name !== 'name' && name !== 'mock' && name !== 'override') {
79
- MockModel[name] = MyModel[name];
57
+ let autoTableNameId = 0;
58
+ export function defineModel(cls, opts) {
59
+ Object.setPrototypeOf(cls.prototype, Model.prototype);
60
+ const MockModel = function (initial, txn = currentTxn()) {
61
+ this._txn = txn;
62
+ txn.instances.add(this);
63
+ if (initial)
64
+ Object.assign(this, initial);
65
+ };
66
+ cls.prototype.constructor = MockModel;
67
+ Object.setPrototypeOf(MockModel, Model);
68
+ MockModel.prototype = cls.prototype;
69
+ MockModel._original = cls;
70
+ for (const name of Object.getOwnPropertyNames(cls)) {
71
+ if (name !== 'length' && name !== 'prototype' && name !== 'name') {
72
+ MockModel[name] = cls[name];
80
73
  }
81
74
  }
82
- MockModel.tableName ||= MyModel.name;
83
- // Register the constructor by name
75
+ MockModel.tableName = opts?.tableName || cls.name || `Model${++autoTableNameId}`;
84
76
  if (MockModel.tableName in modelRegistry) {
85
- if (!MyModel.override) {
77
+ if (!opts?.override) {
86
78
  throw new DatabaseError(`Model with table name '${MockModel.tableName}' already registered`, 'INIT_ERROR');
87
79
  }
88
80
  delete modelRegistry[MockModel.tableName];
89
81
  }
90
- modelRegistry[MockModel.tableName] = MockModel;
91
- return MockModel;
92
- }
93
- export function getMockModel(OrgModel) {
94
- const AnyOrgModel = OrgModel;
95
- if (AnyOrgModel._isMock)
96
- return OrgModel;
97
- if (AnyOrgModel._mock)
98
- return AnyOrgModel._mock;
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) {
105
- Object.assign(this, initial);
82
+ const instance = new cls();
83
+ if (!opts?.pk && !instance.id) {
84
+ instance.id = { type: identifier };
85
+ }
86
+ MockModel.fields = {};
87
+ for (const key in instance) {
88
+ const value = instance[key];
89
+ if (value && value.type instanceof TypeWrapper) {
90
+ MockModel.fields[key] = value;
91
+ const defObj = value.default === undefined ? value.type : value;
92
+ const def = defObj.default;
93
+ if (typeof def === 'function') {
94
+ Object.defineProperty(MockModel.prototype, key, {
95
+ get() {
96
+ return (this[key] = def.call(defObj, this));
97
+ },
98
+ set(val) {
99
+ Object.defineProperty(this, key, {
100
+ value: val,
101
+ configurable: true,
102
+ writable: true,
103
+ enumerable: true,
104
+ });
105
+ },
106
+ configurable: true,
107
+ });
108
+ }
109
+ else if (def !== undefined) {
110
+ MockModel.prototype[key] = def;
111
+ }
106
112
  }
107
- };
108
- // We want .constructor to point at our fake constructor function.
109
- OrgModel.prototype.constructor = MockModel;
110
- // Copy the prototype chain for the constructor as well as for instantiated objects
111
- Object.setPrototypeOf(MockModel, Object.getPrototypeOf(OrgModel));
112
- MockModel.prototype = OrgModel.prototype;
113
- MockModel._isMock = true;
114
- MockModel._original = OrgModel;
115
- AnyOrgModel._mock = MockModel;
113
+ }
114
+ if (opts?.pk) {
115
+ new PrimaryIndex(MockModel, Array.isArray(opts.pk) ? opts.pk : [opts.pk]);
116
+ }
117
+ else {
118
+ new PrimaryIndex(MockModel, ['id']);
119
+ }
120
+ const normalizeSpec = (spec) => typeof spec === 'string' ? [spec] : spec;
121
+ if (opts?.unique) {
122
+ for (const [name, spec] of Object.entries(opts.unique)) {
123
+ MockModel[name] = new UniqueIndex(MockModel, normalizeSpec(spec));
124
+ }
125
+ }
126
+ if (opts?.index) {
127
+ for (const [name, spec] of Object.entries(opts.index)) {
128
+ MockModel[name] = new SecondaryIndex(MockModel, normalizeSpec(spec));
129
+ }
130
+ }
131
+ modelRegistry[MockModel.tableName] = MockModel;
116
132
  scheduleInit();
117
133
  return MockModel;
118
134
  }
119
- // Model base class and related symbols/state
120
- const INIT_INSTANCE_SYMBOL = Symbol();
121
135
  /**
122
136
  * Base class for all database models in the Edinburgh ORM.
123
137
  *
124
138
  * Models represent database entities with typed fields, automatic serialization,
125
- * change tracking, and relationship management. All model classes should extend
126
- * this base class and be decorated with `@E.registerModel`.
139
+ * change tracking, and relationship management. Model classes are created using
140
+ * `E.defineModel()`.
127
141
  *
128
142
  * ### Schema Evolution
129
143
  *
@@ -159,16 +173,14 @@ const INIT_INSTANCE_SYMBOL = Symbol();
159
173
  *
160
174
  * @example
161
175
  * ```typescript
162
- * ⁣@E.registerModel
163
- * class User extends E.Model<User> {
164
- * static pk = E.primary(User, "id");
165
- *
176
+ * const User = E.defineModel(class {
166
177
  * id = E.field(E.identifier);
167
178
  * name = E.field(E.string);
168
179
  * email = E.field(E.string);
169
- *
170
- * static byEmail = E.unique(User, "email");
171
- * }
180
+ * }, {
181
+ * pk: "id",
182
+ * unique: { byEmail: "email" },
183
+ * });
172
184
  * ```
173
185
  */
174
186
  export class Model {
@@ -177,10 +189,16 @@ export class Model {
177
189
  static _secondaries;
178
190
  /** The database table name (defaults to class name). */
179
191
  static tableName;
180
- /** When true, registerModel replaces an existing model with the same tableName. */
192
+ /** When true, defineModel replaces an existing model with the same tableName. */
181
193
  static override;
182
194
  /** Field configuration metadata. */
183
195
  static fields;
196
+ // Alias statics that delegate to _primary, used by migrate.ts
197
+ static get _indexId() { return this._primary?._indexId; }
198
+ static get _currentVersion() { return this._primary._currentVersion; }
199
+ static get _pkFieldTypes() { return this._primary._fieldTypes; }
200
+ static _loadVersionInfo(txnId, version) { return this._primary._loadVersionInfo(txnId, version); }
201
+ static _writePrimary(txn, pk, data) { this._primary._write(txn, pk, data); }
184
202
  /*
185
203
  * IMPORTANT: We cannot use instance property initializers here, because we will be
186
204
  * initializing the class through a fake constructor that will skip these. This is
@@ -197,76 +215,19 @@ export class Model {
197
215
  _primaryKeyHash;
198
216
  _txn;
199
217
  constructor(initial = {}) {
200
- // This constructor will only be called once, from `initModels`. All other instances will
201
- // be created by the 'fake' constructor. The typing for `initial` *is* important though.
202
- if (initial === INIT_INSTANCE_SYMBOL)
203
- return;
204
- throw new DatabaseError("The model needs a @E.registerModel decorator", 'INIT_ERROR');
218
+ throw new DatabaseError("Use defineModel() to create model classes", 'INIT_ERROR');
205
219
  }
206
- static async _delayedInit(cleared) {
207
- const MockModel = getMockModel(this);
208
- if (cleared) {
209
- MockModel._primary._indexId = undefined;
210
- MockModel._primary._versions.clear();
211
- for (const sec of MockModel._secondaries || [])
212
- sec._indexId = undefined;
213
- }
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 };
222
- }
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
- }
259
- }
260
- }
261
- if (logLevel >= 1) {
262
- console.log(`[edinburgh] Registered model ${MockModel.tableName} with fields: ${Object.keys(MockModel.fields).join(' ')}`);
263
- }
264
- }
265
- // Always run index inits (idempotent, skip if already initialized)
266
- await MockModel._primary._delayedInit();
267
- for (const sec of MockModel._secondaries || [])
220
+ static _resetIndexes() {
221
+ this._primary._indexId = undefined;
222
+ this._primary._versions.clear();
223
+ for (const sec of this._secondaries || [])
224
+ sec._indexId = undefined;
225
+ }
226
+ static async _loadCreateIndexes() {
227
+ await this._primary._delayedInit();
228
+ for (const sec of this._secondaries || [])
268
229
  await sec._delayedInit();
269
- await MockModel._primary._initVersioning();
230
+ await this._primary._initVersioning();
270
231
  }
271
232
  _setLoadedField(fieldName, value) {
272
233
  const oldValues = this._oldValues;
@@ -288,7 +249,7 @@ export class Model {
288
249
  getPrimaryKey() {
289
250
  let key = this._primaryKey;
290
251
  if (key === undefined) {
291
- key = this.constructor._primary._serializeKeyFields(this).toUint8Array();
252
+ key = this.constructor._primary._serializeKey(this).toUint8Array();
292
253
  this._setPrimaryKey(key);
293
254
  }
294
255
  return key;
@@ -341,8 +302,8 @@ export class Model {
341
302
  // We're doing an update. Note that we may still be in a lazy state, and we don't want to load
342
303
  // the whole object just to see if something changed.
343
304
  // Add old values of changed fields to 'changed'.
305
+ const changed = {};
344
306
  const fields = this.constructor.fields;
345
- let changed = {};
346
307
  for (const fieldName in oldValues) {
347
308
  const oldValue = oldValues[fieldName];
348
309
  const newValue = this[fieldName];
@@ -366,24 +327,7 @@ export class Model {
366
327
  this.constructor._primary._write(txn, pk, this);
367
328
  // Update any secondaries with changed fields
368
329
  for (const index of this.constructor._secondaries || []) {
369
- if (index._computeFn) {
370
- // Computed indexes may depend on any field — compare serialized keys
371
- const oldKeyBytes = index._serializeKeyFields(oldValues).toUint8Array();
372
- const newKeyBytes = index._serializeKeyFields(this).toUint8Array();
373
- if (!bytesEqual(oldKeyBytes, newKeyBytes)) {
374
- index._delete(txn, pk, oldValues);
375
- index._write(txn, pk, this);
376
- }
377
- }
378
- else {
379
- for (const field of index._fieldTypes.keys()) {
380
- if (changed.hasOwnProperty(field)) {
381
- index._delete(txn, pk, oldValues);
382
- index._write(txn, pk, this);
383
- break;
384
- }
385
- }
386
- }
330
+ index._update(txn, pk, this, oldValues);
387
331
  }
388
332
  return changed;
389
333
  }
@@ -394,7 +338,7 @@ export class Model {
394
338
  *
395
339
  * @example
396
340
  * ```typescript
397
- * const user = User.load("user123");
341
+ * const user = User.get("user123");
398
342
  * user.name = "New Name";
399
343
  * user.preventPersist(); // Changes won't be saved
400
344
  * ```
@@ -405,15 +349,18 @@ export class Model {
405
349
  Object.defineProperty(this, "_txn", PREVENT_PERSIST_DESCRIPTOR);
406
350
  return this;
407
351
  }
408
- /**
409
- * Find all instances of this model in the database, ordered by primary key.
410
- * @param opts - Optional parameters.
411
- * @param opts.reverse - If true, iterate in reverse order.
412
- * @returns An iterator.
413
- */
414
- static findAll(opts) {
352
+ static get(...args) {
353
+ return this._primary.get(...args);
354
+ }
355
+ static getLazy(...args) {
356
+ return this._primary.getLazy(...args);
357
+ }
358
+ static find(opts) {
415
359
  return this._primary.find(opts);
416
360
  }
361
+ static batchProcess(opts, callback) {
362
+ return this._primary.batchProcess(opts, callback);
363
+ }
417
364
  /**
418
365
  * Load an existing instance by primary key and update it, or create a new one.
419
366
  *
@@ -451,7 +398,7 @@ export class Model {
451
398
  *
452
399
  * @example
453
400
  * ```typescript
454
- * const user = User.load("user123");
401
+ * const user = User.get("user123");
455
402
  * user.delete(); // Removes from database
456
403
  * ```
457
404
  */
@@ -514,7 +461,7 @@ export class Model {
514
461
  }
515
462
  toString() {
516
463
  const primary = this.constructor._primary;
517
- const pk = primary._keyToArray(this._primaryKey || primary._serializeKeyFields(this).toUint8Array(false));
464
+ const pk = primary._keyToArray(this._primaryKey || primary._serializeKey(this).toUint8Array(false));
518
465
  return `{Model:${this.constructor.tableName} ${this.getState()} ${pk}}`;
519
466
  }
520
467
  [Symbol.for('nodejs.util.inspect.custom')]() {
@@ -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":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,iBAAiB,EAAe,CAAC;AAG/D,MAAM,0BAA0B,GAAG;IAC/B,GAAG;QACC,MAAM,IAAI,aAAa,CAAC,8CAA8C,EAAE,YAAY,CAAC,CAAC;IAC1F,CAAC;CACJ,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,UAAU;IACtB,MAAM,GAAG,GAAG,UAAU,CAAC,QAAQ,EAAE,CAAC;IAClC,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,aAAa,CAAC,mFAAmF,EAAE,gBAAgB,CAAC,CAAC;IACzI,OAAO,GAAG,CAAC;AACf,CAAC;AAOD,OAAO,EAA8B,YAAY,EAAsB,WAAW,EAAE,cAAc,EAAe,MAAM,cAAc,CAAC;AACtI,OAAO,EAAE,YAAY,EAAoB,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAe9E;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,UAAU,KAAK,CAAI,IAAoB,EAAE,UAAmC,EAAE;IAChF,6DAA6D;IAC7D,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC;IACpB,OAAO,OAAc,CAAC;AAC1B,CAAC;AAED,wCAAwC;AACxC,MAAM,CAAC,MAAM,aAAa,GAAiC,EAAE,CAAC;AAE9D,SAAS,aAAa,CAAC,GAAW;IAC9B,KAAK,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC7B,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAID,IAAI,eAAe,GAAG,CAAC,CAAC;AAoExB,MAAM,UAAU,WAAW,CAAC,GAAQ,EAAE,IAAU;IAC5C,MAAM,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IAEtD,MAAM,SAAS,GAAG,UAAoB,OAA6B,EAAE,MAAmB,UAAU,EAAE;QAChG,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,OAAO;YAAE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAQ,CAAC;IAET,GAAG,CAAC,SAAS,CAAC,WAAW,GAAG,SAAS,CAAC;IACtC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IACxC,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC,SAAS,CAAC;IACpC,SAAS,CAAC,SAAS,GAAG,GAAG,CAAC;IAE1B,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,mBAAmB,CAAC,GAAG,CAAC,EAAE,CAAC;QACjD,IAAI,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,WAAW,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC/D,SAAS,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;IACL,CAAC;IAED,SAAS,CAAC,SAAS,GAAG,IAAI,EAAE,SAAS,IAAI,GAAG,CAAC,IAAI,IAAI,QAAQ,EAAE,eAAe,EAAE,CAAC;IAEjF,IAAI,SAAS,CAAC,SAAS,IAAI,aAAa,EAAE,CAAC;QACvC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC;YAClB,MAAM,IAAI,aAAa,CAAC,0BAA0B,SAAS,CAAC,SAAS,sBAAsB,EAAE,YAAY,CAAC,CAAC;QAC/G,CAAC;QACD,OAAO,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3B,IAAI,CAAC,IAAI,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QAC5B,QAAQ,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IACvC,CAAC;IAED,SAAS,CAAC,MAAM,GAAG,EAAE,CAAC;IACtB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAyB,CAAC;QACpD,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,YAAY,WAAW,EAAE,CAAC;YAC7C,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAE9B,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC;YAChE,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,CAAC;YAC3B,IAAI,OAAO,GAAG,KAAK,UAAU,EAAE,CAAC;gBAC5B,MAAM,CAAC,cAAc,CAAC,SAAS,CAAC,SAAS,EAAE,GAAG,EAAE;oBAC5C,GAAG;wBACC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC;oBAChD,CAAC;oBACD,GAAG,CAAC,GAAQ;wBACR,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,EAAE;4BAC7B,KAAK,EAAE,GAAG;4BACV,YAAY,EAAE,IAAI;4BAClB,QAAQ,EAAE,IAAI;4BACd,UAAU,EAAE,IAAI;yBACnB,CAAC,CAAC;oBACP,CAAC;oBACD,YAAY,EAAE,IAAI;iBACrB,CAAC,CAAC;YACP,CAAC;iBAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBAC3B,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;YACnC,CAAC;QACL,CAAC;IACL,CAAC;IAED,IAAI,IAAI,EAAE,EAAE,EAAE,CAAC;QACX,IAAI,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9E,CAAC;SAAM,CAAC;QACJ,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC;IAED,MAAM,aAAa,GAAG,CAAC,IAAS,EAAE,EAAE,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE9E,IAAI,IAAI,EAAE,MAAM,EAAE,CAAC;QACf,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAM,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1D,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,WAAW,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QACtE,CAAC;IACL,CAAC;IACD,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;QACd,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAM,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,SAAS,CAAC,IAAI,CAAC,GAAG,IAAI,cAAc,CAAC,SAAS,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QACzE,CAAC;IACL,CAAC;IAED,aAAa,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC;IAC/C,YAAY,EAAE,CAAC;IACf,OAAO,SAAS,CAAC;AACrB,CAAC;AAUD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkDG;AAGH,MAAM,OAAgB,KAAK;IACvB,MAAM,CAAC,QAAQ,CAAyB;IAExC,wDAAwD;IACxD,MAAM,CAAC,YAAY,CAA2D;IAE9E,wDAAwD;IACxD,MAAM,CAAC,SAAS,CAAS;IAEzB,iFAAiF;IACjF,MAAM,CAAC,QAAQ,CAAW;IAE1B,oCAAoC;IACpC,MAAM,CAAC,MAAM,CAAyD;IAEtE,8DAA8D;IAC9D,MAAM,KAAK,QAAQ,KAAK,OAAO,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IACzD,MAAM,KAAK,eAAe,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC;IACtE,MAAM,KAAK,aAAa,KAAK,OAAO,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC;IAChE,MAAM,CAAC,gBAAgB,CAAC,KAAa,EAAE,OAAe,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IAClH,MAAM,CAAC,aAAa,CAAC,GAAgB,EAAE,EAAc,EAAE,IAAyB,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,IAAW,CAAC,CAAC,CAAC,CAAC;IA+BjI;;;;OAIG;IAEH;;;;;OAKG;IACH,UAAU,CAAyC;IACnD,WAAW,CAAyB;IACpC,eAAe,CAAqB;IACpC,IAAI,CAAe;IAEnB,YAAY,UAA6C,EAAE;QACvD,MAAM,IAAI,aAAa,CAAC,2CAA2C,EAAE,YAAY,CAAC,CAAC;IACvF,CAAC;IA2BD,MAAM,CAAC,aAAa;QAChB,IAAI,CAAC,QAAQ,CAAC,QAAQ,GAAG,SAAS,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,EAAE,CAAC;QAChC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE;YAAE,GAAG,CAAC,QAAQ,GAAG,SAAS,CAAC;IACxE,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,kBAAkB;QAC3B,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;QACnC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,YAAY,IAAI,EAAE;YAAE,MAAM,GAAG,CAAC,YAAY,EAAE,CAAC;QACpE,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;IAC1C,CAAC;IAED,eAAe,CAAC,SAAiB,EAAE,KAAU;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,UAAW,CAAC;QACnC,IAAI,SAAS,CAAC,cAAc,CAAC,SAAS,CAAC;YAAE,OAAO,CAAC,iDAAiD;QAElG,IAAI,CAAC,SAA6B,CAAC,GAAG,KAAK,CAAC;QAC5C,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC9C,MAAM,SAAS,GAAI,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,CAA0B,CAAC,IAAI,CAAC;YACpF,SAAS,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClD,CAAC;aAAM,CAAC;YACJ,oCAAoC;YACpC,SAAS,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;QACjC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,aAAa;QACT,IAAI,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC;QAC3B,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YACpB,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,QAAS,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,EAAE,CAAC;YACpE,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,GAAG,CAAC;IACf,CAAC;IAED,cAAc,CAAC,GAAe,EAAE,IAAa;QACzC,IAAI,CAAC,WAAW,GAAG,GAAG,CAAC;QACvB,IAAI,CAAC,eAAe,GAAG,IAAI,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC;QAC9C,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;IAC1F,CAAC;IAED;;OAEG;IACH,iBAAiB;QACb,IAAI,IAAI,CAAC,eAAe,KAAK,SAAS;YAAE,IAAI,CAAC,aAAa,EAAE,CAAC;QAC7D,OAAO,IAAI,CAAC,eAAgB,CAAC;IACjC,CAAC;IAED,WAAW,CAAC,KAAiB;QACzB,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,QAAS,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACjE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;IAC3G,CAAC;IAED,MAAM,CAAC,GAAgB;QACnB,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAElC,IAAI,SAAS,KAAK,IAAI,EAAE,CAAC,CAAC,kBAAkB;YACxC,MAAM,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC;YAC5B,4EAA4E;YAC5E,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;YACrB,KAAI,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;gBACrD,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAG,EAAE,IAAI,CAAC,CAAC;YAClC,CAAC;YACD,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,EAAG,EAAE,IAAI,CAAC,CAAC;YAElD,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC,CAAC,kBAAkB;YAC7C,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEpB,mDAAmD;YACnD,MAAM,EAAE,GAAG,IAAI,CAAC,aAAa,EAAE,CAAC;YAChC,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,EAAG,CAAC,EAAE,CAAC;gBACrB,MAAM,IAAI,aAAa,CAAC,6BAA6B,EAAE,mBAAmB,CAAC,CAAC;YAChF,CAAC;YAED,2BAA2B;YAC3B,IAAI,CAAC,WAAW,CAAC,QAAS,CAAC,MAAM,CAAC,GAAG,EAAE,EAAG,EAAE,IAAI,CAAC,CAAC;YAElD,yBAAyB;YACzB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;gBACtD,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,EAAG,EAAE,IAAI,CAAC,CAAC;YACjC,CAAC;YAED,OAAO,SAAS,CAAC;QACrB,CAAC;QAED,0BAA0B;QAC1B,8FAA8F;QAC9F,qDAAqD;QAErD,iDAAiD;QACjD,MAAM,OAAO,GAAwB,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC;QACvC,KAAI,MAAM,SAAS,IAAI,SAAS,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAA6B,CAAC,CAAC;YACrD,IAAI,QAAQ,KAAK,QAAQ,IAAK,CAAE,MAAM,CAAC,SAAS,CAA0B,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;gBACzG,OAAO,CAAC,SAAS,CAAC,GAAG,QAAQ,CAAC;YAClC,CAAC;QACL,CAAC;QAED,IAAI,aAAa,CAAC,OAAO,CAAC;YAAE,OAAO,CAAC,4BAA4B;QAEhE,yCAAyC;QACzC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,QAAS,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;YAChE,IAAI,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,MAAM,IAAI,aAAa,CAAC,oCAAoC,KAAK,EAAE,EAAE,gBAAgB,CAAC,CAAC;YAC3F,CAAC;QACL,CAAC;QAED,qGAAqG;QAErG,8BAA8B;QAC9B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAEpB,2BAA2B;QAC3B,MAAM,EAAE,GAAG,IAAI,CAAC,WAAY,CAAC;QAC7B,IAAI,CAAC,WAAW,CAAC,QAAS,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QAEjD,6CAA6C;QAC7C,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,WAAW,CAAC,YAAY,IAAI,EAAE,EAAE,CAAC;YACtD,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QAC5C,CAAC;QACD,OAAO,OAAO,CAAC;IACnB,CAAC;IAED;;;;;;;;;;;OAWG;IACH,cAAc;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,mDAAmD;QACnD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,0BAA0B,CAAC,CAAC;QAChE,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,IAAW;QACrB,OAAO,IAAI,CAAC,QAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,GAAG,IAAW;QACzB,OAAO,IAAI,CAAC,QAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,IAAU;QAClB,OAAO,IAAI,CAAC,QAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;IAED,MAAM,CAAC,YAAY,CAAC,IAAS,EAAE,QAAc;QACzC,OAAO,IAAI,CAAC,QAAS,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACvD,CAAC;IAED;;;;;;;;;OASG;IACH,MAAM,CAAC,WAAW,CAAuC,GAAiC;QACtF,MAAM,EAAE,GAAG,IAAI,CAAC,QAAS,CAAC;QAC1B,MAAM,OAAO,GAAG,EAAE,CAAC;QACnB,KAAK,MAAM,SAAS,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC;YAC5C,IAAI,CAAC,CAAC,SAAS,IAAK,GAAW,CAAC,EAAE,CAAC;gBAC/B,MAAM,IAAI,aAAa,CAAC,2CAA2C,SAAS,GAAG,EAAE,qBAAqB,CAAC,CAAC;YAC5G,CAAC;YACD,OAAO,CAAC,IAAI,CAAE,GAAW,CAAC,SAAS,CAAC,CAAC,CAAC;QAC1C,CAAC;QAED,MAAM,QAAQ,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,OAAc,CAAgC,CAAC;QAC1E,IAAI,QAAQ,EAAE,CAAC;YACX,KAAK,MAAM,GAAG,IAAI,GAAU,EAAE,CAAC;gBAC3B,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,GAAU,CAAC,EAAE,CAAC;oBACjC,QAAgB,CAAC,GAAG,CAAC,GAAI,GAAW,CAAC,GAAG,CAAC,CAAC;gBAC/C,CAAC;YACL,CAAC;YACD,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,OAAO,IAAK,IAAY,CAAC,GAAG,CAAoB,CAAC;IACrD,CAAC;IAED;;;;;;;;;;OAUG;IACH,MAAM;QACF,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,MAAM,IAAI,aAAa,CAAC,gCAAgC,EAAE,WAAW,CAAC,CAAC;QAC1G,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;IAC3B,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,QAAQ,CAAC,QAAiB,KAAK;QAC3B,MAAM,MAAM,GAAY,EAAE,CAAC;QAE3B,KAAK,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACvE,IAAI,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAE,IAAY,CAAC,GAAG,CAAC,CAAC,CAAC;YACtD,IAAI,CAAC,EAAE,CAAC;gBACJ,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,IAAI,CAAC,WAAW,CAAC,SAAS,GAAC,GAAG,GAAC,GAAG,CAAC,CAAC;gBACxD,IAAI,KAAK;oBAAE,MAAM,CAAC,CAAC;gBACnB,MAAM,CAAC,IAAI,CAAC,CAAU,CAAC,CAAC;YAC5B,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED;;;;;;;;;OASG;IACH,OAAO;QACH,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,KAAK,CAAC,CAAC;IACxC,CAAC;IAED,QAAQ;QACJ,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI;YAAE,OAAO,SAAS,CAAC;QAC/C,IAAI,IAAI,CAAC,UAAU,KAAK,SAAS;YAAE,OAAO,SAAS,CAAC;QACpD,KAAI,MAAM,CAAC,GAAG,EAAC,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,QAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;YACnF,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC;gBAC5F,OAAO,MAAM,CAAC;YAClB,CAAC;QACL,CAAC;QACD,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,QAAQ;QACJ,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;QAC1C,MAAM,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;QACpG,OAAO,UAAU,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,CAAC;IAC5E,CAAC;IAED,CAAC,MAAM,CAAC,GAAG,CAAC,4BAA4B,CAAC,CAAC;QACtC,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IAC3B,CAAC;CACJ"}
@@ -1,7 +1,6 @@
1
1
  import DataPack from "./datapack.js";
2
2
  import { DatabaseError } from "olmdb/lowlevel";
3
3
  import { Model, FieldConfig } from "./models.js";
4
- import { PrimaryIndex, BaseIndex, IndexRangeIterator } from "./indexes.js";
5
4
  /**
6
5
  * @internal Abstract base class for all type wrappers in the Edinburgh ORM system.
7
6
  *
@@ -49,7 +48,7 @@ export declare abstract class TypeWrapper<const T> {
49
48
  toString(): string;
50
49
  clone(value: T): T;
51
50
  equals(value1: T, value2: T): boolean;
52
- getLinkedModel(): (typeof Model<unknown>) | undefined;
51
+ getLinkedModel(): undefined | typeof Model<unknown>;
53
52
  }
54
53
  export interface TypeWrapper<T> {
55
54
  /**
@@ -88,38 +87,45 @@ export declare class SetType<T> extends TypeWrapper<Set<T>> {
88
87
  equals(a: Set<T>, b: Set<T>): boolean;
89
88
  toString(): string;
90
89
  getLinkedModel(): ((abstract new (initial?: Partial<Omit<unknown, "constructor">>) => Model<unknown>) & {
91
- _primary: PrimaryIndex<any, any>;
92
- _secondaries?: BaseIndex<any, readonly (keyof any & string)[]>[];
90
+ _primary: import("./indexes.js").PrimaryIndex<any, any>;
91
+ _secondaries?: import("./indexes.js").NonPrimaryIndex<any, readonly (keyof any & string)[]>[];
93
92
  tableName: string;
94
93
  override?: boolean;
95
94
  fields: Record<string | symbol | number, FieldConfig<unknown>>;
95
+ readonly _indexId: number | undefined;
96
+ readonly _currentVersion: number;
97
+ readonly _pkFieldTypes: Map<string, TypeWrapper<any>>;
98
+ _loadVersionInfo(txnId: number, version: number): import("./indexes.js").VersionInfo;
99
+ _writePrimary(txn: import("./models.js").Transaction, pk: Uint8Array, data: Record<string, any>): void;
96
100
  migrate?(record: Record<string, any>): void;
97
- _delayedInit(cleared?: boolean): Promise<void>;
98
- findAll<T_1 extends typeof Model<unknown>>(this: T_1, opts?: {
99
- reverse?: boolean;
100
- }): IndexRangeIterator<T_1>;
101
- replaceInto<T_1 extends typeof Model<any>>(this: T_1, obj: Partial<Omit<InstanceType<T_1>, "constructor">>): InstanceType<T_1>;
101
+ _resetIndexes(): void;
102
+ _loadCreateIndexes(): Promise<void>;
103
+ get(...args: any[]): any;
104
+ getLazy(...args: any[]): any;
105
+ find(opts?: any): any;
106
+ batchProcess(opts: any, callback?: any): any;
107
+ replaceInto<T_1 extends typeof Model<any>>(this: T_1, obj: Partial<Record<string, any>>): InstanceType<T_1>;
102
108
  }) | undefined;
103
109
  }
104
110
  /**
105
111
  * @internal Type wrapper for model relationships (foreign keys).
106
112
  * @template T - The target model class type.
107
113
  */
108
- export declare class LinkType<T extends typeof Model<unknown>> extends TypeWrapper<InstanceType<T>> {
114
+ export declare class LinkType<T extends new (...args: any[]) => Model<any>> extends TypeWrapper<InstanceType<T>> {
109
115
  kind: string;
110
- tableName: string;
116
+ private TargetModel;
111
117
  /**
112
118
  * Create a new LinkType.
113
- * @param TargetModel - The model class this link points to.
119
+ * @param TargetModel - The model class this link points to, or a thunk for forward references.
114
120
  */
115
- constructor(TargetModel: T);
121
+ constructor(TargetModel: T | (() => T));
122
+ getLinkedModel(): typeof Model<unknown>;
116
123
  serialize(model: InstanceType<T>, pack: DataPack): void;
117
124
  deserialize(pack: DataPack): any;
118
125
  getError(value: InstanceType<T>): DatabaseError | undefined;
119
126
  serializeType(pack: DataPack): void;
120
127
  static deserializeType(pack: DataPack, featureFlags: number): LinkType<any>;
121
128
  toString(): string;
122
- getLinkedModel(): T;
123
129
  }
124
130
  /** Type wrapper instance for the string type. */
125
131
  export declare const string: TypeWrapper<string>;
@@ -233,16 +239,19 @@ export declare function record<const T>(inner: TypeWrapper<T>): TypeWrapper<Reco
233
239
  *
234
240
  * @example
235
241
  * ```typescript
236
- * class User extends E.Model<User> {
237
- * posts = E.field(E.array(E.link(Post, 'author')));
238
- * }
242
+ * const Author = E.defineModel(class {
243
+ * id = E.field(E.identifier);
244
+ * posts = E.field(E.array(E.link(() => Book)));
245
+ * }, { pk: "id" });
239
246
  *
240
- * class Post extends E.Model<Post> {
241
- * author = E.field(E.link(User));
242
- * }
247
+ * const Book = E.defineModel(class {
248
+ * id = E.field(E.identifier);
249
+ * author = E.field(E.link(Author));
250
+ * }, { pk: "id" });
243
251
  * ```
244
252
  */
245
- export declare function link<const T extends typeof Model<any>>(TargetModel: T): TypeWrapper<InstanceType<T>>;
253
+ export declare function link<const T extends new (...args: any[]) => Model<any>>(TargetModel: T): TypeWrapper<InstanceType<T>>;
254
+ export declare function link<const T extends new (...args: any[]) => Model<any>>(TargetModel: () => T): TypeWrapper<InstanceType<T>>;
246
255
  export type BasicType = string | number | boolean | undefined | null;
247
256
  export type UnwrapTypes<T extends (TypeWrapper<unknown> | BasicType)[]> = {
248
257
  [K in keyof T]: T[K] extends TypeWrapper<infer U> ? U : T[K];
@@ -276,7 +276,7 @@ class RecordType extends TypeWrapper {
276
276
  }
277
277
  serialize(value, pack) {
278
278
  pack.writeCollectionBoundary('object');
279
- for (const key of Object.keys(value)) {
279
+ for (const key in value) {
280
280
  pack.writeObjectKey(key);
281
281
  this.inner.serialize(value[key], pack);
282
282
  }
@@ -294,7 +294,7 @@ class RecordType extends TypeWrapper {
294
294
  return result;
295
295
  }
296
296
  getError(value) {
297
- if (typeof value !== 'object' || value === null || Array.isArray(value)) {
297
+ if (typeof value !== 'object' || value === null || Array.isArray(value) || (typeof value.length === 'number' && typeof value[Symbol.iterator] === 'function')) {
298
298
  return new DatabaseError(`Expected object, got ${typeof value}`, 'INVALID_TYPE');
299
299
  }
300
300
  for (const key of Object.keys(value)) {
@@ -498,28 +498,34 @@ class IdentifierType extends TypeWrapper {
498
498
  */
499
499
  export class LinkType extends TypeWrapper {
500
500
  kind = 'link';
501
- tableName;
501
+ TargetModel;
502
502
  /**
503
503
  * Create a new LinkType.
504
- * @param TargetModel - The model class this link points to.
504
+ * @param TargetModel - The model class this link points to, or a thunk for forward references.
505
505
  */
506
506
  constructor(TargetModel) {
507
507
  super();
508
- this.tableName = TargetModel.tableName || TargetModel.name;
508
+ this.TargetModel = TargetModel;
509
+ }
510
+ getLinkedModel() {
511
+ if (!('getLazy' in this.TargetModel))
512
+ this.TargetModel = this.TargetModel();
513
+ return this.TargetModel;
509
514
  }
510
515
  serialize(model, pack) {
511
516
  pack.write(model.getPrimaryKey());
512
517
  }
513
518
  deserialize(pack) {
514
- return modelRegistry[this.tableName]._primary._get(currentTxn(), pack.readUint8Array(), false);
519
+ return this.getLinkedModel()._primary._get(currentTxn(), pack.readUint8Array(), false);
515
520
  }
516
521
  getError(value) {
517
- if (!(value instanceof modelRegistry[this.tableName])) {
518
- return new DatabaseError(`Expected instance of ${this.tableName}, got ${typeof value}`, 'VALUE_ERROR');
522
+ const TargetModel = this.getLinkedModel();
523
+ if (!(value instanceof TargetModel)) {
524
+ return new DatabaseError(`Expected instance of ${TargetModel.tableName}, got ${typeof value}`, 'VALUE_ERROR');
519
525
  }
520
526
  }
521
527
  serializeType(pack) {
522
- pack.write(this.tableName);
528
+ pack.write(this.getLinkedModel().tableName);
523
529
  }
524
530
  static deserializeType(pack, featureFlags) {
525
531
  const tableName = pack.readString();
@@ -528,10 +534,7 @@ export class LinkType extends TypeWrapper {
528
534
  throw new DatabaseError(`Could not deserialize undefined model ${tableName}`, 'DESERIALIZATION_ERROR');
529
535
  return new LinkType(targetModel);
530
536
  }
531
- toString() { return `link<${this.tableName}>`; }
532
- getLinkedModel() {
533
- return modelRegistry[this.tableName];
534
- }
537
+ toString() { return `link<${this.getLinkedModel().tableName}>`; }
535
538
  }
536
539
  /** Type wrapper instance for the string type. */
537
540
  export const string = new StringType();
@@ -643,23 +646,6 @@ export function set(inner, opts = {}) {
643
646
  export function record(inner) {
644
647
  return new RecordType(wrapIfLiteral(inner));
645
648
  }
646
- /**
647
- * Create a link type wrapper for model relationships.
648
- * @template T - The target model class.
649
- * @param TargetModel - The model class this link points to.
650
- * @returns A link type instance.
651
- *
652
- * @example
653
- * ```typescript
654
- * class User extends E.Model<User> {
655
- * posts = E.field(E.array(E.link(Post, 'author')));
656
- * }
657
- *
658
- * class Post extends E.Model<Post> {
659
- * author = E.field(E.link(User));
660
- * }
661
- * ```
662
- */
663
649
  export function link(TargetModel) {
664
650
  return new LinkType(TargetModel);
665
651
  }