diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile index 6ed63d5..aa8df52 100644 --- a/.devcontainer/Dockerfile +++ b/.devcontainer/Dockerfile @@ -1,4 +1,4 @@ -FROM denoland/deno:2.2.12 +FROM denoland/deno:2.3.6 # Install tools RUN apt-get update && \ diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index c7c7b34..cdad4ea 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -18,10 +18,10 @@ jobs: with: fetch-depth: 0 - - name: Setup Deno v2.2.12 - uses: denoland/setup-deno@v1 + - name: Setup Deno v2.3.6 + uses: denoland/setup-deno@v2 with: - deno-version: v2.2.12 + deno-version: v2.3.6 - name: Setup LCOV run: sudo apt install -y lcov @@ -36,9 +36,8 @@ jobs: run: deno task cover - name: SonarCloud Scan - uses: sonarsource/sonarqube-scan-action@v5.0.0 + 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 d572b67..53ee08d 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.2.12 - uses: denoland/setup-deno@v1 + - name: Setup Deno v2.3.6 + uses: denoland/setup-deno@v2 with: - deno-version: v2.2.12 + deno-version: v2.3.6 - name: Verify formatting run: deno task fmt diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b185f20..7c504d5 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -16,10 +16,10 @@ jobs: with: fetch-depth: 0 - - name: Setup Deno v2.2.12 - uses: denoland/setup-deno@v1 + - name: Setup Deno v2.3.6 + uses: denoland/setup-deno@v2 with: - deno-version: v2.2.12 + deno-version: v2.3.6 - name: Verify formatting run: deno task fmt diff --git a/Dockerfile b/Dockerfile index 1642bee..c9509e1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM denoland/deno:alpine-2.2.12 +FROM denoland/deno:alpine-2.3.6 ENV APP_HOME=/home/app WORKDIR $APP_HOME diff --git a/deno.jsonc b/deno.jsonc index 0edc20b..3f0e16e 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -12,7 +12,8 @@ "test": "deno test --allow-read --allow-net --allow-env --allow-import --coverage=coverage", "lcov": "deno coverage coverage --lcov --output=coverage/report.lcov", "clean": "rm -rf ./npm ./coverage", - "cover": "deno task clean && deno task test && deno task lcov && genhtml -o coverage/html coverage/report.lcov" + "cover": "deno task clean && deno task test && deno task lcov && genhtml -o coverage/html coverage/report.lcov", + "cover:html": "deno task clean && deno task test && deno task lcov && deno coverage --exclude=external --html" }, "lock": false, "exports": "./src/index.ts" diff --git a/deno.lock b/deno.lock index 02aaebc..6c2678a 100644 --- a/deno.lock +++ b/deno.lock @@ -1,5 +1,5 @@ { - "version": "4", + "version": "5", "specifiers": { "jsr:@oak/commons@0.11": "0.11.0", "jsr:@oak/commons@1": "1.0.0", @@ -22,6 +22,7 @@ "jsr:@std/dotenv@0.225.1": "0.225.1", "jsr:@std/dotenv@0.225.2": "0.225.2", "jsr:@std/dotenv@0.225.3": "0.225.3", + "jsr:@std/dotenv@0.225.5": "0.225.5", "jsr:@std/encoding@0.223": "0.223.0", "jsr:@std/encoding@1": "1.0.5", "jsr:@std/encoding@1.0.0-rc.2": "1.0.0-rc.2", @@ -31,6 +32,7 @@ "jsr:@std/fmt@1.0.3": "1.0.3", "jsr:@std/fmt@1.0.5": "1.0.5", "jsr:@std/fmt@1.0.6": "1.0.6", + "jsr:@std/fmt@1.0.8": "1.0.8", "jsr:@std/http@0.223": "0.223.0", "jsr:@std/http@0.224": "0.224.5", "jsr:@std/http@1": "1.0.6", @@ -44,6 +46,7 @@ "jsr:@trackerforce/skimming@1.2.1": "1.2.1", "jsr:@trackerforce/validator4oak@1.1.0": "1.1.0", "jsr:@trackerforce/validator4oak@1.2.0": "1.2.0", + "npm:@types/node@*": "22.15.15", "npm:path-to-regexp@6.2.1": "6.2.1", "npm:path-to-regexp@^6.3.0": "6.3.0" }, @@ -183,6 +186,9 @@ "@std/dotenv@0.225.3": { "integrity": "a95e5b812c27b0854c52acbae215856d9cce9d4bbf774d938c51d212711e8d4a" }, + "@std/dotenv@0.225.5": { + "integrity": "9ce6f9d0ec3311f74a32535aa1b8c62ed88b1ab91b7f0815797d77a6f60c922f" + }, "@std/encoding@0.223.0": { "integrity": "2b5615a75e00337ce113f34cf2f9b8c18182c751a8dcc8b1a2c2fc0e117bef00" }, @@ -207,6 +213,9 @@ "@std/fmt@1.0.6": { "integrity": "a2c56a69a2369876ddb3ad6a500bb6501b5bad47bb3ea16bfb0c18974d2661fc" }, + "@std/fmt@1.0.8": { + "integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7" + }, "@std/http@0.223.0": { "integrity": "15ab8a0c5a7e9d5be017a15b01600f20f66602ceec48b378939fa24fcec522aa", "dependencies": [ @@ -267,11 +276,20 @@ } }, "npm": { + "@types/node@22.15.15": { + "integrity": "sha512-R5muMcZob3/Jjchn5LcO8jdKwSCbzqmPB6ruBxMcf9kbxtniZHP327s6C37iOfuw8mbKK3cAQa7sEl7afLrQ8A==", + "dependencies": [ + "undici-types" + ] + }, "path-to-regexp@6.2.1": { "integrity": "sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==" }, "path-to-regexp@6.3.0": { "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==" + }, + "undici-types@6.21.0": { + "integrity": "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==" } }, "remote": { diff --git a/src/deps.ts b/src/deps.ts index f5f03b4..11c5b90 100644 --- a/src/deps.ts +++ b/src/deps.ts @@ -1,6 +1,6 @@ export { Application, Context, Router } from 'jsr:@oak/oak@17.1.4'; export type { Middleware, Next } from 'jsr:@oak/oak@17.1.4'; -export { load } from 'jsr:@std/dotenv@0.225.3'; -export { bold, cyan, green } from 'jsr:@std/fmt@1.0.6/colors'; +export { load } from 'jsr:@std/dotenv@0.225.5'; +export { bold, cyan, green } from 'jsr:@std/fmt@1.0.8/colors'; export { type Output, Skimming } from 'jsr:@trackerforce/skimming@1.2.1'; export { ValidatorFn, ValidatorMiddleware } from 'jsr:@trackerforce/validator4oak@1.2.0'; diff --git a/tests/deps.ts b/tests/deps.ts index c07a23e..bb95cdf 100644 --- a/tests/deps.ts +++ b/tests/deps.ts @@ -1,7 +1,3 @@ export { type Middleware, testing } from 'jsr:@oak/oak@17.1.4'; export { assert, assertEquals, assertFalse, assertObjectMatch } from 'jsr:@std/assert@1.0.13'; -export { type IResponse, superoak } from 'https://deno.land/x/superoak@4.8.1/mod.ts'; - -// Fixes superdeno@4.9.0 issue -// deno-lint-ignore no-explicit-any -(globalThis as any).window = globalThis; \ No newline at end of file +export { type IResponse, superoak } from 'https://deno.land/x/superoak@5.0.0/mod.ts'; \ No newline at end of file diff --git a/tests/middleware/helmet.test.ts b/tests/middleware/helmet.test.ts index 6baf1f6..644fa39 100644 --- a/tests/middleware/helmet.test.ts +++ b/tests/middleware/helmet.test.ts @@ -6,6 +6,7 @@ const newRequest = () => { return { request: { ip: 'localhost', + method: 'GET', }, response: { status: 0, @@ -45,3 +46,21 @@ Deno.test({ ); }, }); + +Deno.test({ + name: 'Helmet middleware - it should handle OPTIONS requests', + async fn() { + const helmet = new Helmet(); + const middleware = helmet.middleware(); + + const next = () => { + return; + }; + + const req = newRequest(); + req.request.method = 'OPTIONS'; + await middleware(req as Context, next as Next); + + assertEquals(req.response.status, 204); + }, +});