peta-orm 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -53,7 +53,12 @@ database.run(`CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCRE
53
53
  database.run(`CREATE TABLE IF NOT EXISTS posts (id INTEGER PRIMARY KEY AUTOINCREMENT, userId INTEGER NOT NULL, title TEXT NOT NULL)`)
54
54
 
55
55
  const peta = new Peta({ dialect: new BunSqliteDialect({ database }) })
56
- peta.registerAll([User, Post])
56
+
57
+ // Explicit registration (rest params, no array wrapper)
58
+ peta.registerAll(User, Post)
59
+
60
+ // Or auto-discover from directory (Bun only):
61
+ // await peta.discover("./src/**/*.model.ts")
57
62
 
58
63
  export { peta, User, Post }
59
64
  ```
@@ -212,6 +217,31 @@ await User.transaction(async (trx) => {
212
217
  })
213
218
  ```
214
219
 
220
+ ### Error Handling
221
+
222
+ Database constraint violations (unique, foreign key) are normalized into a `DatabaseError` across SQLite, PostgreSQL, and MySQL:
223
+
224
+ ```ts
225
+ import { DatabaseError } from "peta-orm"
226
+
227
+ try {
228
+ const post = await Post.insert({ slug: "my-post", title: "..." })
229
+ } catch (e) {
230
+ if (e instanceof DatabaseError && e.code === "UNIQUE_CONSTRAINT") {
231
+ // slug already taken — return 400
232
+ return c.json({ error: "Slug already taken" }, 400)
233
+ }
234
+ throw e
235
+ }
236
+ ```
237
+
238
+ | `DatabaseError.code` | Meaning | Triggered by |
239
+ |---|---|---|
240
+ | `UNIQUE_CONSTRAINT` | Duplicate value on a unique column | `SQLITE_CONSTRAINT_UNIQUE`, PostgreSQL `23505`, MySQL `ER_DUP_ENTRY` |
241
+ | `FOREIGN_KEY_CONSTRAINT` | Referenced row doesn't exist | `SQLITE_CONSTRAINT_FOREIGNKEY`, PostgreSQL `23503`, MySQL `ER_NO_REFERENCED_ROW_2` |
242
+
243
+ The error also carries the `table` name and the original driver error via `cause`.
244
+
215
245
  ### Collection Utilities
216
246
 
217
247
  ```ts
@@ -250,13 +280,14 @@ bun run examples/07-soft-deletes.ts
250
280
  | 06 | [hooks-timestamps](./examples/06-hooks-timestamps.ts) | beforeCreate, afterCreate, registerTimestamps |
251
281
  | 07 | [soft-deletes](./examples/07-soft-deletes.ts) | $delete, $restore, $forceDelete, withTrashed |
252
282
  | 08 | [collection-paginator](./examples/08-collection-paginator.ts) | Collection, Paginator |
253
- | 09 | [hono-integration](./examples/09-hono-integration.ts) | Hono app stub |
283
+ | 09 | [hono-integration](./examples/09-hono-integration.ts) | Hono app + error handling with `DatabaseError` |
254
284
  | 10 | [elysia-integration](./examples/10-elysia-integration.ts) | Elysia app stub |
255
285
  | 11 | [many-to-many](./examples/11-many-to-many.ts) | ManyToMany via pivot table |
256
286
  | 12 | [transactions](./examples/12-transactions.ts) | Model.transaction(), rollback |
257
287
  | 13 | [casting](./examples/13-casting.ts) | $casts, $hidden, $appends, accessors |
258
288
  | 14 | [global-scopes](./examples/14-global-scopes.ts) | addGlobalScope(), withoutGlobalScope() |
259
289
  | 15 | [batch](./examples/15-batch.ts) | insertMany, insertMany() |
290
+ | 16 | [discover](./examples/16-discover.ts) | peta.discover(), rest params |
260
291
 
261
292
  ---
262
293
 
@@ -265,13 +296,14 @@ bun run examples/07-soft-deletes.ts
265
296
  | Module | Key exports | File |
266
297
  |--------|-------------|------|
267
298
  | **Core** | `Peta`, `Model`, `$t`, `Collection` | `src/index.ts` |
299
+ | **Discovery** | `peta.discover(glob)`, `peta.registerAll(...models)` | `src/peta.ts` |
268
300
  | **Columns** | `t.integer()`, `t.string()`, `t.email()`, `.min()`, `.max()`, `.nullable()`, `.default()` | `src/columns/column-types.ts` |
269
301
  | **Builders** | `.where()`, `.with()`, `.paginate()`, `.chunk()`, `.sum()`, `.toSQL()` | `src/builder/query-builder.ts` |
270
302
  | **Relations** | `HasMany`, `BelongsTo`, `HasOne`, `ManyToMany`, `HasManyThrough` | `src/relations/Relation.ts` |
271
303
  | **Polymorphic** | `MorphTo`, `MorphMany`, `MorphOne` | `src/relations/Morph.ts` |
272
304
  | **Hooks** | `HookManager`, `on()`, `off()`, `trigger()` | `src/hooks/lifecycle.ts` |
273
305
  | **Paginator** | `Paginator`, `.paginate()` | `src/pagination/Paginator.ts` |
274
- | **Errors** | `ModelNotFoundError`, `RelationNotFoundError`, `ValidationError` | `src/errors/errors.ts` |
306
+ | **Errors** | `ModelNotFoundError`, `RelationNotFoundError`, `ValidationError`, `DatabaseError` | `src/errors/errors.ts` |
275
307
 
276
308
  ---
277
309
 
@@ -1 +1 @@
1
- {"version":3,"file":"delete-builder.d.ts","sourceRoot":"","sources":["../../src/builder/delete-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,qBAAa,aAAa,CAAC,CAAC,SAAS,KAAK;;gBAI5B,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;IAKrE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGlD"}
1
+ {"version":3,"file":"delete-builder.d.ts","sourceRoot":"","sources":["../../src/builder/delete-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,qBAAa,aAAa,CAAC,CAAC,SAAS,KAAK;;gBAI5B,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;IAKrE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CASlD"}
@@ -1 +1 @@
1
- {"version":3,"file":"update-builder.d.ts","sourceRoot":"","sources":["../../src/builder/update-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAGpC,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,qBAAa,aAAa,CAAC,CAAC,SAAS,KAAK;;gBAI5B,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;IAKrE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CA2B9E"}
1
+ {"version":3,"file":"update-builder.d.ts","sourceRoot":"","sources":["../../src/builder/update-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAGpC,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AAExC,qBAAa,aAAa,CAAC,CAAC,SAAS,KAAK;;gBAI5B,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;IAKrE,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAkC9E"}
@@ -14,4 +14,11 @@ export declare class ModelNotRegisteredError extends Error {
14
14
  readonly modelClass?: string;
15
15
  constructor(modelClass?: string);
16
16
  }
17
+ export declare class DatabaseError extends Error {
18
+ readonly code: string;
19
+ readonly cause?: unknown;
20
+ readonly table?: string;
21
+ constructor(code: string, message: string, cause?: unknown, table?: string);
22
+ }
23
+ export declare function normalizeError(e: unknown, table?: string): DatabaseError | null;
17
24
  //# sourceMappingURL=errors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,eAAe,EAAE,CAAA;AAE1B,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;gBAEjB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;CAOtD;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;gBAElB,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;CAOvD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;gBAEhB,UAAU,CAAC,EAAE,MAAM;CAMhC"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAA;AAE3D,OAAO,EAAE,eAAe,EAAE,CAAA;AAE1B,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;gBAEjB,UAAU,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;CAOtD;AAED,qBAAa,qBAAsB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;gBAElB,UAAU,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM;CAOvD;AAED,qBAAa,uBAAwB,SAAQ,KAAK;IAChD,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAA;gBAEhB,UAAU,CAAC,EAAE,MAAM;CAMhC;AAeD,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,SAAkB,KAAK,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;gBAEX,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM;CAO3E;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,IAAI,CAa/E"}
package/dist/index.d.ts CHANGED
@@ -7,7 +7,7 @@ export { Column } from "./columns/column";
7
7
  export type { ColumnTypes } from "./columns/column-types";
8
8
  export { $t } from "./columns/column-types";
9
9
  export type { Constraint, SchemaConfig } from "./columns/schema-config";
10
- export { ModelNotFoundError, RelationNotFoundError, ValidationError } from "./errors/errors";
10
+ export { DatabaseError, ModelNotFoundError, RelationNotFoundError, ValidationError } from "./errors/errors";
11
11
  export type { HookCallback, LifecycleEvent } from "./hooks/lifecycle";
12
12
  export { HookManager } from "./hooks/lifecycle";
13
13
  export type { ColumnData, ModelClass, RelationMap } from "./model/model";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACvG,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAC3C,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC5F,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE5E,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC1F,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC7F,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AACvG,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AACpD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAA;AAC9D,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACzC,YAAY,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAA;AACzD,OAAO,EAAE,EAAE,EAAE,MAAM,wBAAwB,CAAA;AAC3C,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AACvE,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAC3G,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AACrE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACxE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE5E,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAClD,YAAY,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AACxC,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAC7B,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAC1F,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAA;AAChE,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAA;AACnF,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAC7F,YAAY,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA"}
package/dist/index.js CHANGED
@@ -14,19 +14,7 @@ var __export = (target, all) => {
14
14
  });
15
15
  };
16
16
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
17
-
18
- // src/builder/delete-builder.ts
19
- class DeleteBuilder {
20
- #modelClass;
21
- #kysely;
22
- constructor(modelClass, peta, kysely) {
23
- this.#modelClass = modelClass;
24
- this.#kysely = kysely ?? peta.kysely;
25
- }
26
- async execute(id) {
27
- await this.#kysely.deleteFrom(this.#modelClass.table).where("id", "=", id).execute();
28
- }
29
- }
17
+ var __require = import.meta.require;
30
18
 
31
19
  // node_modules/@ark/util/out/arrays.js
32
20
  var liftArray = (data) => Array.isArray(data) ? data : [data], spliterate = (arr, predicate) => {
@@ -8816,7 +8804,22 @@ var init_arktype_config = __esm(() => {
8816
8804
  });
8817
8805
 
8818
8806
  // src/errors/errors.ts
8819
- var ModelNotFoundError, RelationNotFoundError, ModelNotRegisteredError;
8807
+ function normalizeError(e, table) {
8808
+ if (!e || typeof e !== "object")
8809
+ return null;
8810
+ const err = e;
8811
+ if (typeof err.code === "string") {
8812
+ if (UNIQUE_CODES.has(err.code)) {
8813
+ const col = typeof err.column === "string" ? ` on ${err.column}` : "";
8814
+ return new DatabaseError("UNIQUE_CONSTRAINT", `Unique constraint violation${col}`, e, table);
8815
+ }
8816
+ if (FOREIGN_KEY_CODES.has(err.code)) {
8817
+ return new DatabaseError("FOREIGN_KEY_CONSTRAINT", "Foreign key constraint violation", e, table);
8818
+ }
8819
+ }
8820
+ return null;
8821
+ }
8822
+ var ModelNotFoundError, RelationNotFoundError, ModelNotRegisteredError, UNIQUE_CODES, FOREIGN_KEY_CODES, DatabaseError;
8820
8823
  var init_errors3 = __esm(() => {
8821
8824
  init_arktype_config();
8822
8825
  ModelNotFoundError = class ModelNotFoundError extends Error {
@@ -8850,6 +8853,52 @@ var init_errors3 = __esm(() => {
8850
8853
  this.modelClass = modelClass;
8851
8854
  }
8852
8855
  };
8856
+ UNIQUE_CODES = new Set([
8857
+ "SQLITE_CONSTRAINT_UNIQUE",
8858
+ "SQLITE_CONSTRAINT_PRIMARYKEY",
8859
+ "23505",
8860
+ "ER_DUP_ENTRY"
8861
+ ]);
8862
+ FOREIGN_KEY_CODES = new Set([
8863
+ "SQLITE_CONSTRAINT_FOREIGNKEY",
8864
+ "23503",
8865
+ "ER_NO_REFERENCED_ROW_2"
8866
+ ]);
8867
+ DatabaseError = class DatabaseError extends Error {
8868
+ code;
8869
+ cause;
8870
+ table;
8871
+ constructor(code, message, cause, table) {
8872
+ super(message);
8873
+ this.name = "DatabaseError";
8874
+ this.code = code;
8875
+ this.cause = cause;
8876
+ this.table = table;
8877
+ }
8878
+ };
8879
+ });
8880
+
8881
+ // src/builder/delete-builder.ts
8882
+ class DeleteBuilder {
8883
+ #modelClass;
8884
+ #kysely;
8885
+ constructor(modelClass, peta, kysely) {
8886
+ this.#modelClass = modelClass;
8887
+ this.#kysely = kysely ?? peta.kysely;
8888
+ }
8889
+ async execute(id) {
8890
+ try {
8891
+ await this.#kysely.deleteFrom(this.#modelClass.table).where("id", "=", id).execute();
8892
+ } catch (e) {
8893
+ const normalized = normalizeError(e, this.#modelClass.table);
8894
+ if (normalized)
8895
+ throw normalized;
8896
+ throw e;
8897
+ }
8898
+ }
8899
+ }
8900
+ var init_delete_builder = __esm(() => {
8901
+ init_errors3();
8853
8902
  });
8854
8903
 
8855
8904
  // src/builder/eager-loader.ts
@@ -9481,7 +9530,15 @@ class UpdateBuilder {
9481
9530
  }
9482
9531
  }
9483
9532
  }
9484
- const row = await this.#kysely.updateTable(this.#modelClass.table).set(data).where("id", "=", id).returningAll().executeTakeFirst();
9533
+ let row;
9534
+ try {
9535
+ row = await this.#kysely.updateTable(this.#modelClass.table).set(data).where("id", "=", id).returningAll().executeTakeFirst();
9536
+ } catch (e) {
9537
+ const normalized = normalizeError(e, this.#modelClass.table);
9538
+ if (normalized)
9539
+ throw normalized;
9540
+ throw e;
9541
+ }
9485
9542
  if (!row)
9486
9543
  throw new ModelNotFoundError(this.#modelClass.table, id);
9487
9544
  return this.#modelClass.hydrate(row);
@@ -9494,6 +9551,7 @@ var init_update_builder = __esm(() => {
9494
9551
 
9495
9552
  // src/builder/index.ts
9496
9553
  var init_builder = __esm(() => {
9554
+ init_delete_builder();
9497
9555
  init_eager_loader();
9498
9556
  init_insert_builder();
9499
9557
  init_query_builder();
@@ -9873,7 +9931,14 @@ class Model {
9873
9931
  }
9874
9932
  }
9875
9933
  const id = this.#attributes.id;
9876
- await peta.kysely.updateTable(table).set(dirty).where("id", "=", id).execute();
9934
+ try {
9935
+ await peta.kysely.updateTable(table).set(dirty).where("id", "=", id).execute();
9936
+ } catch (e) {
9937
+ const normalized = normalizeError(e, table);
9938
+ if (normalized)
9939
+ throw normalized;
9940
+ throw e;
9941
+ }
9877
9942
  this.#original = { ...this.#attributes };
9878
9943
  await hooks.trigger("afterUpdate", this);
9879
9944
  } else {
@@ -9891,7 +9956,15 @@ class Model {
9891
9956
  }
9892
9957
  }
9893
9958
  }
9894
- const result = await peta.kysely.insertInto(table).values(this.#attributes).executeTakeFirst();
9959
+ let result;
9960
+ try {
9961
+ result = await peta.kysely.insertInto(table).values(this.#attributes).executeTakeFirst();
9962
+ } catch (e) {
9963
+ const normalized = normalizeError(e, table);
9964
+ if (normalized)
9965
+ throw normalized;
9966
+ throw e;
9967
+ }
9895
9968
  const insertId = result?.insertId;
9896
9969
  if (insertId !== undefined) {
9897
9970
  this.#attributes.id = Number(insertId);
@@ -9914,7 +9987,14 @@ class Model {
9914
9987
  if (id === undefined)
9915
9988
  throw new ModelNotFoundError(table);
9916
9989
  await hooks.trigger("beforeDelete", this);
9917
- await peta.kysely.deleteFrom(table).where("id", "=", id).execute();
9990
+ try {
9991
+ await peta.kysely.deleteFrom(table).where("id", "=", id).execute();
9992
+ } catch (e) {
9993
+ const normalized = normalizeError(e, table);
9994
+ if (normalized)
9995
+ throw normalized;
9996
+ throw e;
9997
+ }
9918
9998
  this.#exists = false;
9919
9999
  await hooks.trigger("afterDelete", this);
9920
10000
  }
@@ -10001,7 +10081,15 @@ class Model {
10001
10081
  const results = [];
10002
10082
  for (const data of dataArray) {
10003
10083
  const instance = this.hydrate(data);
10004
- const result = await trx.insertInto(this.table).values(data).executeTakeFirst();
10084
+ let result;
10085
+ try {
10086
+ result = await trx.insertInto(this.table).values(data).executeTakeFirst();
10087
+ } catch (e) {
10088
+ const normalized = normalizeError(e, this.table);
10089
+ if (normalized)
10090
+ throw normalized;
10091
+ throw e;
10092
+ }
10005
10093
  const insertId = result?.insertId;
10006
10094
  if (insertId !== undefined) {
10007
10095
  instance.set("id", Number(insertId));
@@ -17538,6 +17626,11 @@ function validateTransactionSettings(settings) {
17538
17626
  }
17539
17627
 
17540
17628
  // src/peta.ts
17629
+ import { resolve } from "path";
17630
+ function isModelClass(value2) {
17631
+ return typeof value2 === "function" && typeof value2.table === "string" && value2.table.length > 0 && typeof value2.columns === "object" && value2.columns !== null;
17632
+ }
17633
+
17541
17634
  class Peta {
17542
17635
  kysely;
17543
17636
  #models = new Map;
@@ -17551,11 +17644,30 @@ class Peta {
17551
17644
  this.#models.set(table, modelClass);
17552
17645
  modelClass.peta = this;
17553
17646
  }
17554
- registerAll(classes) {
17647
+ registerAll(...classes) {
17648
+ if (classes.length === 1 && Array.isArray(classes[0])) {
17649
+ classes = classes[0];
17650
+ }
17555
17651
  for (const cls of classes) {
17556
17652
  this.register(cls);
17557
17653
  }
17558
17654
  }
17655
+ async discover(pattern2) {
17656
+ const bunModule = await Promise.resolve(globalThis.Bun).catch(() => null);
17657
+ const Glob = bunModule?.Glob ?? null;
17658
+ if (!Glob) {
17659
+ throw new Error("peta.discover() requires Bun \u2014 use peta.registerAll() directly in other runtimes");
17660
+ }
17661
+ for await (const file of new Glob(pattern2).scan()) {
17662
+ const abs = resolve(file);
17663
+ const mod = await import(abs);
17664
+ for (const value2 of Object.values(mod)) {
17665
+ if (isModelClass(value2)) {
17666
+ this.register(value2);
17667
+ }
17668
+ }
17669
+ }
17670
+ }
17559
17671
  getModel(table) {
17560
17672
  return this.#models.get(table);
17561
17673
  }
@@ -17575,7 +17687,7 @@ class Peta {
17575
17687
  }
17576
17688
  // src/relations/relation.ts
17577
17689
  var thunkCache = new WeakMap;
17578
- function resolve(thunk) {
17690
+ function resolve2(thunk) {
17579
17691
  let cls = thunkCache.get(thunk);
17580
17692
  if (!cls) {
17581
17693
  cls = thunk();
@@ -17610,7 +17722,7 @@ class Relation {
17610
17722
  this.#relatedThunk = relatedThunk;
17611
17723
  }
17612
17724
  get relatedModelClass() {
17613
- return resolve(this.#relatedThunk);
17725
+ return resolve2(this.#relatedThunk);
17614
17726
  }
17615
17727
  }
17616
17728
 
@@ -17798,13 +17910,13 @@ class HasManyThrough extends Relation {
17798
17910
  this.#options = options;
17799
17911
  }
17800
17912
  get foreignKey() {
17801
- return this.#options.foreignKey ?? guessForeignKey(resolve(this.#throughThunk));
17913
+ return this.#options.foreignKey ?? guessForeignKey(resolve2(this.#throughThunk));
17802
17914
  }
17803
17915
  get localKey() {
17804
17916
  return this.#options.localKey ?? "id";
17805
17917
  }
17806
17918
  get throughModelClass() {
17807
- return resolve(this.#throughThunk);
17919
+ return resolve2(this.#throughThunk);
17808
17920
  }
17809
17921
  get throughForeignKey() {
17810
17922
  return this.#options.throughForeignKey ?? guessForeignKey(this.relatedModelClass);
@@ -17970,6 +18082,7 @@ export {
17970
18082
  HasMany,
17971
18083
  EagerLoader,
17972
18084
  DeleteBuilder,
18085
+ DatabaseError,
17973
18086
  Column,
17974
18087
  Collection,
17975
18088
  BelongsTo,
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../src/model/model.ts"],"names":[],"mappings":"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"}
package/dist/peta.d.ts CHANGED
@@ -9,7 +9,8 @@ export declare class Peta implements PetaLike {
9
9
  readonly kysely: Kysely<any>;
10
10
  constructor(config: PetaConfig);
11
11
  register(modelClass: ModelClass): void;
12
- registerAll(classes: ModelClass[]): void;
12
+ registerAll(...classes: ModelClass[]): void;
13
+ discover(pattern: string): Promise<void>;
13
14
  getModel(table: string): ModelClass | undefined;
14
15
  get models(): Map<string, ModelClass>;
15
16
  transaction<T>(fn: (kysely: Kysely<any>) => Promise<T>): Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"peta.d.ts","sourceRoot":"","sources":["../src/peta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;CACjB;AAED,qBAAa,IAAK,YAAW,QAAQ;;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;gBAGhB,MAAM,EAAE,UAAU;IAI9B,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAOtC,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IAMxC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI/C,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAEpC;IAEK,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAInE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAO/B"}
1
+ {"version":3,"file":"peta.d.ts","sourceRoot":"","sources":["../src/peta.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAC/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAEvC,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,OAAO,CAAA;CACjB;AAYD,qBAAa,IAAK,YAAW,QAAQ;;IACnC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;gBAGhB,MAAM,EAAE,UAAU;IAI9B,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAOtC,WAAW,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI;IASrC,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAiB9C,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAI/C,IAAI,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAEpC;IAEK,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAInE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAO/B"}
package/dist/types.d.ts CHANGED
@@ -7,7 +7,8 @@ export type ModelId = number & {
7
7
  export interface PetaLike {
8
8
  readonly kysely: Kysely<any>;
9
9
  register(modelClass: ModelClass): void;
10
- registerAll(classes: ModelClass[]): void;
10
+ registerAll(...classes: ModelClass[]): void;
11
+ discover(pattern: string): Promise<void>;
11
12
  getModel(table: string): ModelClass | undefined;
12
13
  readonly models: Map<string, ModelClass>;
13
14
  transaction<T>(fn: (kysely: Kysely<any>) => Promise<T>): Promise<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE/C,OAAO,CAAC,MAAM,KAAK,EAAE,OAAO,MAAM,CAAA;AAClC,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG;IAAE,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,CAAA;AAErD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAA;IACtC,WAAW,CAAC,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;IAC/C,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACxC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACnE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AAE/C,OAAO,CAAC,MAAM,KAAK,EAAE,OAAO,MAAM,CAAA;AAClC,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG;IAAE,CAAC,KAAK,CAAC,EAAE,SAAS,CAAA;CAAE,CAAA;AAErD,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI,CAAA;IACtC,WAAW,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,GAAG,IAAI,CAAA;IAC3C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAA;IAC/C,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACxC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAA;IACnE,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;CACzB"}
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "peta-orm",
3
3
  "type": "module",
4
4
  "private": false,
5
- "version": "0.1.0",
5
+ "version": "0.1.2",
6
6
  "description": "ORM for Bun, built on Kysely",
7
7
  "license": "MIT",
8
8
  "module": "src/index.ts",
@@ -24,14 +24,14 @@
24
24
  },
25
25
  "peerDependencies": {
26
26
  "kysely": "^0.27.0",
27
- "typescript": "^5"
28
- },
29
- "devDependencies": {
30
- "@biomejs/biome": "^2.4.16",
31
- "@types/bun": "latest",
32
- "kysely": "^0.27.0",
33
- "kysely-bun-sqlite": "^0.4.0",
34
- "typescript": "^5"
27
+ "typescript": "^6.0.0"
28
+ },
29
+ "devDependencies": {
30
+ "@biomejs/biome": "^2.4.16",
31
+ "@types/bun": "latest",
32
+ "kysely": "^0.27.0",
33
+ "kysely-bun-sqlite": "^0.4.0",
34
+ "typescript": "^6.0.0"
35
35
  },
36
36
  "scripts": {
37
37
  "test": "bun test",