UNPKG

7.64 kBTypeScriptView Raw
1/// <reference path="_common.d.ts" />
2/// <reference path="model.d.ts" />
3
4declare namespace FxOrmAssociation {
5 type AssociationType = 'extendsTo' | 'hasOne' | 'hasMany'
6
7 /**
8 * @type.function: (model_name: string, idkey: string) => string
9 *
10 * @string.default: `{model_name}_${idkey}`
11 */
12 type AssociationKeyComputation = (model_name: string, idkey: string) => string | string
13 interface AssociationDefinitionOptions {
14 /**
15 * it's also accessor base for `extendsTo`, `hasOne`, `hasMany`,
16 *
17 * @notice fallback from `acessor` for `hasOne`, `hasMany`
18 */
19 name?: string;
20 model?: FxOrmModel.Model;
21 field?: string/* | string[] */ | FxOrmProperty.NormalizedPropertyHash
22
23 // is the association is for extendsTo
24 __for_extension?: boolean;
25 required?: boolean;
26 reversed?: boolean;
27 /**
28 * accessor base for `hasOne`, `hasMany`
29 */
30 accessor?: string;
31 /**
32 * accessor base for `hasOne`
33 */
34 reverseAccessor?: string;
35 autoFetch?: boolean;
36 autoFetchLimit?: number;
37
38 getAccessor?: string;
39 setAccessor?: string;
40 hasAccessor?: string;
41 delAccessor?: string;
42 addAccessor?: string;
43
44 modelFindByAccessor?: string;
45
46 hooks?: InstanceAssociationItem['hooks']
47 }
48
49 interface AssociationDefinitionOptions_ExtendsTo extends AssociationDefinitionOptions {
50 table?: string;
51
52 reverse?: string;
53 reverseHooks?: InstanceAssociationItem_HasOne['hooks'];
54 }
55 interface AssociationDefinitionOptions_HasOne extends AssociationDefinitionOptions {
56 reverse?: string;
57 reverseHooks?: InstanceAssociationItem_HasOne['hooks'];
58 }
59 interface AssociationDefinitionOptions_HasMany extends AssociationDefinitionOptions {
60 reverse?: string;
61 reverseHooks?: AssociationDefinitionOptions_HasMany['hooks']
62 // is association property a primary key
63 key?: boolean
64 mergeId?: string | FxOrmModel.DetailedPropertyDefinitionHash
65 mergeAssocId?: string | FxOrmModel.DetailedPropertyDefinitionHash
66 reverseAssociation?: string
67
68 hooks?: InstanceAssociationItem['hooks'] & {
69 /**
70 * @_1st_arg { associations: [] }
71 */
72 beforeAdd?: FxOrmHook.HookActionCallback
73 afterAdd?: FxOrmHook.HookResultCallback
74 // @deprecated
75 beforeSave?: {
76 (next?: Function): void;
77 (extra: any, next?: Function): void;
78 }
79 }
80 mergeTable?: string
81
82 association?: string
83
84 getAccessor?: string;
85 setAccessor?: string;
86 hasAccessor?: string;
87 delAccessor?: string;
88 addAccessor?: string;
89 }
90
91 interface InstanceAssociationItemHooks {
92 beforeSet?: {
93 (func: FxOrmHook.HookActionCallback, opts?: FxOrmHook.HookPatchOptions & Fibjs.AnyObject): any
94 }
95 afterSet?: {
96 (func: FxOrmHook.HookResultCallback, opts?: FxOrmHook.HookPatchOptions & Fibjs.AnyObject): any
97 }
98 beforeRemove?: {
99 (func: FxOrmHook.HookActionCallback, opts?: FxOrmHook.HookPatchOptions & Fibjs.AnyObject): any
100 }
101 afterRemove?: {
102 (func: FxOrmHook.HookResultCallback, opts?: FxOrmHook.HookPatchOptions & Fibjs.AnyObject): any
103 }
104
105 beforeAdd?: {
106 (func: FxOrmHook.HookActionCallback, opts?: FxOrmHook.HookPatchOptions & Fibjs.AnyObject): any
107 }
108 afterAdd?: {
109 (func: FxOrmHook.HookResultCallback, opts?: FxOrmHook.HookPatchOptions & Fibjs.AnyObject): any
110 }
111 }
112
113 interface InstanceAssociationItem extends InstanceAssociationItemHooks {
114 name: string
115 model: FxOrmModel.Model
116 field: string /* | string[] */ | FxOrmProperty.NormalizedPropertyHash
117 hooks: {
118 beforeSet?: FxOrmNS.Arraible<FxOrmHook.HookActionCallback>
119 afterSet?: FxOrmNS.Arraible<FxOrmHook.HookResultCallback>
120 beforeRemove?: FxOrmNS.Arraible<FxOrmHook.HookActionCallback>
121 afterRemove?: FxOrmNS.Arraible<FxOrmHook.HookResultCallback>
122
123 [k: string]: FxOrmNS.Arraible<FxOrmHook.HookActionCallback | FxOrmHook.HookResultCallback>
124 }
125
126 // is the association is extendsTo
127 __for_extension?: boolean
128
129 getAccessor: string
130 getSyncAccessor: string
131 setAccessor: string
132 setSyncAccessor: string
133 hasAccessor: string
134 hasSyncAccessor: string
135 delAccessor: string
136 delSyncAccessor: string
137
138 addAccessor?: string
139 addSyncAccessor?: string
140
141 modelFindByAccessor?: string
142 modelFindBySyncAccessor?: string
143
144 reversed?: boolean
145 autoFetch: boolean
146 autoFetchLimit: number
147
148 mapsTo?: FxOrmModel.ModelPropertyDefinition['mapsTo']
149
150 // *Accessor functions
151 [k: string]: any
152 }
153
154 interface InstanceAssociatedInstance extends FxOrmInstance.Instance {
155 }
156
157 interface InstanceAssociationItem_ExtendTos extends InstanceAssociationItem {
158 table: string;
159 reverse?: string;
160 modelFindByAccessor: string
161 }
162
163 interface InstanceAssociationItem_HasOne extends InstanceAssociationItem {
164 field: FxOrmProperty.NormalizedPropertyHash
165
166 reverse?: string;
167 reverseHooks?: InstanceAssociationItem_HasOne['hooks'];
168 // template name
169 accessor?: string;
170 reverseAccessor?: string;
171
172 // addAccessor?: string;
173
174 modelFindByAccessor: string
175
176 required?: boolean;
177 __for_extension?: boolean;
178 }
179
180 interface InstanceAssociationItem_HasMany extends InstanceAssociationItem {
181 props: FxOrmProperty.NormalizedPropertyHash
182 // hooks: HasManyHooks
183
184 mergeTable: string
185 mergeId: FxOrmProperty.NormalizedPropertyHash
186 mergeAssocId: FxOrmProperty.NormalizedPropertyHash
187
188 getAccessor: string
189 setAccessor: string
190 hasAccessor: string
191 delAccessor: string
192 addAccessor: string
193
194 modelFindByAccessor?: string
195
196 hooks: AssociationDefinitionOptions_HasMany['hooks']
197 }
198
199 interface InstanceAssociationItemInformation {
200 changed: boolean
201 value?: InstanceAssociatedInstance
202 data?: InstanceAssociationItem
203 }
204
205 // @deprecated
206 type ModelAssociationMethod__ComputationPayload__Merge = FxOrmQuery.ChainFindMergeInfo
207
208 interface ModelAssociationMethod__Options {
209 // only valid for hasMany assoc
210 join_where?: FxOrmModel.ModelFindByDescriptorItem['join_where']
211 extra?: FxOrmModel.ModelOptions__Find['extra']
212 extra_info?: {
213 table: string
214 id: FxOrmModel.Model['id']
215 id_prop: string[]
216 assoc_prop: string[]
217 }
218 }
219
220 interface ModelAssociationMethod__FindOptions extends FxOrmModel.ModelOptions__Find, ModelAssociationMethod__Options {
221 }
222
223 interface ModelAssociationMethod__GetOptions extends FxOrmModel.ModelOptions__Find, ModelAssociationMethod__Options {
224 }
225
226 interface ModelAssociationMethod__FindByOptions extends FxOrmModel.ModelOptions__Findby, ModelAssociationMethod__Options {
227 }
228
229 interface AccessorOptions_has {
230
231 }
232
233 type AccessorOptions_get = FxOrmNS.IdType | FxOrmModel.ModelQueryConditions__Find
234
235 interface AutoFetchInstanceOptions {
236 autoFetch?: boolean
237 autoFetchLimit?: number
238 }
239}