From 132c7f4c9448df889b35b0a2343424667c5cebd6 Mon Sep 17 00:00:00 2001 From: petruki <31597636+petruki@users.noreply.github.com> Date: Mon, 7 Jul 2025 19:17:47 -0700 Subject: [PATCH] Bump switcher-client-deno@2.3.0, Deno runtime to 2.4.0 --- .devcontainer/Dockerfile | 2 +- .github/workflows/master.yml | 7 +-- .github/workflows/re-release.yml | 6 +- .github/workflows/release.yml | 6 +- .gitignore | 3 +- Dockerfile | 2 +- deno.jsonc | 2 +- deno.lock | 77 +++++++++++++++++++++-- sonar-project.properties | 2 +- src/api-docs/swagger-info.ts | 2 +- src/deps.ts | 4 +- src/external/switcher-client.ts | 6 +- src/routes/feature.ts | 7 ++- src/services/feature.ts | 6 +- tests/deps.ts | 4 +- tests/services/feature.integrated.test.ts | 4 +- tests/services/feature.test.ts | 4 +- 17 files changed, 102 insertions(+), 42 deletions(-) diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index b409558..2e9aece 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM denoland/deno:2.3.5 +FROM denoland/deno:2.4.0 # Install tools RUN apt-get update && \ diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 5697b87..e81c8dd 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -18,10 +18,10 @@ jobs: with: fetch-depth: 0 - - name: Setup Deno v2.3.5 - uses: denoland/setup-deno@v1 + - name: Setup Deno v2.4.0 + uses: denoland/setup-deno@v2 with: - deno-version: v2.3.5 + deno-version: v2.4.0 - name: Setup LCOV run: sudo apt install -y lcov @@ -38,7 +38,6 @@ jobs: - name: SonarCloud Scan uses: sonarsource/sonarqube-scan-action@v5.2.0 env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} docker: diff --git a/.github/workflows/re-release.yml b/.github/workflows/re-release.yml index f1a6346..179b894 100644 --- a/.github/workflows/re-release.yml +++ b/.github/workflows/re-release.yml @@ -21,10 +21,10 @@ jobs: fetch-depth: 0 ref: ${{ github.event.inputs.tag }} - - name: Setup Deno v2.3.5 - uses: denoland/setup-deno@v1 + - name: Setup Deno v2.4.0 + uses: denoland/setup-deno@v2 with: - deno-version: v2.3.5 + deno-version: v2.4.0 - name: Verify formatting run: deno task fmt diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index aa01449..9210383 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,10 +16,10 @@ jobs: with: fetch-depth: 0 - - name: Setup Deno v2.3.5 - uses: denoland/setup-deno@v1 + - name: Setup Deno v2.4.0 + uses: denoland/setup-deno@v2 with: - deno-version: v2.3.5 + deno-version: v2.4.0 - name: Verify formatting run: deno task fmt diff --git a/.gitignore b/.gitignore index 351df22..dc597c0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ coverage dist .scannerwork -.env.prod \ No newline at end of file +.env.prod +.env \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 1eda64f..ffca07e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM denoland/deno:alpine-2.3.5 +FROM denoland/deno:alpine-2.4.0 ENV APP_HOME=/home/app WORKDIR $APP_HOME diff --git a/deno.jsonc b/deno.jsonc index cad8709..eb16dbf 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -1,6 +1,6 @@ { "name": "@switcherapi/switcher-management-feature", - "version": "1.1.0", + "version": "1.1.1", "description": "Feature Flag Service for Switcher Management", "tasks": { "run": "deno run --allow-net --allow-env --allow-read --allow-write src/index.ts", diff --git a/deno.lock b/deno.lock index 810fcfc..ca65fe6 100644 --- a/deno.lock +++ b/deno.lock @@ -8,6 +8,7 @@ "jsr:@oak/oak@17.1.0": "17.1.0", "jsr:@oak/oak@17.1.3": "17.1.3", "jsr:@oak/oak@17.1.4": "17.1.4", + "jsr:@oak/oak@17.1.5": "17.1.5", "jsr:@std/assert@0.223": "0.223.0", "jsr:@std/assert@0.224": "0.224.0", "jsr:@std/assert@0.226": "0.226.0", @@ -25,6 +26,7 @@ "jsr:@std/bytes@1": "1.0.6", "jsr:@std/bytes@^1.0.2": "1.0.4", "jsr:@std/cli@^1.0.17": "1.0.17", + "jsr:@std/cli@^1.0.18": "1.0.20", "jsr:@std/crypto@0.223": "0.223.0", "jsr:@std/crypto@0.224": "0.224.0", "jsr:@std/crypto@1": "1.0.5", @@ -48,16 +50,19 @@ "jsr:@std/fmt@1.0.8": "1.0.8", "jsr:@std/fmt@^1.0.8": "1.0.8", "jsr:@std/fs@0.229.1": "0.229.1", + "jsr:@std/fs@1.0.18": "1.0.18", + "jsr:@std/fs@1.0.19": "1.0.19", "jsr:@std/fs@1.0.6": "1.0.6", "jsr:@std/html@^1.0.4": "1.0.4", "jsr:@std/http@0.223": "0.223.0", "jsr:@std/http@0.224": "0.224.5", "jsr:@std/http@1": "1.0.17", - "jsr:@std/http@^1.0.16": "1.0.16", + "jsr:@std/http@^1.0.16": "1.0.17", "jsr:@std/internal@^1.0.2": "1.0.2", "jsr:@std/internal@^1.0.3": "1.0.3", "jsr:@std/internal@^1.0.5": "1.0.5", - "jsr:@std/internal@^1.0.6": "1.0.6", + "jsr:@std/internal@^1.0.6": "1.0.9", + "jsr:@std/internal@^1.0.9": "1.0.9", "jsr:@std/io@0.223": "0.223.0", "jsr:@std/io@0.224": "0.224.9", "jsr:@std/media-types@0.223": "0.223.0", @@ -66,13 +71,17 @@ "jsr:@std/media-types@^1.1.0": "1.1.0", "jsr:@std/net@^1.0.4": "1.0.4", "jsr:@std/path@0.223": "0.223.0", - "jsr:@std/path@1": "1.1.0", - "jsr:@std/path@^1.0.8": "1.1.0", + "jsr:@std/path@1": "1.1.1", + "jsr:@std/path@^1.0.8": "1.1.1", "jsr:@std/path@^1.0.9": "1.0.9", + "jsr:@std/path@^1.1.0": "1.1.1", + "jsr:@std/path@^1.1.1": "1.1.1", "jsr:@std/path@~0.225.1": "0.225.2", "jsr:@std/streams@^1.0.9": "1.0.9", "jsr:@switcherapi/switcher-client-deno@2.0.2": "2.0.2", "jsr:@switcherapi/switcher-client-deno@2.1.0": "2.1.0", + "jsr:@switcherapi/switcher-client-deno@2.2.0": "2.2.0", + "jsr:@switcherapi/switcher-client-deno@2.3.0": "2.3.0", "jsr:@trackerforce/validator4oak@1.1.0": "1.1.0", "jsr:@trackerforce/validator4oak@1.2.0": "1.2.0", "npm:@types/node@*": "18.16.19", @@ -180,6 +189,18 @@ "npm:path-to-regexp@^6.3.0" ] }, + "@oak/oak@17.1.5": { + "integrity": "676263340dcfd069fb422b4274b4f75f7048a68e605dece6a2897ccfe669e7cc", + "dependencies": [ + "jsr:@oak/commons@1", + "jsr:@std/assert@1", + "jsr:@std/bytes@1", + "jsr:@std/http@1", + "jsr:@std/media-types@1", + "jsr:@std/path@1", + "npm:path-to-regexp@^6.3.0" + ] + }, "@std/assert@0.223.0": { "integrity": "eb8d6d879d76e1cc431205bd346ed4d88dc051c6366365b1af47034b0670be24" }, @@ -249,6 +270,9 @@ "@std/cli@1.0.17": { "integrity": "e15b9abe629e17be90cc6216327f03a29eae613365f1353837fa749aad29ce7b" }, + "@std/cli@1.0.20": { + "integrity": "a8c384a2c98cec6ec6a2055c273a916e2772485eb784af0db004c5ab8ba52333" + }, "@std/crypto@0.223.0": { "integrity": "1aa9555ff56b09e197ad988ea200f84bc6781fd4fd83f3a156ee44449af93000", "dependencies": [ @@ -335,6 +359,19 @@ "jsr:@std/path@^1.0.8" ] }, + "@std/fs@1.0.18": { + "integrity": "24bcad99eab1af4fde75e05da6e9ed0e0dce5edb71b7e34baacf86ffe3969f3a", + "dependencies": [ + "jsr:@std/path@^1.1.0" + ] + }, + "@std/fs@1.0.19": { + "integrity": "051968c2b1eae4d2ea9f79a08a3845740ef6af10356aff43d3e2ef11ed09fb06", + "dependencies": [ + "jsr:@std/internal@^1.0.9", + "jsr:@std/path@^1.1.1" + ] + }, "@std/html@1.0.4": { "integrity": "eff3497c08164e6ada49b7f81a28b5108087033823153d065e3f89467dd3d50e" }, @@ -378,7 +415,7 @@ "@std/http@1.0.16": { "integrity": "80c8d08c4bfcf615b89978dcefb84f7e880087cf3b6b901703936f3592a06933", "dependencies": [ - "jsr:@std/cli", + "jsr:@std/cli@^1.0.17", "jsr:@std/encoding@^1.0.10", "jsr:@std/fmt@^1.0.8", "jsr:@std/html", @@ -391,7 +428,14 @@ "@std/http@1.0.17": { "integrity": "98aec8ab4080d95c21f731e3008f69c29c5012d12f1b4e553f85935db601569f", "dependencies": [ - "jsr:@std/encoding@^1.0.10" + "jsr:@std/cli@^1.0.18", + "jsr:@std/encoding@^1.0.10", + "jsr:@std/fmt@^1.0.8", + "jsr:@std/html", + "jsr:@std/media-types@^1.1.0", + "jsr:@std/net", + "jsr:@std/path@^1.1.0", + "jsr:@std/streams" ] }, "@std/internal@1.0.2": { @@ -406,6 +450,9 @@ "@std/internal@1.0.6": { "integrity": "9533b128f230f73bd209408bb07a4b12f8d4255ab2a4d22a1fd6d87304aca9a4" }, + "@std/internal@1.0.9": { + "integrity": "bdfb97f83e4db7a13e8faab26fb1958d1b80cc64366501af78a0aee151696eb8" + }, "@std/io@0.223.0": { "integrity": "2d8c3c2ab3a515619b90da2c6ff5ea7b75a94383259ef4d02116b228393f84f1", "dependencies": [ @@ -463,6 +510,12 @@ "@std/path@1.1.0": { "integrity": "ddc94f8e3c275627281cbc23341df6b8bcc874d70374f75fec2533521e3d6886" }, + "@std/path@1.1.1": { + "integrity": "fe00026bd3a7e6a27f73709b83c607798be40e20c81dde655ce34052fd82ec76", + "dependencies": [ + "jsr:@std/internal@^1.0.9" + ] + }, "@std/streams@1.0.9": { "integrity": "a9d26b1988cdd7aa7b1f4b51e1c36c1557f3f252880fa6cc5b9f37078b1a5035" }, @@ -478,6 +531,18 @@ "jsr:@std/fs@1.0.6" ] }, + "@switcherapi/switcher-client-deno@2.2.0": { + "integrity": "8db674c070d263cde16e6512f00329d20d131f5c1d6a79b6cfe89cf0b3aa6848", + "dependencies": [ + "jsr:@std/fs@1.0.18" + ] + }, + "@switcherapi/switcher-client-deno@2.3.0": { + "integrity": "b23c46e4882bd828a62e8fc39313d94e99a8c1ac056ab03c4db7e146fec2ca02", + "dependencies": [ + "jsr:@std/fs@1.0.19" + ] + }, "@trackerforce/validator4oak@1.1.0": { "integrity": "1ee9d26ddc4760fc1fd62db447c42e90d95d85a95e7bb84d9ee56e76cb70a64b" }, diff --git a/sonar-project.properties b/sonar-project.properties index ea94338..00b7aec 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,7 +1,7 @@ sonar.projectKey=switcherapi_switcher-management-feature sonar.projectName=switcher-management-feature sonar.organization=switcherapi -sonar.projectVersion=1.1.0 +sonar.projectVersion=1.1.1 sonar.javascript.lcov.reportPaths=coverage/report.lcov diff --git a/src/api-docs/swagger-info.ts b/src/api-docs/swagger-info.ts index 3a6c19e..daf6351 100644 --- a/src/api-docs/swagger-info.ts +++ b/src/api-docs/swagger-info.ts @@ -1,6 +1,6 @@ export default { title: 'Switcher Management Feature', - version: 'v1.1.0', + version: 'v1.1.1', description: 'Feature Flag Service for Switcher Management.', contact: { name: 'Roger Floriano (petruki)', diff --git a/src/deps.ts b/src/deps.ts index 971b928..2a933e2 100644 --- a/src/deps.ts +++ b/src/deps.ts @@ -1,5 +1,5 @@ -export { Application, Context, type Middleware, type Next, Router } from 'jsr:@oak/oak@17.1.4'; -export { Client } from 'jsr:@switcherapi/switcher-client-deno@2.1.0'; +export { Application, Context, type Middleware, type Next, Router } from 'jsr:@oak/oak@17.1.5'; +export { Client } from 'jsr:@switcherapi/switcher-client-deno@2.3.0'; export { ValidatorFn, ValidatorMiddleware } from 'jsr:@trackerforce/validator4oak@1.2.0'; export { load } from 'jsr:@std/dotenv@0.225.5'; export { bold, cyan, green } from 'jsr:@std/fmt@1.0.8/colors'; diff --git a/src/external/switcher-client.ts b/src/external/switcher-client.ts index 3439d94..6e10522 100644 --- a/src/external/switcher-client.ts +++ b/src/external/switcher-client.ts @@ -49,7 +49,7 @@ export default class SwitcherClient { Client.scheduleSnapshotAutoUpdate(Number(updateInterval), { success: (updated) => { if (updated) { - logger('INFO', 'SwitcherClient', `Snapshot updated: ${Client.snapshot?.data.domain.version}`); + logger('INFO', 'SwitcherClient', `Snapshot updated: ${Client.snapshotVersion}`); } }, reject: (err) => { @@ -60,8 +60,4 @@ export default class SwitcherClient { return true; } - - static terminateSnapshotAutoUpdate(): void { - Client.terminateSnapshotAutoUpdate(); - } } diff --git a/src/routes/feature.ts b/src/routes/feature.ts index 5468a5c..d2948de 100644 --- a/src/routes/feature.ts +++ b/src/routes/feature.ts @@ -29,7 +29,8 @@ router.post( async (context: Context) => { try { const request = toFeatureRequestDto(context); - const status = await getService().isFeatureEnabled(request); + const service = getService(); + const status = await service.isFeatureEnabled(request); responseSuccess(context, toFeatureResponseDto(status)); } catch (error) { @@ -48,7 +49,9 @@ router.post( async (context: Context) => { try { const request = toFeaturesRequestDto(context); - const statuses = await getService().isFeaturesEnabled(request); + const service = getService(); + const statuses = await service.isFeaturesEnabled(request); + responseSuccess(context, toFeaturesResponseDto(statuses)); } catch (error) { responseError(context, error as Error, 500, true); diff --git a/src/services/feature.ts b/src/services/feature.ts index a4d506c..5bec36b 100644 --- a/src/services/feature.ts +++ b/src/services/feature.ts @@ -21,16 +21,12 @@ class FeatureService { return { feature: featureReq.feature, - result: (await switcher.isItOn(featureReq.feature)) as boolean, + result: await switcher.isItOnBool(featureReq.feature, true), }; })); return featuresRes; } - - terminateSnapshotAutoUpdate() { - SwitcherClient.terminateSnapshotAutoUpdate(); - } } export default FeatureService; diff --git a/tests/deps.ts b/tests/deps.ts index 045ac33..0e9cc19 100644 --- a/tests/deps.ts +++ b/tests/deps.ts @@ -1,4 +1,4 @@ -export { type Middleware, testing } from 'jsr:@oak/oak@17.1.4'; -export { Client, StrategiesType } from 'jsr:@switcherapi/switcher-client-deno@2.1.0'; +export { type Middleware, testing } from 'jsr:@oak/oak@17.1.5'; +export { Client, StrategiesType } from 'jsr:@switcherapi/switcher-client-deno@2.3.0'; export { superoak } from 'https://deno.land/x/superoak@5.0.0/mod.ts'; export { assert, assertEquals, assertFalse, assertObjectMatch } from 'jsr:@std/assert@1.0.13'; diff --git a/tests/services/feature.integrated.test.ts b/tests/services/feature.integrated.test.ts index 24555fa..59b2751 100644 --- a/tests/services/feature.integrated.test.ts +++ b/tests/services/feature.integrated.test.ts @@ -1,11 +1,11 @@ import FeatureService from '../../src/services/feature.ts'; -import { assert } from '../deps.ts'; +import { assert, Client } from '../deps.ts'; const featureService = new FeatureService(); const teardown = () => { Deno.env.set('SWITCHER_SNAPSHOT_UPDATE_INTERVAL', ''); - featureService.terminateSnapshotAutoUpdate(); + Client.terminateSnapshotAutoUpdate(); }; const setupDenoEnv = async () => { diff --git a/tests/services/feature.test.ts b/tests/services/feature.test.ts index 2a6bb94..dbcad9a 100644 --- a/tests/services/feature.test.ts +++ b/tests/services/feature.test.ts @@ -30,7 +30,7 @@ Deno.test({ //assert assertFalse(response); - featureService.terminateSnapshotAutoUpdate(); + Client.terminateSnapshotAutoUpdate(); }), }); @@ -47,6 +47,6 @@ Deno.test({ //assert assert(response); - featureService.terminateSnapshotAutoUpdate(); + Client.terminateSnapshotAutoUpdate(); }), });