@ez4/database 0.17.0 → 0.17.1

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.
@@ -1,4 +1,4 @@
1
- import type { DecomposeIndexName, DecomposePrimaryIndexNames, DecomposeUniqueIndexNames } from './indexes.js';
1
+ import type { DecomposeIndexName, PrimaryIndexes, UniqueIndexes } from './indexes.js';
2
2
  import type { RelationMetadata } from './relations.js';
3
3
  import type { Database } from './database.js';
4
4
  import type { Order } from './order.js';
@@ -62,13 +62,13 @@ export declare namespace Query {
62
62
  export type CountInput<T extends Database.Schema, R extends RelationMetadata> = {
63
63
  where?: WhereInput<T, {}, R>;
64
64
  };
65
- export type InsertOneResult<T extends Database.Schema, S extends AnyObject, R extends RelationMetadata> = Record<T, S, R>;
66
- export type UpdateOneResult<T extends Database.Schema, S extends AnyObject, R extends RelationMetadata> = Record<T, S, R> | undefined;
67
- export type FindOneResult<T extends Database.Schema, S extends AnyObject, R extends RelationMetadata> = Record<T, S, R> | undefined;
68
- export type UpsertOneResult<T extends Database.Schema, S extends AnyObject, R extends RelationMetadata> = Record<T, S, R> | undefined;
69
- export type DeleteOneResult<T extends Database.Schema, S extends AnyObject, R extends RelationMetadata> = Record<T, S, R> | undefined;
65
+ export type InsertOneResult<T extends Database.Schema, S extends AnyObject, R extends RelationMetadata> = S extends never ? void : Record<T, S, R>;
66
+ export type UpdateOneResult<T extends Database.Schema, S extends AnyObject, R extends RelationMetadata> = S extends never ? void : Record<T, S, R> | undefined;
67
+ export type FindOneResult<T extends Database.Schema, S extends AnyObject, R extends RelationMetadata> = S extends never ? void : Record<T, S, R> | undefined;
68
+ export type UpsertOneResult<T extends Database.Schema, S extends AnyObject, R extends RelationMetadata> = S extends never ? void : Record<T, S, R> | undefined;
69
+ export type DeleteOneResult<T extends Database.Schema, S extends AnyObject, R extends RelationMetadata> = S extends never ? void : Record<T, S, R> | undefined;
70
+ export type UpdateManyResult<T extends Database.Schema, S extends AnyObject, R extends RelationMetadata> = S extends never ? void : Record<T, S, R>[];
70
71
  export type InsertManyResult = void;
71
- export type UpdateManyResult<T extends Database.Schema, S extends AnyObject, R extends RelationMetadata> = Record<T, S, R>[];
72
72
  export type FindManyResult<T extends Database.Schema, S extends Database.Schema, R extends RelationMetadata, C extends boolean> = C extends true ? {
73
73
  records: Record<T, S, R>[];
74
74
  cursor?: number | string;
@@ -87,8 +87,11 @@ export declare namespace Query {
87
87
  export type OrderInput<I extends Database.Indexes> = {
88
88
  [P in DecomposeIndexName<keyof I>]?: Order;
89
89
  };
90
- export type WhereInput<T extends Database.Schema, I extends Database.Indexes, R extends RelationMetadata> = WhereInputFilters<T, I, R> & WhereNot<WhereInputFilters<T, I, R>> & WhereAnd<WhereInputFilters<T, I, R>> & WhereOr<WhereInputFilters<T, I, R>>;
91
- export type WhereOperators = keyof (WhereNegate<any> & WhereEqual<any> & WhereGreaterThan<any> & WhereGreaterThanOrEqual<any> & WhereLessThan<any> & WhereLessThanOrEqual<any> & WhereIn<any> & WhereBetween<any> & WhereIsMissing & WhereIsNull & WhereStartsWith & WhereContains<any>);
90
+ export type WhereInput<T extends Database.Schema, I extends Database.Indexes, R extends RelationMetadata> = WhereInputFilters<T, I, R> & {
91
+ NOT?: WhereInput<T, {}, R>;
92
+ AND?: WhereInput<T, {}, R>[];
93
+ OR?: WhereInput<T, {}, R>[];
94
+ };
92
95
  type IndexFields<R extends RelationMetadata> = string extends R['indexes'] ? never : R['indexes'];
93
96
  type SelectFields<T extends Database.Schema, R extends RelationMetadata> = IsObjectEmpty<R['selects']> extends true ? T : T & R['selects'];
94
97
  type IncludeFilters<T extends AnyObject, S extends AnyObject> = {
@@ -99,27 +102,26 @@ export declare namespace Query {
99
102
  type WhereObjectField<T extends AnyObject> = {
100
103
  [P in keyof T]?: WhereField<T[P]>;
101
104
  };
102
- type WhereRelationField<T extends AnyObject> = WhereObjectField<T> & WhereNot<WhereObjectField<T>> & WhereAnd<WhereObjectField<T>> & WhereOr<WhereObjectField<T>>;
103
- type WhereRelationFilters<T extends AnyObject> = {
104
- [P in keyof T]?: IsObject<T[P]> extends true ? IsObjectEmpty<T[P]> extends false ? null | WhereRelationField<NonNullable<T[P]>> : null | {} : never;
105
- };
106
- type WhereRequiredFilters<T extends AnyObject, N extends string> = {
107
- [P in N as P extends keyof T ? P : never]: P extends keyof T ? WhereField<T[P]> : never;
108
- };
109
- type WhereOptionalFilters<T extends AnyObject, N extends string> = {
110
- [P in Exclude<keyof T, N>]?: WhereField<T[P]>;
105
+ type WhereRelationField<T extends AnyObject> = WhereObjectField<T> & {
106
+ NOT?: WhereRelationField<T>;
107
+ AND?: WhereRelationField<T>;
108
+ OR?: WhereRelationField<T>;
111
109
  };
112
- type WhereCommonFilters<T extends AnyObject, I extends Database.Indexes> = (WhereRequiredFilters<T, DecomposePrimaryIndexNames<I>> & WhereOptionalFilters<T, DecomposePrimaryIndexNames<I>>) | (WhereRequiredFilters<T, DecomposeUniqueIndexNames<I>> & WhereOptionalFilters<T, DecomposeUniqueIndexNames<I>>);
110
+ type WhereRelationFilters<T extends AnyObject> = {
111
+ [P in keyof T]?: IsObject<T[P]> extends true ? IsObjectEmpty<T[P]> extends false ? null | WhereRelationField<T[P]> : null | {} : never;
112
+ };
113
+ type WhereIndexFields<I extends Database.Indexes> = PrimaryIndexes<I> & UniqueIndexes<I>;
114
+ type WhereRequiredFilters<T extends AnyObject, I extends Database.Indexes> = {
115
+ [P in keyof WhereIndexFields<I>]: {
116
+ [N in DecomposeIndexName<P>]: T[N];
117
+ };
118
+ }[keyof WhereIndexFields<I>];
119
+ type WhereOptionalFilters<T extends AnyObject, I extends Database.Indexes> = {
120
+ [P in Exclude<keyof T, keyof WhereIndexFields<I>>]?: WhereField<T[P]>;
121
+ };
122
+ type WhereCommonFilters<T extends AnyObject, I extends Database.Indexes> = IsObjectEmpty<I> extends true ? WhereObjectField<T> : WhereRequiredFilters<T, I> & WhereOptionalFilters<T, I>;
113
123
  type WhereInputFilters<T extends Database.Schema, I extends Database.Indexes, R extends RelationMetadata> = WhereCommonFilters<T, I> & WhereRelationFilters<R['filters']>;
114
- type WhereNot<T extends AnyObject> = {
115
- NOT?: T | WhereAnd<T> | WhereOr<T>;
116
- };
117
- type WhereAnd<T extends AnyObject> = {
118
- AND?: (T | WhereNot<T> | WhereAnd<T> | WhereOr<T>)[];
119
- };
120
- type WhereOr<T extends AnyObject> = {
121
- OR?: (T | WhereNot<T> | WhereAnd<T> | WhereOr<T>)[];
122
- };
124
+ export type WhereOperators = keyof (WhereNegate<any> & WhereEqual<any> & WhereGreaterThan<any> & WhereGreaterThanOrEqual<any> & WhereLessThan<any> & WhereLessThanOrEqual<any> & WhereIn<any> & WhereBetween<any> & WhereIsMissing & WhereIsNull & WhereStartsWith & WhereContains<any>);
123
125
  type WhereNegate<T> = {
124
126
  not: T | WhereOperations<T>;
125
127
  };
@@ -77,7 +77,7 @@ type OptionalRelationSchemas<T extends Database.Schema, S extends Record<string,
77
77
  /**
78
78
  * Check whether a relation is optional or not.
79
79
  */
80
- type IsOptionalRelation<C, V, T extends Database.Schema, I extends Record<string, Database.Indexes>, E extends boolean> = RelationSourceColumn<C> extends keyof PrimaryIndexes<PropertyType<RelationSourceTable<C>, I>> ? IsUndefined<PropertyType<RelationTargetColumn<V>, T>> extends true ? true : false : RelationSourceColumn<C> extends keyof UniqueIndexes<PropertyType<RelationSourceTable<C>, I>> ? true : E;
80
+ type IsOptionalRelation<C, V, T extends Database.Schema, I extends Record<string, Database.Indexes>, E extends boolean> = RelationSourceColumn<C> extends keyof PrimaryIndexes<PropertyType<RelationSourceTable<C>, I>> ? IsUndefined<PropertyType<RelationTargetColumn<V>, T>> : RelationSourceColumn<C> extends keyof UniqueIndexes<PropertyType<RelationSourceTable<C>, I>> ? true : E;
81
81
  /**
82
82
  * Check whether a column is primary.
83
83
  */
@@ -86,10 +86,14 @@ type IsPrimaryIndex<C, I extends Record<string, Database.Indexes>> = RelationSou
86
86
  * Check whether a column is unique.
87
87
  */
88
88
  type IsUniqueIndex<C, I extends Record<string, Database.Indexes>> = RelationSourceColumn<C> extends keyof UniqueIndexes<PropertyType<RelationSourceTable<C>, I>> ? true : false;
89
+ /**
90
+ * Produce a type corresponding to the source index column type.
91
+ */
92
+ type ExtractSourceIndexType<C, S extends Record<string, Database.Schema>> = PropertyType<RelationSourceTable<C>, S>;
89
93
  /**
90
94
  * Produce a relation schema according to its indexation.
91
95
  */
92
- type RelationSchema<C, V, T extends Database.Schema, S extends Record<string, Database.Schema>, I extends Record<string, Database.Indexes>, E extends boolean> = IsPrimaryIndex<C, I> extends true ? E extends false ? PropertyType<RelationSourceTable<C>, S> : ExclusiveType<PropertyType<RelationSourceTable<C>, S>, {
96
+ type RelationSchema<C, V, T extends Database.Schema, S extends Record<string, Database.Schema>, I extends Record<string, Database.Indexes>, E extends boolean> = IsPrimaryIndex<C, I> extends true ? E extends false ? ExtractSourceIndexType<C, S> : ExclusiveType<ExtractSourceIndexType<C, S>, {
93
97
  [P in RelationTargetColumn<V>]: PropertyType<RelationTargetColumn<V>, T>;
94
- }> : IsUniqueIndex<C, I> extends true ? E extends false ? PropertyType<RelationSourceTable<C>, S> : Omit<PropertyType<RelationSourceTable<C>, S>, RelationSourceColumn<C>> : Omit<PropertyType<RelationSourceTable<C>, S>, RelationSourceColumn<C>>[];
98
+ }> : IsUniqueIndex<C, I> extends true ? E extends false ? ExtractSourceIndexType<C, S> : Omit<ExtractSourceIndexType<C, S>, RelationSourceColumn<C>> : Omit<ExtractSourceIndexType<C, S>, RelationSourceColumn<C>>[];
95
99
  export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ez4/database",
3
3
  "description": "EZ4: Components to build database services",
4
- "version": "0.17.0",
4
+ "version": "0.17.1",
5
5
  "author": "Silas B.",
6
6
  "license": "MIT",
7
7
  "type": "module",