@codenameryuu/adonis-lucid-auto-preload 1.5.0 → 1.7.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.
@@ -1,4 +1,3 @@
1
- import { AutoPreload } from '../src/mixins/auto_preload.js';
2
1
  export { configure } from '../configure.js';
3
2
  export default class AutoPreloadProvider {
4
3
  app;
@@ -6,11 +5,7 @@ export default class AutoPreloadProvider {
6
5
  constructor(app) {
7
6
  this.app = app;
8
7
  }
9
- register() {
10
- this.app.container.singleton('@codenameryuu/adonis-lucid-auto-preload', () => {
11
- return { AutoPreload };
12
- });
13
- }
8
+ register() { }
14
9
  async boot() { }
15
10
  async ready() { }
16
11
  async shutdown() { }
@@ -1,11 +1,152 @@
1
1
  import type { NormalizeConstructor } from '@adonisjs/core/types/helpers';
2
- import type { LucidModel } from '@adonisjs/lucid/types/model';
3
- type AutoPreloadMixin = <T extends NormalizeConstructor<LucidModel>>(superclass: T) => T & {
4
- $with: Array<string | ((query: any) => void)>;
5
- without(this: T, relationships: Array<string>): T;
6
- withOnly(this: T, relationships: Array<string>): T;
7
- withoutAny(this: T): T;
8
- new (...args: Array<any>): {};
9
- };
10
- export declare const AutoPreload: AutoPreloadMixin;
11
- export {};
2
+ import type { LucidModel, ModelQueryBuilderContract } from '@adonisjs/lucid/types/model';
3
+ export declare function AutoPreload<T extends NormalizeConstructor<LucidModel>>(superclass: T): {
4
+ new (...args: any[]): {
5
+ $attributes: import("@adonisjs/lucid/types/model").ModelObject;
6
+ $extras: import("@adonisjs/lucid/types/model").ModelObject;
7
+ $original: import("@adonisjs/lucid/types/model").ModelObject;
8
+ $preloaded: {
9
+ [relation: string]: import("@adonisjs/lucid/types/model").LucidRow | import("@adonisjs/lucid/types/model").LucidRow[];
10
+ };
11
+ $sideloaded: import("@adonisjs/lucid/types/model").ModelObject;
12
+ $primaryKeyValue?: number | string;
13
+ $isPersisted: boolean;
14
+ $isNew: boolean;
15
+ $isLocal: boolean;
16
+ $dirty: import("@adonisjs/lucid/types/model").ModelObject;
17
+ $isDirty: boolean;
18
+ $isDeleted: boolean;
19
+ $options?: import("@adonisjs/lucid/types/model").ModelOptions;
20
+ $trx?: import("@adonisjs/lucid/types/database").TransactionClientContract;
21
+ $setOptionsAndTrx(options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): void;
22
+ useTransaction(trx: import("@adonisjs/lucid/types/database").TransactionClientContract): /*elided*/ any;
23
+ useConnection(connection: string): /*elided*/ any;
24
+ $getQueryFor(action: "insert", client: import("@adonisjs/lucid/types/database").QueryClientContract): ReturnType<import("@adonisjs/lucid/types/database").QueryClientContract["insertQuery"]>;
25
+ $getQueryFor(action: "update" | "delete" | "refresh", client: import("@adonisjs/lucid/types/database").QueryClientContract): ModelQueryBuilderContract<LucidModel>;
26
+ $setAttribute(key: string, value: any): void;
27
+ $getAttribute(key: string): any;
28
+ $getAttributeFromCache(key: string, callback: import("@adonisjs/lucid/types/model").CacheNode["getter"]): any;
29
+ $hasRelated(key: string): boolean;
30
+ $setRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany<import("@adonisjs/lucid/types/model").LucidRow> | null): void;
31
+ $pushRelated(key: string, result: import("@adonisjs/lucid/types/querybuilder").OneOrMany<import("@adonisjs/lucid/types/model").LucidRow> | null): void;
32
+ $getRelated(key: string, defaultValue?: any): import("@adonisjs/lucid/types/querybuilder").OneOrMany<import("@adonisjs/lucid/types/model").LucidRow> | undefined | null;
33
+ $consumeAdapterResult(adapterResult: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject): void;
34
+ $hydrateOriginals(): void;
35
+ fill(value: Partial<import("@adonisjs/lucid/types/model").ModelAttributes</*elided*/ any>>, allowExtraProperties?: boolean): /*elided*/ any;
36
+ merge(value: Partial<import("@adonisjs/lucid/types/model").ModelAttributes</*elided*/ any>>, allowExtraProperties?: boolean): /*elided*/ any;
37
+ isDirty(fields?: undefined[] | undefined): boolean;
38
+ enableForceUpdate(): /*elided*/ any;
39
+ save(): Promise</*elided*/ any>;
40
+ saveQuietly(): Promise</*elided*/ any>;
41
+ lockForUpdate<T_1>(callback: (user: /*elided*/ any) => T_1 | Promise<T_1>): Promise<T_1>;
42
+ delete(): Promise<void>;
43
+ deleteQuietly(): Promise<void>;
44
+ refresh(): Promise</*elided*/ any>;
45
+ load: import("@adonisjs/lucid/types/model").LucidRowPreload</*elided*/ any>;
46
+ loadOnce: import("@adonisjs/lucid/types/model").LucidRowPreloadOnce</*elided*/ any>;
47
+ preload: import("@adonisjs/lucid/types/model").LucidRowPreload</*elided*/ any>;
48
+ loadAggregate: <Self extends /*elided*/ any, Name extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder = NonNullable<Self[Name]> extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? (import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> & Self[Name] & {})["subQuery"] : never>(name: Name, callback: (builder: RelatedBuilder) => void) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract<Self>;
49
+ loadCount: <Self extends /*elided*/ any, Name extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<Self>, RelatedBuilder = NonNullable<Self[Name]> extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? (import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> & Self[Name] & {})["subQuery"] : never>(name: Name, callback?: ((builder: RelatedBuilder) => void) | undefined) => import("@adonisjs/lucid/types/model").LazyLoadAggregatesContract<Self>;
50
+ serializeAttributes(fields?: import("@adonisjs/lucid/types/model").CherryPickFields, raw?: boolean): import("@adonisjs/lucid/types/model").ModelObject;
51
+ serializeComputed(fields?: import("@adonisjs/lucid/types/model").CherryPickFields): import("@adonisjs/lucid/types/model").ModelObject;
52
+ serializeRelations(fields: undefined, raw: true): {
53
+ [key: string]: import("@adonisjs/lucid/types/model").LucidRow | import("@adonisjs/lucid/types/model").LucidRow[];
54
+ };
55
+ serializeRelations(cherryPick: import("@adonisjs/lucid/types/model").CherryPick["relations"] | undefined, raw: false | undefined): import("@adonisjs/lucid/types/model").ModelObject;
56
+ serializeRelations(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick["relations"], raw?: boolean): import("@adonisjs/lucid/types/model").ModelObject;
57
+ serialize(cherryPick?: import("@adonisjs/lucid/types/model").CherryPick): import("@adonisjs/lucid/types/model").ModelObject;
58
+ toObject(): import("@adonisjs/lucid/types/model").ModelObject;
59
+ toJSON(): import("@adonisjs/lucid/types/model").ModelObject;
60
+ toAttributes(): Record<string, any>;
61
+ 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;
62
+ };
63
+ $with: Array<string | any>;
64
+ boot(): void;
65
+ /**
66
+ * Change from 'protected' to 'public' to fix the TS error
67
+ */
68
+ applyAutoPreload(query: ModelQueryBuilderContract<any, any>): void;
69
+ /**
70
+ * Change from 'private' to 'public'
71
+ */
72
+ handleNestedPreload(query: any, parts: string[]): void;
73
+ readonly booted: boolean;
74
+ $columnsDefinitions: Map<string, import("@adonisjs/lucid/types/model").ModelColumnOptions>;
75
+ $relationsDefinitions: Map<string, import("@adonisjs/lucid/types/relations").RelationshipsContract>;
76
+ $computedDefinitions: Map<string, import("@adonisjs/lucid/types/model").ComputedOptions>;
77
+ primaryKey: string;
78
+ connection?: string | undefined;
79
+ namingStrategy: import("@adonisjs/lucid/types/model").NamingStrategyContract;
80
+ table: string;
81
+ selfAssignPrimaryKey: boolean;
82
+ $adapter: import("@adonisjs/lucid/types/model").AdapterContract;
83
+ useAdapter: (adapter: import("@adonisjs/lucid/types/model").AdapterContract) => void;
84
+ $hooks: import("@poppinss/hooks").default<any>;
85
+ $keys: {
86
+ attributesToColumns: import("@adonisjs/lucid/types/model").ModelKeysContract;
87
+ attributesToSerialized: import("@adonisjs/lucid/types/model").ModelKeysContract;
88
+ columnsToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
89
+ columnsToSerialized: import("@adonisjs/lucid/types/model").ModelKeysContract;
90
+ serializedToColumns: import("@adonisjs/lucid/types/model").ModelKeysContract;
91
+ serializedToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
92
+ columnAliasesToAttributes: import("@adonisjs/lucid/types/model").ModelKeysContract;
93
+ };
94
+ $createFromAdapterResult: <T_1 extends LucidModel>(this: T_1, result?: import("@adonisjs/lucid/types/model").ModelObject, sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => null | InstanceType<T_1>;
95
+ $createMultipleFromAdapterResult: <T_1 extends LucidModel>(this: T_1, results: import("@adonisjs/lucid/types/model").ModelObject[], sideloadAttributes?: import("@adonisjs/lucid/types/model").ModelObject, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => InstanceType<T_1>[];
96
+ $addColumn: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ColumnOptions>) => import("@adonisjs/lucid/types/model").ColumnOptions;
97
+ $hasColumn: (name: string) => boolean;
98
+ $getColumn: (name: string) => import("@adonisjs/lucid/types/model").ModelColumnOptions | undefined;
99
+ $getColumnAlias: (columnName: string) => string;
100
+ columnsForSelect: () => Record<string, string>;
101
+ $addComputed: (name: string, options: Partial<import("@adonisjs/lucid/types/model").ComputedOptions>) => import("@adonisjs/lucid/types/model").ComputedOptions;
102
+ $hasComputed: (name: string) => boolean;
103
+ $getComputed: (name: string) => import("@adonisjs/lucid/types/model").ComputedOptions | undefined;
104
+ $addRelation: (name: string, type: import("@adonisjs/lucid/types/relations").ModelRelationTypes["__opaque_type"], relatedModel: () => LucidModel, options: import("@adonisjs/lucid/types/model").ModelRelationOptions) => void;
105
+ $hasRelation: (name: string) => boolean;
106
+ $getRelation: {
107
+ <Model extends LucidModel, Name extends import("@adonisjs/lucid/types/relations").ExtractModelRelations<InstanceType<Model>>>(this: Model, name: Name): NonNullable<InstanceType<Model>[Name]> extends import("@adonisjs/lucid/types/relations").ModelRelations<LucidModel, LucidModel> ? NonNullable<InstanceType<Model>[Name]>["client"]["relation"] : import("@adonisjs/lucid/types/relations").RelationshipsContract;
108
+ <Model extends LucidModel>(this: Model, name: string): import("@adonisjs/lucid/types/relations").RelationshipsContract;
109
+ };
110
+ $defineProperty: <Model extends LucidModel, Prop extends keyof Model>(this: Model, propertyName: Prop, defaultValue: Model[Prop], strategy: "inherit" | "define" | ((value: Model[Prop]) => Model[Prop])) => void;
111
+ before: {
112
+ <Model extends LucidModel, Event extends "find" | "fetch">(this: Model, event: Event, handler: import("@adonisjs/lucid/types/model").HooksHandler<ModelQueryBuilderContract<Model>, Event>): void;
113
+ <Model extends LucidModel>(this: Model, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<[ModelQueryBuilderContract<Model>, ModelQueryBuilderContract<Model>], "paginate">): void;
114
+ <Model extends LucidModel, Event extends import("@adonisjs/lucid/types/model").EventsList>(this: Model, event: Event, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model>, Event>): void;
115
+ };
116
+ after: {
117
+ <Model extends LucidModel>(this: Model, event: "fetch", handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model>[], "fetch">): void;
118
+ <Model extends LucidModel>(this: Model, event: "paginate", handler: import("@adonisjs/lucid/types/model").HooksHandler<import("@adonisjs/lucid/types/model").ModelPaginatorContract<InstanceType<Model>>, "paginate">): void;
119
+ <Model extends LucidModel, Event extends import("@adonisjs/lucid/types/model").EventsList>(this: Model, event: Event, handler: import("@adonisjs/lucid/types/model").HooksHandler<InstanceType<Model>, Event>): void;
120
+ };
121
+ create: <T_1 extends LucidModel>(this: T_1, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T_1>>;
122
+ createQuietly: <T_1 extends LucidModel>(this: T_1, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T_1>>;
123
+ createMany: <T_1 extends LucidModel>(this: T_1, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T_1>[]>;
124
+ createManyQuietly: <T_1 extends LucidModel>(this: T_1, values: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T_1>[]>;
125
+ find: <T_1 extends LucidModel>(this: T_1, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<null | InstanceType<T_1>>;
126
+ findOrFail: <T_1 extends LucidModel>(this: T_1, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T_1>>;
127
+ findBy: {
128
+ <T_1 extends LucidModel>(this: T_1, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<null | InstanceType<T_1>>;
129
+ <T_1 extends LucidModel>(this: T_1, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<null | InstanceType<T_1>>;
130
+ };
131
+ findByOrFail: {
132
+ <T_1 extends LucidModel>(this: T_1, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T_1>>;
133
+ <T_1 extends LucidModel>(this: T_1, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T_1>>;
134
+ };
135
+ findManyBy: {
136
+ <T_1 extends LucidModel>(this: T_1, clause: Record<string, unknown>, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T_1>[]>;
137
+ <T_1 extends LucidModel>(this: T_1, key: string, value: any, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions): Promise<InstanceType<T_1>[]>;
138
+ };
139
+ first: <T_1 extends LucidModel>(this: T_1, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<null | InstanceType<T_1>>;
140
+ firstOrFail: <T_1 extends LucidModel>(this: T_1, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T_1>>;
141
+ findMany: <T_1 extends LucidModel>(this: T_1, value: any[], options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T_1>[]>;
142
+ firstOrNew: <T_1 extends LucidModel>(this: T_1, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T_1>>;
143
+ firstOrCreate: <T_1 extends LucidModel>(this: T_1, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>>, savePayload?: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T_1>>;
144
+ updateOrCreate: <T_1 extends LucidModel>(this: T_1, searchPayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>>, updatePayload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>>, options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T_1>>;
145
+ fetchOrNewUpMany: <T_1 extends LucidModel>(this: T_1, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T_1>[]>;
146
+ fetchOrCreateMany: <T_1 extends LucidModel>(this: T_1, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T_1>[]>;
147
+ updateOrCreateMany: <T_1 extends LucidModel>(this: T_1, predicate: keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>> | (keyof import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>)[], payload: Partial<import("@adonisjs/lucid/types/model").ModelAttributes<InstanceType<T_1>>>[], options?: import("@adonisjs/lucid/types/model").ModelAssignOptions) => Promise<InstanceType<T_1>[]>;
148
+ all: <T_1 extends LucidModel>(this: T_1, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => Promise<InstanceType<T_1>[]>;
149
+ query: <Model extends LucidModel, Result = InstanceType<Model>>(this: Model, options?: import("@adonisjs/lucid/types/model").ModelAdapterOptions) => ModelQueryBuilderContract<Model, Result>;
150
+ transaction: import("@adonisjs/lucid/types/database").TransactionFn;
151
+ truncate: (cascade?: boolean) => Promise<void>;
152
+ } & T;
@@ -1,112 +1,51 @@
1
- import WrongRelationshipTypeException from '../exceptions/wrong_relationship_type_exception.js';
2
- import WrongArgumentTypeException from '../exceptions/wrong_argument_type_exception.js';
3
- export const AutoPreload = (superclass) => {
4
- class AutoPreloadModel extends superclass {
1
+ export function AutoPreload(superclass) {
2
+ return class extends superclass {
5
3
  static $with = [];
6
- static $originalWith = [];
7
4
  static boot() {
8
- if (this.booted) {
5
+ if (this.booted)
9
6
  return;
10
- }
11
- if (this.$with.length > 0) {
12
- const isWrongType = this.$with.every((relationship) => {
13
- return !['function', 'string'].includes(typeof relationship);
14
- });
15
- if (isWrongType) {
16
- throw WrongRelationshipTypeException.invoke(this.name);
17
- }
18
- }
19
7
  super.boot();
20
- this.$originalWith = [...this.$with];
21
- for (const hook of ['fetch', 'find']) {
22
- this.before(hook, (query) => {
23
- this.handleAutoPreload(query);
24
- });
25
- }
26
- this.before('paginate', ([_, query]) => {
27
- this.handleAutoPreload(query, false);
28
- });
29
- }
30
- static without(relationships) {
31
- this.checkArrayOfRelationships('without', relationships);
32
- this.$with = this.$with.filter((relationship) => {
33
- if (typeof relationship === 'string') {
34
- return !relationships.includes(relationship);
35
- }
36
- else if (typeof relationship === 'function') {
37
- return relationship;
38
- }
39
- else {
40
- throw WrongArgumentTypeException.invoke(relationship);
41
- }
42
- });
43
- return this;
44
- }
45
- static withOnly(relationships) {
46
- this.checkArrayOfRelationships('withOnly', relationships);
47
- this.$with = this.$with.filter((relationship) => {
48
- if (typeof relationship === 'string') {
49
- return relationships.includes(relationship);
50
- }
51
- else if (typeof relationship === 'function') {
52
- return relationship;
53
- }
54
- else {
55
- throw WrongArgumentTypeException.invoke(relationship);
56
- }
8
+ this.before('find', (query) => this.applyAutoPreload(query));
9
+ this.before('fetch', (query) => this.applyAutoPreload(query));
10
+ this.before('paginate', (queries) => {
11
+ // Lucid v6/v7 sends [countQuery, mainQuery]
12
+ const query = Array.isArray(queries) ? queries[1] : queries;
13
+ this.applyAutoPreload(query);
57
14
  });
58
- return this;
59
15
  }
60
- static withoutAny() {
61
- this.$with = [];
62
- return this;
63
- }
64
- static handleAutoPreload(query, restorePreloads = true) {
65
- const preloads = this.$with;
66
- if (preloads.length > 0) {
67
- for (const preload of preloads) {
68
- if (typeof preload === 'string') {
69
- if (preload.includes('.')) {
70
- this.handleNestedRelationships(query, preload.split('.'));
71
- }
72
- else {
73
- query.preload(preload);
74
- }
16
+ /**
17
+ * Change from 'protected' to 'public' to fix the TS error
18
+ */
19
+ static applyAutoPreload(query) {
20
+ const relations = this.$with || [];
21
+ if (!Array.isArray(relations))
22
+ return;
23
+ relations.forEach((relation) => {
24
+ if (typeof relation === 'string') {
25
+ if (relation.includes('.')) {
26
+ this.handleNestedPreload(query, relation.split('.'));
75
27
  }
76
- else if (typeof preload === 'function') {
77
- preload(query);
28
+ else {
29
+ query.preload(relation);
78
30
  }
79
31
  }
80
- }
81
- if (restorePreloads) {
82
- this.$with = [...this.$originalWith];
83
- }
32
+ else if (typeof relation === 'function') {
33
+ relation(query);
34
+ }
35
+ });
84
36
  }
85
37
  /**
86
- * Recursive function to handle nested relationships.
38
+ * Change from 'private' to 'public'
87
39
  */
88
- static handleNestedRelationships(query, relationships) {
89
- if (relationships.length > 0) {
90
- const nextRelation = relationships.shift();
91
- if (nextRelation) {
92
- query.preload(nextRelation, (qb) => {
93
- if (relationships.length > 0) {
94
- this.handleNestedRelationships(qb, relationships);
95
- }
96
- });
97
- }
98
- }
99
- }
100
- static checkArrayOfRelationships(method, relationships) {
101
- if (relationships.length > 0) {
102
- const isWrongType = relationships.every((relationship) => {
103
- return !['function', 'string'].includes(typeof relationship);
104
- });
105
- if (isWrongType) {
106
- throw WrongArgumentTypeException.invoke(method);
40
+ static handleNestedPreload(query, parts) {
41
+ const current = parts.shift();
42
+ if (!current)
43
+ return;
44
+ query.preload(current, (builder) => {
45
+ if (parts.length > 0) {
46
+ this.handleNestedPreload(builder, parts);
107
47
  }
108
- }
48
+ });
109
49
  }
110
- }
111
- return AutoPreloadModel;
112
- };
50
+ };
51
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@codenameryuu/adonis-lucid-auto-preload",
3
- "version": "1.5.0",
3
+ "version": "1.7.0",
4
4
  "description": "Auto-preload multiple relationships when retrieving Lucid models on Adonis JS 7",
5
5
  "author": "codenameryuu",
6
6
  "license": "MIT",
@@ -20,9 +20,10 @@
20
20
  ],
21
21
  "exports": {
22
22
  ".": "./build/index.js",
23
- "./adonis-typings": "./build/adonis-typings/*.js",
24
- "./exceptions": "./build/exceptions/*.js",
25
- "./providers": "./build/providers/auto_preload_provider.js"
23
+ "./mixins": "./build/src/mixins/auto_preload.js",
24
+ "./adonis-typings/*": "./build/adonis-typings/*.js",
25
+ "./exceptions/*": "./build/exceptions/*.js",
26
+ "./provider": "./build/providers/auto_preload_provider.js"
26
27
  },
27
28
  "scripts": {
28
29
  "clean": "del-cli build",