commit c1b49c7

Artur Manuel  ·  2026-03-21 15:55:42 +0000 UTC
parent 4ebbf90
chore(typescript): rewrite to not use deno
12 files changed,  +1298, -205
+4, -138
  1@@ -1,139 +1,5 @@
  2-# Logs
  3-logs
  4-*.log
  5-npm-debug.log*
  6-yarn-debug.log*
  7-yarn-error.log*
  8-lerna-debug.log*
  9-
 10-# Diagnostic reports (https://nodejs.org/api/report.html)
 11-report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
 12-
 13-# Runtime data
 14-pids
 15-*.pid
 16-*.seed
 17-*.pid.lock
 18-
 19-# Directory for instrumented libs generated by jscoverage/JSCover
 20-lib-cov
 21-
 22-# Coverage directory used by tools like istanbul
 23-coverage
 24-*.lcov
 25-
 26-# nyc test coverage
 27-.nyc_output
 28-
 29-# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
 30-.grunt
 31-
 32-# Bower dependency directory (https://bower.io/)
 33-bower_components
 34-
 35-# node-waf configuration
 36-.lock-wscript
 37-
 38-# Compiled binary addons (https://nodejs.org/api/addons.html)
 39-build/Release
 40-
 41-# Dependency directories
 42 node_modules/
 43-jspm_packages/
 44-
 45-# Snowpack dependency directory (https://snowpack.dev/)
 46-web_modules/
 47-
 48-# TypeScript cache
 49-*.tsbuildinfo
 50-
 51-# Optional npm cache directory
 52-.npm
 53-
 54-# Optional eslint cache
 55-.eslintcache
 56-
 57-# Optional stylelint cache
 58-.stylelintcache
 59-
 60-# Optional REPL history
 61-.node_repl_history
 62-
 63-# Output of 'npm pack'
 64-*.tgz
 65-
 66-# Yarn Integrity file
 67-.yarn-integrity
 68-
 69-# dotenv environment variable files
 70-.env
 71-.env.*
 72-!.env.example
 73-
 74-# parcel-bundler cache (https://parceljs.org/)
 75-.cache
 76-.parcel-cache
 77-
 78-# Next.js build output
 79-.next
 80-out
 81-
 82-# Nuxt.js build / generate output
 83-.nuxt
 84-dist
 85-
 86-# Gatsby files
 87-.cache/
 88-# Comment in the public line in if your project uses Gatsby and not Next.js
 89-# https://nextjs.org/blog/next-9-1#public-directory-support
 90-# public
 91-
 92-# vuepress build output
 93-.vuepress/dist
 94-
 95-# vuepress v2.x temp and cache directory
 96-.temp
 97-.cache
 98-
 99-# Sveltekit cache directory
100-.svelte-kit/
101-
102-# vitepress build output
103-**/.vitepress/dist
104-
105-# vitepress cache directory
106-**/.vitepress/cache
107-
108-# Docusaurus cache and generated files
109-.docusaurus
110-
111-# Serverless directories
112-.serverless/
113-
114-# FuseBox cache
115-.fusebox/
116-
117-# DynamoDB Local files
118-.dynamodb/
119-
120-# Firebase cache directory
121-.firebase/
122-
123-# TernJS port file
124-.tern-port
125-
126-# Stores VSCode versions used for testing VSCode extensions
127-.vscode-test
128-
129-# yarn v3
130-.pnp.*
131-.yarn/*
132-!.yarn/patches
133-!.yarn/plugins
134-!.yarn/releases
135-!.yarn/sdks
136-!.yarn/versions
137-
138-# Vite logs files
139-vite.config.js.timestamp-*
140-vite.config.ts.timestamp-*
141+dist/*
142+\#*\#
143+.\#*
144+tsconfig.tsbuildinfo
+3, -0
1@@ -0,0 +1,3 @@
2+# Ignore artifacts:
3+build
4+coverage
+1, -0
1@@ -0,0 +1 @@
2+{}
+0, -8
1@@ -1,8 +0,0 @@
2-{
3-  "tasks": {
4-    "dev": "deno run --watch main.ts"
5-  },
6-  "imports": {
7-    "@std/assert": "jsr:@std/assert@1"
8-  }
9-}
+0, -23
 1@@ -1,23 +0,0 @@
 2-{
 3-  "version": "4",
 4-  "specifiers": {
 5-    "jsr:@std/assert@1": "1.0.13",
 6-    "jsr:@std/internal@^1.0.6": "1.0.9"
 7-  },
 8-  "jsr": {
 9-    "@std/assert@1.0.13": {
10-      "integrity": "ae0d31e41919b12c656c742b22522c32fb26ed0cba32975cb0de2a273cb68b29",
11-      "dependencies": [
12-        "jsr:@std/internal"
13-      ]
14-    },
15-    "@std/internal@1.0.9": {
16-      "integrity": "bdfb97f83e4db7a13e8faab26fb1958d1b80cc64366501af78a0aee151696eb8"
17-    }
18-  },
19-  "workspace": {
20-    "dependencies": [
21-      "jsr:@std/assert@1"
22-    ]
23-  }
24-}
+9, -0
 1@@ -0,0 +1,9 @@
 2+import js from "@eslint/js";
 3+import globals from "globals";
 4+import tseslint from "typescript-eslint";
 5+import { defineConfig } from "eslint/config";
 6+
 7+export default defineConfig([
 8+  { files: ["**/*.{js,mjs,cjs,ts,mts,cts}"], plugins: { js }, extends: ["js/recommended"], languageOptions: { globals: globals.browser } },
 9+  tseslint.configs.recommended,
10+]);
+0, -24
 1@@ -1,24 +0,0 @@
 2-export function collatz(a: number): number {
 3-    if (a % 2 == 0)
 4-        return Math.floor(a / 2);
 5-    return 3 * a + 1;
 6-}
 7-
 8-export function collatzSequence(a: number): string {
 9-    let result: string = `${a}: `;
10-    for (let i = a; i >= 1; i = collatz(i)) {
11-        if (i == 1) {
12-            result += "1";
13-            break;
14-        }
15-        result += `${i}, `;
16-    }
17-    return result;
18-}
19-
20-// Learn more at https://docs.deno.com/runtime/manual/examples/module_metadata#concepts
21-if (import.meta.main) {
22-    for (let i = 1; i <= 10000; i++) {
23-        console.log(collatzSequence(i));
24-    }
25-}
+0, -12
 1@@ -1,12 +0,0 @@
 2-import { assertEquals } from "@std/assert";
 3-import { collatz, collatzSequence } from "./main.ts";
 4-
 5-Deno.test(function collatzTest() {
 6-  assertEquals(collatz(1), 4);
 7-  assertEquals(collatz(2), 1);
 8-});
 9-
10-Deno.test(function collatzSequenceTest() {
11-  assertEquals(collatzSequence(1), "1: 1");
12-  assertEquals(collatzSequence(4), "4: 4, 2, 1");
13-});
+1183, -0
   1@@ -0,0 +1,1183 @@
   2+{
   3+  "name": "rosetta-collatz",
   4+  "version": "1.0.0",
   5+  "lockfileVersion": 3,
   6+  "requires": true,
   7+  "packages": {
   8+    "": {
   9+      "name": "rosetta-collatz",
  10+      "version": "1.0.0",
  11+      "license": "EUPL-1.2",
  12+      "devDependencies": {
  13+        "@eslint/js": "^10.0.1",
  14+        "eslint": "^10.1.0",
  15+        "globals": "^17.4.0",
  16+        "jiti": "^2.6.1",
  17+        "prettier": "^3.8.1",
  18+        "typescript": "^5.9.3",
  19+        "typescript-eslint": "^8.57.1"
  20+      }
  21+    },
  22+    "node_modules/@eslint-community/eslint-utils": {
  23+      "version": "4.9.1",
  24+      "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz",
  25+      "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==",
  26+      "dev": true,
  27+      "dependencies": {
  28+        "eslint-visitor-keys": "^3.4.3"
  29+      },
  30+      "engines": {
  31+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
  32+      },
  33+      "funding": {
  34+        "url": "https://opencollective.com/eslint"
  35+      },
  36+      "peerDependencies": {
  37+        "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
  38+      }
  39+    },
  40+    "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
  41+      "version": "3.4.3",
  42+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
  43+      "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
  44+      "dev": true,
  45+      "engines": {
  46+        "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
  47+      },
  48+      "funding": {
  49+        "url": "https://opencollective.com/eslint"
  50+      }
  51+    },
  52+    "node_modules/@eslint-community/regexpp": {
  53+      "version": "4.12.2",
  54+      "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
  55+      "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
  56+      "dev": true,
  57+      "engines": {
  58+        "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
  59+      }
  60+    },
  61+    "node_modules/@eslint/config-array": {
  62+      "version": "0.23.3",
  63+      "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.23.3.tgz",
  64+      "integrity": "sha512-j+eEWmB6YYLwcNOdlwQ6L2OsptI/LO6lNBuLIqe5R7RetD658HLoF+Mn7LzYmAWWNNzdC6cqP+L6r8ujeYXWLw==",
  65+      "dev": true,
  66+      "dependencies": {
  67+        "@eslint/object-schema": "^3.0.3",
  68+        "debug": "^4.3.1",
  69+        "minimatch": "^10.2.4"
  70+      },
  71+      "engines": {
  72+        "node": "^20.19.0 || ^22.13.0 || >=24"
  73+      }
  74+    },
  75+    "node_modules/@eslint/config-helpers": {
  76+      "version": "0.5.3",
  77+      "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.5.3.tgz",
  78+      "integrity": "sha512-lzGN0onllOZCGroKJmRwY6QcEHxbjBw1gwB8SgRSqK8YbbtEXMvKynsXc3553ckIEBxsbMBU7oOZXKIPGZNeZw==",
  79+      "dev": true,
  80+      "dependencies": {
  81+        "@eslint/core": "^1.1.1"
  82+      },
  83+      "engines": {
  84+        "node": "^20.19.0 || ^22.13.0 || >=24"
  85+      }
  86+    },
  87+    "node_modules/@eslint/core": {
  88+      "version": "1.1.1",
  89+      "resolved": "https://registry.npmjs.org/@eslint/core/-/core-1.1.1.tgz",
  90+      "integrity": "sha512-QUPblTtE51/7/Zhfv8BDwO0qkkzQL7P/aWWbqcf4xWLEYn1oKjdO0gglQBB4GAsu7u6wjijbCmzsUTy6mnk6oQ==",
  91+      "dev": true,
  92+      "dependencies": {
  93+        "@types/json-schema": "^7.0.15"
  94+      },
  95+      "engines": {
  96+        "node": "^20.19.0 || ^22.13.0 || >=24"
  97+      }
  98+    },
  99+    "node_modules/@eslint/js": {
 100+      "version": "10.0.1",
 101+      "resolved": "https://registry.npmjs.org/@eslint/js/-/js-10.0.1.tgz",
 102+      "integrity": "sha512-zeR9k5pd4gxjZ0abRoIaxdc7I3nDktoXZk2qOv9gCNWx3mVwEn32VRhyLaRsDiJjTs0xq/T8mfPtyuXu7GWBcA==",
 103+      "dev": true,
 104+      "engines": {
 105+        "node": "^20.19.0 || ^22.13.0 || >=24"
 106+      },
 107+      "funding": {
 108+        "url": "https://eslint.org/donate"
 109+      },
 110+      "peerDependencies": {
 111+        "eslint": "^10.0.0"
 112+      },
 113+      "peerDependenciesMeta": {
 114+        "eslint": {
 115+          "optional": true
 116+        }
 117+      }
 118+    },
 119+    "node_modules/@eslint/object-schema": {
 120+      "version": "3.0.3",
 121+      "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-3.0.3.tgz",
 122+      "integrity": "sha512-iM869Pugn9Nsxbh/YHRqYiqd23AmIbxJOcpUMOuWCVNdoQJ5ZtwL6h3t0bcZzJUlC3Dq9jCFCESBZnX0GTv7iQ==",
 123+      "dev": true,
 124+      "engines": {
 125+        "node": "^20.19.0 || ^22.13.0 || >=24"
 126+      }
 127+    },
 128+    "node_modules/@eslint/plugin-kit": {
 129+      "version": "0.6.1",
 130+      "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.6.1.tgz",
 131+      "integrity": "sha512-iH1B076HoAshH1mLpHMgwdGeTs0CYwL0SPMkGuSebZrwBp16v415e9NZXg2jtrqPVQjf6IANe2Vtlr5KswtcZQ==",
 132+      "dev": true,
 133+      "dependencies": {
 134+        "@eslint/core": "^1.1.1",
 135+        "levn": "^0.4.1"
 136+      },
 137+      "engines": {
 138+        "node": "^20.19.0 || ^22.13.0 || >=24"
 139+      }
 140+    },
 141+    "node_modules/@humanfs/core": {
 142+      "version": "0.19.1",
 143+      "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz",
 144+      "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==",
 145+      "dev": true,
 146+      "engines": {
 147+        "node": ">=18.18.0"
 148+      }
 149+    },
 150+    "node_modules/@humanfs/node": {
 151+      "version": "0.16.7",
 152+      "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.7.tgz",
 153+      "integrity": "sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==",
 154+      "dev": true,
 155+      "dependencies": {
 156+        "@humanfs/core": "^0.19.1",
 157+        "@humanwhocodes/retry": "^0.4.0"
 158+      },
 159+      "engines": {
 160+        "node": ">=18.18.0"
 161+      }
 162+    },
 163+    "node_modules/@humanwhocodes/module-importer": {
 164+      "version": "1.0.1",
 165+      "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
 166+      "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
 167+      "dev": true,
 168+      "engines": {
 169+        "node": ">=12.22"
 170+      },
 171+      "funding": {
 172+        "type": "github",
 173+        "url": "https://github.com/sponsors/nzakas"
 174+      }
 175+    },
 176+    "node_modules/@humanwhocodes/retry": {
 177+      "version": "0.4.3",
 178+      "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
 179+      "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
 180+      "dev": true,
 181+      "engines": {
 182+        "node": ">=18.18"
 183+      },
 184+      "funding": {
 185+        "type": "github",
 186+        "url": "https://github.com/sponsors/nzakas"
 187+      }
 188+    },
 189+    "node_modules/@types/esrecurse": {
 190+      "version": "4.3.1",
 191+      "resolved": "https://registry.npmjs.org/@types/esrecurse/-/esrecurse-4.3.1.tgz",
 192+      "integrity": "sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==",
 193+      "dev": true
 194+    },
 195+    "node_modules/@types/estree": {
 196+      "version": "1.0.8",
 197+      "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz",
 198+      "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==",
 199+      "dev": true
 200+    },
 201+    "node_modules/@types/json-schema": {
 202+      "version": "7.0.15",
 203+      "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
 204+      "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
 205+      "dev": true
 206+    },
 207+    "node_modules/@typescript-eslint/eslint-plugin": {
 208+      "version": "8.57.1",
 209+      "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.57.1.tgz",
 210+      "integrity": "sha512-Gn3aqnvNl4NGc6x3/Bqk1AOn0thyTU9bqDRhiRnUWezgvr2OnhYCWCgC8zXXRVqBsIL1pSDt7T9nJUe0oM0kDQ==",
 211+      "dev": true,
 212+      "dependencies": {
 213+        "@eslint-community/regexpp": "^4.12.2",
 214+        "@typescript-eslint/scope-manager": "8.57.1",
 215+        "@typescript-eslint/type-utils": "8.57.1",
 216+        "@typescript-eslint/utils": "8.57.1",
 217+        "@typescript-eslint/visitor-keys": "8.57.1",
 218+        "ignore": "^7.0.5",
 219+        "natural-compare": "^1.4.0",
 220+        "ts-api-utils": "^2.4.0"
 221+      },
 222+      "engines": {
 223+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 224+      },
 225+      "funding": {
 226+        "type": "opencollective",
 227+        "url": "https://opencollective.com/typescript-eslint"
 228+      },
 229+      "peerDependencies": {
 230+        "@typescript-eslint/parser": "^8.57.1",
 231+        "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
 232+        "typescript": ">=4.8.4 <6.0.0"
 233+      }
 234+    },
 235+    "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": {
 236+      "version": "7.0.5",
 237+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
 238+      "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
 239+      "dev": true,
 240+      "engines": {
 241+        "node": ">= 4"
 242+      }
 243+    },
 244+    "node_modules/@typescript-eslint/parser": {
 245+      "version": "8.57.1",
 246+      "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.57.1.tgz",
 247+      "integrity": "sha512-k4eNDan0EIMTT/dUKc/g+rsJ6wcHYhNPdY19VoX/EOtaAG8DLtKCykhrUnuHPYvinn5jhAPgD2Qw9hXBwrahsw==",
 248+      "dev": true,
 249+      "dependencies": {
 250+        "@typescript-eslint/scope-manager": "8.57.1",
 251+        "@typescript-eslint/types": "8.57.1",
 252+        "@typescript-eslint/typescript-estree": "8.57.1",
 253+        "@typescript-eslint/visitor-keys": "8.57.1",
 254+        "debug": "^4.4.3"
 255+      },
 256+      "engines": {
 257+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 258+      },
 259+      "funding": {
 260+        "type": "opencollective",
 261+        "url": "https://opencollective.com/typescript-eslint"
 262+      },
 263+      "peerDependencies": {
 264+        "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
 265+        "typescript": ">=4.8.4 <6.0.0"
 266+      }
 267+    },
 268+    "node_modules/@typescript-eslint/project-service": {
 269+      "version": "8.57.1",
 270+      "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.57.1.tgz",
 271+      "integrity": "sha512-vx1F37BRO1OftsYlmG9xay1TqnjNVlqALymwWVuYTdo18XuKxtBpCj1QlzNIEHlvlB27osvXFWptYiEWsVdYsg==",
 272+      "dev": true,
 273+      "dependencies": {
 274+        "@typescript-eslint/tsconfig-utils": "^8.57.1",
 275+        "@typescript-eslint/types": "^8.57.1",
 276+        "debug": "^4.4.3"
 277+      },
 278+      "engines": {
 279+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 280+      },
 281+      "funding": {
 282+        "type": "opencollective",
 283+        "url": "https://opencollective.com/typescript-eslint"
 284+      },
 285+      "peerDependencies": {
 286+        "typescript": ">=4.8.4 <6.0.0"
 287+      }
 288+    },
 289+    "node_modules/@typescript-eslint/scope-manager": {
 290+      "version": "8.57.1",
 291+      "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.57.1.tgz",
 292+      "integrity": "sha512-hs/QcpCwlwT2L5S+3fT6gp0PabyGk4Q0Rv2doJXA0435/OpnSR3VRgvrp8Xdoc3UAYSg9cyUjTeFXZEPg/3OKg==",
 293+      "dev": true,
 294+      "dependencies": {
 295+        "@typescript-eslint/types": "8.57.1",
 296+        "@typescript-eslint/visitor-keys": "8.57.1"
 297+      },
 298+      "engines": {
 299+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 300+      },
 301+      "funding": {
 302+        "type": "opencollective",
 303+        "url": "https://opencollective.com/typescript-eslint"
 304+      }
 305+    },
 306+    "node_modules/@typescript-eslint/tsconfig-utils": {
 307+      "version": "8.57.1",
 308+      "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.57.1.tgz",
 309+      "integrity": "sha512-0lgOZB8cl19fHO4eI46YUx2EceQqhgkPSuCGLlGi79L2jwYY1cxeYc1Nae8Aw1xjgW3PKVDLlr3YJ6Bxx8HkWg==",
 310+      "dev": true,
 311+      "engines": {
 312+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 313+      },
 314+      "funding": {
 315+        "type": "opencollective",
 316+        "url": "https://opencollective.com/typescript-eslint"
 317+      },
 318+      "peerDependencies": {
 319+        "typescript": ">=4.8.4 <6.0.0"
 320+      }
 321+    },
 322+    "node_modules/@typescript-eslint/type-utils": {
 323+      "version": "8.57.1",
 324+      "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.57.1.tgz",
 325+      "integrity": "sha512-+Bwwm0ScukFdyoJsh2u6pp4S9ktegF98pYUU0hkphOOqdMB+1sNQhIz8y5E9+4pOioZijrkfNO/HUJVAFFfPKA==",
 326+      "dev": true,
 327+      "dependencies": {
 328+        "@typescript-eslint/types": "8.57.1",
 329+        "@typescript-eslint/typescript-estree": "8.57.1",
 330+        "@typescript-eslint/utils": "8.57.1",
 331+        "debug": "^4.4.3",
 332+        "ts-api-utils": "^2.4.0"
 333+      },
 334+      "engines": {
 335+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 336+      },
 337+      "funding": {
 338+        "type": "opencollective",
 339+        "url": "https://opencollective.com/typescript-eslint"
 340+      },
 341+      "peerDependencies": {
 342+        "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
 343+        "typescript": ">=4.8.4 <6.0.0"
 344+      }
 345+    },
 346+    "node_modules/@typescript-eslint/types": {
 347+      "version": "8.57.1",
 348+      "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.57.1.tgz",
 349+      "integrity": "sha512-S29BOBPJSFUiblEl6RzPPjJt6w25A6XsBqRVDt53tA/tlL8q7ceQNZHTjPeONt/3S7KRI4quk+yP9jK2WjBiPQ==",
 350+      "dev": true,
 351+      "engines": {
 352+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 353+      },
 354+      "funding": {
 355+        "type": "opencollective",
 356+        "url": "https://opencollective.com/typescript-eslint"
 357+      }
 358+    },
 359+    "node_modules/@typescript-eslint/typescript-estree": {
 360+      "version": "8.57.1",
 361+      "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.57.1.tgz",
 362+      "integrity": "sha512-ybe2hS9G6pXpqGtPli9Gx9quNV0TWLOmh58ADlmZe9DguLq0tiAKVjirSbtM1szG6+QH6rVXyU6GTLQbWnMY+g==",
 363+      "dev": true,
 364+      "dependencies": {
 365+        "@typescript-eslint/project-service": "8.57.1",
 366+        "@typescript-eslint/tsconfig-utils": "8.57.1",
 367+        "@typescript-eslint/types": "8.57.1",
 368+        "@typescript-eslint/visitor-keys": "8.57.1",
 369+        "debug": "^4.4.3",
 370+        "minimatch": "^10.2.2",
 371+        "semver": "^7.7.3",
 372+        "tinyglobby": "^0.2.15",
 373+        "ts-api-utils": "^2.4.0"
 374+      },
 375+      "engines": {
 376+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 377+      },
 378+      "funding": {
 379+        "type": "opencollective",
 380+        "url": "https://opencollective.com/typescript-eslint"
 381+      },
 382+      "peerDependencies": {
 383+        "typescript": ">=4.8.4 <6.0.0"
 384+      }
 385+    },
 386+    "node_modules/@typescript-eslint/utils": {
 387+      "version": "8.57.1",
 388+      "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.57.1.tgz",
 389+      "integrity": "sha512-XUNSJ/lEVFttPMMoDVA2r2bwrl8/oPx8cURtczkSEswY5T3AeLmCy+EKWQNdL4u0MmAHOjcWrqJp2cdvgjn8dQ==",
 390+      "dev": true,
 391+      "dependencies": {
 392+        "@eslint-community/eslint-utils": "^4.9.1",
 393+        "@typescript-eslint/scope-manager": "8.57.1",
 394+        "@typescript-eslint/types": "8.57.1",
 395+        "@typescript-eslint/typescript-estree": "8.57.1"
 396+      },
 397+      "engines": {
 398+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 399+      },
 400+      "funding": {
 401+        "type": "opencollective",
 402+        "url": "https://opencollective.com/typescript-eslint"
 403+      },
 404+      "peerDependencies": {
 405+        "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
 406+        "typescript": ">=4.8.4 <6.0.0"
 407+      }
 408+    },
 409+    "node_modules/@typescript-eslint/visitor-keys": {
 410+      "version": "8.57.1",
 411+      "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.57.1.tgz",
 412+      "integrity": "sha512-YWnmJkXbofiz9KbnbbwuA2rpGkFPLbAIetcCNO6mJ8gdhdZ/v7WDXsoGFAJuM6ikUFKTlSQnjWnVO4ux+UzS6A==",
 413+      "dev": true,
 414+      "dependencies": {
 415+        "@typescript-eslint/types": "8.57.1",
 416+        "eslint-visitor-keys": "^5.0.0"
 417+      },
 418+      "engines": {
 419+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
 420+      },
 421+      "funding": {
 422+        "type": "opencollective",
 423+        "url": "https://opencollective.com/typescript-eslint"
 424+      }
 425+    },
 426+    "node_modules/acorn": {
 427+      "version": "8.16.0",
 428+      "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz",
 429+      "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==",
 430+      "dev": true,
 431+      "bin": {
 432+        "acorn": "bin/acorn"
 433+      },
 434+      "engines": {
 435+        "node": ">=0.4.0"
 436+      }
 437+    },
 438+    "node_modules/acorn-jsx": {
 439+      "version": "5.3.2",
 440+      "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
 441+      "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
 442+      "dev": true,
 443+      "peerDependencies": {
 444+        "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
 445+      }
 446+    },
 447+    "node_modules/ajv": {
 448+      "version": "6.14.0",
 449+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz",
 450+      "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==",
 451+      "dev": true,
 452+      "dependencies": {
 453+        "fast-deep-equal": "^3.1.1",
 454+        "fast-json-stable-stringify": "^2.0.0",
 455+        "json-schema-traverse": "^0.4.1",
 456+        "uri-js": "^4.2.2"
 457+      },
 458+      "funding": {
 459+        "type": "github",
 460+        "url": "https://github.com/sponsors/epoberezkin"
 461+      }
 462+    },
 463+    "node_modules/balanced-match": {
 464+      "version": "4.0.4",
 465+      "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
 466+      "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
 467+      "dev": true,
 468+      "engines": {
 469+        "node": "18 || 20 || >=22"
 470+      }
 471+    },
 472+    "node_modules/brace-expansion": {
 473+      "version": "5.0.4",
 474+      "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz",
 475+      "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==",
 476+      "dev": true,
 477+      "dependencies": {
 478+        "balanced-match": "^4.0.2"
 479+      },
 480+      "engines": {
 481+        "node": "18 || 20 || >=22"
 482+      }
 483+    },
 484+    "node_modules/cross-spawn": {
 485+      "version": "7.0.6",
 486+      "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
 487+      "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
 488+      "dev": true,
 489+      "dependencies": {
 490+        "path-key": "^3.1.0",
 491+        "shebang-command": "^2.0.0",
 492+        "which": "^2.0.1"
 493+      },
 494+      "engines": {
 495+        "node": ">= 8"
 496+      }
 497+    },
 498+    "node_modules/debug": {
 499+      "version": "4.4.3",
 500+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
 501+      "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
 502+      "dev": true,
 503+      "dependencies": {
 504+        "ms": "^2.1.3"
 505+      },
 506+      "engines": {
 507+        "node": ">=6.0"
 508+      },
 509+      "peerDependenciesMeta": {
 510+        "supports-color": {
 511+          "optional": true
 512+        }
 513+      }
 514+    },
 515+    "node_modules/deep-is": {
 516+      "version": "0.1.4",
 517+      "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
 518+      "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
 519+      "dev": true
 520+    },
 521+    "node_modules/escape-string-regexp": {
 522+      "version": "4.0.0",
 523+      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
 524+      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
 525+      "dev": true,
 526+      "engines": {
 527+        "node": ">=10"
 528+      },
 529+      "funding": {
 530+        "url": "https://github.com/sponsors/sindresorhus"
 531+      }
 532+    },
 533+    "node_modules/eslint": {
 534+      "version": "10.1.0",
 535+      "resolved": "https://registry.npmjs.org/eslint/-/eslint-10.1.0.tgz",
 536+      "integrity": "sha512-S9jlY/ELKEUwwQnqWDO+f+m6sercqOPSqXM5Go94l7DOmxHVDgmSFGWEzeE/gwgTAr0W103BWt0QLe/7mabIvA==",
 537+      "dev": true,
 538+      "dependencies": {
 539+        "@eslint-community/eslint-utils": "^4.8.0",
 540+        "@eslint-community/regexpp": "^4.12.2",
 541+        "@eslint/config-array": "^0.23.3",
 542+        "@eslint/config-helpers": "^0.5.3",
 543+        "@eslint/core": "^1.1.1",
 544+        "@eslint/plugin-kit": "^0.6.1",
 545+        "@humanfs/node": "^0.16.6",
 546+        "@humanwhocodes/module-importer": "^1.0.1",
 547+        "@humanwhocodes/retry": "^0.4.2",
 548+        "@types/estree": "^1.0.6",
 549+        "ajv": "^6.14.0",
 550+        "cross-spawn": "^7.0.6",
 551+        "debug": "^4.3.2",
 552+        "escape-string-regexp": "^4.0.0",
 553+        "eslint-scope": "^9.1.2",
 554+        "eslint-visitor-keys": "^5.0.1",
 555+        "espree": "^11.2.0",
 556+        "esquery": "^1.7.0",
 557+        "esutils": "^2.0.2",
 558+        "fast-deep-equal": "^3.1.3",
 559+        "file-entry-cache": "^8.0.0",
 560+        "find-up": "^5.0.0",
 561+        "glob-parent": "^6.0.2",
 562+        "ignore": "^5.2.0",
 563+        "imurmurhash": "^0.1.4",
 564+        "is-glob": "^4.0.0",
 565+        "json-stable-stringify-without-jsonify": "^1.0.1",
 566+        "minimatch": "^10.2.4",
 567+        "natural-compare": "^1.4.0",
 568+        "optionator": "^0.9.3"
 569+      },
 570+      "bin": {
 571+        "eslint": "bin/eslint.js"
 572+      },
 573+      "engines": {
 574+        "node": "^20.19.0 || ^22.13.0 || >=24"
 575+      },
 576+      "funding": {
 577+        "url": "https://eslint.org/donate"
 578+      },
 579+      "peerDependencies": {
 580+        "jiti": "*"
 581+      },
 582+      "peerDependenciesMeta": {
 583+        "jiti": {
 584+          "optional": true
 585+        }
 586+      }
 587+    },
 588+    "node_modules/eslint-scope": {
 589+      "version": "9.1.2",
 590+      "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-9.1.2.tgz",
 591+      "integrity": "sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==",
 592+      "dev": true,
 593+      "dependencies": {
 594+        "@types/esrecurse": "^4.3.1",
 595+        "@types/estree": "^1.0.8",
 596+        "esrecurse": "^4.3.0",
 597+        "estraverse": "^5.2.0"
 598+      },
 599+      "engines": {
 600+        "node": "^20.19.0 || ^22.13.0 || >=24"
 601+      },
 602+      "funding": {
 603+        "url": "https://opencollective.com/eslint"
 604+      }
 605+    },
 606+    "node_modules/eslint-visitor-keys": {
 607+      "version": "5.0.1",
 608+      "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-5.0.1.tgz",
 609+      "integrity": "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==",
 610+      "dev": true,
 611+      "engines": {
 612+        "node": "^20.19.0 || ^22.13.0 || >=24"
 613+      },
 614+      "funding": {
 615+        "url": "https://opencollective.com/eslint"
 616+      }
 617+    },
 618+    "node_modules/espree": {
 619+      "version": "11.2.0",
 620+      "resolved": "https://registry.npmjs.org/espree/-/espree-11.2.0.tgz",
 621+      "integrity": "sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==",
 622+      "dev": true,
 623+      "dependencies": {
 624+        "acorn": "^8.16.0",
 625+        "acorn-jsx": "^5.3.2",
 626+        "eslint-visitor-keys": "^5.0.1"
 627+      },
 628+      "engines": {
 629+        "node": "^20.19.0 || ^22.13.0 || >=24"
 630+      },
 631+      "funding": {
 632+        "url": "https://opencollective.com/eslint"
 633+      }
 634+    },
 635+    "node_modules/esquery": {
 636+      "version": "1.7.0",
 637+      "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
 638+      "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
 639+      "dev": true,
 640+      "dependencies": {
 641+        "estraverse": "^5.1.0"
 642+      },
 643+      "engines": {
 644+        "node": ">=0.10"
 645+      }
 646+    },
 647+    "node_modules/esrecurse": {
 648+      "version": "4.3.0",
 649+      "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
 650+      "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
 651+      "dev": true,
 652+      "dependencies": {
 653+        "estraverse": "^5.2.0"
 654+      },
 655+      "engines": {
 656+        "node": ">=4.0"
 657+      }
 658+    },
 659+    "node_modules/estraverse": {
 660+      "version": "5.3.0",
 661+      "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
 662+      "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
 663+      "dev": true,
 664+      "engines": {
 665+        "node": ">=4.0"
 666+      }
 667+    },
 668+    "node_modules/esutils": {
 669+      "version": "2.0.3",
 670+      "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
 671+      "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
 672+      "dev": true,
 673+      "engines": {
 674+        "node": ">=0.10.0"
 675+      }
 676+    },
 677+    "node_modules/fast-deep-equal": {
 678+      "version": "3.1.3",
 679+      "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
 680+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
 681+      "dev": true
 682+    },
 683+    "node_modules/fast-json-stable-stringify": {
 684+      "version": "2.1.0",
 685+      "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
 686+      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
 687+      "dev": true
 688+    },
 689+    "node_modules/fast-levenshtein": {
 690+      "version": "2.0.6",
 691+      "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
 692+      "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
 693+      "dev": true
 694+    },
 695+    "node_modules/fdir": {
 696+      "version": "6.5.0",
 697+      "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz",
 698+      "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==",
 699+      "dev": true,
 700+      "engines": {
 701+        "node": ">=12.0.0"
 702+      },
 703+      "peerDependencies": {
 704+        "picomatch": "^3 || ^4"
 705+      },
 706+      "peerDependenciesMeta": {
 707+        "picomatch": {
 708+          "optional": true
 709+        }
 710+      }
 711+    },
 712+    "node_modules/file-entry-cache": {
 713+      "version": "8.0.0",
 714+      "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
 715+      "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
 716+      "dev": true,
 717+      "dependencies": {
 718+        "flat-cache": "^4.0.0"
 719+      },
 720+      "engines": {
 721+        "node": ">=16.0.0"
 722+      }
 723+    },
 724+    "node_modules/find-up": {
 725+      "version": "5.0.0",
 726+      "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
 727+      "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
 728+      "dev": true,
 729+      "dependencies": {
 730+        "locate-path": "^6.0.0",
 731+        "path-exists": "^4.0.0"
 732+      },
 733+      "engines": {
 734+        "node": ">=10"
 735+      },
 736+      "funding": {
 737+        "url": "https://github.com/sponsors/sindresorhus"
 738+      }
 739+    },
 740+    "node_modules/flat-cache": {
 741+      "version": "4.0.1",
 742+      "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
 743+      "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
 744+      "dev": true,
 745+      "dependencies": {
 746+        "flatted": "^3.2.9",
 747+        "keyv": "^4.5.4"
 748+      },
 749+      "engines": {
 750+        "node": ">=16"
 751+      }
 752+    },
 753+    "node_modules/flatted": {
 754+      "version": "3.4.2",
 755+      "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz",
 756+      "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==",
 757+      "dev": true
 758+    },
 759+    "node_modules/glob-parent": {
 760+      "version": "6.0.2",
 761+      "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
 762+      "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
 763+      "dev": true,
 764+      "dependencies": {
 765+        "is-glob": "^4.0.3"
 766+      },
 767+      "engines": {
 768+        "node": ">=10.13.0"
 769+      }
 770+    },
 771+    "node_modules/globals": {
 772+      "version": "17.4.0",
 773+      "resolved": "https://registry.npmjs.org/globals/-/globals-17.4.0.tgz",
 774+      "integrity": "sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==",
 775+      "dev": true,
 776+      "engines": {
 777+        "node": ">=18"
 778+      },
 779+      "funding": {
 780+        "url": "https://github.com/sponsors/sindresorhus"
 781+      }
 782+    },
 783+    "node_modules/ignore": {
 784+      "version": "5.3.2",
 785+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
 786+      "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
 787+      "dev": true,
 788+      "engines": {
 789+        "node": ">= 4"
 790+      }
 791+    },
 792+    "node_modules/imurmurhash": {
 793+      "version": "0.1.4",
 794+      "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
 795+      "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
 796+      "dev": true,
 797+      "engines": {
 798+        "node": ">=0.8.19"
 799+      }
 800+    },
 801+    "node_modules/is-extglob": {
 802+      "version": "2.1.1",
 803+      "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
 804+      "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
 805+      "dev": true,
 806+      "engines": {
 807+        "node": ">=0.10.0"
 808+      }
 809+    },
 810+    "node_modules/is-glob": {
 811+      "version": "4.0.3",
 812+      "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
 813+      "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
 814+      "dev": true,
 815+      "dependencies": {
 816+        "is-extglob": "^2.1.1"
 817+      },
 818+      "engines": {
 819+        "node": ">=0.10.0"
 820+      }
 821+    },
 822+    "node_modules/isexe": {
 823+      "version": "2.0.0",
 824+      "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
 825+      "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
 826+      "dev": true
 827+    },
 828+    "node_modules/jiti": {
 829+      "version": "2.6.1",
 830+      "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.6.1.tgz",
 831+      "integrity": "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==",
 832+      "dev": true,
 833+      "bin": {
 834+        "jiti": "lib/jiti-cli.mjs"
 835+      }
 836+    },
 837+    "node_modules/json-buffer": {
 838+      "version": "3.0.1",
 839+      "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
 840+      "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
 841+      "dev": true
 842+    },
 843+    "node_modules/json-schema-traverse": {
 844+      "version": "0.4.1",
 845+      "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
 846+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
 847+      "dev": true
 848+    },
 849+    "node_modules/json-stable-stringify-without-jsonify": {
 850+      "version": "1.0.1",
 851+      "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
 852+      "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
 853+      "dev": true
 854+    },
 855+    "node_modules/keyv": {
 856+      "version": "4.5.4",
 857+      "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
 858+      "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
 859+      "dev": true,
 860+      "dependencies": {
 861+        "json-buffer": "3.0.1"
 862+      }
 863+    },
 864+    "node_modules/levn": {
 865+      "version": "0.4.1",
 866+      "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
 867+      "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
 868+      "dev": true,
 869+      "dependencies": {
 870+        "prelude-ls": "^1.2.1",
 871+        "type-check": "~0.4.0"
 872+      },
 873+      "engines": {
 874+        "node": ">= 0.8.0"
 875+      }
 876+    },
 877+    "node_modules/locate-path": {
 878+      "version": "6.0.0",
 879+      "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
 880+      "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
 881+      "dev": true,
 882+      "dependencies": {
 883+        "p-locate": "^5.0.0"
 884+      },
 885+      "engines": {
 886+        "node": ">=10"
 887+      },
 888+      "funding": {
 889+        "url": "https://github.com/sponsors/sindresorhus"
 890+      }
 891+    },
 892+    "node_modules/minimatch": {
 893+      "version": "10.2.4",
 894+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz",
 895+      "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==",
 896+      "dev": true,
 897+      "dependencies": {
 898+        "brace-expansion": "^5.0.2"
 899+      },
 900+      "engines": {
 901+        "node": "18 || 20 || >=22"
 902+      },
 903+      "funding": {
 904+        "url": "https://github.com/sponsors/isaacs"
 905+      }
 906+    },
 907+    "node_modules/ms": {
 908+      "version": "2.1.3",
 909+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
 910+      "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
 911+      "dev": true
 912+    },
 913+    "node_modules/natural-compare": {
 914+      "version": "1.4.0",
 915+      "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
 916+      "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
 917+      "dev": true
 918+    },
 919+    "node_modules/optionator": {
 920+      "version": "0.9.4",
 921+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
 922+      "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
 923+      "dev": true,
 924+      "dependencies": {
 925+        "deep-is": "^0.1.3",
 926+        "fast-levenshtein": "^2.0.6",
 927+        "levn": "^0.4.1",
 928+        "prelude-ls": "^1.2.1",
 929+        "type-check": "^0.4.0",
 930+        "word-wrap": "^1.2.5"
 931+      },
 932+      "engines": {
 933+        "node": ">= 0.8.0"
 934+      }
 935+    },
 936+    "node_modules/p-limit": {
 937+      "version": "3.1.0",
 938+      "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
 939+      "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
 940+      "dev": true,
 941+      "dependencies": {
 942+        "yocto-queue": "^0.1.0"
 943+      },
 944+      "engines": {
 945+        "node": ">=10"
 946+      },
 947+      "funding": {
 948+        "url": "https://github.com/sponsors/sindresorhus"
 949+      }
 950+    },
 951+    "node_modules/p-locate": {
 952+      "version": "5.0.0",
 953+      "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
 954+      "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
 955+      "dev": true,
 956+      "dependencies": {
 957+        "p-limit": "^3.0.2"
 958+      },
 959+      "engines": {
 960+        "node": ">=10"
 961+      },
 962+      "funding": {
 963+        "url": "https://github.com/sponsors/sindresorhus"
 964+      }
 965+    },
 966+    "node_modules/path-exists": {
 967+      "version": "4.0.0",
 968+      "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
 969+      "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
 970+      "dev": true,
 971+      "engines": {
 972+        "node": ">=8"
 973+      }
 974+    },
 975+    "node_modules/path-key": {
 976+      "version": "3.1.1",
 977+      "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
 978+      "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
 979+      "dev": true,
 980+      "engines": {
 981+        "node": ">=8"
 982+      }
 983+    },
 984+    "node_modules/picomatch": {
 985+      "version": "4.0.3",
 986+      "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz",
 987+      "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==",
 988+      "dev": true,
 989+      "engines": {
 990+        "node": ">=12"
 991+      },
 992+      "funding": {
 993+        "url": "https://github.com/sponsors/jonschlinkert"
 994+      }
 995+    },
 996+    "node_modules/prelude-ls": {
 997+      "version": "1.2.1",
 998+      "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
 999+      "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
1000+      "dev": true,
1001+      "engines": {
1002+        "node": ">= 0.8.0"
1003+      }
1004+    },
1005+    "node_modules/prettier": {
1006+      "version": "3.8.1",
1007+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.8.1.tgz",
1008+      "integrity": "sha512-UOnG6LftzbdaHZcKoPFtOcCKztrQ57WkHDeRD9t/PTQtmT0NHSeWWepj6pS0z/N7+08BHFDQVUrfmfMRcZwbMg==",
1009+      "dev": true,
1010+      "bin": {
1011+        "prettier": "bin/prettier.cjs"
1012+      },
1013+      "engines": {
1014+        "node": ">=14"
1015+      },
1016+      "funding": {
1017+        "url": "https://github.com/prettier/prettier?sponsor=1"
1018+      }
1019+    },
1020+    "node_modules/punycode": {
1021+      "version": "2.3.1",
1022+      "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
1023+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
1024+      "dev": true,
1025+      "engines": {
1026+        "node": ">=6"
1027+      }
1028+    },
1029+    "node_modules/semver": {
1030+      "version": "7.7.4",
1031+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz",
1032+      "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==",
1033+      "dev": true,
1034+      "bin": {
1035+        "semver": "bin/semver.js"
1036+      },
1037+      "engines": {
1038+        "node": ">=10"
1039+      }
1040+    },
1041+    "node_modules/shebang-command": {
1042+      "version": "2.0.0",
1043+      "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
1044+      "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
1045+      "dev": true,
1046+      "dependencies": {
1047+        "shebang-regex": "^3.0.0"
1048+      },
1049+      "engines": {
1050+        "node": ">=8"
1051+      }
1052+    },
1053+    "node_modules/shebang-regex": {
1054+      "version": "3.0.0",
1055+      "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
1056+      "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
1057+      "dev": true,
1058+      "engines": {
1059+        "node": ">=8"
1060+      }
1061+    },
1062+    "node_modules/tinyglobby": {
1063+      "version": "0.2.15",
1064+      "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz",
1065+      "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==",
1066+      "dev": true,
1067+      "dependencies": {
1068+        "fdir": "^6.5.0",
1069+        "picomatch": "^4.0.3"
1070+      },
1071+      "engines": {
1072+        "node": ">=12.0.0"
1073+      },
1074+      "funding": {
1075+        "url": "https://github.com/sponsors/SuperchupuDev"
1076+      }
1077+    },
1078+    "node_modules/ts-api-utils": {
1079+      "version": "2.5.0",
1080+      "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.5.0.tgz",
1081+      "integrity": "sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==",
1082+      "dev": true,
1083+      "engines": {
1084+        "node": ">=18.12"
1085+      },
1086+      "peerDependencies": {
1087+        "typescript": ">=4.8.4"
1088+      }
1089+    },
1090+    "node_modules/type-check": {
1091+      "version": "0.4.0",
1092+      "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
1093+      "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
1094+      "dev": true,
1095+      "dependencies": {
1096+        "prelude-ls": "^1.2.1"
1097+      },
1098+      "engines": {
1099+        "node": ">= 0.8.0"
1100+      }
1101+    },
1102+    "node_modules/typescript": {
1103+      "version": "5.9.3",
1104+      "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz",
1105+      "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==",
1106+      "dev": true,
1107+      "bin": {
1108+        "tsc": "bin/tsc",
1109+        "tsserver": "bin/tsserver"
1110+      },
1111+      "engines": {
1112+        "node": ">=14.17"
1113+      }
1114+    },
1115+    "node_modules/typescript-eslint": {
1116+      "version": "8.57.1",
1117+      "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.57.1.tgz",
1118+      "integrity": "sha512-fLvZWf+cAGw3tqMCYzGIU6yR8K+Y9NT2z23RwOjlNFF2HwSB3KhdEFI5lSBv8tNmFkkBShSjsCjzx1vahZfISA==",
1119+      "dev": true,
1120+      "dependencies": {
1121+        "@typescript-eslint/eslint-plugin": "8.57.1",
1122+        "@typescript-eslint/parser": "8.57.1",
1123+        "@typescript-eslint/typescript-estree": "8.57.1",
1124+        "@typescript-eslint/utils": "8.57.1"
1125+      },
1126+      "engines": {
1127+        "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
1128+      },
1129+      "funding": {
1130+        "type": "opencollective",
1131+        "url": "https://opencollective.com/typescript-eslint"
1132+      },
1133+      "peerDependencies": {
1134+        "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0",
1135+        "typescript": ">=4.8.4 <6.0.0"
1136+      }
1137+    },
1138+    "node_modules/uri-js": {
1139+      "version": "4.4.1",
1140+      "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
1141+      "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
1142+      "dev": true,
1143+      "dependencies": {
1144+        "punycode": "^2.1.0"
1145+      }
1146+    },
1147+    "node_modules/which": {
1148+      "version": "2.0.2",
1149+      "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
1150+      "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
1151+      "dev": true,
1152+      "dependencies": {
1153+        "isexe": "^2.0.0"
1154+      },
1155+      "bin": {
1156+        "node-which": "bin/node-which"
1157+      },
1158+      "engines": {
1159+        "node": ">= 8"
1160+      }
1161+    },
1162+    "node_modules/word-wrap": {
1163+      "version": "1.2.5",
1164+      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
1165+      "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
1166+      "dev": true,
1167+      "engines": {
1168+        "node": ">=0.10.0"
1169+      }
1170+    },
1171+    "node_modules/yocto-queue": {
1172+      "version": "0.1.0",
1173+      "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
1174+      "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
1175+      "dev": true,
1176+      "engines": {
1177+        "node": ">=10"
1178+      },
1179+      "funding": {
1180+        "url": "https://github.com/sponsors/sindresorhus"
1181+      }
1182+    }
1183+  }
1184+}
+27, -0
 1@@ -0,0 +1,27 @@
 2+{
 3+  "name": "rosetta-collatz",
 4+  "version": "1.0.0",
 5+  "description": "Collatz conjecture for TypeScript",
 6+  "type": "module",
 7+  "scripts": {
 8+    "test": "echo \"Error: no test specified\" && exit 1",
 9+    "build": "tsc -b",
10+    "format": "prettier --write .",
11+    "lint": "eslint --fix ."
12+  },
13+  "repository": {
14+    "type": "git",
15+    "url": "https://codeberg.org/amadaluzia/rosetta-collatz"
16+  },
17+  "author": "Artur Manuel",
18+  "license": "EUPL-1.2",
19+  "devDependencies": {
20+    "@eslint/js": "^10.0.1",
21+    "eslint": "^10.1.0",
22+    "globals": "^17.4.0",
23+    "jiti": "^2.6.1",
24+    "prettier": "^3.8.1",
25+    "typescript": "^5.9.3",
26+    "typescript-eslint": "^8.57.1"
27+  }
28+}
+26, -0
 1@@ -0,0 +1,26 @@
 2+export function collatz(n: number): number {
 3+  switch (n % 2) {
 4+    case 0:
 5+      return Math.floor(n / 2)
 6+    default:
 7+      return 3 * n + 1;
 8+  }
 9+}
10+
11+export function collatzSequence(n: number): string {
12+  let buffer = new String();
13+  buffer += `${n}: `;
14+  for (let i = n; i != 1; i = collatz(i))
15+    buffer += `${i}, `;
16+  buffer += "1";
17+  return buffer.toString();
18+}
19+
20+function main() {
21+  let buffer = new Array<string>();
22+  for (let i = 1; i <= 10_000; i++)
23+    buffer.push(`${collatzSequence(i)}`);
24+  console.log(buffer.join("\n"));
25+}
26+
27+main();
+45, -0
 1@@ -0,0 +1,45 @@
 2+{
 3+  // Visit https://aka.ms/tsconfig to read more about this file
 4+  "compilerOptions": {
 5+    // File Layout
 6+    "rootDir": "./src",
 7+    "outDir": "./dist",
 8+
 9+    // Environment Settings
10+    // See also https://aka.ms/tsconfig/module
11+    "module": "nodenext",
12+    "target": "esnext",
13+    "types": [],
14+    // For nodejs:
15+    // "lib": ["esnext"],
16+    // "types": ["node"],
17+    // and npm install -D @types/node
18+
19+    // Other Outputs
20+    "sourceMap": true,
21+    "declaration": true,
22+    "declarationMap": true,
23+
24+    // Stricter Typechecking Options
25+    "noUncheckedIndexedAccess": true,
26+    "exactOptionalPropertyTypes": true,
27+
28+    // Style Options
29+    // "noImplicitReturns": true,
30+    // "noImplicitOverride": true,
31+    // "noUnusedLocals": true,
32+    // "noUnusedParameters": true,
33+    // "noFallthroughCasesInSwitch": true,
34+    // "noPropertyAccessFromIndexSignature": true,
35+
36+    // Recommended Options
37+    "strict": true,
38+    "jsx": "react-jsx",
39+    "verbatimModuleSyntax": true,
40+    "isolatedModules": true,
41+    "noUncheckedSideEffectImports": true,
42+    "moduleDetection": "force",
43+    "skipLibCheck": true,
44+  },
45+  "include": ["src"]
46+}