effect-qb 0.19.0 → 4.0.0-beta.92
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 +7 -1
- package/dist/index.js +1987 -679
- package/dist/mysql.js +1486 -616
- package/dist/postgres/metadata.js +1334 -263
- package/dist/postgres.js +3374 -2308
- package/dist/sqlite.js +1569 -627
- package/dist/standard.js +1982 -674
- package/package.json +2 -4
- package/src/internal/coercion/rules.ts +13 -1
- package/src/internal/column-state.d.ts +3 -3
- package/src/internal/column-state.ts +13 -12
- package/src/internal/column.ts +8 -8
- package/src/internal/datatypes/define.ts +5 -0
- package/src/internal/datatypes/lookup.ts +67 -18
- package/src/internal/datatypes/matrix.ts +903 -0
- package/src/internal/datatypes/shape.ts +2 -0
- package/src/internal/dialect-renderers/mysql.ts +6 -4
- package/src/internal/dialect-renderers/postgres.ts +6 -4
- package/src/internal/dialect-renderers/sqlite.ts +6 -4
- package/src/internal/dialect.ts +1 -1
- package/src/internal/executor.ts +56 -43
- package/src/internal/json/path-access.ts +351 -0
- package/src/internal/query.d.ts +1 -1
- package/src/internal/query.ts +1 -1
- package/src/internal/runtime/driver-value-mapping.ts +3 -3
- package/src/internal/runtime/schema.ts +28 -38
- package/src/internal/runtime/value.ts +20 -23
- package/src/internal/scalar.d.ts +1 -1
- package/src/internal/scalar.ts +2 -1
- package/src/internal/schema-derivation.d.ts +7 -7
- package/src/internal/schema-derivation.ts +11 -11
- package/src/internal/standard-dsl.ts +118 -28
- package/src/internal/table.ts +451 -120
- package/src/mysql/column.ts +6 -6
- package/src/mysql/datatypes/index.ts +1 -0
- package/src/mysql/datatypes/spec.ts +6 -176
- package/src/mysql/executor.ts +4 -6
- package/src/mysql/function/temporal.ts +1 -1
- package/src/mysql/internal/dsl.ts +113 -16
- package/src/mysql/json.ts +1 -33
- package/src/mysql/renderer.ts +13 -6
- package/src/mysql/type.ts +60 -0
- package/src/mysql.ts +3 -1
- package/src/postgres/check.ts +1 -0
- package/src/postgres/column.ts +11 -11
- package/src/postgres/datatypes/index.ts +1 -0
- package/src/postgres/datatypes/spec.ts +6 -260
- package/src/postgres/executor.ts +4 -6
- package/src/postgres/foreign-key.ts +24 -0
- package/src/postgres/function/temporal.ts +1 -1
- package/src/postgres/index.ts +1 -0
- package/src/postgres/internal/dsl.ts +119 -21
- package/src/postgres/json-extension.ts +7 -0
- package/src/postgres/json.ts +726 -173
- package/src/postgres/jsonb.ts +0 -1
- package/src/postgres/primary-key.ts +24 -0
- package/src/postgres/renderer.ts +13 -6
- package/src/postgres/schema-management.ts +1 -6
- package/src/postgres/schema.ts +16 -8
- package/src/postgres/table.ts +111 -113
- package/src/postgres/type.ts +86 -4
- package/src/postgres/unique.ts +32 -0
- package/src/postgres.ts +12 -6
- package/src/sqlite/column.ts +6 -6
- package/src/sqlite/datatypes/index.ts +1 -0
- package/src/sqlite/datatypes/spec.ts +6 -94
- package/src/sqlite/executor.ts +4 -6
- package/src/sqlite/function/temporal.ts +1 -1
- package/src/sqlite/internal/dsl.ts +97 -5
- package/src/sqlite/json.ts +1 -32
- package/src/sqlite/renderer.ts +13 -6
- package/src/sqlite/type.ts +40 -0
- package/src/sqlite.ts +3 -1
- package/src/standard/cast.ts +113 -0
- package/src/standard/check.ts +17 -0
- package/src/standard/column.ts +10 -10
- package/src/standard/datatypes/index.ts +2 -2
- package/src/standard/datatypes/spec.ts +10 -96
- package/src/standard/foreign-key.ts +37 -0
- package/src/standard/function/temporal.ts +1 -1
- package/src/standard/index.ts +17 -0
- package/src/standard/json.ts +883 -0
- package/src/standard/primary-key.ts +17 -0
- package/src/standard/renderer.ts +31 -3
- package/src/standard/table.ts +25 -21
- package/src/standard/unique.ts +17 -0
- package/src/standard.ts +14 -0
- package/src/internal/table.d.ts +0 -174
- package/src/postgres/cast.ts +0 -45
|
@@ -114,6 +114,7 @@ import * as ExpressionAst from "../../internal/expression-ast.js"
|
|
|
114
114
|
import { presenceWitnessesOfSourceLike } from "../../internal/implication-runtime.js"
|
|
115
115
|
import type { JsonNode } from "../../internal/json/ast.js"
|
|
116
116
|
import type { JsonPathUsageError } from "../../internal/json/errors.js"
|
|
117
|
+
import { withJsonPathAccess } from "../../internal/json/path-access.js"
|
|
117
118
|
import * as JsonPath from "../../internal/json/path.js"
|
|
118
119
|
import type {
|
|
119
120
|
JsonConcatResult,
|
|
@@ -1553,11 +1554,11 @@ const profile: QueryDialectProfile<Dialect, TextDb, NumericDb, BoolDb, Timestamp
|
|
|
1553
1554
|
|
|
1554
1555
|
const literalSchemaOf = <Value extends LiteralValue>(
|
|
1555
1556
|
value: Value
|
|
1556
|
-
): Schema.
|
|
1557
|
+
): Schema.Top | undefined => {
|
|
1557
1558
|
if (value === null || value instanceof Date) {
|
|
1558
1559
|
return undefined
|
|
1559
1560
|
}
|
|
1560
|
-
return Schema.Literal(value) as Schema.
|
|
1561
|
+
return Schema.Literal(value) as unknown as Schema.Top
|
|
1561
1562
|
}
|
|
1562
1563
|
|
|
1563
1564
|
const literal = <const Value extends LiteralValue>(
|
|
@@ -2402,7 +2403,7 @@ type BinaryPredicateExpression<
|
|
|
2402
2403
|
MergeAggregationTuple<typeof expressions>,
|
|
2403
2404
|
TupleDependencies<typeof expressions>,
|
|
2404
2405
|
Ast
|
|
2405
|
-
> => makeExpression({
|
|
2406
|
+
> => withJsonPathAccess(makeExpression({
|
|
2406
2407
|
runtime: state.runtime,
|
|
2407
2408
|
dbType: state.dbType,
|
|
2408
2409
|
nullability: state.nullability,
|
|
@@ -2410,7 +2411,7 @@ type BinaryPredicateExpression<
|
|
|
2410
2411
|
kind: mergeAggregationManyRuntime(expressions) as MergeAggregationTuple<typeof expressions>,
|
|
2411
2412
|
|
|
2412
2413
|
dependencies: mergeManyDependencies(expressions)
|
|
2413
|
-
}, ast) as AstBackedExpression<
|
|
2414
|
+
}, ast)) as AstBackedExpression<
|
|
2414
2415
|
Runtime,
|
|
2415
2416
|
Db,
|
|
2416
2417
|
Nullability,
|
|
@@ -2431,7 +2432,7 @@ type BinaryPredicateExpression<
|
|
|
2431
2432
|
const makeJsonLiteralExpression = <Value extends JsonLiteralInput>(
|
|
2432
2433
|
value: Value,
|
|
2433
2434
|
dbType: Expression.DbType.Json<any, any> = jsonDb
|
|
2434
|
-
) => makeExpression({
|
|
2435
|
+
) => withJsonPathAccess(makeExpression({
|
|
2435
2436
|
runtime: value as JsonRuntime<Value>,
|
|
2436
2437
|
dbType,
|
|
2437
2438
|
nullability: (value === null ? "always" : "never") as JsonNullabilityOf<Value>,
|
|
@@ -2442,7 +2443,7 @@ type BinaryPredicateExpression<
|
|
|
2442
2443
|
}, {
|
|
2443
2444
|
kind: "literal",
|
|
2444
2445
|
value
|
|
2445
|
-
})
|
|
2446
|
+
}))
|
|
2446
2447
|
|
|
2447
2448
|
const wrapJsonExpression = (
|
|
2448
2449
|
value: Expression.Any,
|
|
@@ -4523,6 +4524,83 @@ type ValidateTargetColumnInput<
|
|
|
4523
4524
|
Columns extends DdlColumnInput
|
|
4524
4525
|
> = ValidateTargetColumns<Target, NormalizeDdlColumns<Columns>> extends never ? never : Columns
|
|
4525
4526
|
|
|
4527
|
+
type SameColumnSet<
|
|
4528
|
+
Left extends readonly string[],
|
|
4529
|
+
Right extends readonly string[]
|
|
4530
|
+
> = string extends Left[number] | Right[number]
|
|
4531
|
+
? false
|
|
4532
|
+
: Exclude<Left[number], Right[number]> extends never
|
|
4533
|
+
? Exclude<Right[number], Left[number]> extends never
|
|
4534
|
+
? true
|
|
4535
|
+
: false
|
|
4536
|
+
: false
|
|
4537
|
+
|
|
4538
|
+
type ConflictArbitersOf<Target extends MutationTargetLike> =
|
|
4539
|
+
Target[typeof Table.TypeId]["conflictArbiters"][number]
|
|
4540
|
+
|
|
4541
|
+
type MatchingConflictArbiter<
|
|
4542
|
+
Target extends MutationTargetLike,
|
|
4543
|
+
Columns extends readonly string[],
|
|
4544
|
+
AllowPartial extends boolean
|
|
4545
|
+
> = ConflictArbitersOf<Target> extends infer Arbiter extends Table.ConflictArbiter
|
|
4546
|
+
? Arbiter extends Table.ConflictArbiter
|
|
4547
|
+
? SameColumnSet<Arbiter["columns"], Columns> extends true
|
|
4548
|
+
? Arbiter["scope"] extends "unconditional"
|
|
4549
|
+
? true
|
|
4550
|
+
: AllowPartial extends true ? true : never
|
|
4551
|
+
: never
|
|
4552
|
+
: never
|
|
4553
|
+
: never
|
|
4554
|
+
|
|
4555
|
+
type HasInlineConflictArbiter<
|
|
4556
|
+
Target extends MutationTargetLike,
|
|
4557
|
+
Columns extends readonly string[]
|
|
4558
|
+
> = Columns extends readonly [infer Column extends Extract<keyof Target[typeof Table.TypeId]["fields"], string>]
|
|
4559
|
+
? Target[typeof Table.TypeId]["fields"][Column] extends { readonly metadata: { readonly primaryKey: true } | { readonly unique: true } }
|
|
4560
|
+
? true
|
|
4561
|
+
: false
|
|
4562
|
+
: false
|
|
4563
|
+
|
|
4564
|
+
type HasConflictArbiter<
|
|
4565
|
+
Target extends MutationTargetLike,
|
|
4566
|
+
Columns extends readonly string[],
|
|
4567
|
+
AllowPartial extends boolean
|
|
4568
|
+
> = string extends Extract<keyof Target[typeof Table.TypeId]["fields"], string>
|
|
4569
|
+
? true
|
|
4570
|
+
: HasInlineConflictArbiter<Target, Columns> extends true
|
|
4571
|
+
? true
|
|
4572
|
+
: true extends MatchingConflictArbiter<Target, Columns, AllowPartial> ? true : false
|
|
4573
|
+
|
|
4574
|
+
type ConflictTargetArbiterError<
|
|
4575
|
+
Columns,
|
|
4576
|
+
AllowPartial extends boolean
|
|
4577
|
+
> = {
|
|
4578
|
+
readonly __effect_qb_error__: "effect-qb: conflict target columns must match a primary key, unique constraint, or unique index"
|
|
4579
|
+
readonly __effect_qb_conflict_columns__: Columns
|
|
4580
|
+
readonly __effect_qb_partial_target__: AllowPartial
|
|
4581
|
+
readonly __effect_qb_hint__: "Declare the target columns as primaryKey/unique, add a table-level Unique.make(...), or use a simple Pg.Index.uniqueIndex(...)"
|
|
4582
|
+
}
|
|
4583
|
+
|
|
4584
|
+
type ValidateConflictColumnInput<
|
|
4585
|
+
Target extends MutationTargetLike,
|
|
4586
|
+
Columns extends DdlColumnInput,
|
|
4587
|
+
AllowPartial extends boolean
|
|
4588
|
+
> = ValidateTargetColumnInput<Target, Columns> extends never
|
|
4589
|
+
? never
|
|
4590
|
+
: HasConflictArbiter<Target, NormalizeDdlColumns<Columns>, AllowPartial> extends true
|
|
4591
|
+
? Columns
|
|
4592
|
+
: ConflictTargetArbiterError<NormalizeDdlColumns<Columns>, AllowPartial>
|
|
4593
|
+
|
|
4594
|
+
type ConflictColumnPlanConstraint<
|
|
4595
|
+
Target extends MutationTargetLike,
|
|
4596
|
+
Columns extends DdlColumnInput,
|
|
4597
|
+
AllowPartial extends boolean
|
|
4598
|
+
> = ValidateTargetColumnInput<Target, Columns> extends never
|
|
4599
|
+
? never
|
|
4600
|
+
: HasConflictArbiter<Target, NormalizeDdlColumns<Columns>, AllowPartial> extends true
|
|
4601
|
+
? unknown
|
|
4602
|
+
: ConflictTargetArbiterError<NormalizeDdlColumns<Columns>, AllowPartial>
|
|
4603
|
+
|
|
4526
4604
|
type CreateIndexOptions<Name extends string = string> = {
|
|
4527
4605
|
readonly name?: NonEmptyStringInput<Name>
|
|
4528
4606
|
readonly unique?: boolean
|
|
@@ -4961,6 +5039,21 @@ type ConflictConstraintNameConstraint<Target> =
|
|
|
4961
5039
|
? { readonly constraint: NonEmptyStringInput<Constraint> }
|
|
4962
5040
|
: unknown
|
|
4963
5041
|
|
|
5042
|
+
type ConflictTargetHasPredicate<Target> =
|
|
5043
|
+
Target extends { readonly where: PredicateInput } ? true : false
|
|
5044
|
+
|
|
5045
|
+
type ConflictTargetPlanConstraint<
|
|
5046
|
+
Target extends MutationTargetLike,
|
|
5047
|
+
ConflictTarget
|
|
5048
|
+
> =
|
|
5049
|
+
ConflictTarget extends { readonly constraint: string }
|
|
5050
|
+
? unknown
|
|
5051
|
+
: ConflictTarget extends { readonly columns: infer Columns extends DdlColumnInput }
|
|
5052
|
+
? ConflictColumnPlanConstraint<Target, Columns, ConflictTargetHasPredicate<ConflictTarget>>
|
|
5053
|
+
: ConflictTarget extends DdlColumnInput
|
|
5054
|
+
? ConflictColumnPlanConstraint<Target, ConflictTarget, false>
|
|
5055
|
+
: unknown
|
|
5056
|
+
|
|
4964
5057
|
type ConflictActionInput<
|
|
4965
5058
|
Target extends MutationTargetLike,
|
|
4966
5059
|
Dialect extends string,
|
|
@@ -5114,6 +5207,11 @@ type MutationTargetTupleDialectConstraint<
|
|
|
5114
5207
|
Dialect extends string
|
|
5115
5208
|
> = Exclude<TableDialectOf<Targets[number]>, Dialect | "standard"> extends never ? unknown : never
|
|
5116
5209
|
|
|
5210
|
+
type TableDialectConstraint<
|
|
5211
|
+
Target extends TableLike,
|
|
5212
|
+
Dialect extends string
|
|
5213
|
+
> = Exclude<TableDialectOf<Target>, Dialect> extends never ? unknown : never
|
|
5214
|
+
|
|
5117
5215
|
type MutationRequiredFromValues<Values extends Record<string, unknown>> = {
|
|
5118
5216
|
[K in keyof Values]: Values[K] extends Expression.Any ? RequiredFromDependencies<DependenciesOf<Values[K]>> : never
|
|
5119
5217
|
}[keyof Values]
|
|
@@ -6268,7 +6366,7 @@ type AsCurriedResult<
|
|
|
6268
6366
|
|
|
6269
6367
|
export interface InsertApi {
|
|
6270
6368
|
<Target extends MutationTargetLike>(
|
|
6271
|
-
target: Target
|
|
6369
|
+
target: Target & TableDialectConstraint<Target, Dialect>
|
|
6272
6370
|
): QueryPlan<
|
|
6273
6371
|
{},
|
|
6274
6372
|
never,
|
|
@@ -6285,7 +6383,7 @@ type AsCurriedResult<
|
|
|
6285
6383
|
EmptyFacts
|
|
6286
6384
|
>
|
|
6287
6385
|
<Target extends MutationTargetLike, Values extends Record<string, unknown>>(
|
|
6288
|
-
target: Target,
|
|
6386
|
+
target: Target & TableDialectConstraint<Target, Dialect>,
|
|
6289
6387
|
values: MutationValuesInput<"insert", Target, Values> & MutationValuesDialectConstraint<Values, Dialect, TextDb, NumericDb, BoolDb, TimestampDb, NullDb>
|
|
6290
6388
|
): QueryPlan<
|
|
6291
6389
|
{},
|
|
@@ -6318,9 +6416,9 @@ type AsCurriedResult<
|
|
|
6318
6416
|
>(
|
|
6319
6417
|
target: ConflictTarget & ConflictConstraintNameConstraint<ConflictTarget>,
|
|
6320
6418
|
options?: Options & ConflictActionUpdateNonEmptyConstraint<Options>
|
|
6321
|
-
|
|
6419
|
+
) =>
|
|
6322
6420
|
<PlanValue extends QueryPlan<any, any, any, any, any, any, any, any, any, any>>(
|
|
6323
|
-
plan: PlanValue & RequireInsertStatement<PlanValue>
|
|
6421
|
+
plan: PlanValue & RequireInsertStatement<PlanValue> & ConflictTargetPlanConstraint<MutationTargetOfPlan<PlanValue>, ConflictTarget>
|
|
6324
6422
|
) => QueryPlan<
|
|
6325
6423
|
SelectionOfPlan<PlanValue>,
|
|
6326
6424
|
Exclude<RequiredOfPlan<PlanValue> | ConflictRequired<UpdateValues, Options, ConflictTarget>, AvailableNames<AvailableOfPlan<PlanValue>>>,
|
|
@@ -6357,7 +6455,7 @@ type AsCurriedResult<
|
|
|
6357
6455
|
EmptyFacts
|
|
6358
6456
|
>
|
|
6359
6457
|
<Target extends MutationTargetLike, Values extends Record<string, unknown>>(
|
|
6360
|
-
target: Target,
|
|
6458
|
+
target: Target & TableDialectConstraint<Target, Dialect>,
|
|
6361
6459
|
values: MutationValuesInput<"update", Target, Values> & UpdateValuesNonEmptyConstraint<Values> & MutationValuesDialectConstraint<Values, Dialect, TextDb, NumericDb, BoolDb, TimestampDb, NullDb>
|
|
6362
6460
|
): QueryPlan<
|
|
6363
6461
|
{},
|
|
@@ -6382,9 +6480,9 @@ type AsCurriedResult<
|
|
|
6382
6480
|
const Columns extends DdlColumnInput,
|
|
6383
6481
|
UpdateValues extends MutationInputOf<Table.UpdateOf<Target>> | undefined = undefined
|
|
6384
6482
|
>(
|
|
6385
|
-
target: Target,
|
|
6483
|
+
target: Target & TableDialectConstraint<Target, Dialect>,
|
|
6386
6484
|
values: Values & MutationValuesDialectConstraint<Values, Dialect, TextDb, NumericDb, BoolDb, TimestampDb, NullDb>,
|
|
6387
|
-
conflictColumns:
|
|
6485
|
+
conflictColumns: ValidateConflictColumnInput<Target, Columns, false>,
|
|
6388
6486
|
updateValues?: UpdateValues & UpdateValuesNonEmptyConstraint<Exclude<UpdateValues, undefined>> & MutationValuesDialectConstraint<Exclude<UpdateValues, undefined>, Dialect, TextDb, NumericDb, BoolDb, TimestampDb, NullDb>
|
|
6389
6487
|
) => QueryPlan<
|
|
6390
6488
|
{},
|
|
@@ -6406,7 +6504,7 @@ type AsCurriedResult<
|
|
|
6406
6504
|
|
|
6407
6505
|
interface DeleteApi {
|
|
6408
6506
|
<Target extends MutationTargetLike>(
|
|
6409
|
-
target: Target
|
|
6507
|
+
target: Target & TableDialectConstraint<Target, Dialect>
|
|
6410
6508
|
): QueryPlan<
|
|
6411
6509
|
{},
|
|
6412
6510
|
never,
|
|
@@ -6442,7 +6540,7 @@ type AsCurriedResult<
|
|
|
6442
6540
|
}
|
|
6443
6541
|
|
|
6444
6542
|
type TruncateApi = <Target extends MutationTargetLike>(
|
|
6445
|
-
target: Target,
|
|
6543
|
+
target: Target & TableDialectConstraint<Target, Dialect>,
|
|
6446
6544
|
options?: TruncateOptions
|
|
6447
6545
|
) => QueryPlan<
|
|
6448
6546
|
{},
|
|
@@ -6469,10 +6567,10 @@ type AsCurriedResult<
|
|
|
6469
6567
|
MatchedPredicate extends PredicateInput | undefined = undefined,
|
|
6470
6568
|
NotMatchedPredicate extends PredicateInput | undefined = undefined
|
|
6471
6569
|
>(
|
|
6472
|
-
target: Target,
|
|
6570
|
+
target: Target & TableDialectConstraint<Target, Dialect>,
|
|
6473
6571
|
source: Source & (
|
|
6474
6572
|
SourceRequiredOf<Source> extends never ? unknown : SourceRequirementError<Source>
|
|
6475
|
-
) &
|
|
6573
|
+
) & MergeSourceNameConstraint<Target, Source> & SourceDialectConstraint<Source, Dialect>,
|
|
6476
6574
|
on: On,
|
|
6477
6575
|
options: MergeOptions<Target, MatchedValues, InsertValues, MatchedPredicate, NotMatchedPredicate>
|
|
6478
6576
|
) => QueryPlan<
|
|
@@ -6674,7 +6772,7 @@ type AsCurriedResult<
|
|
|
6674
6772
|
>
|
|
6675
6773
|
|
|
6676
6774
|
type CreateTableApi = <Target extends SchemaTableLike>(
|
|
6677
|
-
target: Target,
|
|
6775
|
+
target: Target & TableDialectConstraint<Target, Dialect>,
|
|
6678
6776
|
options?: CreateTableOptions
|
|
6679
6777
|
) => QueryPlan<
|
|
6680
6778
|
{},
|
|
@@ -6690,7 +6788,7 @@ type AsCurriedResult<
|
|
|
6690
6788
|
>
|
|
6691
6789
|
|
|
6692
6790
|
type DropTableApi = <Target extends SchemaTableLike>(
|
|
6693
|
-
target: Target,
|
|
6791
|
+
target: Target & TableDialectConstraint<Target, Dialect>,
|
|
6694
6792
|
options?: DropTableOptions
|
|
6695
6793
|
) => QueryPlan<
|
|
6696
6794
|
{},
|
|
@@ -6706,7 +6804,7 @@ type AsCurriedResult<
|
|
|
6706
6804
|
>
|
|
6707
6805
|
|
|
6708
6806
|
type CreateIndexApi = <Target extends SchemaTableLike, const Columns extends DdlColumnInput, Name extends string = string>(
|
|
6709
|
-
target: Target,
|
|
6807
|
+
target: Target & TableDialectConstraint<Target, Dialect>,
|
|
6710
6808
|
columns: Columns & ValidateDdlColumnInput<Target, Columns>,
|
|
6711
6809
|
options?: CreateIndexOptions<Name>
|
|
6712
6810
|
) => QueryPlan<
|
|
@@ -6723,7 +6821,7 @@ type AsCurriedResult<
|
|
|
6723
6821
|
>
|
|
6724
6822
|
|
|
6725
6823
|
type DropIndexApi = <Target extends SchemaTableLike, const Columns extends DdlColumnInput, Name extends string = string>(
|
|
6726
|
-
target: Target,
|
|
6824
|
+
target: Target & TableDialectConstraint<Target, Dialect>,
|
|
6727
6825
|
columns: Columns & ValidateDdlColumnInput<Target, Columns>,
|
|
6728
6826
|
options?: DropIndexOptions<Name>
|
|
6729
6827
|
) => QueryPlan<
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { json } from "./json.js"
|
|
2
|
+
|
|
3
|
+
/** Removes null object fields using Postgres json/jsonb strip-null functions. */
|
|
4
|
+
export const stripNulls = json.stripNulls
|
|
5
|
+
|
|
6
|
+
/** Evaluates a Postgres SQL/JSON path predicate with the @@ operator. */
|
|
7
|
+
export const pathMatch = json.pathMatch
|