Skip to content

Commit 8ad7dbb

Browse files
committed
[middleware] Refactor createMiddleware
1 parent 2f9cfb8 commit 8ad7dbb

File tree

2 files changed

+58
-133
lines changed

2 files changed

+58
-133
lines changed

coverage.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"tests":7636,"assertions":32830,"lines":{"total":2560,"covered":2560,"skipped":0,"pct":100},"statements":{"total":2785,"covered":2785,"skipped":0,"pct":100},"functions":{"total":1137,"covered":1137,"skipped":0,"pct":100},"branches":{"total":971,"covered":971,"skipped":0,"pct":100},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":100}}
1+
{"tests":7636,"assertions":32830,"lines":{"total":2539,"covered":2539,"skipped":0,"pct":100},"statements":{"total":2750,"covered":2750,"skipped":0,"pct":100},"functions":{"total":1101,"covered":1101,"skipped":0,"pct":100},"branches":{"total":957,"covered":957,"skipped":0,"pct":100},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":100}}

src/middleware/index.ts

Lines changed: 57 additions & 132 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,35 @@ import {getCreateFunction} from '../common/definable.ts';
3535
import {objFreeze} from '../common/obj.ts';
3636
import {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+
3855
export 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

Comments
 (0)