edinburgh 0.4.6 → 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 +263 -381
  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 +6 -7
  6. package/build/src/edinburgh.js.map +1 -1
  7. package/build/src/indexes.d.ts +44 -113
  8. package/build/src/indexes.js +145 -175
  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 +73 -54
  13. package/build/src/models.js +110 -171
  14. package/build/src/models.js.map +1 -1
  15. package/build/src/types.d.ts +29 -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 +140 -150
  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 +6 -9
  41. package/src/indexes.ts +155 -271
  42. package/src/migrate.ts +9 -30
  43. package/src/models.ts +186 -180
  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,84 +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
- /**
207
- * Transform the model's `E.field` properties into the appropriate JavaScript properties. Normally this is done
208
- * automatically when using `transact()`, but in case you need to access `Model.fields` directly before the first
209
- * transaction, you can call this method manually.
210
- */
211
- static initFields(reset) {
212
- const MockModel = getMockModel(this);
213
- if (reset) {
214
- MockModel._primary._indexId = undefined;
215
- MockModel._primary._versions.clear();
216
- for (const sec of MockModel._secondaries || [])
217
- sec._indexId = undefined;
218
- }
219
- if (MockModel.fields)
220
- return;
221
- // First-time init: gather field configs from a temporary instance of the original class.
222
- const OrgModel = MockModel._original || this;
223
- const instance = new OrgModel(INIT_INSTANCE_SYMBOL);
224
- // If no primary key exists, create one using 'id' field
225
- if (!MockModel._primary) {
226
- if (!instance.id) {
227
- instance.id = { type: identifier };
228
- }
229
- // @ts-ignore-next-line - `id` is not part of the type, but the user probably shouldn't touch it anyhow
230
- new PrimaryIndex(MockModel, ['id']);
231
- }
232
- MockModel.fields = {};
233
- for (const key in instance) {
234
- const value = instance[key];
235
- // Check if this property contains field metadata
236
- if (value && value.type instanceof TypeWrapper) {
237
- // Set the configuration on the constructor's `fields` property
238
- MockModel.fields[key] = value;
239
- // Set default value on the prototype
240
- const defObj = value.default === undefined ? value.type : value;
241
- const def = defObj.default;
242
- if (typeof def === 'function') {
243
- // The default is a function. We'll define a getter on the property in the model prototype,
244
- // and once it is read, we'll run the function and set the value as a plain old property
245
- // on the instance object.
246
- Object.defineProperty(MockModel.prototype, key, {
247
- get() {
248
- // This will call set(), which will define the property on the instance.
249
- return (this[key] = def.call(defObj, this));
250
- },
251
- set(val) {
252
- Object.defineProperty(this, key, {
253
- value: val,
254
- configurable: true,
255
- writable: true,
256
- enumerable: true,
257
- });
258
- },
259
- configurable: true,
260
- });
261
- }
262
- else if (def !== undefined) {
263
- MockModel.prototype[key] = def;
264
- }
265
- }
266
- }
267
- if (logLevel >= 1) {
268
- console.log(`[edinburgh] Registered model ${MockModel.tableName} with fields: ${Object.keys(MockModel.fields).join(' ')}`);
269
- }
220
+ static _resetIndexes() {
221
+ this._primary._indexId = undefined;
222
+ this._primary._versions.clear();
223
+ for (const sec of this._secondaries || [])
224
+ sec._indexId = undefined;
270
225
  }
271
226
  static async _loadCreateIndexes() {
272
- const MockModel = getMockModel(this);
273
- // Always run index inits (idempotent, skip if already initialized)
274
- await MockModel._primary._delayedInit();
275
- for (const sec of MockModel._secondaries || [])
227
+ await this._primary._delayedInit();
228
+ for (const sec of this._secondaries || [])
276
229
  await sec._delayedInit();
277
- await MockModel._primary._initVersioning();
230
+ await this._primary._initVersioning();
278
231
  }
279
232
  _setLoadedField(fieldName, value) {
280
233
  const oldValues = this._oldValues;
@@ -296,7 +249,7 @@ export class Model {
296
249
  getPrimaryKey() {
297
250
  let key = this._primaryKey;
298
251
  if (key === undefined) {
299
- key = this.constructor._primary._serializeKeyFields(this).toUint8Array();
252
+ key = this.constructor._primary._serializeKey(this).toUint8Array();
300
253
  this._setPrimaryKey(key);
301
254
  }
302
255
  return key;
@@ -349,8 +302,8 @@ export class Model {
349
302
  // We're doing an update. Note that we may still be in a lazy state, and we don't want to load
350
303
  // the whole object just to see if something changed.
351
304
  // Add old values of changed fields to 'changed'.
305
+ const changed = {};
352
306
  const fields = this.constructor.fields;
353
- let changed = {};
354
307
  for (const fieldName in oldValues) {
355
308
  const oldValue = oldValues[fieldName];
356
309
  const newValue = this[fieldName];
@@ -374,24 +327,7 @@ export class Model {
374
327
  this.constructor._primary._write(txn, pk, this);
375
328
  // Update any secondaries with changed fields
376
329
  for (const index of this.constructor._secondaries || []) {
377
- if (index._computeFn) {
378
- // Computed indexes may depend on any field — compare serialized keys
379
- const oldKeyBytes = index._serializeKeyFields(oldValues).toUint8Array();
380
- const newKeyBytes = index._serializeKeyFields(this).toUint8Array();
381
- if (!bytesEqual(oldKeyBytes, newKeyBytes)) {
382
- index._delete(txn, pk, oldValues);
383
- index._write(txn, pk, this);
384
- }
385
- }
386
- else {
387
- for (const field of index._fieldTypes.keys()) {
388
- if (changed.hasOwnProperty(field)) {
389
- index._delete(txn, pk, oldValues);
390
- index._write(txn, pk, this);
391
- break;
392
- }
393
- }
394
- }
330
+ index._update(txn, pk, this, oldValues);
395
331
  }
396
332
  return changed;
397
333
  }
@@ -402,7 +338,7 @@ export class Model {
402
338
  *
403
339
  * @example
404
340
  * ```typescript
405
- * const user = User.load("user123");
341
+ * const user = User.get("user123");
406
342
  * user.name = "New Name";
407
343
  * user.preventPersist(); // Changes won't be saved
408
344
  * ```
@@ -413,15 +349,18 @@ export class Model {
413
349
  Object.defineProperty(this, "_txn", PREVENT_PERSIST_DESCRIPTOR);
414
350
  return this;
415
351
  }
416
- /**
417
- * Find all instances of this model in the database, ordered by primary key.
418
- * @param opts - Optional parameters.
419
- * @param opts.reverse - If true, iterate in reverse order.
420
- * @returns An iterator.
421
- */
422
- 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) {
423
359
  return this._primary.find(opts);
424
360
  }
361
+ static batchProcess(opts, callback) {
362
+ return this._primary.batchProcess(opts, callback);
363
+ }
425
364
  /**
426
365
  * Load an existing instance by primary key and update it, or create a new one.
427
366
  *
@@ -459,7 +398,7 @@ export class Model {
459
398
  *
460
399
  * @example
461
400
  * ```typescript
462
- * const user = User.load("user123");
401
+ * const user = User.get("user123");
463
402
  * user.delete(); // Removes from database
464
403
  * ```
465
404
  */
@@ -522,7 +461,7 @@ export class Model {
522
461
  }
523
462
  toString() {
524
463
  const primary = this.constructor._primary;
525
- const pk = primary._keyToArray(this._primaryKey || primary._serializeKeyFields(this).toUint8Array(false));
464
+ const pk = primary._keyToArray(this._primaryKey || primary._serializeKey(this).toUint8Array(false));
526
465
  return `{Model:${this.constructor.tableName} ${this.getState()} ${pk}}`;
527
466
  }
528
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":"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"}
@@ -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,39 +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
- initFields(reset?: boolean): void;
101
+ _resetIndexes(): void;
98
102
  _loadCreateIndexes(): Promise<void>;
99
- findAll<T_1 extends typeof Model<unknown>>(this: T_1, opts?: {
100
- reverse?: boolean;
101
- }): IndexRangeIterator<T_1>;
102
- replaceInto<T_1 extends typeof Model<any>>(this: T_1, obj: Partial<Omit<InstanceType<T_1>, "constructor">>): InstanceType<T_1>;
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>;
103
108
  }) | undefined;
104
109
  }
105
110
  /**
106
111
  * @internal Type wrapper for model relationships (foreign keys).
107
112
  * @template T - The target model class type.
108
113
  */
109
- 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>> {
110
115
  kind: string;
111
- tableName: string;
116
+ private TargetModel;
112
117
  /**
113
118
  * Create a new LinkType.
114
- * @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.
115
120
  */
116
- constructor(TargetModel: T);
121
+ constructor(TargetModel: T | (() => T));
122
+ getLinkedModel(): typeof Model<unknown>;
117
123
  serialize(model: InstanceType<T>, pack: DataPack): void;
118
124
  deserialize(pack: DataPack): any;
119
125
  getError(value: InstanceType<T>): DatabaseError | undefined;
120
126
  serializeType(pack: DataPack): void;
121
127
  static deserializeType(pack: DataPack, featureFlags: number): LinkType<any>;
122
128
  toString(): string;
123
- getLinkedModel(): T;
124
129
  }
125
130
  /** Type wrapper instance for the string type. */
126
131
  export declare const string: TypeWrapper<string>;
@@ -234,16 +239,19 @@ export declare function record<const T>(inner: TypeWrapper<T>): TypeWrapper<Reco
234
239
  *
235
240
  * @example
236
241
  * ```typescript
237
- * class User extends E.Model<User> {
238
- * posts = E.field(E.array(E.link(Post, 'author')));
239
- * }
242
+ * const Author = E.defineModel(class {
243
+ * id = E.field(E.identifier);
244
+ * posts = E.field(E.array(E.link(() => Book)));
245
+ * }, { pk: "id" });
240
246
  *
241
- * class Post extends E.Model<Post> {
242
- * author = E.field(E.link(User));
243
- * }
247
+ * const Book = E.defineModel(class {
248
+ * id = E.field(E.identifier);
249
+ * author = E.field(E.link(Author));
250
+ * }, { pk: "id" });
244
251
  * ```
245
252
  */
246
- 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>>;
247
255
  export type BasicType = string | number | boolean | undefined | null;
248
256
  export type UnwrapTypes<T extends (TypeWrapper<unknown> | BasicType)[]> = {
249
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
  }