From b88de95ca9f5ef31d6bab1762b2d648ef51f592f Mon Sep 17 00:00:00 2001 From: Avery Harnish Date: Fri, 8 Nov 2019 16:25:16 -0600 Subject: [PATCH] Use binary-install for npm --- npm/binary.js | 43 +++++++++ npm/install-wrangler.js | 67 -------------- npm/npm-shrinkwrap.json | 195 ---------------------------------------- npm/package.json | 9 +- npm/run-wrangler.js | 23 +---- 5 files changed, 47 insertions(+), 290 deletions(-) create mode 100755 npm/binary.js delete mode 100755 npm/install-wrangler.js delete mode 100644 npm/npm-shrinkwrap.json diff --git a/npm/binary.js b/npm/binary.js new file mode 100755 index 000000000..ab9a5fa44 --- /dev/null +++ b/npm/binary.js @@ -0,0 +1,43 @@ +const { Binary } = require("binary-install"); +const os = require("os"); +const { join } = require("path"); + +const getPlatform = () => { + const type = os.type(); + const arch = os.arch(); + + if (type === "Windows_NT" && arch === "x64") { + return "x86_64-pc-windows-msvc"; + } + if (type === "Linux" && arch === "x64") { + return "x86_64-unknown-linux-musl"; + } + if (type === "Darwin" && arch === "x64") { + return "x86_64-apple-darwin"; + } + + throw new Error(`Unsupported platform: ${type} ${arch}`); +}; + +const getBinary = () => { + const platform = getPlatform(); + const version = require("./package.json").version; + const url = `https://workers.cloudflare.com/get-npm-wrangler-binary/${version}/${platform}`; + const installDirectory = join(os.homedir(), ".wrangler"); + return new Binary(url, { name: "wrangler", installDirectory }); +}; + +const run = () => { + const binary = getBinary(); + binary.run(); +}; + +const install = () => { + const binary = getBinary(); + binary.install(); +}; + +module.exports = { + install, + run +}; diff --git a/npm/install-wrangler.js b/npm/install-wrangler.js deleted file mode 100755 index 215a8cc62..000000000 --- a/npm/install-wrangler.js +++ /dev/null @@ -1,67 +0,0 @@ -const axios = require("axios"); -const os = require("os"); -const { join, resolve } = require("path"); -const { mkdirSync, existsSync } = require("fs"); -const rimraf = require("rimraf"); -const tar = require("tar"); -const { get } = axios; -const { homedir } = require('os'); - -const cwd = join(homedir(), ".wrangler"); - -const VERSION = require("./package.json").version; - -function getPlatform() { - const type = os.type(); - const arch = os.arch(); - - if (type === "Windows_NT" && arch === "x64") { - return "x86_64-pc-windows-msvc"; - } - if (type === "Linux" && arch === "x64") { - return "x86_64-unknown-linux-musl"; - } - if (type === "Darwin" && arch === "x64") { - return "x86_64-apple-darwin"; - } - - throw new Error(`Unsupported platform: ${type} ${arch}`); -} - -function downloadAsset(version, platform) { - const dest = join(cwd, "out"); - - if (existsSync(dest)) { - rimraf.sync(dest); - } - mkdirSync(dest); - - const url = `https://workers.cloudflare.com/get-npm-wrangler-binary/${ version }/${ platform }` - - console.log("Downloading release", url); - - return axios({ - url, - responseType: "stream" - }).then(res => { - res.data.pipe( - tar.x({ - strip: 1, - C: dest - }) - ); - }); -} - -if (!existsSync(cwd)) { - mkdirSync(cwd); -} - -downloadAsset(VERSION, getPlatform()) - .then(() => { - console.log("Wrangler has been installed!"); - }) - .catch(e => { - console.error("Error fetching release", e.message); - throw e; - }); diff --git a/npm/npm-shrinkwrap.json b/npm/npm-shrinkwrap.json deleted file mode 100644 index 2e30d0cc8..000000000 --- a/npm/npm-shrinkwrap.json +++ /dev/null @@ -1,195 +0,0 @@ -{ - "name": "@cloudflare/wrangler", - "version": "1.5.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "axios": { - "version": "0.18.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.1.tgz", - "integrity": "sha512-0BfJq4NSfQXd+SkFdrvFbG7addhYSBA2mQwISr46pD6E5iqkWg02RAs8vyTT/j0RTnoYmeXauBuSv1qKwR179g==", - "requires": { - "follow-redirects": "1.5.10", - "is-buffer": "^2.0.2" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", - "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "follow-redirects": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz", - "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==", - "requires": { - "debug": "=3.1.0" - } - }, - "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "requires": { - "minipass": "^2.6.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "is-buffer": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.3.tgz", - "integrity": "sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw==" - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - }, - "minipass": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.6.2.tgz", - "integrity": "sha512-38Jwdc8AttUDaQAIRX8Iaw3QoCDWjAwKMGeGDF9JUi9QCPMjH5qAQg/hdO8o1nC7Nmh1/CqzMg5FQPEKuKwznQ==", - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.2.tgz", - "integrity": "sha512-hR3At21uSrsjjDTWrbu0IMLTpnkpv8IIMFDFaoz43Tmu4LkmAXfH44vNNzpTnf+OAQQCHrb91y/wc2J4x5XgSQ==", - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" - }, - "tar": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", - "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.5", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==" - } - } -} diff --git a/npm/package.json b/npm/package.json index aca075081..1a6a7479f 100644 --- a/npm/package.json +++ b/npm/package.json @@ -2,10 +2,10 @@ "name": "@cloudflare/wrangler", "version": "1.5.0", "description": "Wrangle your Cloudflare Workers", - "main": "index.js", + "main": "binary.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", - "postinstall": "node install-wrangler.js" + "postinstall": "node -e 'require(\"./binary.js\").install()'" }, "bin": { "wrangler": "./run-wrangler.js" @@ -20,11 +20,6 @@ "url": "https://github.com/cloudflare/wrangler/issues" }, "homepage": "https://github.com/cloudflare/wrangler#readme", - "dependencies": { - "axios": "0.18.1", - "rimraf": "2.7.1", - "tar": "4.4.10" - }, "keywords": [ "wrangler", "cloudflare", diff --git a/npm/run-wrangler.js b/npm/run-wrangler.js index 193b89f23..4b0b89616 100755 --- a/npm/run-wrangler.js +++ b/npm/run-wrangler.js @@ -1,23 +1,4 @@ #!/usr/bin/env node -const { join } = require("path"); -const { spawnSync } = require("child_process"); -const { homedir } = require("os"); - -const cwd = join(homedir(), ".wrangler"); -const bin = join(cwd, "out", "wrangler"); -const [, , ...args] = process.argv; - -const opts = { - cwd: process.cwd(), - stdio: "inherit" -}; - -const result = spawnSync(bin, args, opts); - -if (result.error) { - console.error(result.error); - process.exit(1); -} - -process.exit(result.status); +const { run } = require("./binary"); +run() \ No newline at end of file