diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f4f545a46..57e6b62a0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -82,7 +82,7 @@ jobs: run: node ./bin/bundle.js bundle -p docs-search-client-halogen - name: Run tests - run: node ./bin/bundle.js test + run: node --no-warnings ./bin/bundle.js test - name: Check formatting (Linux only) if: matrix.os == 'ubuntu-latest' diff --git a/bin/index.dev.js b/bin/index.dev.js index e2193ac95..1a34b5496 100755 --- a/bin/index.dev.js +++ b/bin/index.dev.js @@ -1,4 +1,4 @@ -#!/usr/bin/env node +#!/usr/bin/env -S node --no-warnings import { main } from "../output/Main/index.js"; diff --git a/bin/spago.yaml b/bin/spago.yaml index 8b30d6a94..4b05b46e4 100644 --- a/bin/spago.yaml +++ b/bin/spago.yaml @@ -31,5 +31,3 @@ package: minify: false platform: node type: app - extraArgs: - - "--external:better-sqlite3" diff --git a/bin/src/Main.purs b/bin/src/Main.purs index 93fed2a45..fb3e14e32 100644 --- a/bin/src/Main.purs +++ b/bin/src/Main.purs @@ -997,7 +997,7 @@ mkRegistryEnv offline = do -- Make sure we have git and purs git <- Git.getGit purs <- Purs.getPurs - db <- liftEffect $ Db.connect + db <- liftAff $ Db.connect { database: Paths.databasePath , logger: \str -> Reader.runReaderT (logDebug $ "DB: " <> str) { logOptions } } diff --git a/package-lock.json b/package-lock.json index 84c4fa7f4..fa8a20e52 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,7 +10,6 @@ "license": "BSD-3-Clause", "dependencies": { "@nodelib/fs.walk": "^3.0.1", - "better-sqlite3": "^12.5.0", "env-paths": "^3.0.0", "fs-extra": "^11.3.0", "fuse.js": "^7.1.0", @@ -158,26 +157,6 @@ "safer-buffer": "~2.1.0" } }, - "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" - } - ], - "license": "MIT" - }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -187,40 +166,6 @@ "tweetnacl": "^0.14.3" } }, - "node_modules/better-sqlite3": { - "version": "12.5.0", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-12.5.0.tgz", - "integrity": "sha512-WwCZ/5Diz7rsF29o27o0Gcc1Du+l7Zsv7SYtVPG0X3G/uUI1LqdxrQI7c9Hs2FWpqXXERjW9hp6g3/tH7DlVKg==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "bindings": "^1.5.0", - "prebuild-install": "^7.1.1" - }, - "engines": { - "node": "20.x || 22.x || 23.x || 24.x || 25.x" - } - }, - "node_modules/bindings": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", - "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", - "license": "MIT", - "dependencies": { - "file-uri-to-path": "1.0.0" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, "node_modules/braces": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", @@ -233,30 +178,6 @@ "node": ">=8" } }, - "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" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, "node_modules/buildcheck": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/buildcheck/-/buildcheck-0.0.6.tgz", @@ -336,30 +257,6 @@ "node": ">= 8" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "license": "MIT", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/default-browser": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", @@ -400,15 +297,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/detect-libc": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", - "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -421,15 +309,6 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "license": "MIT" }, - "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==", - "license": "MIT", - "dependencies": { - "once": "^1.4.0" - } - }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -454,15 +333,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "license": "(MIT OR WTFPL)", - "engines": { - "node": ">=6" - } - }, "node_modules/fastq": { "version": "1.18.0", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.18.0.tgz", @@ -472,12 +342,6 @@ "reusify": "^1.0.4" } }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", - "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", - "license": "MIT" - }, "node_modules/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -506,12 +370,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "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==", - "license": "MIT" - }, "node_modules/fs-extra": { "version": "11.3.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.0.tgz", @@ -535,12 +393,6 @@ "node": ">=10" } }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "license": "MIT" - }, "node_modules/glob": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", @@ -570,38 +422,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "license": "ISC" }, - "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" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "license": "ISC" - }, "node_modules/is-docker": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-3.0.0.tgz", @@ -767,18 +587,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/minimatch": { "version": "10.1.1", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", @@ -794,15 +602,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/minipass": { "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", @@ -839,12 +638,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "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==", - "license": "MIT" - }, "node_modules/nan": { "version": "2.22.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.22.0.tgz", @@ -852,33 +645,6 @@ "license": "MIT", "optional": true }, - "node_modules/napi-build-utils": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", - "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", - "license": "MIT" - }, - "node_modules/node-abi": { - "version": "3.73.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.73.0.tgz", - "integrity": "sha512-z8iYzQGBu35ZkTQ9mtR8RqugJZ9RCLn8fv3d7LsgDBzOijGQP3RdKTX4LA7LXw03ZhU5z0l4xfhIMgSES31+cg==", - "license": "MIT", - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/open": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/open/-/open-10.1.0.tgz", @@ -940,42 +706,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/prebuild-install": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", - "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^2.0.0", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pump": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", - "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", - "license": "MIT", - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -1014,35 +744,6 @@ ], "license": "MIT" }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/readline-sync": { "version": "1.4.10", "resolved": "https://registry.npmjs.org/readline-sync/-/readline-sync-1.4.10.tgz", @@ -1097,26 +798,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -1168,51 +849,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, "node_modules/spdx-exceptions": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", @@ -1252,15 +888,6 @@ "nan": "^2.20.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==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/string-width": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", @@ -1357,15 +984,6 @@ "node": ">=8" } }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/supports-color": { "version": "10.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.0.0.tgz", @@ -1395,40 +1013,6 @@ "node": ">=18" } }, - "node_modules/tar-fs": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", - "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", - "license": "MIT", - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "license": "ISC" - }, - "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==", - "license": "MIT", - "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/tmp": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.4.tgz", @@ -1450,18 +1034,6 @@ "node": ">=8.0" } }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, "node_modules/tweetnacl": { "version": "0.14.5", "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", @@ -1483,12 +1055,6 @@ "node": ">= 10.0.0" } }, - "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==", - "license": "MIT" - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -1595,12 +1161,6 @@ "node": ">=8" } }, - "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==", - "license": "ISC" - }, "node_modules/xhr2": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/xhr2/-/xhr2-0.2.1.tgz", diff --git a/package.json b/package.json index ebdd11f7c..3799117a9 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,6 @@ }, "dependencies": { "@nodelib/fs.walk": "^3.0.1", - "better-sqlite3": "^12.5.0", "env-paths": "^3.0.0", "fs-extra": "^11.3.0", "fuse.js": "^7.1.0", diff --git a/src/Spago/Db.js b/src/Spago/Db.js index 793ce65e5..dd972ad09 100644 --- a/src/Spago/Db.js +++ b/src/Spago/Db.js @@ -1,118 +1,172 @@ -import Database from "better-sqlite3"; +import { DatabaseSync } from "node:sqlite"; +import fs from "node:fs"; +import path from "node:path"; -export const connectImpl = (path, logger) => { - logger("Connecting to database at " + path); - let db = new Database(path, { - fileMustExist: false, - // verbose: logger, +export const connectImpl = (databasePath, logger) => { + return Promise.resolve().then(() => { + logger("Connecting to database at " + databasePath); + + // Ensure directory exists + try { + const dir = path.dirname(databasePath); + if (dir) { + fs.mkdirSync(dir, { recursive: true }); + } + } catch (err) { + // ignore - will fail later if needed + } + + const db = new DatabaseSync(databasePath, { + enableForeignKeyConstraints: true, + }); + + db.exec("PRAGMA journal_mode = WAL"); + db.exec("PRAGMA foreign_keys = ON"); + + db.prepare(`CREATE TABLE IF NOT EXISTS package_sets + ( version TEXT PRIMARY KEY NOT NULL + , compiler TEXT NOT NULL + , date TEXT NOT NULL + )`).run(); + db.prepare(`CREATE TABLE IF NOT EXISTS package_set_entries + ( packageSetVersion TEXT NOT NULL + , packageName TEXT NOT NULL + , packageVersion TEXT NOT NULL + , PRIMARY KEY (packageSetVersion, packageName, packageVersion) + , FOREIGN KEY (packageSetVersion) REFERENCES package_sets(version) + )`).run(); + db.prepare(`CREATE TABLE IF NOT EXISTS last_git_pull + ( key TEXT PRIMARY KEY NOT NULL + , date TEXT NOT NULL + )`).run(); + db.prepare(`CREATE TABLE IF NOT EXISTS package_metadata + ( name TEXT PRIMARY KEY NOT NULL + , metadata TEXT NOT NULL + , last_fetched TEXT NOT NULL + )`).run(); + // it would be lovely if we'd have a foreign key on package_metadata, but that would + // require reading metadata before manifests, which we can't always guarantee + db.prepare(`CREATE TABLE IF NOT EXISTS package_manifests + ( name TEXT NOT NULL + , version TEXT NOT NULL + , manifest TEXT NOT NULL + , PRIMARY KEY (name, version) + )`).run(); + return db; }); - db.pragma("journal_mode = WAL"); - db.pragma("foreign_keys = ON"); - - db.prepare(`CREATE TABLE IF NOT EXISTS package_sets - ( version TEXT PRIMARY KEY NOT NULL - , compiler TEXT NOT NULL - , date TEXT NOT NULL - )`).run(); - db.prepare(`CREATE TABLE IF NOT EXISTS package_set_entries - ( packageSetVersion TEXT NOT NULL - , packageName TEXT NOT NULL - , packageVersion TEXT NOT NULL - , PRIMARY KEY (packageSetVersion, packageName, packageVersion) - , FOREIGN KEY (packageSetVersion) REFERENCES package_sets(version) - )`).run(); - db.prepare(`CREATE TABLE IF NOT EXISTS last_git_pull - ( key TEXT PRIMARY KEY NOT NULL - , date TEXT NOT NULL - )`).run(); - db.prepare(`CREATE TABLE IF NOT EXISTS package_metadata - ( name TEXT PRIMARY KEY NOT NULL - , metadata TEXT NOT NULL - , last_fetched TEXT NOT NULL - )`).run(); - // it would be lovely if we'd have a foreign key on package_metadata, but that would - // require reading metadatas before manifests, which we can't always guarantee - db.prepare(`CREATE TABLE IF NOT EXISTS package_manifests - ( name TEXT NOT NULL - , version TEXT NOT NULL - , manifest TEXT NOT NULL - , PRIMARY KEY (name, version) - )`).run(); - return db; }; export const insertPackageSetImpl = (db, packageSet) => { - db.prepare( - "INSERT INTO package_sets (version, compiler, date) VALUES (@version, @compiler, @date)" - ).run(packageSet); + return Promise.resolve().then(() => { + db.prepare( + "INSERT INTO package_sets (version, compiler, date) VALUES (@version, @compiler, @date)" + ).run(packageSet); + }); }; export const insertPackageSetEntryImpl = (db, packageSetEntry) => { - db.prepare( - "INSERT INTO package_set_entries (packageSetVersion, packageName, packageVersion) VALUES (@packageSetVersion, @packageName, @packageVersion)" - ).run(packageSetEntry); -} + return Promise.resolve().then(() => { + db.prepare( + "INSERT INTO package_set_entries (packageSetVersion, packageName, packageVersion) VALUES (@packageSetVersion, @packageName, @packageVersion)" + ).run(packageSetEntry); + }); +}; export const selectLatestPackageSetByCompilerImpl = (db, compiler) => { - const row = db - .prepare("SELECT * FROM package_sets WHERE compiler = ? ORDER BY date DESC LIMIT 1") - .get(compiler); - return row; -} + return Promise.resolve().then(() => { + const row = db + .prepare("SELECT * FROM package_sets WHERE compiler = ? ORDER BY date DESC LIMIT 1") + .get(compiler); + return row; + }); +}; export const selectPackageSetsImpl = (db) => { - const row = db - .prepare("SELECT * FROM package_sets ORDER BY date ASC") - .all(); - return row; -} + return Promise.resolve().then(() => { + const rows = db.prepare("SELECT * FROM package_sets ORDER BY date ASC").all(); + return rows; + }); +}; export const selectPackageSetEntriesBySetImpl = (db, packageSetVersion) => { - const row = db - .prepare("SELECT * FROM package_set_entries WHERE packageSetVersion = ?") - .all(packageSetVersion); - return row; -} + return Promise.resolve().then(() => { + const rows = db + .prepare("SELECT * FROM package_set_entries WHERE packageSetVersion = ?") + .all(packageSetVersion); + return rows; + }); +}; export const selectPackageSetEntriesByPackageImpl = (db, packageName, packageVersion) => { - const row = db - .prepare("SELECT * FROM package_set_entries WHERE packageName = ? AND packageVersion = ?") - .all(packageName, packageVersion); - return row; -} + return Promise.resolve().then(() => { + const rows = db + .prepare("SELECT * FROM package_set_entries WHERE packageName = ? AND packageVersion = ?") + .all(packageName, packageVersion); + return rows; + }); +}; export const getLastPullImpl = (db, key) => { - const row = db - .prepare("SELECT * FROM last_git_pull WHERE key = ? LIMIT 1") - .get(key); - return row?.date; -} + return Promise.resolve().then(() => { + const row = db + .prepare("SELECT * FROM last_git_pull WHERE key = ? LIMIT 1") + .get(key); + return row?.date; + }); +}; export const updateLastPullImpl = (db, key, date) => { - db.prepare("INSERT OR REPLACE INTO last_git_pull (key, date) VALUES (@key, @date)").run({ key, date }); -} + return Promise.resolve().then(() => { + db.prepare("INSERT OR REPLACE INTO last_git_pull (key, date) VALUES (?, ?)").run(key, date); + }); +}; export const getManifestImpl = (db, name, version) => { - const row = db - .prepare("SELECT * FROM package_manifests WHERE name = ? AND version = ? LIMIT 1") - .get(name, version); - return row?.manifest; -} + return Promise.resolve().then(() => { + const row = db + .prepare("SELECT * FROM package_manifests WHERE name = ? AND version = ? LIMIT 1") + .get(name, version); + return row?.manifest; + }); +}; export const insertManifestImpl = (db, name, version, manifest) => { - db.prepare("INSERT OR IGNORE INTO package_manifests (name, version, manifest) VALUES (@name, @version, @manifest)").run({ name, version, manifest }); -} + return Promise.resolve().then(() => { + db.prepare("INSERT OR IGNORE INTO package_manifests (name, version, manifest) VALUES (?, ?, ?)").run( + name, + version, + manifest + ); + }); +}; export const removeManifestImpl = (db, name, version) => { - db.prepare("DELETE FROM package_manifests WHERE name = ? AND version = ?").run(name, version); -} + return Promise.resolve().then(() => { + db.prepare("DELETE FROM package_manifests WHERE name = ? AND version = ?").run(name, version); + }); +}; export const insertMetadataImpl = (db, name, metadata, last_fetched) => { - db.prepare("INSERT OR REPLACE INTO package_metadata (name, metadata, last_fetched) VALUES (@name, @metadata, @last_fetched)").run({ name, metadata, last_fetched }); -} + return Promise.resolve().then(() => { + db.prepare( + "INSERT OR REPLACE INTO package_metadata (name, metadata, last_fetched) VALUES (@name, @metadata, @last_fetched)" + ).run({ name, metadata, last_fetched }); + }); +}; + +export const getMetadataImpl = (db, name) => { + return Promise.resolve().then(() => { + const row = db + .prepare("SELECT * FROM package_metadata WHERE name = ? LIMIT 1") + .get(name); + return row; + }); +}; export const getMetadataForPackagesImpl = (db, names) => { - // There can be a lot of package names here, potentially hitting the max number of sqlite parameters, so we use json to bypass this - const query = db.prepare("SELECT * FROM package_metadata WHERE name IN (SELECT value FROM json_each(?));"); - return query.all(JSON.stringify(names)); -}; \ No newline at end of file + return Promise.resolve().then(() => { + // There can be a lot of package names here, potentially hitting the max number of sqlite parameters, so we use json to bypass this + const query = db.prepare("SELECT * FROM package_metadata WHERE name IN (SELECT value FROM json_each(?));"); + return query.all(JSON.stringify(names)); + }); +}; diff --git a/src/Spago/Db.purs b/src/Spago/Db.purs index 979ad6aaa..1003998bd 100644 --- a/src/Spago/Db.purs +++ b/src/Spago/Db.purs @@ -21,6 +21,8 @@ module Spago.Db import Spago.Prelude +import Control.Promise (Promise) +import Control.Promise as Promise import Data.Array as Array import Data.Codec.JSON as CJ import Data.Codec.JSON.Record as CJ.Record @@ -51,23 +53,24 @@ type ConnectOptions = , logger :: String -> Effect Unit } -connect :: ConnectOptions -> Effect Db -connect { database, logger } = Uncurried.runEffectFn2 connectImpl database (Uncurried.mkEffectFn1 logger) +connect :: ConnectOptions -> Aff Db +connect { database, logger } = + Promise.toAffE $ Uncurried.runEffectFn2 connectImpl database (Uncurried.mkEffectFn1 logger) -insertPackageSet :: Db -> PackageSet -> Effect Unit -insertPackageSet db = Uncurried.runEffectFn2 insertPackageSetImpl db <<< packageSetToJs +insertPackageSet :: Db -> PackageSet -> Aff Unit +insertPackageSet db = Promise.toAffE <<< Uncurried.runEffectFn2 insertPackageSetImpl db <<< packageSetToJs -insertPackageSetEntry :: Db -> PackageSetEntry -> Effect Unit -insertPackageSetEntry db = Uncurried.runEffectFn2 insertPackageSetEntryImpl db <<< packageSetEntryToJs +insertPackageSetEntry :: Db -> PackageSetEntry -> Aff Unit +insertPackageSetEntry db = Promise.toAffE <<< Uncurried.runEffectFn2 insertPackageSetEntryImpl db <<< packageSetEntryToJs -selectPackageSets :: Db -> Effect (Array PackageSet) +selectPackageSets :: Db -> Aff (Array PackageSet) selectPackageSets db = do - packageSets <- Uncurried.runEffectFn1 selectPackageSetsImpl db + packageSets <- Promise.toAffE $ Uncurried.runEffectFn1 selectPackageSetsImpl db pure $ Array.mapMaybe packageSetFromJs packageSets -selectLatestPackageSetByCompiler :: Db -> Version -> Effect (Maybe PackageSet) +selectLatestPackageSetByCompiler :: Db -> Version -> Aff (Maybe PackageSet) selectLatestPackageSetByCompiler db compiler = do - maybePackageSet <- Nullable.toMaybe <$> Uncurried.runEffectFn2 selectLatestPackageSetByCompilerImpl db (Version.print compiler) + maybePackageSet <- Nullable.toMaybe <$> Promise.toAffE (Uncurried.runEffectFn2 selectLatestPackageSetByCompilerImpl db (Version.print compiler)) pure $ packageSetFromJs =<< maybePackageSet {- @@ -85,31 +88,31 @@ selectPackageSetEntriesByPackage db packageName version = do pure $ Array.mapMaybe packageSetEntryFromJs packageSetEntries -} -getLastPull :: Db -> String -> Effect (Maybe DateTime) +getLastPull :: Db -> String -> Aff (Maybe DateTime) getLastPull db key = do - maybePull <- Nullable.toMaybe <$> Uncurried.runEffectFn2 getLastPullImpl db key + maybePull <- Nullable.toMaybe <$> Promise.toAffE (Uncurried.runEffectFn2 getLastPullImpl db key) pure $ (Either.hush <<< DateTime.Format.unformat Internal.Format.iso8601DateTime) =<< maybePull -updateLastPull :: Db -> String -> DateTime -> Effect Unit -updateLastPull db key date = Uncurried.runEffectFn3 updateLastPullImpl db key (DateTime.Format.format Internal.Format.iso8601DateTime date) +updateLastPull :: Db -> String -> DateTime -> Aff Unit +updateLastPull db key date = Promise.toAffE $ Uncurried.runEffectFn3 updateLastPullImpl db key (DateTime.Format.format Internal.Format.iso8601DateTime date) -getManifest :: Db -> PackageName -> Version -> Effect (Maybe Manifest) +getManifest :: Db -> PackageName -> Version -> Aff (Maybe Manifest) getManifest db packageName version = do - maybeManifest <- Nullable.toMaybe <$> Uncurried.runEffectFn3 getManifestImpl db (PackageName.print packageName) (Version.print version) + maybeManifest <- Nullable.toMaybe <$> Promise.toAffE (Uncurried.runEffectFn3 getManifestImpl db (PackageName.print packageName) (Version.print version)) pure $ (Either.hush <<< parseJson Manifest.codec) =<< maybeManifest -insertManifest :: Db -> PackageName -> Version -> Manifest -> Effect Unit -insertManifest db packageName version manifest = Uncurried.runEffectFn4 insertManifestImpl db (PackageName.print packageName) (Version.print version) (printJson Manifest.codec manifest) +insertManifest :: Db -> PackageName -> Version -> Manifest -> Aff Unit +insertManifest db packageName version manifest = Promise.toAffE $ Uncurried.runEffectFn4 insertManifestImpl db (PackageName.print packageName) (Version.print version) (printJson Manifest.codec manifest) -getMetadata :: Db -> PackageName -> Effect (Maybe Metadata) +getMetadata :: Db -> PackageName -> Aff (Maybe Metadata) getMetadata db packageName = getMetadataForPackages db [ packageName ] <#> Map.lookup packageName -getMetadataForPackages :: Db -> Array PackageName -> Effect (Map PackageName Metadata) +getMetadataForPackages :: Db -> Array PackageName -> Aff (Map PackageName Metadata) getMetadataForPackages db packageNames = do - metadataEntries <- Uncurried.runEffectFn2 getMetadataForPackagesImpl db (PackageName.print <$> packageNames) - now <- Now.nowDateTime + metadataEntries <- Promise.toAffE $ Uncurried.runEffectFn2 getMetadataForPackagesImpl db (PackageName.print <$> packageNames) + now <- liftEffect Now.nowDateTime pure $ metadataEntries # @@ -125,13 +128,13 @@ getMetadataForPackages db packageNames = do ) # Map.fromFoldable -insertMetadata :: Db -> PackageName -> Metadata -> Effect Unit +insertMetadata :: Db -> PackageName -> Metadata -> Aff Unit insertMetadata db packageName metadata@(Metadata { unpublished }) = do - now <- Now.nowDateTime - Uncurried.runEffectFn4 insertMetadataImpl db (PackageName.print packageName) (printJson Metadata.codec metadata) (DateTime.Format.format Internal.Format.iso8601DateTime now) + now <- liftEffect Now.nowDateTime + Promise.toAffE $ Uncurried.runEffectFn4 insertMetadataImpl db (PackageName.print packageName) (printJson Metadata.codec metadata) (DateTime.Format.format Internal.Format.iso8601DateTime now) -- we also do a pass of removing the cached manifests that have been unpublished for_ (Map.toUnfoldable unpublished :: Array _) \(Tuple version _) -> do - Uncurried.runEffectFn3 removeManifestImpl db (PackageName.print packageName) (Version.print version) + Promise.toAffE $ Uncurried.runEffectFn3 removeManifestImpl db (PackageName.print packageName) (Version.print version) -------------------------------------------------------------------------------- -- Table types and conversions @@ -232,32 +235,32 @@ packageSetCodec = CJ.named "PackageSet" $ CJ.Record.object -------------------------------------------------------------------------------- -- FFI -foreign import connectImpl :: EffectFn2 GlobalPath (EffectFn1 String Unit) Db +foreign import connectImpl :: EffectFn2 GlobalPath (EffectFn1 String Unit) (Promise Db) -foreign import insertPackageSetImpl :: EffectFn2 Db PackageSetJs Unit +foreign import insertPackageSetImpl :: EffectFn2 Db PackageSetJs (Promise Unit) -foreign import insertPackageSetEntryImpl :: EffectFn2 Db PackageSetEntryJs Unit +foreign import insertPackageSetEntryImpl :: EffectFn2 Db PackageSetEntryJs (Promise Unit) -foreign import selectLatestPackageSetByCompilerImpl :: EffectFn2 Db String (Nullable PackageSetJs) +foreign import selectLatestPackageSetByCompilerImpl :: EffectFn2 Db String (Promise (Nullable PackageSetJs)) -foreign import selectPackageSetsImpl :: EffectFn1 Db (Array PackageSetJs) +foreign import selectPackageSetsImpl :: EffectFn1 Db (Promise (Array PackageSetJs)) -foreign import selectPackageSetEntriesBySetImpl :: EffectFn2 Db String (Array PackageSetEntryJs) +foreign import selectPackageSetEntriesBySetImpl :: EffectFn2 Db String (Promise (Array PackageSetEntryJs)) -foreign import selectPackageSetEntriesByPackageImpl :: EffectFn3 Db String String (Array PackageSetEntryJs) +foreign import selectPackageSetEntriesByPackageImpl :: EffectFn3 Db String String (Promise (Array PackageSetEntryJs)) -foreign import getLastPullImpl :: EffectFn2 Db String (Nullable String) +foreign import getLastPullImpl :: EffectFn2 Db String (Promise (Nullable String)) -foreign import updateLastPullImpl :: EffectFn3 Db String String Unit +foreign import updateLastPullImpl :: EffectFn3 Db String String (Promise Unit) -foreign import getManifestImpl :: EffectFn3 Db String String (Nullable String) +foreign import getManifestImpl :: EffectFn3 Db String String (Promise (Nullable String)) -foreign import insertManifestImpl :: EffectFn4 Db String String String Unit +foreign import insertManifestImpl :: EffectFn4 Db String String String (Promise Unit) -foreign import removeManifestImpl :: EffectFn3 Db String String Unit +foreign import removeManifestImpl :: EffectFn3 Db String String (Promise Unit) -foreign import getMetadataImpl :: EffectFn2 Db String (Nullable MetadataEntryJs) +foreign import getMetadataImpl :: EffectFn2 Db String (Promise (Nullable MetadataEntryJs)) -foreign import getMetadataForPackagesImpl :: EffectFn2 Db (Array String) (Array MetadataEntryJs) +foreign import getMetadataForPackagesImpl :: EffectFn2 Db (Array String) (Promise (Array MetadataEntryJs)) -foreign import insertMetadataImpl :: EffectFn4 Db String String String Unit +foreign import insertMetadataImpl :: EffectFn4 Db String String String (Promise Unit) diff --git a/src/Spago/Registry.purs b/src/Spago/Registry.purs index c9ef7ed29..163bc0141 100644 --- a/src/Spago/Registry.purs +++ b/src/Spago/Registry.purs @@ -195,7 +195,7 @@ getRegistryFns registryBox registryLock = do updatePackageSetsDb db = do { logOptions } <- ask setsAvailable <- map Set.fromFoldable getAvailablePackageSets - setsInDb <- map (Set.fromFoldable <<< map _.version) (liftEffect $ Db.selectPackageSets db) + setsInDb <- map (Set.fromFoldable <<< map _.version) (liftAff $ Db.selectPackageSets db) let setsToInsert = Set.difference setsAvailable setsInDb unless (Set.isEmpty setsToInsert) do @@ -203,10 +203,10 @@ getRegistryFns registryBox registryLock = do PackageSet set <- runSpago { logOptions } (readPackageSetImpl setVersion) -- First insert the package set logDebug $ "Inserting package set in DB: " <> Version.print setVersion - liftEffect $ Db.insertPackageSet db { compiler: set.compiler, date: set.published, version: set.version } + liftAff $ Db.insertPackageSet db { compiler: set.compiler, date: set.published, version: set.version } -- Then we insert every entry separately for_ (Map.toUnfoldable set.packages :: Array _) \(Tuple name version) -> do - liftEffect $ Db.insertPackageSetEntry db { packageName: name, packageVersion: version, packageSetVersion: set.version } + liftAff $ Db.insertPackageSetEntry db { packageName: name, packageVersion: version, packageSetVersion: set.version } -- | List all the package sets versions available in the Registry repo getAvailablePackageSets :: ∀ a. Spago (LogEnv a) (Array Version) @@ -252,7 +252,7 @@ getMetadataForPackagesImpl db onlineStatus names = do parTraverseSpago metadataFromFile names false -> do -- the first layer of caching is in the DB, so we try that first - metadatas <- liftEffect $ Db.getMetadataForPackages db names + metadatas <- liftAff $ Db.getMetadataForPackages db names parTraverseSpago ( \name -> do case Map.lookup name metadatas of @@ -270,13 +270,13 @@ getMetadataForPackagesImpl db onlineStatus names = do Left e -> pure $ Left e Right m -> do -- memoize it if found - liftEffect (Db.insertMetadata db pkgName m) + liftAff (Db.insertMetadata db pkgName m) pure $ Right (pkgName /\ m) -- Manifests are immutable so we can just lookup in the DB or read from file if not there getManifestFromIndexImpl :: Db -> PackageName -> Version -> Spago (LogEnv ()) (Maybe Manifest) getManifestFromIndexImpl db name version = do - liftEffect (Db.getManifest db name version) >>= case _ of + liftAff (Db.getManifest db name version) >>= case _ of Just manifest -> pure (Just manifest) Nothing -> do -- if we don't have it we need to read it from file @@ -292,18 +292,18 @@ getManifestFromIndexImpl db name version = do -- and memoize it for_ manifests \(Tuple _ manifest@(Manifest m)) -> do logDebug $ "Inserting manifest in DB: " <> PackageName.print name <> " v" <> Version.print m.version - liftEffect $ Db.insertManifest db name m.version manifest + liftAff $ Db.insertManifest db name m.version manifest pure (Map.lookup version versions) listPackageSetsImpl :: Spago (PreRegistryEnv _) (Array Db.PackageSet) listPackageSetsImpl = do { db } <- ask - liftEffect $ Db.selectPackageSets db + liftAff $ Db.selectPackageSets db findPackageSetImpl :: forall a. Maybe Version -> Spago (PreRegistryEnv a) Version findPackageSetImpl maybeSet = do { db, purs } <- ask - availableSets <- liftEffect $ Db.selectPackageSets db + availableSets <- liftAff $ Db.selectPackageSets db let availableVersions = map _.version availableSets case maybeSet of @@ -314,7 +314,7 @@ findPackageSetImpl maybeSet = do <> map (indent <<< toDoc <<< Version.print) (Array.sort availableVersions) -- no set in input: read the compiler version, get the latest set matching Nothing -> do - maybeVersion <- liftEffect $ Db.selectLatestPackageSetByCompiler db purs.version + maybeVersion <- liftAff $ Db.selectLatestPackageSetByCompiler db purs.version case maybeVersion of -- if we get a version, all good Just { version } -> pure version @@ -354,12 +354,12 @@ shouldFetchRegistryRepos :: ∀ a. Db -> Spago (LogEnv a) Boolean shouldFetchRegistryRepos db = do now <- liftEffect $ Now.nowDateTime let registryKey = "registry" - maybeLastRegistryFetch <- liftEffect $ Db.getLastPull db registryKey + maybeLastRegistryFetch <- liftAff $ Db.getLastPull db registryKey case maybeLastRegistryFetch of -- No record, so we have to fetch Nothing -> do logDebug "No record of last registry pull, will fetch" - liftEffect $ Db.updateLastPull db registryKey now + liftAff $ Db.updateLastPull db registryKey now pure true -- We have a record, so we check if it's old enough Just lastRegistryFetch -> do @@ -370,7 +370,7 @@ shouldFetchRegistryRepos db = do registryExists <- FS.exists Paths.registryPath if isOldEnough || not registryExists then do logDebug "Registry is old, refreshing" - liftEffect $ Db.updateLastPull db registryKey now + liftAff $ Db.updateLastPull db registryKey now pure true else do pure false diff --git a/test/Prelude.purs b/test/Prelude.purs index 1b5881da8..00e0a1c40 100644 --- a/test/Prelude.purs +++ b/test/Prelude.purs @@ -65,7 +65,7 @@ withTempDir = Aff.bracket createTempDir cleanupTempDir spago' stdin args = Cmd.exec (Path.global "node") - ([ Path.toRaw $ oldCwd "bin" "index.dev.js" ] <> args) + ([ "--no-warnings", Path.toRaw $ oldCwd "bin" "index.dev.js" ] <> args) $ Cmd.defaultExecOptions { pipeStdout = false, pipeStderr = false, pipeStdin = stdin } spago = spago' StdinNewPipe