diff --git a/apps/ebitemp-api/.tomg-config b/apps/ebitemp-api/.tomg-config index 93dca45..4371b4c 100644 --- a/apps/ebitemp-api/.tomg-config +++ b/apps/ebitemp-api/.tomg-config @@ -12,11 +12,11 @@ "generateConstructor": true, "customNamingStrategyPath": ".tomg-naming-strategy.js", "relationIds": false, - "strictMode": "none", + "strictMode": "!", "skipSchema": true, "indexFile": false, "exportType": "named", "skipNonPrimaryKeyIndexes": true, "removeColumnsInRelation": false } -] \ No newline at end of file +] diff --git a/apps/ebitemp-api/src/app/app.controller.ts b/apps/ebitemp-api/src/app/app.controller.ts index bcfa889..dfd1296 100644 --- a/apps/ebitemp-api/src/app/app.controller.ts +++ b/apps/ebitemp-api/src/app/app.controller.ts @@ -1,9 +1,9 @@ -import { Controller, Get } from '@nestjs/common'; +import { Controller, Get, VERSION_NEUTRAL } from '@nestjs/common'; import { AppService } from './app.service'; import { Public } from './modules/auth/strategies/jwt/jwt-auth.guard'; @Public() -@Controller() +@Controller({ version: VERSION_NEUTRAL }) export class AppController { constructor(private readonly appService: AppService) {} diff --git a/apps/ebitemp-api/src/app/modules/auth/auth.dto.ts b/apps/ebitemp-api/src/app/modules/auth/auth.dto.ts index 0eb7b8b..a3914d1 100644 --- a/apps/ebitemp-api/src/app/modules/auth/auth.dto.ts +++ b/apps/ebitemp-api/src/app/modules/auth/auth.dto.ts @@ -1,8 +1,9 @@ import { createZodDto } from '@anatine/zod-nestjs'; import { z } from 'zod'; +import { AccountsEntitySchema } from '../database/entities'; export const loginSchema = z.object({ - username: z.string(), + username: AccountsEntitySchema.shape.username, password: z.string().nonempty(), }); export type Login = z.infer; diff --git a/apps/ebitemp-api/src/app/modules/auth/strategies/jwt/jwt-refresh-token-auth.strategy.ts b/apps/ebitemp-api/src/app/modules/auth/strategies/jwt/jwt-refresh-token-auth.strategy.ts index 0d40633..3c31f6e 100644 --- a/apps/ebitemp-api/src/app/modules/auth/strategies/jwt/jwt-refresh-token-auth.strategy.ts +++ b/apps/ebitemp-api/src/app/modules/auth/strategies/jwt/jwt-refresh-token-auth.strategy.ts @@ -17,7 +17,7 @@ export class JwtRefreshTokenAuthStrategy extends PassportStrategy(Strategy, 'jwt } async validate(request: FastifyRequest, payload: TokenPayload) { - const refreshToken = (request.headers?.authorization as string| undefined)?.replace('Bearer', '')?.trim(); + const refreshToken = (request.headers?.authorization as string| undefined)?.replace('Bearer', '')?.trim() ?? ''; const account = this.usersAuthService.getUserByIdAndRefreshTokenPair(payload.sub, refreshToken); if (!account) throw new UnauthorizedException('Refresh Token Guard'); return account; diff --git a/apps/ebitemp-api/src/app/modules/database/entities/accounts.entity.ts b/apps/ebitemp-api/src/app/modules/database/entities/accounts.entity.ts index 194c7e4..c4f07a6 100644 --- a/apps/ebitemp-api/src/app/modules/database/entities/accounts.entity.ts +++ b/apps/ebitemp-api/src/app/modules/database/entities/accounts.entity.ts @@ -1,38 +1,51 @@ +import { toZod } from 'tozod'; import { Column, Entity, Index, OneToMany } from 'typeorm'; -import { ProfiliEntity } from './profili.entity'; +import { z } from 'zod'; +import { ProfiliEntity, ProfiliEntitySchema } from './profili.entity'; @Index('pk_accounts', ['id'], { unique: true }) @Entity('accounts') export class AccountsEntity { @Column('int', { primary: true, name: 'id' }) - id: number; + id!: number; @Column('varchar', { name: 'username', unique: true, length: 255 }) - username: string; + username!: string; @Column('varchar', { name: 'password', nullable: true, length: 255 }) - password: string | null; + password!: string | null; @Column('varchar', { name: 'nome', length: 255 }) - nome: string; + nome!: string; @Column('date', { name: 'data_creazione' }) - dataCreazione: Date; + dataCreazione!: Date; @Column('date', { name: 'data_scadenza', nullable: true }) - dataScadenza: Date | null; + dataScadenza!: Date | null; @Column('varchar', { name: 'ultimo_hash_refresh_token', nullable: true, length: 1024, }) - ultimoHashRefreshToken: string | null; + ultimoHashRefreshToken!: string | null; @OneToMany(() => ProfiliEntity, (profiliEntity) => profiliEntity.account) - profili: ProfiliEntity[]; + profili!: ProfiliEntity[]; constructor(init?: Partial) { Object.assign(this, init); } } + +export const AccountsEntitySchema: toZod = z.late.object(() => ({ + id: z.number().finite(), + username: z.string().nonempty(), + password: z.string().nonempty().nullable(), + nome: z.string().nonempty(), + dataCreazione: z.date(), + dataScadenza: z.date().nullable(), + ultimoHashRefreshToken: z.string().nonempty().nullable(), + profili: z.array(ProfiliEntitySchema), +})); diff --git a/apps/ebitemp-api/src/app/modules/database/entities/profili.entity.ts b/apps/ebitemp-api/src/app/modules/database/entities/profili.entity.ts index 0f6d4b1..b731c21 100644 --- a/apps/ebitemp-api/src/app/modules/database/entities/profili.entity.ts +++ b/apps/ebitemp-api/src/app/modules/database/entities/profili.entity.ts @@ -1,28 +1,38 @@ import { Column, Entity, Index, JoinColumn, ManyToOne } from 'typeorm'; -import { AccountsEntity } from './accounts.entity'; -import { RuoliEntity } from './ruoli.entity'; +import { AccountsEntity, AccountsEntitySchema } from './accounts.entity'; +import { RuoliEntity, RuoliEntitySchema } from './ruoli.entity'; +import { toZod } from 'tozod'; +import { z } from 'zod'; @Index('pk_profili', ['id'], { unique: true }) @Entity('profili') export class ProfiliEntity { @Column('int', { primary: true, name: 'id' }) - id: number; + id!: number; @Column('int', { name: 'id_account', unique: true }) - idAccount: number; + idAccount!: number; @Column('int', { name: 'id_ruolo', unique: true }) - idRuolo: number; + idRuolo!: number; @ManyToOne(() => AccountsEntity, (accountsEntity) => accountsEntity.profili) @JoinColumn([{ name: 'id_account', referencedColumnName: 'id' }]) - account: AccountsEntity; + account!: AccountsEntity; @ManyToOne(() => RuoliEntity, (ruoliEntity) => ruoliEntity.profili) @JoinColumn([{ name: 'id_ruolo', referencedColumnName: 'id' }]) - ruolo: RuoliEntity; + ruolo!: RuoliEntity; constructor(init?: Partial) { Object.assign(this, init); } } + +export const ProfiliEntitySchema: toZod = z.late.object(() => ({ + id: z.number().finite(), + idAccount: AccountsEntitySchema.shape.id, + idRuolo: RuoliEntitySchema.shape.id, + account: AccountsEntitySchema, + ruolo: RuoliEntitySchema, +})); diff --git a/apps/ebitemp-api/src/app/modules/database/entities/ruoli.entity.ts b/apps/ebitemp-api/src/app/modules/database/entities/ruoli.entity.ts index ea163b7..41ee48b 100644 --- a/apps/ebitemp-api/src/app/modules/database/entities/ruoli.entity.ts +++ b/apps/ebitemp-api/src/app/modules/database/entities/ruoli.entity.ts @@ -1,22 +1,31 @@ import { Column, Entity, Index, OneToMany } from 'typeorm'; -import { ProfiliEntity } from './profili.entity'; +import { ProfiliEntity, ProfiliEntitySchema } from './profili.entity'; +import { toZod } from 'tozod'; +import { z } from 'zod'; @Index('pk_ruoli', ['id'], { unique: true }) @Entity('ruoli') export class RuoliEntity { @Column('int', { primary: true, name: 'id' }) - id: number; + id!: number; @Column('varchar', { name: 'nome', unique: true, length: 255 }) - nome: string; + nome!: string; @Column('varchar', { name: 'descrizione', length: 255 }) - descrizione: string; + descrizione!: string; @OneToMany(() => ProfiliEntity, (profiliEntity) => profiliEntity.ruolo) - profili: ProfiliEntity[]; + profili!: ProfiliEntity[]; constructor(init?: Partial) { Object.assign(this, init); } } + +export const RuoliEntitySchema: toZod = z.late.object(() => ({ + id: z.number().finite(), + nome: z.string().nonempty(), + descrizione: z.string().nonempty(), + profili: z.array(ProfiliEntitySchema), +})); diff --git a/apps/ebitemp-api/src/app/modules/database/entities/tipi_jobs.entity.ts b/apps/ebitemp-api/src/app/modules/database/entities/tipi_jobs.entity.ts index 7feb1ff..58ad4d2 100644 --- a/apps/ebitemp-api/src/app/modules/database/entities/tipi_jobs.entity.ts +++ b/apps/ebitemp-api/src/app/modules/database/entities/tipi_jobs.entity.ts @@ -3,16 +3,16 @@ import { Enumify } from '../../enumify/enumify'; export class InviaMailSeErrori { @Column('bit', { name: 'flag', default: () => '(0)' }) - flagAttivo: boolean; + flagAttivo!: boolean; @Column('varchar', { name: 'oggetto', nullable: true, length: 255 }) - oggetto: string | null; + oggetto!: string | null; @Column('varchar', { name: 'destinatari', nullable: true, length: 255 }) - destinatari: string | null; + destinatari!: string | null; @Column('varchar', { name: 'cc', nullable: true, length: 255 }) - cc: string | null; + cc!: string | null; } @Index('pk_tipi_jobs', ['id'], { unique: true }) @@ -20,25 +20,23 @@ export class InviaMailSeErrori { export class TipiJobsEntity extends Enumify { static _ = TipiJobsEntity.closeEnum(); - // Columns - @Column('int', { primary: true, name: 'id' }) - id: number; + id!: number; @Column('varchar', { name: 'nome', length: 50 }) - nome: string; + nome!: string; @Column('varchar', { name: 'descrizione', nullable: true, length: 255 }) - descrizione: string | null; + descrizione!: string | null; @Column(() => InviaMailSeErrori, { prefix: 'invia_mail_se_errori'}) - inviaMailSeErrori: InviaMailSeErrori; + inviaMailSeErrori!: InviaMailSeErrori; @Column('bit', { name: 'flag_attivo', default: () => '(0)' }) - flagAttivo: boolean; + flagAttivo!: boolean; @Column('varchar', { name: 'pattern_cron', length: 20 }) - patternCron: string; + patternCron!: string; public constructor( id: number, diff --git a/apps/ebitemp-api/src/app/modules/database/utils/typeorm-import-entities.ts b/apps/ebitemp-api/src/app/modules/database/utils/typeorm-import-entities.ts index e909988..5e20c49 100644 --- a/apps/ebitemp-api/src/app/modules/database/utils/typeorm-import-entities.ts +++ b/apps/ebitemp-api/src/app/modules/database/utils/typeorm-import-entities.ts @@ -1,4 +1,4 @@ -export const typeormEntitiesFromImport = async (entities: T) => { +export const typeormEntitiesFromImport = async (entities: T) => { return (Object.keys(entities) as Array).map( (entity: keyof typeof entities) => entities[entity] ); diff --git a/apps/ebitemp-api/src/app/modules/health/health.controller.ts b/apps/ebitemp-api/src/app/modules/health/health.controller.ts index bae8f53..a083394 100644 --- a/apps/ebitemp-api/src/app/modules/health/health.controller.ts +++ b/apps/ebitemp-api/src/app/modules/health/health.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Get } from '@nestjs/common'; +import { Controller, Get, VERSION_NEUTRAL } from '@nestjs/common'; import { DiskHealthIndicator, HealthCheck, @@ -9,7 +9,7 @@ import { import { Public } from '../auth/strategies/jwt/jwt-auth.guard'; @Public() -@Controller('health') +@Controller({ path: 'health', version: VERSION_NEUTRAL }) export class HealthController { constructor( private readonly health: HealthCheckService, diff --git a/apps/ebitemp-api/src/app/modules/schedule/schedule.service.ts b/apps/ebitemp-api/src/app/modules/schedule/schedule.service.ts index a379490..f023e40 100644 --- a/apps/ebitemp-api/src/app/modules/schedule/schedule.service.ts +++ b/apps/ebitemp-api/src/app/modules/schedule/schedule.service.ts @@ -4,6 +4,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { CronJob, CronTime } from 'cron'; import { Repository } from 'typeorm'; import { TipiJobsEntity } from '../database/entities/tipi_jobs.entity'; +import { isError } from '@stdlib/assert'; @Injectable() export class SchedulerService { @@ -25,6 +26,7 @@ export class SchedulerService { this.rescheduleJobAccordingToJobType(jobTypes, jobName, job); } } catch (err) { + if (!isError(err)) throw err; this.logger.error(err.message); this.logger.warn(`Error while retrieving scheduled jobs on database. Skipping jobs.`); } diff --git a/apps/ebitemp-api/src/app/modules/validation/zod.serializer.ts b/apps/ebitemp-api/src/app/modules/validation/zod.serializer.ts index e42ce70..c2902e6 100644 --- a/apps/ebitemp-api/src/app/modules/validation/zod.serializer.ts +++ b/apps/ebitemp-api/src/app/modules/validation/zod.serializer.ts @@ -52,9 +52,9 @@ export class ZodSerializerInterceptor implements NestInterceptor { ); } - protected getContextResponseSchema(context: ExecutionContext): ZodDtoStatic | ZodSchema { - const zodSerializedDto = (() => { - const metadata = this.reflector.getAllAndMerge('zodSerializedDtoOptions', [context.getHandler(), context.getClass()]); + protected getContextResponseSchema(context: ExecutionContext): ZodDtoStatic | ZodSchema | undefined { + const zodSerializedDto = (() => { + const metadata = this.reflector.getAllAndMerge('zodSerializedDtoOptions', [context.getHandler(), context.getClass()]); return metadata.dto; })(); if (zodSerializedDto) return zodSerializedDto; diff --git a/apps/ebitemp-api/src/main.ts b/apps/ebitemp-api/src/main.ts index e328f68..1b3cb32 100644 --- a/apps/ebitemp-api/src/main.ts +++ b/apps/ebitemp-api/src/main.ts @@ -1,4 +1,4 @@ -import { Logger, RequestMethod } from '@nestjs/common'; +import { Logger, RequestMethod, VersioningType } from '@nestjs/common'; import { NestFactory } from '@nestjs/core'; import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify'; import { Logger as PinoLogger } from 'nestjs-pino'; @@ -23,11 +23,9 @@ async function bootstrap() { }; })(); const app = await NestFactory.create(AppModule, new FastifyAdapter(appOpts)); - const globalPrefix = 'v1'; - app.setGlobalPrefix(globalPrefix, { - exclude: [ - { path: '', method: RequestMethod.ALL }, - { path: 'health', method: RequestMethod.ALL }], + app.enableVersioning({ + type: VersioningType.URI, + defaultVersion: '1' }); app.enableShutdownHooks(); @@ -47,7 +45,7 @@ async function bootstrap() { patchPublicDecoratorSupport )(); - SwaggerModule.setup(`${globalPrefix}/docs`, app, document, { + SwaggerModule.setup(`docs`, app, document, { swaggerOptions: { operationsSorter: 'alpha', displayOperationId: true, @@ -57,7 +55,7 @@ async function bootstrap() { }); await app.listen(port); - Logger.log(`🚀 Application is running on: http://localhost:${port}/${globalPrefix}`); + Logger.log(`🚀 Application is running on: http://localhost:${port}`); } void bootstrap(); diff --git a/package.json b/package.json index d30ff76..d12b013 100644 --- a/package.json +++ b/package.json @@ -29,6 +29,7 @@ "@nestjs/terminus": "^11.0.0", "@nestjs/typeorm": "^11.0.0", "@nx/devkit": "20.4.2", + "@stdlib/assert": "^0.3.3", "axios": "^1.7.9", "bcrypt": "^5.1.1", "cacheable": "^1.8.8", @@ -47,6 +48,7 @@ "pino-pretty": "^13.0.0", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1", + "tozod": "^3.0.0", "typeorm": "^0.3.20", "typeorm-naming-strategies": "^4.1.0", "typeorm-scoped": "^1.2.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 112554b..c24fc76 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,6 +62,9 @@ dependencies: '@nx/devkit': specifier: 20.4.2 version: 20.4.2(nx@20.4.2) + '@stdlib/assert': + specifier: ^0.3.3 + version: 0.3.3 axios: specifier: ^1.7.9 version: 1.7.9 @@ -116,6 +119,9 @@ dependencies: rxjs: specifier: ^7.8.1 version: 7.8.1 + tozod: + specifier: ^3.0.0 + version: 3.0.0(zod@3.24.1) typeorm: specifier: ^0.3.20 version: 0.3.20(mssql@11.0.1)(ts-node@10.9.2) @@ -3634,6 +3640,575 @@ packages: /@sqltools/formatter@1.2.5: resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} + /@stdlib/array@0.3.3: + resolution: {integrity: sha512-DaXQwdLRLmxqtu6g5jWvA+6kSHfB0HbnWe3aPGTk+5AaEUFaF9Xz7rbIdx93IAwfvOQH/aE0pCWetW5fMXbjGA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/blas': 0.3.3 + '@stdlib/boolean': 0.3.3 + '@stdlib/buffer': 0.3.3 + '@stdlib/complex': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/iter': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/proxy': 0.3.3 + '@stdlib/slice': 0.3.3 + '@stdlib/strided': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/assert@0.3.3: + resolution: {integrity: sha512-A1N2YwQfpGx8+1ZJr/g9C02KanoyRy9D5LFWeHu7TJq6Mj/g/nhK6U9AFbNtndJ2yvLOUw/FKjrqaP87xswCrw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/boolean': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/complex': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/function': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/os': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/regexp': 0.3.3 + '@stdlib/slice': 0.3.3 + '@stdlib/streams': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/time': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + '@stdlib/wasm': 0.1.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/bigint@0.3.3: + resolution: {integrity: sha512-F2WgGnjz/8JEmv71onXb111gXTEcRiw3NNdgjlNT8AJN2VlBb3TiD7Do5rI2ipo+QMN0S0o/6fMKZ5xVdzjsBg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/blas@0.3.3: + resolution: {integrity: sha512-Kmx/3AnNVsfH8yXdHz/Dg/n58fxdv3yrcNOggBzsoR4Kj0DvROE57SnEy+JB3ZrWaAoNVx1Qoq2aokTStFvThg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/complex': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/napi': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/strided': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/boolean@0.3.3: + resolution: {integrity: sha512-rYfgUSb5QKpDDFk5UW5iLDtRxPL2xy0WJxRvl/Gjkh2SBocShOMHk1vgHWZM3qHJoxcKtACz7Q3k+LOrNjXvNg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/buffer@0.3.3: + resolution: {integrity: sha512-6DY/MIr+8ICGM49pbq6SLQ/kuO6JzGyc6Xfe2EBKHe4akurUYsxzAQn8NHgxNy+GG+ov86iXB+iYLhIOPYt21Q==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/cli@0.3.3: + resolution: {integrity: sha512-Ax4ql11q4zZ8z49FwekuPb26iQ6oi/sOl17nQOr6lHs+9SOG0QDoTir0fZ8oCswCVoRnRlNNCaqHIavvLvCOxQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + minimist: 1.2.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/complex@0.3.3: + resolution: {integrity: sha512-WmzBICm3WluhQrGQDaw1iAc7JvHfGNnN0ZBM6c0z7Is93f5YTemb/ZxWwPuueuZLUZF38i8nS6SKU/IlYujf7A==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/constants@0.3.3: + resolution: {integrity: sha512-LZp2lkdgaKB16HfhljiyWQDW9gsrRvkXkFH31q8s/tDlrurOhn6RDb/kHyHsvIzEcT2FNvlntBUuqdkSnEgSsw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/complex': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/fs@0.3.3: + resolution: {integrity: sha512-tsePrjDxwhPVwJZsRt938Phd8EbrOZbiYwdzghdaGGkh1SipZI5Nn32I1il71aDLwBEiXqfs7LOikc9oJZXbPw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + debug: 2.6.9 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/function@0.3.3: + resolution: {integrity: sha512-Wv4g2I8YFf1m0e6bP+sLeM55Xtg/kVd39ckh/N1NoYR8LfwPBqU/BTKdP2HiYEDU8pzK1ZG5f9kMytHJjvV7qw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/iter@0.3.3: + resolution: {integrity: sha512-fjC4IbzJI9c+gRnnPalS7CHD0vEoKByN5lQe/SE8EBCeUwkxdjYFBwzVqK0fDIW9SjpzZup0b82fiwcPZiyCaA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/math@0.3.3: + resolution: {integrity: sha512-X64M4ovkMOOVdEi5uMVtemGNxa6iQRgC7yaej/BiUC4mP+sfBaw5dTD7hsVPHtcLm8jUtGHALSykSJ2glwUcVg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/complex': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/function': 0.3.3 + '@stdlib/napi': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/strided': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + debug: 2.6.9 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/napi@0.3.3: + resolution: {integrity: sha512-VeQ2u7bi0K3SFVJAfQHSmsK4IFBfFT9uB8U5fIZLcdxNKwD+M84hhul/0w7JVB+4eQJkll0G3pQdq3hkXSgsXg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/ndarray@0.3.3: + resolution: {integrity: sha512-qvqgTxwLtz+0PvG9C6RAUkdkd+24eB3PccZNvsd7ILwPPLhcA7qNNhe6MNPLnuHnjO6Uz+yyniKOYnsdJcPN9w==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/bigint': 0.3.3 + '@stdlib/blas': 0.3.3 + '@stdlib/boolean': 0.3.3 + '@stdlib/buffer': 0.3.3 + '@stdlib/complex': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/proxy': 0.3.3 + '@stdlib/slice': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/nlp@0.3.3: + resolution: {integrity: sha512-tZ5zPgfpWE+JGQ+6ZXMy0STrkjK7Cbux2oI1WjAFOIPAOYmBvsN6q6oqu+Jsy+3bqvbfl+mcYJw6KHpXqGauFQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/random': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/number@0.3.3: + resolution: {integrity: sha512-BltISq+j1q0GLaNZ8rPKGYyDSVlkXsFfn+0t9CXb7w+Vq07Vb3q6siwavVJNb+GAUL+NfYchGbRwi23BIZGsHw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/napi': 0.3.3 + '@stdlib/os': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/object@0.3.3: + resolution: {integrity: sha512-DtazD7RpA7NrkwsonTpbe5eNDAJ6m609CB+b6BgiXxF+utfHfUzo5Zc1/MqsHPajWxZMf+b7t7CTc1Le8U3jrA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/os@0.3.3: + resolution: {integrity: sha512-klCH/XYeximeg+PH4zJ8wrVi+yMY+ZBbLqrXMhV1ZvzfdXCw2elnEtSWzK6kMfbzadqq2RofZanJl5FzNfcBBA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/process@0.3.3: + resolution: {integrity: sha512-PxvkWRA+PPxer9I+V8aks/RTKCtMgEyvg8O8jUNzZtFiFTrJ582cWsAn1J1SfRc8kcC9/iFIjBJKKRHO0aN7YQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/buffer': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/streams': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/proxy@0.3.3: + resolution: {integrity: sha512-FfoCUpuwOd9n9a4tBS0jP0gSqzZTtoz0lb4WN5rHioDwBgV+453A+D6ZI7VytT35kZSQQoiHRzmYer7u5pUURA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/random@0.3.3: + resolution: {integrity: sha512-3dvcMUPlZnNhhfZeWd5RQnFHnusd4RiX/yn0zrxNOtxK9WVsVvI8OKIsHbRXITFVJxeBCXd3plI/NQW1f+cJsg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/blas': 0.3.3 + '@stdlib/buffer': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/stats': 0.3.3 + '@stdlib/streams': 0.3.3 + '@stdlib/strided': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + debug: 2.6.9 + readable-stream: 2.3.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/regexp@0.3.3: + resolution: {integrity: sha512-H7dhYidU+ztyj6qKZWq0aExcBDi0f9QzN3HlGqo5AzTuNWB3ScvCeACb3g7h/G/ga9+Js9DlyaiBqrmyHoK+og==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/function': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/slice@0.3.3: + resolution: {integrity: sha512-Ztb3tEeYQZDu1YT+60FdXhFrFzxcQqAfBjJEHWkbkXYO2uvBNMYY+g5tdMw4pMMFE2BSUBcBQXZ/R8ioIDqYCg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/stats@0.3.3: + resolution: {integrity: sha512-prq0KD/Nc+VRsuuD82L8HSmmJNhroNLVc9DPHZ21e8spQurSx0SUoiScyTbZ6muMITUl0ont4AE1Ql2VoB84eQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/blas': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/random': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/streams@0.3.3: + resolution: {integrity: sha512-spk7rqsj7xlDI3R/RIZ9BXxh+qTn7wK5+7J13F1BW0QiHIJx1M7qpH8YRx738Y2poPvhEDWQsQ76S1/4FjBVIQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/buffer': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + debug: 2.6.9 + readable-stream: 2.3.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/strided@0.3.3: + resolution: {integrity: sha512-kKT8n/o+muU3JnvUhlSzlYi6Tvk0wJTbFBtQkLDkYMg/+MmH0iluxqQTOEqqIeBUtQ0ymfH88dsz+dKsKsRrbw==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/complex': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/string@0.3.3: + resolution: {integrity: sha512-CqBfLTQph06AqOMzgQY6woydF1HHdUaeNaKLYKMYVJrqi3WhSqDfIhcQYk8KlouzXmLrzi6y8HcpwrsEQfqAqA==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/buffer': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/nlp': 0.3.3 + '@stdlib/number': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/random': 0.3.3 + '@stdlib/regexp': 0.3.3 + '@stdlib/streams': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/symbol@0.3.3: + resolution: {integrity: sha512-rOFvxSUdbUulpyy4YIFfW1NLiHu/V06PyGGMu92DFJBjRwwCAfXFatJKQ9XjVlelraJgHtuHeXB/8vgOIC09IQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/time@0.3.3: + resolution: {integrity: sha512-/FwSa/nn9W2QXGRT7eQMR+gf5cXgHHFE6e1oC7kq9CGYHuGRV3BfsoYXdxZVyumj0Y04fr7obEm2TkHcmkM7wQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/assert': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/regexp': 0.3.3 + '@stdlib/streams': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/types@0.4.3: + resolution: {integrity: sha512-9GCqS2eni2VSwa5/CCniAJ4I1eWLtvior1z6hoPJp6VTNMgW9Lh4BiI84IO0xun/0qAclJ+mTGTiCTZxZLK13A==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dev: false + + /@stdlib/utils@0.3.3: + resolution: {integrity: sha512-glF2J7pLpMie2UwjGrfcNYVOCtZZ7XN+MVgv5B1/7MeA4FaiJA7bzqKYfOU/U8eCZvdz3rzZSO4HWxQw6TC2wQ==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/blas': 0.3.3 + '@stdlib/boolean': 0.3.3 + '@stdlib/buffer': 0.3.3 + '@stdlib/cli': 0.3.3 + '@stdlib/constants': 0.3.3 + '@stdlib/fs': 0.3.3 + '@stdlib/function': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/os': 0.3.3 + '@stdlib/process': 0.3.3 + '@stdlib/random': 0.3.3 + '@stdlib/regexp': 0.3.3 + '@stdlib/streams': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/symbol': 0.3.3 + '@stdlib/time': 0.3.3 + '@stdlib/types': 0.4.3 + debug: 2.6.9 + transitivePeerDependencies: + - supports-color + dev: false + + /@stdlib/wasm@0.1.1: + resolution: {integrity: sha512-iGuGzsoYLF7hi1TcMRrAhmUKG8sVhbDk+T79XntL5h2kQ14/d5p3X0ptCl3ZFciIGd1matQ/TrDVhr4vMvVmbg==} + engines: {node: '>=0.10.0', npm: '>2.7.0'} + os: [aix, darwin, freebsd, linux, macos, openbsd, sunos, win32, windows] + dependencies: + '@stdlib/array': 0.3.3 + '@stdlib/assert': 0.3.3 + '@stdlib/math': 0.3.3 + '@stdlib/ndarray': 0.3.3 + '@stdlib/object': 0.3.3 + '@stdlib/strided': 0.3.3 + '@stdlib/string': 0.3.3 + '@stdlib/types': 0.4.3 + '@stdlib/utils': 0.3.3 + transitivePeerDependencies: + - supports-color + dev: false + /@swc-node/core@1.13.3(@swc/core@1.10.15)(@swc/types@0.1.17): resolution: {integrity: sha512-OGsvXIid2Go21kiNqeTIn79jcaX4l0G93X2rAnas4LFoDyA9wAwVK7xZdm+QsKoMn5Mus2yFLCc4OtX2dD/PWA==} engines: {node: '>= 10'} @@ -11185,6 +11760,14 @@ packages: ieee754: 1.2.1 dev: true + /tozod@3.0.0(zod@3.24.1): + resolution: {integrity: sha512-R03/moNPEGgWKoTdCsEJuyEoP6NtXyhWg9L9lJhF2XyCR2Ce9XE+yXaswaVmqyBpHsRPC2Pk38mK8Ex7iHaXcg==} + peerDependencies: + zod: ^3.0.0-alpha.2 + dependencies: + zod: 3.24.1 + dev: false + /tr46@0.0.3: resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} dev: false diff --git a/tools/typeorm/src/generators/typeorm-model-generator/files/.tomg-config.template b/tools/typeorm/src/generators/typeorm-model-generator/files/.tomg-config.template index 93dca45..4371b4c 100644 --- a/tools/typeorm/src/generators/typeorm-model-generator/files/.tomg-config.template +++ b/tools/typeorm/src/generators/typeorm-model-generator/files/.tomg-config.template @@ -12,11 +12,11 @@ "generateConstructor": true, "customNamingStrategyPath": ".tomg-naming-strategy.js", "relationIds": false, - "strictMode": "none", + "strictMode": "!", "skipSchema": true, "indexFile": false, "exportType": "named", "skipNonPrimaryKeyIndexes": true, "removeColumnsInRelation": false } -] \ No newline at end of file +] diff --git a/tsconfig.base.json b/tsconfig.base.json index 6841ac9..e861cea 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -9,6 +9,7 @@ "esModuleInterop": true, "experimentalDecorators": true, "importHelpers": true, + "strict": true, "target": "es2015", "module": "esnext", "lib": ["es2020", "dom"],