{"version":3,"sources":["jsdelivr-header.js","/npm/shypyard@0.1.5/index.js"],"names":[],"mappings":"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","file":"/npm/shypyard@0.1.5/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/shypyard@0.1.5/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","#!/usr/bin/env node\n\nvar dnode = require('dnode');\nvar stream = require('stream')\nvar fs = require('fs');\nvar myIP = require('my-ip');\nvar colors = require('colors');\nvar async = require('async');\nvar path = require('path');\nvar cmd = require('./cmd')\n\nfunction simpleStream () {\n  var s = new stream.Duplex\n  s._read = function () { }\n  s._write = function (data, encoding, next) {\n    this.push(data);\n    next();\n  }\n  return s;\n}\n\nfunction dnodify (obj, keys) {\n  for (var k in obj) {\n    obj[k] = typeof obj[k] == 'function' ? obj[k].bind(obj) : obj[k];\n  }\n  return obj;\n}\n\nfunction dnodeStream (input) {\n  var s = dnodify(simpleStream());\n  if (input) {\n    s.pipe(input);\n  }\n  return s;\n}\n\nfunction git (type, args, opts, next)\n{\n  return cmd('git', [type].concat(args || []), opts, next);\n}\n\nfunction getConfig () {\n  if (getConfig.config) {\n    return getConfig.config;\n  }\n  try {\n    var config = require(require('osenv').home() + '/.shypyard.json')\n  } catch (e) {\n    config = {};\n  }\n  getConfig.config = config;\n  return config;\n}\n\nfunction saveConfig() {\n  fs.writeFileSync(require('osenv').home() + '/.shypyard.json.tmp', JSON.stringify(getConfig.config));\n  fs.renameSync(require('osenv').home() + '/.shypyard.json.tmp', require('osenv').home() + '/.shypyard.json');\n  getConfig.config = config;\n}\n\nvar config = getConfig();\nconfig.remotes || (config.remotes = {});\n\nif (process.argv[2] == 'client') {\n  require('forever').start(__dirname + '/client.js', {\n    options: process.argv.slice(3)\n  });\n} else if (process.argv[2] == 'remote') {\n  if (process.argv[3] == 'add') {\n    if (!process.argv[4].match(/^.+:\\d+$/)) {\n      console.error('ERR'.red, 'Invalid host:port combination.');\n      process.exit(1);\n    }\n    \n    var remote = process.argv[4];\n    console.log('Detecting remote...');\n    var d = dnode.connect(remote.split(':')[0], Number(remote.split(':')[1]));\n    var connected = null;\n    d.on('remote', function (remote) {\n      clearTimeout(connected);\n      remote.target(function (err, target) {\n        console.log('Remote is', target);\n        config.remotes[process.argv[4]] = process.argv[5] || target || process.argv[4];\n        saveConfig();\n        console.log('Added remote:', process.argv[4], '- name:', process.argv[5] || target || process.argv[4]);\n        d.end();\n      });\n    });\n    connected = setTimeout(function () {\n      console.error('ERR'.red, '10s timeout elapsed, quitting.')\n      process.exit(1);\n    }, 10*1000)\n  } else {\n    Object.keys(config.remotes).forEach(function (remote) {\n      console.log(config.remotes[remote], '\\t', remote);\n    })\n  }\n} else if (process.argv[2] == 'run') {\n  console.log('    shypyard ' + require('./package.json').version);\n\n  if (process.argv[3] != 'update') {\n    try {\n      var pkg = require(path.join(process.cwd(), 'package.json'));\n    } catch (e) {\n      throw new Error('Could not load package.json for current directory.');\n    }\n    var repo = pkg.repository.url || pkg.repository || '';\n    if (!repo) {\n      throw new Error('No repository listed in package.json, please add and try again.');\n    }\n    var name = path.basename(repo, '.git');\n\n    console.log('    repo: ' + repo);\n    console.log('');\n  }\n\n  async.each(Object.keys(config.remotes), function (remoteAddr, next) {\n    var d = dnode.connect(remoteAddr.split(':')[0], Number(remoteAddr.split(':')[1]));\n    var connected = false;\n    setTimeout(function () { // TODO stream timeout preferrable\n      if (!connected) {\n        d.emit('error', new Error('Timeout'));\n        d.end();\n        next(new Error('Timeout'));\n      }\n    }, 5000);\n\n    var prefix = config.remotes[remoteAddr].bold.white + '\\t-'\n\n    d.on('error', function (err) {\n      console.error('ERR'.red, prefix, err.message);\n    })\n    d.on('remote', function (remote) {\n      console.log('   ', prefix, 'connected to ' + remoteAddr);\n      connected = true;\n      process.on('SIGINT', function() {\n        remote.choke();\n      });\n      remote.debug('executing ' + JSON.stringify(process.argv[3]) + ' for ' + myIP(null,true));\n\n      if (!remote[process.argv[3]]) {\n        console.log('ERR'.red, 'No .' + process.argv[3] + '() function on remote client');\n        d.end();\n        next(new Error('No .update() function on remote client'));\n        return;\n      }\n\n      if (process.argv[3] == 'update') {\n        // no git repo needed\n        remote[process.argv[3]](process.argv.slice(4), {\n          verbose: true,\n          // verbose: {\n          //   stdout: dnodeStream(process.stdout),\n          //   stderr: dnodeStream(process.stderr)\n          // },\n          encoding: 'utf-8'\n        }, function (code, stdout, stderr) {\n          if (remote.version) {\n            remote.version(gotversion);\n          } else {\n            gotversion(null);\n          }\n\n          function gotversion (err, version) {\n            if (code) {\n              console.log('ERR'.red, 'FAILED with error code ' + code);\n              console.log('    |', String(stderr).replace(/(\\n?\\s+)+$/, '').replace(/\\n/g, '\\n    | '));\n            } else {\n              console.log('YAY'.green, prefix, 'success! version installed:', version ? version : '(null)');\n            }\n            \n            remote.choke();\n            next(code);\n          }\n        });\n\n      } else {\n        git('log', ['--pretty=format:\\'%h\\'', '-n', '1'], {}, function (err, stdout, stderr) {\n          remote.load(name, null, String(stdout).replace(/^[\\n\\s]+|[\\n\\s]+$/g, ''), function (err) {\n            if (err) {\n              console.log('ERR'.red, prefix, 'error loading module:', err);\n              return;\n            }\n\n            remote[process.argv[3]](process.argv.slice(4), {\n              verbose: true,\n              // verbose: {\n              //   stdout: dnodeStream(process.stdout),\n              //   stderr: dnodeStream(process.stderr)\n              // },\n              encoding: 'utf-8'\n            }, function (code, stdout, stderr) {\n              console.log((code ? 'ERR'.red : 'YAY'.green), prefix, (code ? ('FAILED with error code ' + code).red : 'success!'.green));\n              d.end();\n              if (code) {\n                console.log('    |', String(stderr).replace(/(\\n?\\s+)+$/, '').replace(/\\n/g, '\\n    | '));\n              }\n              next(code);\n            });\n          });\n        });\n      }\n    });\n  }, function (err) {\n    process.on('exit', function () {\n      process.exit(err);\n    });\n  });\n} else {\n  console.error('Usage: shypyard client OR shypyard run (remotetask)')\n}"]}