joist-core 2.3.0-next.93 → 2.3.0-next.95

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/build/query.d.cts CHANGED
@@ -4,7 +4,7 @@ import { EntityMetadata } from "./EntityMetadata.cjs";
4
4
  import { CheckInput, ExprFromInput, ExprInput, ExpressionSources, ExpressionValue } from "./expressions/types.cjs";
5
5
  import "./expressions/expression.cjs";
6
6
  import { BaseExpr, Expr, ExprContext, ExprLike, InnerJoin, LeftJoin, SqlFragment } from "./Expr.cjs";
7
- import { Table, TableBrand, tableMgmt } from "./Tables.cjs";
7
+ import { Table, TableBrand, referenceJoinSource, tableMgmt } from "./Tables.cjs";
8
8
  import { Entity } from "./Entity.cjs";
9
9
  import { ColumnCondition } from "./QueryParser.cjs";
10
10
  import { AliasAssigner } from "./AliasAssigner.cjs";
@@ -356,12 +356,24 @@ type NameOf<A> = A extends {
356
356
  } ? N : never;
357
357
  /** The names of every alias that was LEFT JOINed; `X` is a naked type parameter so this distributes. */
358
358
  type LeftJoined<X> = X extends LeftJoin<infer A> ? NameOf<A> : never;
359
+ /** Adds default reference targets whose source is already nullable; explicit INNER joins do not inherit. */
360
+ type InheritedLeft<X, Left> = X extends {
361
+ readonly [referenceJoinSource]: infer Src;
362
+ readonly inner: infer A;
363
+ } ? [Extract<Src, Left>] extends [never] ? never : NameOf<A> : never;
364
+ /**
365
+ * Finds all aliases that can be NULL through LEFT joins and subsequent reference joins.
366
+ * I.e. LEFT Book adds Author via Book.author.as(a), then further required references inherit Author's NULL.
367
+ * Alias-name collisions are conservative, as they are for explicit LEFT joins; runtime uses exact handles.
368
+ */
369
+ type NullableSources<X, Left = LeftJoined<X>> = [Exclude<InheritedLeft<X, Left>, Left>] extends [never] ? Left : NullableSources<X, Left | InheritedLeft<X, Left>>;
359
370
  /**
360
371
  * Asks: is this expression's source key among the LEFT-joined sources in this query's join list? If
361
372
  * yes, the value can be `null`, so `R` becomes `R | null`; if no, `R` is unchanged.
362
373
  *
363
374
  * I.e. `MaybeNull<number, "book_stats", [LeftJoin<typeof bookStats>]>` is `number | null`,
364
- * because `book_stats` is in `LeftJoined<J[number]>`; with an inner join it stays `number`.
375
+ * because `book_stats` is in `NullableSources<J[number]>`; with an inner join it stays `number`.
376
+ * Default references from nullable sources are included transitively.
365
377
  *
366
378
  * Source-less expressions (`Src` is `never`, i.e. `b.id.count()`) are never nullified. Untracked ones
367
379
  * (`Src` is `string`, i.e. a `sql.ref` on an unknown table) might come from any left-joined table,
@@ -371,7 +383,7 @@ type LeftJoined<X> = X extends LeftJoin<infer A> ? NameOf<A> : never;
371
383
  * table named `string` would nullify every column in the query. That is why anonymous subqueries
372
384
  * share the literal sentinel `"?"` instead.
373
385
  */
374
- type MaybeNull<R, Src extends string, J extends QueryJoins> = string extends Src ? [LeftJoined<J[number]>] extends [never] ? R : R | null : [Extract<Src, LeftJoined<J[number]>>] extends [never] ? R : R | null;
386
+ type MaybeNull<R, Src extends string, J extends QueryJoins> = string extends Src ? [NullableSources<J[number]>] extends [never] ? R : R | null : [Extract<Src, NullableSources<J[number]>>] extends [never] ? R : R | null;
375
387
  /**
376
388
  * The result row for a query with select `S` and joins `J`.
377
389
  *
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.cts","names":[],"sources":["../src/query.ts"],"mappings":"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"}
1
+ {"version":3,"file":"query.d.cts","names":[],"sources":["../src/query.ts"],"mappings":"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"}
package/build/query.d.mts CHANGED
@@ -4,7 +4,7 @@ import { EntityMetadata } from "./EntityMetadata.mjs";
4
4
  import { CheckInput, ExprFromInput, ExprInput, ExpressionSources, ExpressionValue } from "./expressions/types.mjs";
5
5
  import "./expressions/expression.mjs";
6
6
  import { BaseExpr, Expr, ExprContext, ExprLike, InnerJoin, LeftJoin, SqlFragment } from "./Expr.mjs";
7
- import { Table, TableBrand, tableMgmt } from "./Tables.mjs";
7
+ import { Table, TableBrand, referenceJoinSource, tableMgmt } from "./Tables.mjs";
8
8
  import { Entity } from "./Entity.mjs";
9
9
  import { ColumnCondition } from "./QueryParser.mjs";
10
10
  import { AliasAssigner } from "./AliasAssigner.mjs";
@@ -356,12 +356,24 @@ type NameOf<A> = A extends {
356
356
  } ? N : never;
357
357
  /** The names of every alias that was LEFT JOINed; `X` is a naked type parameter so this distributes. */
358
358
  type LeftJoined<X> = X extends LeftJoin<infer A> ? NameOf<A> : never;
359
+ /** Adds default reference targets whose source is already nullable; explicit INNER joins do not inherit. */
360
+ type InheritedLeft<X, Left> = X extends {
361
+ readonly [referenceJoinSource]: infer Src;
362
+ readonly inner: infer A;
363
+ } ? [Extract<Src, Left>] extends [never] ? never : NameOf<A> : never;
364
+ /**
365
+ * Finds all aliases that can be NULL through LEFT joins and subsequent reference joins.
366
+ * I.e. LEFT Book adds Author via Book.author.as(a), then further required references inherit Author's NULL.
367
+ * Alias-name collisions are conservative, as they are for explicit LEFT joins; runtime uses exact handles.
368
+ */
369
+ type NullableSources<X, Left = LeftJoined<X>> = [Exclude<InheritedLeft<X, Left>, Left>] extends [never] ? Left : NullableSources<X, Left | InheritedLeft<X, Left>>;
359
370
  /**
360
371
  * Asks: is this expression's source key among the LEFT-joined sources in this query's join list? If
361
372
  * yes, the value can be `null`, so `R` becomes `R | null`; if no, `R` is unchanged.
362
373
  *
363
374
  * I.e. `MaybeNull<number, "book_stats", [LeftJoin<typeof bookStats>]>` is `number | null`,
364
- * because `book_stats` is in `LeftJoined<J[number]>`; with an inner join it stays `number`.
375
+ * because `book_stats` is in `NullableSources<J[number]>`; with an inner join it stays `number`.
376
+ * Default references from nullable sources are included transitively.
365
377
  *
366
378
  * Source-less expressions (`Src` is `never`, i.e. `b.id.count()`) are never nullified. Untracked ones
367
379
  * (`Src` is `string`, i.e. a `sql.ref` on an unknown table) might come from any left-joined table,
@@ -371,7 +383,7 @@ type LeftJoined<X> = X extends LeftJoin<infer A> ? NameOf<A> : never;
371
383
  * table named `string` would nullify every column in the query. That is why anonymous subqueries
372
384
  * share the literal sentinel `"?"` instead.
373
385
  */
374
- type MaybeNull<R, Src extends string, J extends QueryJoins> = string extends Src ? [LeftJoined<J[number]>] extends [never] ? R : R | null : [Extract<Src, LeftJoined<J[number]>>] extends [never] ? R : R | null;
386
+ type MaybeNull<R, Src extends string, J extends QueryJoins> = string extends Src ? [NullableSources<J[number]>] extends [never] ? R : R | null : [Extract<Src, NullableSources<J[number]>>] extends [never] ? R : R | null;
375
387
  /**
376
388
  * The result row for a query with select `S` and joins `J`.
377
389
  *
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.mts","names":[],"sources":["../src/query.ts"],"mappings":"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"}
1
+ {"version":3,"file":"query.d.mts","names":[],"sources":["../src/query.ts"],"mappings":"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"}
package/build/query.js CHANGED
@@ -5,7 +5,7 @@ import { fail } from "./utils.js";
5
5
  import { buildWhereClause } from "./drivers/buildUtils.js";
6
6
  import { skipCondition } from "./skipCondition.js";
7
7
  import { BaseExpr, RefExpr, TemplateExpr, asNode, deferredCondition, deferredSym, isExpr, orderByToSql, resolveDeferredConditions } from "./Expr.js";
8
- import { JoinTableHandle, collectionJoin, getTableMetadata, getTableMgmt, isTable, m2mJoinTable } from "./Tables.js";
8
+ import { JoinTableHandle, collectionJoin, getTableMetadata, getTableMgmt, isTable, m2mJoinTable, referenceJoinSource } from "./Tables.js";
9
9
  import { ConditionBuilder } from "./ConditionBuilder.js";
10
10
  import { buildExpr } from "./expressions/expression.js";
11
11
  import { deepFindConditions } from "./QueryParser.pruning.js";
@@ -524,7 +524,7 @@ function projectionOutput(select) {
524
524
  function joinedOutput(output, joins) {
525
525
  if (!joins?.some((join) => join?.left)) return output;
526
526
  const left = /* @__PURE__ */ new Set();
527
- for (const join of joins) if (join?.left) left.add(handleOf(join.left));
527
+ for (const join of resolveReferenceJoins(joins)) if (join.left) left.add(handleOf(join.left));
528
528
  return {
529
529
  kind: output.kind,
530
530
  columns: output.columns.map((column) => {
@@ -533,6 +533,28 @@ function joinedOutput(output, joins) {
533
533
  })
534
534
  };
535
535
  }
536
+ /**
537
+ * Resolves reference joins in declaration order without changing reusable join entries.
538
+ * Only .as() carries a source handle; explicit INNER joins retain their filtering semantics.
539
+ * I.e. LEFT Book followed by Book.author.as(a) adds Author to the set of nullable handles.
540
+ */
541
+ function resolveReferenceJoins(joins) {
542
+ const left = /* @__PURE__ */ new Set();
543
+ return (joins ?? []).filter(isDefined).map((join) => {
544
+ const source = join[referenceJoinSource];
545
+ if (join.inner && source && left.has(source)) {
546
+ const { inner, ...rest } = join;
547
+ const resolved = {
548
+ ...rest,
549
+ left: inner
550
+ };
551
+ left.add(handleOf(inner));
552
+ return resolved;
553
+ }
554
+ if (join.left) left.add(handleOf(join.left));
555
+ return join;
556
+ });
557
+ }
536
558
  /** An output-only nullability adjustment that preserves the selected expression's SQL and conversions. */
537
559
  var OutputExpr = class extends BaseExpr {
538
560
  inner;
@@ -744,7 +766,7 @@ function parseQuery(q, parent, assigner, recursiveSelf) {
744
766
  if (isSetQuery(q)) return parseSetQuery(q, parent, assigner, recursiveSelf);
745
767
  const ctx = new Ctx(assigner, parent);
746
768
  if (recursiveSelf) ctx.setRecursiveSelf(recursiveSelf);
747
- const joinEntries = [...q.join ?? []].filter(isDefined);
769
+ const joinEntries = resolveReferenceJoins(q.join);
748
770
  const ctes = registerCtes(q, ctx, assigner);
749
771
  const parseFrom = registerSource(q.from, ctx, assigner);
750
772
  const pendingJoins = joinEntries.flatMap((j) => {