Просмотр исходного кода

fix(auto-update): support custom prerelease channels

Alvin Unreal 2 месяцев назад
Родитель
Сommit
3d6db82378

+ 33 - 0
src/hooks/auto-update-checker/checker.test.ts

@@ -330,6 +330,39 @@ describe('auto-update-checker/checker', () => {
       globalThis.fetch = originalFetch;
     });
 
+    test('supports custom prerelease dist-tag channel names', async () => {
+      const originalFetch = globalThis.fetch;
+      globalThis.fetch = mock(async () =>
+        Response.json({
+          'dist-tags': {
+            latest: '1.0.0',
+            nightly: '1.0.0-nightly.2',
+          },
+          versions: {
+            '1.0.0-nightly.1': {},
+            '1.0.0-nightly.2': {},
+          },
+        }),
+      ) as never;
+
+      const { getLatestCompatibleVersion } = await import(
+        `./checker?test=${importCounter++}`
+      );
+
+      const result = await getLatestCompatibleVersion(
+        '1.0.0-nightly.1',
+        'nightly',
+      );
+
+      expect(result).toEqual({
+        latestVersion: '1.0.0-nightly.2',
+        latestMajorVersion: null,
+        blockedByMajor: false,
+      });
+
+      globalThis.fetch = originalFetch;
+    });
+
     test('fallback dist-tags never return lower-major versions as compatible', async () => {
       const originalFetch = globalThis.fetch;
       globalThis.fetch = mock(async (url: string) => {

+ 1 - 1
src/hooks/auto-update-checker/checker.ts

@@ -116,7 +116,7 @@ function comparePrerelease(a: string, b: string): number {
 function getPrereleaseChannel(version: ParsedVersion): string | null {
   if (!version.prerelease) return null;
 
-  return version.prerelease.match(/^(alpha|beta|rc|canary|next)/)?.[1] ?? null;
+  return version.prerelease.split('.')[0] ?? null;
 }
 
 function isVersionInChannel(version: string, channel: string): boolean {