peta-orm 0.1.2 → 0.1.4
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 +23 -2
- package/dist/builder/query-builder.d.ts +2 -0
- package/dist/builder/query-builder.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -217,6 +217,23 @@ await User.transaction(async (trx) => {
|
|
|
217
217
|
})
|
|
218
218
|
```
|
|
219
219
|
|
|
220
|
+
### Conditional Chaining
|
|
221
|
+
|
|
222
|
+
```ts
|
|
223
|
+
const posts = await Post.query()
|
|
224
|
+
.where("published", "=", published ?? 1)
|
|
225
|
+
.when(sort?.length, (q) => {
|
|
226
|
+
for (const s of sort) {
|
|
227
|
+
q.orderBy(s.replace(/^-/, ""), s.startsWith("-") ? "desc" : "asc")
|
|
228
|
+
}
|
|
229
|
+
return q
|
|
230
|
+
})
|
|
231
|
+
.unless(sort?.length, (q) => q.orderBy("createdAt", "desc"))
|
|
232
|
+
.execute()
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Both `.when(condition, fn)` and `.unless(condition, fn)` return the query builder, keeping the chain intact. If the condition is truthy, `.when()` applies the callback; `.unless()` does the opposite.
|
|
236
|
+
|
|
220
237
|
### Error Handling
|
|
221
238
|
|
|
222
239
|
Database constraint violations (unique, foreign key) are normalized into a `DatabaseError` across SQLite, PostgreSQL, and MySQL:
|
|
@@ -276,7 +293,7 @@ bun run examples/07-soft-deletes.ts
|
|
|
276
293
|
| 02 | [model-definition](./examples/02-model-definition.ts) | Columns, types, modifiers, timestamps |
|
|
277
294
|
| 03 | [crud](./examples/03-crud.ts) | insert, find, update, delete, paginate |
|
|
278
295
|
| 04 | [relations](./examples/04-relations.ts) | HasMany, BelongsTo, HasOne, eager loading |
|
|
279
|
-
| 05 | [query-builder](./examples/05-query-builder.ts) | where, orderBy, join, has, count |
|
|
296
|
+
| 05 | [query-builder](./examples/05-query-builder.ts) | where, orderBy, join, has, whereHas, whereDoesntHave, count |
|
|
280
297
|
| 06 | [hooks-timestamps](./examples/06-hooks-timestamps.ts) | beforeCreate, afterCreate, registerTimestamps |
|
|
281
298
|
| 07 | [soft-deletes](./examples/07-soft-deletes.ts) | $delete, $restore, $forceDelete, withTrashed |
|
|
282
299
|
| 08 | [collection-paginator](./examples/08-collection-paginator.ts) | Collection, Paginator |
|
|
@@ -288,6 +305,10 @@ bun run examples/07-soft-deletes.ts
|
|
|
288
305
|
| 14 | [global-scopes](./examples/14-global-scopes.ts) | addGlobalScope(), withoutGlobalScope() |
|
|
289
306
|
| 15 | [batch](./examples/15-batch.ts) | insertMany, insertMany() |
|
|
290
307
|
| 16 | [discover](./examples/16-discover.ts) | peta.discover(), rest params |
|
|
308
|
+
| 17 | [instance-methods](./examples/17-instance-methods.ts) | fill, dirty, reset, $reload, $load, $relatedQuery |
|
|
309
|
+
| 18 | [advanced-queries](./examples/18-advanced-queries.ts) | groupBy/having, sum/avg/min/max, chunk, toSQL, updateMany |
|
|
310
|
+
| 19 | [collections-deep](./examples/19-collections-deep.ts) | full Collection + Paginator API |
|
|
311
|
+
| 20 | [advanced-relations](./examples/20-advanced-relations.ts) | HasManyThrough, polymorphic morphs, pivot extras |
|
|
291
312
|
|
|
292
313
|
---
|
|
293
314
|
|
|
@@ -298,7 +319,7 @@ bun run examples/07-soft-deletes.ts
|
|
|
298
319
|
| **Core** | `Peta`, `Model`, `$t`, `Collection` | `src/index.ts` |
|
|
299
320
|
| **Discovery** | `peta.discover(glob)`, `peta.registerAll(...models)` | `src/peta.ts` |
|
|
300
321
|
| **Columns** | `t.integer()`, `t.string()`, `t.email()`, `.min()`, `.max()`, `.nullable()`, `.default()` | `src/columns/column-types.ts` |
|
|
301
|
-
| **Builders** | `.where()`, `.with()`, `.paginate()`, `.chunk()`, `.sum()`, `.toSQL()` | `src/builder/query-builder.ts` |
|
|
322
|
+
| **Builders** | `.where()`, `.with()`, `.paginate()`, `.chunk()`, `.sum()`, `.toSQL()`, `.when()`, `.unless()` | `src/builder/query-builder.ts` |
|
|
302
323
|
| **Relations** | `HasMany`, `BelongsTo`, `HasOne`, `ManyToMany`, `HasManyThrough` | `src/relations/Relation.ts` |
|
|
303
324
|
| **Polymorphic** | `MorphTo`, `MorphMany`, `MorphOne` | `src/relations/Morph.ts` |
|
|
304
325
|
| **Hooks** | `HookManager`, `on()`, `off()`, `trigger()` | `src/hooks/lifecycle.ts` |
|
|
@@ -8,6 +8,8 @@ export declare class ModelQueryBuilder<T extends Model> {
|
|
|
8
8
|
get peta(): PetaLike;
|
|
9
9
|
clone(): ModelQueryBuilder<T>;
|
|
10
10
|
withoutGlobalScope(name: string): this;
|
|
11
|
+
when(condition: unknown, callback: (q: this) => this): this;
|
|
12
|
+
unless(condition: unknown, callback: (q: this) => this): this;
|
|
11
13
|
execute(): Promise<T[]>;
|
|
12
14
|
executeTakeFirst(): Promise<T | undefined>;
|
|
13
15
|
executeTakeFirstOrThrow(): Promise<T>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/builder/query-builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAsB,MAAM,QAAQ,CAAA;AAExD,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACxC,OAAO,EAA+B,KAAK,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAI1E,qBAAa,iBAAiB,CAAC,CAAC,SAAS,KAAK;;gBAUhC,UAAU,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,GAAG,CAAC;IAO3E,IAAI,IAAI,IAAI,QAAQ,CAEnB;IAED,KAAK,IAAI,iBAAiB,CAAC,CAAC,CAAC;IAU7B,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"query-builder.d.ts","sourceRoot":"","sources":["../../src/builder/query-builder.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -9276,6 +9276,16 @@ class ModelQueryBuilder {
|
|
|
9276
9276
|
this.#omitScopes.add(name);
|
|
9277
9277
|
return this;
|
|
9278
9278
|
}
|
|
9279
|
+
when(condition, callback) {
|
|
9280
|
+
if (condition)
|
|
9281
|
+
return callback(this);
|
|
9282
|
+
return this;
|
|
9283
|
+
}
|
|
9284
|
+
unless(condition, callback) {
|
|
9285
|
+
if (!condition)
|
|
9286
|
+
return callback(this);
|
|
9287
|
+
return this;
|
|
9288
|
+
}
|
|
9279
9289
|
async execute() {
|
|
9280
9290
|
const scopes = this.#modelClass.getGlobalScopes?.();
|
|
9281
9291
|
if (scopes) {
|