node/lib/internal/inspector/webstorage.js
Ali Hassan 4d10823fbb
inspector: coerce key and value to string in webstorage events
Signed-off-by: Ali Hassan <ali-hassan27@outlook.com>
PR-URL: https://github.com/nodejs/node/pull/62616
Refs: https://github.com/nodejs/node/pull/62145
Refs: https://github.com/nodejs/node/pull/62162
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Matteo Collina <matteo.collina@gmail.com>
2026-05-05 16:19:19 +02:00

113 lines
2.3 KiB
JavaScript

'use strict';
const { Storage } = internalBinding('webstorage');
const { DOMStorage } = require('inspector');
const path = require('path');
const { getOptionValue } = require('internal/options');
class InspectorLocalStorage extends Storage {
setItem(key, value) {
key = `${key}`;
value = `${value}`;
const oldValue = this.getItem(key);
super.setItem(key, value);
if (oldValue == null) {
itemAdded(key, value, true);
} else {
itemUpdated(key, oldValue, value, true);
}
}
removeItem(key) {
key = `${key}`;
super.removeItem(key);
itemRemoved(key, true);
}
clear() {
super.clear();
itemsCleared(true);
}
}
const InspectorSessionStorage = class extends Storage {
setItem(key, value) {
key = `${key}`;
value = `${value}`;
const oldValue = this.getItem(key);
super.setItem(key, value);
if (oldValue == null) {
itemAdded(key, value, false);
} else {
itemUpdated(key, oldValue, value, false);
}
}
removeItem(key) {
key = `${key}`;
super.removeItem(key);
itemRemoved(key, false);
}
clear() {
super.clear();
itemsCleared(false);
}
};
function itemAdded(key, value, isLocalStorage) {
DOMStorage.domStorageItemAdded({
key,
newValue: value,
storageId: {
securityOrigin: '',
isLocalStorage,
storageKey: getStorageKey(),
},
});
}
function itemUpdated(key, oldValue, newValue, isLocalStorage) {
DOMStorage.domStorageItemUpdated({
key,
oldValue,
newValue,
storageId: {
securityOrigin: '',
isLocalStorage,
storageKey: getStorageKey(),
},
});
}
function itemRemoved(key, isLocalStorage) {
DOMStorage.domStorageItemRemoved({
key,
storageId: {
securityOrigin: '',
isLocalStorage,
storageKey: getStorageKey(),
},
});
}
function itemsCleared(isLocalStorage) {
DOMStorage.domStorageItemsCleared({
storageId: {
securityOrigin: '',
isLocalStorage,
storageKey: getStorageKey(),
},
});
}
function getStorageKey() {
const localStorageFile = getOptionValue('--localstorage-file');
const resolvedAbsolutePath = path.resolve(localStorageFile);
return 'file://' + resolvedAbsolutePath;
}
module.exports = {
InspectorLocalStorage,
InspectorSessionStorage,
};