chore: fmt

This commit is contained in:
Michael Abebe
2026-05-12 16:50:18 +03:00
parent 4540d35215
commit 1c5ee19388
181 changed files with 1492 additions and 1100 deletions

View File

@@ -2,18 +2,23 @@
"name": "@edr/api-common",
"version": "0.0.0",
"private": true,
"main": "./src/index.ts",
"types": "./src/index.ts",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": {
".": "./src/index.ts"
".": {
"types": "./dist/index.d.ts",
"default": "./dist/index.js"
}
},
"scripts": {
"build": "tsc -p tsconfig.json",
"dev": "tsc -w -p tsconfig.json",
"type-check": "tsc --noEmit",
"lint": "eslint src"
},
"peerDependencies": {
"@nestjs/common": "^10.0.0",
"@nestjs/core": "^10.0.0",
"@nestjs/common": "^11.0.0",
"@nestjs/core": "^11.0.0",
"reflect-metadata": "^0.2.0",
"rxjs": "^7.8.0",
"typeorm": "^0.3.20"
@@ -24,8 +29,8 @@
"devDependencies": {
"@edr/eslint-config": "workspace:*",
"@edr/tsconfig": "workspace:*",
"@nestjs/common": "^10.4.6",
"@nestjs/core": "^10.4.6",
"@nestjs/common": "^11.0.0",
"@nestjs/core": "^11.0.0",
"@types/node": "^20.14.0",
"reflect-metadata": "^0.2.2",
"rxjs": "^7.8.1",

View File

@@ -1,4 +1,4 @@
import { createParamDecorator, ExecutionContext } from '@nestjs/common';
import { createParamDecorator, ExecutionContext } from "@nestjs/common";
// TODO: integrate @edr/auth — this decorator currently returns whatever was
// attached to request.user by the (not-yet-wired) auth middleware. Once the

View File

@@ -1,6 +1,6 @@
import { SetMetadata } from '@nestjs/common';
import { SetMetadata } from "@nestjs/common";
export const IS_PUBLIC_KEY = 'isPublic';
export const IS_PUBLIC_KEY = "isPublic";
// TODO: integrate @edr/auth — pair with the JwtAuthGuard from the auth package
// so it skips authentication for routes marked @Public(). Until then, this is

View File

@@ -1,6 +1,6 @@
import { SetMetadata } from '@nestjs/common';
import { SetMetadata } from "@nestjs/common";
export const ROLES_KEY = 'roles';
export const ROLES_KEY = "roles";
// TODO: integrate @edr/auth — pair this metadata with a RolesGuard from the
// auth package. Until then, this decorator only sets metadata and has no

View File

@@ -3,18 +3,18 @@ import {
DeleteDateColumn,
PrimaryGeneratedColumn,
UpdateDateColumn,
} from 'typeorm';
} from "typeorm";
export abstract class BaseEntity {
@PrimaryGeneratedColumn('uuid')
@PrimaryGeneratedColumn("uuid")
id!: string;
@CreateDateColumn({ name: 'created_at', type: 'timestamptz' })
@CreateDateColumn({ name: "created_at", type: "timestamptz" })
createdAt!: Date;
@UpdateDateColumn({ name: 'updated_at', type: 'timestamptz' })
@UpdateDateColumn({ name: "updated_at", type: "timestamptz" })
updatedAt!: Date;
@DeleteDateColumn({ name: 'deleted_at', type: 'timestamptz', nullable: true })
@DeleteDateColumn({ name: "deleted_at", type: "timestamptz", nullable: true })
deletedAt?: Date | null;
}

View File

@@ -5,7 +5,7 @@ import {
HttpException,
HttpStatus,
Logger,
} from '@nestjs/common';
} from "@nestjs/common";
interface ErrorResponseBody {
success: false;
@@ -31,26 +31,33 @@ export class HttpExceptionFilter implements ExceptionFilter {
: HttpStatus.INTERNAL_SERVER_ERROR;
const messageRaw =
exception instanceof HttpException ? exception.getResponse() : 'Internal server error';
exception instanceof HttpException
? exception.getResponse()
: "Internal server error";
const message =
typeof messageRaw === 'string'
typeof messageRaw === "string"
? messageRaw
: (messageRaw as { message?: string }).message ?? 'Unexpected error';
: ((messageRaw as { message?: string }).message ?? "Unexpected error");
const body: ErrorResponseBody = {
success: false,
statusCode: status,
message,
error: exception instanceof Error ? exception.name : 'Error',
error: exception instanceof Error ? exception.name : "Error",
timestamp: new Date().toISOString(),
path: request.url,
};
if (status >= 500) {
this.logger.error(`${request.method} ${request.url} -> ${status}`, (exception as Error)?.stack);
this.logger.error(
`${request.method} ${request.url} -> ${status}`,
(exception as Error)?.stack,
);
} else {
this.logger.warn(`${request.method} ${request.url} -> ${status} ${message}`);
this.logger.warn(
`${request.method} ${request.url} -> ${status} ${message}`,
);
}
response.status(status).json(body);

View File

@@ -1,19 +1,19 @@
// Decorators
export * from './decorators/current-user.decorator';
export * from './decorators/roles.decorator';
export * from './decorators/public.decorator';
export * from "./decorators/current-user.decorator";
export * from "./decorators/roles.decorator";
export * from "./decorators/public.decorator";
// Filters
export * from './filters/http-exception.filter';
export * from "./filters/http-exception.filter";
// Interceptors
export * from './interceptors/response-transform.interceptor';
export * from "./interceptors/response-transform.interceptor";
// Pipes
export * from './pipes/validation.pipe';
export * from "./pipes/validation.pipe";
// Entities
export * from './entities/base.entity';
export * from "./entities/base.entity";
// Repositories
export * from './repositories/base.repository';
export * from "./repositories/base.repository";

View File

@@ -1,6 +1,11 @@
import { CallHandler, ExecutionContext, Injectable, NestInterceptor } from '@nestjs/common';
import { Observable } from 'rxjs';
import { map } from 'rxjs/operators';
import {
CallHandler,
ExecutionContext,
Injectable,
NestInterceptor,
} from "@nestjs/common";
import { Observable } from "rxjs";
import { map } from "rxjs/operators";
export interface StandardResponse<T> {
success: true;
@@ -9,8 +14,14 @@ export interface StandardResponse<T> {
}
@Injectable()
export class ResponseTransformInterceptor<T> implements NestInterceptor<T, StandardResponse<T>> {
intercept(_context: ExecutionContext, next: CallHandler<T>): Observable<StandardResponse<T>> {
export class ResponseTransformInterceptor<T> implements NestInterceptor<
T,
StandardResponse<T>
> {
intercept(
_context: ExecutionContext,
next: CallHandler<T>,
): Observable<StandardResponse<T>> {
return next.handle().pipe(
map((data) => ({
success: true,

View File

@@ -1,6 +1,8 @@
import { ValidationPipe, ValidationPipeOptions } from '@nestjs/common';
import { ValidationPipe, ValidationPipeOptions } from "@nestjs/common";
export const createValidationPipe = (overrides?: ValidationPipeOptions): ValidationPipe =>
export const createValidationPipe = (
overrides?: ValidationPipeOptions,
): ValidationPipe =>
new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,

View File

@@ -5,13 +5,16 @@ import {
FindOptionsWhere,
ObjectLiteral,
Repository,
} from 'typeorm';
} from "typeorm";
export abstract class BaseRepository<T extends ObjectLiteral> {
protected constructor(protected readonly repository: Repository<T>) {}
/** Find a single entity by its primary key. */
async findById(id: string, options?: Omit<FindOneOptions<T>, 'where'>): Promise<T | null> {
async findById(
id: string,
options?: Omit<FindOneOptions<T>, "where">,
): Promise<T | null> {
return this.repository.findOne({
...options,
where: { id } as unknown as FindOptionsWhere<T>,

View File

@@ -3,7 +3,8 @@
"compilerOptions": {
"outDir": "dist",
"rootDir": "src",
"noEmit": true
"declaration": true,
"declarationMap": true
},
"include": ["src"]
}

File diff suppressed because one or more lines are too long