///
///
declare namespace FxOrmAssociation {
type AssociationType = 'extendsTo' | 'hasOne' | 'hasMany'
/**
* @type.function: (model_name: string, idkey: string) => string
*
* @string.default: `{model_name}_${idkey}`
*/
type AssociationKeyComputation = (model_name: string, idkey: string) => string | string
interface AssociationDefinitionOptions {
/**
* it's also accessor base for `extendsTo`, `hasOne`, `hasMany`,
*
* @notice fallback from `acessor` for `hasOne`, `hasMany`
*/
name?: string;
model?: FxOrmModel.Model;
field?: string/* | string[] */ | FxOrmProperty.NormalizedPropertyHash
// is the association is for extendsTo
__for_extension?: boolean;
required?: boolean;
reversed?: boolean;
/**
* accessor base for `hasOne`, `hasMany`
*/
accessor?: string;
/**
* accessor base for `hasOne`
*/
reverseAccessor?: string;
autoFetch?: boolean;
autoFetchLimit?: number;
getAccessor?: string;
setAccessor?: string;
hasAccessor?: string;
delAccessor?: string;
addAccessor?: string;
modelFindByAccessor?: string;
hooks?: InstanceAssociationItem['hooks']
}
interface AssociationDefinitionOptions_ExtendsTo extends AssociationDefinitionOptions {
table?: string;
reverse?: string;
reverseHooks?: InstanceAssociationItem_HasOne['hooks'];
}
interface AssociationDefinitionOptions_HasOne extends AssociationDefinitionOptions {
reverse?: string;
reverseHooks?: InstanceAssociationItem_HasOne['hooks'];
}
interface AssociationDefinitionOptions_HasMany extends AssociationDefinitionOptions {
reverse?: string;
reverseHooks?: AssociationDefinitionOptions_HasMany['hooks']
// is association property a primary key
key?: boolean
mergeId?: string | FxOrmModel.DetailedPropertyDefinitionHash
mergeAssocId?: string | FxOrmModel.DetailedPropertyDefinitionHash
reverseAssociation?: string
hooks?: InstanceAssociationItem['hooks'] & {
/**
* @_1st_arg { associations: [] }
*/
beforeAdd?: FxOrmHook.HookActionCallback
afterAdd?: FxOrmHook.HookResultCallback
// @deprecated
beforeSave?: {
(next?: Function): void;
(extra: any, next?: Function): void;
}
}
mergeTable?: string
association?: string
getAccessor?: string;
setAccessor?: string;
hasAccessor?: string;
delAccessor?: string;
addAccessor?: string;
}
interface InstanceAssociationItemHooks {
beforeSet?: {
(func: FxOrmHook.HookActionCallback, opts?: FxOrmHook.HookPatchOptions & Fibjs.AnyObject): any
}
afterSet?: {
(func: FxOrmHook.HookResultCallback, opts?: FxOrmHook.HookPatchOptions & Fibjs.AnyObject): any
}
beforeRemove?: {
(func: FxOrmHook.HookActionCallback, opts?: FxOrmHook.HookPatchOptions & Fibjs.AnyObject): any
}
afterRemove?: {
(func: FxOrmHook.HookResultCallback, opts?: FxOrmHook.HookPatchOptions & Fibjs.AnyObject): any
}
beforeAdd?: {
(func: FxOrmHook.HookActionCallback, opts?: FxOrmHook.HookPatchOptions & Fibjs.AnyObject): any
}
afterAdd?: {
(func: FxOrmHook.HookResultCallback, opts?: FxOrmHook.HookPatchOptions & Fibjs.AnyObject): any
}
}
interface InstanceAssociationItem extends InstanceAssociationItemHooks {
name: string
model: FxOrmModel.Model
field: string /* | string[] */ | FxOrmProperty.NormalizedPropertyHash
hooks: {
beforeSet?: FxOrmNS.Arraible
afterSet?: FxOrmNS.Arraible
beforeRemove?: FxOrmNS.Arraible
afterRemove?: FxOrmNS.Arraible
[k: string]: FxOrmNS.Arraible
}
// is the association is extendsTo
__for_extension?: boolean
getAccessor: string
getSyncAccessor: string
setAccessor: string
setSyncAccessor: string
hasAccessor: string
hasSyncAccessor: string
delAccessor: string
delSyncAccessor: string
addAccessor?: string
addSyncAccessor?: string
modelFindByAccessor?: string
modelFindBySyncAccessor?: string
reversed?: boolean
autoFetch: boolean
autoFetchLimit: number
mapsTo?: FxOrmModel.ModelPropertyDefinition['mapsTo']
// *Accessor functions
[k: string]: any
}
interface InstanceAssociatedInstance extends FxOrmInstance.Instance {
}
interface InstanceAssociationItem_ExtendTos extends InstanceAssociationItem {
table: string;
reverse?: string;
modelFindByAccessor: string
}
interface InstanceAssociationItem_HasOne extends InstanceAssociationItem {
field: FxOrmProperty.NormalizedPropertyHash
reverse?: string;
reverseHooks?: InstanceAssociationItem_HasOne['hooks'];
// template name
accessor?: string;
reverseAccessor?: string;
// addAccessor?: string;
modelFindByAccessor: string
required?: boolean;
__for_extension?: boolean;
}
interface InstanceAssociationItem_HasMany extends InstanceAssociationItem {
props: FxOrmProperty.NormalizedPropertyHash
// hooks: HasManyHooks
mergeTable: string
mergeId: FxOrmProperty.NormalizedPropertyHash
mergeAssocId: FxOrmProperty.NormalizedPropertyHash
getAccessor: string
setAccessor: string
hasAccessor: string
delAccessor: string
addAccessor: string
modelFindByAccessor?: string
hooks: AssociationDefinitionOptions_HasMany['hooks']
}
interface InstanceAssociationItemInformation {
changed: boolean
value?: InstanceAssociatedInstance
data?: InstanceAssociationItem
}
// @deprecated
type ModelAssociationMethod__ComputationPayload__Merge = FxOrmQuery.ChainFindMergeInfo
interface ModelAssociationMethod__Options {
// only valid for hasMany assoc
join_where?: FxOrmModel.ModelFindByDescriptorItem['join_where']
extra?: FxOrmModel.ModelOptions__Find['extra']
extra_info?: {
table: string
id: FxOrmModel.Model['id']
id_prop: string[]
assoc_prop: string[]
}
}
interface ModelAssociationMethod__FindOptions extends FxOrmModel.ModelOptions__Find, ModelAssociationMethod__Options {
}
interface ModelAssociationMethod__GetOptions extends FxOrmModel.ModelOptions__Find, ModelAssociationMethod__Options {
}
interface ModelAssociationMethod__FindByOptions extends FxOrmModel.ModelOptions__Findby, ModelAssociationMethod__Options {
}
interface AccessorOptions_has {
}
type AccessorOptions_get = FxOrmNS.IdType | FxOrmModel.ModelQueryConditions__Find
interface AutoFetchInstanceOptions {
autoFetch?: boolean
autoFetchLimit?: number
}
}