vsrepo 1.0.0 → 1.0.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.
- package/package.json +2 -7
- package/src/VSRepository/VSRepoError.d.ts +54 -0
- package/src/VSRepository/VSRepoError.js +33 -0
- package/src/VSRepository/VSRepository.d.ts +381 -0
- package/src/VSRepository/VSRepository.js +1112 -0
- package/src/db.ts +14 -0
- package/src/generated/prisma/browser.ts +44 -0
- package/src/generated/prisma/client.ts +66 -0
- package/src/generated/prisma/commonInputTypes.ts +370 -0
- package/src/generated/prisma/enums.ts +38 -0
- package/src/generated/prisma/internal/class.ts +246 -0
- package/src/generated/prisma/internal/prismaNamespace.ts +1195 -0
- package/src/generated/prisma/internal/prismaNamespaceBrowser.ts +163 -0
- package/src/generated/prisma/models/Admin.ts +1342 -0
- package/src/generated/prisma/models/CommonUser.ts +1592 -0
- package/src/generated/prisma/models/Post.ts +1594 -0
- package/src/generated/prisma/models/PostTag.ts +1380 -0
- package/src/generated/prisma/models/User.ts +1519 -0
- package/src/generated/prisma/models.ts +16 -0
- package/src/repositories/base.ts +38 -0
- package/src/repositories/categoriaRepository.ts +56 -0
- package/src/repositories/commonUser.repository.ts +45 -0
- package/src/repositories/perfilRepository.ts +29 -0
- package/src/repositories/postagemRepository.ts +71 -0
- package/src/repositories/user.repository.ts +57 -0
- package/src/repositories/usuarioRepository.ts +151 -0
- package/src/tests/base-methods/user.bm.test.ts +57 -0
- package/src/tests/postagem.test.ts +140 -0
- package/src/tests/usuario.test.ts +200 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "vsrepo",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Uma biblioteca de repositório virtual para Prisma",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"types": "src/index.d.ts",
|
|
@@ -10,12 +10,7 @@
|
|
|
10
10
|
"test:usuario": "tsx ./src/tests/usuario.test.ts"
|
|
11
11
|
},
|
|
12
12
|
"files": [
|
|
13
|
-
"src
|
|
14
|
-
"src/VSRepository.d.ts",
|
|
15
|
-
"src/VSRepoError.js",
|
|
16
|
-
"src/VSRepoError.d.ts",
|
|
17
|
-
"src/index.js",
|
|
18
|
-
"src/index.d.ts"
|
|
13
|
+
"src"
|
|
19
14
|
],
|
|
20
15
|
"keywords": [
|
|
21
16
|
"prisma",
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Literal types representing the library's internal error codes.
|
|
3
|
+
*/
|
|
4
|
+
export type VSRepoErrorType =
|
|
5
|
+
| 'VSREPO_CONFIG'
|
|
6
|
+
| 'VSREPO_BUILD'
|
|
7
|
+
| 'VSREPO_EXTEND'
|
|
8
|
+
| 'VSREPO_RUNTIME';
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* Base class for all errors thrown by the Virtual Schema Repository.
|
|
12
|
+
*/
|
|
13
|
+
export declare abstract class VSRepoError extends Error {
|
|
14
|
+
/** Internal code used to identify the error category. */
|
|
15
|
+
abstract readonly type: VSRepoErrorType;
|
|
16
|
+
|
|
17
|
+
constructor(message: string, type: VSRepoErrorType);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Thrown when an invalid configuration or setup inconsistency is detected
|
|
22
|
+
* before or during repository initialization.
|
|
23
|
+
*/
|
|
24
|
+
export declare class VSRepoConfigError extends VSRepoError {
|
|
25
|
+
readonly type: 'VSREPO_CONFIG';
|
|
26
|
+
constructor(message: string);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Thrown when the Prisma instance injection fails or when the repository
|
|
31
|
+
* cannot be finalized through `.build()`.
|
|
32
|
+
*/
|
|
33
|
+
export declare class VSRepoBuildError extends VSRepoError {
|
|
34
|
+
readonly type: 'VSREPO_BUILD';
|
|
35
|
+
constructor(message: string);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* Thrown when an error occurs while injecting new methods into the
|
|
40
|
+
* repository through `.extend()`.
|
|
41
|
+
*/
|
|
42
|
+
export declare class VSRepoExtendError extends VSRepoError {
|
|
43
|
+
readonly type: 'VSREPO_EXTEND';
|
|
44
|
+
constructor(message: string);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Thrown when dynamic operations fail at runtime, such as when invalid
|
|
49
|
+
* arguments are passed to methods.
|
|
50
|
+
*/
|
|
51
|
+
export declare class VSRepoRuntimeError extends VSRepoError {
|
|
52
|
+
readonly type: 'VSREPO_RUNTIME';
|
|
53
|
+
constructor(message: string);
|
|
54
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// * Essa é a classe de erro base, pode ser usada em debug para saber se um erro lançado veio do VSRepository
|
|
2
|
+
export class VSRepoError extends Error {
|
|
3
|
+
constructor(message, type){
|
|
4
|
+
super(message);
|
|
5
|
+
this.name = this.constructor.name;
|
|
6
|
+
this.type = type; // * Tipo do erro para debug
|
|
7
|
+
}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
// * Dessa em diante são classes de erros específicas que estendem da base para saber em qual estágio do VSRepository foi lançado o erro, não vou detalhar cada uma pq o nome é auto explicativo
|
|
11
|
+
export class VSRepoConfigError extends VSRepoError {
|
|
12
|
+
constructor(message){
|
|
13
|
+
super(message, "VSREPO_CONFIG");
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export class VSRepoBuildError extends VSRepoError {
|
|
18
|
+
constructor(message){
|
|
19
|
+
super(message, "VSREPO_BUILD");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export class VSRepoExtendError extends VSRepoError {
|
|
24
|
+
constructor(message){
|
|
25
|
+
super(message, "VSREPO_EXTEND");
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export class VSRepoRuntimeError extends VSRepoError {
|
|
30
|
+
constructor(message){
|
|
31
|
+
super(message, "VSREPO_RUNTIME");
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,381 @@
|
|
|
1
|
+
import { Prisma, PrismaClient } from '@vsrepo/prisma/types';
|
|
2
|
+
|
|
3
|
+
export type DbClient = PrismaClient;
|
|
4
|
+
export type DbTransaction = Prisma.TransactionClient;
|
|
5
|
+
export type ClientOrTransaction = DbClient | DbTransaction;
|
|
6
|
+
|
|
7
|
+
export * from './VSRepoError';
|
|
8
|
+
|
|
9
|
+
type OrderPattern = {
|
|
10
|
+
[key: string]: 'asc' | 'desc' | { _count: 'asc' | 'desc' } | OrderPattern;
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
export type PaginationOptions<TCursor = unknown> = {
|
|
14
|
+
skip?: number;
|
|
15
|
+
take?: number;
|
|
16
|
+
cursor?: TCursor;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export type OrderOptions = OrderPattern | OrderPattern[];
|
|
20
|
+
|
|
21
|
+
type ValidMethodPatterns =
|
|
22
|
+
| `existsBy${string}` | `findBy${string}` | `findUniqueBy${string}`
|
|
23
|
+
| `findFirstBy${string}` | `findFirst${string}` | `findManyBy${string}`
|
|
24
|
+
| `findMany${string}` | `createManyAndReturn${string}` | `createMany${string}`
|
|
25
|
+
| `create${string}` | `updateManyAndReturnBy${string}` | `updateManyBy${string}`
|
|
26
|
+
| `updateBy${string}` | `upsertBy${string}` | `deleteManyBy${string}`
|
|
27
|
+
| `deleteBy${string}` | `countBy${string}` | `count${string}`
|
|
28
|
+
| `findWhere${string}` | `findListWhere${string}`;
|
|
29
|
+
|
|
30
|
+
// Modificadores consolidados em Unions para processamento rápido
|
|
31
|
+
type Modifiers =
|
|
32
|
+
| 'NotStartsWith' | 'StartsWith' | 'NotEndsWith' | 'EndsWith'
|
|
33
|
+
| 'NotContains' | 'Contains' | 'LessThanEqual' | 'LessThan'
|
|
34
|
+
| 'GreaterThanEqual' | 'GreaterThan' | 'NotIn' | 'In' | 'Not'
|
|
35
|
+
| 'Insensitive' | 'NotInsensitive' | 'InInsensitive' | 'ContainsInsensitive';
|
|
36
|
+
|
|
37
|
+
type StripModifier<S extends string> = S extends `${infer Base}${Modifiers}` ? Base : S;
|
|
38
|
+
|
|
39
|
+
type ExtractFieldName<S extends string> = Uncapitalize<StripModifier<S>>;
|
|
40
|
+
|
|
41
|
+
type IsArrayFilter<S extends string> = S extends `${string}${'NotIn' | 'In'}` ? true : false;
|
|
42
|
+
|
|
43
|
+
type ParseRelation<S extends string> =
|
|
44
|
+
S extends `${infer Rel}Without${infer Rest}` ? [Uncapitalize<Rel>, 'isNot', Rest] :
|
|
45
|
+
S extends `${infer Rel}With${infer Rest}` ? [Uncapitalize<Rel>, 'is', Rest] :
|
|
46
|
+
S extends `${infer Rel}Some${infer Rest}` ? [Uncapitalize<Rel>, 'some', Rest] :
|
|
47
|
+
S extends `${infer Rel}Every${infer Rest}` ? [Uncapitalize<Rel>, 'every', Rest] :
|
|
48
|
+
S extends `${infer Rel}None${infer Rest}` ? [Uncapitalize<Rel>, 'none', Rest] : null;
|
|
49
|
+
|
|
50
|
+
type GetFieldType<T, S extends string, I> = ExtractFieldName<S> extends infer FieldName
|
|
51
|
+
? FieldName extends keyof T
|
|
52
|
+
? IsArrayFilter<S> extends true
|
|
53
|
+
? T[FieldName][]
|
|
54
|
+
: NonNullable<T[FieldName]> extends object | any[]
|
|
55
|
+
? I extends { whereInput: infer W }
|
|
56
|
+
? FieldName extends keyof NonNullable<W> ? NonNullable<W>[FieldName] : T[FieldName]
|
|
57
|
+
: T[FieldName]
|
|
58
|
+
: T[FieldName]
|
|
59
|
+
: ParseRelation<S> extends [infer Rel extends keyof T, any, infer Rest extends string]
|
|
60
|
+
? GetFieldType<NonNullable<T[Rel]> extends any[] ? NonNullable<T[Rel]>[number] : NonNullable<T[Rel]>, Rest, unknown>
|
|
61
|
+
: unknown
|
|
62
|
+
: unknown;
|
|
63
|
+
|
|
64
|
+
// Otimização: Validação O(1) com Union Strings
|
|
65
|
+
type NoArgModifiers = 'IsNull' | 'IsNotNull' | 'IsTrue' | 'IsFalse' | 'None' | 'Some' | 'Every' | 'Without';
|
|
66
|
+
|
|
67
|
+
type IsNoArgModifier<S extends string> =
|
|
68
|
+
S extends `${string}${'StartsWith' | 'EndsWith'}` ? false :
|
|
69
|
+
S extends `${string}${NoArgModifiers | 'With'}` ? true :
|
|
70
|
+
false;
|
|
71
|
+
|
|
72
|
+
type MapToContractTypes<T, Arr extends string[], I> =
|
|
73
|
+
Arr extends [infer First extends string, ...infer Rest extends string[]]
|
|
74
|
+
? First extends ''
|
|
75
|
+
? MapToContractTypes<T, Rest, I>
|
|
76
|
+
: IsNoArgModifier<First> extends true
|
|
77
|
+
? MapToContractTypes<T, Rest, I>
|
|
78
|
+
: [GetFieldType<T, First, I>, ...MapToContractTypes<T, Rest, I>]
|
|
79
|
+
: [];
|
|
80
|
+
|
|
81
|
+
type HasMultipleANDs<S extends string> = S extends `${string}AND${string}AND${string}` ? true : false;
|
|
82
|
+
|
|
83
|
+
type SplitAllTokens<S extends string> =
|
|
84
|
+
S extends `${infer L}AND${infer R}` ? [...SplitAllTokens<L>, ...SplitAllTokens<R>] :
|
|
85
|
+
S extends `${infer L}And${infer R}` ? [...SplitAllTokens<L>, ...SplitAllTokens<R>] :
|
|
86
|
+
S extends `${infer L}Or${infer R}` ? [...SplitAllTokens<L>, ...SplitAllTokens<R>] :
|
|
87
|
+
S extends '' ? [] :
|
|
88
|
+
[S];
|
|
89
|
+
|
|
90
|
+
type ExtractFields<T, R extends string, I> =
|
|
91
|
+
R extends '' ? []
|
|
92
|
+
: FilterNonEmpty<MapToContractTypes<T, SplitAllTokens<R>, I>>;
|
|
93
|
+
|
|
94
|
+
type FilterNonEmpty<T extends unknown[]> =
|
|
95
|
+
T extends [infer First, ...infer Rest]
|
|
96
|
+
? First extends ''
|
|
97
|
+
? FilterNonEmpty<Rest>
|
|
98
|
+
: [First, ...FilterNonEmpty<Rest>]
|
|
99
|
+
: [];
|
|
100
|
+
|
|
101
|
+
type ResolveReturnType<M extends string, TSelected> =
|
|
102
|
+
M extends 'existsBy' ? boolean :
|
|
103
|
+
M extends 'createMany' | 'updateManyBy' | 'deleteManyBy' ? { count: number } :
|
|
104
|
+
M extends 'findMany' | 'createManyAndReturn' | 'updateManyAndReturnBy' | 'findListWhere' | 'findByList' ? TSelected[] :
|
|
105
|
+
M extends 'findUnique' | 'findFirst' | 'findWhere' | 'findByOne' ? TSelected | null :
|
|
106
|
+
M extends 'create' | 'updateBy' | 'upsertBy' | 'deleteBy' ? TSelected :
|
|
107
|
+
M extends 'count' ? number : never;
|
|
108
|
+
|
|
109
|
+
type ExtraArgs<M extends string, R extends string, I> = [
|
|
110
|
+
...(M extends 'upsertBy' ? [update: I extends { updateInput: infer U } ? U : unknown, create: I extends { createInput: infer C } ? C : unknown]
|
|
111
|
+
: M extends 'create' ? [data: I extends { createInput: infer C } ? C : unknown]
|
|
112
|
+
: M extends 'updateBy' ? [data: I extends { updateInput: infer U } ? U : unknown]
|
|
113
|
+
: M extends 'createMany' | 'createManyAndReturn' ? [data: I extends { createManyInput: infer CM } ? CM : unknown]
|
|
114
|
+
: M extends 'updateManyBy' | 'updateManyAndReturnBy' ? [data: I extends { updateManyInput: infer UM } ? UM : unknown]
|
|
115
|
+
: M extends 'findWhere' | 'findListWhere' ? [where: I extends { whereInput: infer W } ? NonNullable<W> : unknown]
|
|
116
|
+
: []),
|
|
117
|
+
...(R extends `${string}PaginatedAndOrdered` ? [pagination: PaginationOptions<I extends { cursorInput: infer C } ? C : unknown>, order: I extends { orderByInput: infer OB } ? OB : OrderOptions]
|
|
118
|
+
: R extends `${string}OrderedAndPaginated` ? [order: I extends { orderByInput: infer OB } ? OB : OrderOptions, pagination: PaginationOptions<I extends { cursorInput: infer C } ? C : unknown>]
|
|
119
|
+
: R extends `${string}Paginated` ? [pagination: PaginationOptions<I extends { cursorInput: infer C } ? C : unknown>]
|
|
120
|
+
: R extends `${string}Ordered` ? [order: I extends { orderByInput: infer OB } ? OB : OrderOptions]
|
|
121
|
+
: [])
|
|
122
|
+
];
|
|
123
|
+
|
|
124
|
+
// A resolução do modelo é feita instantaneamente pela Engine nativa do Prisma Client usando `Prisma.Result`.
|
|
125
|
+
type PrismaDelegate<M extends Prisma.ModelName> = Uncapitalize<M> extends keyof DbClient ? DbClient[Uncapitalize<M>] : never;
|
|
126
|
+
|
|
127
|
+
type FullModelType<M extends Prisma.ModelName> =
|
|
128
|
+
Prisma.Result<PrismaDelegate<M>, {}, 'findMany'> extends Array<infer U> ? U : never;
|
|
129
|
+
|
|
130
|
+
type SelectedModel<M extends Prisma.ModelName, S, SelectModels> =
|
|
131
|
+
[S] extends [false]
|
|
132
|
+
? FullModelType<M>
|
|
133
|
+
: [S] extends [never]
|
|
134
|
+
? FullModelType<M>
|
|
135
|
+
: [S] extends [keyof SelectModels]
|
|
136
|
+
? (Prisma.Result<PrismaDelegate<M>, { select: SelectModels[S] }, 'findMany'> extends Array<infer U> ? U : never)
|
|
137
|
+
: FullModelType<M>;
|
|
138
|
+
|
|
139
|
+
type CleanFields<R extends string> =
|
|
140
|
+
R extends `${infer F}PaginatedAndOrdered` ? F :
|
|
141
|
+
R extends `${infer F}OrderedAndPaginated` ? F :
|
|
142
|
+
R extends `${infer F}Paginated` ? F :
|
|
143
|
+
R extends `${infer F}Ordered` ? F :
|
|
144
|
+
R extends `${infer F}SkipDuplicates` ? F : R;
|
|
145
|
+
|
|
146
|
+
export type MethodOptions<S> = { selectModel?: S | false; db?: ClientOrTransaction };
|
|
147
|
+
export type MethodOptionsModel<T> = MethodOptions<keyof T | false>;
|
|
148
|
+
|
|
149
|
+
type MethodFn<MethodName extends string, T, M extends Prisma.ModelName, R extends string, SelectModels, DefaultSelect extends keyof SelectModels | false, I> =
|
|
150
|
+
<S extends keyof SelectModels | false = DefaultSelect>(...args: [...ExtractFields<T, CleanFields<R>, I>, ...ExtraArgs<MethodName, R, I>, options?: MethodOptions<S>]) => Promise<ResolveReturnType<MethodName, SelectedModel<M, S, SelectModels>>>;
|
|
151
|
+
|
|
152
|
+
// Otimização: Achatamento da inferência de padrões
|
|
153
|
+
type GetMappedMethod<K extends string, MethodConf> =
|
|
154
|
+
K extends `findBy${string}` ? (MethodConf extends { fbMode: 'one' } ? 'findByOne' : 'findByList') :
|
|
155
|
+
K extends `existsBy${string}` ? 'existsBy' :
|
|
156
|
+
K extends `findUniqueBy${string}` ? 'findUnique' :
|
|
157
|
+
K extends `findFirstBy${string}` | `findFirst${string}` ? 'findFirst' :
|
|
158
|
+
K extends `findManyBy${string}` | `findMany${string}` ? 'findMany' :
|
|
159
|
+
K extends `createManyAndReturn${string}` ? 'createManyAndReturn' :
|
|
160
|
+
K extends `createMany${string}` ? 'createMany' :
|
|
161
|
+
K extends `create${string}` ? 'create' : // Precisa ficar depois dos createMany
|
|
162
|
+
K extends `updateManyAndReturnBy${string}` ? 'updateManyAndReturnBy' :
|
|
163
|
+
K extends `updateManyBy${string}` ? 'updateManyBy' :
|
|
164
|
+
K extends `updateBy${string}` ? 'updateBy' : // Precisa ficar depois dos updateMany
|
|
165
|
+
K extends `upsertBy${string}` ? 'upsertBy' :
|
|
166
|
+
K extends `deleteManyBy${string}` ? 'deleteManyBy' :
|
|
167
|
+
K extends `deleteBy${string}` ? 'deleteBy' : // Precisa ficar depois do deleteMany
|
|
168
|
+
K extends `countBy${string}` | `count${string}` ? 'count' :
|
|
169
|
+
K extends `findListWhere${string}` ? 'findListWhere' :
|
|
170
|
+
K extends `findWhere${string}` ? 'findWhere' :
|
|
171
|
+
never;
|
|
172
|
+
|
|
173
|
+
type ExtractPatternBase<K extends string> =
|
|
174
|
+
K extends `${string}By${infer R}` ? R :
|
|
175
|
+
K extends `findFirst${infer R}` | `findMany${infer R}` | `createManyAndReturn${infer R}` | `createMany${infer R}` | `create${infer R}` | `count${infer R}` | `findWhere${infer R}` | `findListWhere${infer R}` ? R : '';
|
|
176
|
+
|
|
177
|
+
type MethodFactory<T, M extends Prisma.ModelName, K extends string, SelectModels, DefaultSelect extends keyof SelectModels | false, I, MethodConf> =
|
|
178
|
+
MethodFn<GetMappedMethod<K, MethodConf>, T, M, ExtractPatternBase<K>, SelectModels, DefaultSelect, I>;
|
|
179
|
+
|
|
180
|
+
type ResolveSelectModel<MethodConf, GlobalConf, SelectModels> =
|
|
181
|
+
MethodConf extends { selectModel: infer S } ? (S extends false ? false : S extends keyof SelectModels ? S : never) :
|
|
182
|
+
GlobalConf extends { defaultSelectModel: infer D } ? (D extends keyof SelectModels ? D : never) : never;
|
|
183
|
+
|
|
184
|
+
type ExtractPkName<T, Config> = Config extends { pkName: infer PK } ? (PK extends keyof T ? PK : never) : never;
|
|
185
|
+
type ExtractSelectModels<Config> = Config extends { selectModels: infer SM } ? SM : {};
|
|
186
|
+
type ExtractDefaultSelect<Config> = Config extends { defaultSelectModel: infer D } ? D : never;
|
|
187
|
+
type ExtractRelations<Config> = Config extends { relations: infer R } ? (R extends object ? R : {}) : {};
|
|
188
|
+
|
|
189
|
+
type DynamicMethods<T, M extends Prisma.ModelName, Config, I> = Config extends { methods: infer Methods }
|
|
190
|
+
? {
|
|
191
|
+
[K in keyof Methods as Methods[K] extends { map: true } ? K : never]: K extends string
|
|
192
|
+
? MethodFactory<T, M, Methods[K] extends { proxyTo: infer P extends string } ? P : K, ExtractSelectModels<Config>, ResolveSelectModel<Methods[K], Config, ExtractSelectModels<Config>>, I, Methods[K]>
|
|
193
|
+
: never;
|
|
194
|
+
}
|
|
195
|
+
: {};
|
|
196
|
+
|
|
197
|
+
export type PrismaModelInputs<M extends Prisma.ModelName> = {
|
|
198
|
+
select: Prisma.TypeMap['model'][M]['operations']['findMany']['args']['select'];
|
|
199
|
+
createInput: Prisma.TypeMap['model'][M]['operations']['create']['args']['data'];
|
|
200
|
+
createManyInput: Prisma.TypeMap['model'][M]['operations']['createMany']['args']['data'];
|
|
201
|
+
updateInput: Prisma.TypeMap['model'][M]['operations']['update']['args']['data'];
|
|
202
|
+
updateManyInput: Prisma.TypeMap['model'][M]['operations']['updateMany']['args']['data'];
|
|
203
|
+
whereInput: Prisma.TypeMap['model'][M]['operations']['findMany']['args']['where'];
|
|
204
|
+
orderByInput: Prisma.TypeMap['model'][M]['operations']['findMany']['args']['orderBy'];
|
|
205
|
+
cursorInput: Prisma.TypeMap['model'][M]['operations']['findMany']['args']['cursor'];
|
|
206
|
+
upsertCreateInput: Prisma.TypeMap['model'][M]['operations']['upsert']['args']['create'];
|
|
207
|
+
upsertUpdateInput: Prisma.TypeMap['model'][M]['operations']['upsert']['args']['update'];
|
|
208
|
+
};
|
|
209
|
+
|
|
210
|
+
export type SelectModel<M extends Prisma.ModelName> = PrismaModelInputs<M>['select'];
|
|
211
|
+
export type SelectModels<M extends Prisma.ModelName> = Record<string, SelectModel<M>>;
|
|
212
|
+
export type WhereModel<M extends Prisma.ModelName> = PrismaModelInputs<M>['whereInput'];
|
|
213
|
+
export type OrdenationModel<M extends Prisma.ModelName> = PrismaModelInputs<M>['orderByInput'];
|
|
214
|
+
export type PaginationModel<M extends Prisma.ModelName> = PaginationOptions<PrismaModelInputs<M>['cursorInput']>;
|
|
215
|
+
export type ModelUpsertInput<M extends Prisma.ModelName> = PrismaModelInputs<M>['upsertCreateInput'];
|
|
216
|
+
|
|
217
|
+
export type MethodConfig<M extends Prisma.ModelName, SelectModels = any> = {
|
|
218
|
+
readonly map: boolean;
|
|
219
|
+
readonly selectModel?: keyof SelectModels | false;
|
|
220
|
+
readonly whereType?: 'overwrite' | 'extending';
|
|
221
|
+
readonly proxyTo?: ValidMethodPatterns;
|
|
222
|
+
readonly pushWhere?: WhereModel<M>;
|
|
223
|
+
readonly fbMode?: 'one' | 'list';
|
|
224
|
+
readonly injectOrdenation?: OrdenationModel<M>;
|
|
225
|
+
readonly injectPagination?: PaginationModel<M>;
|
|
226
|
+
};
|
|
227
|
+
|
|
228
|
+
type BaseMethodConfig<TSelectKeys extends PropertyKey = string> = {
|
|
229
|
+
active?: boolean;
|
|
230
|
+
defaultSelect?: TSelectKeys;
|
|
231
|
+
ignoreRequiredWhere?: boolean;
|
|
232
|
+
};
|
|
233
|
+
|
|
234
|
+
export type BuildConfig<TSelectKeys extends PropertyKey = string> = {
|
|
235
|
+
freeze?: boolean;
|
|
236
|
+
showWorking?: boolean;
|
|
237
|
+
baseMethods?: {
|
|
238
|
+
get?: BaseMethodConfig<TSelectKeys>;
|
|
239
|
+
remove?: BaseMethodConfig<TSelectKeys>;
|
|
240
|
+
save?: BaseMethodConfig<TSelectKeys>;
|
|
241
|
+
};
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
type ResolveMethodDefaultSelect<Config, C, Method extends 'get' | 'remove' | 'save'> =
|
|
245
|
+
C extends { baseMethods: Record<Method, { defaultSelect: infer D }> }
|
|
246
|
+
? D extends keyof ExtractSelectModels<Config> ? D : ExtractDefaultSelect<Config>
|
|
247
|
+
: ExtractDefaultSelect<Config>;
|
|
248
|
+
|
|
249
|
+
type ResolveCurrentReturn<M extends Prisma.ModelName, Models, S, D> =
|
|
250
|
+
[S] extends [false]
|
|
251
|
+
? FullModelType<M>
|
|
252
|
+
: [S] extends [never]
|
|
253
|
+
? ([D] extends [never] ? FullModelType<M> : SelectedModel<M, D, Models>)
|
|
254
|
+
: SelectedModel<M, S, Models>;
|
|
255
|
+
|
|
256
|
+
type RefineSaveResult<R, O> = { [K in keyof R]: K extends keyof O ? (O[K] extends null ? R[K] : NonNullable<R[K]>) : R[K]; };
|
|
257
|
+
|
|
258
|
+
type InjectedGet<
|
|
259
|
+
T, M extends Prisma.ModelName, Config, C extends BuildConfig<any> | undefined,
|
|
260
|
+
TSelects = ExtractSelectModels<Config>,
|
|
261
|
+
TDefault = ExtractDefaultSelect<Config>,
|
|
262
|
+
TPk = ExtractPkName<T, Config>
|
|
263
|
+
> = C extends { baseMethods: { get: { active: false } } } ? {} : {
|
|
264
|
+
get<S extends keyof TSelects | false = ResolveMethodDefaultSelect<Config, C, 'get'>>(
|
|
265
|
+
pk: T[TPk extends keyof T ? TPk : never], options?: MethodOptions<S>
|
|
266
|
+
): Promise<ResolveCurrentReturn<M, TSelects, S, TDefault> | null>;
|
|
267
|
+
};
|
|
268
|
+
|
|
269
|
+
type InjectedRemove<
|
|
270
|
+
T, M extends Prisma.ModelName, Config, C extends BuildConfig<any> | undefined,
|
|
271
|
+
TSelects = ExtractSelectModels<Config>,
|
|
272
|
+
TDefault = ExtractDefaultSelect<Config>,
|
|
273
|
+
TPk = ExtractPkName<T, Config>
|
|
274
|
+
> = C extends { baseMethods: { remove: { active: false } } } ? {} : {
|
|
275
|
+
remove<S extends keyof TSelects | false = ResolveMethodDefaultSelect<Config, C, 'remove'>>(
|
|
276
|
+
pk: T[TPk extends keyof T ? TPk : never], options?: MethodOptions<S>
|
|
277
|
+
): Promise<ResolveCurrentReturn<M, TSelects, S, TDefault>>;
|
|
278
|
+
};
|
|
279
|
+
|
|
280
|
+
export type DistributiveOmit<T, K extends keyof any> = T extends any ? Omit<T, K> : never;
|
|
281
|
+
type ExtractUnionProp<T, K extends PropertyKey> = T extends any ? (K extends keyof T ? T[K] : never) : never;
|
|
282
|
+
|
|
283
|
+
type ExtractNestedCreateInput<M extends Prisma.ModelName, K extends PropertyKey> =
|
|
284
|
+
NonNullable<ExtractUnionProp<PrismaModelInputs<M>['createInput'], K>> extends { create?: infer C }
|
|
285
|
+
? Exclude<C, any[]>
|
|
286
|
+
: never;
|
|
287
|
+
|
|
288
|
+
type RelationPayload<TField, TRelationConfig, M extends Prisma.ModelName, K extends PropertyKey> = NonNullable<TField> extends any[]
|
|
289
|
+
? (ExtractNestedCreateInput<M, K>)[]
|
|
290
|
+
: NonNullable<TField> extends object
|
|
291
|
+
? ExtractNestedCreateInput<M, K> | (TRelationConfig extends { mode: 'oto'; restriction: 'set' } | { mode: 'mto'; nullAble: true } ? null : never)
|
|
292
|
+
: never;
|
|
293
|
+
|
|
294
|
+
export type UpsertWithRelations<T, M extends Prisma.ModelName, TRelations> =
|
|
295
|
+
DistributiveOmit<ModelUpsertInput<M>, keyof TRelations> & {
|
|
296
|
+
[K in Extract<keyof TRelations, keyof T>]?: RelationPayload<T[K], TRelations[K], M, K>;
|
|
297
|
+
};
|
|
298
|
+
|
|
299
|
+
type InjectedSave<
|
|
300
|
+
T, M extends Prisma.ModelName, Config, C extends BuildConfig<any> | undefined,
|
|
301
|
+
TSelects = ExtractSelectModels<Config>,
|
|
302
|
+
TDefault = ExtractDefaultSelect<Config>,
|
|
303
|
+
TRelations = ExtractRelations<Config>
|
|
304
|
+
> = C extends { baseMethods: { save: { active: false } } } ? {} : {
|
|
305
|
+
save<
|
|
306
|
+
O extends UpsertWithRelations<T, M, TRelations>,
|
|
307
|
+
S extends keyof TSelects | false = ResolveMethodDefaultSelect<Config, C, 'save'>
|
|
308
|
+
>(
|
|
309
|
+
obj: O & UpsertWithRelations<T, M, TRelations>,
|
|
310
|
+
options?: MethodOptions<S>
|
|
311
|
+
): Promise<RefineSaveResult<ResolveCurrentReturn<M, TSelects, S, TDefault>, O>>;
|
|
312
|
+
};
|
|
313
|
+
|
|
314
|
+
type InjectedBaseMethods<T, M extends Prisma.ModelName, Config, C extends BuildConfig | undefined> =
|
|
315
|
+
InjectedGet<T, M, Config, C> &
|
|
316
|
+
InjectedRemove<T, M, Config, C> &
|
|
317
|
+
InjectedSave<T, M, Config, C>;
|
|
318
|
+
|
|
319
|
+
export type ExtractRelationConfig<TField> = NonNullable<TField> extends infer NonNull
|
|
320
|
+
? NonNull extends Date | Buffer | Uint8Array ? never
|
|
321
|
+
: NonNull extends any[] ? (NonNull[number] extends object ? { pk: keyof NonNull[number]; mode: 'otm' | 'mtm'; restriction: 'set' | 'add' } : never)
|
|
322
|
+
: NonNull extends object ? ({ pk: keyof NonNull; mode: 'oto'; restriction: 'set' | 'add' } | { pk: keyof NonNull; mode: 'mto'; restriction: 'set' | 'add'; nullAble?: boolean })
|
|
323
|
+
: never
|
|
324
|
+
: never;
|
|
325
|
+
|
|
326
|
+
export type RepositoryRelations<T> = {
|
|
327
|
+
[K in keyof T as ExtractRelationConfig<T[K]> extends never ? never : K]?: ExtractRelationConfig<T[K]>;
|
|
328
|
+
};
|
|
329
|
+
|
|
330
|
+
type AnySelect<M extends Prisma.ModelName> = Prisma.TypeMap['model'][M]['operations']['findMany']['args']['select'];
|
|
331
|
+
|
|
332
|
+
export type RepoConfig<T, M extends Prisma.ModelName, SM extends Record<string, AnySelect<M>> = Record<string, AnySelect<M>>> = {
|
|
333
|
+
tableName: Uncapitalize<M>;
|
|
334
|
+
pkName: keyof T;
|
|
335
|
+
selectModels?: SM;
|
|
336
|
+
defaultSelectModel?: keyof SM;
|
|
337
|
+
requiredWhere?: WhereModel<M>;
|
|
338
|
+
relations?: RepositoryRelations<T>;
|
|
339
|
+
methods?: Record<string, MethodConfig<M, SM>>;
|
|
340
|
+
};
|
|
341
|
+
|
|
342
|
+
export type BuiltRepository<T extends object, M extends Prisma.ModelName, Config extends RepoConfig<T, M>, C extends BuildConfig<keyof ExtractSelectModels<Config>> | undefined> = {
|
|
343
|
+
extend<E>(extensionFunc: (repo: BuiltRepository<T, M, Config, C>) => E): BuiltRepository<T, M, Config, C> & E;
|
|
344
|
+
} & DynamicMethods<T, M, Config, PrismaModelInputs<M>> & InjectedBaseMethods<T, M, Config, C>;
|
|
345
|
+
|
|
346
|
+
export declare class VSRepository<T extends object, M extends Prisma.ModelName, const Config extends RepoConfig<T, M> = RepoConfig<T, M>> {
|
|
347
|
+
readonly config: Config;
|
|
348
|
+
constructor(config: Config);
|
|
349
|
+
build<C extends BuildConfig<keyof ExtractSelectModels<Config>>>(prisma: DbClient, config?: C): BuiltRepository<T, M, Config, C>;
|
|
350
|
+
vsrepocache: never;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
export type RepositoryOf<TRepo, C = undefined, E = unknown> =
|
|
354
|
+
TRepo extends VSRepository<infer T, infer M, infer Config>
|
|
355
|
+
? BuiltRepository<T, M, Config, C> & E
|
|
356
|
+
: never;
|
|
357
|
+
|
|
358
|
+
export type ValidateRepoConfig<T extends object, M extends Prisma.ModelName, Config> = {
|
|
359
|
+
tableName: Uncapitalize<M>;
|
|
360
|
+
pkName: keyof T;
|
|
361
|
+
selectModels?: SelectModels<M>;
|
|
362
|
+
defaultSelectModel?: Config extends { selectModels: infer SM } ? (keyof SM extends never ? string : keyof SM) : string;
|
|
363
|
+
requiredWhere?: WhereModel<M>;
|
|
364
|
+
relations?: RepositoryRelations<T>;
|
|
365
|
+
methods?: {
|
|
366
|
+
[K in keyof (Config extends { methods: infer Meth } ? Meth : {})]: K extends string
|
|
367
|
+
? HasMultipleANDs<K> extends true
|
|
368
|
+
? MethodConfig<M, Config extends { selectModels: infer SM } ? SM : any> & { proxyTo: ValidMethodPatterns }
|
|
369
|
+
: MethodConfig<M, Config extends { selectModels: infer SM } ? SM : any> & (K extends ValidMethodPatterns ? {} : { proxyTo: ValidMethodPatterns })
|
|
370
|
+
: never;
|
|
371
|
+
};
|
|
372
|
+
};
|
|
373
|
+
|
|
374
|
+
export declare function setupVSRepo<T extends object, M extends Prisma.ModelName>(): <
|
|
375
|
+
const SM extends Record<string, SelectModel<M>>,
|
|
376
|
+
const Config extends RepoConfig<T, M, SM>
|
|
377
|
+
>(
|
|
378
|
+
config: Config extends ValidateRepoConfig<T, M, Config>
|
|
379
|
+
? Config
|
|
380
|
+
: ValidateRepoConfig<T, M, Config>
|
|
381
|
+
) => VSRepository<T, M, Config>;
|