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+}