bun-query-builder 0.1.26 → 0.1.28

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.
@@ -302,72 +302,42 @@ export type InferPivotColumns<TModel, R extends string> = ResolveDefinition<TMod
302
302
  : Record<string, unknown>
303
303
  : Record<string, unknown>
304
304
  : Record<string, unknown>;
305
- // ============================================================================
306
- // Internal relation name inference helpers
307
- // ============================================================================
308
- declare type InferBelongsToNames<TDef> = (TDef extends { belongsTo: readonly (infer R)[] }
309
- ? R extends string ? Lowercase<R> : never : never)
310
- | (TDef extends { belongsTo: Readonly<Record<infer K, unknown>> }
311
- ? K extends string ? K : never : never);
312
- declare type InferHasManyNames<TDef> = (TDef extends { hasMany: readonly (infer R)[] }
313
- ? R extends string ? Lowercase<R> : never : never)
314
- | (TDef extends { hasMany: Readonly<Record<infer K, unknown>> }
315
- ? K extends string ? K : never : never);
316
- declare type InferHasOneNames<TDef> = (TDef extends { hasOne: readonly (infer R)[] }
317
- ? R extends string ? Lowercase<R> : never : never)
318
- | (TDef extends { hasOne: Readonly<Record<infer K, unknown>> }
319
- ? K extends string ? K : never : never);
320
- declare type InferBelongsToManyNames<TDef> = (TDef extends { belongsToMany: readonly (infer R)[] }
321
- ? R extends string ? Lowercase<R> : R extends { model: infer M extends string } ? Lowercase<M> : never : never)
322
- | (TDef extends { belongsToMany: Readonly<Record<infer K, unknown>> }
323
- ? K extends string ? K : never : never);
324
- declare type InferHasOneThroughNames<TDef> = (TDef extends { hasOneThrough: readonly (infer R)[] }
325
- ? R extends string ? Lowercase<R> : R extends { model: infer M extends string } ? Lowercase<M> : never : never)
326
- | (TDef extends { hasOneThrough: Readonly<Record<infer K, unknown>> }
327
- ? K extends string ? K : never : never);
328
- declare type InferHasManyThroughNames<TDef> = (TDef extends { hasManyThrough: readonly (infer R)[] }
329
- ? R extends string ? Lowercase<R> : R extends { model: infer M extends string } ? Lowercase<M> : never : never)
330
- | (TDef extends { hasManyThrough: Readonly<Record<infer K, unknown>> }
331
- ? K extends string ? K : never : never);
305
+ /**
306
+ * Relation names of one relation declaration. Array form lowercases the
307
+ * (unwrapped) model name; record form uses the keys. The array case MUST be
308
+ * checked first: a tuple also structurally matches `Readonly<Record<...>>`
309
+ * and would otherwise leak its own keys ('length', indices, ...) into the
310
+ * relation-name union.
311
+ */
312
+ declare type RelationKeyOf<V> = V extends readonly (infer E)[]
313
+ ? E extends string ? Lowercase<E>
314
+ : E extends { model: infer M extends string } ? Lowercase<M>
315
+ : never
316
+ : V extends Readonly<Record<infer K, unknown>>
317
+ ? K & string
318
+ : never;
319
+ declare type InferBelongsToNames<TDef> = TDef extends { belongsTo: infer V } ? RelationKeyOf<V> : never;
320
+ declare type InferHasManyNames<TDef> = TDef extends { hasMany: infer V } ? RelationKeyOf<V> : never;
321
+ declare type InferHasOneNames<TDef> = TDef extends { hasOne: infer V } ? RelationKeyOf<V> : never;
322
+ declare type InferBelongsToManyNames<TDef> = TDef extends { belongsToMany: infer V } ? RelationKeyOf<V> : never;
323
+ declare type InferHasOneThroughNames<TDef> = TDef extends { hasOneThrough: infer V } ? RelationKeyOf<V> : never;
324
+ declare type InferHasManyThroughNames<TDef> = TDef extends { hasManyThrough: infer V } ? RelationKeyOf<V> : never;
332
325
  /**
333
326
  * Determine the cardinality of a relation on a model.
334
- * hasMany 'many', hasOne/belongsTo 'one'
327
+ * hasMany / belongsToMany / hasManyThrough / morphMany / morphToMany /
328
+ * morphedByMany → 'many'; hasOne / belongsTo / hasOneThrough / morphOne →
329
+ * 'one'. Both array and record declaration forms are supported via
330
+ * `RelationKeyOf` (array-first, so tuple keys never leak in).
335
331
  */
336
332
  export type RelationCardinality<TModel, R extends string> = ResolveDefinition<TModel> extends infer TDef
337
- ? // hasMany array syntax
338
- (TDef extends { hasMany: readonly (infer M)[] }
339
- ? Lowercase<M & string> extends R ? 'many' : never
340
- : never)
341
- // hasMany object syntax
342
- | (TDef extends { hasMany: Readonly<Record<infer K, unknown>> }
343
- ? K extends string ? K extends R ? 'many' : never : never
344
- : never)
345
- // hasOne array syntax
346
- | (TDef extends { hasOne: readonly (infer M)[] }
347
- ? Lowercase<M & string> extends R ? 'one' : never
348
- : never)
349
- // hasOne object syntax
350
- | (TDef extends { hasOne: Readonly<Record<infer K, unknown>> }
351
- ? K extends string ? K extends R ? 'one' : never : never
352
- : never)
353
- // belongsTo array syntax
354
- | (TDef extends { belongsTo: readonly (infer M)[] }
355
- ? Lowercase<M & string> extends R ? 'one' : never
356
- : never)
357
- // belongsTo object syntax
358
- | (TDef extends { belongsTo: Readonly<Record<infer K, unknown>> }
359
- ? K extends string ? K extends R ? 'one' : never : never
360
- : never)
361
- // belongsToMany array syntax
362
- | (TDef extends { belongsToMany: readonly (infer M)[] }
363
- ? M extends string
364
- ? Lowercase<M> extends R ? 'many' : never
365
- : M extends { model: infer N extends string }
366
- ? Lowercase<N> extends R ? 'many' : never
367
- : never
368
- : never)
369
- // belongsToMany object syntax
370
- | (TDef extends { belongsToMany: Readonly<Record<infer K, unknown>> }
371
- ? K extends string ? K extends R ? 'many' : never : never
372
- : never)
333
+ ? (TDef extends { hasMany: infer V } ? (R extends RelationKeyOf<V> ? 'many' : never) : never)
334
+ | (TDef extends { hasOne: infer V } ? (R extends RelationKeyOf<V> ? 'one' : never) : never)
335
+ | (TDef extends { belongsTo: infer V } ? (R extends RelationKeyOf<V> ? 'one' : never) : never)
336
+ | (TDef extends { belongsToMany: infer V } ? (R extends RelationKeyOf<V> ? 'many' : never) : never)
337
+ | (TDef extends { hasOneThrough: infer V } ? (R extends RelationKeyOf<V> ? 'one' : never) : never)
338
+ | (TDef extends { hasManyThrough: infer V } ? (R extends RelationKeyOf<V> ? 'many' : never) : never)
339
+ | (TDef extends { morphOne: infer V } ? (R extends RelationKeyOf<V> ? 'one' : never) : never)
340
+ | (TDef extends { morphMany: infer V } ? (R extends RelationKeyOf<V> ? 'many' : never) : never)
341
+ | (TDef extends { morphToMany: infer V } ? (R extends RelationKeyOf<V> ? 'many' : never) : never)
342
+ | (TDef extends { morphedByMany: infer V } ? (R extends RelationKeyOf<V> ? 'many' : never) : never)
373
343
  : never;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "bun-query-builder",
3
3
  "type": "module",
4
- "version": "0.1.26",
4
+ "version": "0.1.28",
5
5
  "description": "A simple yet performant query builder for TypeScript. Built with Bun.",
6
6
  "author": "Chris Breuer <chris@stacksjs.org>",
7
7
  "license": "MIT",