@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
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
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
|
-
|
|
2
|
-
|
|
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
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
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
|
|
77
|
-
preload(
|
|
28
|
+
else {
|
|
29
|
+
query.preload(relation);
|
|
78
30
|
}
|
|
79
31
|
}
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
}
|
|
32
|
+
else if (typeof relation === 'function') {
|
|
33
|
+
relation(query);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
84
36
|
}
|
|
85
37
|
/**
|
|
86
|
-
*
|
|
38
|
+
* Change from 'private' to 'public'
|
|
87
39
|
*/
|
|
88
|
-
static
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
112
|
-
};
|
|
50
|
+
};
|
|
51
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codenameryuu/adonis-lucid-auto-preload",
|
|
3
|
-
"version": "1.
|
|
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
|
-
"./
|
|
24
|
-
"./
|
|
25
|
-
"./
|
|
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",
|