@codenameryuu/adonis-lucid-soft-deletes 1.6.0 → 1.8.0

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.
@@ -4,7 +4,7 @@ import type { LucidModel, ModelQueryBuilderContract } from '@adonisjs/lucid/type
4
4
  import type { QueryClientContract } from '@adonisjs/lucid/types/database';
5
5
  import { BaseModel } from '@adonisjs/lucid/orm';
6
6
  type ModelQueryBuilderContractWithIgnoreDeleted<T extends LucidModel, R = InstanceType<T>> = ModelQueryBuilderContract<T, R> & {
7
- ignoreDeleted: boolean;
7
+ ignoreDeleted?: boolean;
8
8
  };
9
9
  export declare function SoftDeletes<T extends NormalizeConstructor<typeof BaseModel>>(superclass: T): {
10
10
  new (...args: any[]): {
@@ -91,8 +91,9 @@ export declare function SoftDeletes<T extends NormalizeConstructor<typeof BaseMo
91
91
  toAttributes(): Record<string, any>;
92
92
  related<Name extends undefined>(relation: Name): NonNullable</*elided*/ any[Name]> extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? (import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> & /*elided*/ any[Name] & {})["client"] : never;
93
93
  };
94
+ boot(): void;
94
95
  ignoreDeleted<Model extends /*elided*/ any & T>(query: ModelQueryBuilderContractWithIgnoreDeleted<Model, InstanceType<Model>>): void;
95
- ignoreDeletedPaginate<Model extends /*elided*/ any & T>([countQuery, query]: [ModelQueryBuilderContractWithIgnoreDeleted<Model, InstanceType<Model>>, ModelQueryBuilderContractWithIgnoreDeleted<Model, InstanceType<Model>>]): void;
96
+ ignoreDeletedPaginate([countQuery, query]: any): void;
96
97
  disableIgnore<Model extends /*elided*/ any & T, Result = InstanceType<Model>>(this: Model, query: ModelQueryBuilderContractWithIgnoreDeleted<Model, Result>): ModelQueryBuilderContractWithIgnoreDeleted<Model, Result>;
97
98
  /**
98
99
  * Fetch all models without filter by deleted_at
@@ -140,7 +141,6 @@ export declare function SoftDeletes<T extends NormalizeConstructor<typeof BaseMo
140
141
  <Model extends LucidModel>(this: Model, name: string): import("@adonisjs/lucid/types/relations").RelationshipsContract;
141
142
  };
142
143
  $defineProperty: <Model extends LucidModel, Prop extends keyof Model>(this: Model, propertyName: Prop, defaultValue: Model[Prop], strategy: "inherit" | "define" | ((value: Model[Prop]) => Model[Prop])) => void;
143
- boot: () => void;
144
144
  before: {
145
145
  <Model extends LucidModel, Event extends "find" | "fetch">(this: Model, event: Event, handler: import("@adonisjs/lucid/types/model").HooksHandler<ModelQueryBuilderContract<Model>, Event>): void;
146
146
  <Model extends LucidModel>(this: Model, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<[ModelQueryBuilderContract<Model>, ModelQueryBuilderContract<Model>], "paginate">): void;
@@ -14,21 +14,35 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
14
14
  };
15
15
  import { DateTime } from 'luxon';
16
16
  import { Exception } from '@adonisjs/core/exceptions';
17
- import { column, beforeFind, beforeFetch, beforePaginate } from '@adonisjs/lucid/orm';
17
+ import { column } from '@adonisjs/lucid/orm';
18
18
  export function SoftDeletes(superclass) {
19
19
  class ModelWithSoftDeletes extends superclass {
20
+ static boot() {
21
+ super.boot();
22
+ // `compose()` introduces intermediate classes. Depending on how Lucid handles
23
+ // boot flags, hooks can be skipped when mixing multiple mixins.
24
+ // Track hook registration per subclass.
25
+ if (this.$softDeletesHooksRegistered)
26
+ return;
27
+ this.$softDeletesHooksRegistered = true;
28
+ this.before('find', this.ignoreDeleted.bind(this));
29
+ this.before('fetch', this.ignoreDeleted.bind(this));
30
+ this.before('paginate', this.ignoreDeletedPaginate.bind(this));
31
+ }
20
32
  static ignoreDeleted(query) {
21
33
  if (query['ignoreDeleted'] === false) {
22
34
  return;
23
35
  }
24
36
  const isGroupLimitQuery = query.clone().toQuery().includes('adonis_group_limit_counter');
25
37
  const deletedAtColumn = query.model.$getColumn('deletedAt')?.columnName;
26
- const queryIgnoreDeleted = isGroupLimitQuery
27
- ? query.knexQuery['_single'].table
28
- : query;
38
+ if (!deletedAtColumn) {
39
+ return;
40
+ }
41
+ const queryIgnoreDeleted = isGroupLimitQuery ? query.knexQuery : query;
29
42
  queryIgnoreDeleted.whereNull(`${query.model.table}.${deletedAtColumn}`);
30
43
  }
31
44
  static ignoreDeletedPaginate([countQuery, query]) {
45
+ ;
32
46
  countQuery['ignoreDeleted'] = query['ignoreDeleted'];
33
47
  this.ignoreDeleted(countQuery);
34
48
  }
@@ -118,12 +132,5 @@ export function SoftDeletes(superclass) {
118
132
  __decorate([
119
133
  column.dateTime()
120
134
  ], ModelWithSoftDeletes.prototype, "deletedAt", void 0);
121
- __decorate([
122
- beforeFind(),
123
- beforeFetch()
124
- ], ModelWithSoftDeletes, "ignoreDeleted", null);
125
- __decorate([
126
- beforePaginate()
127
- ], ModelWithSoftDeletes, "ignoreDeletedPaginate", null);
128
135
  return ModelWithSoftDeletes;
129
136
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@codenameryuu/adonis-lucid-soft-deletes",
3
3
  "description": "Addon for soft deletes Adonis JS with Lucid ORM",
4
- "version": "1.6.0",
4
+ "version": "1.8.0",
5
5
  "author": "codenameryuu",
6
6
  "license": "MIT",
7
7
  "homepage": "https://github.com/codenameryuu/adonis-lucid-soft-deletes#readme",