tesla-fleet-api 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +284 -1
- package/dist/_virtual/_rolldown/runtime.cjs +32 -0
- package/dist/_virtual/_rolldown/runtime.mjs +12 -0
- package/dist/bluetooth/adapters/shared.cjs +38 -0
- package/dist/bluetooth/adapters/shared.mjs +36 -0
- package/dist/bluetooth/async.cjs +121 -0
- package/dist/bluetooth/async.d.cts +10 -0
- package/dist/bluetooth/async.d.mts +10 -0
- package/dist/bluetooth/async.mjs +116 -0
- package/dist/bluetooth/broadcast.cjs +153 -0
- package/dist/bluetooth/broadcast.d.cts +59 -0
- package/dist/bluetooth/broadcast.d.mts +59 -0
- package/dist/bluetooth/broadcast.mjs +151 -0
- package/dist/bluetooth/constants.cjs +99 -0
- package/dist/bluetooth/constants.d.cts +70 -0
- package/dist/bluetooth/constants.d.mts +70 -0
- package/dist/bluetooth/constants.mjs +72 -0
- package/dist/bluetooth/esphome.cjs +292 -0
- package/dist/bluetooth/esphome.d.cts +83 -0
- package/dist/bluetooth/esphome.d.mts +83 -0
- package/dist/bluetooth/esphome.mjs +291 -0
- package/dist/bluetooth/framing.cjs +125 -0
- package/dist/bluetooth/framing.d.cts +45 -0
- package/dist/bluetooth/framing.d.mts +45 -0
- package/dist/bluetooth/framing.mjs +122 -0
- package/dist/bluetooth/homey.cjs +155 -0
- package/dist/bluetooth/homey.d.cts +75 -0
- package/dist/bluetooth/homey.d.mts +75 -0
- package/dist/bluetooth/homey.mjs +150 -0
- package/dist/bluetooth/names.cjs +24 -0
- package/dist/bluetooth/names.d.cts +10 -0
- package/dist/bluetooth/names.d.mts +10 -0
- package/dist/bluetooth/names.mjs +20 -0
- package/dist/bluetooth/noble.cjs +178 -0
- package/dist/bluetooth/noble.d.cts +58 -0
- package/dist/bluetooth/noble.d.mts +58 -0
- package/dist/bluetooth/noble.mjs +177 -0
- package/dist/bluetooth/streamglue.cjs +157 -0
- package/dist/bluetooth/streamglue.d.cts +37 -0
- package/dist/bluetooth/streamglue.d.mts +37 -0
- package/dist/bluetooth/streamglue.mjs +154 -0
- package/dist/bluetooth/teslabluetooth.cjs +67 -0
- package/dist/bluetooth/teslabluetooth.d.cts +41 -0
- package/dist/bluetooth/teslabluetooth.d.mts +41 -0
- package/dist/bluetooth/teslabluetooth.mjs +66 -0
- package/dist/bluetooth/transport.cjs +10 -0
- package/dist/bluetooth/transport.d.cts +95 -0
- package/dist/bluetooth/transport.d.mts +95 -0
- package/dist/bluetooth/transport.mjs +10 -0
- package/dist/bluetooth/vehiclebluetooth.cjs +1272 -0
- package/dist/bluetooth/vehiclebluetooth.d.cts +495 -0
- package/dist/bluetooth/vehiclebluetooth.d.mts +495 -0
- package/dist/bluetooth/vehiclebluetooth.mjs +1270 -0
- package/dist/bluetooth/verify.cjs +93 -0
- package/dist/bluetooth/verify.d.cts +35 -0
- package/dist/bluetooth/verify.d.mts +35 -0
- package/dist/bluetooth/verify.mjs +91 -0
- package/dist/bluetooth.cjs +53 -0
- package/dist/bluetooth.d.cts +10 -0
- package/dist/bluetooth.d.mts +10 -0
- package/dist/bluetooth.mjs +9 -0
- package/dist/charging.cjs +53 -0
- package/dist/charging.d.cts +31 -0
- package/dist/charging.d.mts +30 -0
- package/dist/charging.mjs +53 -0
- package/dist/commands.cjs +1797 -0
- package/dist/commands.d.cts +881 -0
- package/dist/commands.d.mts +881 -0
- package/dist/commands.mjs +1791 -0
- package/dist/const.cjs +322 -0
- package/dist/const.d.cts +308 -0
- package/dist/const.d.mts +308 -0
- package/dist/const.mjs +282 -0
- package/dist/energy.cjs +142 -0
- package/dist/energy.d.cts +101 -0
- package/dist/energy.d.mts +100 -0
- package/dist/energy.mjs +142 -0
- package/dist/energyisland.cjs +38 -0
- package/dist/energyisland.mjs +37 -0
- package/dist/energyparsers.cjs +118 -0
- package/dist/energyparsers.d.cts +39 -0
- package/dist/energyparsers.d.mts +39 -0
- package/dist/energyparsers.mjs +116 -0
- package/dist/energyspecific.cjs +457 -0
- package/dist/energyspecific.d.cts +258 -0
- package/dist/energyspecific.d.mts +258 -0
- package/dist/energyspecific.mjs +451 -0
- package/dist/exceptions.cjs +1488 -0
- package/dist/exceptions.d.cts +1143 -0
- package/dist/exceptions.d.mts +1143 -0
- package/dist/exceptions.mjs +1325 -0
- package/dist/funnel.cjs +297 -0
- package/dist/funnel.d.cts +118 -0
- package/dist/funnel.d.mts +118 -0
- package/dist/funnel.mjs +292 -0
- package/dist/index.cjs +287 -0
- package/dist/index.d.cts +28 -0
- package/dist/index.d.mts +28 -0
- package/dist/index.mjs +27 -0
- package/dist/log.cjs +75 -0
- package/dist/log.d.cts +4 -0
- package/dist/log.d.mts +4 -0
- package/dist/log.mjs +71 -0
- package/dist/oauth.cjs +143 -0
- package/dist/oauth.d.cts +69 -0
- package/dist/oauth.d.mts +69 -0
- package/dist/oauth.mjs +143 -0
- package/dist/partner.cjs +32 -0
- package/dist/partner.d.cts +24 -0
- package/dist/partner.d.mts +23 -0
- package/dist/partner.mjs +32 -0
- package/dist/powerwall/client.cjs +818 -0
- package/dist/powerwall/client.d.cts +297 -0
- package/dist/powerwall/client.d.mts +297 -0
- package/dist/powerwall/client.mjs +807 -0
- package/dist/powerwall/components.cjs +188 -0
- package/dist/powerwall/components.d.cts +45 -0
- package/dist/powerwall/components.d.mts +45 -0
- package/dist/powerwall/components.mjs +182 -0
- package/dist/powerwall/energysite.cjs +216 -0
- package/dist/powerwall/energysite.d.cts +104 -0
- package/dist/powerwall/energysite.d.mts +104 -0
- package/dist/powerwall/energysite.mjs +214 -0
- package/dist/powerwall/exceptions.cjs +59 -0
- package/dist/powerwall/exceptions.d.cts +38 -0
- package/dist/powerwall/exceptions.d.mts +38 -0
- package/dist/powerwall/exceptions.mjs +51 -0
- package/dist/powerwall/gateway.cjs +102 -0
- package/dist/powerwall/gateway.d.cts +57 -0
- package/dist/powerwall/gateway.d.mts +57 -0
- package/dist/powerwall/gateway.mjs +101 -0
- package/dist/powerwall/merge.cjs +163 -0
- package/dist/powerwall/merge.d.cts +63 -0
- package/dist/powerwall/merge.d.mts +63 -0
- package/dist/powerwall/merge.mjs +159 -0
- package/dist/powerwall/models.d.cts +95 -0
- package/dist/powerwall/models.d.mts +95 -0
- package/dist/powerwall/queries.cjs +17 -0
- package/dist/powerwall/queries.mjs +10 -0
- package/dist/powerwall/transport.cjs +232 -0
- package/dist/powerwall/transport.mjs +227 -0
- package/dist/powerwall.cjs +47 -0
- package/dist/powerwall.d.cts +9 -0
- package/dist/powerwall.d.mts +9 -0
- package/dist/powerwall.mjs +8 -0
- package/dist/router/base.cjs +203 -0
- package/dist/router/base.d.cts +112 -0
- package/dist/router/base.d.mts +112 -0
- package/dist/router/base.mjs +200 -0
- package/dist/router/energysite.cjs +65 -0
- package/dist/router/energysite.d.cts +47 -0
- package/dist/router/energysite.d.mts +47 -0
- package/dist/router/energysite.mjs +60 -0
- package/dist/router.cjs +13 -0
- package/dist/router.d.cts +3 -0
- package/dist/router.d.mts +3 -0
- package/dist/router.mjs +3 -0
- package/dist/signing/crypto.cjs +59 -0
- package/dist/signing/crypto.mjs +52 -0
- package/dist/signing/energy.cjs +123 -0
- package/dist/signing/energy.d.cts +45 -0
- package/dist/signing/energy.d.mts +45 -0
- package/dist/signing/energy.mjs +120 -0
- package/dist/signing/jws.cjs +229 -0
- package/dist/signing/jws.d.cts +45 -0
- package/dist/signing/jws.d.mts +45 -0
- package/dist/signing/jws.mjs +211 -0
- package/dist/signing/keys.cjs +191 -0
- package/dist/signing/keys.d.cts +21 -0
- package/dist/signing/keys.d.mts +21 -0
- package/dist/signing/keys.mjs +182 -0
- package/dist/signing/session.cjs +186 -0
- package/dist/signing/session.d.cts +106 -0
- package/dist/signing/session.d.mts +106 -0
- package/dist/signing/session.mjs +184 -0
- package/dist/tariff.cjs +319 -0
- package/dist/tariff.d.cts +40 -0
- package/dist/tariff.d.mts +40 -0
- package/dist/tariff.mjs +317 -0
- package/dist/teslafleetapi.cjs +326 -0
- package/dist/teslafleetapi.d.cts +160 -0
- package/dist/teslafleetapi.d.mts +160 -0
- package/dist/teslafleetapi.mjs +326 -0
- package/dist/teslemetry.cjs +183 -0
- package/dist/teslemetry.d.cts +113 -0
- package/dist/teslemetry.d.mts +113 -0
- package/dist/teslemetry.mjs +181 -0
- package/dist/teslemetryenergy.cjs +287 -0
- package/dist/teslemetryenergy.d.cts +154 -0
- package/dist/teslemetryenergy.d.mts +154 -0
- package/dist/teslemetryenergy.mjs +282 -0
- package/dist/teslemetryvehicle.cjs +407 -0
- package/dist/teslemetryvehicle.d.cts +238 -0
- package/dist/teslemetryvehicle.d.mts +238 -0
- package/dist/teslemetryvehicle.mjs +405 -0
- package/dist/tessie.cjs +71 -0
- package/dist/tessie.d.cts +69 -0
- package/dist/tessie.d.mts +69 -0
- package/dist/tessie.mjs +71 -0
- package/dist/tessievehicle.cjs +514 -0
- package/dist/tessievehicle.d.cts +333 -0
- package/dist/tessievehicle.d.mts +333 -0
- package/dist/tessievehicle.mjs +513 -0
- package/dist/types/commands.d.cts +28 -0
- package/dist/types/commands.d.mts +28 -0
- package/dist/types/live_status.d.cts +30 -0
- package/dist/types/live_status.d.mts +30 -0
- package/dist/types/products.d.cts +58 -0
- package/dist/types/products.d.mts +58 -0
- package/dist/types/responses.d.cts +13 -0
- package/dist/types/responses.d.mts +13 -0
- package/dist/types/site_info.d.cts +154 -0
- package/dist/types/site_info.d.mts +154 -0
- package/dist/types/vehicle.d.cts +33 -0
- package/dist/types/vehicle.d.mts +33 -0
- package/dist/types/vehicle_data.d.cts +278 -0
- package/dist/types/vehicle_data.d.mts +278 -0
- package/dist/types.cjs +0 -0
- package/dist/types.d.cts +9 -0
- package/dist/types.d.mts +9 -0
- package/dist/types.mjs +1 -0
- package/dist/user.cjs +28 -0
- package/dist/user.d.cts +17 -0
- package/dist/user.d.mts +16 -0
- package/dist/user.mjs +28 -0
- package/dist/util.cjs +41 -0
- package/dist/util.d.cts +18 -0
- package/dist/util.d.mts +18 -0
- package/dist/util.mjs +40 -0
- package/dist/vehicle.cjs +847 -0
- package/dist/vehicle.d.cts +566 -0
- package/dist/vehicle.d.mts +565 -0
- package/dist/vehicle.mjs +847 -0
- package/dist/vehiclesigned.cjs +35 -0
- package/dist/vehiclesigned.d.cts +23 -0
- package/dist/vehiclesigned.d.mts +22 -0
- package/dist/vehiclesigned.mjs +35 -0
- package/dist/vehiclespecific.cjs +715 -0
- package/dist/vehiclespecific.d.cts +497 -0
- package/dist/vehiclespecific.d.mts +496 -0
- package/dist/vehiclespecific.mjs +715 -0
- package/package.json +178 -38
- package/dist/charging.d.ts +0 -30
- package/dist/charging.js +0 -51
- package/dist/charging.js.map +0 -1
- package/dist/commands.d.ts +0 -352
- package/dist/commands.js +0 -875
- package/dist/commands.js.map +0 -1
- package/dist/energy.d.ts +0 -94
- package/dist/energy.js +0 -125
- package/dist/energy.js.map +0 -1
- package/dist/energyspecific.d.ts +0 -77
- package/dist/energyspecific.js +0 -97
- package/dist/energyspecific.js.map +0 -1
- package/dist/helpers.d.ts +0 -2
- package/dist/helpers.js +0 -10
- package/dist/helpers.js.map +0 -1
- package/dist/index.d.ts +0 -15
- package/dist/index.js +0 -15
- package/dist/index.js.map +0 -1
- package/dist/partner.d.ts +0 -23
- package/dist/partner.js +0 -31
- package/dist/partner.js.map +0 -1
- package/dist/signing/crypto.d.ts +0 -10
- package/dist/signing/crypto.js +0 -26
- package/dist/signing/crypto.js.map +0 -1
- package/dist/signing/errors.d.ts +0 -29
- package/dist/signing/errors.js +0 -40
- package/dist/signing/errors.js.map +0 -1
- package/dist/signing/session.d.ts +0 -69
- package/dist/signing/session.js +0 -102
- package/dist/signing/session.js.map +0 -1
- package/dist/tariff.d.ts +0 -29
- package/dist/tariff.js +0 -302
- package/dist/tariff.js.map +0 -1
- package/dist/teslafleetapi.d.ts +0 -58
- package/dist/teslafleetapi.js +0 -120
- package/dist/teslafleetapi.js.map +0 -1
- package/dist/teslemetry.d.ts +0 -29
- package/dist/teslemetry.js +0 -39
- package/dist/teslemetry.js.map +0 -1
- package/dist/tessie.d.ts +0 -23
- package/dist/tessie.js +0 -28
- package/dist/tessie.js.map +0 -1
- package/dist/types/commands.d.ts +0 -44
- package/dist/types/commands.js +0 -11
- package/dist/types/commands.js.map +0 -1
- package/dist/types/live_status.d.ts +0 -26
- package/dist/types/live_status.js +0 -2
- package/dist/types/live_status.js.map +0 -1
- package/dist/types/products.d.ts +0 -54
- package/dist/types/products.js +0 -2
- package/dist/types/products.js.map +0 -1
- package/dist/types/responses.d.ts +0 -5
- package/dist/types/responses.js +0 -2
- package/dist/types/responses.js.map +0 -1
- package/dist/types/site_info.d.ts +0 -150
- package/dist/types/site_info.js +0 -2
- package/dist/types/site_info.js.map +0 -1
- package/dist/types/vehicle.d.ts +0 -23
- package/dist/types/vehicle.js +0 -10
- package/dist/types/vehicle.js.map +0 -1
- package/dist/types/vehicle_data.d.ts +0 -274
- package/dist/types/vehicle_data.js +0 -2
- package/dist/types/vehicle_data.js.map +0 -1
- package/dist/user.d.ts +0 -16
- package/dist/user.js +0 -26
- package/dist/user.js.map +0 -1
- package/dist/vehicle.d.ts +0 -548
- package/dist/vehicle.js +0 -774
- package/dist/vehicle.js.map +0 -1
- package/dist/vehiclesigned.d.ts +0 -13
- package/dist/vehiclesigned.js +0 -19
- package/dist/vehiclesigned.js.map +0 -1
- package/dist/vehiclespecific.d.ts +0 -432
- package/dist/vehiclespecific.js +0 -601
- package/dist/vehiclespecific.js.map +0 -1
- package/src/charging.ts +0 -66
- package/src/commands.ts +0 -1134
- package/src/energy.ts +0 -217
- package/src/energyspecific.ts +0 -116
- package/src/helpers.ts +0 -11
- package/src/index.ts +0 -21
- package/src/partner.ts +0 -37
- package/src/signing/crypto.ts +0 -29
- package/src/signing/errors.ts +0 -50
- package/src/signing/session.ts +0 -132
- package/src/tariff.ts +0 -375
- package/src/teslafleetapi.ts +0 -182
- package/src/teslemetry.ts +0 -54
- package/src/tessie.ts +0 -42
- package/src/types/commands.ts +0 -62
- package/src/types/live_status.ts +0 -27
- package/src/types/products.ts +0 -61
- package/src/types/responses.ts +0 -1
- package/src/types/site_info.ts +0 -159
- package/src/types/vehicle.ts +0 -33
- package/src/types/vehicle_data.ts +0 -286
- package/src/user.ts +0 -35
- package/src/vehicle.ts +0 -886
- package/src/vehiclesigned.ts +0 -20
- package/src/vehiclespecific.ts +0 -818
package/dist/util.cjs
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// src/util.ts
|
|
2
|
+
/** Parse a dotted numeric firmware string, or `null` if it doesn't parse. */
|
|
3
|
+
function parseFirmware(version) {
|
|
4
|
+
const parts = version.split(".");
|
|
5
|
+
return parts.every((part) => /^\d+$/.test(part)) ? parts.map(Number) : null;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Compare two Tesla firmware versions.
|
|
9
|
+
*
|
|
10
|
+
* Tesla firmware versions are dotted, numeric, and week-based (e.g. `2025.14.3`), so comparing
|
|
11
|
+
* them as plain strings misorders them: `"2025.10" < "2025.9"` as strings, even though `2025.10`
|
|
12
|
+
* is the newer release. This compares the dotted numeric components pairwise instead.
|
|
13
|
+
*
|
|
14
|
+
* Returns `1` if `a` is ahead of `b`, `-1` if behind, and `0` if equal. Missing trailing
|
|
15
|
+
* components count as zero, so `"2024.26"` equals `"2024.26.0"` and is behind `"2024.26.25"`. A
|
|
16
|
+
* string that doesn't parse as dotted integers (e.g. `"Unknown"`) sorts behind any parseable
|
|
17
|
+
* version, and equal to another unparseable string.
|
|
18
|
+
*/
|
|
19
|
+
function firmwareCompare(a, b) {
|
|
20
|
+
const aParts = parseFirmware(a);
|
|
21
|
+
const bParts = parseFirmware(b);
|
|
22
|
+
if (aParts === null || bParts === null) {
|
|
23
|
+
if (aParts === bParts) return 0;
|
|
24
|
+
return aParts === null ? -1 : 1;
|
|
25
|
+
}
|
|
26
|
+
const length = Math.max(aParts.length, bParts.length);
|
|
27
|
+
for (let i = 0; i < length; i++) {
|
|
28
|
+
const diff = (aParts[i] ?? 0) - (bParts[i] ?? 0);
|
|
29
|
+
if (diff !== 0) return diff > 0 ? 1 : -1;
|
|
30
|
+
}
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Whether a Tesla firmware version is at least `minimum`. See {@link firmwareCompare} for the
|
|
35
|
+
* comparison semantics, including partial versions and unparseable strings such as `"Unknown"`.
|
|
36
|
+
*/
|
|
37
|
+
function firmwareAtLeast(firmware, minimum) {
|
|
38
|
+
return firmwareCompare(firmware, minimum) >= 0;
|
|
39
|
+
}
|
|
40
|
+
exports.firmwareAtLeast = firmwareAtLeast;
|
|
41
|
+
exports.firmwareCompare = firmwareCompare;
|
package/dist/util.d.cts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compare two Tesla firmware versions.
|
|
3
|
+
*
|
|
4
|
+
* Tesla firmware versions are dotted, numeric, and week-based (e.g. `2025.14.3`), so comparing
|
|
5
|
+
* them as plain strings misorders them: `"2025.10" < "2025.9"` as strings, even though `2025.10`
|
|
6
|
+
* is the newer release. This compares the dotted numeric components pairwise instead.
|
|
7
|
+
*
|
|
8
|
+
* Returns `1` if `a` is ahead of `b`, `-1` if behind, and `0` if equal. Missing trailing
|
|
9
|
+
* components count as zero, so `"2024.26"` equals `"2024.26.0"` and is behind `"2024.26.25"`. A
|
|
10
|
+
* string that doesn't parse as dotted integers (e.g. `"Unknown"`) sorts behind any parseable
|
|
11
|
+
* version, and equal to another unparseable string.
|
|
12
|
+
*/
|
|
13
|
+
export declare function firmwareCompare(a: string, b: string): -1 | 0 | 1;
|
|
14
|
+
/**
|
|
15
|
+
* Whether a Tesla firmware version is at least `minimum`. See {@link firmwareCompare} for the
|
|
16
|
+
* comparison semantics, including partial versions and unparseable strings such as `"Unknown"`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function firmwareAtLeast(firmware: string, minimum: string): boolean;
|
package/dist/util.d.mts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Compare two Tesla firmware versions.
|
|
3
|
+
*
|
|
4
|
+
* Tesla firmware versions are dotted, numeric, and week-based (e.g. `2025.14.3`), so comparing
|
|
5
|
+
* them as plain strings misorders them: `"2025.10" < "2025.9"` as strings, even though `2025.10`
|
|
6
|
+
* is the newer release. This compares the dotted numeric components pairwise instead.
|
|
7
|
+
*
|
|
8
|
+
* Returns `1` if `a` is ahead of `b`, `-1` if behind, and `0` if equal. Missing trailing
|
|
9
|
+
* components count as zero, so `"2024.26"` equals `"2024.26.0"` and is behind `"2024.26.25"`. A
|
|
10
|
+
* string that doesn't parse as dotted integers (e.g. `"Unknown"`) sorts behind any parseable
|
|
11
|
+
* version, and equal to another unparseable string.
|
|
12
|
+
*/
|
|
13
|
+
export declare function firmwareCompare(a: string, b: string): -1 | 0 | 1;
|
|
14
|
+
/**
|
|
15
|
+
* Whether a Tesla firmware version is at least `minimum`. See {@link firmwareCompare} for the
|
|
16
|
+
* comparison semantics, including partial versions and unparseable strings such as `"Unknown"`.
|
|
17
|
+
*/
|
|
18
|
+
export declare function firmwareAtLeast(firmware: string, minimum: string): boolean;
|
package/dist/util.mjs
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// src/util.ts
|
|
2
|
+
/** Parse a dotted numeric firmware string, or `null` if it doesn't parse. */
|
|
3
|
+
function parseFirmware(version) {
|
|
4
|
+
const parts = version.split(".");
|
|
5
|
+
return parts.every((part) => /^\d+$/.test(part)) ? parts.map(Number) : null;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Compare two Tesla firmware versions.
|
|
9
|
+
*
|
|
10
|
+
* Tesla firmware versions are dotted, numeric, and week-based (e.g. `2025.14.3`), so comparing
|
|
11
|
+
* them as plain strings misorders them: `"2025.10" < "2025.9"` as strings, even though `2025.10`
|
|
12
|
+
* is the newer release. This compares the dotted numeric components pairwise instead.
|
|
13
|
+
*
|
|
14
|
+
* Returns `1` if `a` is ahead of `b`, `-1` if behind, and `0` if equal. Missing trailing
|
|
15
|
+
* components count as zero, so `"2024.26"` equals `"2024.26.0"` and is behind `"2024.26.25"`. A
|
|
16
|
+
* string that doesn't parse as dotted integers (e.g. `"Unknown"`) sorts behind any parseable
|
|
17
|
+
* version, and equal to another unparseable string.
|
|
18
|
+
*/
|
|
19
|
+
function firmwareCompare(a, b) {
|
|
20
|
+
const aParts = parseFirmware(a);
|
|
21
|
+
const bParts = parseFirmware(b);
|
|
22
|
+
if (aParts === null || bParts === null) {
|
|
23
|
+
if (aParts === bParts) return 0;
|
|
24
|
+
return aParts === null ? -1 : 1;
|
|
25
|
+
}
|
|
26
|
+
const length = Math.max(aParts.length, bParts.length);
|
|
27
|
+
for (let i = 0; i < length; i++) {
|
|
28
|
+
const diff = (aParts[i] ?? 0) - (bParts[i] ?? 0);
|
|
29
|
+
if (diff !== 0) return diff > 0 ? 1 : -1;
|
|
30
|
+
}
|
|
31
|
+
return 0;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Whether a Tesla firmware version is at least `minimum`. See {@link firmwareCompare} for the
|
|
35
|
+
* comparison semantics, including partial versions and unparseable strings such as `"Unknown"`.
|
|
36
|
+
*/
|
|
37
|
+
function firmwareAtLeast(firmware, minimum) {
|
|
38
|
+
return firmwareCompare(firmware, minimum) >= 0;
|
|
39
|
+
}
|
|
40
|
+
export { firmwareAtLeast, firmwareCompare };
|