diff --git a/package.json b/package.json index 919f4e0..f9247f6 100644 --- a/package.json +++ b/package.json @@ -20,12 +20,13 @@ "test": "yarn lint" }, "dependencies": { - "download": "^8.0.0", - "ora": "^5.4.1", - "decompress": "^4.2.1", "consola": "^2.15.3", + "decompress": "^4.2.1", + "download": "^8.0.0", "fs-extra": "^10.0.0", - "node-graceful-shutdown": "^1.1.0" + "mongodb-download-url": "^1.4.1", + "node-graceful-shutdown": "^1.1.0", + "ora": "^5.4.1" }, "devDependencies": { "@nuxtjs/eslint-config-typescript": "^6.0.1", diff --git a/src/formula.ts b/src/formula.ts index 23ca520..6fe00c5 100644 --- a/src/formula.ts +++ b/src/formula.ts @@ -3,19 +3,5 @@ export const mongoFormula = { version: '4.4.6', port: 27017, exec: 'bin/mongod', - execArgs: '--port {port} --dbpath {data}', - platforms: [ - { - name: 'linux', - source: 'https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-4.4.6.tgz' - }, - { - name: 'win32', - source: 'https://fastdl.mongodb.org/windows/mongodb-windows-x86_64-4.4.6.zip' - }, - { - name: 'darwin', - source: 'https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-4.4.6.tgz' - } - ] + execArgs: '--port {port} --dbpath {data}' } diff --git a/src/index.ts b/src/index.ts index 62b2b71..b13325f 100644 --- a/src/index.ts +++ b/src/index.ts @@ -8,6 +8,7 @@ import type { ExecaChildProcess } from 'execa' import execa from 'execa' import ora from 'ora' import { onShutdown } from 'node-graceful-shutdown' +import getURL from 'mongodb-download-url' import { mongoFormula as formula } from './formula' export interface MongoOptions { @@ -33,18 +34,15 @@ export async function startMongo (opts: MongoOptions): Promise { ...opts } - // Find platform - const platform = formula.platforms.find(p => p.name === opts.platform) - if (!platform) { - throw new Error(`Platform '${opts.platform}' is not available for '${formula.name}'`) - } + // Find source + const source = await getURL() // Resolve paths const dataDir = path.resolve(opts.dir, 'data', opts.name, formula.name) const logsDir = path.resolve(opts.dir, 'logs', opts.name, formula.name) const logFile = path.resolve(logsDir, 'logs.txt') - const sourceDir = path.resolve(opts.dir, 'source', formula.name, formula.version, platform.name) - const sourceFileName = `${formula.name}-${formula.version}-${platform.name}` + path.extname(platform.source) + const sourceDir = path.resolve(opts.dir, 'source', formula.name, formula.version, source.platform) + const sourceFileName = `${formula.name}-${formula.version}-${source.platform}` + path.extname(source.url) const sourceFile = path.resolve(sourceDir, sourceFileName) const extractDir = path.resolve(sourceDir, 'unpacked') const execFile = path.resolve(extractDir, formula.exec) @@ -60,7 +58,7 @@ export async function startMongo (opts: MongoOptions): Promise { if (!fsExtra.existsSync(sourceFile)) { const dlMessage = `Downloading ${sourceFileName}` spinner.start(dlMessage + '...') - const res = download(platform.source, sourceDir, { filename: sourceFileName }) + const res = download(source.url, sourceDir, { filename: sourceFileName }) res.on('downloadProgress', (e) => { spinner.text = `${dlMessage} | ${Math.round(e.percent * 100)}%` }) diff --git a/yarn.lock b/yarn.lock index 109e5a8..db42bfb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2641,6 +2641,11 @@ minimist@^1.2.0, minimist@^1.2.5: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== +minimist@^1.2.3: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + mkdirp@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" @@ -2665,6 +2670,16 @@ modify-values@^1.0.0: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== +mongodb-download-url@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mongodb-download-url/-/mongodb-download-url-1.4.1.tgz#2dd104b42562bfb8572cf3d5eac8bcaa3a727d1a" + integrity sha512-OC0EGXiYTwZNcLq2U7Hbt1MDSPQR57/Kput4+W0F2kwVOa0HwWW4oY6DS1gOLlIeVOsihRKKH9EPNnc/BxF7UA== + dependencies: + debug "^4.1.1" + minimist "^1.2.3" + node-fetch "^2.6.1" + semver "^7.1.1" + mri@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.6.tgz#49952e1044db21dbf90f6cd92bc9c9a777d415a6" @@ -2700,6 +2715,13 @@ neo-async@^2.6.0: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +node-fetch@^2.6.1: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-graceful-shutdown@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/node-graceful-shutdown/-/node-graceful-shutdown-1.1.0.tgz#f96558b687e153e94f3cf44ab7c4591a9b6c2f96" @@ -3619,6 +3641,11 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + trim-newlines@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" @@ -3830,6 +3857,19 @@ wcwidth@^1.0.1: dependencies: defaults "^1.0.3" +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"