@punks/backend-entity-manager 0.0.165 → 0.0.167
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/dist/cjs/index.js +66 -28
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/types/abstractions/searchParameters.d.ts +1 -1
- package/dist/cjs/types/integrations/repository/typeorm/queryBuilder.d.ts +5 -0
- package/dist/cjs/types/platforms/nest/__test__/server/entities/appDirectories/appDirectory.types.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/server/entities/appEmailLogs/appEmailLog.types.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/server/entities/appEntityVersions/appEntityVersion.types.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/server/entities/appFileReferences/appFileReference.types.d.ts +1 -1
- package/dist/cjs/types/platforms/nest/__test__/server/entities/crmContacts/crmContact.types.d.ts +1 -1
- package/dist/esm/index.js +67 -29
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/types/abstractions/searchParameters.d.ts +1 -1
- package/dist/esm/types/integrations/repository/typeorm/queryBuilder.d.ts +5 -0
- package/dist/esm/types/platforms/nest/__test__/server/entities/appDirectories/appDirectory.types.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/server/entities/appEmailLogs/appEmailLog.types.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/server/entities/appEntityVersions/appEntityVersion.types.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/server/entities/appFileReferences/appFileReference.types.d.ts +1 -1
- package/dist/esm/types/platforms/nest/__test__/server/entities/crmContacts/crmContact.types.d.ts +1 -1
- package/dist/index.d.ts +6 -1
- package/package.json +1 -1
|
@@ -29,7 +29,7 @@ export declare enum SortDirection {
|
|
|
29
29
|
}
|
|
30
30
|
export interface IFullTextQuery {
|
|
31
31
|
term: string;
|
|
32
|
-
fields
|
|
32
|
+
fields: string[];
|
|
33
33
|
}
|
|
34
34
|
export type ISearchQueryRelationsProperty<TProperty> = TProperty extends Promise<infer I> ? ISearchQueryRelationsProperty<NonNullable<I>> | boolean : TProperty extends Array<infer I> ? ISearchQueryRelationsProperty<NonNullable<I>> | boolean : TProperty extends string ? never : TProperty extends number ? never : TProperty extends boolean ? never : TProperty extends Function ? never : TProperty extends Buffer ? never : TProperty extends Date ? never : TProperty extends object ? ISearchQueryRelations<TProperty> | boolean : boolean;
|
|
35
35
|
export type ISearchQueryRelations<TEntity> = {
|
|
@@ -35,6 +35,7 @@ export declare abstract class TypeOrmQueryBuilder<TEntity extends ObjectLiteral,
|
|
|
35
35
|
protected countQueryResults(request: TEntitySearchParameters, context?: IAuthenticationContext<TUserContext>): Promise<number>;
|
|
36
36
|
protected abstract buildSortingClause(request: TEntitySearchParameters): FindOptionsOrder<TEntity>;
|
|
37
37
|
protected abstract buildWhereClause(request: TEntitySearchParameters): FindOptionsWhere<TEntity>[] | FindOptionsWhere<TEntity>;
|
|
38
|
+
protected buildTextSearchClause(request: TEntitySearchParameters): FindOptionsWhere<TEntity>[] | FindOptionsWhere<TEntity>;
|
|
38
39
|
protected abstract buildContextFilter(context?: IAuthenticationContext<TUserContext>): FindOptionsWhere<TEntity>[] | FindOptionsWhere<TEntity>;
|
|
39
40
|
protected abstract calculateFacets(request: TEntitySearchParameters, context?: IAuthenticationContext<TUserContext>): Promise<TFacets>;
|
|
40
41
|
protected calculateFacet<TField extends keyof TEntity, TValue>(field: TField, request: TEntitySearchParameters, context: IAuthenticationContext<TUserContext> | undefined, relations?: FacetRelations): Promise<FacetType<TValue>>;
|
|
@@ -42,4 +43,8 @@ export declare abstract class TypeOrmQueryBuilder<TEntity extends ObjectLiteral,
|
|
|
42
43
|
protected calculateNumericFieldFacets(field: keyof TEntity, request: TEntitySearchParameters, context: IAuthenticationContext<TUserContext> | undefined, relations?: FacetRelations): Promise<NumberFacetsType>;
|
|
43
44
|
protected calculateBooleanFieldFacets(field: keyof TEntity, request: TEntitySearchParameters, context: IAuthenticationContext<TUserContext> | undefined, relations?: FacetRelations): Promise<BooleanFacetsType>;
|
|
44
45
|
protected getRepository(): TypeOrmRepository<TEntity, unknown>;
|
|
46
|
+
private buildSearchRelations;
|
|
47
|
+
private buildWhere;
|
|
48
|
+
private mergeWhereClauses;
|
|
49
|
+
private mergeWheres;
|
|
45
50
|
}
|
|
@@ -18,7 +18,7 @@ export declare class AppDirectorySearchOptions implements ISearchOptions {
|
|
|
18
18
|
}
|
|
19
19
|
export declare class AppDirectoryFullTextQuery implements IFullTextQuery {
|
|
20
20
|
term: string;
|
|
21
|
-
fields
|
|
21
|
+
fields: string[];
|
|
22
22
|
}
|
|
23
23
|
export declare class AppDirectorySearchParameters implements IEntitySearchParameters<AppDirectoryEntity, AppDirectorySorting, AppDirectoryCursor> {
|
|
24
24
|
query?: AppDirectoryFullTextQuery;
|
package/dist/cjs/types/platforms/nest/__test__/server/entities/appEmailLogs/appEmailLog.types.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export declare class AppEmailLogSearchOptions implements ISearchOptions {
|
|
|
18
18
|
}
|
|
19
19
|
export declare class AppEmailLogFullTextQuery implements IFullTextQuery {
|
|
20
20
|
term: string;
|
|
21
|
-
fields
|
|
21
|
+
fields: string[];
|
|
22
22
|
}
|
|
23
23
|
export declare class AppEmailLogSearchParameters implements IEntitySearchParameters<AppEmailLogEntity, AppEmailLogSorting, AppEmailLogCursor> {
|
|
24
24
|
query?: AppEmailLogFullTextQuery;
|
|
@@ -17,7 +17,7 @@ export declare class AppEntityVersionSearchOptions implements ISearchOptions {
|
|
|
17
17
|
}
|
|
18
18
|
export declare class AppEntityVersionFullTextQuery implements IFullTextQuery {
|
|
19
19
|
term: string;
|
|
20
|
-
fields
|
|
20
|
+
fields: string[];
|
|
21
21
|
}
|
|
22
22
|
export declare class AppEntityVersionSearchParameters implements IEntitySearchParameters<AppEntityVersionEntity, AppEntityVersionSorting, AppEntityVersionCursor> {
|
|
23
23
|
query?: AppEntityVersionFullTextQuery;
|
|
@@ -18,7 +18,7 @@ export declare class AppFileReferenceSearchOptions implements ISearchOptions {
|
|
|
18
18
|
}
|
|
19
19
|
export declare class AppFileReferenceFullTextQuery implements IFullTextQuery {
|
|
20
20
|
term: string;
|
|
21
|
-
fields
|
|
21
|
+
fields: string[];
|
|
22
22
|
}
|
|
23
23
|
export declare class AppFileReferenceSearchParameters implements IEntitySearchParameters<AppFileReferenceEntity, AppFileReferenceSorting, AppFileReferenceCursor> {
|
|
24
24
|
query?: AppFileReferenceFullTextQuery;
|
package/dist/cjs/types/platforms/nest/__test__/server/entities/crmContacts/crmContact.types.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export declare class CrmContactSearchOptions implements ISearchOptions {
|
|
|
18
18
|
}
|
|
19
19
|
export declare class CrmContactFullTextQuery implements IFullTextQuery {
|
|
20
20
|
term: string;
|
|
21
|
-
fields
|
|
21
|
+
fields: string[];
|
|
22
22
|
}
|
|
23
23
|
export declare class CrmContactSearchParameters implements IEntitySearchParameters<CrmContactEntity, CrmContactSorting, CrmContactCursor> {
|
|
24
24
|
query?: CrmContactFullTextQuery;
|
package/dist/esm/index.js
CHANGED
|
@@ -8,7 +8,7 @@ import { STATIC_CONTEXT } from '@nestjs/core/injector/constants';
|
|
|
8
8
|
import { MetadataScanner } from '@nestjs/core/metadata-scanner';
|
|
9
9
|
import { JwtService, JwtModule } from '@nestjs/jwt';
|
|
10
10
|
import { EventEmitter2, EventEmitterModule } from '@nestjs/event-emitter';
|
|
11
|
-
import { In, Equal, Not, And, MoreThanOrEqual, MoreThan, LessThanOrEqual, LessThan, Like } from 'typeorm';
|
|
11
|
+
import { In, Equal, Not, And, MoreThanOrEqual, MoreThan, LessThanOrEqual, LessThan, Like, ILike } from 'typeorm';
|
|
12
12
|
import { ListObjectsCommand, PutObjectCommand, GetObjectCommand, DeleteObjectCommand, S3Client } from '@aws-sdk/client-s3';
|
|
13
13
|
import { getSignedUrl } from '@aws-sdk/s3-request-presigner';
|
|
14
14
|
import { SendEmailCommand, SESClient } from '@aws-sdk/client-ses';
|
|
@@ -624,7 +624,7 @@ class EntitiesDeleteCommand {
|
|
|
624
624
|
return undefined;
|
|
625
625
|
}
|
|
626
626
|
const contextService = this.services.resolveAuthenticationContextProvider();
|
|
627
|
-
return await contextService
|
|
627
|
+
return await contextService?.getContext();
|
|
628
628
|
}
|
|
629
629
|
async authorize() {
|
|
630
630
|
const authorization = this.services.resolveAuthorizationMiddleware();
|
|
@@ -1714,7 +1714,7 @@ class EntitiesCountQuery {
|
|
|
1714
1714
|
return undefined;
|
|
1715
1715
|
}
|
|
1716
1716
|
const contextService = this.services.resolveAuthenticationContextProvider();
|
|
1717
|
-
return await contextService
|
|
1717
|
+
return await contextService?.getContext();
|
|
1718
1718
|
}
|
|
1719
1719
|
async authorizeSearch(context) {
|
|
1720
1720
|
const authorization = this.services.resolveAuthorizationMiddleware();
|
|
@@ -1745,7 +1745,7 @@ class EntityExistsQuery {
|
|
|
1745
1745
|
return undefined;
|
|
1746
1746
|
}
|
|
1747
1747
|
const contextService = this.services.resolveAuthenticationContextProvider();
|
|
1748
|
-
return await contextService
|
|
1748
|
+
return await contextService?.getContext();
|
|
1749
1749
|
}
|
|
1750
1750
|
async authorizeSearch(context) {
|
|
1751
1751
|
const authorization = this.services.resolveAuthorizationMiddleware();
|
|
@@ -1919,7 +1919,7 @@ class EntityVersionsSearchQuery {
|
|
|
1919
1919
|
return undefined;
|
|
1920
1920
|
}
|
|
1921
1921
|
const contextService = this.services.resolveAuthenticationContextProvider();
|
|
1922
|
-
return await contextService
|
|
1922
|
+
return await contextService?.getContext();
|
|
1923
1923
|
}
|
|
1924
1924
|
async authorizeSearch(context) {
|
|
1925
1925
|
const authorization = this.services.resolveAuthorizationMiddleware();
|
|
@@ -22212,10 +22212,7 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
|
|
|
22212
22212
|
const request = {
|
|
22213
22213
|
filters,
|
|
22214
22214
|
};
|
|
22215
|
-
return await this.getRepository().deleteBy(
|
|
22216
|
-
...(context ? this.buildContextFilter(context) : {}),
|
|
22217
|
-
...this.buildWhereClause(request),
|
|
22218
|
-
});
|
|
22215
|
+
return await this.getRepository().deleteBy(this.buildWhere(request, context));
|
|
22219
22216
|
}
|
|
22220
22217
|
async find(request, context) {
|
|
22221
22218
|
const results = await this.findPagedQueryResults({
|
|
@@ -22247,20 +22244,13 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
|
|
|
22247
22244
|
}
|
|
22248
22245
|
async getFieldDistinctValues(field, request, context) {
|
|
22249
22246
|
return await this.getRepository().distinct(field, {
|
|
22250
|
-
where:
|
|
22251
|
-
...(context ? this.buildContextFilter(context) : {}),
|
|
22252
|
-
...this.buildWhereClause(request),
|
|
22253
|
-
},
|
|
22247
|
+
where: this.buildWhere(request, context),
|
|
22254
22248
|
});
|
|
22255
22249
|
}
|
|
22256
22250
|
async findPagedQueryResults(request, context) {
|
|
22257
22251
|
return await this.getRepository().find({
|
|
22258
|
-
where:
|
|
22259
|
-
|
|
22260
|
-
...this.buildWhereClause(request),
|
|
22261
|
-
},
|
|
22262
|
-
relations: request.relations ??
|
|
22263
|
-
this.getRelationsToLoad(request, context, QueryBuilderOperation.Search),
|
|
22252
|
+
where: this.buildWhere(request, context),
|
|
22253
|
+
relations: this.buildSearchRelations(request, context),
|
|
22264
22254
|
order: this.buildSortingClause(request),
|
|
22265
22255
|
...this.buildPagingParameters(request),
|
|
22266
22256
|
});
|
|
@@ -22278,28 +22268,30 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
|
|
|
22278
22268
|
}
|
|
22279
22269
|
async countQueryResults(request, context) {
|
|
22280
22270
|
return await this.getRepository().count({
|
|
22281
|
-
where:
|
|
22282
|
-
...(context ? this.buildContextFilter(context) : {}),
|
|
22283
|
-
...this.buildWhereClause(request),
|
|
22284
|
-
},
|
|
22271
|
+
where: this.buildWhere(request, context),
|
|
22285
22272
|
});
|
|
22286
22273
|
}
|
|
22274
|
+
buildTextSearchClause(request) {
|
|
22275
|
+
if (!request.query ||
|
|
22276
|
+
!request.query.term ||
|
|
22277
|
+
!request.query.fields?.length) {
|
|
22278
|
+
return {};
|
|
22279
|
+
}
|
|
22280
|
+
return request.query.fields?.map((field) => ({
|
|
22281
|
+
[field]: ILike(`%${request.query?.term}%`),
|
|
22282
|
+
}));
|
|
22283
|
+
}
|
|
22287
22284
|
async calculateFacet(field, request, context, relations) {
|
|
22288
|
-
const where = {
|
|
22289
|
-
...(context ? this.buildContextFilter(context) : {}),
|
|
22290
|
-
...this.buildWhereClause(request),
|
|
22291
|
-
};
|
|
22292
22285
|
let query = this.getRepository()
|
|
22293
22286
|
.getInnerRepository()
|
|
22294
22287
|
.createQueryBuilder("entity");
|
|
22295
|
-
// .leftJoin("entity.contact", "contact")
|
|
22296
22288
|
for (const relation of relations?.columns ?? []) {
|
|
22297
22289
|
query = query.leftJoin(`entity.${relation}`, relation);
|
|
22298
22290
|
}
|
|
22299
22291
|
const results = await query
|
|
22300
22292
|
.select(field, "value")
|
|
22301
22293
|
.addSelect(`COUNT(${field})`, "count")
|
|
22302
|
-
.where(
|
|
22294
|
+
.where(this.buildWhere(request, context))
|
|
22303
22295
|
.addGroupBy(field)
|
|
22304
22296
|
.orderBy(field)
|
|
22305
22297
|
.getRawMany();
|
|
@@ -22325,6 +22317,52 @@ class TypeOrmQueryBuilder extends QueryBuilderBase {
|
|
|
22325
22317
|
}
|
|
22326
22318
|
return this.repository;
|
|
22327
22319
|
}
|
|
22320
|
+
buildSearchRelations(request, context) {
|
|
22321
|
+
return (request.relations ??
|
|
22322
|
+
this.getRelationsToLoad(request, context, QueryBuilderOperation.Search));
|
|
22323
|
+
}
|
|
22324
|
+
buildWhere(request, context) {
|
|
22325
|
+
return this.mergeWhereClauses(context ? this.buildContextFilter(context) : {}, this.buildWhereClause(request), this.buildTextSearchClause(request));
|
|
22326
|
+
}
|
|
22327
|
+
mergeWhereClauses(...clauses) {
|
|
22328
|
+
return clauses.reduce((a, b) => this.mergeWheres(a, b));
|
|
22329
|
+
}
|
|
22330
|
+
mergeWheres(a, b) {
|
|
22331
|
+
if (Array.isArray(a) && Array.isArray(b)) {
|
|
22332
|
+
const result = [];
|
|
22333
|
+
for (const x of a) {
|
|
22334
|
+
for (const y of b) {
|
|
22335
|
+
result.push({
|
|
22336
|
+
...x,
|
|
22337
|
+
...y,
|
|
22338
|
+
});
|
|
22339
|
+
}
|
|
22340
|
+
}
|
|
22341
|
+
return result;
|
|
22342
|
+
}
|
|
22343
|
+
if (!Array.isArray(a) && !Array.isArray(b)) {
|
|
22344
|
+
return {
|
|
22345
|
+
...a,
|
|
22346
|
+
...b,
|
|
22347
|
+
};
|
|
22348
|
+
}
|
|
22349
|
+
if (Array.isArray(a) && !Array.isArray(b)) {
|
|
22350
|
+
return a.map((x) => ({
|
|
22351
|
+
...x,
|
|
22352
|
+
...b,
|
|
22353
|
+
}));
|
|
22354
|
+
}
|
|
22355
|
+
if (!Array.isArray(a) && Array.isArray(b)) {
|
|
22356
|
+
return b.map((x) => ({
|
|
22357
|
+
...a,
|
|
22358
|
+
...x,
|
|
22359
|
+
}));
|
|
22360
|
+
}
|
|
22361
|
+
return {
|
|
22362
|
+
...a,
|
|
22363
|
+
...b,
|
|
22364
|
+
};
|
|
22365
|
+
}
|
|
22328
22366
|
}
|
|
22329
22367
|
|
|
22330
22368
|
class TypeOrmRepository {
|