🔥 remove Debugger, perf-deets and codemirror (#755)

Removing
- Debugger
- `perf-deeets`
- `codemirror`
This commit is contained in:
Matiss Janis Aboltins
2023-03-16 18:36:15 +00:00
committed by GitHub
parent 2762495a68
commit ad08494899
17 changed files with 26 additions and 810 deletions

View File

@@ -16,7 +16,6 @@
"@react-stately/list": "^3.5.3",
"@reactions/component": "^2.0.2",
"chalk": "2.4.1",
"codemirror": "^5.37.0",
"cross-env": "^7.0.3",
"customize-cra": "^1.0.0",
"date-fns": "2.0.0-alpha.27",
@@ -28,7 +27,6 @@
"inter-ui": "^3.19.3",
"jest-watch-typeahead": "^2.2.2",
"mitt": "^3.0.0",
"perf-deets": "^1.0.15",
"prop-types": "15.6.0",
"react": "16.13.1",
"react-app-rewired": "^2.2.1",

View File

@@ -8,7 +8,6 @@ const backendWorkerUrl = new URL('./browser-server.js', import.meta.url);
// everything else.
let IS_DEV = process.env.NODE_ENV === 'development';
let IS_PERF_BUILD = process.env.PERF_BUILD != null;
let ACTUAL_VERSION = process.env.REACT_APP_ACTUAL_VERSION;
// *** Start the backend ***
@@ -32,46 +31,10 @@ function createBackendWorker() {
'SharedArrayBufferOverride',
),
});
if (IS_DEV || IS_PERF_BUILD) {
worker.onmessage = e => {
if (e.data.type === '__actual:backend-running') {
let activity = document.querySelector('.debugger .activity');
if (activity) {
let original = window.getComputedStyle(activity)['background-color'];
activity.style.transition = 'none';
activity.style.backgroundColor = '#3EBD93';
setTimeout(() => {
activity.style.transition = 'background-color 1s';
activity.style.backgroundColor = original;
}, 100);
}
}
};
import('perf-deets/frontend').then(({ listenForPerfData }) => {
listenForPerfData(worker);
});
}
}
createBackendWorker();
if (IS_DEV || IS_PERF_BUILD) {
import('perf-deets/frontend').then(({ listenForPerfData }) => {
listenForPerfData(window);
global.__startProfile = () => {
window.postMessage({ type: '__perf-deets:start-profile' });
worker.postMessage({ type: '__perf-deets:start-profile' });
};
global.__stopProfile = () => {
window.postMessage({ type: '__perf-deets:stop-profile' });
worker.postMessage({ type: '__perf-deets:stop-profile' });
};
});
}
global.Actual = {
IS_DEV,
ACTUAL_VERSION,
@@ -153,13 +116,6 @@ global.Actual = {
},
};
if (IS_DEV) {
global.Actual.reloadBackend = () => {
worker.postMessage({ type: '__actual:shutdown' });
createBackendWorker();
};
}
document.addEventListener('keydown', e => {
if (e.metaKey || e.ctrlKey) {
// Cmd/Ctrl+o

View File

@@ -21,24 +21,16 @@ self.addEventListener('message', e => {
importScripts(`${msg.publicUrl}/kcab/kcab.worker.${hash}.js`);
backend.initApp(version, isDev, self).then(
() => {
if (isDev) {
console.log('Backend running!');
self.postMessage({ type: '__actual:backend-running' });
}
},
err => {
console.log(err);
let msg = {
type: 'app-init-failure',
IDBFailure: err.message.includes('indexeddb-failure'),
};
self.postMessage(msg);
backend.initApp(version, isDev, self).catch(err => {
console.log(err);
let msg = {
type: 'app-init-failure',
IDBFailure: err.message.includes('indexeddb-failure'),
};
self.postMessage(msg);
throw err;
},
);
throw err;
});
}
}
});

View File

@@ -1,314 +0,0 @@
import React from 'react';
import CodeMirror from 'codemirror';
import * as spreadsheet from 'loot-core/src/client/sheetql/spreadsheet';
import {
send,
init as initConnection,
} from 'loot-core/src/platform/client/fetch';
import {
View,
Button,
Input,
InlineField,
} from 'loot-design/src/components/common';
import { colors } from 'loot-design/src/style';
require('codemirror/lib/codemirror.css');
require('codemirror/theme/monokai.css');
class Debugger extends React.Component {
state = {
recording: false,
selecting: false,
name: '__global!tmp',
collapsed: true,
node: null,
};
toggleRecord = () => {
if (this.state.recording) {
window.__stopProfile();
this.setState({ recording: false });
} else {
window.__startProfile();
this.setState({ recording: true });
}
};
reloadBackend = async () => {
window.Actual.reloadBackend();
initConnection(await global.Actual.getServerSocket());
};
init() {
this.mirror = CodeMirror(this.node, {
theme: 'monokai',
});
this.mirror.setSize('100%', '100%');
// this.mirror.on('change', () => {
// const val = this.mirror.getValue();
// const [sheetName, name] = this.state.name.split('!');
// spreadsheet.set(sheetName, name, this.mirror.getValue());
// });
const mouseoverHandler = e => {
let node = e.target;
let cellname = null;
while (!cellname && node) {
cellname = node.dataset && node.dataset.cellname;
node = node.parentNode;
}
if (this.state.selecting && cellname) {
this.bind(cellname);
}
};
document.body.addEventListener('mouseover', mouseoverHandler, false);
const clickHandler = e => {
if (this.state.selecting) {
this.setState({ selecting: false });
}
};
document.body.addEventListener('click', clickHandler, false);
this.removeListeners = () => {
document.body.removeEventListener('mouseover', mouseoverHandler);
document.body.removeEventListener('click', clickHandler);
};
this.bind(this.state.name);
}
deinit() {
if (this.unbind) {
this.unbind();
}
this.removeListeners();
this.mirror = null;
}
bind(resolvedName) {
if (this.unbind) {
this.unbind();
}
const [sheetName, name] = resolvedName.split('!');
let currentReq = Math.random();
this.currentReq = currentReq;
send('debugCell', { sheetName, name }).then(node => {
if (currentReq === this.currentReq) {
if (node._run) {
this.mirror.setValue(node._run);
}
this.setState({ name: node.name, node });
this.unbind = spreadsheet.bind(sheetName, { name }, null, node => {
if (currentReq !== this.currentReq) {
return;
}
this.setState({ node: { ...this.state.node, value: node.value } });
this.valueNode.style.transition = 'none';
this.valueNode.style.backgroundColor = colors.y9;
setTimeout(() => {
this.valueNode.style.transition = 'background-color .8s';
this.valueNode.style.backgroundColor = 'rgba(0, 0, 0, 0)';
}, 50);
});
}
});
}
componentWillUnmount() {
if (this.unbind) {
this.unbind();
this.unbind = null;
}
}
onShow = () => {
this.setState({ collapsed: false }, () => {
this.init();
});
};
onClose = () => {
this.setState({ collapsed: true }, () => {
this.deinit();
});
};
onSelect = () => {
this.setState({ selecting: true });
};
onNameChange = e => {
const name = e.target.value;
this.bind(name);
this.setState({ name });
};
unselect() {
if (this.unbind) {
this.unbind();
this.unbind = null;
this.setState({ sheetName: null, name: null, node: null });
}
}
render() {
const { children } = this.props;
const { name, node, selecting, collapsed, recording } = this.state;
return (
<View
style={{
height: '100%',
'& .CodeMirror': { border: '1px solid ' + colors.b4 },
}}
>
<div style={{ flex: 1, overflow: 'hidden' }}>{children}</div>
<View
className="debugger"
style={[
{
position: 'fixed',
right: 0,
bottom: 0,
margin: 15,
padding: 10,
backgroundColor: 'rgba(50, 50, 50, .85)',
color: 'white',
zIndex: 1000,
flexDirection: 'row',
alignItems: 'center',
},
!collapsed && {
width: 700,
height: 200,
},
]}
>
{collapsed ? (
<React.Fragment>
<div
className="activity"
style={{
width: 10,
height: 10,
backgroundColor: '#303030',
marginRight: 10,
borderRadius: 10,
}}
/>
<Button onClick={this.toggleRecord} style={{ marginRight: 10 }}>
{recording ? 'Stop' : 'Start'} Profile
</Button>
<Button onClick={this.reloadBackend} style={{ marginRight: 10 }}>
Reload backend
</Button>
<Button onClick={this.onShow}>^</Button>
</React.Fragment>
) : (
<View style={{ flex: 1 }}>
<View
style={{
flexDirection: 'row',
justifyContent: 'flex-start',
marginBottom: 5,
flexShrink: 0,
}}
>
<Button
style={{
backgroundColor: '#303030',
color: 'white',
padding: '2px 5px',
marginRight: 5,
}}
onClick={this.onClose}
>
v
</Button>
<Button
style={[
{
backgroundColor: '#303030',
color: 'white',
padding: '2px 5px',
},
selecting && {
backgroundColor: colors.p7,
},
]}
onClick={this.onSelect}
>
Inspect Cell
</Button>
</View>
<InlineField label="Name" style={{ flex: '0 0 auto' }}>
<Input
value={name}
onChange={this.onNameChange}
style={{
backgroundColor: '#303030',
color: 'white',
flex: 1,
}}
/>
</InlineField>
<InlineField
label="Expr"
style={{ flex: 1, alignItems: 'stretch', overflow: 'hidden' }}
>
<div
style={{ flex: 1, overflow: 'hidden' }}
ref={n => (this.node = n)}
/>
</InlineField>
<InlineField
label="Dependencies"
labelWidth={100}
style={{ flex: '0 0 auto' }}
>
<pre
style={{
backgroundColor: 'rgba(0, 0, 0, 0)',
height: 30,
overflow: 'scroll',
}}
>
{node && JSON.stringify(node._dependencies, null, 2)}
</pre>
</InlineField>
<InlineField label="Value" style={{ flex: '0 0 auto' }}>
<div
style={{
backgroundColor: 'rgba(0, 0, 0, 0)',
transition: 'background-color .5s',
height: 30,
overflow: 'scroll',
}}
ref={n => (this.valueNode = n)}
>
{node && JSON.stringify(node.value)}
</div>
</InlineField>
</View>
)}
</View>
</View>
);
}
}
export default Debugger;

View File

@@ -56,7 +56,6 @@ import LinkSchedule from './schedules/LinkSchedule';
import PostsOfflineNotification from './schedules/PostsOfflineNotification';
import Settings from './settings';
import Titlebar, { TitlebarProvider } from './Titlebar';
// import Debugger from './Debugger';
function PageRoute({ path, component: Component }) {
return (
@@ -336,7 +335,6 @@ class FinancesApp extends React.Component {
<Notifications />
<BankSyncStatus />
<StackedRoutes isMobile={this.state.isMobile} />
{/*window.Actual.IS_DEV && <Debugger />*/}
<Modals history={this.history} />
</div>
{this.state.isMobile && (

View File

@@ -4,10 +4,7 @@ module.exports = {
testEnvironment: 'jsdom',
testPathIgnorePatterns: ['/node_modules/', '/lib/'].filter(Boolean),
testMatch: ['**/*.web.test.js'],
transformIgnorePatterns: [
'__mocks__',
'/node_modules/(?!perf-deets|absurd-sql)',
],
transformIgnorePatterns: ['__mocks__', '/node_modules/(?!absurd-sql)'],
transform: {
'\\.pegjs$': 'pegjs-jest-transformer',
},

View File

@@ -61,7 +61,6 @@
"pegjs": "^0.10.0",
"pegjs-jest-transformer": "^1.2.3",
"pegjs-loader": "^0.5.6",
"perf-deets": "^1.0.15",
"snapshot-diff": "^0.10.0",
"source-map": "^0.7.3",
"throttleit": "^1.0.0",

View File

@@ -1,11 +1,7 @@
let { getDatabase, closeDatabase } = require('../indexeddb');
let { getDatabase } = require('../indexeddb');
function init() {}
function shutdown() {
closeDatabase();
}
function commit(trans) {
if (trans.commit) {
trans.commit();
@@ -116,7 +112,6 @@ async function multiRemove(keys) {
module.exports = {
init,
shutdown,
getItem,
setItem,
removeItem,

View File

@@ -243,10 +243,6 @@ async function init() {
await populateFileHeirarchy();
}
function shutdown() {
BFS.backend.shutdown();
}
function basename(filepath) {
let parts = filepath.split('/');
return parts.slice(0, -1).join('/');
@@ -321,7 +317,6 @@ module.exports = {
pathToId,
populateFileHeirarchy,
init,
shutdown,
bundledDatabasePath: '/default-db.sqlite',
migrationsPath: '/migrations',
demoBudgetPath: '/demo-budget',

View File

@@ -138,14 +138,6 @@ function closeDatabase() {
}
}
if (process.env.NODE_ENV === 'development') {
self.addEventListener('message', e => {
if (e.data.type === '__actual:shutdown') {
closeDatabase();
}
});
}
module.exports = {
getDatabase,
openDatabase,

View File

@@ -1,5 +1,4 @@
import initSqlJS from '@jlongster/sql.js';
import * as perf from 'perf-deets';
let SQL = null;
@@ -41,7 +40,6 @@ export function prepare(db, sql) {
}
export function runQuery(db, sql, params = [], fetchAll) {
perf.count('runQuery');
if (params) {
verifyParamTypes(sql, params);
}

View File

@@ -133,8 +133,6 @@ async function applyCategoryTemplate(category, template_lines, month, force) {
// remove lines for past dates, calculate repeating dates
let got_by = false;
template_lines = template_lines.filter(template => {
//debugger;
switch (template.type) {
case 'by':
case 'spend':

View File

@@ -2507,21 +2507,3 @@ export const lib = {
},
SyncProtoBuf: SyncPb,
};
if (process.env.NODE_ENV === 'development' && Platform.isWeb) {
// Support reloading the backend
self.addEventListener('message', async e => {
if (e.data.type === '__actual:shutdown') {
await sheet.waitOnSpreadsheet();
await app.stopServices();
await db.closeDatabase();
asyncStorage.shutdown();
fs.shutdown();
setTimeout(() => {
// Give everything else some time to process shutdown events
self.close();
}, 100);
}
});
}

View File

@@ -18,11 +18,6 @@ module.exports = {
alias: {
fs: 'memfs',
path: 'path-browserify',
'perf-deets':
process.env.NODE_ENV === 'development' || process.env.PERF_BUILD
? 'perf-deets'
: require.resolve('perf-deets/noop'),
},
},
resolveLoader: {

View File

@@ -17,9 +17,6 @@ module.exports = {
},
resolve: {
extensions: ['.electron.js', '.js', '.json'],
alias: {
'perf-deets': require.resolve('perf-deets/noop'),
},
},
externals: [
'better-sqlite3',

View File

@@ -0,0 +1,6 @@
---
category: Maintenance
authors: [MatissJanis]
---
Removing unused `Debugger` component and its dependencies: perf-deets, codemirror

386
yarn.lock
View File

@@ -62,7 +62,6 @@ __metadata:
"@react-stately/list": ^3.5.3
"@reactions/component": ^2.0.2
chalk: 2.4.1
codemirror: ^5.37.0
cross-env: ^7.0.3
customize-cra: ^1.0.0
date-fns: 2.0.0-alpha.27
@@ -74,7 +73,6 @@ __metadata:
inter-ui: ^3.19.3
jest-watch-typeahead: ^2.2.2
mitt: ^3.0.0
perf-deets: ^1.0.15
prop-types: 15.6.0
react: 16.13.1
react-app-rewired: ^2.2.1
@@ -2555,16 +2553,6 @@ __metadata:
languageName: node
linkType: hard
"@observablehq/plot@npm:^0.1.0":
version: 0.1.0
resolution: "@observablehq/plot@npm:0.1.0"
dependencies:
d3: ^6.7.0
isoformat: ^0.1.0
checksum: 02935dc844a488ef291a26ca1b4c14d29941ad5b2225710052699ca5a9c56cf31764e32ca39f4b20208ed4c2ff027e08a36c295bc1e66d054766926f4e069a80
languageName: node
linkType: hard
"@playwright/test@npm:^1.29.1":
version: 1.29.1
resolution: "@playwright/test@npm:1.29.1"
@@ -6719,13 +6707,6 @@ __metadata:
languageName: node
linkType: hard
"codemirror@npm:^5.37.0":
version: 5.65.2
resolution: "codemirror@npm:5.65.2"
checksum: 8e13511319aa8b4772a4406952d89ecef63f4518fa17a3893270d9835ade59d67a94bc83918d881901abb57ed68cbbe697e720a01a43e1aae43fc0f03a6591b1
languageName: node
linkType: hard
"collect-v8-coverage@npm:^1.0.0":
version: 1.0.1
resolution: "collect-v8-coverage@npm:1.0.1"
@@ -6821,13 +6802,6 @@ __metadata:
languageName: node
linkType: hard
"commander@npm:2, commander@npm:^2.20.0":
version: 2.20.3
resolution: "commander@npm:2.20.3"
checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e
languageName: node
linkType: hard
"commander@npm:2.9.0":
version: 2.9.0
resolution: "commander@npm:2.9.0"
@@ -6837,6 +6811,13 @@ __metadata:
languageName: node
linkType: hard
"commander@npm:^2.20.0":
version: 2.20.3
resolution: "commander@npm:2.20.3"
checksum: ab8c07884e42c3a8dbc5dd9592c606176c7eb5c1ca5ff274bcf907039b2c41de3626f684ea75ccf4d361ba004bbaff1f577d5384c155f3871e456bdf27becf9e
languageName: node
linkType: hard
"commander@npm:^5.0.0":
version: 5.1.0
resolution: "commander@npm:5.1.0"
@@ -7597,51 +7578,6 @@ __metadata:
languageName: node
linkType: hard
"d3-array@npm:2, d3-array@npm:^2.3.0, d3-array@npm:^2.5.0":
version: 2.12.1
resolution: "d3-array@npm:2.12.1"
dependencies:
internmap: ^1.0.0
checksum: 97853b7b523aded17078f37c67742f45d81e88dda2107ae9994c31b9e36c5fa5556c4c4cf39650436f247813602dfe31bf7ad067ff80f127a16903827f10c6eb
languageName: node
linkType: hard
"d3-axis@npm:2":
version: 2.1.0
resolution: "d3-axis@npm:2.1.0"
checksum: 43d80f68e516b315bbe86afff1552abd9518296e60f58a9a70ee9a524c109dec9d4585da5fc34a5c589e599c5ee4fe465f850c5a43f5e112c3850965bb00e9f5
languageName: node
linkType: hard
"d3-brush@npm:2":
version: 2.1.0
resolution: "d3-brush@npm:2.1.0"
dependencies:
d3-dispatch: 1 - 2
d3-drag: 2
d3-interpolate: 1 - 2
d3-selection: 2
d3-transition: 2
checksum: 35fb7e3b422626194aac1b85434e6a346de1b69f497d1f80d2f6bf881602e8826255a7c95a0c27f0de5ec2f5f7bc8481d6e1df24c80ebb28175a0830c868d218
languageName: node
linkType: hard
"d3-chord@npm:2":
version: 2.0.0
resolution: "d3-chord@npm:2.0.0"
dependencies:
d3-path: 1 - 2
checksum: 932f1e9a50a68b95f42431fe043164c671433226582cf4e5f5a8f7064da99efaca656283861bf243286c5ef7dcf87aa77811418564fba83350da48d8c50074c0
languageName: node
linkType: hard
"d3-color@npm:1 - 2, d3-color@npm:2":
version: 2.0.0
resolution: "d3-color@npm:2.0.0"
checksum: b887354aa383937abd04fbffed3e26e5d6a788472cd3737fb10735930e427763e69fe93398663bccf88c0b53ee3e638ac6fcf0c02226b00ed9e4327c2dfbf3dc
languageName: node
linkType: hard
"d3-color@npm:1 - 3":
version: 3.1.0
resolution: "d3-color@npm:3.1.0"
@@ -7649,69 +7585,6 @@ __metadata:
languageName: node
linkType: hard
"d3-contour@npm:2":
version: 2.0.0
resolution: "d3-contour@npm:2.0.0"
dependencies:
d3-array: 2
checksum: 7d46bad378f6e329dddcc52df76077f28b563219cf5a0003385fbcb6c501d5fbb10d71c508da6a7690b527ccdbc1909b6f1f36fa36f03b43b19f8bcab0c2961d
languageName: node
linkType: hard
"d3-delaunay@npm:5":
version: 5.3.0
resolution: "d3-delaunay@npm:5.3.0"
dependencies:
delaunator: 4
checksum: 3fa5ae167eb86e62ca0f9c3e8d05470b23572b4b480f05201705c0db976d403834cee1cdf264a41c97e45238e3999d48cc593f97d0da37229a42673a6bb10e95
languageName: node
linkType: hard
"d3-dispatch@npm:1 - 2, d3-dispatch@npm:2":
version: 2.0.0
resolution: "d3-dispatch@npm:2.0.0"
checksum: cf473676ae0df1915d51d056d2c6734ceec480d258611d970a01847c50e8c273c185032bf9ed491abd077696bcbeeb491dc94af53e888871f3a1a0fac7365cec
languageName: node
linkType: hard
"d3-drag@npm:2":
version: 2.0.0
resolution: "d3-drag@npm:2.0.0"
dependencies:
d3-dispatch: 1 - 2
d3-selection: 2
checksum: 47f0bcdd097fd363d59da41299f276c1f6bd88bc460f53871b3d9c35982d40f59a535c6de7fa07a51120e56c99064bd9aa3551279dc09ce4204c639d54f80399
languageName: node
linkType: hard
"d3-dsv@npm:1 - 2, d3-dsv@npm:2":
version: 2.0.0
resolution: "d3-dsv@npm:2.0.0"
dependencies:
commander: 2
iconv-lite: 0.4
rw: 1
bin:
csv2json: bin/dsv2json
csv2tsv: bin/dsv2dsv
dsv2dsv: bin/dsv2dsv
dsv2json: bin/dsv2json
json2csv: bin/json2dsv
json2dsv: bin/json2dsv
json2tsv: bin/json2dsv
tsv2csv: bin/dsv2dsv
tsv2json: bin/dsv2json
checksum: 01b12d81e4ca3996f2e921388b1929c358a39711bf250f2c53dd0e452b80465ebe31ddb58a4064f160322dec7aaf2ceae1a249874af989404705fcfdf1e9b64d
languageName: node
linkType: hard
"d3-ease@npm:1 - 2, d3-ease@npm:2":
version: 2.0.0
resolution: "d3-ease@npm:2.0.0"
checksum: 1a9f6dfc836f0c66fba1ed28f0a3ad170d7c4f4812d442c6b562163e1a60283cc697e72a2cc4ba64abff9e77ad56354847986a5964e0c661af9b6d132c642e29
languageName: node
linkType: hard
"d3-ease@npm:^3.0.1":
version: 3.0.1
resolution: "d3-ease@npm:3.0.1"
@@ -7719,33 +7592,6 @@ __metadata:
languageName: node
linkType: hard
"d3-fetch@npm:2":
version: 2.0.0
resolution: "d3-fetch@npm:2.0.0"
dependencies:
d3-dsv: 1 - 2
checksum: e592420726c39dbbe342504761e5c80a026fc9add4f808ed4e01ab66c3064f7251f988dd2bcb6b8b61f8866769470eabb14a8d7f18e014338d9d9637ffd51af1
languageName: node
linkType: hard
"d3-force@npm:2":
version: 2.1.1
resolution: "d3-force@npm:2.1.1"
dependencies:
d3-dispatch: 1 - 2
d3-quadtree: 1 - 2
d3-timer: 1 - 2
checksum: aaee5b86d753450e72dae6748765ac3e0b7b784bd420a61264b778d697b9521a343b74b5c55654be2ff7fdf9bada0953a6fcae9be69091176d0579b56df72937
languageName: node
linkType: hard
"d3-format@npm:1 - 2, d3-format@npm:2":
version: 2.0.0
resolution: "d3-format@npm:2.0.0"
checksum: c4d3c8f9941d097d514d3986f54f21434e08e5876dc08d1d65226447e8e167600d5b9210235bb03fd45327225f04f32d6e365f08f76d2f4b8bff81594851aaf7
languageName: node
linkType: hard
"d3-format@npm:1 - 3":
version: 3.1.0
resolution: "d3-format@npm:3.1.0"
@@ -7753,31 +7599,6 @@ __metadata:
languageName: node
linkType: hard
"d3-geo@npm:2":
version: 2.0.2
resolution: "d3-geo@npm:2.0.2"
dependencies:
d3-array: ^2.5.0
checksum: 992f667c646f8e2ea810de20e62914128e119f0458bce4090934287af3b93395632ed4af16aae7ccae095ae702a23b5d7a49888674f1aa27ab1a6e410882d86c
languageName: node
linkType: hard
"d3-hierarchy@npm:2":
version: 2.0.0
resolution: "d3-hierarchy@npm:2.0.0"
checksum: 594bea104d3cf947da8499f3c50c93d914c5af34195ef3848e4888ed5c8c1aa6a1adae1dd656acfd04779005255347f68a3d270d825ec94fc88b88a72dd7cb4e
languageName: node
linkType: hard
"d3-interpolate@npm:1 - 2, d3-interpolate@npm:1.2.0 - 2, d3-interpolate@npm:2":
version: 2.0.1
resolution: "d3-interpolate@npm:2.0.1"
dependencies:
d3-color: 1 - 2
checksum: 4a2018ac34fbcc3e0e7241e117087ca1b2274b8b33673913658623efacc5db013b8d876586d167b23e3145bdb34ec8e441d301299b082e1a90985b2f18d4299c
languageName: node
linkType: hard
"d3-interpolate@npm:1.2.0 - 3, d3-interpolate@npm:^3.0.1":
version: 3.0.1
resolution: "d3-interpolate@npm:3.0.1"
@@ -7787,13 +7608,6 @@ __metadata:
languageName: node
linkType: hard
"d3-path@npm:1 - 2, d3-path@npm:2":
version: 2.0.0
resolution: "d3-path@npm:2.0.0"
checksum: e39e91dfb9abf9637962caede1f4ea4877f4b9e1c914868bdfc355688e9a637ba51bed0fb6180934eb596e50a4d0d1f001b5f2e98a4a3d23cc42558acfbd1f2c
languageName: node
linkType: hard
"d3-path@npm:^3.1.0":
version: 3.1.0
resolution: "d3-path@npm:3.1.0"
@@ -7801,50 +7615,6 @@ __metadata:
languageName: node
linkType: hard
"d3-polygon@npm:2":
version: 2.0.0
resolution: "d3-polygon@npm:2.0.0"
checksum: aeabedd8c74b0087d9b3fa9d9a95ce6535edb07c546cb070ffb1f971a3e9112124a9f63bf1377cbb6889d2cb0268363c4a864ec8c7629d990623fff73262d1ea
languageName: node
linkType: hard
"d3-quadtree@npm:1 - 2, d3-quadtree@npm:2":
version: 2.0.0
resolution: "d3-quadtree@npm:2.0.0"
checksum: e5f9cee19a636666e9f1614f9a9508dde9af47d80769ecb70b6b5033448a8c3ae96f39f1ffea0d1782442559412e3f98508fedf5dc39fe09a2f5995e6a0913bf
languageName: node
linkType: hard
"d3-random@npm:2":
version: 2.2.2
resolution: "d3-random@npm:2.2.2"
checksum: 79931d642f059c874c2be964b629ac0ce0f73306fa744e2ac8eb5ef1592ecfe8ab4a31a5273bef75db7ba2055c344af9921ef1bf55070edd826d7a7ba0b47331
languageName: node
linkType: hard
"d3-scale-chromatic@npm:2":
version: 2.0.0
resolution: "d3-scale-chromatic@npm:2.0.0"
dependencies:
d3-color: 1 - 2
d3-interpolate: 1 - 2
checksum: 9fe5b4c1d9907abbda76e414856d9089182a0641f3bbf43d8d3008dbcccb52781e21793682e2b53663d3c6cd63e76965f961894e53ed3b01a345797412fe5b1f
languageName: node
linkType: hard
"d3-scale@npm:3":
version: 3.3.0
resolution: "d3-scale@npm:3.3.0"
dependencies:
d3-array: ^2.3.0
d3-format: 1 - 2
d3-interpolate: 1.2.0 - 2
d3-time: ^2.1.1
d3-time-format: 2 - 3
checksum: f77e73f0fb422292211d0687914c30d26e29011a936ad2a535a868ae92f306c3545af1fe7ea5db1b3e67dbce7a6c6cd952e53d02d1d557543e7e5d30e30e52f2
languageName: node
linkType: hard
"d3-scale@npm:^4.0.2":
version: 4.0.2
resolution: "d3-scale@npm:4.0.2"
@@ -7858,22 +7628,6 @@ __metadata:
languageName: node
linkType: hard
"d3-selection@npm:2":
version: 2.0.0
resolution: "d3-selection@npm:2.0.0"
checksum: c00143f55d510e405fc51e5ef626cb6b3705181ec3d595e84e5cb977508e30228d95d7e209aff6e686ff758c562c5dd17e974325ee8c8555bb6f4f382331ec7d
languageName: node
linkType: hard
"d3-shape@npm:2":
version: 2.1.0
resolution: "d3-shape@npm:2.1.0"
dependencies:
d3-path: 1 - 2
checksum: 4a82a83fbb15aadee3eb6661226a34bcd793cdbcd7aa5bf980a4724efc93eb94acc6c499f0ebedc9c3144c57c0f033867d137f41e86459acbd5d7181cb27b49c
languageName: node
linkType: hard
"d3-shape@npm:^3.1.0":
version: 3.2.0
resolution: "d3-shape@npm:3.2.0"
@@ -7883,15 +7637,6 @@ __metadata:
languageName: node
linkType: hard
"d3-time-format@npm:2 - 3, d3-time-format@npm:3":
version: 3.0.0
resolution: "d3-time-format@npm:3.0.0"
dependencies:
d3-time: 1 - 2
checksum: c20c1667dbea653f81d923e741f84c23e4b966002ba0d6ed94cbc70692105566e55e89d18d175404534a879383fd1123300bd12885a3c924fe924032bb0060db
languageName: node
linkType: hard
"d3-time-format@npm:2 - 4":
version: 4.1.0
resolution: "d3-time-format@npm:4.1.0"
@@ -7901,15 +7646,6 @@ __metadata:
languageName: node
linkType: hard
"d3-time@npm:1 - 2, d3-time@npm:2, d3-time@npm:^2.1.1":
version: 2.1.1
resolution: "d3-time@npm:2.1.1"
dependencies:
d3-array: 2
checksum: d1c7b9658c20646e46c3dd19e11c38e02dec098e8baa7d2cd868af8eb01953668f5da499fa33dc63541cf74a26e788786f8828c4381dbbf475a76b95972979a6
languageName: node
linkType: hard
"d3-time@npm:1 - 3, d3-time@npm:2.1.1 - 3, d3-time@npm:^3.0.0":
version: 3.1.0
resolution: "d3-time@npm:3.1.0"
@@ -7919,13 +7655,6 @@ __metadata:
languageName: node
linkType: hard
"d3-timer@npm:1 - 2, d3-timer@npm:2":
version: 2.0.0
resolution: "d3-timer@npm:2.0.0"
checksum: 70733c3baffe473155b712896f04f27dae32d6e94169827f57aebb203e190926ba37af12c5f56cbc7126e538a4b1cd083f2451b80dc2a5644d076b6b31982bd8
languageName: node
linkType: hard
"d3-timer@npm:^3.0.1":
version: 3.0.1
resolution: "d3-timer@npm:3.0.1"
@@ -7933,21 +7662,6 @@ __metadata:
languageName: node
linkType: hard
"d3-transition@npm:2":
version: 2.0.0
resolution: "d3-transition@npm:2.0.0"
dependencies:
d3-color: 1 - 2
d3-dispatch: 1 - 2
d3-ease: 1 - 2
d3-interpolate: 1 - 2
d3-timer: 1 - 2
peerDependencies:
d3-selection: 2
checksum: 8f29d195adc75e20dcffacb44e571fd64a2f60d511e6e7438019356bbc6c3ada10ae2b1393c36242ab71eb1b131f60cf71d0d76bd4cab4fce6a5ddaf1f6f6b00
languageName: node
linkType: hard
"d3-voronoi@npm:^1.1.4":
version: 1.1.4
resolution: "d3-voronoi@npm:1.1.4"
@@ -7955,57 +7669,6 @@ __metadata:
languageName: node
linkType: hard
"d3-zoom@npm:2":
version: 2.0.0
resolution: "d3-zoom@npm:2.0.0"
dependencies:
d3-dispatch: 1 - 2
d3-drag: 2
d3-interpolate: 1 - 2
d3-selection: 2
d3-transition: 2
checksum: d98cc6ffa1105b0062ee312303caff9345ecd1f6df11b7da1e008c1c4731551755ac951327e8c758ffcf74e761218bc6c4f4a6b48f91551ea5d67e0dcf574a49
languageName: node
linkType: hard
"d3@npm:^6.7.0":
version: 6.7.0
resolution: "d3@npm:6.7.0"
dependencies:
d3-array: 2
d3-axis: 2
d3-brush: 2
d3-chord: 2
d3-color: 2
d3-contour: 2
d3-delaunay: 5
d3-dispatch: 2
d3-drag: 2
d3-dsv: 2
d3-ease: 2
d3-fetch: 2
d3-force: 2
d3-format: 2
d3-geo: 2
d3-hierarchy: 2
d3-interpolate: 2
d3-path: 2
d3-polygon: 2
d3-quadtree: 2
d3-random: 2
d3-scale: 3
d3-scale-chromatic: 2
d3-selection: 2
d3-shape: 2
d3-time: 2
d3-time-format: 3
d3-timer: 2
d3-transition: 2
d3-zoom: 2
checksum: 68e37250bacbfaa677d45dbbd82395e898d628d4598b827a3682e3612e0e43c67784f2cd7ecdc23e75c48ad0abe07b65e20c5aa13fb5ebf8879db6db468032e9
languageName: node
linkType: hard
"damerau-levenshtein@npm:^1.0.8":
version: 1.0.8
resolution: "damerau-levenshtein@npm:1.0.8"
@@ -8258,7 +7921,7 @@ __metadata:
languageName: node
linkType: hard
"delaunator@npm:4, delaunator@npm:^4.0.0":
"delaunator@npm:^4.0.0":
version: 4.0.1
resolution: "delaunator@npm:4.0.1"
checksum: a49f1c23edbcb79079a13577d32fcd46d0db30879c8484f742a0d840923085f2f3de35a9bfbb96eadd12201ffb7c3adf45b0f528d08b71cb547c5f8068b5d61b
@@ -11398,7 +11061,7 @@ __metadata:
languageName: node
linkType: hard
"iconv-lite@npm:0.4, iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.4":
"iconv-lite@npm:0.4.24, iconv-lite@npm:^0.4.4":
version: 0.4.24
resolution: "iconv-lite@npm:0.4.24"
dependencies:
@@ -11620,13 +11283,6 @@ __metadata:
languageName: node
linkType: hard
"internmap@npm:^1.0.0":
version: 1.0.1
resolution: "internmap@npm:1.0.1"
checksum: 9d00f8c0cf873a24a53a5a937120dab634c41f383105e066bb318a61864e6292d24eb9516e8e7dccfb4420ec42ca474a0f28ac9a6cc82536898fa09bbbe53813
languageName: node
linkType: hard
"interpret@npm:^1.4.0":
version: 1.4.0
resolution: "interpret@npm:1.4.0"
@@ -12240,13 +11896,6 @@ __metadata:
languageName: node
linkType: hard
"isoformat@npm:^0.1.0":
version: 0.1.0
resolution: "isoformat@npm:0.1.0"
checksum: 6e184edd27f6e7fee6f13df7590d62012434547b0c15c0a96ff0d6bb58000c7c5597dcd1e7f4facc8b52fedd337fcd3c94951253537f8552aed6f6ea266df854
languageName: node
linkType: hard
"isomorphic-fetch@npm:^2.1.1":
version: 2.2.1
resolution: "isomorphic-fetch@npm:2.2.1"
@@ -13783,7 +13432,6 @@ __metadata:
pegjs: ^0.10.0
pegjs-jest-transformer: ^1.2.3
pegjs-loader: ^0.5.6
perf-deets: ^1.0.15
snapshot-diff: ^0.10.0
source-map: ^0.7.3
throttleit: ^1.0.0
@@ -15745,15 +15393,6 @@ __metadata:
languageName: node
linkType: hard
"perf-deets@npm:^1.0.15":
version: 1.0.17
resolution: "perf-deets@npm:1.0.17"
dependencies:
"@observablehq/plot": ^0.1.0
checksum: fbff7219db990eb8fe6d044262bd619e3b01471be45258bcd624c3da0397ca89ddbf6d24b0ec602692cad48cc999a106a560460000f5fe2ba84ce509b85caf15
languageName: node
linkType: hard
"performance-now@npm:^2.1.0":
version: 2.1.0
resolution: "performance-now@npm:2.1.0"
@@ -18202,13 +17841,6 @@ __metadata:
languageName: node
linkType: hard
"rw@npm:1":
version: 1.3.3
resolution: "rw@npm:1.3.3"
checksum: c20d82421f5a71c86a13f76121b751553a99cd4a70ea27db86f9b23f33db941f3f06019c30f60d50c356d0bd674c8e74764ac146ea55e217c091bde6fba82aa3
languageName: node
linkType: hard
"safe-buffer@npm:5.1.2, safe-buffer@npm:~5.1.0, safe-buffer@npm:~5.1.1":
version: 5.1.2
resolution: "safe-buffer@npm:5.1.2"