peta-orm 0.1.3 → 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 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:
@@ -302,7 +319,7 @@ bun run examples/07-soft-deletes.ts
302
319
  | **Core** | `Peta`, `Model`, `$t`, `Collection` | `src/index.ts` |
303
320
  | **Discovery** | `peta.discover(glob)`, `peta.registerAll(...models)` | `src/peta.ts` |
304
321
  | **Columns** | `t.integer()`, `t.string()`, `t.email()`, `.min()`, `.max()`, `.nullable()`, `.default()` | `src/columns/column-types.ts` |
305
- | **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` |
306
323
  | **Relations** | `HasMany`, `BelongsTo`, `HasOne`, `ManyToMany`, `HasManyThrough` | `src/relations/Relation.ts` |
307
324
  | **Polymorphic** | `MorphTo`, `MorphMany`, `MorphOne` | `src/relations/Morph.ts` |
308
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;IAKhC,OAAO,IAAI,OAAO,CAAC,CAAC,EAAE,CAAC;IA0BvB,gBAAgB,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAK1C,uBAAuB,IAAI,OAAO,CAAC,CAAC,CAAC;IAMrC,IAAI,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIjD,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAI3C,KAAK,IAAI,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAIrC,KAAK,IAAI;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,SAAS,OAAO,EAAE,CAAA;KAAE;IAKlD,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;IAKxB,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKpC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKpC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKpC,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKpC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAc3E,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,MAAW,GAAG,OAAO,CAAC,OAAO,yBAAyB,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;IAY3G,IAAI,CAAC,GAAG,SAAS,EAAE,OAAO,EAAE,GAAG,IAAI;IAgB7B,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;IAK1D,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAKnC,WAAW,IAAI,IAAI;IAKnB,WAAW,IAAI,IAAI;IAMnB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI;IAShD,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI;IASrD,GAAG,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAI/B,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,iBAAiB,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI;IAItF,eAAe,CAAC,YAAY,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,iBAAiB,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,IAAI;IAgC7F,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAC/D,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAM5C,QAAQ,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAK5D,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IACjE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;IAM9C,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI;IAUzD,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKtB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;IAKvB,MAAM,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKlC,SAAS,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI;IAS/B,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKxD,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI;IAKvD,OAAO,CAAC,GAAG,OAAO,EAAE,MAAM,EAAE,GAAG,IAAI;IAKnC,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI;CAI/D;AAED,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,EAAE,CAAA;IACT,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,MAAM,CAAA;IAChB,YAAY,EAAE,OAAO,CAAA;CACtB"}
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) {
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.3",
5
+ "version": "0.1.4",
6
6
  "description": "ORM for Bun, built on Kysely",
7
7
  "license": "MIT",
8
8
  "module": "src/index.ts",