edinburgh 0.5.0 → 0.6.1

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 (72) hide show
  1. package/README.md +309 -246
  2. package/build/src/datapack.d.ts +9 -9
  3. package/build/src/datapack.js +9 -9
  4. package/build/src/edinburgh.d.ts +21 -7
  5. package/build/src/edinburgh.js +53 -67
  6. package/build/src/edinburgh.js.map +1 -1
  7. package/build/src/indexes.d.ts +85 -205
  8. package/build/src/indexes.js +150 -503
  9. package/build/src/indexes.js.map +1 -1
  10. package/build/src/migrate.js +8 -10
  11. package/build/src/migrate.js.map +1 -1
  12. package/build/src/models.d.ts +152 -107
  13. package/build/src/models.js +433 -144
  14. package/build/src/models.js.map +1 -1
  15. package/build/src/types.d.ts +30 -48
  16. package/build/src/types.js +25 -24
  17. package/build/src/types.js.map +1 -1
  18. package/build/src/utils.d.ts +4 -4
  19. package/build/src/utils.js +4 -4
  20. package/package.json +2 -2
  21. package/skill/AnyModelClass.md +7 -0
  22. package/skill/FindOptions.md +37 -0
  23. package/skill/Lifecycle Hooks.md +24 -0
  24. package/skill/{Model_delete.md → Lifecycle Hooks_delete.md } +1 -1
  25. package/skill/{Model_getPrimaryKeyHash.md → Lifecycle Hooks_getPrimaryKeyHash.md } +1 -1
  26. package/skill/{Model_isValid.md → Lifecycle Hooks_isValid.md } +1 -1
  27. package/skill/Lifecycle Hooks_migrate.md +26 -0
  28. package/skill/{Model_preCommit.md → Lifecycle Hooks_preCommit.md } +2 -2
  29. package/skill/{Model_preventPersist.md → Lifecycle Hooks_preventPersist.md } +1 -1
  30. package/skill/{Model_validate.md → Lifecycle Hooks_validate.md } +2 -2
  31. package/skill/ModelBase.md +7 -0
  32. package/skill/ModelClass.md +8 -0
  33. package/skill/SKILL.md +180 -132
  34. package/skill/Schema Evolution.md +19 -0
  35. package/skill/TypeWrapper_containsNull.md +11 -0
  36. package/skill/TypeWrapper_deserialize.md +9 -0
  37. package/skill/TypeWrapper_getError.md +11 -0
  38. package/skill/TypeWrapper_serialize.md +10 -0
  39. package/skill/TypeWrapper_serializeType.md +9 -0
  40. package/skill/array.md +2 -2
  41. package/skill/defineModel.md +3 -2
  42. package/skill/deleteEverything.md +8 -0
  43. package/skill/field.md +3 -3
  44. package/skill/link.md +3 -3
  45. package/skill/literal.md +1 -1
  46. package/skill/opt.md +1 -1
  47. package/skill/or.md +1 -1
  48. package/skill/record.md +1 -1
  49. package/skill/set.md +2 -2
  50. package/skill/setOnSaveCallback.md +5 -2
  51. package/skill/transact.md +1 -1
  52. package/src/datapack.ts +9 -9
  53. package/src/edinburgh.ts +68 -68
  54. package/src/indexes.ts +251 -599
  55. package/src/migrate.ts +9 -10
  56. package/src/models.ts +528 -231
  57. package/src/types.ts +36 -34
  58. package/src/utils.ts +4 -4
  59. package/skill/BaseIndex.md +0 -16
  60. package/skill/BaseIndex_batchProcess.md +0 -10
  61. package/skill/BaseIndex_find.md +0 -7
  62. package/skill/BaseIndex_find_2.md +0 -7
  63. package/skill/BaseIndex_find_3.md +0 -7
  64. package/skill/BaseIndex_find_4.md +0 -7
  65. package/skill/Model.md +0 -20
  66. package/skill/Model_batchProcess.md +0 -8
  67. package/skill/Model_migrate.md +0 -32
  68. package/skill/Model_replaceInto.md +0 -16
  69. package/skill/NonPrimaryIndex.md +0 -10
  70. package/skill/SecondaryIndex.md +0 -9
  71. package/skill/UniqueIndex.md +0 -9
  72. package/skill/dump.md +0 -8
@@ -0,0 +1,24 @@
1
+ ### Lifecycle Hooks
2
+
3
+ - **`static migrate(record)`**: Called when deserializing rows written with an older schema
4
+ version. Receives a plain record object; mutate it in-place to match the current schema.
5
+
6
+ - **`preCommit()`**: Called on each modified instance right before the transaction commits.
7
+ Useful for computing derived fields, enforcing cross-field invariants, or creating related
8
+ instances.
9
+
10
+ **Examples:**
11
+
12
+ ```typescript
13
+ const User = E.defineModel("User", class {
14
+ id = E.field(E.identifier);
15
+ name = E.field(E.string);
16
+ email = E.field(E.string);
17
+ }, {
18
+ pk: "id",
19
+ unique: { email: "email" },
20
+ });
21
+ // Optional: declare a companion type so `let u: User` works.
22
+ // Not needed if you only use `new User()`, `User.find()`, etc.
23
+ type User = InstanceType<typeof User>;
24
+ ```
@@ -1,4 +1,4 @@
1
- #### model.delete · method
1
+ #### modelBase.delete · method
2
2
 
3
3
  Delete this model instance from the database.
4
4
 
@@ -1,4 +1,4 @@
1
- #### model.getPrimaryKeyHash · method
1
+ #### modelBase.getPrimaryKeyHash · method
2
2
 
3
3
  **Signature:** `() => number`
4
4
 
@@ -1,4 +1,4 @@
1
- #### model.isValid · method
1
+ #### modelBase.isValid · method
2
2
 
3
3
  Check if this model instance is valid.
4
4
 
@@ -0,0 +1,26 @@
1
+ #### ModelBase.migrate · static method
2
+
3
+ Optional migration function called when deserializing rows written with an older schema version.
4
+ Receives a plain record with all fields and should mutate it in-place to match the current schema.
5
+ It runs during lazy loading and during `runMigration()`. Changing this method creates a new schema version.
6
+ If it updates values used by secondary or unique indexes, those index entries are refreshed only by `runMigration()`.
7
+
8
+ **Signature:** `(record: Record<string, any>) => void`
9
+
10
+ **Parameters:**
11
+
12
+ - `record: Record<string, any>` - A plain object containing the row's field values from the older schema version.
13
+
14
+ **Examples:**
15
+
16
+ ```typescript
17
+ const User = E.defineModel("User", class {
18
+ id = E.field(E.identifier);
19
+ name = E.field(E.string);
20
+ role = E.field(E.string);
21
+
22
+ static migrate(record: Record<string, any>) {
23
+ record.role ??= "user";
24
+ }
25
+ }, { pk: "id" });
26
+ ```
@@ -1,4 +1,4 @@
1
- #### model.preCommit · method
1
+ #### modelBase.preCommit · method
2
2
 
3
3
  Optional hook called on each modified instance right before the transaction commits.
4
4
  Runs before data is written to disk, so changes made here are included in the commit.
@@ -14,7 +14,7 @@ Common use cases:
14
14
  **Examples:**
15
15
 
16
16
  ```typescript
17
- const Post = E.defineModel(class {
17
+ const Post = E.defineModel("Post", class {
18
18
  id = E.field(E.identifier);
19
19
  title = E.field(E.string);
20
20
  slug = E.field(E.string);
@@ -1,4 +1,4 @@
1
- #### model.preventPersist · method
1
+ #### modelBase.preventPersist · method
2
2
 
3
3
  Prevent this instance from being persisted to the database.
4
4
 
@@ -1,4 +1,4 @@
1
- #### model.validate · method
1
+ #### modelBase.validate · method
2
2
 
3
3
  Validate all fields in this model instance.
4
4
 
@@ -6,7 +6,7 @@ Validate all fields in this model instance.
6
6
 
7
7
  **Parameters:**
8
8
 
9
- - `raise: boolean` (optional) - - If true, throw on first validation error.
9
+ - `raise: boolean` (optional) - If true, throw on first validation error.
10
10
 
11
11
  **Returns:** Array of validation errors (empty if valid).
12
12
 
@@ -0,0 +1,7 @@
1
+ ### ModelBase · abstract class
2
+
3
+ Base class for all database models in the Edinburgh ORM.
4
+
5
+ Models represent database entities with typed fields, automatic serialization,
6
+ change tracking, and relationship management. Model classes are created using
7
+ `E.defineModel()`.
@@ -0,0 +1,8 @@
1
+ ### ModelClass · class
2
+
3
+ Runtime base constructor for model classes returned by `defineModel()`.
4
+
5
+ Prefer the `ModelClass` type alias for annotations and the result of
6
+ `defineModel()` for concrete model classes.
7
+
8
+ **Type:** `typeof ModelClassRuntime`