peta-orm 0.1.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 (48) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +280 -0
  3. package/dist/builder/delete-builder.d.ts +9 -0
  4. package/dist/builder/delete-builder.d.ts.map +1 -0
  5. package/dist/builder/eager-loader.d.ts +13 -0
  6. package/dist/builder/eager-loader.d.ts.map +1 -0
  7. package/dist/builder/index.d.ts +8 -0
  8. package/dist/builder/index.d.ts.map +1 -0
  9. package/dist/builder/insert-builder.d.ts +9 -0
  10. package/dist/builder/insert-builder.d.ts.map +1 -0
  11. package/dist/builder/query-builder.d.ts +61 -0
  12. package/dist/builder/query-builder.d.ts.map +1 -0
  13. package/dist/builder/update-builder.d.ts +9 -0
  14. package/dist/builder/update-builder.d.ts.map +1 -0
  15. package/dist/collection/collection.d.ts +48 -0
  16. package/dist/collection/collection.d.ts.map +1 -0
  17. package/dist/columns/arktype-config.d.ts +12 -0
  18. package/dist/columns/arktype-config.d.ts.map +1 -0
  19. package/dist/columns/column-types.d.ts +27 -0
  20. package/dist/columns/column-types.d.ts.map +1 -0
  21. package/dist/columns/column.d.ts +30 -0
  22. package/dist/columns/column.d.ts.map +1 -0
  23. package/dist/columns/schema-config.d.ts +10 -0
  24. package/dist/columns/schema-config.d.ts.map +1 -0
  25. package/dist/errors/errors.d.ts +17 -0
  26. package/dist/errors/errors.d.ts.map +1 -0
  27. package/dist/hooks/lifecycle.d.ts +11 -0
  28. package/dist/hooks/lifecycle.d.ts.map +1 -0
  29. package/dist/index.d.ts +24 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +17978 -0
  32. package/dist/integrations/elysia.d.ts +12 -0
  33. package/dist/integrations/elysia.d.ts.map +1 -0
  34. package/dist/integrations/hono.d.ts +7 -0
  35. package/dist/integrations/hono.d.ts.map +1 -0
  36. package/dist/model/model.d.ts +83 -0
  37. package/dist/model/model.d.ts.map +1 -0
  38. package/dist/pagination/paginator.d.ts +30 -0
  39. package/dist/pagination/paginator.d.ts.map +1 -0
  40. package/dist/peta.d.ts +18 -0
  41. package/dist/peta.d.ts.map +1 -0
  42. package/dist/relations/morph.d.ts +43 -0
  43. package/dist/relations/morph.d.ts.map +1 -0
  44. package/dist/relations/relation.d.ts +84 -0
  45. package/dist/relations/relation.d.ts.map +1 -0
  46. package/dist/types.d.ts +17 -0
  47. package/dist/types.d.ts.map +1 -0
  48. package/package.json +47 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 zfadhli
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,280 @@
1
+ # Peta ORM
2
+
3
+ **Typed ORM for Bun, built on [Kysely](https://github.com/kysely-org/kysely)** with [ArkType](https://arktype.io) validation.
4
+
5
+ Column types, relations with eager loading, lifecycle hooks, timestamps, soft deletes, casting, serialization control, global scopes, polymorphic relations, and more — all fully typed end-to-end.
6
+
7
+ ```ts
8
+ const user = await User.insert({ name: "Alice", email: "a@b.com" })
9
+ const posts = await user.$relatedQuery("posts").where("published", true).execute()
10
+ const page = await Post.query().with("author").paginate(1, 20)
11
+ ```
12
+
13
+ ---
14
+
15
+ ## Quick Start
16
+
17
+ ```bash
18
+ bun add peta-orm arktype kysely
19
+ bun add -d kysely-bun-sqlite
20
+ ```
21
+
22
+ ```ts
23
+ // db.ts
24
+ import { Database } from "bun:sqlite"
25
+ import { BunSqliteDialect } from "kysely-bun-sqlite"
26
+ import { Peta, $t, ArkTypeSchemaConfig, Model, HasMany } from "peta-orm"
27
+
28
+ const t = $t({ schema: new ArkTypeSchemaConfig() })
29
+
30
+ class User extends Model {
31
+ static override table = "users"
32
+ static override columns = {
33
+ id: t.integer().primaryKey(),
34
+ name: t.string(255).min(2),
35
+ email: t.text().email(),
36
+ }
37
+ static override relations = {
38
+ posts: new HasMany(() => Post),
39
+ }
40
+ }
41
+
42
+ class Post extends Model {
43
+ static override table = "posts"
44
+ static override columns = {
45
+ id: t.integer().primaryKey(),
46
+ userId: t.integer(),
47
+ title: t.string(255),
48
+ }
49
+ }
50
+
51
+ const database = new Database("my-app.db")
52
+ database.run(`CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT NOT NULL)`)
53
+ database.run(`CREATE TABLE IF NOT EXISTS posts (id INTEGER PRIMARY KEY AUTOINCREMENT, userId INTEGER NOT NULL, title TEXT NOT NULL)`)
54
+
55
+ const peta = new Peta({ dialect: new BunSqliteDialect({ database }) })
56
+ peta.registerAll([User, Post])
57
+
58
+ export { peta, User, Post }
59
+ ```
60
+
61
+ ---
62
+
63
+ ## Why Peta ORM?
64
+
65
+ | Feature | Raw Kysely | Peta ORM |
66
+ |---------|-----------|----------|
67
+ | **Validation** | Manual | Automatic from column definitions via ArkType |
68
+ | **Models** | Row types only | Class instances with `$save()`, `$delete()`, `$reload()` |
69
+ | **Relations** | Manual JOINs | Declarative `HasMany`, `BelongsTo`, `HasOne`, `ManyToMany` |
70
+ | **Eager loading** | Manual batch | `.with("posts.author")` — one line, batched queries |
71
+ | **Hooks** | — | `beforeCreate`, `afterUpdate`, `beforeDelete`, etc. |
72
+ | **Soft deletes** | — | `withTrashed()`, `onlyTrashed()`, `$restore()`, `$forceDelete()` |
73
+ | **Casting** | — | `$casts: { meta: "json", flags: "boolean" }` |
74
+ | **Serialization** | — | `$hidden`, `$visible`, `$appends`, accessors |
75
+ | **Pagination** | Manual offset/limit | `.paginate(1, 20)` — returns `{ data, total, perPage, ... }` |
76
+ | **Transactions** | Manual | `Model.transaction(fn)` |
77
+ | **Global scopes** | — | `addGlobalScope("active", qb => ...)` |
78
+
79
+ ---
80
+
81
+ ## Features
82
+
83
+ ### Column Types & Validation
84
+
85
+ ```ts
86
+ const t = $t({ schema: new ArkTypeSchemaConfig() })
87
+
88
+ class User extends Model {
89
+ static override columns = {
90
+ id: t.integer().primaryKey(),
91
+ name: t.string(255).min(2), // min length
92
+ email: t.text().email(), // email format
93
+ age: t.integer().nullable().min(0).max(150).default(0),
94
+ role: t.enum("admin", "user").default("user"),
95
+ score: t.double().nullable(),
96
+ ...t.timestamps(), // createdAt, updatedAt
97
+ }
98
+ }
99
+ ```
100
+
101
+ ### Relations & Eager Loading
102
+
103
+ ```ts
104
+ class User extends Model {
105
+ static override relations = {
106
+ posts: new HasMany(() => Post, { foreignKey: "userId" }),
107
+ profile: new HasOne(() => Profile, { foreignKey: "userId" }),
108
+ }
109
+ }
110
+
111
+ // Eager load with dot notation
112
+ const users = await User.query()
113
+ .with("posts")
114
+ .with("posts.author")
115
+ .with({ posts: (q) => q.where("published", true) })
116
+ .execute()
117
+
118
+ // Lazy load after fetch
119
+ await user.$load("posts")
120
+ await collection.load("posts.author")
121
+
122
+ // Relation query
123
+ const posts = await user.$relatedQuery("posts").where("published", true).execute()
124
+
125
+ // Existence filters
126
+ const authors = await User.query().has("posts").execute()
127
+ const active = await User.query().whereHas("posts", (q) => q.where("published", true)).execute()
128
+ ```
129
+
130
+ ### CRUD & Pagination
131
+
132
+ ```ts
133
+ // Insert
134
+ const user = await User.insert({ name: "Alice", email: "a@b.com" })
135
+
136
+ // Find
137
+ const found = await User.find(1)
138
+ const first = await User.query().where("email", "like", "%@b.com").first()
139
+
140
+ // Update
141
+ user.set("name", "Alice Updated")
142
+ await user.$save()
143
+ await User.update(1, { name: "Alice Updated" })
144
+
145
+ // Delete
146
+ await user.$delete()
147
+ await User.delete(1)
148
+
149
+ // Paginate
150
+ const page = await Post.query().orderBy("id", "asc").paginate(1, 20)
151
+ // → { data: Post[], total, perPage, currentPage, lastPage, hasMorePages }
152
+ ```
153
+
154
+ ### Hooks & Timestamps
155
+
156
+ ```ts
157
+ class User extends Model {
158
+ static {
159
+ this.on("beforeCreate", (user) => { user.email = user.email.toLowerCase() })
160
+ this.on("afterCreate", (user) => { console.log("Created:", user.get("id")) })
161
+ }
162
+ }
163
+
164
+ User.registerTimestamps() // auto-set createdAt/updatedAt
165
+ ```
166
+
167
+ ### Soft Deletes
168
+
169
+ ```ts
170
+ User.registerSoftDeletes()
171
+
172
+ await user.$delete() // sets deletedAt timestamp
173
+ await user.$restore() // clears deletedAt
174
+ await user.$forceDelete() // actually deletes
175
+
176
+ const active = await User.query().execute() // excludes deleted
177
+ const all = await User.query().withTrashed().execute() // includes deleted
178
+ const trashed = await User.query().onlyTrashed().execute() // only deleted
179
+ ```
180
+
181
+ ### Attribute Casting & Serialization
182
+
183
+ ```ts
184
+ class User extends Model {
185
+ static override $casts = {
186
+ meta: "json",
187
+ flags: "boolean",
188
+ createdAt: "date",
189
+ }
190
+ static override $hidden = ["password"]
191
+ static override $visible = ["id", "name", "email"] // whitelist
192
+ static override $appends = ["fullName"]
193
+
194
+ getFullNameAttribute() { return `${this.get("first")} ${this.get("last")}` }
195
+ }
196
+
197
+ const json = user.$toJSON() // password excluded, fullName appended, meta parsed
198
+ ```
199
+
200
+ ### Global Scopes & Transactions
201
+
202
+ ```ts
203
+ User.addGlobalScope("active", (qb) => qb.where("active", "=", 1))
204
+
205
+ // Query without the scope
206
+ await User.query().withoutGlobalScope("active").execute()
207
+
208
+ // Transactions
209
+ await User.transaction(async (trx) => {
210
+ await trx.insertInto("users").values({ name: "A" }).execute()
211
+ await trx.insertInto("posts").values({ userId: 1, title: "B" }).execute()
212
+ })
213
+ ```
214
+
215
+ ### Collection Utilities
216
+
217
+ ```ts
218
+ const users = await User.query().execute()
219
+ const col = new Collection(users)
220
+
221
+ col.pluck("name") // ["Alice", "Bob"]
222
+ col.groupBy("role") // { admin: [...], user: [...] }
223
+ col.load("posts") // eager load relations
224
+ col.sum("score") // aggregate helpers
225
+ col.avg("age")
226
+ col.unique("role")
227
+ col.sortBy("name")
228
+ col.chunk(10) // split into batches
229
+ ```
230
+
231
+ ---
232
+
233
+ ## Examples
234
+
235
+ All self-contained (inline SQLite, run directly):
236
+
237
+ ```bash
238
+ bun run examples/01-basic-setup.ts
239
+ bun run examples/04-relations.ts
240
+ bun run examples/07-soft-deletes.ts
241
+ ```
242
+
243
+ | # | Example | Topic |
244
+ |---|---------|-------|
245
+ | 01 | [basic-setup](./examples/01-basic-setup.ts) | Peta init + SQLite setup |
246
+ | 02 | [model-definition](./examples/02-model-definition.ts) | Columns, types, modifiers, timestamps |
247
+ | 03 | [crud](./examples/03-crud.ts) | insert, find, update, delete, paginate |
248
+ | 04 | [relations](./examples/04-relations.ts) | HasMany, BelongsTo, HasOne, eager loading |
249
+ | 05 | [query-builder](./examples/05-query-builder.ts) | where, orderBy, join, has, count |
250
+ | 06 | [hooks-timestamps](./examples/06-hooks-timestamps.ts) | beforeCreate, afterCreate, registerTimestamps |
251
+ | 07 | [soft-deletes](./examples/07-soft-deletes.ts) | $delete, $restore, $forceDelete, withTrashed |
252
+ | 08 | [collection-paginator](./examples/08-collection-paginator.ts) | Collection, Paginator |
253
+ | 09 | [hono-integration](./examples/09-hono-integration.ts) | Hono app stub |
254
+ | 10 | [elysia-integration](./examples/10-elysia-integration.ts) | Elysia app stub |
255
+ | 11 | [many-to-many](./examples/11-many-to-many.ts) | ManyToMany via pivot table |
256
+ | 12 | [transactions](./examples/12-transactions.ts) | Model.transaction(), rollback |
257
+ | 13 | [casting](./examples/13-casting.ts) | $casts, $hidden, $appends, accessors |
258
+ | 14 | [global-scopes](./examples/14-global-scopes.ts) | addGlobalScope(), withoutGlobalScope() |
259
+ | 15 | [batch](./examples/15-batch.ts) | insertMany, insertMany() |
260
+
261
+ ---
262
+
263
+ ## API Overview
264
+
265
+ | Module | Key exports | File |
266
+ |--------|-------------|------|
267
+ | **Core** | `Peta`, `Model`, `$t`, `Collection` | `src/index.ts` |
268
+ | **Columns** | `t.integer()`, `t.string()`, `t.email()`, `.min()`, `.max()`, `.nullable()`, `.default()` | `src/columns/column-types.ts` |
269
+ | **Builders** | `.where()`, `.with()`, `.paginate()`, `.chunk()`, `.sum()`, `.toSQL()` | `src/builder/query-builder.ts` |
270
+ | **Relations** | `HasMany`, `BelongsTo`, `HasOne`, `ManyToMany`, `HasManyThrough` | `src/relations/Relation.ts` |
271
+ | **Polymorphic** | `MorphTo`, `MorphMany`, `MorphOne` | `src/relations/Morph.ts` |
272
+ | **Hooks** | `HookManager`, `on()`, `off()`, `trigger()` | `src/hooks/lifecycle.ts` |
273
+ | **Paginator** | `Paginator`, `.paginate()` | `src/pagination/Paginator.ts` |
274
+ | **Errors** | `ModelNotFoundError`, `RelationNotFoundError`, `ValidationError` | `src/errors/errors.ts` |
275
+
276
+ ---
277
+
278
+ ## License
279
+
280
+ MIT
@@ -0,0 +1,9 @@
1
+ import type { Kysely } from "kysely";
2
+ import type { Model, ModelClass } from "../model/model";
3
+ import type { PetaLike } from "../types";
4
+ export declare class DeleteBuilder<T extends Model> {
5
+ #private;
6
+ constructor(modelClass: ModelClass<T>, peta: PetaLike, kysely?: Kysely<any>);
7
+ execute(id: number | string): Promise<void>;
8
+ }
9
+ //# sourceMappingURL=delete-builder.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,13 @@
1
+ import type { Model, ModelClass } from "../model/model";
2
+ import type { ModelQueryBuilder } from "./query-builder";
3
+ export interface EagerLoad {
4
+ name: string;
5
+ constraints: ((qb: ModelQueryBuilder<any>) => void) | null;
6
+ }
7
+ export type WithArg = string | Record<string, ((qb: ModelQueryBuilder<any>) => void) | true>;
8
+ export declare class EagerLoader {
9
+ #private;
10
+ load(modelClass: ModelClass, relationData: Record<string, Model | Model[] | null>, models: Model[], names: string[]): Promise<void>;
11
+ loadRelated(models: Model[], el: EagerLoad, modelClass: ModelClass): Promise<void>;
12
+ }
13
+ //# sourceMappingURL=eager-loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"eager-loader.d.ts","sourceRoot":"","sources":["../../src/builder/eager-loader.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AAExD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,WAAW,EAAE,CAAC,CAAC,EAAE,EAAE,iBAAiB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAA;CAC3D;AAED,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,iBAAiB,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,CAAA;AAE5F,qBAAa,WAAW;;IAChB,IAAI,CACR,UAAU,EAAE,UAAU,EACtB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,IAAI,CAAC,EACpD,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC,IAAI,CAAC;IAMV,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;CAyCzF"}
@@ -0,0 +1,8 @@
1
+ export { DeleteBuilder } from "./delete-builder";
2
+ export type { EagerLoad, WithArg } from "./eager-loader";
3
+ export { EagerLoader } from "./eager-loader";
4
+ export { InsertBuilder } from "./insert-builder";
5
+ export type { PaginatedResult } from "./query-builder";
6
+ export { ModelQueryBuilder } from "./query-builder";
7
+ export { UpdateBuilder } from "./update-builder";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/builder/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,YAAY,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAA"}
@@ -0,0 +1,9 @@
1
+ import type { Kysely } from "kysely";
2
+ import type { Model, ModelClass } from "../model/model";
3
+ import type { PetaLike } from "../types";
4
+ export declare class InsertBuilder<T extends Model> {
5
+ #private;
6
+ constructor(modelClass: ModelClass<T>, peta: PetaLike, kysely?: Kysely<any>);
7
+ execute(data: Record<string, unknown>): Promise<T>;
8
+ }
9
+ //# sourceMappingURL=insert-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert-builder.d.ts","sourceRoot":"","sources":["../../src/builder/insert-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,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CA0BzD"}
@@ -0,0 +1,61 @@
1
+ import type { Kysely } from "kysely";
2
+ import type { Model, ModelClass } from "../model/model";
3
+ import type { PetaLike } from "../types";
4
+ import { type WithArg } from "./eager-loader";
5
+ export declare class ModelQueryBuilder<T extends Model> {
6
+ #private;
7
+ constructor(modelClass: ModelClass<T>, peta: PetaLike, kysely?: Kysely<any>);
8
+ get peta(): PetaLike;
9
+ clone(): ModelQueryBuilder<T>;
10
+ withoutGlobalScope(name: string): this;
11
+ execute(): Promise<T[]>;
12
+ executeTakeFirst(): Promise<T | undefined>;
13
+ executeTakeFirstOrThrow(): Promise<T>;
14
+ find(id: number | string): Promise<T | undefined>;
15
+ findOrFail(id: number | string): Promise<T>;
16
+ first(): Promise<T | undefined>;
17
+ toSQL(): {
18
+ sql: string;
19
+ parameters: readonly unknown[];
20
+ };
21
+ count(): Promise<number>;
22
+ sum(column: string): Promise<number>;
23
+ avg(column: string): Promise<number>;
24
+ min(column: string): Promise<number>;
25
+ max(column: string): Promise<number>;
26
+ chunk(size: number, callback: (chunk: T[]) => Promise<void>): Promise<void>;
27
+ paginate(page: number, perPage?: number): Promise<import("../pagination/paginator").Paginator<T>>;
28
+ with(...relations: WithArg[]): this;
29
+ updateMany(data: Record<string, unknown>): Promise<number>;
30
+ deleteMany(): Promise<number>;
31
+ withTrashed(): this;
32
+ onlyTrashed(): this;
33
+ whereIn(column: string, values: unknown[]): this;
34
+ whereInPivot(column: string, values: unknown[]): this;
35
+ has(relationName: string): this;
36
+ whereHas(relationName: string, _callback?: (qb: ModelQueryBuilder<any>) => void): this;
37
+ whereDoesntHave(relationName: string, _callback?: (qb: ModelQueryBuilder<any>) => void): this;
38
+ where(column: unknown, operator: unknown, value: unknown): this;
39
+ where(column: unknown, value: unknown): this;
40
+ whereRef(col1: string, operator: string, col2: string): this;
41
+ orWhere(column: unknown, operator: unknown, value: unknown): this;
42
+ orWhere(column: unknown, value: unknown): this;
43
+ orderBy(column: string, direction?: "asc" | "desc"): this;
44
+ limit(n: number): this;
45
+ offset(n: number): this;
46
+ select(...columns: string[]): this;
47
+ selectAll(table?: string): this;
48
+ innerJoin(table: string, lhs: string, rhs: string): this;
49
+ leftJoin(table: string, lhs: string, rhs: string): this;
50
+ groupBy(...columns: string[]): this;
51
+ having(column: string, operator: string, value: unknown): this;
52
+ }
53
+ export interface PaginatedResult<T> {
54
+ data: T[];
55
+ total: number;
56
+ perPage: number;
57
+ currentPage: number;
58
+ lastPage: number;
59
+ hasMorePages: boolean;
60
+ }
61
+ //# sourceMappingURL=query-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/builder/query-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Kysely } from "kysely";
2
+ import type { Model, ModelClass } from "../model/model";
3
+ import type { PetaLike } from "../types";
4
+ export declare class UpdateBuilder<T extends Model> {
5
+ #private;
6
+ constructor(modelClass: ModelClass<T>, peta: PetaLike, kysely?: Kysely<any>);
7
+ execute(id: number | string, data: Record<string, unknown>): Promise<T>;
8
+ }
9
+ //# sourceMappingURL=update-builder.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,48 @@
1
+ import type { Model } from "../model/model";
2
+ export declare class Collection<T extends Model> {
3
+ #private;
4
+ constructor(items?: T[]);
5
+ get length(): number;
6
+ [Symbol.iterator](): Iterator<T>;
7
+ at(index: number): T | undefined;
8
+ first(): T | undefined;
9
+ last(): T | undefined;
10
+ all(): T[];
11
+ findBy(id: number | string): T | undefined;
12
+ pluck(key: string): readonly unknown[];
13
+ groupBy(key: string): Record<string, T[]>;
14
+ keyBy(key: string): Record<string, T>;
15
+ toJSON(): Record<string, unknown>[];
16
+ map<U>(fn: (item: T, index: number) => U): U[];
17
+ filter(fn: (item: T, index: number) => boolean): Collection<T>;
18
+ reduce<U>(fn: (acc: U, item: T, index: number) => U, initial: U): U;
19
+ forEach(fn: (item: T, index: number) => void): void;
20
+ find(fn: (item: T) => boolean): T | undefined;
21
+ some(fn: (item: T) => boolean): boolean;
22
+ includes(item: T): boolean;
23
+ load(...relations: string[]): Promise<this>;
24
+ get(key: string): unknown[];
25
+ isEmpty(): this is Collection<T> & {
26
+ length: 0;
27
+ };
28
+ isNotEmpty(): this is {
29
+ length: number;
30
+ };
31
+ sum(key: string): number;
32
+ avg(key: string): number;
33
+ min(key: string): number | undefined;
34
+ max(key: string): number | undefined;
35
+ contains(value: unknown, key?: string): boolean;
36
+ unique(key: string): Collection<T>;
37
+ sortBy(key: string, direction?: "asc" | "desc"): Collection<T>;
38
+ shuffle(): Collection<T>;
39
+ take(n: number): Collection<T>;
40
+ skip(n: number): Collection<T>;
41
+ chunk(size: number): Collection<T>[];
42
+ each(fn: (item: T, index: number) => void): this;
43
+ diff(other: Collection<T>): Collection<T>;
44
+ intersect(other: Collection<T>): Collection<T>;
45
+ push(...items: T[]): void;
46
+ concat(other: Collection<T> | T[]): Collection<T>;
47
+ }
48
+ //# sourceMappingURL=collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../src/collection/collection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { Constraint, SchemaConfig } from "./schema-config";
2
+ export declare class ValidationError extends Error {
3
+ readonly errors: unknown;
4
+ constructor(message: string, errors?: unknown);
5
+ }
6
+ export declare class ArkTypeSchemaConfig implements SchemaConfig {
7
+ #private;
8
+ compile(dataType: string, args: unknown[], constraints: Constraint[]): unknown;
9
+ parse<T>(schema: unknown, value: unknown): T;
10
+ assert<T>(schema: unknown, value: unknown): T;
11
+ }
12
+ //# sourceMappingURL=arktype-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arktype-config.d.ts","sourceRoot":"","sources":["../../src/columns/arktype-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE/D,qBAAa,eAAgB,SAAQ,KAAK;IACxC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;gBACZ,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;CAK9C;AAED,qBAAa,mBAAoB,YAAW,YAAY;;IACtD,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO;IAiG9E,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC;IAY5C,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC;CAiB9C"}
@@ -0,0 +1,27 @@
1
+ import { Column } from "./column";
2
+ import type { SchemaConfig } from "./schema-config";
3
+ export interface ColumnTypes {
4
+ integer: () => Column<number>;
5
+ smallint: () => Column<number>;
6
+ bigint: () => Column<number>;
7
+ string: (maxLength?: number) => Column<string>;
8
+ text: () => Column<string>;
9
+ boolean: () => Column<boolean>;
10
+ timestamp: () => Column<string>;
11
+ date: () => Column<string>;
12
+ json: <T = unknown>() => Column<T>;
13
+ jsonb: <T = unknown>() => Column<T>;
14
+ float: () => Column<number>;
15
+ double: () => Column<number>;
16
+ decimal: (precision?: number, scale?: number) => Column<number>;
17
+ uuid: () => Column<string>;
18
+ enum: <T extends string>(...values: T[]) => Column<T>;
19
+ timestamps: () => {
20
+ createdAt: Column<string>;
21
+ updatedAt: Column<string>;
22
+ };
23
+ }
24
+ export declare function $t(config: {
25
+ schema: SchemaConfig;
26
+ }): ColumnTypes;
27
+ //# sourceMappingURL=column-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column-types.d.ts","sourceRoot":"","sources":["../../src/columns/column-types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAA;AACjC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAEnD,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;IAC7B,QAAQ,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9B,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;IAC5B,MAAM,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAA;IAC9C,IAAI,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;IAC1B,OAAO,EAAE,MAAM,MAAM,CAAC,OAAO,CAAC,CAAA;IAC9B,SAAS,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;IAC/B,IAAI,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;IAC1B,IAAI,EAAE,CAAC,CAAC,GAAG,OAAO,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;IAClC,KAAK,EAAE,CAAC,CAAC,GAAG,OAAO,OAAO,MAAM,CAAC,CAAC,CAAC,CAAA;IACnC,KAAK,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;IAC3B,MAAM,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;IAC5B,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,CAAA;IAC/D,IAAI,EAAE,MAAM,MAAM,CAAC,MAAM,CAAC,CAAA;IAC1B,IAAI,EAAE,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC,CAAC,CAAA;IACrD,UAAU,EAAE,MAAM;QAAE,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,CAAA;KAAE,CAAA;CAC3E;AAED,wBAAgB,EAAE,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GAAG,WAAW,CA8BhE"}
@@ -0,0 +1,30 @@
1
+ import type { Constraint, SchemaConfig } from "./schema-config";
2
+ export declare class Column<out T = unknown> {
3
+ #private;
4
+ constructor(schema: SchemaConfig, dataType: string, args?: unknown[]);
5
+ get arkType(): unknown;
6
+ get dataType(): string;
7
+ get args(): readonly unknown[];
8
+ get constraints(): readonly Constraint[];
9
+ get isNullable(): boolean;
10
+ get isPrimaryKey(): boolean;
11
+ get isUnique(): boolean;
12
+ get defaultValue(): unknown;
13
+ hasConstraint(type: string): boolean;
14
+ parse(value: unknown): T;
15
+ assert(value: unknown): T;
16
+ primaryKey(): Column<T>;
17
+ nullable(): Column<T | null>;
18
+ default<V>(value: V): Column<T>;
19
+ unique(): Column<T>;
20
+ index(): Column<T>;
21
+ min(n: number): Column<T>;
22
+ max(n: number): Column<T>;
23
+ email(): Column<T>;
24
+ url(): Column<T>;
25
+ pattern(regex: RegExp | string): Column<T>;
26
+ references(table: () => unknown, columns: string[]): Column<T>;
27
+ }
28
+ export type ColumnShape = Record<string, Column>;
29
+ export type ColumnValue<C> = C extends Column<infer T> ? T : never;
30
+ //# sourceMappingURL=column.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"column.d.ts","sourceRoot":"","sources":["../../src/columns/column.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAE/D,qBAAa,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,OAAO;;gBAOrB,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,GAAE,OAAO,EAAO;IAOxE,IAAI,OAAO,IAAI,OAAO,CAKrB;IAED,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,IAAI,IAAI,SAAS,OAAO,EAAE,CAE7B;IAED,IAAI,WAAW,IAAI,SAAS,UAAU,EAAE,CAEvC;IAED,IAAI,UAAU,IAAI,OAAO,CAExB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,YAAY,IAAI,OAAO,CAK1B;IAED,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIpC,KAAK,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IAIxB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC;IAIzB,UAAU,IAAI,MAAM,CAAC,CAAC,CAAC;IAIvB,QAAQ,IAAI,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC;IAI5B,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;IAI/B,MAAM,IAAI,MAAM,CAAC,CAAC,CAAC;IAInB,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC;IAIlB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAIzB,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAIzB,KAAK,IAAI,MAAM,CAAC,CAAC,CAAC;IAIlB,GAAG,IAAI,MAAM,CAAC,CAAC,CAAC;IAIhB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC;IAK1C,UAAU,CAAC,KAAK,EAAE,MAAM,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC;CAU/D;AAED,MAAM,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;AAEhD,MAAM,MAAM,WAAW,CAAC,CAAC,IAAI,CAAC,SAAS,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAA"}
@@ -0,0 +1,10 @@
1
+ export interface Constraint {
2
+ type: string;
3
+ args: unknown[];
4
+ }
5
+ export interface SchemaConfig {
6
+ compile(dataType: string, args: unknown[], constraints: Constraint[]): unknown;
7
+ parse<T>(schema: unknown, value: unknown): T;
8
+ assert<T>(schema: unknown, value: unknown): T;
9
+ }
10
+ //# sourceMappingURL=schema-config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schema-config.d.ts","sourceRoot":"","sources":["../../src/columns/schema-config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,OAAO,EAAE,CAAA;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,OAAO,CAAA;IAC9E,KAAK,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,CAAA;IAC5C,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,CAAA;CAC9C"}
@@ -0,0 +1,17 @@
1
+ import { ValidationError } from "../columns/arktype-config";
2
+ export { ValidationError };
3
+ export declare class ModelNotFoundError extends Error {
4
+ readonly modelClass?: string;
5
+ readonly id?: number | string;
6
+ constructor(modelClass?: string, id?: number | string);
7
+ }
8
+ export declare class RelationNotFoundError extends Error {
9
+ readonly modelClass?: string;
10
+ readonly relationName?: string;
11
+ constructor(modelClass?: string, relationName?: string);
12
+ }
13
+ export declare class ModelNotRegisteredError extends Error {
14
+ readonly modelClass?: string;
15
+ constructor(modelClass?: string);
16
+ }
17
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,11 @@
1
+ import type { Model } from "../model/model";
2
+ export type LifecycleEvent = "beforeCreate" | "afterCreate" | "beforeUpdate" | "afterUpdate" | "beforeSave" | "afterSave" | "beforeDelete" | "afterDelete" | "beforeRestore" | "afterRestore" | "beforeForceDelete" | "afterForceDelete";
3
+ export type HookCallback = (model: Model) => void | Promise<void>;
4
+ export declare class HookManager {
5
+ #private;
6
+ on(event: LifecycleEvent, callback: HookCallback): () => void;
7
+ off(event: LifecycleEvent, callback: HookCallback): void;
8
+ trigger(event: LifecycleEvent, model: Model): Promise<void>;
9
+ clone(): HookManager;
10
+ }
11
+ //# sourceMappingURL=lifecycle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/hooks/lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAA;AAE3C,MAAM,MAAM,cAAc,GACtB,cAAc,GACd,aAAa,GACb,cAAc,GACd,aAAa,GACb,YAAY,GACZ,WAAW,GACX,cAAc,GACd,aAAa,GACb,eAAe,GACf,cAAc,GACd,mBAAmB,GACnB,kBAAkB,CAAA;AAEtB,MAAM,MAAM,YAAY,GAAG,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;AAEjE,qBAAa,WAAW;;IAGtB,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,IAAI;IAU7D,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAOlD,OAAO,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC;IAQjE,KAAK,IAAI,WAAW;CAOrB"}