UNPKG

11.4 kBJavaScriptView Raw
1"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("os"),n=require("child_process"),t=require("fs"),r=require("path");function o(e){return e&&"object"==typeof e&&"default"in e?e:{default:e}}var a=o(e),i=o(t),s=o(r);const c=a.default,l=/\s+at.*(?:\(|\s)(.*)\)?/,d=/^(?:(?:(?:node|(?:internal\/[\w/]*|.*node_modules\/(?:babel-polyfill|pirates)\/.*)?\w+)\.js:\d+:\d+)|native)/,u=void 0===c.homedir?"":c.homedir();const p=(e,n=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 n)throw new TypeError(`Expected \`count\` to be a \`number\`, got \`${typeof n}\``);if("string"!=typeof t.indent)throw new TypeError(`Expected \`options.indent\` to be a \`string\`, got \`${typeof t.indent}\``);if(0===n)return e;const r=t.includeEmptyLines?/^/gm:/^(?!\s*$)/gm;return e.replace(r,t.indent.repeat(n))},m=(e,n)=>(n=Object.assign({pretty:!1},n),e.replace(/\\/g,"/").split("\n").filter((e=>{const n=e.match(l);if(null===n||!n[1])return!0;const t=n[1];return!t.includes(".app/Contents/Resources/electron.asar")&&!t.includes(".app/Contents/Resources/default_app.asar")&&!d.test(t)})).filter((e=>""!==e.trim())).map((e=>n.pretty?e.replace(l,((e,n)=>e.replace(n,n.replace(u,"~")))):e)).join("\n"));class f extends Error{constructor(e){if(!Array.isArray(e))throw new TypeError("Expected input to be an Array, got "+typeof e);let n=(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?m(e.stack).replace(/\s+at .*aggregate-error\/index.js:\d+:\d+\)?/g,""):String(e))).join("\n");n="\n"+p(n,4),super(n),this.name="AggregateError",Object.defineProperty(this,"_errors",{value:e})}*[Symbol.iterator](){for(const e of this._errors)yield e}}const g=f;var y={exports:{}},h={exports:{}};const w=(e,n,t)=>new Promise(((r,o)=>{if(t=Object.assign({concurrency:1/0},t),"function"!=typeof n)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 i=[],s=e[Symbol.iterator]();let c=!1,l=!1,d=0,u=0;const p=()=>{if(c)return;const e=s.next(),t=u;if(u++,e.done)return l=!0,void(0===d&&r(i));d++,Promise.resolve(e.value).then((e=>n(e,t))).then((e=>{i[t]=e,d--,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,k=async(e,n,t)=>(await v(e,((e,t)=>Promise.all([n(e,t),e])),t)).filter((e=>Boolean(e[0]))).map((e=>e[1]));y.exports=k,y.exports.default=k;var b=y.exports;const E=atom.inDevMode()||atom.inSpecMode();var P=/["'&<>]/,$=function(e){var n,t=""+e,r=P.exec(t);if(!r)return t;var o="",a=0,i=0;for(a=r.index;a<t.length;a++){switch(t.charCodeAt(a)){case 34:n="&quot;";break;case 38:n="&amp;";break;case 39:n="&#39;";break;case 60:n="&lt;";break;case 62:n="&gt;";break;default:continue}i!==a&&(o+=t.substring(i,a)),i=a+1,o+=n}return i!==a?o+t.substring(i,a):o};function x(e,t,r){let o;const a=async function(e,t,r){const o=n.spawn(e,t,r),a=new Promise(((e,n)=>{const t={stdout:o.stdout?[]:null,stderr:o.stderr?[]:null};o.on("error",n),o.stdout&&o.stdout.on("data",(function(e){t.stdout.push(e),r.handleStdout&&r.handleStdout(e)})),o.stderr&&o.stderr.on("data",(function(e){t.stderr.push(e),r.handleStderr&&r.handleStderr(e)})),o.on("close",(n=>{let o=null;null!=t.stdout&&(o=null===r.encoding||"buffer"===r.encoding?Buffer.concat(t.stdout):t.stdout.join(""));let a=null;null!=t.stderr&&(a=null===r.encoding||"buffer"===r.encoding?Buffer.concat(t.stderr):t.stderr.join("")),e({exitCode:n,stdout:o,stderr:a})}))}));return r.handleChildProcess(o),a}(e,t,{...r,handleChildProcess(e){o=e}});return a.kill=function(e){return o.kill(e)},a}async function A(e){{const n=await async function(e){var n;const t=atom.packages.getLoadedPackage(e.name);return null==t?null:null!==(n=t.metadata.version)&&void 0!==n?n:null}(e);if(n)return n}return async function(e){var n;const{directory:t}=e;if(null==t)return null;let r=null;try{r=JSON.parse(await i.default.promises.readFile(s.default.join(t,"package.json"),"utf8"))}catch(e){return null}return null!==(n=null==r?void 0:r.version)&&void 0!==n?n:null}(e)}const j=async function(e){return atom.packages.resolvePackagePath(e)};function C(e,n){if(!e)throw new Error(null!=n?n:"Invariant violation")}async function D(e){const n=await async function(e){const n=atom.packages.getLoadedPackage(e),t=n&&n.metadata["package-deps"];return Array.isArray(t)?t:[]}(e);return E&&(C(Array.isArray(n),`Dependencies for ${e} are not a valid array`),n.forEach(((n,t)=>{if(Array.isArray(n))n.forEach(((n,r)=>{const o=`Dependency#${t}#${r} for ${e} is invalid`;C("string"==typeof n.name&&n.name.length>0,o),C(null==n.minimumVersion||"string"==typeof n.minimumVersion&&n.minimumVersion.length>0,o)})),C(n.length>0,`Dependency#${t} for ${e} has no group items`);else{const r=`Dependency#${t} for ${e} is invalid`;C("string"==typeof n.name&&n.name.length>0,r),C(null==n.minimumVersion||"string"==typeof n.minimumVersion&&n.minimumVersion.length>0,r)}}))),n}async function N(e){if(null==e.directory)return!0;if(null==e.minimumVersion)return!1;const n=await A(e);return null==n||1===function(e,n){for(var t=e.split("."),r=n.split("."),o=0;o<3;o++){var a=Number(t[o]),i=Number(r[o]);if(a>i)return 1;if(i>a)return-1;if(!isNaN(a)&&isNaN(i))return 1;if(isNaN(a)&&!isNaN(i))return-1}return 0}(e.minimumVersion,n)}const T=new Set(["✓","done"]),S=/(?:Installing|Moving) (.*?) to .* (.*)/;async function I(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")}let q=!0;const M=function({packageName:e,dependencies:n}){var t;const r=[],o=atom.notifications.addInfo(`Installing ${e} dependencies`,{detail:`Installing ${n.map((e=>e.name)).join(", ")}`,dismissable:!0}),a=document.createElement("progress");a.max=n.length,a.style.width="100%";try{const e=atom.views.getView(o),n=null!==(t=null==e?void 0:e.element)&&void 0!==t?t:null;if(null==n)throw new Error("Unable to get notification element from view");const r=n.querySelector(".detail-content");if(null==r)throw new Error("Content detail container not found inside the notification");r.appendChild(a)}catch(e){console.warn("[Package-Deps] Error during showing installation progress to user",e)}return{handleFailure({dependency:e,error:n}){var t;r.push(e.name),a.value+=1,console.error(`[Package-Deps] Unable to install ${e.name}, Error:`,null!==(t=null==n?void 0:n.stack)&&void 0!==t?t:n)},handleDependencyInstalled(e){a.value+=1},handleComplete(){o.dismiss(),r.length>0?atom.notifications.addWarning(`Failed to install ${e} dependencies`,{detail:`These packages were not installed, check your console\nfor more info.\n${r.join("\n")}`,dismissable:!0}):atom.notifications.addSuccess(`Installed ${e} dependencies`,{detail:`Installed ${n.map((e=>e.name)).join(", ")}`}),Promise.all(n.map((e=>r.includes(e.name)?null:atom.packages.activatePackage(e.name)))).catch((n=>{console.error(`[Package-Deps] Error activating installed packages for ${e}`,n)}))}}},V=function({packageName:e,dependencies:n}){return new Promise((t=>{var r;const o=n.filter((e=>!Array.isArray(e))),a=n.filter((e=>Array.isArray(e))),i=0===a.length,s=i?o.map((e=>e.name)).join(", "):"Something went wrong. Check your developer console",c=a.map((e=>e[0]));atom.packages.isPackageDisabled("notifications")&&console.warn(`Enable notifications to install dependencies for ${e}`);const l=atom.notifications.addInfo(`${e} needs to install dependencies`,{dismissable:!0,icon:"cloud-download",detail:s,description:`Install dependenc${1===n.length?"y":"ies"}?`,buttons:[{text:"Yes",onDidClick:()=>{t(i?o:o.concat(c)),l.dismiss()}},{text:"No Thanks",onDidClick:()=>{l.dismiss()}},{text:"Never",onDidClick:()=>{!function(e){var n;const t=new Set(null!==(n=atom.config.get("atom-package-deps.ignored"))&&void 0!==n?n:[]);t.add(e),atom.config.set("atom-package-deps.ignored",Array.from(t))}(e),q&&(q=!1,atom.notifications.addInfo("How to reset package-deps memory",{dismissable:!0,description:"To modify the list of ignored files invoke 'Application: Open Your Config' and change the 'atom-package-deps' section"})),l.dismiss()}}]});if(l.onDidDismiss((()=>t([]))),!i)try{const e=atom.views.getView(l),n=null!==(r=null==e?void 0:e.element)&&void 0!==r?r:null;if(null==n)throw new Error("Unable to get notification element from view");const t=n.querySelector(".detail-content");if(null==t)throw new Error("Content detail container not found inside the notification");if(t.innerHTML="",o.length>0){const e=document.createElement("div");e.innerHTML=`Packages without choices: <br /><ul><li>${o.map((e=>$(e.name))).join("</li><li>")}</li></ul>`,t.appendChild(e)}const i=document.createElement("div");i.innerHTML="Packages with choices:",t.appendChild(i);const s=document.createElement("ul");a.forEach(((e,n)=>{const t=document.createElement("li"),r=document.createElement("select");r.innerHTML=e.map((e=>`<option>${$(e.name)}</option>`)).join("\n"),r.addEventListener("change",(()=>{const t=e.find((e=>e.name===r.value));null!=t&&(c[n]=t)})),t.style.marginTop="5px",t.appendChild(r),s.appendChild(t)})),t.appendChild(s)}catch(e){console.error("[Package-Deps] Error during showing package choices to user",e)}}))};exports.install=async function(e,n=!1){if(C("string"==typeof e&&e.length>0,"[Package-Deps] Package name is required"),t=e,(null!==(r=atom.config.get("atom-package-deps.ignored"))&&void 0!==r?r:[]).includes(t))return;var t,r;const o=await D(e);if(0===o.length)return;const a=await Promise.all(o.map((async e=>Array.isArray(e)?Promise.all(e.map(I)):I(e)))),i=await b(a,(async function(e){return Array.isArray(e)?(await Promise.all(e.map((e=>N(e))))).every(Boolean):N(e)}));if(0===i.length)return;let s;if(s=n?i.map((e=>Array.isArray(e)?e[0]:e)):await V({packageName:e,dependencies:i}),0===s.length)return;const c=M({packageName:e,dependencies:s});await(async(e,n,{concurrency:t=1/0,stopOnError:r=!0}={})=>new Promise(((o,a)=>{if("function"!=typeof n)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 i=[],s=[],c=e[Symbol.iterator]();let l=!1,d=!1,u=0,p=0;const m=()=>{if(l)return;const e=c.next(),t=p;if(p++,e.done)return d=!0,void(0===u&&(r||0===s.length?o(i):a(new g(s))));u++,(async()=>{try{const r=await e.value;i[t]=await n(r,t),u--,m()}catch(e){r?(l=!0,a(e)):(s.push(e),u--,m())}})()};for(let e=0;e<t&&(m(),!d);e++);})))(s,(async function(e){try{await async function(e){const n=`"${atom.packages.getApmPath()}"`,{stdout:t,stderr:r}=await x(n,["install",e.name,"--production","--color","false"],{shell:!0}),o=S.exec(t.trim());if(null!=o&&T.has(o[2]))return;const a=new Error(`Error installing dependency: ${e.name}`);throw a.stack=r.trim(),a}(e),c.handleDependencyInstalled(e)}catch(n){c.handleFailure({dependency:e,error:n})}}),{concurrency:2}),c.handleComplete()};