peta-orm 0.1.1 → 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
  ```
@@ -282,6 +287,7 @@ bun run examples/07-soft-deletes.ts
282
287
  | 13 | [casting](./examples/13-casting.ts) | $casts, $hidden, $appends, accessors |
283
288
  | 14 | [global-scopes](./examples/14-global-scopes.ts) | addGlobalScope(), withoutGlobalScope() |
284
289
  | 15 | [batch](./examples/15-batch.ts) | insertMany, insertMany() |
290
+ | 16 | [discover](./examples/16-discover.ts) | peta.discover(), rest params |
285
291
 
286
292
  ---
287
293
 
@@ -290,6 +296,7 @@ bun run examples/07-soft-deletes.ts
290
296
  | Module | Key exports | File |
291
297
  |--------|-------------|------|
292
298
  | **Core** | `Peta`, `Model`, `$t`, `Collection` | `src/index.ts` |
299
+ | **Discovery** | `peta.discover(glob)`, `peta.registerAll(...models)` | `src/peta.ts` |
293
300
  | **Columns** | `t.integer()`, `t.string()`, `t.email()`, `.min()`, `.max()`, `.nullable()`, `.default()` | `src/columns/column-types.ts` |
294
301
  | **Builders** | `.where()`, `.with()`, `.paginate()`, `.chunk()`, `.sum()`, `.toSQL()` | `src/builder/query-builder.ts` |
295
302
  | **Relations** | `HasMany`, `BelongsTo`, `HasOne`, `ManyToMany`, `HasManyThrough` | `src/relations/Relation.ts` |
package/dist/index.js CHANGED
@@ -14,6 +14,7 @@ var __export = (target, all) => {
14
14
  });
15
15
  };
16
16
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
17
+ var __require = import.meta.require;
17
18
 
18
19
  // node_modules/@ark/util/out/arrays.js
19
20
  var liftArray = (data) => Array.isArray(data) ? data : [data], spliterate = (arr, predicate) => {
@@ -17625,6 +17626,11 @@ function validateTransactionSettings(settings) {
17625
17626
  }
17626
17627
 
17627
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
+
17628
17634
  class Peta {
17629
17635
  kysely;
17630
17636
  #models = new Map;
@@ -17638,11 +17644,30 @@ class Peta {
17638
17644
  this.#models.set(table, modelClass);
17639
17645
  modelClass.peta = this;
17640
17646
  }
17641
- registerAll(classes) {
17647
+ registerAll(...classes) {
17648
+ if (classes.length === 1 && Array.isArray(classes[0])) {
17649
+ classes = classes[0];
17650
+ }
17642
17651
  for (const cls of classes) {
17643
17652
  this.register(cls);
17644
17653
  }
17645
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
+ }
17646
17671
  getModel(table) {
17647
17672
  return this.#models.get(table);
17648
17673
  }
@@ -17662,7 +17687,7 @@ class Peta {
17662
17687
  }
17663
17688
  // src/relations/relation.ts
17664
17689
  var thunkCache = new WeakMap;
17665
- function resolve(thunk) {
17690
+ function resolve2(thunk) {
17666
17691
  let cls = thunkCache.get(thunk);
17667
17692
  if (!cls) {
17668
17693
  cls = thunk();
@@ -17697,7 +17722,7 @@ class Relation {
17697
17722
  this.#relatedThunk = relatedThunk;
17698
17723
  }
17699
17724
  get relatedModelClass() {
17700
- return resolve(this.#relatedThunk);
17725
+ return resolve2(this.#relatedThunk);
17701
17726
  }
17702
17727
  }
17703
17728
 
@@ -17885,13 +17910,13 @@ class HasManyThrough extends Relation {
17885
17910
  this.#options = options;
17886
17911
  }
17887
17912
  get foreignKey() {
17888
- return this.#options.foreignKey ?? guessForeignKey(resolve(this.#throughThunk));
17913
+ return this.#options.foreignKey ?? guessForeignKey(resolve2(this.#throughThunk));
17889
17914
  }
17890
17915
  get localKey() {
17891
17916
  return this.#options.localKey ?? "id";
17892
17917
  }
17893
17918
  get throughModelClass() {
17894
- return resolve(this.#throughThunk);
17919
+ return resolve2(this.#throughThunk);
17895
17920
  }
17896
17921
  get throughForeignKey() {
17897
17922
  return this.#options.throughForeignKey ?? guessForeignKey(this.relatedModelClass);
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.1",
5
+ "version": "0.1.2",
6
6
  "description": "ORM for Bun, built on Kysely",
7
7
  "license": "MIT",
8
8
  "module": "src/index.ts",