From a65eff965ce3220c81810c5249d9a56f1bef67b5 Mon Sep 17 00:00:00 2001 From: Roger Floriano <31597636+petruki@users.noreply.github.com> Date: Wed, 9 Oct 2024 18:52:54 -0700 Subject: [PATCH] Added support to Deno v2 (#78) * Added support to Deno v2 * fixed test-matrix to check Deno version * fixed typo --- .github/workflows/master.yml | 47 +++++++++++++++------------- .github/workflows/staging.yml | 4 +-- deno.jsonc | 3 +- src/client.ts | 4 +-- src/lib/remote.ts | 15 ++++++--- src/lib/utils/snapshotAutoUpdater.ts | 2 +- src/switcher.ts | 6 ++-- test/deps.ts | 2 +- 8 files changed, 47 insertions(+), 36 deletions(-) diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index c441d7e..af07790 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -18,10 +18,10 @@ jobs: with: fetch-depth: 0 - - name: Setup Deno v1.46.3 - uses: denoland/setup-deno@v1 + - name: Setup Deno v2.x + uses: denoland/setup-deno@v2 with: - deno-version: v1.46.3 + deno-version: v2.x - name: Setup LCOV run: sudo apt install -y lcov @@ -44,24 +44,29 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - # Will be added in the future when Deno v2 is released - # test-matrix: - # name: Test Matrix - Deno ${{ matrix.deno-version }} on ${{ matrix.os }} - # strategy: - # fail-fast: false - # matrix: - # deno-version: [v1.4x.x] - # os: [ ubuntu-latest, windows-latest ] - # runs-on: ${{ matrix.os }} - # if: "! contains(toJSON(github.event.commits.*.message), '[skip ci]')" + test-matrix: + name: Test Matrix - Deno ${{ matrix.deno-version }} on ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + deno-version: [v1.46.3, v2.0.0] + os: [ ubuntu-latest, windows-latest ] + runs-on: ${{ matrix.os }} + if: "! contains(toJSON(github.event.commits.*.message), '[skip ci]')" + + steps: + - name: Git checkout + uses: actions/checkout@v4 - # steps: - # - name: Git checkout - # uses: actions/checkout@v4 + - name: Setup Deno ${{ matrix.deno-version }} + uses: denoland/setup-deno@v2 + with: + deno-version: ${{ matrix.deno-version }} - # - name: Setup Deno ${{ matrix.deno-version }} - # uses: denoland/setup-deno@v1 - # with: - # deno-version: ${{ matrix.deno-version }} + - name: Run tests (Deno v1) + if: "contains(matrix.deno-version, 'v1')" + run: deno task test-v1 - # - run: deno task test \ No newline at end of file + - name: Run tests (Deno v2) + if: "contains(matrix.deno-version, 'v2')" + run: deno task test \ No newline at end of file diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 746822e..33216d2 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -7,7 +7,7 @@ on: deno: description: 'Deno version' required: true - default: 'v1.46.x' + default: 'v2.x' os: description: 'Operating System (ubuntu-20.04, ubuntu-latest, windows-latest)' required: true @@ -29,7 +29,7 @@ jobs: fetch-depth: 0 - name: Setup Deno - uses: denoland/setup-deno@v1 + uses: denoland/setup-deno@v2 with: deno-version: ${{ github.event.inputs.deno }} diff --git a/deno.jsonc b/deno.jsonc index 9d2e90a..9460427 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -6,7 +6,8 @@ "cache-reload": "deno cache --reload --lock=deno.lock mod.ts", "fmt": "deno fmt mod.ts src/ --options-single-quote --options-line-width=120 --check", "fmt:fix": "deno fmt mod.ts src/ --options-single-quote --options-line-width=120", - "test": "deno test --allow-read --allow-net --allow-write --coverage=coverage", + "test": "deno test --allow-read --allow-net --allow-write --allow-import --coverage=coverage", + "test-v1": "deno test --allow-read --allow-net --allow-write --coverage=coverage", "lcov": "deno coverage coverage --lcov --output=coverage/report.lcov", "clean": "rm -rf ./npm ./coverage ./generated-snapshots", "cover": "deno task clean && deno task test && deno task lcov && genhtml -o coverage/html coverage/report.lcov", diff --git a/src/client.ts b/src/client.ts index c3de4d5..9bf543e 100644 --- a/src/client.ts +++ b/src/client.ts @@ -31,7 +31,7 @@ export class Client { private static _testEnabled = DEFAULT_TEST_MODE; private static _watching = false; private static _watcher: Deno.FsWatcher; - private static _watchDebounce = new Map(); + private static readonly _watchDebounce = new Map(); private static _snapshot?: Snapshot; private static _context: SwitcherContext; @@ -222,7 +222,7 @@ export class Client { success(); } catch (err) { - error(err); + error(err as Error); } } } diff --git a/src/lib/remote.ts b/src/lib/remote.ts index 2c4393d..b81069e 100644 --- a/src/lib/remote.ts +++ b/src/lib/remote.ts @@ -65,7 +65,8 @@ export const auth = async (context: SwitcherContext) => { throw new Error(`[auth] failed with status ${response.status}`); } catch (e) { - throw new AuthError(e.errno ? getConnectivityError(e.errno) : e.message); + const error = e as { errno?: string; message: string }; + throw new AuthError(error.errno ? getConnectivityError(error.errno) : error.message); } }; @@ -101,8 +102,9 @@ export const checkCriteria = async ( throw new Error(`[checkCriteria] failed with status ${response.status}`); } catch (e) { + const error = e as { errno?: string; message: string }; throw new CriteriaError( - e.errno ? getConnectivityError(e.errno) : e.message, + error.errno ? getConnectivityError(error.errno) : error.message, ); } }; @@ -131,8 +133,9 @@ export const checkSwitchers = async ( throw e; } + const error = e as { errno?: string; message: string }; throw new CriteriaError( - e.errno ? getConnectivityError(e.errno) : e.message, + error.errno ? getConnectivityError(error.errno) : error.message, ); } }; @@ -153,8 +156,9 @@ export const checkSnapshotVersion = async ( throw new Error(`[checkSnapshotVersion] failed with status ${response.status}`); } catch (e) { + const error = e as { errno?: string; message: string }; throw new SnapshotServiceError( - e.errno ? getConnectivityError(e.errno) : e.message, + error.errno ? getConnectivityError(error.errno) : error.message, ); } }; @@ -193,8 +197,9 @@ export const resolveSnapshot = async ( throw new Error(`[resolveSnapshot] failed with status ${response.status}`); } catch (e) { + const error = e as { errno?: string; message: string }; throw new SnapshotServiceError( - e.errno ? getConnectivityError(e.errno) : e.message, + error.errno ? getConnectivityError(error.errno) : error.message, ); } }; diff --git a/src/lib/utils/snapshotAutoUpdater.ts b/src/lib/utils/snapshotAutoUpdater.ts index 39cc553..19edf75 100644 --- a/src/lib/utils/snapshotAutoUpdater.ts +++ b/src/lib/utils/snapshotAutoUpdater.ts @@ -16,7 +16,7 @@ export default class SnapshotAutoUpdater { const updated = await checkSnapshot(); success(updated); } catch (err) { - reject(err); + reject(err as Error); } }, interval * 1000); } diff --git a/src/switcher.ts b/src/switcher.ts index 6d6d1a6..1b6dd6c 100644 --- a/src/switcher.ts +++ b/src/switcher.ts @@ -89,7 +89,7 @@ export class Switcher { result = await this._executeRemoteCriteria(); } } catch (err) { - this._notifyError(err); + this._notifyError(err as Error); if (Client.options.silentMode) { Auth.updateSilentToken(); @@ -220,7 +220,7 @@ export class Switcher { this._showDetail, ); } catch (err) { - responseCriteria = this.getDefaultResultOrThrow(err); + responseCriteria = this.getDefaultResultOrThrow(err as Error); } if (Client.options.logger && this._key) { @@ -284,7 +284,7 @@ export class Switcher { util.get(this._input, []), ); } catch (err) { - response = this.getDefaultResultOrThrow(err); + response = this.getDefaultResultOrThrow(err as Error); } if (Client.options.logger) { diff --git a/test/deps.ts b/test/deps.ts index abb517c..012cd05 100644 --- a/test/deps.ts +++ b/test/deps.ts @@ -7,7 +7,7 @@ export { assertNotEquals, assertArrayIncludes } from 'jsr:@std/assert@1.0.6';; -export { assertSpyCalls, spy } from 'jsr:@std/testing@1.0.1/mock'; +export { assertSpyCalls, spy } from 'jsr:@std/testing@1.0.3/mock'; export { describe, it,