@@ -35,8 +35,35 @@ import {getCreateFunction} from '../common/definable.ts';
3535import { objFreeze } from '../common/obj.ts' ;
3636import { isUndefined } from '../common/other.ts' ;
3737
38+ const reduceCallbacks = (
39+ callbacks : ( ( ...args : any [ ] ) => any ) [ ] ,
40+ thing : any ,
41+ ...ids : Id [ ]
42+ ) : any =>
43+ arrayReduce (
44+ callbacks ,
45+ ( current , callback ) =>
46+ isUndefined ( current ) ? current : callback ( ...ids , current ) ,
47+ thing ,
48+ ) ;
49+
50+ const everyCallback = (
51+ callbacks : ( ( ...args : any [ ] ) => boolean ) [ ] ,
52+ ...ids : Id [ ]
53+ ) : boolean => arrayEvery ( callbacks , ( callback ) => callback ( ...ids ) ) ;
54+
3855export const createMiddleware = getCreateFunction (
3956 ( store : Store ) : Middleware => {
57+ const fluent = ( actions : ( ) => void ) : Middleware => {
58+ actions ( ) ;
59+ return middleware ;
60+ } ;
61+
62+ const addCallback =
63+ < Callback > ( callbacks : Callback [ ] ) =>
64+ ( callback : Callback ) : Middleware =>
65+ fluent ( ( ) => arrayPush ( callbacks , callback ) ) ;
66+
4067 const willSetContentCallbacks : WillSetContentCallback [ ] = [ ] ;
4168 const willSetTablesCallbacks : WillSetTablesCallback [ ] = [ ] ;
4269 const willSetTableCallbacks : WillSetTableCallback [ ] = [ ] ;
@@ -52,106 +79,50 @@ export const createMiddleware = getCreateFunction(
5279 const willDelValueCallbacks : WillDelValueCallback [ ] = [ ] ;
5380 const willApplyChangesCallbacks : WillApplyChangesCallback [ ] = [ ] ;
5481
55- const willSetContent = (
56- content : Content ,
57- ) : Content | undefined =>
58- arrayReduce (
59- willSetContentCallbacks ,
60- ( current , callback ) =>
61- isUndefined ( current )
62- ? current
63- : callback ( current as Content ) ,
64- content as Content | undefined ,
65- ) ;
82+ const willSetContent = ( content : Content ) : Content | undefined =>
83+ reduceCallbacks ( willSetContentCallbacks , content ) ;
6684
6785 const willSetTables = ( tables : Tables ) : Tables | undefined =>
68- arrayReduce (
69- willSetTablesCallbacks ,
70- ( current , callback ) =>
71- isUndefined ( current ) ? current : callback ( current as Tables ) ,
72- tables as Tables | undefined ,
73- ) ;
86+ reduceCallbacks ( willSetTablesCallbacks , tables ) ;
7487
7588 const willSetTable = ( tableId : Id , table : Table ) : Table | undefined =>
76- arrayReduce (
77- willSetTableCallbacks ,
78- ( current , callback ) =>
79- isUndefined ( current ) ? current : callback ( tableId , current as Table ) ,
80- table as Table | undefined ,
81- ) ;
89+ reduceCallbacks ( willSetTableCallbacks , table , tableId ) ;
8290
8391 const willSetRow = ( tableId : Id , rowId : Id , row : Row ) : Row | undefined =>
84- arrayReduce (
85- willSetRowCallbacks ,
86- ( current , callback ) =>
87- isUndefined ( current )
88- ? current
89- : callback ( tableId , rowId , current as Row ) ,
90- row as Row | undefined ,
91- ) ;
92+ reduceCallbacks ( willSetRowCallbacks , row , tableId , rowId ) ;
9293
9394 const willSetCell = (
9495 tableId : Id ,
9596 rowId : Id ,
9697 cellId : Id ,
9798 cell : Cell ,
9899 ) : CellOrUndefined =>
99- arrayReduce (
100- willSetCellCallbacks ,
101- ( current , callback ) =>
102- isUndefined ( current )
103- ? current
104- : callback ( tableId , rowId , cellId , current as Cell ) ,
105- cell as CellOrUndefined ,
106- ) ;
100+ reduceCallbacks ( willSetCellCallbacks , cell , tableId , rowId , cellId ) ;
107101
108102 const willSetValues = ( values : Values ) : Values | undefined =>
109- arrayReduce (
110- willSetValuesCallbacks ,
111- ( current , callback ) =>
112- isUndefined ( current ) ? current : callback ( current as Values ) ,
113- values as Values | undefined ,
114- ) ;
103+ reduceCallbacks ( willSetValuesCallbacks , values ) ;
115104
116105 const willSetValue = ( valueId : Id , value : Value ) : ValueOrUndefined =>
117- arrayReduce (
118- willSetValueCallbacks ,
119- ( current , callback ) =>
120- isUndefined ( current ) ? current : callback ( valueId , current as Value ) ,
121- value as ValueOrUndefined ,
122- ) ;
106+ reduceCallbacks ( willSetValueCallbacks , value , valueId ) ;
123107
124- const willDelTables = ( ) : boolean =>
125- arrayEvery ( willDelTablesCallbacks , ( callback ) => callback ( ) ) ;
108+ const willDelTables = ( ) : boolean => everyCallback ( willDelTablesCallbacks ) ;
126109
127110 const willDelTable = ( tableId : Id ) : boolean =>
128- arrayEvery ( willDelTableCallbacks , ( callback ) => callback ( tableId ) ) ;
111+ everyCallback ( willDelTableCallbacks , tableId ) ;
129112
130113 const willDelRow = ( tableId : Id , rowId : Id ) : boolean =>
131- arrayEvery ( willDelRowCallbacks , ( callback ) => callback ( tableId , rowId ) ) ;
114+ everyCallback ( willDelRowCallbacks , tableId , rowId ) ;
132115
133116 const willDelCell = ( tableId : Id , rowId : Id , cellId : Id ) : boolean =>
134- arrayEvery ( willDelCellCallbacks , ( callback ) =>
135- callback ( tableId , rowId , cellId ) ,
136- ) ;
117+ everyCallback ( willDelCellCallbacks , tableId , rowId , cellId ) ;
137118
138- const willDelValues = ( ) : boolean =>
139- arrayEvery ( willDelValuesCallbacks , ( callback ) => callback ( ) ) ;
119+ const willDelValues = ( ) : boolean => everyCallback ( willDelValuesCallbacks ) ;
140120
141121 const willDelValue = ( valueId : Id ) : boolean =>
142- arrayEvery ( willDelValueCallbacks , ( callback ) => callback ( valueId ) ) ;
122+ everyCallback ( willDelValueCallbacks , valueId ) ;
143123
144- const willApplyChanges = (
145- changes : Changes ,
146- ) : Changes | undefined =>
147- arrayReduce (
148- willApplyChangesCallbacks ,
149- ( current , callback ) =>
150- isUndefined ( current )
151- ? current
152- : callback ( current as Changes ) ,
153- changes as Changes | undefined ,
154- ) ;
124+ const willApplyChanges = ( changes : Changes ) : Changes | undefined =>
125+ reduceCallbacks ( willApplyChangesCallbacks , changes ) ;
155126
156127 ( store as any ) . setWillCallbacks (
157128 willSetContent ,
@@ -172,66 +143,20 @@ export const createMiddleware = getCreateFunction(
172143
173144 const getStore = ( ) : Store => store ;
174145
175- const fluent = ( actions : ( ) => void ) : Middleware => {
176- actions ( ) ;
177- return middleware ;
178- } ;
179-
180- const addWillSetContentCallback = (
181- callback : WillSetContentCallback ,
182- ) : Middleware =>
183- fluent ( ( ) => arrayPush ( willSetContentCallbacks , callback ) ) ;
184-
185- const addWillSetTablesCallback = (
186- callback : WillSetTablesCallback ,
187- ) : Middleware => fluent ( ( ) => arrayPush ( willSetTablesCallbacks , callback ) ) ;
188-
189- const addWillSetTableCallback = (
190- callback : WillSetTableCallback ,
191- ) : Middleware => fluent ( ( ) => arrayPush ( willSetTableCallbacks , callback ) ) ;
192-
193- const addWillSetRowCallback = ( callback : WillSetRowCallback ) : Middleware =>
194- fluent ( ( ) => arrayPush ( willSetRowCallbacks , callback ) ) ;
195-
196- const addWillSetCellCallback = (
197- callback : WillSetCellCallback ,
198- ) : Middleware => fluent ( ( ) => arrayPush ( willSetCellCallbacks , callback ) ) ;
199-
200- const addWillSetValuesCallback = (
201- callback : WillSetValuesCallback ,
202- ) : Middleware => fluent ( ( ) => arrayPush ( willSetValuesCallbacks , callback ) ) ;
203-
204- const addWillSetValueCallback = (
205- callback : WillSetValueCallback ,
206- ) : Middleware => fluent ( ( ) => arrayPush ( willSetValueCallbacks , callback ) ) ;
207-
208- const addWillDelTablesCallback = (
209- callback : WillDelTablesCallback ,
210- ) : Middleware => fluent ( ( ) => arrayPush ( willDelTablesCallbacks , callback ) ) ;
211-
212- const addWillDelTableCallback = (
213- callback : WillDelTableCallback ,
214- ) : Middleware => fluent ( ( ) => arrayPush ( willDelTableCallbacks , callback ) ) ;
215-
216- const addWillDelRowCallback = ( callback : WillDelRowCallback ) : Middleware =>
217- fluent ( ( ) => arrayPush ( willDelRowCallbacks , callback ) ) ;
218-
219- const addWillDelCellCallback = (
220- callback : WillDelCellCallback ,
221- ) : Middleware => fluent ( ( ) => arrayPush ( willDelCellCallbacks , callback ) ) ;
222-
223- const addWillDelValuesCallback = (
224- callback : WillDelValuesCallback ,
225- ) : Middleware => fluent ( ( ) => arrayPush ( willDelValuesCallbacks , callback ) ) ;
226-
227- const addWillDelValueCallback = (
228- callback : WillDelValueCallback ,
229- ) : Middleware => fluent ( ( ) => arrayPush ( willDelValueCallbacks , callback ) ) ;
230-
231- const addWillApplyChangesCallback = (
232- callback : WillApplyChangesCallback ,
233- ) : Middleware =>
234- fluent ( ( ) => arrayPush ( willApplyChangesCallbacks , callback ) ) ;
146+ const addWillSetContentCallback = addCallback ( willSetContentCallbacks ) ;
147+ const addWillSetTablesCallback = addCallback ( willSetTablesCallbacks ) ;
148+ const addWillSetTableCallback = addCallback ( willSetTableCallbacks ) ;
149+ const addWillSetRowCallback = addCallback ( willSetRowCallbacks ) ;
150+ const addWillSetCellCallback = addCallback ( willSetCellCallbacks ) ;
151+ const addWillSetValuesCallback = addCallback ( willSetValuesCallbacks ) ;
152+ const addWillSetValueCallback = addCallback ( willSetValueCallbacks ) ;
153+ const addWillDelTablesCallback = addCallback ( willDelTablesCallbacks ) ;
154+ const addWillDelTableCallback = addCallback ( willDelTableCallbacks ) ;
155+ const addWillDelRowCallback = addCallback ( willDelRowCallbacks ) ;
156+ const addWillDelCellCallback = addCallback ( willDelCellCallbacks ) ;
157+ const addWillDelValuesCallback = addCallback ( willDelValuesCallbacks ) ;
158+ const addWillDelValueCallback = addCallback ( willDelValueCallbacks ) ;
159+ const addWillApplyChangesCallback = addCallback ( willApplyChangesCallbacks ) ;
235160
236161 const destroy = ( ) : void => { } ;
237162
0 commit comments