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 +8 -1
- package/dist/index.js +30 -5
- package/dist/peta.d.ts +2 -1
- package/dist/peta.d.ts.map +1 -1
- package/dist/types.d.ts +2 -1
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
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
|
-
|
|
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
|
|
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
|
|
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(
|
|
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
|
|
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>;
|
package/dist/peta.d.ts.map
CHANGED
|
@@ -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;
|
|
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>;
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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"}
|