From bd2672bc2fdb66bca762fe795398b9e8f20eef25 Mon Sep 17 00:00:00 2001 From: Mio Date: Thu, 27 Nov 2025 17:08:52 +1100 Subject: [PATCH 1/5] refactor: it is called predicate --- src/InductiveSet.res | 59 +++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 31 deletions(-) diff --git a/src/InductiveSet.res b/src/InductiveSet.res index 98c4b4c..454758f 100644 --- a/src/InductiveSet.res +++ b/src/InductiveSet.res @@ -18,7 +18,7 @@ module Make = ( onChange: (state, ~exports: Ports.t=?) => unit, } - type constructorGroup = { + type predicateGroup = { name: string, arity: int, rules: array<(string, Rule.t)>, @@ -26,7 +26,7 @@ module Make = ( let makeKey = (name, arity) => name ++ "§" ++ Int.toString(arity) - let extractConstructorSignature = (rule: Rule.t): option<(string, int)> => { + let extractPredicateSignature = (rule: Rule.t): option<(string, int)> => { let (head, args) = HOTerm.strip(rule.conclusion) switch head { | Symbol({name}) => Some((name, Array.length(args))) @@ -34,13 +34,13 @@ module Make = ( } } - let groupByConstructor = (rules: dict): array => + let groupByPredicate = (rules: dict): array => rules ->Dict.toArray ->Array.filterMap(((name, rule)) => - extractConstructorSignature(rule)->Option.map(sig => (name, rule, sig)) + extractPredicateSignature(rule)->Option.map(sig => (name, rule, sig)) ) - // Only allow type constructors with arity 1 + // Only allow predicates with arity 1 ->Array.filter(((_, _, (_cname, arity))) => arity == 1) ->Array.reduce(Dict.make(), (acc, (name, rule, (cname, arity))) => { let key = makeKey(cname, arity) @@ -48,15 +48,12 @@ module Make = ( acc }) ->Dict.valuesToArray - ->Array.map(constructors => { - let (_, firstRule) = constructors[0]->Option.getExn - let (name, arity) = extractConstructorSignature(firstRule)->Option.getExn - {name, arity, rules: constructors} + ->Array.map(predicates => { + let (_, firstRule) = predicates[0]->Option.getExn + let (name, arity) = extractPredicateSignature(firstRule)->Option.getExn + {name, arity, rules: predicates} }) - let generateInductionRule = ( - group: constructorGroup, - allGroups: array, - ): Rule.t => { + let generateInductionRule = (group: predicateGroup, allGroups: array): Rule.t => { let {name: str, arity: i} = group let numFormers = Array.length(allGroups) let groupIndex = mustFindIndex(allGroups, g => g.name == str && g.arity == i) @@ -134,10 +131,10 @@ module Make = ( } } - let isSelfReference = (group: constructorGroup, (name, arity)): bool => + let isSelfReference = (group: predicateGroup, (name, arity)): bool => name == group.name && arity == group.arity - let findDependencies = (group: constructorGroup): array<(string, int)> => + let findDependencies = (group: predicateGroup): array<(string, int)> => group.rules ->Array.flatMap(((_name, rule)) => rule.premises->Array.filterMap(extractInductiveType)) ->Array.filter(dep => !isSelfReference(group, dep)) @@ -145,7 +142,7 @@ module Make = ( let rec collectReachable = ( toVisit: array<(string, int)>, visited: Belt.Set.t, - allGroups: array, + allGroups: array, ): Belt.Set.t => switch toVisit { | [] => visited @@ -168,9 +165,9 @@ module Make = ( } let findMutuallyInductiveComponent = ( - targetGroup: constructorGroup, - allGroups: array, - ): array => { + targetGroup: predicateGroup, + allGroups: array, + ): array => { let reachableKeys = collectReachable( [(targetGroup.name, targetGroup.arity)], Belt.Set.make(~id=module(StringCmp)), @@ -179,18 +176,18 @@ module Make = ( allGroups->Array.filter(g => Belt.Set.has(reachableKeys, makeKey(g.name, g.arity))) } - let generateCasesRule = (group: constructorGroup): Rule.t => { + let generateCasesRule = (group: predicateGroup): Rule.t => { let {name: str, arity: _i} = group - let caseSubgoal = ((_constructorName: string, constructorRule: Rule.t)): Rule.t => { - let offset = Array.length(constructorRule.vars) + let caseSubgoal = ((_constructorName: string, predicateRule: Rule.t)): Rule.t => { + let offset = Array.length(predicateRule.vars) - // Extract the argument from the constructor conclusion + // Extract the argument from the predicate conclusion // e.g., from (Nat 0) extract 0, from (Nat (S n)) extract (S n) - let (_head, args) = HOTerm.strip(constructorRule.conclusion) - let constructorArg = switch args[0] { + let (_head, args) = HOTerm.strip(predicateRule.conclusion) + let predicateArg = switch args[0] { | Some(arg) => arg - | None => raise(Unreachable("Constructor conclusion must have one argument")) + | None => raise(Unreachable("Predicate conclusion must have one argument")) } let equalityPremise = { @@ -198,13 +195,13 @@ module Make = ( premises: [], conclusion: HOTerm.app( HOTerm.Symbol({name: "=", constructor: false}), - [HOTerm.Var({idx: offset}), constructorArg], + [HOTerm.Var({idx: offset}), predicateArg], ), } { - Rule.vars: constructorRule.vars, - premises: Array.concat([equalityPremise], constructorRule.premises), + Rule.vars: predicateRule.vars, + premises: Array.concat([equalityPremise], predicateRule.premises), conclusion: HOTerm.Var({idx: offset + 1}), } } @@ -230,9 +227,9 @@ module Make = ( let derived = (state: state): state => state - ->groupByConstructor + ->groupByPredicate ->Array.flatMap(group => { - let mutualComponent = findMutuallyInductiveComponent(group, groupByConstructor(state)) + let mutualComponent = findMutuallyInductiveComponent(group, groupByPredicate(state)) let inductionRule = generateInductionRule(group, mutualComponent) let casesRule = generateCasesRule(group) [("§induction-" ++ group.name, inductionRule), ("§cases-" ++ group.name, casesRule)] From 351e83843dd1109ae24bd51e76e2e947723422a8 Mon Sep 17 00:00:00 2001 From: Mio Date: Wed, 3 Dec 2025 14:44:42 +1100 Subject: [PATCH 2/5] chore: update dependencies major versions, including rescript 12 and vite 7 --- package-lock.json | 1204 +++++++++++++++++++++++++++++++++++---------- package.json | 12 +- 2 files changed, 937 insertions(+), 279 deletions(-) diff --git a/package-lock.json b/package-lock.json index e8ea81c..3c1b12e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,10 +9,10 @@ "version": "0.0.0", "dependencies": { "@jmagaram/rescript-seq": "^4.4.1", - "@rescript/react": "^0.13.1", + "@rescript/react": "^0.14.0", "react": "^19.1.0", "react-dom": "^19.1.0", - "rescript": "^11.1.4" + "rescript": "^12.0.0" }, "devDependencies": { "@dusty-phillips/rescript-zora": "^5.0.1", @@ -21,18 +21,259 @@ "@rescript/std": "^11.1.4", "@types/react": "^19.1.2", "@types/react-dom": "^19.1.2", - "@vitejs/plugin-react-swc": "^3.9.0", + "@vitejs/plugin-react-swc": "^4.2.2", "eslint": "^9.25.0", - "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.19", "globals": "^16.0.0", "husky": "^9.1.7", "lint-staged": "^16.2.3", "onchange": "^7.1.0", "pta": "^1.3.0", - "typescript": "~5.8.3", + "typescript": "^5.9.3", "typescript-eslint": "^8.30.1", - "vite": "^6.3.5" + "vite": "^7.2.6" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", + "integrity": "sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.28.5.tgz", + "integrity": "sha512-6uFXyCayocRbqhZOB+6XcuZbkMNimwfVGFji8CTZnCzOHVGvDqzvitu1re2AU5LROliz7eQPhB8CpAMvnx9EjA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.28.5.tgz", + "integrity": "sha512-e7jT4DxYvIDLk1ZHmU/m/mB19rex9sv0c2ftBtjSBv+kVM/902eh0fINUzD7UwLLNR+jU585GxUJ8/EBfAM5fw==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.28.3", + "@babel/helpers": "^7.28.4", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.28.5.tgz", + "integrity": "sha512-3EwLFhZ38J4VyIP6WNtt2kUdW9dokXA9Cr4IVIFHuCpZ3H8/YFOl5JjZHisrn1fATPBmKKqXzDFvh9fUwHz6CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.28.5", + "@babel/types": "^7.28.5", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.2.tgz", + "integrity": "sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz", + "integrity": "sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.3.tgz", + "integrity": "sha512-gytXUbs8k2sXS9PnQptz5o0QnpLL51SwASIORY6XaBKF88nsOT0Zw9szLqlSGQDP/4TljBAD5y98p2U1fqkdsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.28.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.28.4.tgz", + "integrity": "sha512-HFN59MmQXGHVyYadKLVumYsA9dBFun/ldYxipEjzA4196jpLZd8UjEEBLkbEkvfYreDqJhZxYAWFPtrfhNpj4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.28.5.tgz", + "integrity": "sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.28.5" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/template": { + "version": "7.27.2", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.27.2.tgz", + "integrity": "sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.28.5.tgz", + "integrity": "sha512-TCCj4t55U90khlYkVV/0TfkJkAkUg3jZFA3Neb7unZT8CPok7iiRfaX0F+WnqWqt7OxhOn0uBKXCw4lbL8W0aQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.5", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.5", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.5", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.28.5.tgz", + "integrity": "sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" } }, "node_modules/@blakeembrey/deque": { @@ -593,9 +834,9 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -605,7 +846,7 @@ "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, @@ -728,6 +969,71 @@ "rescript": "^11.0.1" } }, + "node_modules/@jmagaram/rescript-seq/node_modules/rescript": { + "version": "11.1.4", + "resolved": "https://registry.npmjs.org/rescript/-/rescript-11.1.4.tgz", + "integrity": "sha512-0bGU0bocihjSC6MsE3TMjHjY0EUpchyrREquLS8VsZ3ohSMD+VHUEwimEfB3kpBI1vYkw3UFZ3WD8R28guz/Vw==", + "hasInstallScript": true, + "license": "SEE LICENSE IN LICENSE", + "bin": { + "bsc": "bsc", + "bstracing": "lib/bstracing", + "rescript": "rescript" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -775,16 +1081,81 @@ "rescript": ">=11.1.0" } }, + "node_modules/@rescript/darwin-arm64": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@rescript/darwin-arm64/-/darwin-arm64-12.0.0.tgz", + "integrity": "sha512-N2zNj/Uh0zrg8BJGWxdQjYTDf0d2ZV8D+Vmct8xORaUcEZvAkvZb+xA66UxP2QGhWmATcHmBth7oJ48xpWz/Vg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@rescript/darwin-x64": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@rescript/darwin-x64/-/darwin-x64-12.0.0.tgz", + "integrity": "sha512-Qx/ao3Fl2lx3rF8mbRsyRK5HGAx8pmzyCdpSIAaUun5wLBnsJbNqgvqUH7VeI2TwaczHvcIljrYmnB7T5LJdFQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@rescript/linux-arm64": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@rescript/linux-arm64/-/linux-arm64-12.0.0.tgz", + "integrity": "sha512-H65csj/0uqqjYy235m0h5CFxbrsas6RoVfjy5Xjf91Vyg/r5R/QIGQvhMtFvl4QojYsa1wXzXGcujwXh+S15xQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.11.0" + } + }, + "node_modules/@rescript/linux-x64": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@rescript/linux-x64/-/linux-x64-12.0.0.tgz", + "integrity": "sha512-WizQwyfMadxF096foZYU3I4zxcnNIc9XP7TP4fqdfe0v6OvQ5yHMI/uIfOsJ1GfNALce2UxvgS0pn67uxc55uA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=20.11.0" + } + }, "node_modules/@rescript/react": { - "version": "0.13.1", - "resolved": "https://registry.npmjs.org/@rescript/react/-/react-0.13.1.tgz", - "integrity": "sha512-VIWtu/sAJyYmDVoAhit0LHDYQrW6RqZ6z8sh8san5cjEAT4klv8JWkiaSK3FGUfooUDkGUXXgKTkqyj8zRR21w==", + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@rescript/react/-/react-0.14.0.tgz", + "integrity": "sha512-ncOHWK7ujQmff+QMYKRmtwETvJVolzkwRpDa0MFenEXdUz9ZYywNbq+xH9F9RDQeSwC3/4s9JeUQVyTu4fMpHw==", "license": "MIT", "peerDependencies": { - "react": ">=18.0.0", - "react-dom": ">=18.0.0" + "react": ">=19.0.0", + "react-dom": ">=19.0.0" } }, + "node_modules/@rescript/runtime": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@rescript/runtime/-/runtime-12.0.0.tgz", + "integrity": "sha512-STRbYHT5rnW61vWn2+Bdtj620XaprnoBSbPbkvOYZ+Zs8nfqtpBjhNw+JNpGQLXf73crk6MhxFGPxL2o5vb8TQ==" + }, "node_modules/@rescript/std": { "version": "11.1.4", "resolved": "https://registry.npmjs.org/@rescript/std/-/std-11.1.4.tgz", @@ -792,17 +1163,32 @@ "dev": true, "license": "SEE LICENSE IN LICENSE" }, + "node_modules/@rescript/win32-x64": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@rescript/win32-x64/-/win32-x64-12.0.0.tgz", + "integrity": "sha512-kkqj4kQGbni5YglWoPm76M6hUuzKJHDEiLce5EZxW2Q4FrkS9dNRgm02c2Ck1cz/uKCS3m+ZoKQGIMMXTvo5Jw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=20.11.0" + } + }, "node_modules/@rolldown/pluginutils": { - "version": "1.0.0-beta.27", - "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.27.tgz", - "integrity": "sha512-+d0F4MKMCbeVUJwG96uQ4SgAznZNSq93I3V+9NHA4OpvqG8mRCpGdKmK8l/dl02h2CCDHwW2FqilnTyDcAnqjA==", + "version": "1.0.0-beta.47", + "resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.47.tgz", + "integrity": "sha512-8QagwMH3kNCuzD8EWL8R2YPW5e4OrHNSAHRFDdmFqEwEaD/KcNKjVoumo+gP2vW5eKB2UPbM6vTYiGZX0ixLnw==", "dev": true, "license": "MIT" }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.2.tgz", - "integrity": "sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.3.tgz", + "integrity": "sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==", "cpu": [ "arm" ], @@ -814,9 +1200,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.2.tgz", - "integrity": "sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.3.tgz", + "integrity": "sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==", "cpu": [ "arm64" ], @@ -828,9 +1214,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.2.tgz", - "integrity": "sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.3.tgz", + "integrity": "sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==", "cpu": [ "arm64" ], @@ -842,9 +1228,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.2.tgz", - "integrity": "sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.3.tgz", + "integrity": "sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==", "cpu": [ "x64" ], @@ -856,9 +1242,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.2.tgz", - "integrity": "sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.3.tgz", + "integrity": "sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==", "cpu": [ "arm64" ], @@ -870,9 +1256,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.2.tgz", - "integrity": "sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.3.tgz", + "integrity": "sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==", "cpu": [ "x64" ], @@ -884,9 +1270,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.2.tgz", - "integrity": "sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.3.tgz", + "integrity": "sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==", "cpu": [ "arm" ], @@ -898,9 +1284,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.2.tgz", - "integrity": "sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.3.tgz", + "integrity": "sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==", "cpu": [ "arm" ], @@ -912,9 +1298,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.2.tgz", - "integrity": "sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.3.tgz", + "integrity": "sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==", "cpu": [ "arm64" ], @@ -926,9 +1312,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.2.tgz", - "integrity": "sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.3.tgz", + "integrity": "sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==", "cpu": [ "arm64" ], @@ -940,9 +1326,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.2.tgz", - "integrity": "sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.3.tgz", + "integrity": "sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==", "cpu": [ "loong64" ], @@ -954,9 +1340,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.2.tgz", - "integrity": "sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.3.tgz", + "integrity": "sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==", "cpu": [ "ppc64" ], @@ -968,9 +1354,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.2.tgz", - "integrity": "sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.3.tgz", + "integrity": "sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==", "cpu": [ "riscv64" ], @@ -982,9 +1368,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.2.tgz", - "integrity": "sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.3.tgz", + "integrity": "sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==", "cpu": [ "riscv64" ], @@ -996,9 +1382,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.2.tgz", - "integrity": "sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.3.tgz", + "integrity": "sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==", "cpu": [ "s390x" ], @@ -1010,9 +1396,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.2.tgz", - "integrity": "sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.3.tgz", + "integrity": "sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==", "cpu": [ "x64" ], @@ -1024,9 +1410,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.2.tgz", - "integrity": "sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.3.tgz", + "integrity": "sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==", "cpu": [ "x64" ], @@ -1038,9 +1424,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.2.tgz", - "integrity": "sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.3.tgz", + "integrity": "sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==", "cpu": [ "arm64" ], @@ -1052,9 +1438,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.2.tgz", - "integrity": "sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.3.tgz", + "integrity": "sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==", "cpu": [ "arm64" ], @@ -1066,9 +1452,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.2.tgz", - "integrity": "sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.3.tgz", + "integrity": "sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==", "cpu": [ "ia32" ], @@ -1080,9 +1466,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.2.tgz", - "integrity": "sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.3.tgz", + "integrity": "sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==", "cpu": [ "x64" ], @@ -1094,9 +1480,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.2.tgz", - "integrity": "sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.3.tgz", + "integrity": "sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==", "cpu": [ "x64" ], @@ -1121,9 +1507,9 @@ } }, "node_modules/@swc/core": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.1.tgz", - "integrity": "sha512-s9GN3M2jA32k+StvuS9uGe4ztf5KVGBdlJMMC6LR6Ah23Lq/CWKVcC3WeQi8qaAcLd+DiddoNCNMUWymLv+wWQ==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core/-/core-1.15.3.tgz", + "integrity": "sha512-Qd8eBPkUFL4eAONgGjycZXj1jFCBW8Fd+xF0PzdTlBCWQIV1xnUT7B93wUANtW3KGjl3TRcOyxwSx/u/jyKw/Q==", "dev": true, "hasInstallScript": true, "license": "Apache-2.0", @@ -1139,16 +1525,16 @@ "url": "https://opencollective.com/swc" }, "optionalDependencies": { - "@swc/core-darwin-arm64": "1.15.1", - "@swc/core-darwin-x64": "1.15.1", - "@swc/core-linux-arm-gnueabihf": "1.15.1", - "@swc/core-linux-arm64-gnu": "1.15.1", - "@swc/core-linux-arm64-musl": "1.15.1", - "@swc/core-linux-x64-gnu": "1.15.1", - "@swc/core-linux-x64-musl": "1.15.1", - "@swc/core-win32-arm64-msvc": "1.15.1", - "@swc/core-win32-ia32-msvc": "1.15.1", - "@swc/core-win32-x64-msvc": "1.15.1" + "@swc/core-darwin-arm64": "1.15.3", + "@swc/core-darwin-x64": "1.15.3", + "@swc/core-linux-arm-gnueabihf": "1.15.3", + "@swc/core-linux-arm64-gnu": "1.15.3", + "@swc/core-linux-arm64-musl": "1.15.3", + "@swc/core-linux-x64-gnu": "1.15.3", + "@swc/core-linux-x64-musl": "1.15.3", + "@swc/core-win32-arm64-msvc": "1.15.3", + "@swc/core-win32-ia32-msvc": "1.15.3", + "@swc/core-win32-x64-msvc": "1.15.3" }, "peerDependencies": { "@swc/helpers": ">=0.5.17" @@ -1160,9 +1546,9 @@ } }, "node_modules/@swc/core-darwin-arm64": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.1.tgz", - "integrity": "sha512-vEPrVxegWIjKEz+1VCVuKRY89jhokhSmQ/YXBWLnmLj9cI08G61RTZJvdsIcjYUjjTu7NgZlYVK+b2y0fbh11g==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-arm64/-/core-darwin-arm64-1.15.3.tgz", + "integrity": "sha512-AXfeQn0CvcQ4cndlIshETx6jrAM45oeUrK8YeEY6oUZU/qzz0Id0CyvlEywxkWVC81Ajpd8TQQ1fW5yx6zQWkQ==", "cpu": [ "arm64" ], @@ -1177,9 +1563,9 @@ } }, "node_modules/@swc/core-darwin-x64": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.1.tgz", - "integrity": "sha512-z9QguKxE3aldvwKHHDg5OlKehasbJBF1lacn5CnN6SlrHbdwokXHFA3nIoO3Bh1Tw7bCgFtdIR4jKlTTn3kBZA==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-darwin-x64/-/core-darwin-x64-1.15.3.tgz", + "integrity": "sha512-p68OeCz1ui+MZYG4wmfJGvcsAcFYb6Sl25H9TxWl+GkBgmNimIiRdnypK9nBGlqMZAcxngNPtnG3kEMNnvoJ2A==", "cpu": [ "x64" ], @@ -1194,9 +1580,9 @@ } }, "node_modules/@swc/core-linux-arm-gnueabihf": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.1.tgz", - "integrity": "sha512-yS2FHA8E4YeiPG9YeYk/6mKiCWuXR5RdYlCmtlGzKcjWbI4GXUVe7+p9C0M6myRt3zdj3M1knmJxk52MQA9EZQ==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.15.3.tgz", + "integrity": "sha512-Nuj5iF4JteFgwrai97mUX+xUOl+rQRHqTvnvHMATL/l9xE6/TJfPBpd3hk/PVpClMXG3Uvk1MxUFOEzM1JrMYg==", "cpu": [ "arm" ], @@ -1211,9 +1597,9 @@ } }, "node_modules/@swc/core-linux-arm64-gnu": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.1.tgz", - "integrity": "sha512-IFrjDu7+5Y61jLsUqBVXlXutDoPBX10eEeNTjW6C1yzm+cSTE7ayiKXMIFri4gEZ4VpXS6MUgkwjxtDpIXTh+w==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.15.3.tgz", + "integrity": "sha512-2Nc/s8jE6mW2EjXWxO/lyQuLKShcmTrym2LRf5Ayp3ICEMX6HwFqB1EzDhwoMa2DcUgmnZIalesq2lG3krrUNw==", "cpu": [ "arm64" ], @@ -1228,9 +1614,9 @@ } }, "node_modules/@swc/core-linux-arm64-musl": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.1.tgz", - "integrity": "sha512-fKzP9mRQGbhc5QhJPIsqKNNX/jyWrZgBxmo3Nz1SPaepfCUc7RFmtcJQI5q8xAun3XabXjh90wqcY/OVyg2+Kg==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.15.3.tgz", + "integrity": "sha512-j4SJniZ/qaZ5g8op+p1G9K1z22s/EYGg1UXIb3+Cg4nsxEpF5uSIGEE4mHUfA70L0BR9wKT2QF/zv3vkhfpX4g==", "cpu": [ "arm64" ], @@ -1245,9 +1631,9 @@ } }, "node_modules/@swc/core-linux-x64-gnu": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.1.tgz", - "integrity": "sha512-ZLjMi138uTJxb+1wzo4cB8mIbJbAsSLWRNeHc1g1pMvkERPWOGlem+LEYkkzaFzCNv1J8aKcL653Vtw8INHQeg==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.15.3.tgz", + "integrity": "sha512-aKttAZnz8YB1VJwPQZtyU8Uk0BfMP63iDMkvjhJzRZVgySmqt/apWSdnoIcZlUoGheBrcqbMC17GGUmur7OT5A==", "cpu": [ "x64" ], @@ -1262,9 +1648,9 @@ } }, "node_modules/@swc/core-linux-x64-musl": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.1.tgz", - "integrity": "sha512-jvSI1IdsIYey5kOITzyajjofXOOySVitmLxb45OPUjoNojql4sDojvlW5zoHXXFePdA6qAX4Y6KbzAOV3T3ctA==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.15.3.tgz", + "integrity": "sha512-oe8FctPu1gnUsdtGJRO2rvOUIkkIIaHqsO9xxN0bTR7dFTlPTGi2Fhk1tnvXeyAvCPxLIcwD8phzKg6wLv9yug==", "cpu": [ "x64" ], @@ -1279,9 +1665,9 @@ } }, "node_modules/@swc/core-win32-arm64-msvc": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.1.tgz", - "integrity": "sha512-X/FcDtNrDdY9r4FcXHt9QxUqC/2FbQdvZobCKHlHe8vTSKhUHOilWl5EBtkFVfsEs4D5/yAri9e3bJbwyBhhBw==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.15.3.tgz", + "integrity": "sha512-L9AjzP2ZQ/Xh58e0lTRMLvEDrcJpR7GwZqAtIeNLcTK7JVE+QineSyHp0kLkO1rttCHyCy0U74kDTj0dRz6raA==", "cpu": [ "arm64" ], @@ -1296,9 +1682,9 @@ } }, "node_modules/@swc/core-win32-ia32-msvc": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.1.tgz", - "integrity": "sha512-vfheiWBux8PpC87oy1cshcqzgH7alWYpnVq5jWe7xuVkjqjGGDbBUKuS84eJCdsWcVaB5EXIWLKt+11W3/BOwA==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.15.3.tgz", + "integrity": "sha512-B8UtogMzErUPDWUoKONSVBdsgKYd58rRyv2sHJWKOIMCHfZ22FVXICR4O/VwIYtlnZ7ahERcjayBHDlBZpR0aw==", "cpu": [ "ia32" ], @@ -1313,9 +1699,9 @@ } }, "node_modules/@swc/core-win32-x64-msvc": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.1.tgz", - "integrity": "sha512-n3Ppn0LSov/IdlANq+8kxHqENuJRX5XtwQqPgQsgwKIcFq22u17NKfDs9vL5PwRsEHY6Xd67pnOqQX0h4AvbuQ==", + "version": "1.15.3", + "resolved": "https://registry.npmjs.org/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.15.3.tgz", + "integrity": "sha512-SpZKMR9QBTecHeqpzJdYEfgw30Oo8b/Xl6rjSzBt1g0ZsXyy60KLXrp6IagQyfTYqNYE/caDvwtF2FPn7pomog==", "cpu": [ "x64" ], @@ -1361,14 +1747,14 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "19.2.3", - "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.3.tgz", - "integrity": "sha512-k5dJVszUiNr1DSe8Cs+knKR6IrqhqdhpUwzqhkS8ecQTSf3THNtbfIp/umqHMpX2bv+9dkx3fwDv/86LcSfvSg==", + "version": "19.2.7", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.7.tgz", + "integrity": "sha512-MWtvHrGZLFttgeEj28VXHxpmwYbor/ATPYbBfSFZEIRK0ecCFLl2Qo55z52Hss+UV9CRN7trSeq1zbgx7YDWWg==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/react-dom": { @@ -1382,17 +1768,17 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.4.tgz", - "integrity": "sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg==", + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.48.1.tgz", + "integrity": "sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/type-utils": "8.46.4", - "@typescript-eslint/utils": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/scope-manager": "8.48.1", + "@typescript-eslint/type-utils": "8.48.1", + "@typescript-eslint/utils": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1", "graphemer": "^1.4.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", @@ -1406,7 +1792,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.46.4", + "@typescript-eslint/parser": "^8.48.1", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -1422,17 +1808,17 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.4.tgz", - "integrity": "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==", + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.48.1.tgz", + "integrity": "sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/scope-manager": "8.48.1", + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1", "debug": "^4.3.4" }, "engines": { @@ -1448,14 +1834,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.4.tgz", - "integrity": "sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==", + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.48.1.tgz", + "integrity": "sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.4", - "@typescript-eslint/types": "^8.46.4", + "@typescript-eslint/tsconfig-utils": "^8.48.1", + "@typescript-eslint/types": "^8.48.1", "debug": "^4.3.4" }, "engines": { @@ -1470,14 +1856,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.4.tgz", - "integrity": "sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==", + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.48.1.tgz", + "integrity": "sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4" + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1488,9 +1874,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.4.tgz", - "integrity": "sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==", + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.48.1.tgz", + "integrity": "sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==", "dev": true, "license": "MIT", "engines": { @@ -1505,15 +1891,15 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.4.tgz", - "integrity": "sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ==", + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.48.1.tgz", + "integrity": "sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4", - "@typescript-eslint/utils": "8.46.4", + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1", + "@typescript-eslint/utils": "8.48.1", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -1530,9 +1916,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.4.tgz", - "integrity": "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==", + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.48.1.tgz", + "integrity": "sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==", "dev": true, "license": "MIT", "engines": { @@ -1544,21 +1930,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.4.tgz", - "integrity": "sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==", + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.48.1.tgz", + "integrity": "sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.46.4", - "@typescript-eslint/tsconfig-utils": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/project-service": "8.48.1", + "@typescript-eslint/tsconfig-utils": "8.48.1", + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/visitor-keys": "8.48.1", "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", + "tinyglobby": "^0.2.15", "ts-api-utils": "^2.1.0" }, "engines": { @@ -1598,17 +1983,30 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@typescript-eslint/utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.4.tgz", - "integrity": "sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==", + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.48.1.tgz", + "integrity": "sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4" + "@typescript-eslint/scope-manager": "8.48.1", + "@typescript-eslint/types": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1623,13 +2021,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.4.tgz", - "integrity": "sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==", + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.48.1.tgz", + "integrity": "sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/types": "8.48.1", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -1641,14 +2039,17 @@ } }, "node_modules/@vitejs/plugin-react-swc": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-3.11.0.tgz", - "integrity": "sha512-YTJCGFdNMHCMfjODYtxRNVAYmTWQ1Lb8PulP/2/f/oEEtglw8oKxKIZmmRkyXrVrHfsKOaVkAc3NT9/dMutO5w==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react-swc/-/plugin-react-swc-4.2.2.tgz", + "integrity": "sha512-x+rE6tsxq/gxrEJN3Nv3dIV60lFflPj94c90b+NNo6n1QV1QQUTLoL0MpaOVasUZ0zqVBn7ead1B5ecx1JAGfA==", "dev": true, "license": "MIT", "dependencies": { - "@rolldown/pluginutils": "1.0.0-beta.27", - "@swc/core": "^1.12.11" + "@rolldown/pluginutils": "1.0.0-beta.47", + "@swc/core": "^1.13.5" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" }, "peerDependencies": { "vite": "^4 || ^5 || ^6 || ^7" @@ -1775,6 +2176,16 @@ "dev": true, "license": "MIT" }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.32", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.32.tgz", + "integrity": "sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -1812,6 +2223,41 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.28.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", + "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.8.25", + "caniuse-lite": "^1.0.30001754", + "electron-to-chromium": "^1.5.249", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.1.4" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -1822,6 +2268,27 @@ "node": ">=6" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001757", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001757.tgz", + "integrity": "sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -1954,6 +2421,13 @@ "dev": true, "license": "MIT" }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true, + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -1970,9 +2444,9 @@ } }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", "dev": true, "license": "MIT" }, @@ -2011,6 +2485,13 @@ "node": ">=0.3.1" } }, + "node_modules/electron-to-chromium": { + "version": "1.5.263", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.263.tgz", + "integrity": "sha512-DrqJ11Knd+lo+dv+lltvfMDLU27g14LMdH2b0O3Pio4uk0x+z7OR+JrmyacTPN2M8w3BrZ7/RTwG3R9B7irPlg==", + "dev": true, + "license": "ISC" + }, "node_modules/emoji-regex": { "version": "10.6.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", @@ -2073,6 +2554,16 @@ "@esbuild/win32-x64": "0.25.12" } }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -2148,13 +2639,20 @@ } }, "node_modules/eslint-plugin-react-hooks": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", - "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-7.0.1.tgz", + "integrity": "sha512-O0d0m04evaNzEPoSW+59Mezf8Qt0InfgGIBJnpC0h3NH/WjUAR7BIKUfysC6todmtiZ/A0oUVS8Gce0WhBrHsA==", "dev": true, "license": "MIT", + "dependencies": { + "@babel/core": "^7.24.4", + "@babel/parser": "^7.24.4", + "hermes-parser": "^0.25.1", + "zod": "^3.25.0 || ^4.0.0", + "zod-validation-error": "^3.5.0 || ^4.0.0" + }, "engines": { - "node": ">=10" + "node": ">=18" }, "peerDependencies": { "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" @@ -2411,6 +2909,16 @@ "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/get-east-asian-width": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", @@ -2498,6 +3006,23 @@ "node": ">=8" } }, + "node_modules/hermes-estree": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.25.1.tgz", + "integrity": "sha512-0wUoCcLp+5Ev5pDW2OriHC2MJCbwLwuRx+gAqMTOkGKJJiBCLjtrvy4PWUGn6MIVefecRpzoOZ/UV6iGdOr+Cw==", + "dev": true, + "license": "MIT" + }, + "node_modules/hermes-parser": { + "version": "0.25.1", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.25.1.tgz", + "integrity": "sha512-6pEjquH3rqaI6cYAXYPcz9MS4rY6R4ngRgrgfDshRptUZIc3lw0MCIJIGDj9++mfySOuPTHB4nrSW99BCvOPIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "hermes-estree": "0.25.1" + } + }, "node_modules/husky": { "version": "9.1.7", "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", @@ -2620,10 +3145,17 @@ "dev": true, "license": "ISC" }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -2633,6 +3165,19 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", @@ -2654,6 +3199,19 @@ "dev": true, "license": "MIT" }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -2679,13 +3237,13 @@ } }, "node_modules/lint-staged": { - "version": "16.2.6", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.6.tgz", - "integrity": "sha512-s1gphtDbV4bmW1eylXpVMk2u7is7YsrLl8hzrtvC70h4ByhcMLZFY01Fx05ZUDNuv1H8HO4E+e2zgejV1jVwNw==", + "version": "16.2.7", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.2.7.tgz", + "integrity": "sha512-lDIj4RnYmK7/kXMya+qJsmkRFkGolciXjrsZ6PC25GdTfWOAWetR0ZbsNXRAj1EHHImRSalc+whZFg56F5DVow==", "dev": true, "license": "MIT", "dependencies": { - "commander": "^14.0.1", + "commander": "^14.0.2", "listr2": "^9.0.5", "micromatch": "^4.0.8", "nano-spawn": "^2.0.0", @@ -2764,6 +3322,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2860,6 +3428,13 @@ "dev": true, "license": "MIT" }, + "node_modules/node-releases": { + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", + "dev": true, + "license": "MIT" + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -3166,19 +3741,40 @@ } }, "node_modules/rescript": { - "version": "11.1.4", - "resolved": "https://registry.npmjs.org/rescript/-/rescript-11.1.4.tgz", - "integrity": "sha512-0bGU0bocihjSC6MsE3TMjHjY0EUpchyrREquLS8VsZ3ohSMD+VHUEwimEfB3kpBI1vYkw3UFZ3WD8R28guz/Vw==", - "hasInstallScript": true, + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/rescript/-/rescript-12.0.0.tgz", + "integrity": "sha512-DGcZI2L5W0c6FuEnspLE0MIe1UtTt1VsW/vQfzBFCEBxSsQtoA6YRHUB8Puwnb30PHqZiFK1ADhn6UgA8LWK0A==", "license": "SEE LICENSE IN LICENSE", "peer": true, + "workspaces": [ + "packages/playground", + "packages/@rescript/*", + "tests/dependencies/**", + "tests/analysis_tests/**", + "tests/docstring_tests", + "tests/gentype_tests/**", + "tests/tools_tests", + "scripts/res" + ], + "dependencies": { + "@rescript/runtime": "12.0.0" + }, "bin": { - "bsc": "bsc", - "bstracing": "lib/bstracing", - "rescript": "rescript" + "bsc": "cli/bsc.js", + "bstracing": "cli/bstracing.js", + "rescript": "cli/rescript.js", + "rescript-legacy": "cli/rescript-legacy.js", + "rescript-tools": "cli/rescript-tools.js" }, "engines": { - "node": ">=10" + "node": ">=20.11.0" + }, + "optionalDependencies": { + "@rescript/darwin-arm64": "12.0.0", + "@rescript/darwin-x64": "12.0.0", + "@rescript/linux-arm64": "12.0.0", + "@rescript/linux-x64": "12.0.0", + "@rescript/win32-x64": "12.0.0" } }, "node_modules/resolve-from": { @@ -3227,9 +3823,9 @@ "license": "MIT" }, "node_modules/rollup": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.2.tgz", - "integrity": "sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==", + "version": "4.53.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.3.tgz", + "integrity": "sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==", "dev": true, "license": "MIT", "dependencies": { @@ -3243,28 +3839,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.53.2", - "@rollup/rollup-android-arm64": "4.53.2", - "@rollup/rollup-darwin-arm64": "4.53.2", - "@rollup/rollup-darwin-x64": "4.53.2", - "@rollup/rollup-freebsd-arm64": "4.53.2", - "@rollup/rollup-freebsd-x64": "4.53.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.53.2", - "@rollup/rollup-linux-arm-musleabihf": "4.53.2", - "@rollup/rollup-linux-arm64-gnu": "4.53.2", - "@rollup/rollup-linux-arm64-musl": "4.53.2", - "@rollup/rollup-linux-loong64-gnu": "4.53.2", - "@rollup/rollup-linux-ppc64-gnu": "4.53.2", - "@rollup/rollup-linux-riscv64-gnu": "4.53.2", - "@rollup/rollup-linux-riscv64-musl": "4.53.2", - "@rollup/rollup-linux-s390x-gnu": "4.53.2", - "@rollup/rollup-linux-x64-gnu": "4.53.2", - "@rollup/rollup-linux-x64-musl": "4.53.2", - "@rollup/rollup-openharmony-arm64": "4.53.2", - "@rollup/rollup-win32-arm64-msvc": "4.53.2", - "@rollup/rollup-win32-ia32-msvc": "4.53.2", - "@rollup/rollup-win32-x64-gnu": "4.53.2", - "@rollup/rollup-win32-x64-msvc": "4.53.2", + "@rollup/rollup-android-arm-eabi": "4.53.3", + "@rollup/rollup-android-arm64": "4.53.3", + "@rollup/rollup-darwin-arm64": "4.53.3", + "@rollup/rollup-darwin-x64": "4.53.3", + "@rollup/rollup-freebsd-arm64": "4.53.3", + "@rollup/rollup-freebsd-x64": "4.53.3", + "@rollup/rollup-linux-arm-gnueabihf": "4.53.3", + "@rollup/rollup-linux-arm-musleabihf": "4.53.3", + "@rollup/rollup-linux-arm64-gnu": "4.53.3", + "@rollup/rollup-linux-arm64-musl": "4.53.3", + "@rollup/rollup-linux-loong64-gnu": "4.53.3", + "@rollup/rollup-linux-ppc64-gnu": "4.53.3", + "@rollup/rollup-linux-riscv64-gnu": "4.53.3", + "@rollup/rollup-linux-riscv64-musl": "4.53.3", + "@rollup/rollup-linux-s390x-gnu": "4.53.3", + "@rollup/rollup-linux-x64-gnu": "4.53.3", + "@rollup/rollup-linux-x64-musl": "4.53.3", + "@rollup/rollup-openharmony-arm64": "4.53.3", + "@rollup/rollup-win32-arm64-msvc": "4.53.3", + "@rollup/rollup-win32-ia32-msvc": "4.53.3", + "@rollup/rollup-win32-x64-gnu": "4.53.3", + "@rollup/rollup-win32-x64-msvc": "4.53.3", "fsevents": "~2.3.2" } }, @@ -3299,16 +3895,13 @@ "license": "MIT" }, "node_modules/semver": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", - "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, "license": "ISC", "bin": { "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/shebang-command": { @@ -3568,9 +4161,9 @@ } }, "node_modules/typescript": { - "version": "5.8.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", - "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "version": "5.9.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.3.tgz", + "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "dev": true, "license": "Apache-2.0", "peer": true, @@ -3583,16 +4176,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.4.tgz", - "integrity": "sha512-KALyxkpYV5Ix7UhvjTwJXZv76VWsHG+NjNlt/z+a17SOQSiOcBdUXdbJdyXi7RPxrBFECtFOiPwUJQusJuCqrg==", + "version": "8.48.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.48.1.tgz", + "integrity": "sha512-FbOKN1fqNoXp1hIl5KYpObVrp0mCn+CLgn479nmu2IsRMrx2vyv74MmsBLVlhg8qVwNFGbXSp8fh1zp8pEoC2A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.46.4", - "@typescript-eslint/parser": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4", - "@typescript-eslint/utils": "8.46.4" + "@typescript-eslint/eslint-plugin": "8.48.1", + "@typescript-eslint/parser": "8.48.1", + "@typescript-eslint/typescript-estree": "8.48.1", + "@typescript-eslint/utils": "8.48.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3619,6 +4212,37 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/update-browserslist-db": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", + "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -3630,25 +4254,25 @@ } }, "node_modules/vite": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/vite/-/vite-6.4.1.tgz", - "integrity": "sha512-+Oxm7q9hDoLMyJOYfUYBuHQo+dkAloi33apOPP56pzj+vsdJDzr+j1NISE5pyaAuKL4A3UD34qd0lx5+kfKp2g==", + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/vite/-/vite-7.2.6.tgz", + "integrity": "sha512-tI2l/nFHC5rLh7+5+o7QjKjSR04ivXDF4jcgV0f/bTQ+OJiITy5S6gaynVsEM+7RqzufMnVbIon6Sr5x1SDYaQ==", "dev": true, "license": "MIT", "peer": true, "dependencies": { "esbuild": "^0.25.0", - "fdir": "^6.4.4", - "picomatch": "^4.0.2", - "postcss": "^8.5.3", - "rollup": "^4.34.9", - "tinyglobby": "^0.2.13" + "fdir": "^6.5.0", + "picomatch": "^4.0.3", + "postcss": "^8.5.6", + "rollup": "^4.43.0", + "tinyglobby": "^0.2.15" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || ^20.0.0 || >=22.0.0" + "node": "^20.19.0 || >=22.12.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -3657,14 +4281,14 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@types/node": "^20.19.0 || >=22.12.0", "jiti": ">=1.21.0", - "less": "*", + "less": "^4.0.0", "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" @@ -3812,10 +4436,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true, + "license": "ISC" + }, "node_modules/yaml": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", - "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "dev": true, "license": "ISC", "bin": { @@ -3823,6 +4454,9 @@ }, "engines": { "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yocto-queue": { @@ -3838,6 +4472,30 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/zod": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/zod/-/zod-4.1.13.tgz", + "integrity": "sha512-AvvthqfqrAhNH9dnfmrfKzX5upOdjUVJYFqNSlkmGf64gRaTzlPwz99IHYnVs28qYAybvAlBV+H7pn0saFY4Ig==", + "dev": true, + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-validation-error": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/zod-validation-error/-/zod-validation-error-4.0.2.tgz", + "integrity": "sha512-Q6/nZLe6jxuU80qb/4uJ4t5v2VEZ44lzQjPDhYJNztRQ4wyWc6VF3D3Kb/fAuPetZQnhS3hnajCf9CsWesghLQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "zod": "^3.25.0 || ^4.0.0" + } + }, "node_modules/zora": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/zora/-/zora-6.0.0.tgz", diff --git a/package.json b/package.json index a128f3b..e10701a 100644 --- a/package.json +++ b/package.json @@ -18,10 +18,10 @@ }, "dependencies": { "@jmagaram/rescript-seq": "^4.4.1", - "@rescript/react": "^0.13.1", + "@rescript/react": "^0.14.0", "react": "^19.1.0", "react-dom": "^19.1.0", - "rescript": "^11.1.4" + "rescript": "^12.0.0" }, "devDependencies": { "@dusty-phillips/rescript-zora": "^5.0.1", @@ -30,18 +30,18 @@ "@rescript/std": "^11.1.4", "@types/react": "^19.1.2", "@types/react-dom": "^19.1.2", - "@vitejs/plugin-react-swc": "^3.9.0", + "@vitejs/plugin-react-swc": "^4.2.2", "eslint": "^9.25.0", - "eslint-plugin-react-hooks": "^5.2.0", + "eslint-plugin-react-hooks": "^7.0.1", "eslint-plugin-react-refresh": "^0.4.19", "globals": "^16.0.0", "husky": "^9.1.7", "lint-staged": "^16.2.3", "onchange": "^7.1.0", "pta": "^1.3.0", - "typescript": "~5.8.3", + "typescript": "^5.9.3", "typescript-eslint": "^8.30.1", - "vite": "^6.3.5" + "vite": "^7.2.6" }, "lint-staged": { "*.res": "rescript format" From 97d29c5b9356f17a727dacbd1092dcb0fcc93d7b Mon Sep 17 00:00:00 2001 From: Mio Date: Wed, 3 Dec 2025 14:52:35 +1100 Subject: [PATCH 3/5] chore: run ./node_modules/.bin/rescript-tools migrate-all . --- src/AxiomSet.res | 6 +- src/HOTerm.res | 56 ++++---- src/InductiveSet.res | 10 +- src/Method.res | 6 +- src/MethodView.res | 284 +++++++++++++++++++++-------------------- src/ProofView.res | 3 +- src/Rule.res | 4 +- src/RuleView.res | 3 +- src/SExp.res | 8 +- src/StringAxiomSet.res | 6 +- src/StringTerm.res | 18 +-- src/Util.res | 2 +- tests/TestUtil.res | 4 +- 13 files changed, 212 insertions(+), 198 deletions(-) diff --git a/src/AxiomSet.res b/src/AxiomSet.res index 9faec13..1a49138 100644 --- a/src/AxiomSet.res +++ b/src/AxiomSet.res @@ -54,14 +54,16 @@ module Make = (
String.concat( String.make(props.imports.ruleStyle->Option.getOr(Hybrid)), - )}> + )} + > {Dict.toArray(props.content) ->Array.mapWithIndex(((n, r), i) => Option.getOr(Hybrid)}> + style={props.imports.ruleStyle->Option.getOr(Hybrid)} + > {React.string(n)} ) diff --git a/src/HOTerm.res b/src/HOTerm.res index 216cc1b..b514c9d 100644 --- a/src/HOTerm.res +++ b/src/HOTerm.res @@ -102,7 +102,7 @@ let rec mapbind0 = (term: t, f: int => result t>, ~from: int=0): t = | Ok(newIdx) => let new = newIdx + from if new < 0 { - raise(Err("mapbind: negative index")) + throw(Err("mapbind: negative index")) } Var({ idx: new, @@ -132,7 +132,7 @@ let mapbind = (term: t, f: int => int, ~from: int=0): t => mapbind0(term, idx => let upshift = (term: t, amount: int, ~from: int=0) => mapbind(term, idx => idx + amount, ~from) let downshift = (term: t, amount: int, ~from: int=1) => { if amount > from { - raise(Err("downshift amount must be less than from")) + throw(Err("downshift amount must be less than from")) } mapbind(term, idx => idx - amount, ~from) } @@ -333,12 +333,12 @@ let rec proj_allowed = (subst: subst, term: t): bool => { let rec proj = (subst: subst, term: t, ~gen: option): subst => { switch strip(devar(subst, term)) { | (Lam({name: _, body}), args) if args->Array.length == 0 => proj(subst, body, ~gen) - | (Unallowed, _args) => raise(UnifyFail("unallowed")) + | (Unallowed, _args) => throw(UnifyFail("unallowed")) | (Symbol(_) | Var(_), args) => Array.reduce(args, subst, (acc, a) => proj(acc, a, ~gen)) | (Schematic({schematic}), args) => { assert(!substHas(subst, schematic)) if gen->Option.isNone { - raise(UnifyFail("no gen provided")) + throw(UnifyFail("no gen provided")) } let h = Schematic({schematic: fresh(Option.getExn(gen))}) subst->substAdd( @@ -358,7 +358,7 @@ let rec proj = (subst: subst, term: t, ~gen: option): subst => { ), ) } - | _ => raise(UnifyFail("not a symbol, var or schematic")) + | _ => throw(UnifyFail("not a symbol, var or schematic")) } } let flexflex = ( @@ -370,11 +370,11 @@ let flexflex = ( ~gen: option, ): subst => { if gen->Option.isNone { - raise(UnifyFail("no gen provided")) + throw(UnifyFail("no gen provided")) } if sa == sb { if xs->Array.length != ys->Array.length { - raise(UnifyFail("flexible schematics have different number of arguments")) + throw(UnifyFail("flexible schematics have different number of arguments")) } let len = xs->Array.length let h = Schematic({schematic: fresh(Option.getExn(gen))}) @@ -396,7 +396,7 @@ let flexflex = ( } let flexrigid = (sa: schematic, xs: array, b: t, subst: subst, ~gen: option): subst => { if occ(sa, subst, b) { - raise(UnifyFail("flexible schematic occurs in rigid term")) + throw(UnifyFail("flexible schematic occurs in rigid term")) } // pattern unification // let u = b->mapbind0(bind => idx2(xs, bind)) @@ -412,13 +412,13 @@ let rec unifyTerm = (a: t, b: t, subst: subst, ~gen: option): subst => if na == nb { subst } else { - raise(UnifyFail("symbols do not match")) + throw(UnifyFail("symbols do not match")) } | (Var({idx: ia}), Var({idx: ib})) => if ia == ib { subst } else { - raise(UnifyFail("variables do not match")) + throw(UnifyFail("variables do not match")) } | (Schematic({schematic: sa}), Schematic({schematic: sb})) if sa == sb => subst | (Lam({name: _, body: ba}), Lam({name: _, body: bb})) => unifyTerm(ba, bb, subst, ~gen) @@ -435,13 +435,13 @@ let rec unifyTerm = (a: t, b: t, subst: subst, ~gen: option): subst => | ((a, xs), (b, ys)) => switch (a, b) { | (Symbol(_) | Var(_), Symbol(_) | Var(_)) => rigidrigid(a, xs, b, ys, subst, ~gen) - | _ => raise(UnifyFail("no rules match")) + | _ => throw(UnifyFail("no rules match")) } } } and unifyArray = (xs: array, ys: array, subst: subst, ~gen: option): subst => { if xs->Array.length != ys->Array.length { - raise(UnifyFail("arrays have different lengths")) + throw(UnifyFail("arrays have different lengths")) } Belt.Array.zip(xs, ys)->Belt.Array.reduce(subst, (acc, (x, y)) => unifyTerm(x, y, acc, ~gen)) } @@ -454,10 +454,10 @@ and rigidrigid = ( ~gen: option, ): subst => { if !equivalent(a, b) { - raise(UnifyFail("rigid terms do not match")) + throw(UnifyFail("rigid terms do not match")) } if xs->Array.length != ys->Array.length { - raise(UnifyFail("rigid terms have different number of arguments")) + throw(UnifyFail("rigid terms have different number of arguments")) } unifyArray(xs, ys, subst, ~gen) } @@ -571,39 +571,39 @@ let tokenize = (str0: string): (token, string) => { | "\\" => { let re = RegExp.fromStringWithFlags(varRegexpString, ~flags="y") switch re->RegExp.exec(str) { - | None => raise(ParseError("invalid variable")) + | None => throw(ParseError("invalid variable")) | Some(res) => switch RegExp.Result.matches(res) { | [n] => ( VarT(n->Int.fromString->Option.getExn), String.sliceToEnd(str, ~start=RegExp.lastIndex(re)), ) - | _ => raise(ParseError("invalid variable")) + | _ => throw(ParseError("invalid variable")) } } } | "?" => { let re = RegExp.fromStringWithFlags(schematicRegexpString, ~flags="y") switch re->RegExp.exec(str) { - | None => raise(ParseError("invalid schematic")) + | None => throw(ParseError("invalid schematic")) | Some(res) => switch RegExp.Result.matches(res) { | [n] => ( SchematicT(n->Int.fromString->Option.getExn), String.sliceToEnd(str, ~start=RegExp.lastIndex(re)), ) - | _ => raise(ParseError("invalid schematic")) + | _ => throw(ParseError("invalid schematic")) } } } | "@" => let re = RegExp.fromStringWithFlags(symbolRegexpString, ~flags="y") switch re->RegExp.exec(rest()) { - | None => raise(ParseError("invalid symbol")) + | None => throw(ParseError("invalid symbol")) | Some(res) => switch RegExp.Result.matches(res) { | [n] => (ConsT(n), String.sliceToEnd(rest(), ~start=RegExp.lastIndex(re))) - | _ => raise(ParseError("invalid symbol")) + | _ => throw(ParseError("invalid symbol")) } } | _ => { @@ -612,16 +612,16 @@ let tokenize = (str0: string): (token, string) => { | Some(res) => switch RegExp.Result.matches(res) { | [n] => (NameT(n), String.sliceToEnd(str, ~start=RegExp.lastIndex(reName))) - | _ => raise(ParseError("invalid symbol")) + | _ => throw(ParseError("invalid symbol")) } | None => let re = RegExp.fromStringWithFlags(symbolRegexpString, ~flags="y") switch re->RegExp.exec(str) { - | None => raise(ParseError("invalid symbol")) + | None => throw(ParseError("invalid symbol")) | Some(res) => switch RegExp.Result.matches(res) { | [n] => (AtomT(n), String.sliceToEnd(str, ~start=RegExp.lastIndex(re))) - | _ => raise(ParseError("invalid symbol")) + | _ => throw(ParseError("invalid symbol")) } } } @@ -651,12 +651,12 @@ let rec parseSimple = (str: string): (simple, string) => { let (tail, rest3) = parseSimple("("->String.concat(rest2)) switch tail { | ListS({xs}) => (ListS({xs: Array.concat([head], xs)}), rest3) - | _ => raise(Unreachable("bug")) + | _ => throw(Unreachable("bug")) } } } } - | RParen => raise(ParseError("unexpected right parenthesis")) + | RParen => throw(ParseError("unexpected right parenthesis")) | VarT(idx) => (VarS({idx: idx}), rest) | SchematicT(schematic) => (SchematicS({schematic: schematic}), rest) | AtomT(name) => (AtomS({name, constructor: false}), rest) @@ -665,7 +665,7 @@ let rec parseSimple = (str: string): (simple, string) => { let (result, rest1) = parseSimple(rest) (LambdaS({name, body: result}), rest1) } - | EOF => raise(ParseError("unexpected end of file")) + | EOF => throw(ParseError("unexpected end of file")) } } type env = Map.t @@ -696,7 +696,7 @@ let rec parseAll = (simple: simple, ~env: env, ~gen=?): t => { | ListS({xs}) => { let ts = xs->Array.map(x => parseAll(x, ~env, ~gen?)) if ts->Array.length == 0 { - raise(ParseError("empty list")) + throw(ParseError("empty list")) } else { ts ->Array.sliceToEnd(~start=1) @@ -719,7 +719,7 @@ let rec parseAll = (simple: simple, ~env: env, ~gen=?): t => { seen(g, schematic) Schematic({schematic: schematic}) } - | None => raise(ParseError("Schematics not allowed here")) + | None => throw(ParseError("Schematics not allowed here")) } | LambdaS({name, body}) => Lam({ diff --git a/src/InductiveSet.res b/src/InductiveSet.res index 454758f..0e21682 100644 --- a/src/InductiveSet.res +++ b/src/InductiveSet.res @@ -88,7 +88,7 @@ module Make = ( let (conclusionHead, conclusionArgs) = HOTerm.strip(constructorRule.conclusion) let typeIndex = switch conclusionHead { | Symbol({name}) => findFormerIndex(name, Array.length(conclusionArgs)) - | _ => raise(Unreachable("Constructor conclusion must have a Symbol head")) + | _ => throw(Unreachable("Constructor conclusion must have a Symbol head")) } { @@ -187,7 +187,7 @@ module Make = ( let (_head, args) = HOTerm.strip(predicateRule.conclusion) let predicateArg = switch args[0] { | Some(arg) => arg - | None => raise(Unreachable("Predicate conclusion must have one argument")) + | None => throw(Unreachable("Predicate conclusion must have one argument")) } let equalityPremise = { @@ -276,14 +276,16 @@ module Make = (
String.concat( String.make(props.imports.ruleStyle->Option.getOr(Hybrid)), - )}> + )} + > {Dict.toArray(props.content->Dict.copy->Dict.assign(derived(props.content))) ->Array.mapWithIndex(((n, r), i) => Option.getOr(Hybrid)}> + style={props.imports.ruleStyle->Option.getOr(Hybrid)} + > {React.string(n)} ) diff --git a/src/Method.res b/src/Method.res index ca6033e..ebb3804 100644 --- a/src/Method.res +++ b/src/Method.res @@ -112,7 +112,7 @@ module Derivation = (Term: TERM, Judgment: JUDGMENT with module Term := Term) => Array.push(subgoals, sg) cur := String.trim(rest) } - | Error(e) => raise(InternalParseError(e)) + | Error(e) => throw(InternalParseError(e)) } } if cur.contents->String.get(0) == Some("}") { @@ -276,7 +276,7 @@ module Elimination = (Term: TERM, Judgment: JUDGMENT with module Term := Term) = Array.push(subgoals, sg) cur := String.trim(rest) } - | Error(e) => raise(InternalParseError(e)) + | Error(e) => throw(InternalParseError(e)) } } if cur.contents->String.get(0) == Some("}") { @@ -614,7 +614,7 @@ module MakeRewriteHOTerm = ( try { switch subparser(cur.contents, ~scope, ~gen) { - | Error(e) => raise(InternalParseError(e)) + | Error(e) => throw(InternalParseError(e)) | Ok((subgoal, rest2)) => { cur := String.trim(rest2) diff --git a/src/MethodView.res b/src/MethodView.res index 135bb30..8847924 100644 --- a/src/MethodView.res +++ b/src/MethodView.res @@ -37,31 +37,32 @@ module DerivationView = (Term: TERM, Judgment: JUDGMENT with module Term := Term "gen": Term.gen, "onChange": ('a, Judgment.subst) => unit, } - let make = (subRender: srProps<'a> => React.element) => props => { -
- {React.string("by ")} - {React.string(props.method.ruleName)} -
    - {props.method.subgoals - ->Array.mapWithIndex((sg, i) => { -
  • - {React.createElement( - subRender, - { - "proof": sg, - "scope": props.scope, - "ruleStyle": props.ruleStyle, - "gen": props.gen, - "onChange": (newa, subst: Judgment.subst) => - props.onChange(props.method->Method.updateAtKey(i, _ => newa), subst), - }, - )} -
  • - }) - ->React.array} -
-
- } + let make = (subRender: srProps<'a> => React.element) => + props => { +
+ {React.string("by ")} + {React.string(props.method.ruleName)} +
    + {props.method.subgoals + ->Array.mapWithIndex((sg, i) => { +
  • + {React.createElement( + subRender, + { + "proof": sg, + "scope": props.scope, + "ruleStyle": props.ruleStyle, + "gen": props.gen, + "onChange": (newa, subst: Judgment.subst) => + props.onChange(props.method->Method.updateAtKey(i, _ => newa), subst), + }, + )} +
  • + }) + ->React.array} +
+
+ } } module EliminationView = (Term: TERM, Judgment: JUDGMENT with module Term := Term) => { @@ -80,31 +81,32 @@ module EliminationView = (Term: TERM, Judgment: JUDGMENT with module Term := Ter "gen": Term.gen, "onChange": ('a, Judgment.subst) => unit, } - let make = (subRender: srProps<'a> => React.element) => props => { -
- {React.string("elim ")} - {React.string(`${props.method.ruleName} ${props.method.elimName}`)} -
    - {props.method.subgoals - ->Array.mapWithIndex((sg, i) => { -
  • - {React.createElement( - subRender, - { - "proof": sg, - "scope": props.scope, - "ruleStyle": props.ruleStyle, - "gen": props.gen, - "onChange": (newa, subst: Judgment.subst) => - props.onChange(props.method->Method.updateAtKey(i, _ => newa), subst), - }, - )} -
  • - }) - ->React.array} -
-
- } + let make = (subRender: srProps<'a> => React.element) => + props => { +
+ {React.string("elim ")} + {React.string(`${props.method.ruleName} ${props.method.elimName}`)} +
    + {props.method.subgoals + ->Array.mapWithIndex((sg, i) => { +
  • + {React.createElement( + subRender, + { + "proof": sg, + "scope": props.scope, + "ruleStyle": props.ruleStyle, + "gen": props.gen, + "onChange": (newa, subst: Judgment.subst) => + props.onChange(props.method->Method.updateAtKey(i, _ => newa), subst), + }, + )} +
  • + }) + ->React.array} +
+
+ } } module LemmaView = ( @@ -128,34 +130,35 @@ module LemmaView = ( "onChange": ('a, Judgment.subst) => unit, } module RuleView = RuleView.Make(Term, Judgment, JudgmentView) - let make = (subRender: srProps<'a> => React.element) => props => { -
- {React.string("have ")} - - {React.null} - - {React.createElement( - subRender, - { - "proof": props.method.proof, - "scope": props.scope, - "ruleStyle": props.ruleStyle, - "gen": props.gen, - "onChange": (proof, subst) => {props.onChange({...props.method, proof}, subst)}, - }, - )} - {React.createElement( - subRender, - { - "proof": props.method.show, - "scope": props.scope, - "ruleStyle": props.ruleStyle, - "gen": props.gen, - "onChange": (show, subst) => {props.onChange({...props.method, show}, subst)}, - }, - )} -
- } + let make = (subRender: srProps<'a> => React.element) => + props => { +
+ {React.string("have ")} + + {React.null} + + {React.createElement( + subRender, + { + "proof": props.method.proof, + "scope": props.scope, + "ruleStyle": props.ruleStyle, + "gen": props.gen, + "onChange": (proof, subst) => {props.onChange({...props.method, proof}, subst)}, + }, + )} + {React.createElement( + subRender, + { + "proof": props.method.show, + "scope": props.scope, + "ruleStyle": props.ruleStyle, + "gen": props.gen, + "onChange": (show, subst) => {props.onChange({...props.method, show}, subst)}, + }, + )} +
+ } } module RewriteView = ( @@ -176,27 +179,28 @@ module RewriteView = ( "gen": HOTerm.gen, "onChange": ('a, Judgment.subst) => unit, } - let make = (subRender: srProps<'a> => React.element) => props => { -
- {React.string("rewrite ")} - {React.string(props.method.equalityName)} -
    -
  • - {React.createElement( - subRender, - { - "proof": props.method.subgoal, - "scope": props.scope, - "ruleStyle": props.ruleStyle, - "gen": props.gen, - "onChange": (subgoal, subst: Judgment.subst) => - props.onChange({...props.method, subgoal}, subst), - }, - )} -
  • -
-
- } + let make = (subRender: srProps<'a> => React.element) => + props => { +
+ {React.string("rewrite ")} + {React.string(props.method.equalityName)} +
    +
  • + {React.createElement( + subRender, + { + "proof": props.method.subgoal, + "scope": props.scope, + "ruleStyle": props.ruleStyle, + "gen": props.gen, + "onChange": (subgoal, subst: Judgment.subst) => + props.onChange({...props.method, subgoal}, subst), + }, + )} +
  • +
+
+ } } module RewriteReverseView = ( @@ -217,27 +221,28 @@ module RewriteReverseView = ( "gen": HOTerm.gen, "onChange": ('a, Judgment.subst) => unit, } - let make = (subRender: srProps<'a> => React.element) => props => { -
- {React.string("rewrite_reverse ")} - {React.string(props.method.equalityName)} -
    -
  • - {React.createElement( - subRender, - { - "proof": props.method.subgoal, - "scope": props.scope, - "ruleStyle": props.ruleStyle, - "gen": props.gen, - "onChange": (subgoal, subst: Judgment.subst) => - props.onChange({...props.method, subgoal}, subst), - }, - )} -
  • -
-
- } + let make = (subRender: srProps<'a> => React.element) => + props => { +
+ {React.string("rewrite_reverse ")} + {React.string(props.method.equalityName)} +
    +
  • + {React.createElement( + subRender, + { + "proof": props.method.subgoal, + "scope": props.scope, + "ruleStyle": props.ruleStyle, + "gen": props.gen, + "onChange": (subgoal, subst: Judgment.subst) => + props.onChange({...props.method, subgoal}, subst), + }, + )} +
  • +
+
+ } } module CombineMethodView = ( @@ -258,24 +263,25 @@ module CombineMethodView = ( onChange: (Method.t<'a>, Judgment.subst) => unit, } type srProps<'a> = Method1View.srProps<'a> - let make = (subrender: srProps<'a> => React.element) => props => { - switch props.method { - | First(m) => - Method1View.make(subrender)({ - method: m, - scope: props.scope, - ruleStyle: props.ruleStyle, - gen: props.gen, - onChange: (n, s) => props.onChange(First(n), s), - }) - | Second(m) => - Method2View.make(subrender)({ - method: m, - scope: props.scope, - ruleStyle: props.ruleStyle, - gen: props.gen, - onChange: (n, s) => props.onChange(Second(n), s), - }) + let make = (subrender: srProps<'a> => React.element) => + props => { + switch props.method { + | First(m) => + Method1View.make(subrender)({ + method: m, + scope: props.scope, + ruleStyle: props.ruleStyle, + gen: props.gen, + onChange: (n, s) => props.onChange(First(n), s), + }) + | Second(m) => + Method2View.make(subrender)({ + method: m, + scope: props.scope, + ruleStyle: props.ruleStyle, + gen: props.gen, + onChange: (n, s) => props.onChange(Second(n), s), + }) + } } - } } diff --git a/src/ProofView.res b/src/ProofView.res index 9af2a3b..87e7e63 100644 --- a/src/ProofView.res +++ b/src/ProofView.res @@ -46,7 +46,8 @@ module Make = ( props.onChange( Proof.Checked({fixes, assumptions, method: Do(opt), rule}), subst, - )}> + )} + > {React.string(str)} }) diff --git a/src/Rule.res b/src/Rule.res index 4c462cc..311913e 100644 --- a/src/Rule.res +++ b/src/Rule.res @@ -103,7 +103,7 @@ module Make = (Term: TERM, Judgment: JUDGMENT with module Term := Term) => { cur := rest premises->Array.push(p) } - | Error(_) => raise(InternalParseError("expected turnstile or premise")) + | Error(_) => throw(InternalParseError("expected turnstile or premise")) } } if cur.contents->String.trim->String.get(0) == Some("]") { @@ -162,7 +162,7 @@ module Make = (Term: TERM, Judgment: JUDGMENT with module Term := Term) => { cur := rest premises->Array.push(p) } - | Error(e) => raise(InternalParseError(e)) + | Error(e) => throw(InternalParseError(e)) } } let (ruleName, rest) = it.contents->Result.getExn diff --git a/src/RuleView.res b/src/RuleView.res index fff601c..ae9b631 100644 --- a/src/RuleView.res +++ b/src/RuleView.res @@ -91,7 +91,8 @@ module Make = ( Array.length + 1} - className="rule-cell rule-hypothetical-conclusion"> + className="rule-cell rule-hypothetical-conclusion" + > diff --git a/src/SExp.res b/src/SExp.res index 31dba67..69ef844 100644 --- a/src/SExp.res +++ b/src/SExp.res @@ -324,12 +324,12 @@ let parse = (str: string, ~scope: array, ~gen=?) => { seen(g, num) Some(Schematic({schematic: num, allowed: bits})) } - | None => raise(ParseError("Schematics not allowed here")) + | None => throw(ParseError("Schematics not allowed here")) } - | _ => raise(ParseError("Expected closing parenthesis")) + | _ => throw(ParseError("Expected closing parenthesis")) } } - | _ => raise(ParseError("Expected opening parenthesis")) + | _ => throw(ParseError("Expected opening parenthesis")) } } | Some(LParen) => { @@ -344,7 +344,7 @@ let parse = (str: string, ~scope: array, ~gen=?) => { } switch lex() { | Some(RParen) => Some(Compound({subexps: bits})) - | _ => raise(ParseError("Expected closing parenthesis")) + | _ => throw(ParseError("Expected closing parenthesis")) } } | _ => None diff --git a/src/StringAxiomSet.res b/src/StringAxiomSet.res index 1b9b9e8..9f1bf00 100644 --- a/src/StringAxiomSet.res +++ b/src/StringAxiomSet.res @@ -135,7 +135,8 @@ let make = props => {
String.concat( String.make(props.imports.ruleStyle->Option.getOr(Hybrid)), - )}> + )} + > {content ->Dict.toArray ->Array.mapWithIndex(((n, r), i) => @@ -143,7 +144,8 @@ let make = props => { rule={r} scope={[]} key={String.make(i)} - style={props.imports.ruleStyle->Option.getOr(Hybrid)}> + style={props.imports.ruleStyle->Option.getOr(Hybrid)} + > {React.string(n)} ) diff --git a/src/StringTerm.res b/src/StringTerm.res index 28aa43d..de23c30 100644 --- a/src/StringTerm.res +++ b/src/StringTerm.res @@ -350,7 +350,7 @@ let makeGen = () => { } let parseMeta = (str: string) => { - let re = %re("/^([^\s.\[\]()]+)\./y") + let re = /^([^\s.\[\]()]+)\./y switch re->RegExp.exec(str->String.trim) { | None => Error("not a meta name") | Some(res) => @@ -416,8 +416,8 @@ let parse: (string, ~scope: array, ~gen: gen=?) => result<(t, remaining), let execRe = re => execRe(re, String.sliceToEnd(str, ~start=pos.contents)) let stringLit = () => { let identRegex = RegExp.fromString(`^${Util.identRegexStr}`) - let symbolRegex = %re(`/^([!@#\$%\^~&*_+\-={};':|,.<>\/?]+)/`) - let numberRegex = %re(`/^(\d+)/`) + let symbolRegex = /^([!@#\$%\^~&*_+\-={};':|,.<>\/?]+)/ + let numberRegex = /^(\d+)/ switch execRe(identRegex) ->Option.orElse(execRe(symbolRegex)) ->Option.orElse(execRe(numberRegex)) { @@ -427,7 +427,7 @@ let parse: (string, ~scope: array, ~gen: gen=?) => result<(t, remaining), } } let escaped = () => { - let escapedRegex = %re(`/\\([\$\?\\\"])/`) + let escapedRegex = /\\([\$\?\\\"])/ switch execRe(escapedRegex) { | Some([char], l) => add(String(char), ~nAdvance=l) | Some(_) => error("regex escaped error") @@ -436,14 +436,14 @@ let parse: (string, ~scope: array, ~gen: gen=?) => result<(t, remaining), } let readInt = s => Int.fromString(s)->Option.getExn let schema = () => { - let schemaRegex = %re("/\?(\d+)\(((?:\d+\s*)*)\)/") + let schemaRegex = /\?(\d+)\(((?:\d+\s*)*)\)/ switch execRe(schemaRegex) { | Some([idStr, allowedStr], l) => { let schematic = readInt(idStr) let allowed = allowedStr ->String.trim - ->String.splitByRegExp(%re("/\s+/")) + ->String.splitByRegExp(/\s+/) ->Array.keepSome ->Array.filter(s => s != "") ->Array.map(readInt) @@ -454,8 +454,8 @@ let parse: (string, ~scope: array, ~gen: gen=?) => result<(t, remaining), } } let var = () => { - let varLitRegex = %re("/^\$\\(\d+)/") - let varScopeRegex = %re("/^\$([a-zA-Z]\w*)/") + let varLitRegex = /^\$\\(\d+)/ + let varScopeRegex = /^\$([a-zA-Z]\w*)/ switch execRe(varLitRegex) { | Some([match], l) => add(Var({idx: readInt(match)}), ~nAdvance=l) | Some(_) => error("var lit regex error") @@ -473,7 +473,7 @@ let parse: (string, ~scope: array, ~gen: gen=?) => result<(t, remaining), } // consume leading whitespace + open quote - switch execRe(%re(`/^\s*"/`)) { + switch execRe(/^\s*"/) { | Some(_, l) => pos := l | None => error("expected open quote") } diff --git a/src/Util.res b/src/Util.res index 1156dc3..39a30ef 100644 --- a/src/Util.res +++ b/src/Util.res @@ -113,7 +113,7 @@ exception Unreachable(string) exception Err(string) let mustFindIndex = (arr, f) => { switch Array.findIndex(arr, f) { - | -1 => raise(Unreachable("Element not found")) + | -1 => throw(Unreachable("Element not found")) | i => i } } diff --git a/tests/TestUtil.res b/tests/TestUtil.res index 43af46b..55dc3b3 100644 --- a/tests/TestUtil.res +++ b/tests/TestUtil.res @@ -64,11 +64,11 @@ module MakeTerm = (Term: TERM) => { | Ok((term, "")) => term | Ok((_, rest)) => { t->fail(~msg="parse incomplete: " ++ rest) - raise(Unreachable("")) + throw(Unreachable("")) } | Error(msg) => { t->fail(~msg="parse failed: " ++ msg) - raise(Unreachable("")) + throw(Unreachable("")) } } } From 8f9f9b0386ec6264186ec3163f265c9600649cd1 Mon Sep 17 00:00:00 2001 From: Mio Date: Wed, 3 Dec 2025 14:53:44 +1100 Subject: [PATCH 4/5] chore: fix res:format for rescript12 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e10701a..f4b9bba 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "res:build": "rescript", "res:clean": "rescript clean", "res:dev": "rescript -w", - "res:format": "rescript format -all", + "res:format": "rescript format", "test": "npm run res:build && pta 'tests/*.mjs'", "test-watch": "onchange --initial '{tests,src}/*.mjs' -- pta 'tests/*.mjs'", "prepare": "husky" From d7f07ddbdd99b955f75e1cec9223c51a7ed774db Mon Sep 17 00:00:00 2001 From: Mio Date: Wed, 3 Dec 2025 15:30:25 +1100 Subject: [PATCH 5/5] chore: solve warnings --- rescript.json | 6 +++--- src/StringAxiomSet.res | 6 +++--- src/StringTerm.res | 2 +- tests/HOTermTest.res | 18 +++++++++--------- tests/RuleTest.res | 8 ++++---- tests/SExpTest.res | 3 ++- tests/StringTermTest.res | 2 +- tests/TestUtil.res | 2 +- 8 files changed, 24 insertions(+), 23 deletions(-) diff --git a/rescript.json b/rescript.json index b4b03cf..bc89501 100644 --- a/rescript.json +++ b/rescript.json @@ -9,12 +9,12 @@ "in-source": true }, "suffix": ".mjs", - "bs-dependencies": [ + "dependencies": [ "@rescript/core", "@rescript/react", "@jmagaram/rescript-seq" ], - "bs-dev-dependencies": ["@dusty-phillips/rescript-zora"], - "bsc-flags": ["-open RescriptCore"], + "dev-dependencies": ["@dusty-phillips/rescript-zora"], + "compiler-flags": ["-open RescriptCore"], "jsx": { "version": 4 } } diff --git a/src/StringAxiomSet.res b/src/StringAxiomSet.res index 9f1bf00..f688c31 100644 --- a/src/StringAxiomSet.res +++ b/src/StringAxiomSet.res @@ -49,12 +49,12 @@ let derive = (name: string, rules: array): Rule.t => { let (aIdx, bIdx, pIdx) = (aIdx + n, bIdx + n, pIdx + n) let inductionHyps = rule.premises - ->Array.filter(r => r.conclusion->snd == Symbol({name: name})) + ->Array.filter(r => r.conclusion->Pair.second == Symbol({name: name})) ->Array.map(r => replaceJudgeRHS(r, aIdx, bIdx, pIdx)) { vars: rule.vars, premises: rule.premises->Array.concat(inductionHyps), - conclusion: (surround(rule.conclusion->fst, aIdx, bIdx), Var({idx: pIdx})), + conclusion: (surround(rule.conclusion->Pair.first, aIdx, bIdx), Var({idx: pIdx})), } } { @@ -105,7 +105,7 @@ let deserialise = (str: string, ~imports as _: Ports.t) => { getBase(str)->Result.map(raw => { let grouped: dict> = Dict.make() raw->Dict.forEach(rule => - switch rule.conclusion->snd { + switch rule.conclusion->Pair.second { | Symbol({name: a}) => switch grouped->Dict.get(a) { | None => grouped->Dict.set(a, [rule]) diff --git a/src/StringTerm.res b/src/StringTerm.res index de23c30..24ab640 100644 --- a/src/StringTerm.res +++ b/src/StringTerm.res @@ -40,7 +40,7 @@ let schematicsCountsIn: t => Belt.Map.Int.t = (term: t) => } ) let maxSchematicCount = (term: t) => { - schematicsCountsIn(term)->Belt.Map.Int.maximum->Option.map(snd)->Option.getOr(0) + schematicsCountsIn(term)->Belt.Map.Int.maximum->Option.map(Pair.second)->Option.getOr(0) } let reduce = t => t let freeVarsIn = (term: t): Belt.Set.t => diff --git a/tests/HOTermTest.res b/tests/HOTermTest.res index 038a7b3..a352c39 100644 --- a/tests/HOTermTest.res +++ b/tests/HOTermTest.res @@ -224,7 +224,7 @@ zoraBlock("unify test", t => { y, ~subst=emptySubst->substAdd( 0, - HOTerm.parse("(x. (r (fst x)))", ~scope=[])->Result.getExn->fst, + HOTerm.parse("(x. (r (fst x)))", ~scope=[])->Result.getExn->Pair.first, ), ) }) @@ -236,7 +236,7 @@ zoraBlock("unify test", t => { y, ~subst=emptySubst->substAdd( 1, - HOTerm.parse("(x. x. (r (q \\0 \\1)))", ~scope=[])->Result.getExn->fst, + HOTerm.parse("(x. x. (r (q \\0 \\1)))", ~scope=[])->Result.getExn->Pair.first, ), ) }) @@ -248,7 +248,7 @@ zoraBlock("unify test", t => { y, ~subst=emptySubst->substAdd( 1, - HOTerm.parse("(x. x. (r (q (snd \\0) \\1)))", ~scope=[])->Result.getExn->fst, + HOTerm.parse("(x. x. (r (q (snd \\0) \\1)))", ~scope=[])->Result.getExn->Pair.first, ), ) }) @@ -294,9 +294,9 @@ zoraBlock("unify test", t => { ~subst=emptySubst->substAdd(0, Symbol({name: "a", constructor: false})), ) }) - t->block("divergent", t => { - let divergent = "((x. x x) (x. x x))" - let a = "((x. ?0 x) (x. x x))" + t->block("divergent", _t => { + let _divergent = "((x. x x) (x. x x))" + let _a = "((x. ?0 x) (x. x x))" // we don't care // t->Util.testNotUnify(a, divergent) }) @@ -343,9 +343,9 @@ zoraBlock("unify test", t => { t->Util.testUnifyFail(a, b) t->testUnify(c, b, ~subst=emptySubst->substAdd(6, t->Util.parse("(x. S \\0)"))) }) - t->block("tests from induction examples", t => { - let r = "((?0 \\0) (?1 \\0))" - let g = "(f \\0)" + t->block("tests from induction examples", _t => { + let _r = "((?0 \\0) (?1 \\0))" + let _g = "(f \\0)" // what it's currently doing: // 0 := (x. y. f x) // 1 := doesn't matter diff --git a/tests/RuleTest.res b/tests/RuleTest.res index a71fad7..e10fe2c 100644 --- a/tests/RuleTest.res +++ b/tests/RuleTest.res @@ -7,8 +7,8 @@ module MakeTest = (Term: TERM, Judgment: JUDGMENT with module Term := Term) => { let res = RuleInst.parseInner(input, ~scope, ~gen=Term.makeGen()) switch res { | Ok(res) => { - t->equal(res->snd, "", ~msg=input ++ " input consumed") - t->equal(res->fst, expect, ~msg?) + t->equal(res->Pair.second, "", ~msg=input ++ " input consumed") + t->equal(res->Pair.first, expect, ~msg?) } | Error(msg) => t->fail(~msg="parse failed: " ++ msg) } @@ -23,8 +23,8 @@ module MakeTest = (Term: TERM, Judgment: JUDGMENT with module Term := Term) => { let res = RuleInst.parseTopLevel(input, ~scope, ~gen=Term.makeGen()) switch res { | Ok(res) => { - t->equal(res->snd, "", ~msg=input ++ " input consumed") - t->equal(res->fst, expect, ~msg?) + t->equal(res->Pair.second, "", ~msg=input ++ " input consumed") + t->equal(res->Pair.first, expect, ~msg?) } | Error(msg) => t->fail(~msg="parse failed: " ++ msg) } diff --git a/tests/SExpTest.res b/tests/SExpTest.res index ad932af..34299b5 100644 --- a/tests/SExpTest.res +++ b/tests/SExpTest.res @@ -40,7 +40,8 @@ zoraBlock("parse compound", t => { }) }) -let parse = (input: string) => SExp.parse(input, ~scope=[], ~gen=SExp.makeGen())->Result.getExn->fst +let parse = (input: string) => + SExp.parse(input, ~scope=[], ~gen=SExp.makeGen())->Result.getExn->Pair.first zoraBlock("unify var", t => { let x = parse("x") diff --git a/tests/StringTermTest.res b/tests/StringTermTest.res index ba68bdd..9f3e0fd 100644 --- a/tests/StringTermTest.res +++ b/tests/StringTermTest.res @@ -38,7 +38,7 @@ zoraBlock("parse", t => { }) let parse = (input: string) => - StringTerm.parse(input, ~scope=[], ~gen=StringTerm.makeGen())->Result.getExn->fst + StringTerm.parse(input, ~scope=[], ~gen=StringTerm.makeGen())->Result.getExn->Pair.first zoraBlock("unify", t => { let a = parse(`"a"`) diff --git a/tests/TestUtil.res b/tests/TestUtil.res index 55dc3b3..a70f89d 100644 --- a/tests/TestUtil.res +++ b/tests/TestUtil.res @@ -52,7 +52,7 @@ module MakeTerm = (Term: TERM) => { switch res { | Ok(res) => { - let result = Term.prettyPrint(res->fst, ~scope) + let result = Term.prettyPrint(res->Pair.first, ~scope) t->equal(result, expected, ~msg="prettyPrint output matches expected") } | Error(msg) => t->fail(~msg="parse failed: " ++ msg)