diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6d81b54..0e49aef 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -41,7 +41,21 @@ jobs: cache-hash: ${{ env.CACHE_KEY_BASE }}-${{ hashFiles('deno.lock') }} - name: Test - run: deno test --allow-read --no-prompt + run: deno test -P --no-prompt --coverage --shuffle + + - name: Upload coverage report + uses: actions/upload-artifact@v4 + with: + name: coverage-report + path: | + coverage/html + coverage/lcov.info + + - name: Upload raw coverage files + uses: actions/upload-artifact@v4 + with: + name: coverage-report-raw + path: coverage/*.json lint: name: Lint diff --git a/.gitignore b/.gitignore index f3ec6e3..e5a6b7c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Deno coverage report directory +coverage + hide* .vscode *.s diff --git a/biome.jsonc b/biome.jsonc index 3c72fa0..cdb60e8 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.2.6/schema.json", + "$schema": "https://biomejs.dev/schemas/2.3.6/schema.json", "vcs": { "enabled": true, "clientKind": "git", diff --git a/deno.jsonc b/deno.jsonc index f6074f6..d26610f 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -11,16 +11,29 @@ // Import alias "@root/": "./", // External dependencies - "@biomejs/biome": "npm:@biomejs/biome@2.2.6", - "@std/assert": "jsr:@std/assert", - "@std/testing": "jsr:@std/testing", - "@std/fmt": "jsr:@std/fmt", - "@std/cli": "jsr:@std/cli", - "@std/fs": "jsr:@std/fs", - "@std/path": "jsr:@std/path", + "@biomejs/biome": "npm:@biomejs/biome@2.3.6", + "@std/assert": "jsr:@std/assert@1.0.16", + "@std/testing": "jsr:@std/testing@1.0.16", + "@std/fmt": "jsr:@std/fmt@1.0.8", + "@std/cli": "jsr:@std/cli@1.0.24", + "@std/fs": "jsr:@std/fs@1.0.20", + "@std/path": "jsr:@std/path@1.1.3", "chevrotain": "npm:chevrotain@^11.0.3" }, + "test": { + "permissions": { + "read": true + } + }, + + "permissions": { + "biome": { + "env": true, + "run": true + } + }, + // Loosely ported from .prettierrc "fmt": { "useTabs": false, diff --git a/deno.lock b/deno.lock index a563605..3bd68b1 100644 --- a/deno.lock +++ b/deno.lock @@ -1,56 +1,46 @@ { "version": "5", "specifiers": { - "jsr:@std/assert@*": "1.0.14", - "jsr:@std/assert@^1.0.15": "1.0.15", - "jsr:@std/async@^1.0.15": "1.0.15", - "jsr:@std/cli@*": "1.0.22", + "jsr:@std/assert@1.0.16": "1.0.16", + "jsr:@std/assert@^1.0.15": "1.0.16", + "jsr:@std/cli@1.0.24": "1.0.24", "jsr:@std/data-structures@^1.0.9": "1.0.9", - "jsr:@std/fmt@*": "1.0.8", - "jsr:@std/fs@*": "1.0.19", - "jsr:@std/fs@^1.0.19": "1.0.19", - "jsr:@std/internal@^1.0.10": "1.0.12", + "jsr:@std/fmt@1.0.8": "1.0.8", + "jsr:@std/fs@1.0.20": "1.0.20", + "jsr:@std/fs@^1.0.19": "1.0.20", "jsr:@std/internal@^1.0.12": "1.0.12", - "jsr:@std/internal@^1.0.9": "1.0.12", - "jsr:@std/path@*": "1.1.2", - "jsr:@std/path@^1.1.1": "1.1.2", - "jsr:@std/path@^1.1.2": "1.1.2", - "jsr:@std/testing@*": "1.0.16", - "npm:@biomejs/biome@*": "2.2.6", - "npm:@biomejs/biome@2.2.6": "2.2.6", + "jsr:@std/path@1.1.3": "1.1.3", + "jsr:@std/path@^1.1.2": "1.1.3", + "jsr:@std/path@^1.1.3": "1.1.3", + "jsr:@std/testing@1.0.16": "1.0.16", + "npm:@biomejs/biome@2.3.6": "2.3.6", "npm:@types/node@*": "24.2.0", "npm:chevrotain@^11.0.3": "11.0.3" }, "jsr": { - "@std/assert@1.0.14": { - "integrity": "68d0d4a43b365abc927f45a9b85c639ea18a9fab96ad92281e493e4ed84abaa4", + "@std/assert@1.0.16": { + "integrity": "6a7272ed1eaa77defe76e5ff63ca705d9c495077e2d5fd0126d2b53fc5bd6532", "dependencies": [ - "jsr:@std/internal@^1.0.10" + "jsr:@std/internal" ] }, - "@std/assert@1.0.15": { - "integrity": "d64018e951dbdfab9777335ecdb000c0b4e3df036984083be219ce5941e4703b", + "@std/cli@1.0.24": { + "integrity": "b655a5beb26aa94f98add6bc8889f5fb9bc3ee2cc3fc954e151201f4c4200a5e", "dependencies": [ - "jsr:@std/internal@^1.0.12" + "jsr:@std/internal" ] }, - "@std/async@1.0.15": { - "integrity": "55d1d9d04f99403fe5730ab16bdcc3c47f658a6bf054cafb38a50f046238116e" - }, - "@std/cli@1.0.22": { - "integrity": "50d1e4f87887cb8a8afa29b88505ab5081188f5cad3985460c3b471fa49ff21a" - }, "@std/data-structures@1.0.9": { "integrity": "033d6e17e64bf1f84a614e647c1b015fa2576ae3312305821e1a4cb20674bb4d" }, "@std/fmt@1.0.8": { "integrity": "71e1fc498787e4434d213647a6e43e794af4fd393ef8f52062246e06f7e372b7" }, - "@std/fs@1.0.19": { - "integrity": "051968c2b1eae4d2ea9f79a08a3845740ef6af10356aff43d3e2ef11ed09fb06", + "@std/fs@1.0.20": { + "integrity": "e953206aae48d46ee65e8783ded459f23bec7dd1f3879512911c35e5484ea187", "dependencies": [ - "jsr:@std/internal@^1.0.9", - "jsr:@std/path@^1.1.1" + "jsr:@std/internal", + "jsr:@std/path@^1.1.3" ] }, "@std/internal@1.0.10": { @@ -59,27 +49,26 @@ "@std/internal@1.0.12": { "integrity": "972a634fd5bc34b242024402972cd5143eac68d8dffaca5eaa4dba30ce17b027" }, - "@std/path@1.1.2": { - "integrity": "c0b13b97dfe06546d5e16bf3966b1cadf92e1cc83e56ba5476ad8b498d9e3038", + "@std/path@1.1.3": { + "integrity": "b015962d82a5e6daea980c32b82d2c40142149639968549c649031a230b1afb3", "dependencies": [ - "jsr:@std/internal@^1.0.10" + "jsr:@std/internal" ] }, "@std/testing@1.0.16": { "integrity": "a917ffdeb5924c9be436dc78bc32e511760e14d3a96e49c607fc5ecca86d0092", "dependencies": [ "jsr:@std/assert@^1.0.15", - "jsr:@std/async", "jsr:@std/data-structures", "jsr:@std/fs@^1.0.19", - "jsr:@std/internal@^1.0.12", + "jsr:@std/internal", "jsr:@std/path@^1.1.2" ] } }, "npm": { - "@biomejs/biome@2.2.6": { - "integrity": "sha512-yKTCNGhek0rL5OEW1jbLeZX8LHaM8yk7+3JRGv08my+gkpmtb5dDE+54r2ZjZx0ediFEn1pYBOJSmOdDP9xtFw==", + "@biomejs/biome@2.3.6": { + "integrity": "sha512-oqUhWyU6tae0MFsr/7iLe++QWRg+6jtUhlx9/0GmCWDYFFrK366sBLamNM7D9Y+c7YSynUFKr8lpEp1r6Sk7eA==", "optionalDependencies": [ "@biomejs/cli-darwin-arm64", "@biomejs/cli-darwin-x64", @@ -92,43 +81,43 @@ ], "bin": true }, - "@biomejs/cli-darwin-arm64@2.2.6": { - "integrity": "sha512-UZPmn3M45CjTYulgcrFJFZv7YmK3pTxTJDrFYlNElT2FNnkkX4fsxjExTSMeWKQYoZjvekpH5cvrYZZlWu3yfA==", + "@biomejs/cli-darwin-arm64@2.3.6": { + "integrity": "sha512-P4JWE5d8UayBxYe197QJwyW4ZHp0B+zvRIGCusOm1WbxmlhpAQA1zEqQuunHgSIzvyEEp4TVxiKGXNFZPg7r9Q==", "os": ["darwin"], "cpu": ["arm64"] }, - "@biomejs/cli-darwin-x64@2.2.6": { - "integrity": "sha512-HOUIquhHVgh/jvxyClpwlpl/oeMqntlteL89YqjuFDiZ091P0vhHccwz+8muu3nTyHWM5FQslt+4Jdcd67+xWQ==", + "@biomejs/cli-darwin-x64@2.3.6": { + "integrity": "sha512-I4rTebj+F/L9K93IU7yTFs8nQ6EhaCOivxduRha4w4WEZK80yoZ8OAdR1F33m4yJ/NfUuTUbP/Wjs+vKjlCoWA==", "os": ["darwin"], "cpu": ["x64"] }, - "@biomejs/cli-linux-arm64-musl@2.2.6": { - "integrity": "sha512-TjCenQq3N6g1C+5UT3jE1bIiJb5MWQvulpUngTIpFsL4StVAUXucWD0SL9MCW89Tm6awWfeXBbZBAhJwjyFbRQ==", + "@biomejs/cli-linux-arm64-musl@2.3.6": { + "integrity": "sha512-oK1NpIXIixbJ/4Tcx40cwiieqah6rRUtMGOHDeK2ToT7yUFVEvXUGRKqH0O4hqZ9tW8TcXNZKfgRH6xrsjVtGg==", "os": ["linux"], "cpu": ["arm64"] }, - "@biomejs/cli-linux-arm64@2.2.6": { - "integrity": "sha512-BpGtuMJGN+o8pQjvYsUKZ+4JEErxdSmcRD/JG3mXoWc6zrcA7OkuyGFN1mDggO0Q1n7qXxo/PcupHk8gzijt5g==", + "@biomejs/cli-linux-arm64@2.3.6": { + "integrity": "sha512-JjYy83eVBnvuINZiqyFO7xx72v8Srh4hsgaacSBCjC22DwM6+ZvnX1/fj8/SBiLuUOfZ8YhU2pfq2Dzakeyg1A==", "os": ["linux"], "cpu": ["arm64"] }, - "@biomejs/cli-linux-x64-musl@2.2.6": { - "integrity": "sha512-1ZcBux8zVM3JhWN2ZCPaYf0+ogxXG316uaoXJdgoPZcdK/rmRcRY7PqHdAos2ExzvjIdvhQp72UcveI98hgOog==", + "@biomejs/cli-linux-x64-musl@2.3.6": { + "integrity": "sha512-QvxB8GHQeaO4FCtwJpJjCgJkbHBbWxRHUxQlod+xeaYE6gtJdSkYkuxdKAQUZEOIsec+PeaDAhW9xjzYbwmOFA==", "os": ["linux"], "cpu": ["x64"] }, - "@biomejs/cli-linux-x64@2.2.6": { - "integrity": "sha512-1HaM/dpI/1Z68zp8ZdT6EiBq+/O/z97a2AiHMl+VAdv5/ELckFt9EvRb8hDHpk8hUMoz03gXkC7VPXOVtU7faA==", + "@biomejs/cli-linux-x64@2.3.6": { + "integrity": "sha512-ZjPXzy5yN9wusIoX+8Zp4p6cL8r0NzJCXg/4r1KLVveIPXd2jKVlqZ6ZyzEq385WwU3OX5KOwQYLQsOc788waQ==", "os": ["linux"], "cpu": ["x64"] }, - "@biomejs/cli-win32-arm64@2.2.6": { - "integrity": "sha512-h3A88G8PGM1ryTeZyLlSdfC/gz3e95EJw9BZmA6Po412DRqwqPBa2Y9U+4ZSGUAXCsnSQE00jLV8Pyrh0d+jQw==", + "@biomejs/cli-win32-arm64@2.3.6": { + "integrity": "sha512-YM7hLHpwjdt8R7+O2zS1Vo2cKgqEeptiXB1tWW1rgjN5LlpZovBVKtg7zfwfRrFx3i08aNZThYpTcowpTlczug==", "os": ["win32"], "cpu": ["arm64"] }, - "@biomejs/cli-win32-x64@2.2.6": { - "integrity": "sha512-yx0CqeOhPjYQ5ZXgPfu8QYkgBhVJyvWe36as7jRuPrKPO5ylVDfwVtPQ+K/mooNTADW0IhxOZm3aPu16dP8yNQ==", + "@biomejs/cli-win32-x64@2.3.6": { + "integrity": "sha512-psgNEYgMAobY5h+QHRBVR9xvg2KocFuBKm6axZWB/aD12NWhQjiVFQUjV6wMXhlH4iT0Q9c3yK5JFRiDC/rzHA==", "os": ["win32"], "cpu": ["x64"] }, @@ -182,13 +171,13 @@ }, "workspace": { "dependencies": [ - "jsr:@std/assert@*", - "jsr:@std/cli@*", - "jsr:@std/fmt@*", - "jsr:@std/fs@*", - "jsr:@std/path@*", - "jsr:@std/testing@*", - "npm:@biomejs/biome@2.2.6", + "jsr:@std/assert@1.0.16", + "jsr:@std/cli@1.0.24", + "jsr:@std/fmt@1.0.8", + "jsr:@std/fs@1.0.20", + "jsr:@std/path@1.1.3", + "jsr:@std/testing@1.0.16", + "npm:@biomejs/biome@2.3.6", "npm:chevrotain@^11.0.3" ] }