| ... | @@ -33,13 +33,11 @@ function versionCore(version: string): string { | ... | @@ -33,13 +33,11 @@ function versionCore(version: string): string { |
| 33 | * The skew a user can act on: the connected server runs an older T3 Code than | 33 | * The skew a user can act on: the connected server runs an older T3 Code than |
| 34 | * this client, so the server is the side that needs updating. | 34 | * this client, so the server is the side that needs updating. |
| 35 | * | 35 | * |
| 36 | * Versions compare as semver on their core `major.minor.patch` only. Nightlies | 36 | * Two nightly builds compare their full versions, including the date and run. |
| 37 | * are `<core>-nightly.<date>.<run>` builds of the release they precede, so a | 37 | * Other combinations compare their core `major.minor.patch` only, so a stable |
| 38 | * stable client on a nightly server (or the reverse, at the same core) shares a | 38 | * build and a nightly build with the same core do not cause an update warning. |
| 39 | * wire contract and is not skew. A server *ahead* of the client is not skew | 39 | * A server ahead of the client does not need an update. Versions that do not |
| 40 | * either: the client is the stale side, and every consumer of this result tells | 40 | * parse as semver fall back to plain string inequality. |
| 41 | * the user to update their server. Versions that do not parse as semver fall | | |
| 42 | * back to plain string inequality. | | |
| 43 | */ | 41 | */ |
| 44 | export function resolveVersionMismatch( | 42 | export function resolveVersionMismatch( |
| 45 | serverVersion: string | null | undefined, | 43 | serverVersion: string | null | undefined, |
| ... | @@ -52,9 +50,15 @@ export function resolveVersionMismatch( | ... | @@ -52,9 +50,15 @@ export function resolveVersionMismatch( |
| 52 | | 50 | |
| 53 | const clientCore = versionCore(normalizedClientVersion); | 51 | const clientCore = versionCore(normalizedClientVersion); |
| 54 | const serverCore = versionCore(normalizedServerVersion); | 52 | const serverCore = versionCore(normalizedServerVersion); |
| | 53 | const compareNightlyBuilds = |
| | 54 | parseSemver(normalizedClientVersion)?.prerelease[0] === "nightly" && |
| | 55 | parseSemver(normalizedServerVersion)?.prerelease[0] === "nightly"; |
| 55 | const serverIsBehind = | 56 | const serverIsBehind = |
| 56 | parseSemver(clientCore) && parseSemver(serverCore) | 57 | parseSemver(clientCore) && parseSemver(serverCore) |
| 57 | ? compareSemverVersions(serverCore, clientCore) < 0 | 58 | ? compareSemverVersions( |
| | 59 | compareNightlyBuilds ? normalizedServerVersion : serverCore, |
| | 60 | compareNightlyBuilds ? normalizedClientVersion : clientCore, |
| | 61 | ) < 0 |
| 58 | : normalizedServerVersion !== normalizedClientVersion; | 62 | : normalizedServerVersion !== normalizedClientVersion; |
| 59 | if (!serverIsBehind) { | 63 | if (!serverIsBehind) { |
| 60 | return null; | 64 | return null; |