diff --git a/README.md b/README.md index ccfbd0b2a5f908e847f93f87ab48f53135b4a4b7..87f047e5ad4fd2cafbab369366baa6a7941f33cb 100644 --- a/README.md +++ b/README.md @@ -13,8 +13,6 @@ Il emploie l'API Web définie par [leximpact-socio-fiscal-api](https://git.lexim Ce projet fonctionne avec [NodeJS](https://nodejs.org/fr/) version 16 ou supérieure. -Il utilise la bibliothèque [xxhash-addon](https://www.npmjs.com/package/xxhash-addon), écrite en C. Pour pouvoir installer et compiler cette bibliothèque, il est nécessaire d'installer au préalable la [chaîne de compilation Node.js](https://github.com/ktrongnhan/xxhash-addon#installation), qui dépend de votre système d'exploitation. - Exécuter les commandes ci-dessous pour télécharger le projet, vous déplacer dans son répertoire, puis installer les librairies nécessaires à son fonctionnement : ```shell diff --git a/package-lock.json b/package-lock.json index 3bdb89e878f746b70fa7554b5a6a8a3da0cc2cf8..52c3a2b1a7cade9e4833bb361ea12b7565909eff 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "leximpact-socio-fiscal-ui", "version": "0.0.396", "dependencies": { - "xxhash-addon": "^1.5.0" + "xxhash3lib": "^0.2.4" }, "devDependencies": { "@auditors/core": "^0.3.0", @@ -1431,6 +1431,25 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1440,6 +1459,16 @@ "node": ">=8" } }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1490,6 +1519,29 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -1644,6 +1696,11 @@ "node": ">= 6" } }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, "node_modules/classnames": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.2.tgz", @@ -2000,6 +2057,14 @@ "integrity": "sha512-jlBzY4tFcJaiUjzhRTCWAqRvTO/fWzjA3Bls0mykzGZ7zvcMP7h05W6UcgzfT9Ca1SW2xyKDOFRyI0pQeRNZGw==", "dev": true }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/es6-promise": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", @@ -2480,6 +2545,25 @@ "svelte": "^3.55.1" } }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, "node_modules/formdata-polyfill": { "version": "4.0.10", "resolved": "https://registry.npmjs.org/formdata-polyfill/-/formdata-polyfill-4.0.10.tgz", @@ -2520,6 +2604,11 @@ "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", "dev": true }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "node_modules/fs-extra": { "version": "11.1.1", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", @@ -2704,6 +2793,25 @@ "url": "https://github.com/sponsors/cyberalien" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.2.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", @@ -2751,8 +2859,7 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "node_modules/internmap": { "version": "2.0.3", @@ -3182,6 +3289,11 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "node_modules/mri": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", @@ -3217,6 +3329,11 @@ "thenify-all": "^1.0.0" } }, + "node_modules/nan": { + "version": "2.17.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", + "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" + }, "node_modules/nanoid": { "version": "3.3.6", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", @@ -3339,7 +3456,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -3783,6 +3899,15 @@ "node": ">= 0.10" } }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", @@ -3833,6 +3958,19 @@ "pify": "^2.3.0" } }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3983,7 +4121,6 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, "funding": [ { "type": "github", @@ -4198,6 +4335,14 @@ "node": ">=10.0.0" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -4487,6 +4632,32 @@ "node": ">=4" } }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4708,8 +4879,7 @@ "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/uuid": { "version": "9.0.0", @@ -4845,8 +5015,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/xlsx-js-style": { "version": "1.2.0", @@ -4878,13 +5047,18 @@ "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", "dev": true }, - "node_modules/xxhash-addon": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/xxhash-addon/-/xxhash-addon-1.5.0.tgz", - "integrity": "sha512-ZkfBZMrrpbyT8/uw7x+2voPBXO2oczajlGo11+OOO1YqGbk6DuF7erwirCUPvydN17lEjilu3VGDWWG4+fV45Q==", + "node_modules/xxhash3lib": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/xxhash3lib/-/xxhash3lib-0.2.4.tgz", + "integrity": "sha512-vkbU7L9xNfjyoGn7rCYevhOJP+AkrzhSc4PcLzL6CZZbNWTdwPXhgT3ZofqIf3AlurPiBr3nIhFZHWq3/wcIXg==", "hasInstallScript": true, + "dependencies": { + "follow-redirects": "^1.13.0", + "nan": "^2.14.1", + "tar-fs": "^2.1.0" + }, "engines": { - "node": ">=8.6.0 <9.0.0 || >=10.0.0" + "node": ">=14" } }, "node_modules/yallist": { diff --git a/package.json b/package.json index c93927d6b6c05a8f3cd7721a1ca8b71be6a625a3..f2215fcb55570368e0e4a547df03da14dc307dff 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ "test": "playwright test" }, "dependencies": { - "xxhash-addon": "^1.5.0" + "xxhash3lib": "^0.2.4" }, "devDependencies": { "@auditors/core": "^0.3.0", diff --git a/src/lib/components/NavBar.svelte b/src/lib/components/NavBar.svelte index 01a863256e07a3c52dc417dce9207f374291d1f8..1b4521b36845dacb0e85d25681d2cd965b882e0b 100644 --- a/src/lib/components/NavBar.svelte +++ b/src/lib/components/NavBar.svelte @@ -19,7 +19,7 @@ > // Save / share - const displayMode = getContext("displayMode") as Writable< + const displayModeWritable = getContext("displayMode") as Writable< DisplayMode | undefined > @@ -97,11 +97,10 @@ const testCases = getContext("testCases") as Writable<Situation[]> async function shareLink(): Promise<void> { - const displayModee = $displayMode const urlString = "/simulations" const res = await fetch(urlString, { body: JSON.stringify({ - displayModee, + displayMode: $displayModeWritable, inputInstantsByVariableNameArray: $inputInstantsByVariableNameArray.map( (inputInstantsByVariableName) => Object.fromEntries( diff --git a/src/lib/decompositions.ts b/src/lib/decompositions.ts index 6b8586071fcf82d2cb6b286aac1c0160bb5fe48e..75db26ea7012a442ece0184582bee3f2f9359c3f 100644 --- a/src/lib/decompositions.ts +++ b/src/lib/decompositions.ts @@ -115,23 +115,23 @@ export const decompositionCoreByNameByReformName: { export const waterfalls: Waterfall[] = waterfallsUnknown export const nonVirtualVariablesName = extractNonVirtualVariablesName( - decompositionCoreByName, - variableSummaryByName, - waterfalls, + decompositionCoreByName, + variableSummaryByName, + waterfalls, ) export const nonVirtualVariablesNameByReformName: { [name: string]: string[] } = Object.fromEntries( - Object.entries(decompositionCoreByNameByReformName).map( - ([reformName, reformDecompositionCoreByName]) => [ - reformName, - extractNonVirtualVariablesName( - reformDecompositionCoreByName, - variableSummaryByNameByReformName[reformName], - waterfalls, - ), - ], - ), + Object.entries(decompositionCoreByNameByReformName).map( + ([reformName, reformDecompositionCoreByName]) => [ + reformName, + extractNonVirtualVariablesName( + reformDecompositionCoreByName, + variableSummaryByNameByReformName[reformName], + waterfalls, + ), + ], + ), ) export const decompositionsOptionsVariablesName = new Set<string>() @@ -942,59 +942,59 @@ function buildVisibleDecompositionsForComparison1( } function extractLinkedVariablesName( - linkedVariablesName: Set<string>, - name: string, - variableSummaryByName: VariableByName, + linkedVariablesName: Set<string>, + name: string, + variableSummaryByName: VariableByName, ): void { const variableSummary = variableSummaryByName[name] for (const linkedVariableName of variableSummary.linked_added_variables ?? - []) { + []) { if (!linkedVariablesName.has(linkedVariableName)) { linkedVariablesName.add(linkedVariableName) extractLinkedVariablesName( - linkedVariablesName, - linkedVariableName, - variableSummaryByName, + linkedVariablesName, + linkedVariableName, + variableSummaryByName, ) } } for (const linkedVariableName of variableSummary.linked_other_variables ?? - []) { + []) { if (!linkedVariablesName.has(linkedVariableName)) { linkedVariablesName.add(linkedVariableName) extractLinkedVariablesName( - linkedVariablesName, - linkedVariableName, - variableSummaryByName, + linkedVariablesName, + linkedVariableName, + variableSummaryByName, ) } } for (const linkedVariableName of variableSummary.linked_output_variables ?? - []) { + []) { if (!linkedVariablesName.has(linkedVariableName)) { linkedVariablesName.add(linkedVariableName) extractLinkedVariablesName( - linkedVariablesName, - linkedVariableName, - variableSummaryByName, + linkedVariablesName, + linkedVariableName, + variableSummaryByName, ) } } } function extractNonVirtualVariablesName( - decompositionCoreByName: DecompositionCoreByName, - variableSummaryByName: VariableByName, - waterfalls: Waterfall[], + decompositionCoreByName: DecompositionCoreByName, + variableSummaryByName: VariableByName, + waterfalls: Waterfall[], ): string[] { const linkedVariablesName = new Set<string>() const nonVirtualVariablesName: string[] = [] for (const { name: waterfallName, root } of waterfalls) { for (const [name, decomposition] of walkDecompositionsCore( - decompositionCoreByName, - waterfallName, - root, - true, + decompositionCoreByName, + waterfallName, + root, + true, )) { // Note: Duplicates are removed from nonVirtualVariablesName, because a variable name // may appear more than once in decomposition. @@ -1002,15 +1002,15 @@ function extractNonVirtualVariablesName( nonVirtualVariablesName.push(name) const variableSummary = variableSummaryByName[name] for (const linkedVariableName of variableSummary.linked_added_variables ?? - []) { + []) { linkedVariablesName.add(linkedVariableName) } for (const linkedVariableName of variableSummary.linked_other_variables ?? - []) { + []) { linkedVariablesName.add(linkedVariableName) } for (const linkedVariableName of variableSummary.linked_output_variables ?? - []) { + []) { linkedVariablesName.add(linkedVariableName) } } @@ -1020,9 +1020,9 @@ function extractNonVirtualVariablesName( // Add linked variables. for (const linkedVariableName of linkedVariablesName) { extractLinkedVariablesName( - linkedVariablesName, - linkedVariableName, - variableSummaryByName, + linkedVariablesName, + linkedVariableName, + variableSummaryByName, ) } for (const linkedVariableName of linkedVariablesName) { diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index c9e505e96881955dfab34895c86dd75b499885f4..da3e09111727ce4a1a0089b4b0522e8a46513bf5 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -649,7 +649,8 @@ function onKeyDown(e) { switch (e.keyCode) { case 13: // 'Enter' key - if (displayMode.edit !== undefined) setTimeout(() => changeTestCaseToEditIndex(undefined), 1) + if (displayMode.edit !== undefined) + setTimeout(() => changeTestCaseToEditIndex(undefined), 1) } } diff --git a/src/routes/simulations/+server.ts b/src/routes/simulations/+server.ts index cdf9fc0c38bb99b821084370e7b661b26ab09b6f..afdbf4ea3208faf5339ce79e74188bcfd61201ef 100644 --- a/src/routes/simulations/+server.ts +++ b/src/routes/simulations/+server.ts @@ -7,7 +7,7 @@ import { import { error, json } from "@sveltejs/kit" import fs from "fs-extra" import path from "path" -import { XXHash3 } from "xxhash-addon" +import { createXXH3_64 } from "xxhash3lib" import config from "$lib/server/config" @@ -81,9 +81,9 @@ export const POST: RequestHandler = async ({ request, url }) => { throw error(400, `Invalid body: ${JSON.stringify(bodyError, null, 2)}`) } const bodyJson = JSON.stringify(body, null, 2) - const hasher = new XXHash3() + const hasher = createXXH3_64() hasher.update(Buffer.from(bodyJson)) - const digest = hasher.digest().toString("hex") + const digest = hasher.digest("hex") const simulationDir = path.join(simulationsDir, digest.substring(0, 2)) const simulationFilePath = path.join(simulationDir, `${digest}.json`)