1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
|
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
"use strict";
const {
APPEND_TO_HISTORY,
CLEAR_HISTORY,
EVALUATE_EXPRESSION,
} = require("resource://devtools/client/webconsole/constants.js");
const historyActions = require("resource://devtools/client/webconsole/actions/history.js");
loader.lazyRequireGetter(
this,
"asyncStorage",
"resource://devtools/shared/async-storage.js"
);
/**
* History persistence middleware is responsible for loading
* and maintaining history of executed expressions in JSTerm.
*/
function historyPersistenceMiddleware(webConsoleUI, store) {
let historyLoaded = false;
asyncStorage.getItem("webConsoleHistory").then(
value => {
if (Array.isArray(value)) {
store.dispatch(historyActions.historyLoaded(value));
}
historyLoaded = true;
},
err => {
historyLoaded = true;
console.error(err);
}
);
return next => action => {
const res = next(action);
const triggerStoreActions = [
APPEND_TO_HISTORY,
CLEAR_HISTORY,
EVALUATE_EXPRESSION,
];
// Save the current history entries when modified, but wait till
// entries from the previous session are loaded.
const { isPrivate } =
webConsoleUI.hud?.commands?.targetCommand?.targetFront?.targetForm || {};
if (
!isPrivate &&
historyLoaded &&
triggerStoreActions.includes(action.type)
) {
const state = store.getState();
asyncStorage
.setItem("webConsoleHistory", state.history.entries)
.catch(e => {
console.error("Error when saving WebConsole input history", e);
});
}
return res;
};
}
module.exports = historyPersistenceMiddleware;
|