vsrepo 1.1.6 → 1.1.7

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.
@@ -197,7 +197,7 @@ export type MethodOptions<S> = {
197
197
  /**
198
198
  * Select model a ser aplicado na operação.
199
199
  *
200
- * Use `false` para retornar o payload completo do Prisma, sem select.
200
+ * @note Use `false` para retornar o payload completo do Prisma, sem select.
201
201
  */
202
202
  selectModel?: S | false;
203
203
  /**
@@ -329,7 +329,7 @@ export type MethodConfig<M extends Prisma.ModelName, SelectModels = any> = {
329
329
  readonly map: boolean;
330
330
  /** Sobrescreve o `defaultSelectModel` apenas para este método. */
331
331
  readonly selectModel?: keyof SelectModels | false;
332
- /** Controla se o método combina ou sobrescreve o `requiredWhere`. */
332
+ /** Controla se o método combina (`extending`) ou sobrescreve (`overwrite`) o `requiredWhere`. */
333
333
  readonly whereType?: 'overwrite' | 'extending';
334
334
  /** Redireciona a lógica para outro padrão de método válido. */
335
335
  readonly proxyTo?: ValidMethodPatterns;
@@ -415,6 +415,12 @@ type InjectedGet<
415
415
  TDefault = ExtractDefaultSelect<Config>,
416
416
  TPk = ExtractPkName<T, Config>
417
417
  > = C extends { baseMethods: { get: { active: false } } } ? {} : {
418
+ /**
419
+ * Busca um registro pela chave primária (PK).
420
+ * @param pk Chave primária do registro.
421
+ * @param options Opções adicionais (por exemplo `selectModel` ou `db`).
422
+ * @returns O registro selecionado ou `null` se não encontrado.
423
+ */
418
424
  get<S extends keyof TSelects | false = ResolveMethodDefaultSelect<Config, C, 'get', TSelects>>(
419
425
  pk: T[TPk extends keyof T ? TPk : never], options?: MethodOptions<S>
420
426
  ): Promise<ResolveCurrentReturn<M, TSelects, S, TDefault> | null>;
@@ -426,6 +432,12 @@ type InjectedGetOrThrow<
426
432
  TDefault = ExtractDefaultSelect<Config>,
427
433
  TPk = ExtractPkName<T, Config>
428
434
  > = C extends { baseMethods: { getOrThrow: { active: false } } } ? {} : {
435
+ /**
436
+ * Busca um registro pela chave primária (PK) e lança erro se não encontrado.
437
+ * @param pk Chave primária do registro.
438
+ * @param options Opções adicionais (por exemplo `selectModel` ou `db`).
439
+ * @returns O registro selecionado.
440
+ */
429
441
  getOrThrow<S extends keyof TSelects | false = ResolveMethodDefaultSelect<Config, C, 'getOrThrow', TSelects>>(
430
442
  pk: T[TPk extends keyof T ? TPk : never], options?: MethodOptions<S>
431
443
  ): Promise<ResolveCurrentReturn<M, TSelects, S, TDefault>>;
@@ -437,6 +449,12 @@ type InjectedRemove<
437
449
  TDefault = ExtractDefaultSelect<Config>,
438
450
  TPk = ExtractPkName<T, Config>
439
451
  > = C extends { baseMethods: { remove: { active: false } } } ? {} : {
452
+ /**
453
+ * Remove um registro identificado pela chave primária (PK).
454
+ * @param pk Chave primária do registro a ser removido.
455
+ * @param options Opções adicionais (por exemplo `selectModel` ou `db`).
456
+ * @returns O registro removido.
457
+ */
440
458
  remove<S extends keyof TSelects | false = ResolveMethodDefaultSelect<Config, C, 'remove', TSelects>>(
441
459
  pk: T[TPk extends keyof T ? TPk : never], options?: MethodOptions<S>
442
460
  ): Promise<ResolveCurrentReturn<M, TSelects, S, TDefault>>;
@@ -476,6 +494,12 @@ type InjectedSave<
476
494
  TDefault = ExtractDefaultSelect<Config>,
477
495
  TRelations = ExtractRelations<Config>
478
496
  > = C extends { baseMethods: { save: { active: false } } } ? {} : {
497
+ /**
498
+ * Insere ou atualiza (save/upsert) um registro, aceita os campos de relações definidas nas `relations`.
499
+ * @param obj Payload para criação/atualização.
500
+ * @param options Opções adicionais (por exemplo `selectModel` ou `db`).
501
+ * @returns O registro salvo com tipos refinados conforme a entrada.
502
+ */
479
503
  save<
480
504
  O extends UpsertWithRelations<T, M, TRelations>,
481
505
  S extends keyof TSelects | false = ResolveMethodDefaultSelect<Config, C, 'save', TSelects>
@@ -492,19 +516,33 @@ type InjectedPatch<
492
516
  TPk = ExtractPkName<T, Config>,
493
517
  I = PrismaModelInputs<M>
494
518
  > = C extends { baseMethods: { patch: { active: false } } } ? {} : {
495
- /** Atualiza parcialmente um registro existente através da sua chave primária (PK). */
496
- patch<S extends keyof TSelects | false = ResolveMethodDefaultSelect<Config, C, 'patch', TSelects>>(
519
+ /**
520
+ * Atualiza parcialmente (patch) um registro existente pela chave primária (PK), aceita os campos de relações definidas nas `relations`.
521
+ * @param pk Chave primária do registro.
522
+ * @param obj Objeto parcial com os campos a atualizar.
523
+ * @param options Opções adicionais (por exemplo `selectModel` ou `db`).
524
+ * @returns O registro atualizado refinado conforme a entrada.
525
+ */
526
+ patch<
527
+ O extends (I extends { updateInput: infer U } ? U : Record<string, any>),
528
+ S extends keyof TSelects | false = ResolveMethodDefaultSelect<Config, C, 'patch', TSelects>
529
+ >(
497
530
  pk: T[TPk extends keyof T ? TPk : never],
498
- obj: I extends { updateInput: infer U } ? U : Record<string, any>,
531
+ obj: O & (I extends { updateInput: infer U } ? U : Record<string, any>),
499
532
  options?: MethodOptions<S>
500
- ): Promise<ResolveCurrentReturn<M, TSelects, S, TDefault>>;
533
+ ): Promise<RefineSaveResult<ResolveCurrentReturn<M, TSelects, S, TDefault>, O>>;
501
534
  };
502
535
 
503
536
  type InjectedRemoveList<
504
537
  T, M extends Prisma.ModelName, Config, C extends BuildConfig<any> | undefined,
505
538
  TPk = ExtractPkName<T, Config>
506
539
  > = C extends { baseMethods: { removeList: { active: false } } } ? {} : {
507
- /** Remove múltiplos registros de uma vez pelas suas chaves primárias. */
540
+ /**
541
+ * Remove múltiplos registros pelas suas chaves primárias.
542
+ * @param pks Lista de chaves primárias a remover.
543
+ * @param options Opções adicionais (por exemplo `db`).
544
+ * @returns Objeto com a contagem de registros removidos.
545
+ */
508
546
  removeList(
509
547
  pks: T[TPk extends keyof T ? TPk : never][],
510
548
  options?: { db?: ClientOrTransaction }
@@ -517,7 +555,11 @@ type InjectedGetAll<
517
555
  TDefault = ExtractDefaultSelect<Config>,
518
556
  I = PrismaModelInputs<M>
519
557
  > = C extends { baseMethods: { getAll: { active: false } } } ? {} : {
520
- /** Busca todos os registros, respeitando o `requiredWhere` se houver. */
558
+ /**
559
+ * Busca todos os registros (respeita `requiredWhere` quando aplicado).
560
+ * @param options Opções adicionais, incluindo paginação, ordenação e `db`/`selectModel`.
561
+ * @returns Lista dos registros encontrados`.
562
+ */
521
563
  getAll<S extends keyof TSelects | false = ResolveMethodDefaultSelect<Config, C, 'getAll', TSelects>>(
522
564
  options?: MethodOptions<S> & {
523
565
  pagination?: PaginationOptions<I extends { cursorInput: infer Curs } ? Curs : unknown>;
@@ -529,7 +571,11 @@ type InjectedGetAll<
529
571
  type InjectedTotal<
530
572
  T, M extends Prisma.ModelName, Config, C extends BuildConfig<any> | undefined
531
573
  > = C extends { baseMethods: { total: { active: false } } } ? {} : {
532
- /** Retorna a quantidade total de registros, respeitando o `requiredWhere` se houver. */
574
+ /**
575
+ * Retorna a quantidade total de registros, respeitando `requiredWhere` quando aplicado.
576
+ * @param options Opções adicionais (por exemplo `db`).
577
+ * @returns Número total de registros.
578
+ */
533
579
  total(options?: { db?: ClientOrTransaction }): Promise<number>;
534
580
  };
535
581
 
@@ -537,7 +583,12 @@ type InjectedHas<
537
583
  T, M extends Prisma.ModelName, Config, C extends BuildConfig<any> | undefined,
538
584
  TPk = ExtractPkName<T, Config>
539
585
  > = C extends { baseMethods: { has: { active: false } } } ? {} : {
540
- /** Verifica de forma otimizada se um registro existe pela chave primária. */
586
+ /**
587
+ * Verifica se um registro existe pela chave primária (PK).
588
+ * @param pk Chave primária a verificar.
589
+ * @param options Opções adicionais (por exemplo `db`).
590
+ * @returns `true` se existir, caso contrário `false`.
591
+ */
541
592
  has(
542
593
  pk: T[TPk extends keyof T ? TPk : never],
543
594
  options?: { db?: ClientOrTransaction }
@@ -555,13 +606,57 @@ type InjectedBaseMethods<T, M extends Prisma.ModelName, Config, C extends BuildC
555
606
  InjectedTotal<T, M, Config, C> &
556
607
  InjectedHas<T, M, Config, C>;
557
608
 
609
+ /**
610
+ * Configuração de relação para One-to-Many ou Many-to-Many.
611
+ *
612
+ * @template TItem O tipo da entidade relacionada.
613
+ */
614
+ export type ManyRelationConfig<TItem> = {
615
+ /** A chave primária (Primary Key) do entidade relacionada. */
616
+ pk: keyof TItem;
617
+ /** Tipo de relação: `otm` (One-to-Many) ou `mtm` (Many-to-Many). */
618
+ mode: 'otm' | 'mtm';
619
+ /** Comportamento de mutação: `set` (substitui tudo) ou `add` (adiciona aos existentes). */
620
+ restriction: 'set' | 'add';
621
+ };
622
+
623
+ /**
624
+ * Configuração de relação One-to-One.
625
+ *
626
+ * @template TItem O tipo da entidade relacionada.
627
+ */
628
+ export type OneToOneRelationConfig<TItem> = {
629
+ /** A chave primária (Primary Key) do entidade relacionada. */
630
+ pk: keyof TItem;
631
+ /** Tipo de relação: `oto` (One-to-One). */
632
+ mode: 'oto';
633
+ /** Comportamento de mutação permitido para salvar. */
634
+ restriction: 'set' | 'add';
635
+ };
636
+
637
+ /**
638
+ * Configuração de relação Many-to-One.
639
+ *
640
+ * @template TItem O tipo da entidade relacionada.
641
+ */
642
+ export type ManyToOneRelationConfig<TItem> = {
643
+ /** A chave primária (Primary Key) da entidade relacionada. */
644
+ pk: keyof TItem;
645
+ /** Tipo de relação: `mto` (Many-to-One). */
646
+ mode: 'mto';
647
+ /** Comportamento de mutação permitido para salvar. */
648
+ restriction: 'set' | 'add';
649
+ /** Habilita a possibilidade de desvincular a relação, tornando a chave estrangeira nula. */
650
+ nullAble?: boolean;
651
+ };
652
+
558
653
  /**
559
654
  * Infere automaticamente a configuração de relação possível a partir de um campo.
560
655
  */
561
656
  export type ExtractRelationConfig<TField> = NonNullable<TField> extends infer NonNull
562
657
  ? NonNull extends Date | Buffer | Uint8Array ? never
563
- : NonNull extends any[] ? (NonNull[number] extends object ? { pk: keyof NonNull[number]; mode: 'otm' | 'mtm'; restriction: 'set' | 'add' } : never)
564
- : NonNull extends object ? ({ pk: keyof NonNull; mode: 'oto'; restriction: 'set' | 'add' } | { pk: keyof NonNull; mode: 'mto'; restriction: 'set' | 'add'; nullAble?: boolean })
658
+ : NonNull extends any[] ? (NonNull[number] extends object ? ManyRelationConfig<NonNull[number]> : never)
659
+ : NonNull extends object ? (OneToOneRelationConfig<NonNull> | ManyToOneRelationConfig<NonNull>)
565
660
  : never
566
661
  : never;
567
662
 
@@ -652,11 +747,11 @@ export type ValidateRepoConfig<T extends object, M extends Prisma.ModelName, Con
652
747
  pkName: keyof T;
653
748
  /** Mapa de select models disponíveis. */
654
749
  selectModels?: SelectModels<M>;
655
- /** Chave do select model padrão. */
750
+ /** Select model padrão. */
656
751
  defaultSelectModel?: Config extends { selectModels: infer SM } ? (keyof SM extends never ? string : Extract<keyof SM, string>) : string;
657
752
  /** Filtros globais aplicados às queries do repository. */
658
753
  requiredWhere?: WhereModel<M>;
659
- /** Relações gerenciadas automaticamente pelo `save`. */
754
+ /** Relações gerenciadas automaticamente pelo `save` e pelo `patch`. */
660
755
  relations?: RepositoryRelations<T>;
661
756
  /** Mapa dos métodos dinâmicos e suas regras de validação. */
662
757
  methods?: {
@@ -669,16 +764,12 @@ export type ValidateRepoConfig<T extends object, M extends Prisma.ModelName, Con
669
764
  };
670
765
 
671
766
  /**
672
- * Cria uma fábrica tipada para definir repositories fortemente tipados com Prisma.
673
- *
674
- * Use esta função para declarar `tableName`, `pkName`, `selectModels`,
675
- * `requiredWhere`, `relations` e `methods` do seu repository.
767
+ * Função para inicializar e configurar o `repository`.
768
+ * As configurações passadas nele são as que serão lidas ao executar o `.build()`.
676
769
  */
677
770
  export declare function setupVSRepo<T extends object, M extends Prisma.ModelName>(): <
678
771
  const SM extends Record<string, SelectModel<M>>,
679
772
  const Config extends RepoConfig<T, M, SM>
680
773
  >(
681
- config: Config extends ValidateRepoConfig<T, M, Config>
682
- ? Config
683
- : ValidateRepoConfig<T, M, Config>
774
+ config: Config & ValidateRepoConfig<T, M, Config>
684
775
  ) => VSRepository<T, M, Config>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vsrepo",
3
- "version": "1.1.6",
3
+ "version": "1.1.7",
4
4
  "description": "Uma biblioteca de repository pattern para Prisma",
5
5
  "homepage": "https://github.com/jaobrabo123/VSRepository#readme",
6
6
  "repository": {