diff --git a/.eslintrc b/.eslintrc
index e57356e..7ed7565 100644
--- a/.eslintrc
+++ b/.eslintrc
@@ -13,6 +13,6 @@
"no-plusplus": ["error", { "allowForLoopAfterthoughts": true }]
},
"env": {
- "browser": true
+ "browser": true
}
}
diff --git a/package.json b/package.json
index 7fec03b..164a685 100644
--- a/package.json
+++ b/package.json
@@ -11,18 +11,10 @@
"@commaai/pandajs": "^0.3.7",
"@craco/craco": "^5.5.0",
"aphrodite": "^1.2.1",
- "babel-eslint": "^10.0.3",
"classnames": "^2.2.5",
"clipboard": "^1.7.1",
- "cuint": "^0.2.2",
"enzyme": "^3.2.0",
"enzyme-adapter-react-16": "^1.1.0",
- "eslint": "^6.5.1",
- "eslint-config-airbnb": "^18.0.1",
- "eslint-plugin-import": "^2.18.2",
- "eslint-plugin-jsx-a11y": "^6.2.3",
- "eslint-plugin-react": "^7.16.0",
- "eslint-plugin-react-hooks": "^2.1.2",
"file-saver": "^1.3.3",
"font-awesome": "^4.7.0",
"github-api": "^3.0.0",
diff --git a/src/__puppeteer__/demo.test.js b/src/__puppeteer__/demo.test.js
index 6dcf944..3f320b2 100644
--- a/src/__puppeteer__/demo.test.js
+++ b/src/__puppeteer__/demo.test.js
@@ -42,8 +42,6 @@ describe('demo mode', () => {
});
it('should load data', async () => {
- await expect(page).toClick('.t-capline input[type="checkbox"]');
- await delay(500);
await expect(page).toClick('.cabana-meta-messages-list-item');
await delay(500);
await expect(page).toClick('.button--tiny.button--alpha');
diff --git a/src/__tests__/can/dbc.parse.test.js b/src/__tests__/can/dbc.parse.test.js
index 1e7fb31..9f5d13e 100644
--- a/src/__tests__/can/dbc.parse.test.js
+++ b/src/__tests__/can/dbc.parse.test.js
@@ -158,11 +158,10 @@ const steerTorqueSignal = new Signal({
unit: ''
});
-function dbcInt32SignalValue(dbc, signalSpec, hex) {
- // expects hex string to represent 8 bytes, left-justified with zeroes if frame size is smaller
- const buffer = Buffer.from(hex, 'hex');
-
- return dbc.valueForInt32Signal(signalSpec, buffer);
+function dbcIntSignalValue(dbc, signalSpec, hex) {
+ const buffer = Uint8Array.from(Buffer.from(hex, 'hex'))
+ const view = new DataView(buffer.buffer);
+ return dbc.valueForIntSignal(signalSpec, view);
}
test('DBC parses steering control message', () => {
@@ -267,7 +266,7 @@ test('int32 parser produces correct value for steer torque signal', () => {
const dbc = new DBC(DBC_MESSAGE_DEF);
const hex = 'e2d62a0bd0d3b5e5';
- const value = dbcInt32SignalValue(
+ const value = dbcIntSignalValue(
dbc,
dbc.getMessageFrame(228).signals.STEER_TORQUE,
hex
@@ -276,41 +275,32 @@ test('int32 parser produces correct value for steer torque signal', () => {
expect(value).toBe(-7466);
});
-test('int64 parser produces correct value for steer torque signal', () => {
- const dbc = new DBC(DBC_MESSAGE_DEF);
-
- const hex = 'e2d62a0bd0d3b5e5';
- const value = dbc.valueForInt64Signal(steerTorqueSignal, hex);
-
- expect(value).toBe(-7466);
-});
-
test('int32 parser produces correct value for wheel speeds', () => {
const dbc = new DBC(DBC_WHEEL_SPEEDS);
const hex = '36806cd8d8f1b0b7';
- const rearRight = dbcInt32SignalValue(
+ const rearRight = dbcIntSignalValue(
dbc,
dbc.getMessageFrame(464).signals.WHEEL_SPEED_RR,
hex
);
expect(rearRight).toBe(69.23);
- const rearLeft = dbcInt32SignalValue(
+ const rearLeft = dbcIntSignalValue(
dbc,
dbc.getMessageFrame(464).signals.WHEEL_SPEED_RL,
hex
);
expect(rearLeft).toBe(69.42);
- const frontLeft = dbcInt32SignalValue(
+ const frontLeft = dbcIntSignalValue(
dbc,
dbc.getMessageFrame(464).signals.WHEEL_SPEED_FL,
hex
);
expect(frontLeft).toBe(69.76);
- const frontRight = dbcInt32SignalValue(
+ const frontRight = dbcIntSignalValue(
dbc,
dbc.getMessageFrame(464).signals.WHEEL_SPEED_FR,
hex
@@ -330,8 +320,8 @@ test('int32 parsers produces correct value for binary little endian signal', ()
const hexDataSet = '0000000020000000';
const hexDataNotSet = '0000000000000000';
- const setValue = dbcInt32SignalValue(dbc, signalSpec, hexDataSet, 8);
- const notSetValue = dbcInt32SignalValue(dbc, signalSpec, hexDataNotSet, 8);
+ const setValue = dbcIntSignalValue(dbc, signalSpec, hexDataSet);
+ const notSetValue = dbcIntSignalValue(dbc, signalSpec, hexDataNotSet);
expect(setValue).toEqual(1);
expect(notSetValue).toEqual(0);
@@ -347,7 +337,7 @@ test('int32 parser produces correct value for 2-bit little endian signal spannin
const hexData = '00000001f8000000';
- const value = dbcInt32SignalValue(dbc, signalSpec, hexData, 8);
+ const value = dbcIntSignalValue(dbc, signalSpec, hexData);
expect(value).toEqual(3);
});
@@ -361,12 +351,12 @@ test('int32 parser produces correct value for 4-bit little endian signal', () =>
// this data is symmetric, the data bits are 1111
const hexDataSymmetric = 'f00f000000000000';
- const symValue = dbcInt32SignalValue(dbc, signalSpec, hexDataSymmetric, 8);
+ const symValue = dbcIntSignalValue(dbc, signalSpec, hexDataSymmetric);
expect(symValue).toEqual(15);
// this data is asymmetric, the data bits are 1101
const hexDataAsymmetric = 'f002000000000000';
- const aSymValue = dbcInt32SignalValue(dbc, signalSpec, hexDataAsymmetric, 8);
+ const aSymValue = dbcIntSignalValue(dbc, signalSpec, hexDataAsymmetric);
expect(aSymValue).toEqual(11);
});
@@ -391,7 +381,7 @@ test('int32 parser produces correct value for 4-bit little endian signal within
const signalSpec = frame.signals.CF_Clu_AliveCnt1;
const hexData = '2000662000000000';
- const value = dbcInt32SignalValue(dbc, signalSpec, hexData, frame.size);
+ const value = dbcIntSignalValue(dbc, signalSpec, hexData);
expect(value).toEqual(2);
});
@@ -409,11 +399,11 @@ test('int32 parser produces correct value for 2-byte signed little endian signal
const signalSpec = frame.signals.SAS_Angle;
const hexData = '000000fafe000700';
- const value = dbcInt32SignalValue(dbc, signalSpec, hexData, frame.size);
+ const value = dbcIntSignalValue(dbc, signalSpec, hexData);
expect(value).toEqual(0.0);
const hexData2 = '0b000907d8b30000';
- const value2 = dbcInt32SignalValue(dbc, signalSpec, hexData2, frame.size);
+ const value2 = dbcIntSignalValue(dbc, signalSpec, hexData2);
expect(value2).toEqual(1.1);
});
@@ -433,3 +423,28 @@ test('dbc parser parses top-level comment with chffr metric', () => {
'CHFFR_METRIC 37 STEER_ANGLE STEER_ANGLE 0.36 180'
);
});
+
+const DBC_64_BIT_STUFF = `
+BO_ 468 LARGE_SIGNALS: 32 VSA
+ SG_ LARGE_NORMAL : 7|64@0+ (1,0) [0|1.84467E+019] "" XXX
+ SG_ LARGE_LITTLE : 64|64@1+ (1,0) [0|1.84467E+019] "" XXX
+ SG_ LARGE_SIGNED : 135|64@0- (1,0) [0|1.84467E+019] "" XXX
+ SG_ LARGE_OFFSET : 197|62@0+ (1,0) [0|4.61169E+018] "" XXX
+`;
+
+test('int64 parser produces correct values', () => {
+ const dbc = new DBC(DBC_64_BIT_STUFF);
+ const hex = '63d637b340535839' + 'a23f215451e52f7b' + 'a1adff50c4e8eedb' + 'fd071d2c474ac2d4';
+
+ const normal = dbcIntSignalValue(dbc, dbc.getMessageFrame(468).signals.LARGE_NORMAL, hex).toString();
+ expect(normal).toEqual("7193998697788823609");
+
+ const little = dbcIntSignalValue(dbc, dbc.getMessageFrame(468).signals.LARGE_LITTLE, hex).toString();
+ expect(little).toBe("8876565528037113762");
+
+ const signed = dbcIntSignalValue(dbc, dbc.getMessageFrame(468).signals.LARGE_SIGNED, hex).toString();
+ expect(signed).toBe("-6796495540266144037");
+
+ const offset = dbcIntSignalValue(dbc, dbc.getMessageFrame(468).signals.LARGE_OFFSET, hex).toString();
+ expect(offset).toBe("4397515637162427092");
+});
diff --git a/src/__tests__/utils/dbc.test.js b/src/__tests__/utils/dbc.test.js
index a6391ad..29169c9 100644
--- a/src/__tests__/utils/dbc.test.js
+++ b/src/__tests__/utils/dbc.test.js
@@ -8,7 +8,7 @@ import Signal from '../../models/can/signal';
const SAMPLE_MESSAGE = {
address: 0x10,
busTime: 0,
- data: Buffer.from('abababababababab', 'hex'),
+ data: Uint8Array.from(Buffer.from('abababababababab', 'hex')),
bus: 1
};
const SAMPLE_MESSAGE_ID = '1:10';
diff --git a/src/__tests__/workers/rlog-utils.test.js b/src/__tests__/workers/rlog-utils.test.js
deleted file mode 100644
index f66956b..0000000
--- a/src/__tests__/workers/rlog-utils.test.js
+++ /dev/null
@@ -1,61 +0,0 @@
-/* eslint-env jest */
-import {
- signedShortToByteArray,
- shortToByteArray,
- longToByteArray,
- signedLongToByteArray,
- getThermalFlags,
- // getHealthFlags,
- // getFlags,
- // getUbloxGnss,
- // getEgoData,
- // getCarStateControls,
- // getWheelSpeeds,
- // getThermalFreeSpace,
- // getThermalData,
- // getThermalCPU,
- // getHealth
-} from '../../workers/rlog-utils';
-
-describe('byte array methods', () => {
- test('signedShortToByteArray', () => {
- expect(signedShortToByteArray(123)).toMatchObject([0, 123]);
- expect(signedShortToByteArray(-123)).toMatchObject([255, 133]);
- });
- test('shortToByteArray', () => {
- expect(shortToByteArray(123)).toMatchObject([0, 123]);
- expect(shortToByteArray(-123)).toMatchObject([255, 133]);
- });
- test('longToByteArray', () => {
- expect(longToByteArray(123)).toMatchObject([0, 0, 0, 123]);
- expect(longToByteArray(-123)).toMatchObject([255, 255, 255, 133]);
- });
- test('signedLongToByteArray', () => {
- expect(signedLongToByteArray(123)).toMatchObject([0, 0, 0, 123]);
- expect(signedLongToByteArray(-123)).toMatchObject([255, 255, 255, 133]);
- });
-});
-
-describe('flags', () => {
- test('getThermalFlags', () => {
- expect(getThermalFlags({
- UsbOnline: false,
- Started: false
- })).toBe(0x00);
-
- expect(getThermalFlags({
- UsbOnline: true,
- Started: false
- })).toBe(0x01);
-
- expect(getThermalFlags({
- UsbOnline: false,
- Started: true
- })).toBe(0x02);
-
- expect(getThermalFlags({
- UsbOnline: true,
- Started: true
- })).toBe(0x03);
- });
-});
diff --git a/src/components/CanLog.js b/src/components/CanLog.js
index 8aeb6cc..6345ee6 100644
--- a/src/components/CanLog.js
+++ b/src/components/CanLog.js
@@ -103,6 +103,9 @@ export default class CanLog extends Component {
if (signal.isFloat) {
return value.toFixed(3);
}
+ if (typeof value === 'bigint') {
+ return value.toString();
+ }
return value;
}
diff --git a/src/components/Meta.js b/src/components/Meta.js
index b860136..e79eda3 100644
--- a/src/components/Meta.js
+++ b/src/components/Meta.js
@@ -385,21 +385,6 @@ export default class Meta extends Component {
diff --git a/src/models/can/dbc.js b/src/models/can/dbc.js
index cd225b0..a0f237a 100644
--- a/src/models/can/dbc.js
+++ b/src/models/can/dbc.js
@@ -3,9 +3,6 @@ import Signal from './signal';
import Frame from './frame';
import BoardUnit from './BoardUnit';
import DbcUtils from '../../utils/dbc';
-import * as LogSignals from './logSignals';
-
-const { UINT64 } = require('cuint');
const DBC_COMMENT_RE = /^CM_ *"(.*)";/;
const DBC_COMMENT_MULTI_LINE_RE = /^CM_ *"(.*)/;
@@ -38,6 +35,8 @@ const FOLLOW_UP_SIGNAL_COMMENT = 'FollowUpSignalComment';
const FOLLOW_UP_MSG_COMMENT = 'FollowUpMsgComment';
const FOLLOW_UP_BOARD_UNIT_COMMENT = 'FollowUpBoardUnitComment';
+/* global BigInt */
+
function floatOrInt(numericStr) {
if (Number.isInteger(numericStr)) {
return parseInt(numericStr, 10);
@@ -71,9 +70,6 @@ export default class DBC {
}
getMessageFrame(address) {
- if (LogSignals.isLogAddress(address)) {
- return LogSignals.frameForAddress(address);
- }
return this.messages.get(address);
}
@@ -175,7 +171,6 @@ export default class DBC {
}
createFrame(msgId, size=64) {
- console.log(this.messages, msgId);
const msg = new Frame({
name: this.nextNewFrameName(),
id: msgId,
@@ -538,99 +533,58 @@ export default class DBC {
this.valueTables = valueTables;
}
- valueForInt64Signal(signalSpec, hexData) {
- const blen = hexData.length * 4;
- let value;
- let startBit;
- let dataBitPos;
-
+ valueForIntSignal(signalSpec, view) {
+ let sig_lsb, sig_msb;
if (signalSpec.isLittleEndian) {
- value = UINT64(swapOrder(hexData, 16, 2), 16);
- startBit = signalSpec.startBit;
- dataBitPos = UINT64(startBit);
+ sig_lsb = signalSpec.startBit;
+ sig_msb = signalSpec.startBit + signalSpec.size - 1;
} else {
- // big endian
- value = UINT64(hexData, 16);
-
- startBit = DbcUtils.bigEndianBitIndex(signalSpec.startBit);
- dataBitPos = UINT64(blen - (startBit + signalSpec.size));
- }
- if (dataBitPos < 0) {
- return null;
+ sig_lsb = DbcUtils.matrixBitNumber(DbcUtils.bigEndianBitIndex(signalSpec.startBit) + signalSpec.size - 1);
+ sig_msb = signalSpec.startBit;
}
- const rightHandAnd = UINT64(Math.pow(2, signalSpec.size) - 1);
- let ival = value
- .shiftr(dataBitPos)
- .and(rightHandAnd)
- .toNumber();
+ let ret = signalSpec.size > 32 ? 0n : 0;
+ let i = Math.floor(sig_msb / 8);
+ let bits = signalSpec.size;
+ while (i >= 0 && i < view.byteLength && bits > 0) {
+ let lsb = Math.floor(sig_lsb / 8) === i ? sig_lsb : i*8;
+ let msb = Math.floor(sig_msb / 8) === i ? sig_msb : (i+1)*8 - 1;
+ let size = msb - lsb + 1;
- if (signalSpec.isSigned && ival & Math.pow(2, signalSpec.size - 1)) {
- ival -= Math.pow(2, signalSpec.size);
- }
- ival = ival * signalSpec.factor + signalSpec.offset;
- return ival;
- }
-
- valueForInt32Signal(signalSpec, buf) {
- let startBit;
- if (signalSpec.isLittleEndian) {
- startBit = 64 - signalSpec.startBit - signalSpec.size;
- } else {
- let bitPos = (-signalSpec.startBit - 1) % 8;
- if (bitPos < 0) {
- bitPos += 8; // mimic python modulo behavior
+ let d = (view.getUint8(i) >>> (lsb - (i*8))) & ((1 << size) - 1);
+ if (signalSpec.size > 32) {
+ ret |= BigInt(d) << BigInt(bits - size);
+ } else {
+ ret |= d << (bits - size);
}
- startBit = Math.floor(signalSpec.startBit / 8) * 8 + bitPos;
+ bits -= size;
+ i = signalSpec.isLittleEndian ? i-1 : i+1;
}
- let shiftAmount;
- let signalValue;
- const byteOffset = Math.min(4, Math.floor(signalSpec.startBit / 8));
- if (signalSpec.isLittleEndian) {
- signalValue = buf.readUInt32LE(byteOffset);
- shiftAmount = signalSpec.startBit - 8 * byteOffset;
+ if (signalSpec.size > 32) {
+ ret = signalSpec.isSigned ? BigInt.asIntN(64, ret) : ret;
+ return ret * BigInt(signalSpec.factor) + BigInt(signalSpec.offset);
} else {
- signalValue = buf.readUInt32BE(byteOffset);
- shiftAmount = 32 - (startBit - 8 * byteOffset + signalSpec.size);
+ if (signalSpec.isSigned) {
+ ret -= ((ret >> (signalSpec.size-1)) & 1) ? (1 << signalSpec.size) : 0;
+ }
+ return ret * signalSpec.factor + signalSpec.offset;
}
-
- signalValue = (signalValue >>> shiftAmount) & ((1 << signalSpec.size) - 1);
- if (signalSpec.isSigned && signalValue >>> (signalSpec.size - 1)) {
- signalValue -= 1 << signalSpec.size;
- }
-
- return signalValue * signalSpec.factor + signalSpec.offset;
}
getSignalValues(messageId, data) {
- if (!this.messages.has(messageId) && !LogSignals.isLogAddress(messageId)) {
+ if (!this.messages.has(messageId)) {
return {};
}
const frame = this.getMessageFrame(messageId);
-
- const buffer = Buffer.from(data);
- let paddedBuffer = buffer;
- if (buffer.length !== 8) {
- // pad data it's 64 bits long
- const paddedDataHex = buffer.toString('hex').padEnd(16, '0');
- paddedBuffer = Buffer.from(paddedDataHex, 'hex');
- }
- const hexData = paddedBuffer.toString('hex');
-
+ const view = new DataView(data.buffer);
const signalValuesByName = {};
Object.values(frame.signals).forEach((signalSpec) => {
if (isNaN(signalSpec.startBit)) {
return;
}
- let value;
- if (signalSpec.size > 32) {
- value = this.valueForInt64Signal(signalSpec, hexData);
- } else {
- value = this.valueForInt32Signal(signalSpec, paddedBuffer);
- }
- signalValuesByName[signalSpec.name] = value;
+ signalValuesByName[signalSpec.name] = this.valueForIntSignal(signalSpec, view);
});
return signalValuesByName;
diff --git a/src/models/can/logSignals.js b/src/models/can/logSignals.js
deleted file mode 100644
index 1362841..0000000
--- a/src/models/can/logSignals.js
+++ /dev/null
@@ -1,336 +0,0 @@
-import Frame from './frame';
-import Signal from './signal';
-
-export const wheelSpeeds = {
- FrontLeftWheel: shortSignal({
- index: 0,
- factor: 0.001
- }),
- FrontRightWheel: shortSignal({
- index: 1,
- factor: 0.001
- }),
- RearLeftWheel: shortSignal({
- index: 2,
- factor: 0.001
- }),
- RearRightWheel: shortSignal({
- index: 3,
- factor: 0.001
- })
-};
-
-export const ego = {
- VEgo: shortSignal({
- index: 0,
- factor: 0.001
- }),
- AEgo: shortSignal({
- index: 1,
- factor: 0.001
- }),
- VEgoRaw: shortSignal({
- index: 2,
- factor: 0.001
- }),
- YawRate: shortSignal({
- index: 3,
- factor: 0.001
- })
-};
-
-export const controls = {
- SteeringAngle: longSignal({
- index: 0,
- factor: 0.001
- }),
- Brake: shortSignal({
- index: 2,
- factor: 0.001
- }),
- Gas: shortSignal({
- index: 3,
- factor: 0.001
- })
-};
-
-export const actuators = {
- Steer: shortSignal({
- index: 0,
- factor: 0.001
- }),
- SteerAngle: shortSignal({
- index: 1,
- factor: 0.001
- }),
- Brake: shortSignal({
- index: 2,
- factor: 0.001
- }),
- Gas: shortSignal({
- index: 3,
- factor: 0.001
- })
-};
-
-export const leadOne = {
- DRel: shortSignal({
- index: 0,
- factor: 0.001
- }),
- VRel: shortSignal({
- index: 1,
- factor: 0.001
- }),
-};
-
-export const leadTwo = {
- DRel: shortSignal({
- index: 0,
- factor: 0.001
- }),
- VRel: shortSignal({
- index: 1,
- factor: 0.001
- }),
-};
-
-export const flags = {
- LeftBlinker: boolSignal({
- index: 0
- }),
- RightBlinker: boolSignal({
- index: 1
- }),
- GenericToggle: boolSignal({
- index: 2
- }),
- DoorOpen: boolSignal({
- index: 3
- }),
- SeatbeltUnlatched: boolSignal({
- index: 4
- }),
- GasPressed: boolSignal({
- index: 5
- }),
- BrakeLights: boolSignal({
- index: 6
- }),
- SteeringPressed: boolSignal({
- index: 7
- }),
- Standstill: boolSignal({
- index: 8
- }),
- 'CruiseState.Enabled': boolSignal({
- index: 9
- }),
- 'CruiseState.Available': boolSignal({
- index: 10
- }),
- 'CruiseState.Standstill': boolSignal({
- index: 11
- }),
- GearShifter: {
- startBit: 15,
- size: 4,
- unsigned: true
- },
- 'CruiseState.Speed': charSignal({
- index: 2
- })
-};
-
-export const ubloxGnss = {
- RcvTow: longSignal({
- index: 0
- }),
- GpsWeek: shortSignal({
- index: 2
- }),
- LeapSeconds: {
- startBit: 55,
- size: 8
- },
- NumMeas: {
- startBit: 63,
- size: 8
- }
-};
-
-export const health = {
- Voltage: shortSignal({
- index: 0
- }),
- Current: charSignal({
- index: 2
- }),
- Started: boolSignal({
- index: 24
- }),
- ControlsAllowed: boolSignal({
- index: 25
- }),
- GasInterceptorDetected: boolSignal({
- index: 26
- }),
- StartedSignalDetected: boolSignal({
- index: 27
- })
-};
-
-export const thermalCPU = {
- Cpu0: shortSignal({
- index: 0,
- unsigned: true
- }),
- Cpu1: shortSignal({
- index: 1,
- unsigned: true
- }),
- Cpu2: shortSignal({
- index: 2,
- unsigned: true
- }),
- Cpu3: shortSignal({
- index: 3,
- unsigned: true
- })
-};
-
-export const thermalData = {
- Mem: shortSignal({
- index: 0,
- unsigned: true
- }),
- Gpu: shortSignal({
- index: 1,
- unsigned: true
- }),
- FanSpeed: shortSignal({
- index: 2,
- unsigned: true
- }),
- BatteryPercent: charSignal({
- index: 6,
- unsigned: true
- }),
- UsbOnline: boolSignal({
- index: 56
- }),
- Started: boolSignal({
- index: 57
- })
-};
-
-export const thermalFreeSpace = {
- FreeSpace: longSignal({
- index: 0,
- unsigned: true,
- factor: 0.000000001
- })
-};
-
-export const signalMap = {
- 'CarState:WheelSpeeds': wheelSpeeds,
- 'CarState:Ego': ego,
- 'CarState:Controls': controls,
- 'CarState:Flags': flags,
- 'CarControl:Actuators': actuators,
- 'RadarState:LeadOne': leadOne,
- 'RadarState:LeadTwo': leadTwo,
- 'UbloxGnss:MeasurementReport': ubloxGnss,
- 'Health:Data': health,
- 'Thermal:CPU': thermalCPU,
- 'Thermal:Data': thermalData,
- 'Thermal:FreeSpace': thermalFreeSpace
-};
-
-const ADDRESS_LIST = [];
-
-Object.keys(signalMap).forEach((name) => {
- Object.keys(signalMap[name]).forEach((signal) => {
- signalMap[name][signal] = createSignalEntry({
- name: signal,
- ...signalMap[name][signal]
- });
- });
- addressForName(name);
-});
-
-function createSignalEntry(options) {
- return new Signal({
- name: options.name,
- startBit: options.startBit,
- size: options.size,
- isLittleEndian: false,
- isSigned: !options.unsigned,
- factor: options.factor || 1,
- offset: options.offset || 0,
- unit: options.unit || ''
- });
-}
-
-function longSignal(options) {
- return {
- ...options,
- size: 32,
- startBit: options.index * 32 + 7
- };
-}
-
-function shortSignal(options) {
- return {
- ...options,
- size: 16,
- startBit: options.index * 16 + 7
- };
-}
-
-function charSignal(options) {
- return {
- ...options,
- size: 8,
- startBit: options.index * 8 + 7
- };
-}
-
-function boolSignal(options) {
- return {
- ...options,
- size: 1,
- startBit: options.index,
- unsigned: true
- };
-}
-
-export function addressForName(name) {
- const i = ADDRESS_LIST.indexOf(name);
- if (i === -1) {
- ADDRESS_LIST.push(name);
- return ADDRESS_LIST.indexOf(name) + 0x1000;
- }
- return i + 0x1000;
-}
-
-export function nameForAddress(address) {
- if (address >= 0x1000) {
- return ADDRESS_LIST[address - 0x1000];
- }
- return null;
-}
-
-export function isLogAddress(address) {
- return !!nameForAddress(address);
-}
-
-export function frameForAddress(address) {
- const name = nameForAddress(address);
- return new Frame({
- id: name,
- name,
- size: 8,
- signals: signalMap[name]
- });
-}
diff --git a/src/models/graph-data.js b/src/models/graph-data.js
index 3eb4c98..f9a6e59 100644
--- a/src/models/graph-data.js
+++ b/src/models/graph-data.js
@@ -51,7 +51,7 @@ function _calcGraphData(msg, signalUid, firstCanTime) {
return {
x: entry.time,
relTime: entry.relTime,
- y: entry.signals[signal.name],
+ y: parseInt(entry.signals[signal.name]),
unit: signal.unit,
color: `rgba(${colors.join(',')}, 0.5)`,
signalName: signal.name,
diff --git a/src/workers/message-parser.worker.js b/src/workers/message-parser.worker.js
index 938d983..9a80281 100644
--- a/src/workers/message-parser.worker.js
+++ b/src/workers/message-parser.worker.js
@@ -7,7 +7,7 @@ import DbcUtils from '../utils/dbc';
const window = self;
function reparseEntry(entry, address, dbc, canStartTime, prevMsgEntry) {
- const data = Buffer.from(entry.hexData, 'hex');
+ const data = Uint8Array.from(Buffer.from(entry.hexData, 'hex'));
return DbcUtils.parseMessage(
dbc,
entry.time,
diff --git a/src/workers/rlog-downloader.worker.js b/src/workers/rlog-downloader.worker.js
index b67b453..afb4c74 100644
--- a/src/workers/rlog-downloader.worker.js
+++ b/src/workers/rlog-downloader.worker.js
@@ -6,21 +6,6 @@ import { timeout } from 'thyming';
import { getLogPart } from '../api/rlog';
import DbcUtils from '../utils/dbc';
import DBC from '../models/can/dbc';
-import { addressForName } from '../models/can/logSignals';
-import {
- getFlags,
- getUbloxGnss,
- getEgoData,
- getCarStateControls,
- getWheelSpeeds,
- getCarControlActuators,
- getRadarStateLeadOne,
- getRadarStateLeadTwo,
- getThermalFreeSpace,
- getThermalData,
- getThermalCPU,
- getHealth
-} from './rlog-utils';
const DEBOUNCE_DELAY = 100;
@@ -67,42 +52,6 @@ function queueBatch(entry) {
}
}
-function getPrevMsgEntry(messages, prevMsgEntries, id) {
- if (messages[id].entries.length) {
- return messages[id].entries[messages[id].entries.length - 1];
- }
- return prevMsgEntries[id] || null;
-}
-
-function insertEventData(src, part, entry, logTime, getData) {
- const id = `${src}:${part}`;
- const address = addressForName(id);
-
- if (!entry.messages[id]) {
- entry.messages[id] = DbcUtils.createMessageSpec(
- entry.dbc,
- address,
- id,
- src
- );
- entry.messages[id].isLogEvent = true;
- }
- const prevMsgEntry = getPrevMsgEntry(
- entry.messages,
- entry.options.prevMsgEntries,
- id
- );
-
- const msgEntry = {
- time: logTime,
- address,
- data: getData(),
- timeStart: entry.options.routeInitTime
- };
-
- entry.messages[id].entries.push(msgEntry);
-}
-
function insertCanMessage(entry, logTime, msg) {
const src = msg.Src;
const address = Number(msg.Address);
@@ -118,16 +67,11 @@ function insertCanMessage(entry, logTime, msg) {
);
entry.messages[id].isLogEvent = false;
}
- const prevMsgEntry = getPrevMsgEntry(
- entry.messages,
- entry.options.prevMsgEntries,
- id
- );
const msgEntry = {
time: logTime,
address,
- data: msg.Dat,
+ data: new Uint8Array(msg.Dat),
timeStart: entry.options.routeInitTime
};
@@ -177,104 +121,6 @@ async function loadData(entry) {
} else if ('Can' in msg) {
const monoTime = msg.LogMonoTime / 1000000000;
msg.Can.forEach((m) => insertCanMessage(entry, monoTime, m));
- } else if ('CarState' in msg) {
- const monoTime = msg.LogMonoTime / 1000000000;
- insertEventData(
- 'CarState',
- 'Ego',
- entry,
- monoTime,
- (m) => getEgoData(msg.CarState, m)
- );
- insertEventData(
- 'CarState',
- 'Controls',
- entry,
- monoTime,
- (m) => getCarStateControls(msg.CarState, m)
- );
- insertEventData(
- 'CarState',
- 'Flags',
- entry,
- monoTime,
- (m) => getFlags(msg.CarState, m)
- );
- insertEventData(
- 'CarState',
- 'WheelSpeeds',
- entry,
- monoTime,
- (m) => getWheelSpeeds(msg.CarState, m)
- );
- } else if ('CarControl' in msg) {
- const monoTime = msg.LogMonoTime / 1000000000;
- insertEventData(
- 'CarControl',
- 'Actuators',
- entry,
- monoTime,
- (m) => getCarControlActuators(msg.CarControl, m)
- );
- } else if ('RadarState' in msg) {
- const monoTime = msg.LogMonoTime / 1000000000;
- insertEventData(
- 'RadarState',
- 'LeadOne',
- entry,
- monoTime,
- (m) => getRadarStateLeadOne(msg.RadarState, m)
- );
- insertEventData(
- 'RadarState',
- 'LeadTwo',
- entry,
- monoTime,
- (m) => getRadarStateLeadTwo(msg.RadarState, m)
- );
- } else if ('UbloxGnss' in msg) {
- const monoTime = msg.LogMonoTime / 1000000000;
- if (msg.UbloxGnss.MeasurementReport) {
- insertEventData(
- 'UbloxGnss',
- 'MeasurementReport',
- entry,
- monoTime,
- (m) => getUbloxGnss(msg.UbloxGnss.MeasurementReport, m)
- );
- }
- } else if ('Health' in msg) {
- const monoTime = msg.LogMonoTime / 1000000000;
- insertEventData(
- 'Health',
- 'Data',
- entry,
- monoTime,
- (m) => getHealth(msg.Health, m)
- );
- } else if ('Thermal' in msg) {
- const monoTime = msg.LogMonoTime / 1000000000;
- insertEventData(
- 'Thermal',
- 'CPU',
- entry,
- monoTime,
- (m) => getThermalCPU(msg.Thermal, m)
- );
- insertEventData(
- 'Thermal',
- 'Data',
- entry,
- monoTime,
- (m) => getThermalData(msg.Thermal, m)
- );
- insertEventData(
- 'Thermal',
- 'FreeSpace',
- entry,
- monoTime,
- (m) => getThermalFreeSpace(msg.Thermal, m)
- );
} else if ('Thumbnail' in msg) {
const monoTime = msg.LogMonoTime / 1000000000 - entry.options.routeInitTime;
const data = new Uint8Array(msg.Thumbnail.Thumbnail);
diff --git a/src/workers/rlog-utils.js b/src/workers/rlog-utils.js
deleted file mode 100644
index 6d571b2..0000000
--- a/src/workers/rlog-utils.js
+++ /dev/null
@@ -1,211 +0,0 @@
-/* eslint-disable no-param-reassign, no-bitwise */
-
-export function signedShortToByteArray(short) {
- const byteArray = [0, 0];
- const isNegative = short < 0;
- if (isNegative) {
- short += 2 ** (8 * byteArray.length);
- }
-
- for (let index = byteArray.length - 1; index >= 0; --index) {
- const byte = short & 0xff;
- byteArray[index] = byte;
- short >>= 8;
- }
-
- return byteArray;
-}
-
-export function shortToByteArray(short) {
- const byteArray = [0, 0];
-
- for (let index = byteArray.length - 1; index >= 0; --index) {
- const byte = short & 0xff;
- byteArray[index] = byte;
- short >>= 8;
- }
-
- return byteArray;
-}
-
-export function longToByteArray(long) {
- const byteArray = [0, 0, 0, 0];
-
- for (let index = byteArray.length - 1; index >= 0; --index) {
- const byte = long & 0xff;
- byteArray[index] = byte;
- long >>= 8;
- }
-
- return byteArray;
-}
-
-export function signedLongToByteArray(long) {
- const byteArray = [0, 0, 0, 0];
- const isNegative = long < 0;
- if (isNegative) {
- long += 2 ** (8 * byteArray.length);
- }
-
- for (let index = byteArray.length - 1; index >= 0; --index) {
- const byte = long & 0xff;
- byteArray[index] = byte;
- long >>= 8;
- }
-
- return byteArray;
-}
-
-export function getThermalFlags(state) {
- let flags = 0x00;
-
- if (state.UsbOnline) {
- flags |= 0x01;
- }
- if (state.Started) {
- flags |= 0x02;
- }
-
- return flags;
-}
-
-export function getHealthFlags(state) {
- let flags = 0x00;
-
- if (state.Started) {
- flags |= 0x01;
- }
- if (state.ControlsAllowed) {
- flags |= 0x02;
- }
- if (state.GasInterceptorDetected) {
- flags |= 0x04;
- }
- if (state.StartedSignalDetected) {
- flags |= 0x08;
- }
-
- return flags;
-}
-
-export function getFlags(state) {
- let flags = 0x00;
- const arr = [0, 0, 0];
-
- if (state.LeftBlinker) {
- flags |= 0x01;
- }
- if (state.RightBlinker) {
- flags |= 0x02;
- }
- if (state.GenericToggle) {
- flags |= 0x04;
- }
- if (state.DoorOpen) {
- flags |= 0x08;
- }
- if (state.SeatbeltUnlatched) {
- flags |= 0x10;
- }
- if (state.GasPressed) {
- flags |= 0x20;
- }
- if (state.BrakeLights) {
- flags |= 0x40;
- }
- if (state.SteeringPressed) {
- flags |= 0x80;
- }
-
- arr[0] = flags;
- flags = 0x00;
-
- if (state.Standstill) {
- flags |= 0x01;
- }
- if (state.CruiseState.Enabled) {
- flags |= 0x02;
- }
- if (state.CruiseState.Available) {
- flags |= 0x04;
- }
- if (state.CruiseState.Standstill) {
- flags |= 0x08;
- }
- if (state.GearShifter) {
- flags |= state.GearShifter << 4;
- }
-
- arr[1] = flags;
- arr[2] = state.CruiseState.Speed;
- return arr;
-}
-
-export function getUbloxGnss(state) {
- return signedLongToByteArray(state.RcvTow / 1000)
- .concat(signedShortToByteArray(state.GpsWeek))
- .concat([state.LeapSeconds])
- .concat([state.NumMeas]);
-}
-
-export function getEgoData(state) {
- return signedShortToByteArray(state.VEgo * 1000)
- .concat(signedShortToByteArray(state.AEgo * 1000))
- .concat(signedShortToByteArray(state.VEgoRaw * 1000))
- .concat(signedShortToByteArray(state.YawRate * 1000));
-}
-
-export function getCarStateControls(state) {
- return signedLongToByteArray(state.SteeringAngle * 1000)
- .concat(signedShortToByteArray(state.Brake * 1000))
- .concat(signedShortToByteArray(state.Gas * 1000));
-}
-
-export function getWheelSpeeds(state) {
- return signedShortToByteArray(state.WheelSpeeds.Fl * 100)
- .concat(signedShortToByteArray(state.WheelSpeeds.Fr * 100))
- .concat(signedShortToByteArray(state.WheelSpeeds.Rl * 100))
- .concat(signedShortToByteArray(state.WheelSpeeds.Rr * 100));
-}
-
-export function getCarControlActuators(state) {
- return signedShortToByteArray(state.Actuators.Steer * 1000)
- .concat(signedShortToByteArray(state.Actuators.SteerAngle * 1000))
- .concat(signedShortToByteArray(state.Actuators.Brake * 1000))
- .concat(signedShortToByteArray(state.Actuators.Gas * 1000));
-}
-
-export function getRadarStateLeadOne(state) {
- return signedShortToByteArray(state.LeadOne.DRel * 1000)
- .concat(signedShortToByteArray(state.LeadOne.VRel * 1000));
-}
-
-export function getRadarStateLeadTwo(state) {
- return signedShortToByteArray(state.LeadTwo.DRel * 1000)
- .concat(signedShortToByteArray(state.LeadTwo.VRel * 1000));
-}
-
-export function getThermalFreeSpace(state) {
- return longToByteArray(state.FreeSpace * 1000000000);
-}
-
-export function getThermalData(state) {
- return shortToByteArray(state.Mem)
- .concat(shortToByteArray(state.Gpu))
- .concat(shortToByteArray(state.FanSpeed))
- .concat(state.BatteryPercent)
- .concat(getThermalFlags(state));
-}
-
-export function getThermalCPU(state) {
- return shortToByteArray(state.Cpu0)
- .concat(shortToByteArray(state.Cpu1))
- .concat(shortToByteArray(state.Cpu2))
- .concat(shortToByteArray(state.Cpu3));
-}
-
-export function getHealth(state) {
- return signedShortToByteArray(state.Voltage)
- .concat(state.Current)
- .concat(getHealthFlags(state));
-}
diff --git a/yarn.lock b/yarn.lock
index 0c150cd..0ee409b 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1139,7 +1139,7 @@
"@babel/helper-plugin-utils" "^7.8.3"
"@babel/plugin-transform-typescript" "^7.9.0"
-"@babel/runtime-corejs3@^7.10.2", "@babel/runtime-corejs3@^7.12.1":
+"@babel/runtime-corejs3@^7.12.1":
version "7.17.2"
resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.17.2.tgz#fdca2cd05fba63388babe85d349b6801b008fd13"
integrity sha512-NcKtr2epxfIrNM4VOmPKO46TvDMCBhgi2CrSHaEarrz+Plk2K5r9QemmOFTGpZaoKnWoGH5MO+CzeRsih/Fcgg==
@@ -1154,7 +1154,7 @@
dependencies:
regenerator-runtime "^0.13.4"
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.10.2", "@babel/runtime@^7.16.3", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4":
+"@babel/runtime@^7.0.0", "@babel/runtime@^7.2.0", "@babel/runtime@^7.3.4", "@babel/runtime@^7.4.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.8.4":
version "7.17.2"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.17.2.tgz#66f68591605e59da47523c631416b18508779941"
integrity sha512-hzeyJyMA1YGdJTuWU0e/j4wKXrU4OMFvY2MSlaI9B7VQb0r5cxTE3EAIS2Q7Tn2RIcDkRvTA/v2JsAEhxe99uw==
@@ -1847,11 +1847,6 @@
resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.9.tgz#97edc9037ea0c38585320b28964dde3b39e4660d"
integrity sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==
-"@types/json5@^0.0.29":
- version "0.0.29"
- resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee"
- integrity sha1-7ihweulOEdK4J7y+UnC86n8+ce4=
-
"@types/minimatch@*":
version "3.0.5"
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40"
@@ -2427,14 +2422,6 @@ aria-query@^3.0.0:
ast-types-flow "0.0.7"
commander "^2.11.0"
-aria-query@^4.2.2:
- version "4.2.2"
- resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b"
- integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA==
- dependencies:
- "@babel/runtime" "^7.10.2"
- "@babel/runtime-corejs3" "^7.10.2"
-
arity-n@^1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/arity-n/-/arity-n-1.0.4.tgz#d9e76b11733e08569c0847ae7b39b2860b30b745"
@@ -2487,7 +2474,7 @@ array-flatten@^2.1.0:
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.2.tgz#24ef80a28c1a893617e2149b0c6d0d788293b099"
integrity sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==
-array-includes@^3.0.3, array-includes@^3.1.1, array-includes@^3.1.3, array-includes@^3.1.4:
+array-includes@^3.0.3, array-includes@^3.1.1:
version "3.1.4"
resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.4.tgz#f5b493162c760f3539631f005ba2bb46acb45ba9"
integrity sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==
@@ -2545,7 +2532,7 @@ array.prototype.find@^2.1.1:
define-properties "^1.1.3"
es-abstract "^1.19.0"
-array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.3, array.prototype.flat@^1.2.5:
+array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.3:
version "1.2.5"
resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.5.tgz#07e0975d84bbc7c48cd1879d609e682598d33e13"
integrity sha512-KaYU+S+ndVqyUnignHftkwc58o3uVU1jzczILJ1tN2YaIZpFIKBiP/x/j97E5MVPsaCloPbqWLB/8qCTVvT2qg==
@@ -2554,15 +2541,6 @@ array.prototype.flat@^1.2.1, array.prototype.flat@^1.2.3, array.prototype.flat@^
define-properties "^1.1.3"
es-abstract "^1.19.0"
-array.prototype.flatmap@^1.2.5:
- version "1.2.5"
- resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.2.5.tgz#908dc82d8a406930fdf38598d51e7411d18d4446"
- integrity sha512-08u6rVyi1Lj7oqWbS9nUxliETrtIROT4XGTA4D/LWGten6E3ocm7cy9SIrmNHOL5XVbVuckUp3X6Xyg8/zpvHA==
- dependencies:
- call-bind "^1.0.0"
- define-properties "^1.1.3"
- es-abstract "^1.19.0"
-
arraybuffer.slice@~0.0.7:
version "0.0.7"
resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675"
@@ -2683,11 +2661,6 @@ aws4@^1.8.0:
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
-axe-core@^4.3.5:
- version "4.4.1"
- resolved "https://registry.yarnpkg.com/axe-core/-/axe-core-4.4.1.tgz#7dbdc25989298f9ad006645cd396782443757413"
- integrity sha512-gd1kmb21kwNuWr6BQz8fv6GNECPBnUasepcoLbekws23NVBLODdsClRZ+bQ8+9Uomf3Sm3+Vwn0oYG9NvwnJCw==
-
axios@^0.21.1:
version "0.21.4"
resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575"
@@ -2695,7 +2668,7 @@ axios@^0.21.1:
dependencies:
follow-redirects "^1.14.0"
-axobject-query@^2.0.2, axobject-query@^2.2.0:
+axobject-query@^2.0.2:
version "2.2.0"
resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-2.2.0.tgz#943d47e10c0b704aa42275e20edf3722648989be"
integrity sha512-Td525n+iPOOyUQIeBfcASuG6uJsDOITl7Mds5gFyerkWiX7qhUTdYUBlSgNMyVqtSJqwpt1kXGLdUt6SykLMRA==
@@ -2709,7 +2682,7 @@ babel-code-frame@^6.22.0:
esutils "^2.0.2"
js-tokens "^3.0.2"
-babel-eslint@10.1.0, babel-eslint@^10.0.3:
+babel-eslint@10.1.0:
version "10.1.0"
resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232"
integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==
@@ -3804,7 +3777,7 @@ concat-stream@^1.5.0:
readable-stream "^2.2.2"
typedarray "^0.0.6"
-confusing-browser-globals@^1.0.10, confusing-browser-globals@^1.0.9:
+confusing-browser-globals@^1.0.9:
version "1.0.11"
resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81"
integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA==
@@ -4285,11 +4258,6 @@ csstype@^3.0.2:
resolved "https://registry.yarnpkg.com/csstype/-/csstype-3.0.10.tgz#2ad3a7bed70f35b965707c092e5f30b327c290e5"
integrity sha512-2u44ZG2OcNUO9HDp/Jl8C07x6pU/eTR3ncV91SiK3dhG9TWvRVsCoJw14Ckx5DgWkzGA3waZWO3d7pgqpUI/XA==
-cuint@^0.2.2:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b"
- integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs=
-
cwd@^0.10.0:
version "0.10.0"
resolved "https://registry.yarnpkg.com/cwd/-/cwd-0.10.0.tgz#172400694057c22a13b0cf16162c7e4b7a7fe567"
@@ -4434,7 +4402,7 @@ d@1, d@^1.0.1:
es5-ext "^0.10.50"
type "^1.0.1"
-damerau-levenshtein@^1.0.4, damerau-levenshtein@^1.0.7:
+damerau-levenshtein@^1.0.4:
version "1.0.8"
resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz#b43d286ccbd36bc5b2f7ed41caf2d0aba1f8a6e7"
integrity sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==
@@ -4909,11 +4877,6 @@ emoji-regex@^8.0.0:
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
-emoji-regex@^9.2.2:
- version "9.2.2"
- resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
- integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
-
emojis-list@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
@@ -5183,24 +5146,6 @@ escodegen@^1.11.0, escodegen@^1.9.1:
optionalDependencies:
source-map "~0.6.1"
-eslint-config-airbnb-base@^14.2.1:
- version "14.2.1"
- resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.1.tgz#8a2eb38455dc5a312550193b319cdaeef042cd1e"
- integrity sha512-GOrQyDtVEc1Xy20U7vsB2yAoB4nBlfH5HZJeatRXHleO+OS5Ot+MWij4Dpltw4/DyIkqUfqz1epfhVR5XWWQPA==
- dependencies:
- confusing-browser-globals "^1.0.10"
- object.assign "^4.1.2"
- object.entries "^1.1.2"
-
-eslint-config-airbnb@^18.0.1:
- version "18.2.1"
- resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.2.1.tgz#b7fe2b42f9f8173e825b73c8014b592e449c98d9"
- integrity sha512-glZNDEZ36VdlZWoxn/bUR1r/sdFKPd1mHPbqUtkctgNG4yT2DLLtJ3D+yCV+jzZCc2V1nBVkmdknOJBZ5Hc0fg==
- dependencies:
- eslint-config-airbnb-base "^14.2.1"
- object.assign "^4.1.2"
- object.entries "^1.1.2"
-
eslint-config-react-app@^5.2.1:
version "5.2.1"
resolved "https://registry.yarnpkg.com/eslint-config-react-app/-/eslint-config-react-app-5.2.1.tgz#698bf7aeee27f0cea0139eaef261c7bf7dd623df"
@@ -5208,7 +5153,7 @@ eslint-config-react-app@^5.2.1:
dependencies:
confusing-browser-globals "^1.0.9"
-eslint-import-resolver-node@^0.3.2, eslint-import-resolver-node@^0.3.6:
+eslint-import-resolver-node@^0.3.2:
version "0.3.6"
resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz#4048b958395da89668252001dbd9eca6b83bacbd"
integrity sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==
@@ -5227,7 +5172,7 @@ eslint-loader@3.0.3:
object-hash "^2.0.1"
schema-utils "^2.6.1"
-eslint-module-utils@^2.4.1, eslint-module-utils@^2.7.2:
+eslint-module-utils@^2.4.1:
version "2.7.3"
resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz#ad7e3a10552fdd0642e1e55292781bd6e34876ee"
integrity sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==
@@ -5260,25 +5205,6 @@ eslint-plugin-import@2.20.1:
read-pkg-up "^2.0.0"
resolve "^1.12.0"
-eslint-plugin-import@^2.18.2:
- version "2.25.4"
- resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.25.4.tgz#322f3f916a4e9e991ac7af32032c25ce313209f1"
- integrity sha512-/KJBASVFxpu0xg1kIBn9AUa8hQVnszpwgE7Ld0lKAlx7Ie87yzEzCgSkekt+le/YVhiaosO4Y14GDAOc41nfxA==
- dependencies:
- array-includes "^3.1.4"
- array.prototype.flat "^1.2.5"
- debug "^2.6.9"
- doctrine "^2.1.0"
- eslint-import-resolver-node "^0.3.6"
- eslint-module-utils "^2.7.2"
- has "^1.0.3"
- is-core-module "^2.8.0"
- is-glob "^4.0.3"
- minimatch "^3.0.4"
- object.values "^1.1.5"
- resolve "^1.20.0"
- tsconfig-paths "^3.12.0"
-
eslint-plugin-jsx-a11y@6.2.3:
version "6.2.3"
resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.2.3.tgz#b872a09d5de51af70a97db1eea7dc933043708aa"
@@ -5294,34 +5220,11 @@ eslint-plugin-jsx-a11y@6.2.3:
has "^1.0.3"
jsx-ast-utils "^2.2.1"
-eslint-plugin-jsx-a11y@^6.2.3:
- version "6.5.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.5.1.tgz#cdbf2df901040ca140b6ec14715c988889c2a6d8"
- integrity sha512-sVCFKX9fllURnXT2JwLN5Qgo24Ug5NF6dxhkmxsMEUZhXRcGg+X3e1JbJ84YePQKBl5E0ZjAH5Q4rkdcGY99+g==
- dependencies:
- "@babel/runtime" "^7.16.3"
- aria-query "^4.2.2"
- array-includes "^3.1.4"
- ast-types-flow "^0.0.7"
- axe-core "^4.3.5"
- axobject-query "^2.2.0"
- damerau-levenshtein "^1.0.7"
- emoji-regex "^9.2.2"
- has "^1.0.3"
- jsx-ast-utils "^3.2.1"
- language-tags "^1.0.5"
- minimatch "^3.0.4"
-
eslint-plugin-react-hooks@^1.6.1:
version "1.7.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-1.7.0.tgz#6210b6d5a37205f0b92858f895a4e827020a7d04"
integrity sha512-iXTCFcOmlWvw4+TOE8CLWj6yX1GwzT0Y6cUfHHZqWnSk144VmVIRcVGtUAzrLES7C798lmvnt02C7rxaOX1HNA==
-eslint-plugin-react-hooks@^2.1.2:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-2.5.1.tgz#4ef5930592588ce171abeb26f400c7fbcbc23cd0"
- integrity sha512-Y2c4b55R+6ZzwtTppKwSmK/Kar8AdLiC2f9NADCuxbcTgPPg41Gyqa6b9GppgXSvCtkRw43ZE86CT5sejKC6/g==
-
eslint-plugin-react@7.19.0:
version "7.19.0"
resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666"
@@ -5340,26 +5243,6 @@ eslint-plugin-react@7.19.0:
string.prototype.matchall "^4.0.2"
xregexp "^4.3.0"
-eslint-plugin-react@^7.16.0:
- version "7.28.0"
- resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.28.0.tgz#8f3ff450677571a659ce76efc6d80b6a525adbdf"
- integrity sha512-IOlFIRHzWfEQQKcAD4iyYDndHwTQiCMcJVJjxempf203jnNLUnW34AXLrV33+nEXoifJE2ZEGmcjKPL8957eSw==
- dependencies:
- array-includes "^3.1.4"
- array.prototype.flatmap "^1.2.5"
- doctrine "^2.1.0"
- estraverse "^5.3.0"
- jsx-ast-utils "^2.4.1 || ^3.0.0"
- minimatch "^3.0.4"
- object.entries "^1.1.5"
- object.fromentries "^2.0.5"
- object.hasown "^1.1.0"
- object.values "^1.1.5"
- prop-types "^15.7.2"
- resolve "^2.0.0-next.3"
- semver "^6.3.0"
- string.prototype.matchall "^4.0.6"
-
eslint-scope@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848"
@@ -5395,7 +5278,7 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e"
integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==
-eslint@^6.5.1, eslint@^6.6.0:
+eslint@^6.6.0:
version "6.8.0"
resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb"
integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==
@@ -5471,7 +5354,7 @@ estraverse@^4.1.1, estraverse@^4.2.0:
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d"
integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==
-estraverse@^5.1.0, estraverse@^5.2.0, estraverse@^5.3.0:
+estraverse@^5.1.0, estraverse@^5.2.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123"
integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==
@@ -7291,7 +7174,7 @@ is-color-stop@^1.0.0:
rgb-regex "^1.0.1"
rgba-regex "^1.0.0"
-is-core-module@^2.2.0, is-core-module@^2.5.0, is-core-module@^2.8.0, is-core-module@^2.8.1:
+is-core-module@^2.5.0, is-core-module@^2.8.1:
version "2.8.1"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.1.tgz#f59fdfca701d5879d0a6b100a40aa1560ce27211"
integrity sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==
@@ -7417,7 +7300,7 @@ is-glob@^3.1.0:
dependencies:
is-extglob "^2.1.0"
-is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1:
+is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
@@ -8396,14 +8279,6 @@ jsx-ast-utils@^2.2.1, jsx-ast-utils@^2.2.3:
array-includes "^3.1.1"
object.assign "^4.1.0"
-"jsx-ast-utils@^2.4.1 || ^3.0.0", jsx-ast-utils@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.2.1.tgz#720b97bfe7d901b927d87c3773637ae8ea48781b"
- integrity sha512-uP5vu8xfy2F9A6LGC22KO7e2/vGTS1MhP+18f++ZNlf0Ohaxbc9nIEwHAsejlJKyzfZzU5UIhe5ItYkitcZnZA==
- dependencies:
- array-includes "^3.1.3"
- object.assign "^4.1.2"
-
key-difference@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/key-difference/-/key-difference-1.0.0.tgz#7ede6f69bfff08010b5612885303b688a30008cc"
@@ -8453,18 +8328,6 @@ kleur@^3.0.3:
resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e"
integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==
-language-subtag-registry@~0.3.2:
- version "0.3.21"
- resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.21.tgz#04ac218bea46f04cb039084602c6da9e788dd45a"
- integrity sha512-L0IqwlIXjilBVVYKFT37X9Ih11Um5NEl9cbJIuU/SwP/zEEAbBPOnEeeuxVMf45ydWQRDQN3Nqc96OgbH1K+Pg==
-
-language-tags@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a"
- integrity sha1-0yHbxNowuovzAk4ED6XBRmH5GTo=
- dependencies:
- language-subtag-registry "~0.3.2"
-
last-call-webpack-plugin@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/last-call-webpack-plugin/-/last-call-webpack-plugin-3.0.0.tgz#9742df0e10e3cf46e5c0381c2de90d3a7a2d7555"
@@ -9650,7 +9513,7 @@ object.assign@^4.1.0, object.assign@^4.1.2:
has-symbols "^1.0.1"
object-keys "^1.1.1"
-object.entries@^1.1.0, object.entries@^1.1.1, object.entries@^1.1.2, object.entries@^1.1.5:
+object.entries@^1.1.0, object.entries@^1.1.1, object.entries@^1.1.2:
version "1.1.5"
resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.5.tgz#e1acdd17c4de2cd96d5a08487cfb9db84d881861"
integrity sha512-TyxmjUoZggd4OrrU1W66FMDG6CuqJxsFvymeyXI51+vQLN67zYfZseptRge703kKQdo4uccgAKebXFcRCzk4+g==
@@ -9659,7 +9522,7 @@ object.entries@^1.1.0, object.entries@^1.1.1, object.entries@^1.1.2, object.entr
define-properties "^1.1.3"
es-abstract "^1.19.1"
-object.fromentries@^2.0.2, object.fromentries@^2.0.3, object.fromentries@^2.0.5:
+object.fromentries@^2.0.2, object.fromentries@^2.0.3:
version "2.0.5"
resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.5.tgz#7b37b205109c21e741e605727fe8b0ad5fa08251"
integrity sha512-CAyG5mWQRRiBU57Re4FKoTBjXfDoNwdFVH2Y1tS9PqCsfUTymAohOkEMSG3aRNKmv4lV3O7p1et7c187q6bynw==
@@ -9677,14 +9540,6 @@ object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.0
define-properties "^1.1.3"
es-abstract "^1.19.1"
-object.hasown@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/object.hasown/-/object.hasown-1.1.0.tgz#7232ed266f34d197d15cac5880232f7a4790afe5"
- integrity sha512-MhjYRfj3GBlhSkDHo6QmvgjRLXQ2zndabdf3nX0yTyZK9rPfxb6uRpAac8HXNLy1GpqWtZ81Qh4v3uOls2sRAg==
- dependencies:
- define-properties "^1.1.3"
- es-abstract "^1.19.1"
-
object.omit@^2.0.0:
version "2.0.1"
resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
@@ -9700,7 +9555,7 @@ object.pick@^1.3.0:
dependencies:
isobject "^3.0.1"
-object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.2, object.values@^1.1.5:
+object.values@^1.1.0, object.values@^1.1.1, object.values@^1.1.2:
version "1.1.5"
resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.5.tgz#959f63e3ce9ef108720333082131e4a459b716ac"
integrity sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==
@@ -11797,14 +11652,6 @@ resolve@^1.1.10, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.1
path-parse "^1.0.7"
supports-preserve-symlinks-flag "^1.0.0"
-resolve@^2.0.0-next.3:
- version "2.0.0-next.3"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-2.0.0-next.3.tgz#d41016293d4a8586a39ca5d9b5f15cbea1f55e46"
- integrity sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==
- dependencies:
- is-core-module "^2.2.0"
- path-parse "^1.0.6"
-
restore-cursor@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf"
@@ -12742,7 +12589,7 @@ string-width@^3.0.0, string-width@^3.1.0:
is-fullwidth-code-point "^2.0.0"
strip-ansi "^5.1.0"
-string.prototype.matchall@^4.0.2, string.prototype.matchall@^4.0.6:
+string.prototype.matchall@^4.0.2:
version "4.0.6"
resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.6.tgz#5abb5dabc94c7b0ea2380f65ba610b3a544b15fa"
integrity sha512-6WgDX8HmQqvEd7J+G6VtAahhsQIssiZ8zl7zKh1VDMFyL3hRTJP4FTNA3RbIp2TOQ9AYNDcc7e3fH0Qbup+DBg==
@@ -13242,16 +13089,6 @@ ts-pnp@^1.1.6:
resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92"
integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw==
-tsconfig-paths@^3.12.0:
- version "3.12.0"
- resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.12.0.tgz#19769aca6ee8f6a1a341e38c8fa45dd9fb18899b"
- integrity sha512-e5adrnOYT6zqVnWqZu7i/BQ3BnhzvGbjEjejFXO20lKIKpwTaupkCPgEfv4GZK1IBciJUEhYs3J3p75FdaTFVg==
- dependencies:
- "@types/json5" "^0.0.29"
- json5 "^1.0.1"
- minimist "^1.2.0"
- strip-bom "^3.0.0"
-
tslib@^1.7.1, tslib@^1.8.1, tslib@^1.9.0:
version "1.14.1"
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"