UNPKG

7.84 kBJavaScriptView Raw
1#!/usr/bin/env node
2"use strict";var e=require("path"),r=require("os"),t=require("child_process"),n=require("fs");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=o(e),s=o(r),i=o(n);const c=s.default,l=/\s+at.*(?:\(|\s)(.*)\)?/,u=/^(?:(?:(?:node|(?:internal\/[\w/]*|.*node_modules\/(?:babel-polyfill|pirates)\/.*)?\w+)\.js:\d+:\d+)|native)/,d=void 0===c.homedir?"":c.homedir();const p=(e,r=1,t)=>{if(t={indent:" ",includeEmptyLines:!1,...t},"string"!=typeof e)throw new TypeError(`Expected \`input\` to be a \`string\`, got \`${typeof e}\``);if("number"!=typeof r)throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof r}\``);if("string"!=typeof t.indent)throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof t.indent}\``);if(0===r)return e;const n=t.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return e.replace(n,t.indent.repeat(r))},f=(e,r)=>(r=Object.assign({pretty:!1},r),e.replace(/\\/g,"/").split("\n").filter((e=>{const r=e.match(l);if(null===r||!r[1])return!0;const t=r[1];return!t.includes(".app/Contents/Resources/electron.asar")&&!t.includes(".app/Contents/Resources/default_app.asar")&&!u.test(t)})).filter((e=>""!==e.trim())).map((e=>r.pretty?e.replace(l,((e,r)=>e.replace(r,r.replace(d,"~")))):e)).join("\n"));class y extends Error{constructor(e){if(!Array.isArray(e))throw new TypeError("Expected input to be an Array, got "+typeof e);let r=(e=[...e].map((e=>e instanceof Error?e:null!==e&&"object"==typeof e?Object.assign(new Error(e.message),e):new Error(e)))).map((e=>"string"==typeof e.stack?f(e.stack).replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g,""):String(e))).join("\n");r="\n"+p(r,4),super(r),this.name="AggregateError",Object.defineProperty(this,"_errors",{value:e})}*[Symbol.iterator](){for(const e of this._errors)yield e}}const m=y;var g={exports:{}},h={exports:{}};const w=(e,r,t)=>new Promise(((n,o)=>{if(t=Object.assign({concurrency:1/0},t),"function"!=typeof r)throw new TypeError("Mapper function is required");const{concurrency:a}=t;if(!("number"==typeof a&&a>=1))throw new TypeError(`Expected \`concurrency\` to be a number from 1 and up, got \`${a}\` (${typeof a})`);const s=[],i=e[Symbol.iterator]();let c=!1,l=!1,u=0,d=0;const p=()=>{if(c)return;const e=i.next(),t=d;if(d++,e.done)return l=!0,void(0===u&&n(s));u++,Promise.resolve(e.value).then((e=>r(e,t))).then((e=>{s[t]=e,u--,p()}),(e=>{c=!0,o(e)}))};for(let e=0;e<a&&(p(),!l);e++);}));h.exports=w,h.exports.default=w;const v=h.exports,E=async(e,r,t)=>(await v(e,((e,t)=>Promise.all([r(e,t),e])),t)).filter((e=>Boolean(e[0]))).map((e=>e[1]));g.exports=E,g.exports.default=E;var b=g.exports;function k(e,r,n){let o;const a=async function(e,r,n){const o=t.spawn(e,r,n),a=new Promise(((e,r)=>{const t={stdout:o.stdout?[]:null,stderr:o.stderr?[]:null};o.on("error",r),o.stdout&&o.stdout.on("data",(function(e){t.stdout.push(e),n.handleStdout&&n.handleStdout(e)})),o.stderr&&o.stderr.on("data",(function(e){t.stderr.push(e),n.handleStderr&&n.handleStderr(e)})),o.on("close",(r=>{let o=null;null!=t.stdout&&(o=null===n.encoding||"buffer"===n.encoding?Buffer.concat(t.stdout):t.stdout.join(""));let a=null;null!=t.stderr&&(a=null===n.encoding||"buffer"===n.encoding?Buffer.concat(t.stderr):t.stderr.join("")),e({exitCode:r,stdout:o,stderr:a})}))}));return n.handleChildProcess(o),a}(e,r,{...n,handleChildProcess(e){o=e}});return a.kill=function(e){return o.kill(e)},a}async function x(e){return async function(e){var r;const{directory:t}=e;if(null==t)return null;let n=null;try{n=JSON.parse(await i.default.promises.readFile(a.default.join(t,"package.json"),"utf8"))}catch(e){return null}return null!==(r=null==n?void 0:n.version)&&void 0!==r?r:null}(e)}const j=async function(e){var r;const t=a.default.join(null!==(r=process.env.ATOM_HOME)&&void 0!==r?r:a.default.join(s.default.homedir(),".atom"),"packages",e);try{return await i.default.promises.access(t,i.default.constants.R_OK),t}catch(e){return null}};async function N(e){return await async function(e){let r=null;try{r=await i.default.promises.stat(e)}catch(e){}if(null==r||!r.isDirectory())throw new Error("[Package-Deps] Expected packageName to be a readable directory in Node.js invocation");let t=null;try{const r=await i.default.promises.readFile(a.default.join(e,"package.json"),"utf8");t=JSON.parse(r)}catch(e){}const n=null==t||"object"!=typeof t?[]:t["package-deps"];return Array.isArray(n)?n:[]}(e)}async function A(e){if(null==e.directory)return!0;if(null==e.minimumVersion)return!1;const r=await x(e);return null==r||1===function(e,r){for(var t=e.split("."),n=r.split("."),o=0;o<3;o++){var a=Number(t[o]),s=Number(n[o]);if(a>s)return 1;if(s>a)return-1;if(!isNaN(a)&&isNaN(s))return 1;if(isNaN(a)&&!isNaN(s))return-1}return 0}(e.minimumVersion,r)}const P=new Set(["✓","done"]),S=/(?:Installing|Moving) (.*?) to .* (.*)/;async function T(e){if("string"==typeof e)return{name:e,directory:await j(e)};if("name"in e)return{...e,directory:await j(e.name)};throw console.error("This package-deps entry is not valid. Please see https://github.com/steelbrain/package-deps#how-it-works",{entry:e}),Error("The package-deps entry is not valid. Please see https://github.com/steelbrain/package-deps#how-it-works")}const $=function({dependencies:e}){let r=!1;return console.log(`Installing dependencies:\n${e.map((e=>` - ${e.name}`)).join("\n")}`),{handleFailure({dependency:e,error:t}){var n;r=!0,console.error(`Unable to install ${e.name}, Error:`,null!==(n=null==t?void 0:t.stack)&&void 0!==n?n:t)},handleDependencyInstalled(e){console.log("Successfully installed",e.name)},handleComplete(){console.log("Installation complete"),r&&(process.exitCode=1)}}},O=async function({dependencies:e}){return e.map((e=>Array.isArray(e)?e[0]:e))};async function I(e,r=!1){!function(e,r){if(!e)throw new Error(null!=r?r:"Invariant violation")}("string"==typeof e&&e.length>0,"[Package-Deps] Package name is required");const t=await N(e);if(0===t.length)return;const n=await Promise.all(t.map((async e=>Array.isArray(e)?Promise.all(e.map(T)):T(e)))),o=await b(n,(async function(e){return Array.isArray(e)?(await Promise.all(e.map((e=>A(e))))).every(Boolean):A(e)}));if(0===o.length)return;let a;if(a=r?o.map((e=>Array.isArray(e)?e[0]:e)):await O({packageName:e,dependencies:o}),0===a.length)return;const s=$({packageName:e,dependencies:a});await(async(e,r,{concurrency:t=1/0,stopOnError:n=!0}={})=>new Promise(((o,a)=>{if("function"!=typeof r)throw new TypeError("Mapper function is required");if(!Number.isSafeInteger(t)&&t!==1/0||!(t>=1))throw new TypeError(`Expected \`concurrency\` to be an integer from 1 and up or \`Infinity\`, got \`${t}\` (${typeof t})`);const s=[],i=[],c=e[Symbol.iterator]();let l=!1,u=!1,d=0,p=0;const f=()=>{if(l)return;const e=c.next(),t=p;if(p++,e.done)return u=!0,void(0===d&&(n||0===i.length?o(s):a(new m(i))));d++,(async()=>{try{const n=await e.value;s[t]=await r(n,t),d--,f()}catch(e){n?(l=!0,a(e)):(i.push(e),d--,f())}})()};for(let e=0;e<t&&(f(),!u);e++);})))(a,(async function(e){try{await async function(e){const{stdout:r,stderr:t}=await k("apm",["install",e.name,"--production","--color","false"],{shell:!0}),n=S.exec(r.trim());if(null!=n&&P.has(n[2]))return;const o=new Error(`Error installing dependency: ${e.name}`);throw o.stack=t.trim(),o}(e),s.handleDependencyInstalled(e)}catch(r){s.handleFailure({dependency:e,error:r})}}),{concurrency:2}),s.handleComplete()}3!==process.argv.length&&(console.error("Usage: atom-package-deps <directory>"),process.exit(1));const[,,C,_]=process.argv,q="true"===_;(async function(){const e=a.default.resolve(process.cwd(),C);await I(e,q),console.log("All Done!")})().catch((e=>{var r;process.env.STEELBRAIN_DEBUG?console.error("Error:",null!==(r=null==e?void 0:e.stack)&&void 0!==r?r:e):(console.error("Error:",e.message),process.exit(1))}));