10 changed files with 62 additions and 622 deletions
@ -1 +1,2 @@ |
|||
node_modules |
|||
build |
|||
|
@ -1,56 +0,0 @@ |
|||
#!/usr/bin/env node |
|||
'use strict'; |
|||
|
|||
var _commander = require('commander'); |
|||
|
|||
var _commander2 = _interopRequireDefault(_commander); |
|||
|
|||
var _path = require('path'); |
|||
|
|||
var _copyPaste = require('copy-paste'); |
|||
|
|||
var _lib = require('../lib'); |
|||
|
|||
var _lib2 = _interopRequireDefault(_lib); |
|||
|
|||
var _ms = require('ms'); |
|||
|
|||
var _ms2 = _interopRequireDefault(_ms); |
|||
|
|||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
|||
|
|||
_commander2.default.option('-d, --debug', 'Debug mode [off]', false).option('-C, --no-clipboard', 'Do not attempt to copy URL to clipboard').parse(process.argv); |
|||
|
|||
var path = _commander2.default.args[_commander2.default.args.length - 1]; |
|||
|
|||
if (path) { |
|||
if ('/' !== path[0]) { |
|||
path = (0, _path.resolve)(process.cwd(), path); |
|||
} |
|||
} else { |
|||
path = process.cwd(); |
|||
} |
|||
|
|||
var debug = !!_commander2.default.debug; |
|||
var clipboard = !_commander2.default.noClipboard; |
|||
var start = Date.now(); |
|||
|
|||
console.log('> Deploying ' + path); |
|||
|
|||
(0, _lib2.default)(path, { debug: debug }).then(function (url) { |
|||
var elapsed = (0, _ms2.default)(new Date() - start); |
|||
if (clipboard) { |
|||
(0, _copyPaste.copy)(url, function (err) { |
|||
console.log('> ' + url + ' ' + (!err ? '(copied to clipboard)' : '') + ' [' + elapsed + ']'); |
|||
}); |
|||
} else { |
|||
console.log('> ' + url + ' [' + elapsed + ']'); |
|||
} |
|||
}, function (err) { |
|||
error(err.message); |
|||
process.exit(1); |
|||
}); |
|||
|
|||
function error(err) { |
|||
console.error('> \u001b[31mError!\u001b[39m ' + err + '.'); |
|||
} |
@ -1,347 +0,0 @@ |
|||
'use strict'; |
|||
|
|||
Object.defineProperty(exports, "__esModule", { |
|||
value: true |
|||
}); |
|||
|
|||
var _promise = require('babel-runtime/core-js/promise'); |
|||
|
|||
var _promise2 = _interopRequireDefault(_promise); |
|||
|
|||
var _regenerator = require('babel-runtime/regenerator'); |
|||
|
|||
var _regenerator2 = _interopRequireDefault(_regenerator); |
|||
|
|||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); |
|||
|
|||
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); |
|||
|
|||
var _fsPromise = require('fs-promise'); |
|||
|
|||
var _fsPromise2 = _interopRequireDefault(_fsPromise); |
|||
|
|||
var _path = require('path'); |
|||
|
|||
var _arrFlatten = require('arr-flatten'); |
|||
|
|||
var _arrFlatten2 = _interopRequireDefault(_arrFlatten); |
|||
|
|||
var _arrayUnique = require('array-unique'); |
|||
|
|||
var _arrayUnique2 = _interopRequireDefault(_arrayUnique); |
|||
|
|||
var _minimatch = require('minimatch'); |
|||
|
|||
var _minimatch2 = _interopRequireDefault(_minimatch); |
|||
|
|||
var _ignored = require('./ignored'); |
|||
|
|||
var _ignored2 = _interopRequireDefault(_ignored); |
|||
|
|||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
|||
|
|||
/** |
|||
* Returns a list of files in the given |
|||
* directory that are subject to be |
|||
* synchronized. |
|||
* |
|||
* @param {String} full path to directory |
|||
* @return {Array} comprehensive list of paths to sync |
|||
*/ |
|||
|
|||
exports.default = function () { |
|||
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(path) { |
|||
var pkgData, pkg, search, found, npmIgnore, gitIgnore, ignored; |
|||
return _regenerator2.default.wrap(function _callee$(_context) { |
|||
while (1) { |
|||
switch (_context.prev = _context.next) { |
|||
case 0: |
|||
_context.next = 2; |
|||
return (0, _fsPromise.readFile)((0, _path.resolve)(path, 'package.json'), 'utf8'); |
|||
|
|||
case 2: |
|||
pkgData = _context.sent; |
|||
pkg = JSON.parse(pkgData); |
|||
search = (pkg.files || ['.']).concat('package.json'); |
|||
|
|||
if (pkg.main) search = search.concat(pkg.main); |
|||
search = search.map(function (file) { |
|||
return asAbsolute(file, path); |
|||
}); |
|||
|
|||
_context.next = 9; |
|||
return explode(search); |
|||
|
|||
case 9: |
|||
_context.t0 = _context.sent; |
|||
found = (0, _arrayUnique2.default)(_context.t0); |
|||
_context.next = 13; |
|||
return maybeRead((0, _path.resolve)(path, '.npmignore')); |
|||
|
|||
case 13: |
|||
npmIgnore = _context.sent; |
|||
|
|||
if (!npmIgnore) { |
|||
_context.next = 18; |
|||
break; |
|||
} |
|||
|
|||
_context.t1 = ''; |
|||
_context.next = 21; |
|||
break; |
|||
|
|||
case 18: |
|||
_context.next = 20; |
|||
return maybeRead((0, _path.resolve)(path, '.gitignore')); |
|||
|
|||
case 20: |
|||
_context.t1 = _context.sent; |
|||
|
|||
case 21: |
|||
gitIgnore = _context.t1; |
|||
ignored = (0, _arrayUnique2.default)(_ignored2.default.concat(gitIgnore.split('\n').filter(invalidFilter)).concat(npmIgnore.split('\n').filter(invalidFilter))).map(function (file) { |
|||
return (0, _path.resolve)(path, file); |
|||
}); |
|||
return _context.abrupt('return', found.filter(ignoredFilter(ignored))); |
|||
|
|||
case 24: |
|||
case 'end': |
|||
return _context.stop(); |
|||
} |
|||
} |
|||
}, _callee, this); |
|||
})); |
|||
return function getFiles(_x) { |
|||
return ref.apply(this, arguments); |
|||
}; |
|||
}(); |
|||
|
|||
/** |
|||
* Returns a filter function that |
|||
* excludes ignored files in the path. |
|||
* |
|||
* @param {String} path |
|||
* @return {Function} filter fn |
|||
*/ |
|||
|
|||
var ignoredFilter = function ignoredFilter(ignored) { |
|||
return function (file) { |
|||
return !ignored.some(function (test) { |
|||
return (0, _minimatch2.default)(file, test); |
|||
}); |
|||
}; |
|||
}; |
|||
|
|||
/** |
|||
* Returns a filter function that |
|||
* excludes invalid rules for .*ignore files |
|||
* |
|||
* @param {String} path |
|||
* @return {Function} filter fn |
|||
*/ |
|||
|
|||
var invalidFilter = function invalidFilter(path) { |
|||
return !( |
|||
/* commments */ |
|||
'#' === path[0] || |
|||
|
|||
/* empty lines or newlines */ |
|||
!path.trim().length); |
|||
}; |
|||
|
|||
/** |
|||
* Transform relative paths into absolutes, |
|||
* and maintains absolutes as such. |
|||
* |
|||
* @param {String} maybe relative path |
|||
* @param {String} parent full path |
|||
*/ |
|||
|
|||
var asAbsolute = function asAbsolute(path, parent) { |
|||
if ('/' === path[0]) return path; |
|||
return (0, _path.resolve)(parent, path); |
|||
}; |
|||
|
|||
/** |
|||
* Explodes directories into a full list of files. |
|||
* Eg: |
|||
* in: ['/a.js', '/b'] |
|||
* out: ['/a.js', '/b/c.js', '/b/d.js'] |
|||
* |
|||
* @param {Array} of {String}s representing paths |
|||
* @return {Array} of {String}s of full paths |
|||
*/ |
|||
|
|||
var explode = function () { |
|||
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee5(paths) { |
|||
var _this2 = this; |
|||
|
|||
var many, list; |
|||
return _regenerator2.default.wrap(function _callee5$(_context5) { |
|||
while (1) { |
|||
switch (_context5.prev = _context5.next) { |
|||
case 0: |
|||
many = function () { |
|||
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee3(all) { |
|||
return _regenerator2.default.wrap(function _callee3$(_context3) { |
|||
while (1) { |
|||
switch (_context3.prev = _context3.next) { |
|||
case 0: |
|||
_context3.next = 2; |
|||
return _promise2.default.all(all.map(function () { |
|||
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(file) { |
|||
return _regenerator2.default.wrap(function _callee2$(_context2) { |
|||
while (1) { |
|||
switch (_context2.prev = _context2.next) { |
|||
case 0: |
|||
_context2.next = 2; |
|||
return list(file); |
|||
|
|||
case 2: |
|||
return _context2.abrupt('return', _context2.sent); |
|||
|
|||
case 3: |
|||
case 'end': |
|||
return _context2.stop(); |
|||
} |
|||
} |
|||
}, _callee2, _this2); |
|||
})), |
|||
_this = _this2; |
|||
return function (_x4) { |
|||
return ref.apply(_this, arguments); |
|||
}; |
|||
}())); |
|||
|
|||
case 2: |
|||
return _context3.abrupt('return', _context3.sent); |
|||
|
|||
case 3: |
|||
case 'end': |
|||
return _context3.stop(); |
|||
} |
|||
} |
|||
}, _callee3, _this2); |
|||
})), |
|||
_this = _this2; |
|||
return function many(_x3) { |
|||
return ref.apply(_this, arguments); |
|||
}; |
|||
}(); |
|||
|
|||
list = function () { |
|||
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee4(file) { |
|||
var path, stat, all; |
|||
return _regenerator2.default.wrap(function _callee4$(_context4) { |
|||
while (1) { |
|||
switch (_context4.prev = _context4.next) { |
|||
case 0: |
|||
path = file; |
|||
stat = undefined; |
|||
_context4.prev = 2; |
|||
_context4.next = 5; |
|||
return _fsPromise2.default.stat(path); |
|||
|
|||
case 5: |
|||
stat = _context4.sent; |
|||
_context4.next = 14; |
|||
break; |
|||
|
|||
case 8: |
|||
_context4.prev = 8; |
|||
_context4.t0 = _context4['catch'](2); |
|||
|
|||
// in case the file comes from `files` or `main`
|
|||
// and it wasn't specified with `.js` by the user
|
|||
path = file + '.js'; |
|||
_context4.next = 13; |
|||
return _fsPromise2.default.stat(path); |
|||
|
|||
case 13: |
|||
stat = _context4.sent; |
|||
|
|||
case 14: |
|||
if (!stat.isDirectory()) { |
|||
_context4.next = 21; |
|||
break; |
|||
} |
|||
|
|||
_context4.next = 17; |
|||
return _fsPromise2.default.readdir(file); |
|||
|
|||
case 17: |
|||
all = _context4.sent; |
|||
return _context4.abrupt('return', many(all.map(function (subdir) { |
|||
return asAbsolute(subdir, file); |
|||
}))); |
|||
|
|||
case 21: |
|||
return _context4.abrupt('return', path); |
|||
|
|||
case 22: |
|||
case 'end': |
|||
return _context4.stop(); |
|||
} |
|||
} |
|||
}, _callee4, _this2, [[2, 8]]); |
|||
})), |
|||
_this = _this2; |
|||
return function list(_x5) { |
|||
return ref.apply(_this, arguments); |
|||
}; |
|||
}(); |
|||
|
|||
_context5.next = 4; |
|||
return many(paths); |
|||
|
|||
case 4: |
|||
_context5.t0 = _context5.sent; |
|||
return _context5.abrupt('return', (0, _arrFlatten2.default)(_context5.t0)); |
|||
|
|||
case 6: |
|||
case 'end': |
|||
return _context5.stop(); |
|||
} |
|||
} |
|||
}, _callee5, this); |
|||
})); |
|||
return function explode(_x2) { |
|||
return ref.apply(this, arguments); |
|||
}; |
|||
}(); |
|||
|
|||
/** |
|||
* Returns the contents of a file if it exists. |
|||
* |
|||
* @return {String} results or `''` |
|||
*/ |
|||
|
|||
var maybeRead = function () { |
|||
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee6(path) { |
|||
return _regenerator2.default.wrap(function _callee6$(_context6) { |
|||
while (1) { |
|||
switch (_context6.prev = _context6.next) { |
|||
case 0: |
|||
_context6.prev = 0; |
|||
_context6.next = 3; |
|||
return _fsPromise2.default.readFile(path, 'utf8'); |
|||
|
|||
case 3: |
|||
return _context6.abrupt('return', _context6.sent); |
|||
|
|||
case 6: |
|||
_context6.prev = 6; |
|||
_context6.t0 = _context6['catch'](0); |
|||
return _context6.abrupt('return', ''); |
|||
|
|||
case 9: |
|||
case 'end': |
|||
return _context6.stop(); |
|||
} |
|||
} |
|||
}, _callee6, this, [[0, 6]]); |
|||
})); |
|||
return function maybeRead(_x6) { |
|||
return ref.apply(this, arguments); |
|||
}; |
|||
}(); |
@ -1,100 +0,0 @@ |
|||
'use strict'; |
|||
|
|||
Object.defineProperty(exports, "__esModule", { |
|||
value: true |
|||
}); |
|||
|
|||
var _map = require('babel-runtime/core-js/map'); |
|||
|
|||
var _map2 = _interopRequireDefault(_map); |
|||
|
|||
var _regenerator = require('babel-runtime/regenerator'); |
|||
|
|||
var _regenerator2 = _interopRequireDefault(_regenerator); |
|||
|
|||
var _promise = require('babel-runtime/core-js/promise'); |
|||
|
|||
var _promise2 = _interopRequireDefault(_promise); |
|||
|
|||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); |
|||
|
|||
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); |
|||
|
|||
var _fsPromise = require('fs-promise'); |
|||
|
|||
var _fsPromise2 = _interopRequireDefault(_fsPromise); |
|||
|
|||
var _crypto = require('crypto'); |
|||
|
|||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
|||
|
|||
/** |
|||
* Computes hashes for the contents of each file given. |
|||
* |
|||
* @param {Array} of {String} full paths |
|||
* @return {Map} |
|||
*/ |
|||
|
|||
exports.default = function () { |
|||
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee2(files) { |
|||
var _this2 = this; |
|||
|
|||
var entries; |
|||
return _regenerator2.default.wrap(function _callee2$(_context2) { |
|||
while (1) { |
|||
switch (_context2.prev = _context2.next) { |
|||
case 0: |
|||
_context2.next = 2; |
|||
return _promise2.default.all(files.map(function () { |
|||
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(file) { |
|||
var data; |
|||
return _regenerator2.default.wrap(function _callee$(_context) { |
|||
while (1) { |
|||
switch (_context.prev = _context.next) { |
|||
case 0: |
|||
_context.next = 2; |
|||
return _fsPromise2.default.readFile(file); |
|||
|
|||
case 2: |
|||
data = _context.sent; |
|||
return _context.abrupt('return', [file, hash(data)]); |
|||
|
|||
case 4: |
|||
case 'end': |
|||
return _context.stop(); |
|||
} |
|||
} |
|||
}, _callee, _this2); |
|||
})), |
|||
_this = _this2; |
|||
return function (_x2) { |
|||
return ref.apply(_this, arguments); |
|||
}; |
|||
}())); |
|||
|
|||
case 2: |
|||
entries = _context2.sent; |
|||
return _context2.abrupt('return', new _map2.default(entries)); |
|||
|
|||
case 4: |
|||
case 'end': |
|||
return _context2.stop(); |
|||
} |
|||
} |
|||
}, _callee2, this); |
|||
})); |
|||
return function hashes(_x) { |
|||
return ref.apply(this, arguments); |
|||
}; |
|||
}(); |
|||
|
|||
/** |
|||
* Computes a hash for the given buf. |
|||
* |
|||
* @param {Buffer} file data |
|||
* @return {String} hex digest |
|||
*/ |
|||
|
|||
function hash(buf) { |
|||
return (0, _crypto.createHash)('sha1').update(buf).digest('hex'); |
|||
} |
@ -1,6 +0,0 @@ |
|||
'use strict'; |
|||
|
|||
Object.defineProperty(exports, "__esModule", { |
|||
value: true |
|||
}); |
|||
exports.default = ['._*', '.hg', '.git', '.svn', '.npmrc', '.*.swp', '.DS_Store', '.wafpickle-*', '.lock-wscript', 'npm-debug.log', 'config.gypi', 'node_modules', 'CVS', 'README', 'README.*', 'CHANGELOG', 'History.md', 'LICENSE', 'Readme', 'Readme.*', 'test', 'tests']; |
@ -1,88 +0,0 @@ |
|||
'use strict'; |
|||
|
|||
Object.defineProperty(exports, "__esModule", { |
|||
value: true |
|||
}); |
|||
|
|||
var _regenerator = require('babel-runtime/regenerator'); |
|||
|
|||
var _regenerator2 = _interopRequireDefault(_regenerator); |
|||
|
|||
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator'); |
|||
|
|||
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2); |
|||
|
|||
var _fsPromise = require('fs-promise'); |
|||
|
|||
var _fsPromise2 = _interopRequireDefault(_fsPromise); |
|||
|
|||
var _getFiles = require('./get-files'); |
|||
|
|||
var _getFiles2 = _interopRequireDefault(_getFiles); |
|||
|
|||
var _hash = require('./hash'); |
|||
|
|||
var _hash2 = _interopRequireDefault(_hash); |
|||
|
|||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
|||
|
|||
exports.default = function () { |
|||
var ref = (0, _asyncToGenerator3.default)(_regenerator2.default.mark(function _callee(path, _ref) { |
|||
var debug = _ref.debug; |
|||
var files, hashes; |
|||
return _regenerator2.default.wrap(function _callee$(_context) { |
|||
while (1) { |
|||
switch (_context.prev = _context.next) { |
|||
case 0: |
|||
_context.prev = 0; |
|||
_context.next = 3; |
|||
return _fsPromise2.default.stat(path); |
|||
|
|||
case 3: |
|||
_context.next = 8; |
|||
break; |
|||
|
|||
case 5: |
|||
_context.prev = 5; |
|||
_context.t0 = _context['catch'](0); |
|||
throw new Error('Could not read directory ' + path + '.'); |
|||
|
|||
case 8: |
|||
|
|||
if (debug) console.time('> [debug] Getting files'); |
|||
_context.next = 11; |
|||
return (0, _getFiles2.default)(path); |
|||
|
|||
case 11: |
|||
files = _context.sent; |
|||
|
|||
if (debug) console.timeEnd('> [debug] Getting files'); |
|||
|
|||
if (debug) console.time('> [debug] Computing hashes'); |
|||
_context.next = 16; |
|||
return (0, _hash2.default)(files); |
|||
|
|||
case 16: |
|||
hashes = _context.sent; |
|||
|
|||
if (debug) console.timeEnd('> [debug] Computing hashes'); |
|||
|
|||
if (debug) { |
|||
hashes.forEach(function (val, key) { |
|||
console.log('> [debug] Found "' + key + '" [' + val + ']'); |
|||
}); |
|||
} |
|||
|
|||
return _context.abrupt('return', 'https://test.now.run'); |
|||
|
|||
case 20: |
|||
case 'end': |
|||
return _context.stop(); |
|||
} |
|||
} |
|||
}, _callee, this, [[0, 5]]); |
|||
})); |
|||
return function now(_x, _x2) { |
|||
return ref.apply(this, arguments); |
|||
}; |
|||
}(); |
@ -1,22 +0,0 @@ |
|||
'use strict'; |
|||
|
|||
var _getFiles = require('./get-files'); |
|||
|
|||
var _getFiles2 = _interopRequireDefault(_getFiles); |
|||
|
|||
var _path = require('path'); |
|||
|
|||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } |
|||
|
|||
(0, _getFiles2.default)((0, _path.resolve)('../mng-test/files-in-package')).then(function (files) { |
|||
console.log(files); |
|||
|
|||
(0, _getFiles2.default)((0, _path.resolve)('../mng-test/files-in-package-ignore')).then(function (files2) { |
|||
console.log('ignored: '); |
|||
console.log(files2); |
|||
}).catch(function (err) { |
|||
console.log(err.stack); |
|||
}); |
|||
}).catch(function (err) { |
|||
console.log(err.stack); |
|||
}); |
@ -0,0 +1,50 @@ |
|||
import http2 from 'spdy'; |
|||
import fetch from 'node-fetch'; |
|||
|
|||
/** |
|||
* Returns a `fetch` version with a similar |
|||
* API to the browser's configured with a |
|||
* HTTP2 agent. |
|||
* |
|||
* It encodes `body` automatically as JSON. |
|||
* |
|||
* @param {String} host |
|||
* @return {Function} fetch |
|||
*/ |
|||
|
|||
export default class Agent { |
|||
constructor (host) { |
|||
this._host = host; |
|||
this._agent = http2.createAgent({ |
|||
host, |
|||
port: 443 |
|||
}).once('error', (err) => this._onError(err)); |
|||
} |
|||
|
|||
_onError (err) { |
|||
// XXX: should we `this.emit()`?
|
|||
this._error = err; |
|||
} |
|||
|
|||
fetch (path, opts = {}) { |
|||
if (this._error) throw new Error('HTTP2 connection error'); |
|||
|
|||
const { body } = opts; |
|||
opts.agent = this._agent; |
|||
|
|||
if (body && 'object' === typeof body) { |
|||
opts.headers['Content-Type'] = 'application/json'; |
|||
opts.body = JSON.stringify(body); |
|||
} |
|||
|
|||
if (null != body) { |
|||
opts.headers['Content-Length'] = Buffer.byteLength(body); |
|||
} |
|||
|
|||
return fetch(`https://${this._host}${path}`, opts); |
|||
} |
|||
|
|||
close () { |
|||
return this._agent.close(); |
|||
} |
|||
} |
Loading…
Reference in new issue