diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000..9ef2eb27 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,19 @@ +let presets = ["@babel/preset-react", "@babel/preset-env"]; + +let plugins = [ + "@babel/plugin-syntax-dynamic-import", + '@babel/plugin-proposal-class-properties' + // "transform-react-remove-prop-types", + // '@babel/plugin-proposal-optional-chaining', +]; + +if (process.env.BABEL_ENV === "development") { + plugins.push("@babel/plugin-transform-modules-commonjs") +} + +module.exports = { + presets: presets, + plugins: plugins, + exclude: "node_modules/**", + // runtimeHelpers: true, +} diff --git a/dist/julia-client.js b/dist/julia-client.js new file mode 100644 index 00000000..a65ab8f7 --- /dev/null +++ b/dist/julia-client.js @@ -0,0 +1,2 @@ +"use strict";function e(e){return e&&"object"==typeof e&&"default"in e?e.default:e}var t=e(require("etch")),n=e(require("shell")),i=require("atom"),o=e(i),r=require("underscore-plus"),a=e(r),s=e(require("path")),l=e(require("fs")),u=e(require("child_process")),c=e(require("net")),d=e(require("object-hash")),f=e(require("physical-cpu-count")),p=require("node-pty-prebuilt-multiarch"),m=require("ssh2"),h=e(require("semver"));require("remote");var g=e(require("atom-select-list")),v=require("electron"),b=e(v),w=e(require("vm")),y=e(require("atom-package-deps"));function k(e,t,n,i,o,r,a){try{var s=e[r](a),l=s.value}catch(e){return void n(e)}s.done?t(l):Promise.resolve(l).then(i,o)}function j(e){return function(){var t=this,n=arguments;return new Promise((function(i,o){var r=e.apply(t,n);function a(e){k(r,i,o,a,s,"next",e)}function s(e){k(r,i,o,a,s,"throw",e)}a(void 0)}))}}function P(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function x(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,i=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:n}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var i,o,r=!0,a=!1;return{s:function(){i=e[Symbol.iterator]()},n:function(){var e=i.next();return r=e.done,e},e:function(e){a=!0,o=e},f:function(){try{r||null==i.return||i.return()}finally{if(a)throw o}}}}function R(e){var t,n=null,i=T(e.getScopeDescriptor().scopes);try{for(i.s();!(t=i.n()).done;){var o=t.value;if(o.startsWith("source.embedded.")){n=o;break}}}catch(e){i.e(e)}finally{i.f()}return n}function L(e,t){var n=R(t);if(null===n)return null;for(var i=t.getBufferRow(),o=i;i-1>=0&&e.scopeDescriptorForBufferPosition([i-1,0]).scopes.indexOf(n)>-1;)i-=1;for(;o+1<=e.getLastBufferRow()&&e.scopeDescriptorForBufferPosition([o+1,0]).scopes.indexOf(n)>-1;)o+=1;return[[i,0],[o,1/0]]}function A(e){var t,n=[],i=T(e.getCursors());try{for(i.s();!(t=i.n()).done;){var o=L(e,t.value);null!==o&&n.push(o)}}catch(e){i.e(e)}finally{i.f()}return n}function B(e){var t,n=T(e.getCursors());try{for(n.s();!(t=n.n()).done;){var i=t.value,o=R(i);if(null===o)return null;for(var r=L(e,i)[1][0]+1;r+1<=e.getLastBufferRow()&&-1===e.scopeDescriptorForBufferPosition([r+1,0]).scopes.indexOf(o);)r+=1;i.setBufferPosition([r+1,1/0])}}catch(e){n.e(e)}finally{n.f()}}function _(e){var t,n=T(e.getCursors());try{for(n.s();!(t=n.n()).done;){var i=t.value,o=R(i);if(null===o)return null;for(var r=L(e,i)[0][0]-1;r-1>=0&&-1===e.scopeDescriptorForBufferPosition([r-1,0]).scopes.indexOf(o);)r-=1;i.setBufferPosition([r-1,1/0])}}catch(e){n.e(e)}finally{n.f()}}function M(e){var t=A(e);if(0===t.length)return[];var n,i=[],o=T(t);try{for(o.s();!(n=o.n()).done;){var r=n.value,a=e.getTextInBufferRange(r);r[1][0]+=1,i.push({range:r,selection:e.getSelections()[0],line:r[0][0],text:a||" "})}}catch(e){o.e(e)}finally{o.f()}return i}var F=Object.freeze({__proto__:null,getCode:function(e){for(var t=e.getText().split("\n"),n=e.getLineCount(),i="",o=0;o1&&r.indexOf("source.embedded.julia")>-1&&(i+=t[o]+"\n")}return i},getCursorCellRanges:A,moveNext:B,movePrev:_,get:M}),J=["source.julia","source.embedded.julia"],z=["if","while","for","begin","function","macro","module","baremodule","type","immutable","struct","mutable struct","try","let","do","quote","abstract type","primitive type"],N=["else","elseif","catch","finally"];function H(e){var t,n=!1,i=!1,o=T(e);try{for(o.s();!(t=o.n()).done;){var r=t.value;r.indexOf("string")>-1&&(n=!0),r.indexOf("interpolation")>-1&&(i=!0)}}catch(e){o.e(e)}finally{o.f()}return n&&!i}function V(e,t,n){var o=new i.Point(t,0),r=new i.Point(n,1/0);return function(e,t){var n=atom.grammars.grammarForScopeName("source.julia");if(void 0===n)return[];var i=[],o=0,r=0,a=e.getTextInBufferRange(t);return n.tokenizeLines(a).forEach((function(e){e.forEach((function(e){var t=e.value;if(!H(e.scopes)){if(o>0&&")"===t)return o-=1,void i.splice(i.lastIndexOf("paren"),1);if(r>0&&"]"===t)return r-=1,void i.splice(i.lastIndexOf("bracket"),1);if("("===t)return o+=1,void i.push("paren");if("["===t)return r+=1,void i.push("bracket")}if(function(e){return e.slice(1).some((function(e){return e.indexOf("keyword")>-1}))}(e.scopes)&&0===o&&0===r){var n=N.includes(t);("end"===t||n)&&i.pop(),(z.includes(t)||n)&&i.push(t)}}))})),i}(e,new i.Range(o,r))}function W(e){return e.slice(1).some((function(e){return e.indexOf("comment")>-1}))}function q(e,t){var n=e.scopeDescriptorForBufferPosition(t).getScopesArray();return!!n.some((function(e){return J.includes(e)}))&&(!W(n)&&!H(n))}var U=Object.freeze({__proto__:null,isStringScope:H,forLines:V,isCommentScope:W,isValidScopeToInspect:q});function $(e,t){return{scope:e.scopeDescriptorForBufferPosition([t,0]).scopes,line:e.getTextInBufferRange([[t,0],[t,1/0]])}}function G(e){var t,n=e.line,i=e.scope,o=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=T(i);try{for(r.s();!(t=r.n()).done;){var a=t.value;if(/\bcomment\b/.test(a)||!o&&/\bdocstring\b/.test(a))return!0}}catch(e){r.e(e)}finally{r.f()}return/^\s*(#.*)?$/.test(n)}function K(e){var t=e.line;return!!Y({line:t,scope:e.scope})||/^(end\b|\)|\]|\})/.test(t)}function Y(e){e.line;var t=e.scope;return t=t.join(" "),/\bstring\.multiline\.end\b/.test(t)||/\bstring\.end\b/.test(t)&&/\bbacktick\b/.test(t)}function Z(e){return!(/^\s/.test(e.line)||G(e)||K(e)||(t=e,n=t.line,i=t.scope,i=i.join(" "),/\bstring\b/.test(i)&&!/\bpunctuation\.definition\.string\b/.test(i)||n.match(/^(else|elseif|catch|finally)\b/)));var t,n,i}function X(e,t){for(var n=t,i=t;i0&&!Z($(e,t));)t--;return t}(e,t),i=X(e,n);if(n<=t&&t<=i)return[[n,0],[i,1/0]]}function ee(e,t){for(var n=t.getBufferRange(),i=n.start,o=n.end,r=[[i.row,i.column],[o.row,o.column]];G($(e,r[0][0]),!0)&&r[0][0]<=r[1][0];)r[0][0]++,r[0][1]=0;for(;G($(e,r[1][0]),!0)&&r[1][0]>=r[0][0];)r[1][0]--,r[1][1]=1/0;return r}function te(e,t){var n=Q(e,t);return{context:n?e.getTextInBufferRange(n):"",startRow:n?n[0][0]:0}}var ne=Object.freeze({__proto__:null,getLine:$,moveNext:function(e,t,n){for(var i,o=n[1][0];(i=e.getLastBufferRow())0&&void 0!==arguments[0]?arguments[0]:atom.workspace.getActiveTextEditor();if(e)return e.mutateSelectedText((function(t){var n=Q(e,t.getHeadBufferPosition().row);n&&t.setBufferRange(n)}))}});function ie(e){var t=e.getBuffer(),n=t.getFirstPosition(),i=t.getEndPosition(),o="^("+atom.config.get("julia-client.uiOptions.cellDelimiter").join("|")+")",r=new RegExp(o),a=e.getCursorBufferPosition();a.column=1/0;for(var s=!1,l=a.row+1;l<=e.getLastBufferRow();l++){var u=$(e,l),c=u.line,d=u.scope;if(s=r.test(c)&&d.join(".").indexOf("comment.line")>-1,i.row=l,s)break}if(s&&(i.row-=1,i.row<0&&(i.row=0),i.column=1/0),s=!1,a.row>0){for(var f=i.row;f>=0;f--){var p=$(e,f),m=p.line,h=p.scope;if(s=r.test(m)&&h.join(".").indexOf("comment.line")>-1,n.row=f,s)break}n.column=0}return[n,i]}var oe,re,ae,se=Object.freeze({__proto__:null,getRange:ie,get:function(e){return e.getGrammar().scopeName.indexOf("source.julia")>-1?function(e){var t=ie(e),n=e.getTextInBufferRange(t);""===n.trim()&&(n=" ");return[{range:[[t[0].row,t[0].column],[t[1].row,t[1].column]],selection:e.getSelections()[0],line:t[0].row,text:n}]}(e):M(e)},moveNext:function(e){return null==e&&(e=atom.workspace.getActiveTextEditor()),e.getGrammar().scopeName.indexOf("source.julia")>-1?function(e){var t=ie(e),n=e.getSelections()[0],i=t[1].row+2;return n.setBufferRange([[i,0],[i,0]])}(e):B(e)},movePrev:function(e){return null==e&&(e=atom.workspace.getActiveTextEditor()),e.getGrammar().scopeName.indexOf("source.weave")>-1?_(e):function(e){var t=ie(e)[0].row-2;return e.getSelections()[0].setBufferRange([[t,0],[t,0]])}(e)}});ae=n,re=se,({CompositeDisposable:oe}=o);var le={activate:function(e){var t,n,i,o,r,a,s,l;for(s=function(t,n){return e.connection.client.require(t,n)},i=function(t,n){return e.connection.client.disrequire(t,n)},t=function(){return e.connection.boot()},n=function(e){return atom.commands.dispatch(e.currentTarget,"autocomplete-plus:cancel")},this.subs=new oe,o=0,r=(a=atom.config.get("julia-client.juliaSyntaxScopes")).length;o(n(i),this.withInk((function(){return t(),e.runtime.evaluation.eval()}))),"julia-client:run-and-move":n=>this.withInk((function(){return t(),e.runtime.evaluation.eval({move:!0})})),"julia-client:run-all":i=>(n(i),this.withInk((function(){return t(),e.runtime.evaluation.evalAll()}))),"julia-client:run-cell":()=>this.withInk((function(){return t(),e.runtime.evaluation.eval({cell:!0})})),"julia-client:run-cell-and-move":()=>this.withInk((function(){return t(),e.runtime.evaluation.eval({cell:!0,move:!0})})),"julia-client:select-block":()=>e.misc.blocks.select(),"julia-client:next-cell":()=>re.moveNext(),"julia-client:prev-cell":()=>re.movePrev(),"julia-client:goto-symbol":()=>this.withInk((function(){return t(),e.runtime.goto.gotoSymbol()})),"julia-client:show-documentation":()=>this.withInk((function(){return t(),e.runtime.evaluation.toggleDocs()})),"julia-client:send-to-stdin":t=>s((function(){var n,i,o,r,a,s;for(n=!1,o=0,r=(a=(i=t.currentTarget.getModel()).getSelections()).length;othis.withInk((function(){return t(),e.runtime.debugger.debugBlock(!1,!1)})),"julia-debug:step-through-block":()=>this.withInk((function(){return t(),e.runtime.debugger.debugBlock(!0,!1)})),"julia-debug:run-cell":()=>this.withInk((function(){return t(),e.runtime.debugger.debugBlock(!1,!0)})),"julia-debug:step-through-cell":()=>this.withInk((function(){return t(),e.runtime.debugger.debugBlock(!0,!0)})),"julia-debug:toggle-breakpoint":()=>this.withInk((function(){return t(),e.runtime.debugger.togglebp()})),"julia-debug:toggle-conditional-breakpoint":()=>this.withInk((function(){return t(),e.runtime.debugger.togglebp(!0)}))}));return this.subs.add(atom.commands.add('atom-text-editor[data-grammar="source julia"]',{"julia-client:format-code":()=>this.withInk((function(){return t(),e.runtime.formatter.formatCode()}))})),this.subs.add(atom.commands.add('atom-text-editor[data-grammar="source julia"], .julia-terminal, .ink-workspace',{"julia-client:set-working-module":function(){return e.runtime.modules.chooseModule()}})),this.subs.add(atom.commands.add(".tree-view",{"julia-client:run-all":i=>(n(i),this.withInk((function(){return t(),e.runtime.evaluation.evalAll(i.target)}))),"julia-debug:run-file":n=>this.withInk((function(){return t(),e.runtime.debugger.debugFile(!1,n.target)})),"julia-debug:step-through-file":n=>this.withInk((function(){return t(),e.runtime.debugger.debugFile(!0,n.target)}))})),this.subs.add(atom.commands.add("atom-workspace",{"julia-client:open-external-REPL":function(){return e.connection.terminal.repl()},"julia-client:start-julia":function(){return i("boot Julia",(function(){return t()}))},"julia-client:start-remote-julia-process":function(){return i("boot a remote Julia process",(function(){return e.connection.bootRemote()}))},"julia-client:kill-julia":function(){return e.connection.client.kill()},"julia-client:interrupt-julia":()=>s("interrupt Julia",(function(){return e.connection.client.interrupt()})),"julia-client:disconnect-julia":()=>s("disconnect Julia",(function(){return e.connection.client.disconnect()})),"julia-client:connect-external-process":function(){return i((function(){return e.connection.messages.connectExternal()}))},"julia-client:connect-terminal":function(){return i((function(){return e.connection.terminal.connectedRepl()}))},"julia-client:open-plot-pane":()=>this.withInk((function(){return e.runtime.plots.open()})),"julia-client:open-outline-pane":()=>this.withInk((function(){return e.runtime.outline.open()})),"julia-client:open-workspace":()=>this.withInk((function(){return e.runtime.workspace.open()})),"julia-client:restore-default-layout":function(){return e.ui.layout.restoreDefaultLayout()},"julia-client:close-juno-panes":function(){return e.ui.layout.closePromises()},"julia-client:reset-default-layout-settings":function(){return e.ui.layout.resetDefaultLayoutSettings()},"julia-client:settings":function(){return atom.workspace.open("atom://config/packages/julia-client")},"julia-debug:run-file":()=>this.withInk((function(){return t(),e.runtime.debugger.debugFile(!1)})),"julia-debug:step-through-file":()=>this.withInk((function(){return t(),e.runtime.debugger.debugFile(!0)})),"julia-debug:clear-all-breakpoints":()=>e.runtime.debugger.clearbps(),"julia-debug:step-to-next-line":t=>e.runtime.debugger.nextline(t),"julia-debug:step-to-selected-line":t=>e.runtime.debugger.toselectedline(t),"julia-debug:step-to-next-expression":t=>e.runtime.debugger.stepexpr(t),"julia-debug:step-into":t=>e.runtime.debugger.stepin(t),"julia-debug:stop-debugging":t=>e.runtime.debugger.stop(t),"julia-debug:step-out":t=>e.runtime.debugger.finish(t),"julia-debug:continue":t=>e.runtime.debugger.continueForward(t),"julia-debug:open-debugger-pane":()=>e.runtime.debugger.open(),"julia:new-julia-file":()=>atom.workspace.open().then(e=>{var t;if(t=atom.grammars.grammarForScopeName("source.julia"))return e.setGrammar(t)}),"julia:open-julia-startup-file":function(){return atom.workspace.open(e.misc.paths.home(".julia","config","startup.jl"))},"julia:open-juno-startup-file":function(){return atom.workspace.open(e.misc.paths.home(".julia","config","juno_startup.jl"))},"julia:open-julia-home":function(){return ae.openItem(e.misc.paths.juliaHome())},"julia:open-package-in-new-window":function(){return s("get packages",(function(){return e.runtime.packages.openPackage()}))},"julia:open-package-as-project-folder":function(){return s("get packages",(function(){return e.runtime.packages.openPackage(!1)}))},"julia:get-help":function(){return ae.openExternal("http://discourse.julialang.org")},"julia-client:debug-info":()=>(t(),e.runtime.debuginfo()),"julia-client:work-in-current-folder":function(t){return s("change working folder",(function(){return e.runtime.evaluation.cdHere(t.target)}))},"julia-client:work-in-project-folder":function(){return s("change working folder",(function(){return e.runtime.evaluation.cdProject()}))},"julia-client:work-in-home-folder":function(){return s("change working folder",(function(){return e.runtime.evaluation.cdHome()}))},"julia-client:select-working-folder":function(){return s("change working folder",(function(){return e.runtime.evaluation.cdSelect()}))},"julia-client:activate-environment-in-current-folder":function(t){return s("activate an environment",(function(){return e.runtime.evaluation.activateProject(t.target)}))},"julia-client:activate-environment-in-parent-folder":function(t){return s("activate an environment",(function(){return e.runtime.evaluation.activateParentProject(t.target)}))},"julia-client:activate-default-environment":function(t){return s("activate an environment",(function(){return e.runtime.evaluation.activateDefaultProject()}))}}))},deactivate:function(){return this.subs.dispose()},withInk:function(e,t){return null!=this.ink?e():t?atom.notifications.addError("Please install the Ink package.",{detail:"Julia Client requires the Ink package to run. You can install it via `File -> Settings -> Install`.",dismissable:!0}):setTimeout(()=>this.withInk(e,!0),100)}};function ue(){for(var e="win32"===process.platform?"USERPROFILE":"HOME",t=arguments.length,n=new Array(t),i=0;i0&&void 0!==arguments[0]?arguments[0]:ce();return new Promise((function(t,n){u.exec('"'.concat(e,'" --version'),(function(e,i,o){if(e)return n(o);var r=i.match(/(\d+)\.(\d+)\.(\d+)/);if(!r)return n("Couldn't resolve version.");var a=O(r,4),s=(a[0],a[1]),l=a[2],u=a[3];return t({major:s,minor:l,patch:u})}))}))},projectDir:function(){return atom.config.get("julia-client.juliaOptions.persistWorkingDir")?new Promise((function(e){var t=atom.config.get("julia-client.juliaOptions.workingDir");try{l.stat(t,(function(n,i){return e(n?fe():t)}))}catch(t){return e(fe())}})):fe()},script:function(){for(var e=arguments.length,t=new Array(e),n=0;n1&&void 0!==arguments[1]?arguments[1]:{bufferPosition:void 0,wordRegex:he},n=t.bufferPosition?t.bufferPosition:e.getLastCursor().getBufferPosition(),i=ve(e,n,{wordRegex:t.wordRegex?t.wordRegex:he}),o=e.getTextInBufferRange(i);return{word:o,range:i}}function ve(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{wordRegex:he},o=t.row,r=t.column,a=e.getBuffer().findAllInRangeSync(n.wordRegex?n.wordRegex:he,new i.Range(new i.Point(o,0),new i.Point(o,1/0))),s=a.find((function(e){return e.end.column>=r&&e.start.column<=r}));return s?i.Range.fromObject(s):new i.Range(t,t)}function be(e,t,n){var o,r=t.start,a=r.column,s=t.end.row,l=a,u=n.column,c=T(e.split("."));try{for(c.s();!(o=c.n()).done;){if(u<=(l+=o.value.length))break;l+=1}}catch(e){c.e(e)}finally{c.f()}var d=new i.Point(s,l);return new i.Range(r,d)}function we(e){return e.length>0&&isNaN(e)}var ye=Object.freeze({__proto__:null,wordRegex:he,withWord:function(e,t){var n=ge(e),i=n.word,o=n.range;we(i)&&t(i,o)},getWordAndRange:ge,getWordRangeAtBufferPosition:ve,getWordRangeWithoutTrailingDots:be,isValidWordToInspect:we});function ke(e){if(-1==e.search("rgb"))return e;var t=function(e){return("0"+parseInt(e).toString(16)).slice(-2)};return t((e=e.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d+))?\)$/))[1])+t(e[2])+t(e[3])}var je,Pe,xe,Se,Ce=Object.freeze({__proto__:null,getColors:function(e){atom.grammars.grammarForScopeName("source.julia");var t={},n={},i=document.createElement("div");for(var o in i.classList.add("editor","editor-colors","julia-syntax-color-selector"),e){var r,a=document.createElement("span");a.innerText="foo",(r=a.classList).add.apply(r,D(e[o])),i.appendChild(a),t[o]=a}for(var s in document.body.appendChild(i),e)try{n[s]=ke(window.getComputedStyle(t[s]).color)}catch(e){}return n.background=ke(window.getComputedStyle(i).backgroundColor),document.body.removeChild(i),n}}),Oe=function(e,t){return e(t={exports:{}},t.exports),t.exports}((function(e){var t;({debounce:t}=a),e.exports={paths:me,blocks:ne,cells:se,words:ye,weave:F,colors:Ce,scopes:U,bufferLines:function(e,n){var i,o;return null==n&&([e,n]=[null,e]),i=[""],o=null==e?function(){}:t((function(){if(""!==i[0])return n(i[0],!1),i[0]=""}),e),function(e){var t;for(t=e.toString().split("\n"),i[0]+=t.shift(),i.push(...t);i.length>1;)n(i.shift(),!0);return o()}},time:function(e,t){return function(){return(new Date).getTime()/1e3}(),t.then((function(){})).catch((function(){})),t},hook:function(e,t,n){var i;return i=e[t].bind(e),e[t]=function(...e){return n(i,...e)}},once:function(e){var t;return t=!1,function(...n){if(!t)return t=!0,e.call(this,...n)}},mutex:function(){var e;return e=Promise.resolve(),function(t){var n,i;return n=e,i=null,e=new Promise((function(e){return i=e})).catch((function(){})),n.then(()=>t.call(this,i))}},exclusive:function(t){var n;return n=e.exports.mutex(),function(...e){return n(n=>{var i;return n(i=t.call(this,...e)),i})}},formatTimePeriod:function(e){var t,n,i,o;if(e>1){for(n in o=[t=Math.floor(e/3600),i=Math.floor((e-=60*t*60)/60),Math.round(e-60*i)])e=o[n],o[n]=e<10?"0"+e:""+e;return o.join(":")}}}})),De=Oe.paths,Ee=Oe.blocks,Ie=Oe.cells,Te=(Oe.words,Oe.weave,Oe.colors,Oe.scopes,Oe.bufferLines,Oe.time,Oe.hook,Oe.once,Oe.mutex);Oe.exclusive,Oe.formatTimePeriod;je=null,xe=[],Se=function(e){return null!=je?e():xe.push(e)},({bufferLines:Pe}=Oe);var Re,Le=class{static consumeInk(e){var t,n,i,o;for(je=e.Loading,o=[],n=0,i=xe.length;nthis.loading=new je),this.handlers={},this.callbacks={},this.queue=[],this.id=0,null!=e&&this.setStream(e),this.handle({cb:(e,t)=>{var n;return null!=(n=this.callbacks[e])&&n.resolve(t),delete this.callbacks[e]},cancelCallback:(e,t)=>this.callbacks[e].reject(t)})}handle(e,t){var n,i;if(null!=t)return this.handlers[e]=t;for(i in n=[],e)t=e[i],n.push(this.handle(i,t));return n}writeMsg(){throw new Error("msg not implemented")}msg(e,...t){return this.writeMsg([e,...t])}rpc(e,...t){var n,i;return n=new Promise((n,i)=>(this.id+=1,this.callbacks[this.id]={resolve:n,reject:i},this.msg({type:e,callback:this.id},...t))),null!=(i=this.loading)?i.monitor(n):void 0}flush(){var e,t,n,i;for(e=0,t=(i=this.queue).length;ethis.handlers[e](...t)),n?i.then(e=>this.msg("cb",n,e)).catch(e=>this.msg("cancelCallback",n,this.errJson(e))):void 0}import(e,t=!0,n={}){if(null!=e)return e.constructor===String?this.import([e],t,n)[e]:(null!=e.rpc||null!=e.msg?(n={},this.import(e.rpc,!0,n),this.import(e.msg,!1,n)):e.forEach(e=>n[e]=(...n)=>t?this.rpc(e,...n):this.msg(e,...n)),n)}isWorking(){var e;return null!=(e=this.loading)?e.isWorking():void 0}onWorking(e){var t;return null!=(t=this.loading)?t.onWorking(e):void 0}onDone(e){var t;return null!=(t=this.loading)?t.onDone(e):void 0}onceDone(e){var t;return null!=(t=this.loading)?t.onceDone(e):void 0}errJson(e){if(e instanceof Error)return{type:"error",message:e.message,stack:e.stack}}readStream(e){var t;return e.on("data",t=Pe(e=>{if(e)return this.input(JSON.parse(e))})),this.unreadStream=function(){return e.removeListener("data",t)}}writeStream(e){return this.writeMsg=function(t){return e.write(JSON.stringify(t)),e.write("\n")}}setStream(e){return this.stream=e,this.readStream(this.stream),this.writeStream(this.stream),this.stream.on("end",()=>this.reset())}};({Emitter:Re}=o);var Ae,Be,_e={ipc:new Le,handle:function(...e){return this.ipc.handle(...e)},input:function(e){return this.ipc.input(e)},readStream:function(e){return this.ipc.readStream(e)},import:function(...e){return this.ipc.import(...e)},activate:function(){var e;return this.emitter=new Re,this.bootMode=atom.config.get("julia-client.juliaOptions.bootMode"),this.ipc.writeMsg=e=>{var t;return this.isActive()&&!1!==("function"==typeof(t=this.conn).ready?t.ready():void 0)?this.conn.message(e):this.ipc.queue.push(e)},this.handle("error",e=>(atom.config.get("julia-client.uiOptions.errorNotifications")&&atom.notifications.addError(e.msg,e),atom.beep())),e=null,this.onAttached(()=>{var t;return t=atom.config.get("julia-client.juliaOptions.arguments"),this.import("connected")(),t.length>0&&this.import("args")(t),e=atom.config.observe("julia-client.uiOptions.usePlotPane",e=>this.import("enableplotpane")(e))}),this.onDetached(()=>null!=e?e.dispose():void 0),this.onBoot(e=>this.remoteConfig=e.config)},setBootMode:function(e){this.bootMode=e},editorPath:function(e){var t,n;return null==e?e:"Remote"===this.bootMode&&null!=this.remoteConfig?null==(n=e.getPath())?n:(t=n.indexOf(this.remoteConfig.host))>-1?n=(n=n.slice(t+this.remoteConfig.host.length,n.length)).replace(/\\/g,"/"):n:e.getPath()},deactivate:function(){if(this.emitter.dispose(),this.isActive())return this.detach()},basicHandlers:{},basicHandler:function(e){var t,n,i;if(n=e.toString().match(/juno-msg-(.*)/))return"function"==typeof(t=this.basicHandlers)[i=n[1]]&&t[i](),!0},handleBasic:function(e,t){return this.basicHandlers[e]=t},emitter:new Re,onAttached:function(e){return this.emitter.on("attached",e)},onDetached:function(e){return this.emitter.on("detached",e)},onceAttached:function(e){var t;return t=this.onAttached((function(...n){return t.dispose(),e.call(this,...n)}))},isActive:function(){return null!=this.conn},attach:function(e){var t;return this.conn=e,!1!==("function"==typeof(t=this.conn).ready?t.ready():void 0)&&this.flush(),this.emitter.emit("attached")},detach:function(){return delete this.conn,this.ipc.reset(),this.emitter.emit("detached")},flush:function(){return this.ipc.flush()},isWorking:function(){return this.ipc.isWorking()},onWorking:function(e){return this.ipc.onWorking(e)},onDone:function(e){return this.ipc.onDone(e)},onceDone:function(e){return this.ipc.onceDone(e)},onStdout:function(e){return this.emitter.on("stdout",e)},onStderr:function(e){return this.emitter.on("stderr",e)},onInfo:function(e){return this.emitter.on("info",e)},onBoot:function(e){return this.emitter.on("boot",e)},stdout:function(e){return this.emitter.emit("stdout",e)},stderr:function(e){if(!this.basicHandler(e))return this.emitter.emit("stderr",e)},info:function(e){return this.emitter.emit("info",e)},clientCall:function(e,t,...n){return null==this.conn[t]?atom.notifications.addError(`This client doesn't support ${e}.`):this.conn[t].call(this.conn,...n)},stdin:function(e){return this.clientCall("STDIN","stdin",e)},interrupt:function(){if(this.isActive())return this.clientCall("interrupts","interrupt")},disconnect:function(){if(this.isActive())return this.clientCall("disconnecting","disconnect")},kill:function(){return this.isActive()?this.isWorking()?this.clientCall("kill","kill"):this.import("exit")().catch((function(){})):this.ipc.reset()},clargs:function(){var e,t,n,i,o;return({precompiled:i,optimisationLevel:n,deprecationWarnings:t}=atom.config.get("julia-client.juliaOptions")),(e=[]).push("--depwarn="+(t?"yes":"no")),2!==n&&e.push("-O"+n),e.push("--color=yes"),e.push("-i"),(o=atom.config.get("julia-client.juliaOptions.startupArguments")).length>0&&(e=e.concat(o)),e=(e=e.map(e=>e.trim())).filter(e=>e.length>0)},connectedError:function(e="do that"){return!!this.isActive()&&(atom.notifications.addError(`Can't ${e} with a Julia client running.`,{description:"Stop the current client with `Packages -> Juno -> Stop Julia`."}),!0)},notConnectedError:function(e="do that"){return!this.isActive()&&(atom.notifications.addError(`Can't ${e} without a Julia client running.`,{description:"Start a client with `Packages -> Juno -> Start Julia`."}),!0)},require:function(e,t){return null!=t||([e,t]=[null,e]),this.notConnectedError(e)||t()},disrequire:function(e,t){return null!=t||([e,t]=[null,e]),this.connectedError(e)||t()},withCurrent:function(e){var t;return t=this.conn,(...n)=>{if(t===this.conn)return e(...n)}}};Be=c,Ae=_e;var Me,Fe,Je,ze,Ne={server:null,port:null,listeners:[],next:function(){var e;return(e=new Promise(e=>this.listeners.push(e))).dispose=()=>this.listeners=this.listeners.filter((function(t){return t===e})),e},connect:function(e){var t;return t=function(t){return e.write(JSON.stringify(t))},Ae.readStream(e),e.on("end",(function(){return Ae.detach()})),e.on("error",(function(){return Ae.detach()})),Ae.attach({message:t})},handle:function(e){return this.listeners.length>0?this.listeners.shift()(e):Ae.isActive()?e.end():this.connect(e)},listen:function(){return null!=this.port?Promise.resolve(this.port):new Promise((e,t)=>{var n,i;return n=atom.config.get("julia-client.juliaOptions.externalProcessPort"),i="random"===n?0:parseInt(n),this.server=Be.createServer(e=>this.handle(e)),this.server.on("error",e=>{var n;return"EADDRINUSE"===e.code&&(n="",0!==i&&(n="Please change to another port in the settings and try again."),atom.notifications.addError("Julia could not be started.",{description:`Port \`${i}\` is already in use.\n`+(""!==n?""+n:"Please try again or set a fixed port that you know is unused."),dismissable:!0})),t(e)}),this.server.listen(i,"127.0.0.1",()=>(this.port=this.server.address().port,e(this.port)))})}};Me=u,ze=Ne,Fe=_e,({paths:Je}=Oe);var He,Ve,We={escpath:function(e){return'"'+e+'"'},escape:function(e){return e.replace(/"/g,'\\"')},exec:function(e){return Me.exec(e,(function(e,t,n){}))},term:function(e){switch(process.platform){case"darwin":return this.exec("osascript -e 'tell application \"Terminal\" to activate'"),this.exec(`osascript -e 'tell application "Terminal" to do script "${this.escape(e)}"'`);case"win32":return this.exec(`${this.terminal()} "${e}"`);default:return this.exec(`${this.terminal()} "${this.escape(e)}"`)}},terminal:function(){return atom.config.get("julia-client.consoleOptions.terminal")},defaultShell:function(){var e;return null!=(e=process.env.SHELL)?e:"win32"===process.platform?"powershell.exe":"bash"},defaultTerminal:function(){return"win32"===process.platform?"cmd /C start cmd /C":"x-terminal-emulator -e"},repl:function(){return this.term(""+this.escpath(Je.jlpath()))},connectCommand:function(){return ze.listen().then(e=>`${this.escpath(Je.jlpath())} ${Fe.clargs().join(" ")} ${Je.script("boot_repl.jl")} ${e}`)},connectedRepl:function(){return this.connectCommand().then(e=>this.term(e))}};He=_e,Ve=Ne;var qe={activate:function(){return He.handleBasic("install",()=>{var e;return null!=(e=this.note)&&e.dismiss(),atom.notifications.addError("Error installing Atom.jl package",{description:'Go to the `Packages -> Juno -> Open REPL` menu and\nrun `Pkg.add("Atom")` in Julia, then try again.\nIf you still see an issue, please report it to:\n\nhttps://discourse.julialang.org/',dismissable:!0})}),He.handleBasic("load",()=>{var e;return null!=(e=this.note)&&e.dismiss(),atom.notifications.addError("Error loading Atom.jl package",{description:"Go to the `Packages -> Juno -> Open REPL` menu and\nrun `Pkg.update()` in Julia, then try again.\nIf you still see an issue, please report it to:\n\nhttps://discourse.julialang.org/",dismissable:!0})}),He.handleBasic("installing",()=>{var e;return null!=(e=this.note)&&e.dismiss(),this.note=atom.notifications.addInfo("Installing Julia packages...",{description:"Julia's first run will take a couple of minutes.\nSee the REPL below for progress.",dismissable:!0}),this.openConsole()}),He.handleBasic("precompiling",()=>{var e;return null!=(e=this.note)&&e.dismiss(),this.note=atom.notifications.addInfo("Compiling Julia packages...",{description:"Julia's first run will take a couple of minutes.\nSee the REPL below for progress.",dismissable:!0}),this.openConsole()}),He.handle({welcome:()=>{var e;return null!=(e=this.note)&&e.dismiss(),atom.notifications.addSuccess("Welcome to Juno!",{description:"Success! Juno is set up and ready to roll.\nTry entering `2+2` in the REPL below.",dismissable:!0}),this.openConsole()}})},openConsole:function(){return atom.commands.dispatch(atom.views.getView(atom.workspace),"julia-client:open-REPL")},jlNotFound:function(e,t=""){return atom.notifications.addError("Julia could not be started.",{description:`We tried to launch Julia from: \`${e}\`\nThis path can be changed in the settings.`,detail:t,dismissable:!0})},connectExternal:function(){return Ve.listen().then((function(e){var t,n;return t=`using Atom; using Juno; Juno.connect(${e})`,n=atom.notifications.addInfo("Connect an external process",{description:"To connect a Julia process running in the terminal, run the command:\n\n "+t,dismissable:!0,buttons:[{text:"Copy",onDidClick:function(){return atom.clipboard.write(t)}}]}),He.onceAttached((function(){return n.isDismissed()||n.dismiss(),atom.notifications.addSuccess("Julia is connected.")}))}))}},Ue=qe.jlNotFound,$e=Te();function Ge(e,t){return function(e,t,n){return new Promise((function(i,o){Ne.listen().then((function(r){De.fullPath(e).then((function(e){De.projectDir().then((function(a){var s=p.spawn(e,[].concat(D(t),[De.script("boot_repl.jl")," ".concat(r)]),{cols:100,rows:30,env:n,cwd:a,useConpty:!0,handleFlowControl:!0}),l=function(e){return conn=Ne.next(),failure=new Promise((function(t,n){e.on("exit",(function(e){conn.dispose(),n(e)}))})),Promise.race([conn,failure])}(s);l.catch((function(e){o(e)})),i({ty:s,kill:function(){if(s._readable||s._writable)try{s.kill()}catch(e){}},interrupt:function(){try{s.write("")}catch(e){}},socket:l,onExit:function(e){try{s.on("exit",e)}catch(e){}},onStderr:function(e){},onStdout:function(e){try{s.on("data",e)}catch(e){}}})})).catch((function(e){o(e)}))})).catch((function(t){Ue(e,t),o(t)}))})).catch((function(e){o(e)}))}))}(e,t,Ke())}function Ke(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:process.env,t=atom.config.get("julia-client.juliaOptions.numberOfThreads"),n=parseInt(t);return"auto"==t?e.JULIA_NUM_THREADS=f:0!=n&&isFinite(n)&&(e.JULIA_NUM_THREADS=n),atom.config.get("julia-client.disableProxy")&&(delete e.HTTP_PROXY,delete e.HTTPS_PROXY,delete e.http_proxy,delete e.https_proxy),e}var Ye,Ze,Xe,Qe=Object.freeze({__proto__:null,lock:$e,get:function(e,t){return $e((function(n){var i=Ge(e,t);return i.catch((function(e){n()})),n(i.then((function(e){return e.socket}))),i}))},get_:Ge,customEnv:Ke});Xe=d,Ze=Qe,Ye=Le;var et={provider:function(){return Ze},cacheLength:1,procs:{},key:function(e,t){return Xe([e,...t].join(" ").trim())},cache:function(e,t){var n,i;return null!=(n=this.procs)[i=this.key(e,t)]?n[i]:n[i]=[]},removeFromCache:function(e,t,n){var i;return i=this.key(e,t),this.procs[i]=this.procs[i].filter((function(e){return e!==n}))},toCache:function(e,t,n){return n.cached=!0,this.cache(e,t).push(n)},fromCache:function(e,t){var n,i;if(i=this.cache(e,t),null!=(n=i.shift()))return n.cached=!1,n.init.then(()=>(this.start(e,t),n.proc))},start:function(e,t){var n;n=[t,atom.config.get("julia-client.juliaOptions")],this.provider().lock(i=>this.cache(e,n).length{var o;return o={path:e,allArgs:n,proc:t},this.monitor(t),this.warmup(o),this.toCache(e,n,o),t.socket.then(()=>this.start(e,n)).catch(t=>this.removeFromCache(e,n,o)),i(t.socket)}).catch(e=>i()):i())},flush:function(e,t,n){var i,o,r,a,s;for(a=[],o=0,r=e.length;o(this.flush(e.events,t,n),delete e.events)},boot:function(e){return e.rpc("ping")},repl:function(e){return e.rpc("changemodule",{mod:"Main"})},warmup:function(e){return e.init=Promise.resolve(),e.proc.socket.then(t=>{var n;e.cached&&(n=new Ye(t),[this.boot,this.repl].forEach((function(t){return e.init=e.init.then((function(){if(e.cached)return t(n)}))})),e.init=e.init.catch((function(e){})).then((function(){return n.unreadStream()})))}).catch((function(){}))},get:function(e,t){var n,i,o;return n=[t,atom.config.get("julia-client.juliaOptions")],i=(o=this.fromCache(e,n))?o:this.provider().get(e,t),this.start(e,t),i},reset:function(){var e,t,n,i,o;for(e in o=[],i=this.procs)n=i[e],o.push(function(){var e,i,o;for(o=[],e=0,i=n.length;e{var e;return"function"==typeof(e=this.provider()).start?e.start(vt.jlpath(),pt.clargs()):void 0}).catch((function(){}))},monitor:function(e){return pt.emitter.emit("boot",e),e.ready=function(){return!1},pt.attach(e),e},connect:function(e,t){return e.message=function(e){return t.write(JSON.stringify(e))},pt.readStream(t),t.on("end",(function(){return e.kill(),pt.detach()})),t.on("error",(function(){return e.kill(),pt.detach()})),e.ready=function(){return!0},pt.flush(),e},start:function(e){var t,n,i,o;return[i,t]=[vt.jlpath(),pt.clargs()],n=vt.getVersion(),"Remote"===e?n=Promise.resolve():n.catch(e=>gt.jlNotFound(vt.jlpath(),e)),o=n.then(()=>this.spawnJulia(i,t,e)).then(e=>this.monitor(e)),"Remote"===e?bt.withRemoteConfig((function(e){return ht(e.remote)})).catch((function(){})):vt.projectDir().then((function(e){return ht(e)})),o.then(e=>Promise.all([e,e.socket])).then(([e,t])=>this.connect(e,t)).catch((function(e){pt.detach()})),o},spawnJulia:function(e,t,n){return this.provider(n).get(e,t)}};({time:kt}=Oe),yt=We;var Pt,xt,St={IPC:Le,messages:qe,client:_e,local:jt,terminal:We,activate:function(){return this.messages.activate(),this.client.activate(),this.client.boot=()=>this.boot(),this.local.activate(),this.booting=!1},deactivate:function(){return this.client.deactivate()},consumeInk:function(e){return this.IPC.consumeInk(e),this.ink=e},consumeGetServerConfig:function(e){return this.local.consumeGetServerConfig(e)},consumeGetServerName:function(e){return this.local.consumeGetServerName(e)},_boot:function(e){var t;if(!this.client.isActive()&&!this.booting)return this.booting=!0,this.client.setBootMode(e),t="External Terminal"===e?yt.connectedRepl():this.local.start(e),null!=this.ink&&this.ink.Opener.allowRemoteFiles("Remote"===e),t.then(()=>this.booting=!1),t.catch(()=>this.booting=!1),kt("Julia Boot",this.client.import("ping")())},bootRemote:function(){return this._boot("Remote")},boot:function(){return this._boot(atom.config.get("julia-client.juliaOptions.bootMode"))}},Ct=St.client;({terminal:xt}=St),Pt={juliaPath:{type:"string",default:"julia",description:"The location of the Julia binary.",order:1},juliaOptions:{type:"object",order:2,collapsed:!0,properties:{bootMode:{title:"Boot Mode",type:"string",description:"`Basic` spins up a local Julia process on demand and is the most robust option. The `Cycler` will keep a few local Julia processes around at all times to reduce downtime when a process exits. `External Terminal` opens an external terminal and connects it to Juno, much like the `Julia Client: Connect Terminal` command. `Remote` is similar to the `Julia Client: Start Remote Julia Process` command but changes the default, so that evaluating a line in the editor or pressing `Enter` in the REPL tab will start a remote Julia process instead of a local one.",enum:["Basic","Cycler","External Terminal","Remote"],default:"Basic",radio:!0,order:1},optimisationLevel:{title:"Optimisation Level",description:"Higher levels take longer to compile, but produce faster code.",type:"integer",enum:[0,1,2,3],default:2,radio:!0,order:2},deprecationWarnings:{title:"Deprecation Warnings",type:"boolean",description:"If disabled, hides deprecation warnings.",default:!0,order:3},numberOfThreads:{title:"Number of Threads",type:"string",description:"`global` will use global setting, `auto` sets it to number of cores.",default:"auto",order:4},startupArguments:{title:"Additional Julia Startup Arguments",type:"array",description:"`-i`, `-O`, and `--depwarn` will be set by the above options automatically, but can be overwritten here. Arguments are comma-separated, and you should never need to quote anything (even e.g. paths with spaces in them).",default:[],items:{type:"string"},order:5},externalProcessPort:{title:"Port for Communicating with the Julia Process",type:"string",description:"`random` will use a new port each time, or enter an integer to set the port statically.",default:"random",order:6},arguments:{title:"Arguments",type:"array",description:"Set `ARGS` to the following entries (comma-separated). Requires restart of Julia process.",default:[],items:{type:"string"},order:7},persistWorkingDir:{title:"Persist Working Directory",type:"boolean",default:!1,order:8},workingDir:{title:"Working Directory",type:"string",default:"",order:9},fuzzyCompletionMode:{title:"Fuzzy Completion Mode",description:"If `true`, in-editor auto-completions are generated based on fuzzy (i.e. more permissive) matches,\notherwise based on strict matches as in REPL.\n***NOTE***: this setting doesn't affect completions in REPL,\nand so in-REPL completions will still work as usual (i.e. based on strict matches and will complete eagerly).",type:"boolean",default:!0,order:10},autoCompletionSuggestionPriority:{title:"Auto-Completion Suggestion Priority",description:"Specify the sort order of auto-completion suggestions provided by Juno.\nNote the default providers like snippets have priority of `1`.\nRequires Atom restart to take an effect.",type:"integer",default:3,order:11},noAutoParenthesis:{title:"Don't Insert Parenthesis on Function Auto-completion",description:"If enabled, Juno will not insert parenthesis after completing a function.",type:"boolean",default:!1,order:12},formatOnSave:{title:"Format the current editor when saving",description:"If enabled, Juno will format the current editor on save if a Julia session is running.",type:"boolean",default:!1,order:13},formattingOptions:{title:"Formatting Options",description:'⚠ This config is deprecated. In order to specify\n[Formatting Options](https://domluna.github.io/JuliaFormatter.jl/dev/#Formatting-Options-1),\nuse `.JuliaFormatter.toml` configuration file instead.\nSee the ["Configuration File" section](https://domluna.github.io/JuliaFormatter.jl/stable/config/)\nin JuliaFormatter.jl\'s documentation for more details.',type:"object",order:14,collapsed:!0,properties:{mock:{title:"mock (doesn't have any effect)",type:"boolean",default:!1}}}}},uiOptions:{title:"UI Options",type:"object",order:3,collapsed:!0,properties:{resultsDisplayMode:{title:"Result Display Mode",type:"string",default:"inline",enum:[{value:"inline",description:"Float results next to code"},{value:"block",description:"Display results under code"},{value:"console",description:"Display results in the REPL"}],order:1},scrollToResult:{title:"Scroll to Inline Results",type:"boolean",default:!1,order:2},docsDisplayMode:{title:"Documentation Display Mode",type:"string",default:"pane",enum:[{value:"inline",description:"Show documentation in the editor"},{value:"pane",description:"Show documentation in the documentation pane"}],order:3},errorNotifications:{title:"Error Notifications",type:"boolean",default:!0,description:"When evaluating a script, show errors in a notification as well as in the REPL.",order:4},errorInRepl:{title:"Show Errors in REPL (Inline Evaluation)",type:"boolean",default:!1,description:"If enabled, Juno always shows errors in the REPL when using inline evaluation.",order:5},enableMenu:{title:"Enable Menu",type:"boolean",default:!1,description:"Show a Julia menu in the menu bar (requires restart).",order:6},enableToolBar:{title:"Enable Toolbar",type:"boolean",default:!1,description:"Show Julia icons in the tool bar (requires restart).",order:7},usePlotPane:{title:"Enable Plot Pane",type:"boolean",default:!0,description:"Show plots in Atom.",order:8},maxNumberPlots:{title:"Maximum Number of Plots in History",type:"number",default:50,description:"Increasing this number may lead to high memory consumption and poor performance.",order:9},openNewEditorWhenDebugging:{title:"Open New Editor When Debugging",type:"boolean",default:!1,description:"Opens a new editor tab when stepping into a new file instead of reusing the current one (requires restart).",order:10},cellDelimiter:{title:"Cell Delimiter",type:"array",default:["##\\s","#---","#\\s?%%"],description:"Regular expressions for determining cell delimiters.",order:11},highlightCells:{title:"Highlight Cells",type:"boolean",description:"Customize the appearence of Juno's cell highlighting by adding styles for `.line.julia-current-cell` or `.line-number.julia-current-cell` to your personal stylesheet.",default:!0,order:12},layouts:{title:"Layout Options",type:"object",order:13,collapsed:!0,properties:{console:{title:"REPL",type:"object",order:1,collapsed:!0,properties:{defaultLocation:{title:"Default location of REPL Pane",type:"string",enum:["center","left","bottom","right"],default:"bottom",radio:!0,order:1},split:{title:"Splitting rule of REPL Pane",type:"string",enum:["no split","left","up","right","down"],default:"no split",radio:!0,order:2}}},terminal:{title:"Terminal",type:"object",order:2,collapsed:!0,properties:{defaultLocation:{title:"Default location of Terminal Pane",type:"string",enum:["center","left","bottom","right"],default:"bottom",radio:!0,order:1},split:{title:"Splitting rule of Terminal Pane",type:"string",enum:["no split","left","up","right","down"],default:"no split",radio:!0,order:2}}},workspace:{title:"Workspace",type:"object",order:3,collapsed:!0,properties:{defaultLocation:{title:"Default location of Workspace Pane",type:"string",enum:["center","left","bottom","right"],default:"center",radio:!0,order:1},split:{title:"Splitting rule of Workspace Pane",type:"string",enum:["no split","left","up","right","down"],default:"right",radio:!0,order:2}}},documentation:{title:"Documentation Browser",type:"object",order:4,collapsed:!0,properties:{defaultLocation:{title:"Default location of Documentation Browser Pane",type:"string",enum:["center","left","bottom","right"],default:"center",radio:!0,order:1},split:{title:"Splitting rule of Documentation Browser Pane",type:"string",enum:["no split","left","up","right","down"],default:"right",radio:!0,order:2}}},plotPane:{title:"Plot Pane",type:"object",order:5,collapsed:!0,properties:{defaultLocation:{title:"Default location of Plot Pane",type:"string",enum:["center","left","bottom","right"],default:"center",radio:!0,order:1},split:{title:"Splitting rule of Plot Pane",type:"string",enum:["no split","left","up","right","down"],default:"right",radio:!0,order:2}}},debuggerPane:{title:"Debugger Pane",type:"object",order:6,collapsed:!0,properties:{defaultLocation:{title:"Default location of Debugger Pane",type:"string",enum:["center","left","bottom","right"],default:"right",radio:!0,order:1},split:{title:"Splitting rule of Debugger Pane",type:"string",enum:["no split","left","up","right","down"],default:"no split",radio:!0,order:2}}},profiler:{title:"Profiler",type:"object",order:7,collapsed:!0,properties:{defaultLocation:{title:"Default location of Profiler Pane",type:"string",enum:["center","left","bottom","right"],default:"center",radio:!0,order:1},split:{title:"Splitting rule of Profiler Pane",type:"string",enum:["no split","left","up","right","down"],default:"right",radio:!0,order:2}}},linter:{title:"Linter",type:"object",order:8,collapsed:!0,properties:{defaultLocation:{title:"Default location of Linter Pane",type:"string",enum:["center","left","bottom","right"],default:"bottom",radio:!0,order:1},split:{title:"Splitting rule of Linter Pane",type:"string",enum:["no split","left","up","right","down"],default:"no split",radio:!0,order:2}}},outline:{title:"Outline",type:"object",order:9,collapsed:!0,properties:{defaultLocation:{title:"Default location of Outline Pane",type:"string",enum:["center","left","bottom","right"],default:"left",radio:!0,order:1},split:{title:"Splitting rule of Outline Pane",type:"string",enum:["no split","left","up","right","down"],default:"down",radio:!0,order:2}}},defaultPanes:{title:"Default Panes",description:"Specify panes that are opened by `Julia Client: Restore Default Layout`. The location and splitting rule of each pane follow the settings above.",type:"object",order:10,properties:{console:{title:"REPL",type:"boolean",default:!0,order:1},workspace:{title:"Workspace",type:"boolean",default:!0,order:2},documentation:{title:"Documentation Browser",type:"boolean",default:!0,order:3},plotPane:{title:"Plot Pane",type:"boolean",default:!0,order:4},debuggerPane:{title:"Debugger Pane",type:"boolean",default:!1,order:5},linter:{title:"Linter",type:"boolean",default:!1,order:6},outline:{title:"Outline",type:"boolean",default:!1,order:7}}},openDefaultPanesOnStartUp:{title:"Open Default Panes on Startup",description:"If enabled, opens panes specified above on startup. Note a layout deserialized from a previous window state would be modified by that, i.e.: disable this if you want to keep the deserialized layout.",type:"boolean",default:!0,order:11}}}}},consoleOptions:{type:"object",title:"Terminal Options",order:4,collapsed:!0,properties:{maximumConsoleSize:{title:"Scrollback Buffer Size",type:"integer",default:1e4,order:1},prompt:{title:"Terminal Prompt",type:"string",default:"julia>",order:2},shell:{title:"Shell",type:"string",default:xt.defaultShell(),description:"The location of an executable shell. Set to `$SHELL` by default, and if `$SHELL` isn't set then fallback to `bash` or `powershell.exe` (on Windows).",order:3},terminal:{title:"Terminal",type:"string",default:xt.defaultTerminal(),description:"Command used to open an external terminal.",order:4},whitelistedKeybindingsREPL:{title:"Whitelisted Keybindings for the Julia REPL",type:"array",default:["Ctrl-C","F5","F8","F9","F10","F11","Shift-F5","Shift-F8","Shift-F9","Shift-F10","Shift-F11"],description:"The listed keybindings are not handled by the REPL and instead directly passed to Atom.",order:5},whitelistedKeybindingsTerminal:{title:"Whitelisted Keybindings for Terminals",type:"array",default:[],description:"The listed keybindings are not handled by any terminals and instead directly passed to Atom.",order:6},cursorStyle:{title:"Cursor Style",type:"string",enum:["block","underline","bar"],default:"block",radio:!0,order:7},cursorBlink:{title:"Cursor Blink",type:"boolean",default:!1,order:8},terminalRendererType:{title:"Terminal Renderer",type:"string",enum:["webgl","canvas","dom"],default:"webgl",radio:!0,description:"The `webgl` renderer is fastest, but is still experimental. `canvas` performs well in many cases, while `dom` is a slow falback. Note that it's not possible to hot-swap to the `webgl` renderer.",order:9},linkModifier:{title:"Ctrl/Cmd modifier for link activation",type:"boolean",default:!0,order:10}}},remoteOptions:{type:"object",order:5,collapsed:!0,properties:{remoteJulia:{title:"Command to execute Julia on the remote server",type:"string",default:"julia",order:1},tmux:{title:"Use a persistent tmux session",description:"Requires tmux to be installed on the server you're connecting to.",type:"boolean",default:!1,order:2},tmuxName:{title:"tmux session name",type:"string",default:"juno_tmux_session",order:3},agentAuth:{title:"Use SSH agent",description:"Requires `$SSH_AUTH_SOCKET` to be set. Defaults to putty's pageant on Windows.",type:"boolean",default:!0,order:4},forwardAgent:{title:"Forward SSH agent",type:"boolean",default:!0,order:5}}},juliaSyntaxScopes:{title:"Julia Syntax Scopes",description:"The listed syntax scopes (comma separated) will be recoginized as Julia files. You may have to restart Atom to take an effect.\n **DO NOT** edit this unless you're sure about the effect.",type:"array",default:["source.julia","source.weave.md","source.weave.latex"],order:6},disableProxy:{title:"Disable System Proxy for Child Processes",description:"This unsets the `HTTP_PROXY` and `HTTPS_PROXY` environment variables in all integrated terminals. Try this option if you're experiencing issues when installing Julia packages in Juno.",type:"boolean",default:!1,order:7},firstBoot:{type:"boolean",default:!0,order:99}},"darwin"!==process.platform&&(Pt.consoleOptions.properties.whitelistedKeybindingsREPL.default=["Ctrl-C","Ctrl-J","Ctrl-K","Ctrl-E","Ctrl-V","Ctrl-M","F5","F8","F9","F10","F11","Shift-F5","Shift-F8","Shift-F9","Shift-F10","Shift-F11"]),"darwin"===process.platform&&(Pt.consoleOptions.properties.macOptionIsMeta={title:"Use Option as Meta",type:"boolean",default:!1,order:5.5});var Ot,Dt=Pt;({CompositeDisposable:Ot}=o);var Et={activate:function(){var e;if(this.subs=new Ot,this.subs.add(atom.menu.add([{label:"Packages",submenu:this.menu}])),atom.config.get("julia-client.uiOptions.enableMenu"))return this.subs.add=atom.menu.add(this.menu),e=atom.menu.template.pop(),atom.menu.template.splice(3,0,e)},deactivate:function(){return this.subs.dispose()},menu:[{label:"Juno",submenu:[{label:"Start Julia",command:"julia-client:start-julia"},{label:"Start Remote Julia Process",command:"julia-client:start-remote-julia-process"},{label:"Interrupt Julia",command:"julia-client:interrupt-julia"},{label:"Stop Julia",command:"julia-client:kill-julia"},{type:"separator"},{label:"Open REPL",command:"julia-client:open-REPL"},{label:"Clear REPL",command:"julia-client:clear-REPL"},{label:"Open External REPL",command:"julia-client:open-external-REPL"},{label:"Working Directory",submenu:[{label:"Current File's Folder",command:"julia-client:work-in-current-folder"},{label:"Select Project Folder",command:"julia-client:work-in-project-folder"},{label:"Home Folder",command:"julia-client:work-in-home-folder"},{label:"Select...",command:"julia-client:select-working-folder"}]},{label:"Environment",submenu:[{label:"Environment in Current File's Folder",command:"julia-client:activate-environment-in-current-folder"},{label:"Environment in Parent Folder",command:"julia-client:activate-environment-in-parent-folder"},{label:"Default Environment",command:"julia-client:activate-default-environment"}]},{label:"Set Working Module",command:"julia-client:set-working-module"},{type:"separator"},{label:"Run Block",command:"julia-client:run-block"},{label:"Run All",command:"julia-client:run-all"},{type:"separator"},{label:"Format Code",command:"julia-client:format-code"},{type:"separator"},{label:"Debug: Run Block",command:"julia-debug:run-block"},{label:"Debug: Step through Block",command:"julia-debug:step-through-block"},{label:"Debug: Run File",command:"julia-debug:run-file"},{label:"Debug: Step through File",command:"julia-debug:step-through-file"},{type:"separator"},{label:"Open Workspace",command:"julia-client:open-workspace"},{label:"Open Outline Pane",command:"julia-client:open-outline-pane"},{label:"Open Documentation Browser",command:"julia-client:open-documentation-browser"},{label:"Open Plot Pane",command:"julia-client:open-plot-pane"},{label:"Open Debugger Pane",command:"julia-debug:open-debugger-pane"},{type:"separator"},{label:"Open New Julia File",command:"julia:new-julia-file"},{label:"Open Julia Startup File",command:"julia:open-julia-startup-file"},{label:"Open Juno Startup File",command:"julia:open-juno-startup-file"},{label:"Open Julia Home",command:"julia:open-julia-home"},{label:"Open Package in New Window...",command:"julia:open-package-in-new-window"},{label:"Open Package as Project Folder...",command:"julia:open-package-as-project-folder"},{type:"separator"},{label:"New Terminal",submenu:[{label:"Current File's Folder",command:"julia-client:new-terminal-from-current-folder"},{label:"Select Project Folder",command:"julia-client:new-terminal"}]},{label:"New Remote Terminal",command:"julia-client:new-remote-terminal"},{type:"separator"},{label:"Debug Information",command:"julia-client:debug-info"},{label:"Help...",command:"julia:get-help"},{label:"Settings...",command:"julia-client:settings"}]}]},It=Dt,Tt=[];function Rt(){It=null,Tt=null}var Lt,At,Bt,_t=Object.freeze({__proto__:null,updateSettings:function(){if(function e(t,n){Object.entries(t).forEach((function(t){var i=O(t,2),o=i[0],r=i[1];if("[object Object]"===Object.prototype.toString.call(r)){var a=n.slice(0);a.push(o),e(r,a)}var s=It;if(n.forEach((function(e){Object.entries(s).forEach((function(t){var n=O(t,2),i=n[0],o=n[1];i===e?s=o:"properties"===i&&o[e]&&(s=o[e])}))})),!(s[o]||s.properties&&s.properties[o])){var l="julia-client.";l+=0===n.length?"":"".concat(n.join("."),"."),l+=o,Tt.push(l)}}))}(atom.config.get("julia-client"),[]),Tt.length>0)var e=atom.notifications.addWarning("Julia-Client: Invalid (deprecated) settings found",{detail:Tt.join("\n"),dismissable:!0,description:"Remove these invalid settings ?",buttons:[{text:"Yes",onDidClick:function(){e.dismiss(),Tt.forEach((function(e){atom.config.unset(e)})),Rt()}},{text:"No",onDidClick:function(){e.dismiss(),Rt()}}]})}}),Mt={consumeToolBar:function(e){if(atom.config.get("julia-client.uiOptions.enableToolBar"))return this.bar=e("julia-client"),this.bar.addButton({icon:"file-code",iconset:"fa",tooltip:"New Julia File",callback:"julia:new-julia-file"}),this.bar.addButton({icon:"save",iconset:"fa",tooltip:"Save",callback:"core:save"}),this.bar.addButton({icon:"folder-open",iconset:"fa",tooltip:"Open File...",callback:"application:open-file"}),this.bar.addSpacer(),this.bar.addButton({icon:"globe",tooltip:"Start Local Julia Process",callback:"julia-client:start-julia"}),this.bar.addButton({iconset:"ion",icon:"md-planet",tooltip:"Start Remote Julia Process",callback:"julia-client:start-remote-julia-process"}),this.bar.addButton({icon:"md-pause",iconset:"ion",tooltip:"Interrupt Julia",callback:"julia-client:interrupt-julia"}),this.bar.addButton({icon:"md-square",iconset:"ion",tooltip:"Stop Julia",callback:"julia-client:kill-julia"}),this.bar.addSpacer(),this.bar.addButton({icon:"zap",tooltip:"Run Block",callback:"julia-client:run-and-move"}),this.bar.addButton({icon:"md-play",iconset:"ion",tooltip:"Run All",callback:"julia-client:run-all"}),this.bar.addButton({icon:"format-float-none",iconset:"mdi",tooltip:"Format Code",callback:"julia-client:format-code"}),this.bar.addSpacer(),this.bar.addButton({icon:"terminal",tooltip:"Show REPL",callback:"julia-client:open-REPL"}),this.bar.addButton({icon:"book",tooltip:"Show Workspace",callback:"julia-client:open-workspace"}),this.bar.addButton({icon:"list-unordered",tooltip:"Show Outline",callback:"julia-client:open-outline-pane"}),this.bar.addButton({icon:"info",tooltip:"Show Documentation Browser",callback:"julia-client:open-documentation-browser"}),this.bar.addButton({icon:"graph",tooltip:"Show Plot Pane",callback:"julia-client:open-plot-pane"}),this.bar.addButton({icon:"bug",tooltip:"Show Debugger Pane",callback:"julia-debug:open-debugger-pane"})},deactivate:function(){var e;return null!=(e=this.bar)?e.removeItems():void 0}},Ft={activate:function(){},enabled:function(){return atom.config.get("julia-client.uiOptions.notifications")},show:function(e,t){}};function Jt(e,t){var n=t.selected,i=document.createElement("li");n&&i.classList.add("active");var o=e.primary?e.primary.toString():e.toString(),r=Bt.matchHighlighter.highlightMatches(o,Lt.getFilterQuery());if(i.appendChild(r),e.secondary){var a=document.createElement("div");a.classList.add("secondary-line","path"),a.innerText=e.secondary,i.classList.add("two-lines"),r.classList.add("primary-line"),i.append(a)}return i}function zt(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.active,i=t.emptyMessage,o=t.errorMessage,r=t.infoMessage,a=t.allowCustom;Lt.update({items:[],query:"",loadingMessage:"Loading ..."});var s=atom.workspace.getActivePane();At.show(),Lt.focus();var l=!1;return new Promise((function(t,u){if(Lt.props.didConfirmSelection=function(e){l=!0,Lt.cancelSelection(),t(e)},Lt.props.didConfirmEmptySelection=function(){l=!0,Lt.cancelSelection();var e=Lt.getQuery();a&&e.length>0?t(e):t()},Lt.props.didCancelSelection=function(){At.hide(),s.activate();var e=Lt.getQuery();l||(a&&e.length>0?t(e):t())},Lt.props.filterKeyForItem=e.length>0&&e[0]instanceof Object?function(e){return e.primary}:function(e){return e},e.constructor==Promise)e.then((function(e){if(Lt.update({items:e,emptyMessage:i,errorMessage:o,infoMessage:r,loadingMessage:""}),n){var t=n instanceof Number?n:n instanceof Function?e.findIndex(n):e.findIndex((function(e){return e==n}));Lt.selectIndex(t)}})).catch((function(e){u(e),Lt.cancelSelection()}));else if(Lt.update({items:e,emptyMessage:i,errorMessage:o,infoMessage:r,loadingMessage:""}),n){var c=n instanceof Number?n:n instanceof Function?e.findIndex(n):e.findIndex((function(e){return e==n}));Lt.selectIndex(c)}}))}var Nt,Ht,Vt,Wt,qt,Ut,$t=Object.freeze({__proto__:null,activate:function(e){Bt=e,(Lt=new g({items:[],elementForItem:Jt})).element.classList.add("command-palette","julia-client-selector"),At=atom.workspace.addModalPanel({item:Lt.element})},show:zt});Nt=a,Ht={highlight:function(e,t,{scopePrefix:n,block:i}={}){var o,r,a,s,l,u,c,d,f,p,m;for(null==n&&(n=""),null==i&&(i=!1),(c=t.tokenizeLines(e)).length>0&&1===(s=c[c.length-1]).length&&""===s[0].value&&c.pop(),o='',r=0,l=c.length;r`,a=0,u=(p=c[r]).length;a${this.escapeString(m)}`;for(;d.length>0;)o=this.popScope(d,o);o+=``}return o+=""},escapeString:function(e){return e.replace(/[&"'<> ]/g,(function(e){switch(e){case"&":return"&";case'"':return""";case"'":return"'";case"<":return"<";case">":return">";case" ":return" ";default:return e}}))},updateScopeStack:function(e,t,n,i){var o,r,a,s,l,u,c,d;if((o=e.length-t.length)>0)for(;o--;)n=this.popScope(e,n);for(r=s=u=e.length;(u<=0?s<=0:s>=0)&&!Nt.isEqual(e.slice(0,r),t.slice(0,r));r=u<=0?++s:--s)n=this.popScope(e,n);for(a=l=c=r,d=t.length;c<=d?ld;a=c<=d?++l:--l)n=this.pushScope(e,t[a],n,i);return n},pushScope:function(e,t,n,i){return e.push(t),n+``},popScope:function(e,t){return e.pop(),t+""}},({client:Vt}=St),({once:qt}=Oe),Wt=Vt.import("getlazy");var Gt,Kt,Yt,Zt=Ut={dom:function({tag:e,attrs:t,contents:n},i){var o,r,a,s,l,u;for(a in u=document.createElement(e),t)(l=t[a])instanceof Array&&(l=l.join(" ")),u.setAttribute(a,l);if(null!=n)for(n.constructor!==Array&&(n=[n]),r=0,s=n.length;rthis.render(this.tags.div([e]),i)),{expand:n})},lazy:function({head:e,id:t},n){var i,o;return i=Vt.conn,null!=n.registerLazy&&n.registerLazy(t),o=this.ink.tree.treeView(this.render(e,n),[],{onToggle:qt(()=>{if(Vt.conn===i)return Wt(t).then(e=>{var t;return t=o.querySelector(":scope > .body"),e.map(e=>this.render(this.tags.div([e]),n)).forEach(e=>t.appendChild(this.ink.ansiToHTML(e)))})})})},subtree:function({label:e,child:t},n){return this.render("tree"===t.type?{type:"tree",head:this.tags.span([e,t.head]),children:t.children}:this.tags.span("gutted",[e,t]),n)},copy:function({view:e,text:t},n){return e=this.render(e,n),atom.commands.add(e,{"core:copy":function(e){return atom.clipboard.write(t),e.stopPropagation()}}),e},link:function({file:e,line:t,contents:n}){var i,o;return o=this.render(this.tags.a({href:"#"},n)),i=this.ink.Opener.isUntitled(e)?atom.tooltips.add(o,{title:function(){return"untitled"}}):atom.tooltips.add(o,{title:function(){return e}}),o.onclick=n=>(this.ink.Opener.open(e,t,{pending:atom.config.get("core.allowPendingPaneItems")}),n.stopPropagation()),o.addEventListener("DOMNodeRemovedFromDocument",()=>i.dispose()),o},number:function({value:e,full:t}){var n,i,o;return(i=e.toPrecision(3)).toString().length>=t.length||(i+="…"),o=this.render(this.tags.span("syntax--constant syntax--numeric",i)),n=!1,o.onclick=function(e){return o.innerText=n?i:t,n=!n,e.stopPropagation()},o},code:function({text:e,attrs:t,scope:n}){var i,o,r;return o=atom.grammars.grammarForScopeName("source.julia"),i=(null!=t?t.block:void 0)||!1,r=Ht.highlight(e,o,{scopePrefix:"syntax--",block:i}),this.render({type:"html",block:i,content:r})},latex:function({attrs:e,text:t}){var n,i;return n=(null!=e?e.block:void 0)||!1,i=this.ink.KaTeX.texify(t,n),this.render({type:"html",block:n,content:i})},views:{dom:function(...e){return Ut.dom(...e)},html:function(...e){return Ut.html(...e)},tree:function(...e){return Ut.tree(...e)},lazy:function(...e){return Ut.lazy(...e)},subtree:function(...e){return Ut.subtree(...e)},link:function(...e){return Ut.link(...e)},copy:function(...e){return Ut.copy(...e)},number:function(...e){return Ut.number(...e)},code:function(...e){return Ut.code(...e)},latex:function(...e){return Ut.latex(...e)}},render:function(e,t={}){var n;return this.views.hasOwnProperty(e.type)?(n=this.views[e.type](e,t),this.ink.ansiToHTML(n),n):(null!=e?e.constructor:void 0)===String?new Text(e):this.render("julia-client: can't render "+(null!=e?e.type:void 0))},tag:function(e,t,n){return(null!=t?t.constructor:void 0)===String&&(t={class:t}),(null!=t?t.constructor:void 0)!==Object&&([n,t]=[t,void 0]),{type:"dom",tag:e,attrs:t,contents:n}},tags:{}};["div","span","a","strong","table","tr","td","webview"].forEach((function(e){return Ut.tags[e]=function(t,n){return Ut.tag(e,t,n)}})),({CompositeDisposable:Gt}=o),({client:Kt}=St),({formatTimePeriod:Yt}=Oe);var Xt,Qt,en,tn,nn,on,rn,an,sn,ln={progs:{},activate:function(){var e;return this.subs=new Gt,Kt.handle({progress:(e,t,n)=>this[e](t,n)}),e=[],this.subs.add(Kt.onWorking(()=>{var t;return e=null!=(t=this.ink)?t.progress.add(null,{description:"Julia"}):void 0})),this.subs.add(Kt.onDone(()=>null!=e?e.destroy():void 0)),this.subs.add(Kt.onDetached(()=>this.clear()))},deactivate:function(){return this.clear(),this.subs.dispose()},add:function(e){var t;return(t=this.ink.progress.add()).t0=Date.now(),t.showTime=!0,this.progs[e]=t},progress:function(e,t){var n;if(null!=(n=this.progs[e]))return n.level=t,n.showTime?this.rightText(e,null):void 0},message:function(e,t){var n;return null!=(n=this.progs[e])?n.message=t:void 0},leftText:function(e,t){var n;return null!=(n=this.progs[e])?n.description=t:void 0},rightText:function(e,t){var n,i;if(null!=(i=this.progs[e]))return(null!=t?t.length:void 0)?(i.rightText=t,i.showTime=!1):(n=(Date.now()-i.t0)*(1/i.level-1)/1e3,i.showTime=!0,i.rightText=Yt(n))},delete:function(e){var t;if(null!=(t=this.progs[e]))return t.destroy(),delete this.progs[e]},clear:function(){var e,t,n;for(e in n=this.progs)null!=(t=n[e])&&t.destroy();return this.progs={}}};({CompositeDisposable:Xt,Disposable:Qt,Emitter:en}=o),({debounce:on}=a),({client:nn}=St),({show:sn}=$t),({module:rn,allmodules:tn,ismodule:an}=nn.import(["module","allmodules","ismodule"]));var un,cn,dn={activate:function(){return this.subs=new Xt,this.itemSubs=new Xt,this.subs.add(this.emitter=new en),this.subs.add(atom.workspace.observeActivePaneItem(e=>this.updateForItem(e))),this.subs.add(nn.onAttached(()=>this.updateForItem())),this.subs.add(nn.onDetached(()=>this.updateForItem()))},deactivate:function(){return this.subs.dispose()},_current:null,lastEditorModule:null,setCurrent:function(e,t){return this._current=e,t&&(this.lastEditorModule=this._current),this.emitter.emit("did-change",this._current)},onDidChange:function(e){return this.emitter.on("did-change",e)},current:function(e=this._current){var t,n,i,o;if(null!=e)return({main:n,inactive:t,sub:i,subInactive:o}=e),n===this.follow?this.current(this.lastEditorModule):!n||t?"Main":!i||o?n:`${n}.${i}`},itemSelector:'atom-text-editor[data-grammar="source julia"], .julia-console.julia, ink-terminal, .ink-workspace',isValidItem:function(e){var t;return null!=(t=atom.views.getView(e))?t.matches(this.itemSelector):void 0},autodetect:"Auto Detect",follow:"Follow Editor",chooseModule:function(){var e,t;if(t=atom.workspace.getActivePaneItem(),e=atom.workspace.isTextEditor(t),this.isValidItem(t))return nn.require("change modules",()=>{var n,i;if(t=atom.workspace.getActivePaneItem())return n=t.juliaModule||(e?this.autodetect:"Main"),(i=tn().then(t=>(e?t.unshift(this.autodetect):null!=this.lastEditorModule&&t.unshift(this.follow),t))).catch(e=>{}),sn(i,{active:n}).then(e=>{if(null!=e)return e===this.autodetect?delete t.juliaModule:t.juliaModule=e,"function"==typeof t.setModule&&t.setModule(e!==this.autodetect?e:void 0),this.updateForItem(t)})})},updateForItem:function(e=atom.workspace.getActivePaneItem()){var t;return this.itemSubs.dispose(),this.isValidItem(e)?nn.isActive()?atom.workspace.isTextEditor(e)?this.updateForEditor(e):(t=e.juliaModule||"Main",an(t).then(e=>this.setCurrent({main:t,inactive:!e})).catch(e=>{})):this.setCurrent({main:"Main",inactive:!0}):(this.itemSubs.add(null!=e&&"function"==typeof e.onDidChangeGrammar?e.onDidChangeGrammar(()=>this.updateForItem()):void 0),this.setCurrent())},updateForEditor:function(e){return this.setCurrent({main:e.juliaModule||"Main"},!0),this.setEditorModule(e),this.itemSubs.add(e.onDidChangeCursorPosition(()=>this.setEditorModuleLazy(e)))},getEditorModule:function(e,t=null){var n,i,o,r;if(nn.isActive())return t?({row:o,column:n}=t):(r=e.getSelections(),({row:o,column:n}=r[r.length-1].getBufferRange().end)),i={path:nn.editorPath(e),code:e.getText(),row:o+1,column:n+1,module:e.juliaModule},rn(i).catch(e=>{})},setEditorModule:function(e){var t;if(t=this.getEditorModule(e))return t.then(t=>{if(atom.workspace.getActivePaneItem()===e)return this.setCurrent(t,!0)})},setEditorModuleLazy:on((function(e){return this.setEditorModule(e)}),100),activateView:function(){var e,t,n,i,o;for(this.onDidChange(e=>this.updateView(e)),this.dom=document.createElement("span"),this.dom.classList.add("julia","inline-block"),this.mainView=document.createElement("a"),this.dividerView=document.createElement("span"),this.subView=document.createElement("span"),t=0,n=(i=[this.mainView,this.dividerView,this.subView]).length;tatom.commands.dispatch(atom.views.getView(atom.workspace.getActivePaneItem()),"julia-client:set-working-module"),atom.tooltips.add(this.dom,{title:()=>"Currently working in module "+this.current()}),this.tile=this.statusBar.addRightTile({item:this.dom,priority:5}),e=new Qt(()=>(this.tile.destroy(),delete this.tile)),this.subs.add(e),e},updateView:function(e){var t,n,i,o,r,a,s,l,u,c,d,f;if(null!=this.tile){if(null==e)return this.dom.style.display="none";if(({main:a,sub:c,inactive:n,subInactive:d}=e),a===this.follow)return this.updateView(this.lastEditorModule);if(this.dom.style.display="",this.mainView.innerText=a||"Main",c)this.subView.innerText=c,this.dividerView.innerText="/";else for(t=0,o=(s=[this.subView,this.dividerView]).length;t(this.ws.setItems([]),this.lazyTrees=[])),atom.config.observe("julia-client.uiOptions.layouts.workspace.defaultLocation",e=>this.ws.setDefaultLocation(e))},lazyTrees:[],update:function(){var e,t;return En.isActive()&&this.ws.currentPane()?(Dn(this.lazyTrees),t=e=>this.lazyTrees.push(e),e=this.mod===Rn.follow?Rn.current():this.mod||"Main",An(e).then(e=>{var n,i,o,r,a,s;for(n=0,a=e.length;n{var t;return t=this.mod===Rn.follow?Rn.current():this.mod||"Main",Tn({word:e,mod:t}).then(e=>{if(!e.error)return In.selectItemsAndGo(e.items)})}},create:function(){return this.ws=this.ink.Workspace.fromId("julia"),this.ws.setModule=e=>this.mod=e,this.ws.refresh=()=>this.update(),this.ws.refreshModule=()=>{var e;if(null!=(null!=(e=Rn.chooseModule())?e.then:void 0))return e.then(()=>this.update())}},open:function(){return this.ws.open({split:atom.config.get("julia-client.uiOptions.layouts.workspace.split")})},close:function(){return this.ws.close()}};Qn=s,({dialog:qn,BrowserWindow:_n}=b.remote),({client:Wn}=St),({notifications:Xn,views:oi,selector:ii,docpane:Un}=Jr),({paths:ei,blocks:zn,cells:Hn,words:ai,weave:ri}=Oe),({processLinks:ti}=Bn),si=li,Zn=dn,({eval:Kn,evalall:$n,evalshow:Gn,module:Yn,cd:Nn,clearLazy:Vn,activateProject:Jn,activateParentProject:Fn,activateDefaultProject:Mn}=Wn.import({rpc:["eval","evalall","evalshow","module"],msg:["cd","clearLazy","activateProject","activateParentProject","activateDefaultProject"]})),ni=Wn.import("docs");var ui,ci={_currentContext:function(){var e,t,n;return e=atom.workspace.getActiveTextEditor(),n=Zn.current()||"Main",t=Wn.editorPath(e)||"untitled-"+e.getBuffer().id,{editor:e,mod:n,edpath:t}},_showError:function(e,t){var n,i,o,r;return null!=(r=this.errorLines)&&r.lights.destroy(),i=this.ink.highlights.errorLines(function(){var e,i,r;for(r=[],e=0,i=t.length;e{var t;if((null!=(t=this.errorLines)?t.r:void 0)===e)return this.errorLines.lights.destroy()})},eval:function({move:e,cell:t}={}){var n,i,o,r,a,s,l;return({editor:i,mod:a,edpath:o}=this._currentContext()),n=null!=t?Hn:zn,s=atom.config.get("julia-client.uiOptions.resultsDisplayMode"),r=atom.config.get("julia-client.uiOptions.errorInRepl"),l=atom.config.get("julia-client.uiOptions.scrollToResult"),Promise.all(n.get(i).map(({range:u,line:c,text:d,selection:f})=>{var p,m,h,g;return e&&n.moveNext(i,f,u),[[g],[p]]=u,this.ink.highlight(i,g,p),h=s,t&&"console"!==h&&(h="block"),"console"===h?(Gn({text:d,line:c+1,mod:a,path:o}),Xn.show("Evaluation Finished"),si.update()):(m=null,setTimeout(()=>null!=m?m:m=new this.ink.Result(i,[g,p],{type:h,scope:"julia",goto:l}),.1),Kn({text:d,line:c+1,mod:a,path:o,errorInRepl:r}).catch((function(){return null!=m?m.destroy():void 0})).then(e=>{var t,n,o;if(null!=e)return o=(t="error"===e.type)?e.view:e,(null==m||m.isDestroyed)&&(m=new this.ink.Result(i,[g,p],{type:h,scope:"julia",goto:l})),n=function(e){return m.onDidDestroy(Wn.withCurrent((function(){return Vn([e])}))),i.onDidDestroy(Wn.withCurrent((function(){return Vn(e)})))},m.setContent(oi.render(o,{registerLazy:n}),{error:t}),t&&(t&&atom.beep(),this.ink.highlight(i,g,p,"error-line"),null!=e.highlights&&this._showError(m,e.highlights)),Xn.show("Evaluation Finished"),si.update(),e;null!=m&&m.destroy()}))}))},evalAll:function(e){var t,n,i,o,r,a,s,l;if(!e)return({editor:n,mod:r,edpath:i}=this._currentContext()),atom.commands.dispatch(atom.views.getView(n),"inline-results:clear-all"),[s]=n.getRootScopeDescriptor().getScopesArray(),a=(l=["source.weave.md","source.weave.latex"]).includes(s)?r:n.juliaModule,t=l.includes(s)?ri.getCode(n):n.getText(),$n({path:i,module:a,code:t}).then((function(e){return Xn.show("Evaluation Finished"),si.update()})).catch(e=>{});if(!(Qn=ei.getPathFromTreeView(e)))return atom.notifications.addError("This file has no path.");try{return t=ei.readCode(Qn),Yn({path:Qn,code:t,row:1,column:1}).then(e=>$n({path:Qn,module:Zn.current(e),code:t}).then((function(e){return Xn.show("Evaluation Finished"),si.update()})).catch(e=>{})).catch(e=>{})}catch(e){return o=e,atom.notifications.addError("Error happened",{detail:o,dismissable:!0})}},toggleDocs:function(){var e,t,n,i,o,r;if(({editor:t,mod:i,edpath:n}=this._currentContext()),e=t.getLastCursor().getBufferPosition(),({word:r,range:o}=ai.getWordAndRange(t,{bufferPosition:e})),o=ai.getWordRangeWithoutTrailingDots(r,o,e),r=t.getTextInBufferRange(o),ai.isValidWordToInspect(r))return ni({word:r,mod:i}).then(e=>{var n;if(!e.error)return n=oi.render(e),ti(n.getElementsByTagName("a")),"inline"===atom.config.get("julia-client.uiOptions.docsDisplayMode")?new this.ink.InlineDoc(t,o,{content:n,highlight:!0}).view.classList.add("julia"):(Un.ensureVisible(),Un.showDocument(n,[]))}).catch(e=>{})},_cd:function(e){return atom.config.get("julia-client.juliaOptions.persistWorkingDir")&&atom.config.set("julia-client.juliaOptions.workingDir",e),Nn(e)},cdHere:function(e){var t;if(t=this.currentDir(e))return this._cd(t)},activateProject:function(e){var t;if(t=this.currentDir(e))return Jn(t)},activateParentProject:function(e){var t;if(t=this.currentDir(e))return Fn(t)},activateDefaultProject:function(){return Mn()},currentDir:function(e){var t,n;return(t=ei.getDirPathFromTreeView(e))?t:(n=Wn.editorPath(atom.workspace.getCenter().getActiveTextEditor()))?Qn.dirname(n):(atom.notifications.addError("This file has no path."),null)},cdProject:function(){var e;return(e=atom.project.getPaths()).length<1?atom.notifications.addError("This project has no folders."):1===e.length?this._cd(e[0]):ii.show(e,{infoMessage:"Select project to work in"}).then(e=>{if(null!=e)return this._cd(e)}).catch(e=>{})},cdHome:function(){return this._cd(ei.home())},cdSelect:function(){var e;return e={properties:["openDirectory"]},qn.showOpenDialog(_n.getFocusedWindow(),e,e=>{if(null!=e)return this._cd(e[0])})}},di=Ct.import({msg:["changeprompt","changemodule"],rpc:["fullpath"]}),fi=di.changeprompt,pi=di.changemodule,mi=di.fullpath,hi="win32"===process.platform,gi=hi?/(@ ([^\s]+)\s(.*?)\:(\d+)|((([a-zA-Z]:|\.\.?|\~)|([^\0<>\?\|\/\s!$`&*()\[\]+'":;])+)?((\\|\/)([^\0<>\?\|\/!$`&*()\[\]+'":;])+)+\.[^\0<>\?\|\/\s!$`&*()\[\]+'":;]+)(\:\d+)?)/:/(@ ([^\s]+)\s(.*?)\:(\d+)|(((\.\.?|\~)|([^\0\s!$`&*()\[\]+'":;\\])+)?(\/([^\0\s!$`&*()\[\]+'":;\\])+)+)(\:\d+)?)/,vi=[],bi=[],wi=void 0,yi=void 0;function ki(){return ui.open({split:atom.config.get("julia-client.uiOptions.layouts.console.split")})}function ji(e){var t=wi.InkTerminal.fromId("terminal-julia-".concat(Math.floor(1e7*Math.random())),Pi());t.attachCustomKeyEventHandler((function(e){return Ri(e,t)})),t.onDidOpenLink(Ci),t.registerTooltipHandler(Ii,Ti),Di(t.terminal),Li(e).then((function(e){var n=e.pty,i=e.cwd;t.attach(n,!0,i),t.setDefaultLocation(atom.config.get("julia-client.uiOptions.layouts.terminal.defaultLocation")),t.open({split:atom.config.get("julia-client.uiOptions.layouts.terminal.split")}).then((function(){return t.show()})).catch((function(e){}))})).catch((function(){}))}function Pi(){var e={scrollback:atom.config.get("julia-client.consoleOptions.maximumConsoleSize"),cursorStyle:atom.config.get("julia-client.consoleOptions.cursorStyle"),rendererType:atom.config.get("julia-client.consoleOptions.terminalRendererType"),cursorBlink:atom.config.get("julia-client.consoleOptions.cursorBlink")};return"darwin"===process.platform&&(e.macOptionIsMeta=atom.config.get("julia-client.consoleOptions.macOptionIsMeta")),e}function xi(){var e=Pi();Si((function(t){for(var n in e)t.setOption(n,e[n])}),/terminal\-julia\-\d+|julia\-terminal|terminal\-remote\-julia\-\d+/)}function Si(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:/terminal\-julia\-\d+/;atom.workspace.getPaneItems().forEach((function(n){n.id&&"InkTerminal"===n.name&&n.id.match(t)&&e(n)}))}function Ci(e){return!atom.config.get("julia-client.consoleOptions.linkModifier")||("darwin"==process.platform?e.metaKey:e.ctrlKey)}function Oi(e,t){if(!Ci(e))return!1;if(Ct.isActive())mi(t).then((function(e){var t=O(e,2),n=t[0],i=t[1];wi.Opener.open(n,i-1,{pending:atom.config.get("core.allowPendingPaneItems")})}));else{var n=t.match(/@ ([^\s]+)\s(.*?)\:(\d+)/);if(n)wi.Opener.open(n[1],parseInt(n[2])-1,{pending:atom.config.get("core.allowPendingPaneItems")});else{var i=hi?/(([a-zA-Z]\:)?[^\:]+)(?:\:(\d+))?/:/([^\:]+)(?:\:(\d+))?/;if(n=t.match(i)){var o=null!==n[2]?parseInt(n[2]):0;wi.Opener.open(n[1],o-1,{pending:atom.config.get("core.allowPendingPaneItems")})}}}}function Di(e){e.registerLinkMatcher(gi,Oi,{willLinkActivate:function(e){return Ci(e)},tooltipCallback:function(t,n,i){return Ii(t,n,i,e)},leaveCallback:function(){return Ti()}})}var Ei=null;function Ii(e,t,n,i){if(Ti(),atom.config.get("julia-client.consoleOptions.linkModifier")){var o=document.createElement("div");o.classList.add("terminal-link-tooltip");var r=i.element.getBoundingClientRect(),a=r.width/i.cols,s=r.height/i.rows,l=n.start.x*a+r.left,u=(n.start.y-1.5)*s+r.top;return o.style.top=u+"px",o.style.left=l+"px",o.innerText=("darwin"==process.platform?"Cmd":"Ctrl")+"-Click to open link.",Ei=o,document.body.appendChild(o),!0}return!1}function Ti(){if(Ei)try{document.body.removeChild(Ei)}catch(e){}finally{Ei=null}}function Ri(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:bi;return"win32"!==process.platform&&13===e.keyCode&&(e.altKey||e.metaKey)&&"keydown"===e.type?(t.ty&&t.ty.write("\r"),!1):!(n.indexOf(atom.keymaps.keystrokeForKeyboardEvent(e))>-1)&&e}function Li(e){return process.env.TERM="xterm-256color",new Promise((function(t,n){(e?new Promise((function(t){return t(e)})):zr.show(atom.project.getPaths(),{emptyMessage:"Enter a custom path above.",allowCustom:!0})).then((function(e){if(e){e=De.expandHome(e),l.existsSync(e)||(atom.notifications.addWarning("Path does not exist.",{description:"Defaulting to `HOME` for new terminal's working directory."}),e=De.home());var i=Ke(),o=p.spawn(atom.config.get("julia-client.consoleOptions.shell"),[],{cols:100,rows:30,cwd:e,env:i,useConpty:!0,handleFlowControl:!0});t({pty:o,cwd:e})}else n()}))}))}var Ai=Object.freeze({__proto__:null,get terminal(){return ui},activate:function(e){var t;wi=e,yi=new i.CompositeDisposable,process.env.TERM="xterm-256color",yi.add(atom.config.observe("julia-client.consoleOptions.whitelistedKeybindingsREPL",(function(e){vi=e.map((function(e){return e.toLowerCase()}))})),atom.config.observe("julia-client.consoleOptions.whitelistedKeybindingsTerminal",(function(e){bi=e.map((function(e){return e.toLowerCase()}))})),atom.config.observe("julia-client.consoleOptions.cursorStyle",xi),atom.config.observe("julia-client.consoleOptions.maximumConsoleSize",xi),atom.config.observe("julia-client.consoleOptions.macOptionIsMeta",xi),atom.config.observe("julia-client.consoleOptions.terminalRendererType",xi),atom.config.observe("julia-client.consoleOptions.cursorBlink",xi)),(ui=wi.InkTerminal.fromId("julia-terminal",Pi())).setTitle("REPL",!0),ui.onDidOpenLink(Ci),ui.registerTooltipHandler(Ii,Ti),ui.class="julia-terminal",yi.add(atom.config.observe("julia-client.uiOptions.layouts.console.defaultLocation",(function(e){ui.setDefaultLocation(e)}))),ui.write("Press Enter to start Julia. \n\r"),ui.startRequested=function(){Ct.boot()},ui.attachCustomKeyEventHandler((function(e){return Ri(e,ui,vi)})),dn.onDidChange(r.debounce((function(){return pi({mod:dn.current()})}),200)),Ct.handle({updateWorkspace:function(){return li.update()},clearconsole:function(){return ui.clear()},cursorpos:function(){return ui.cursorPosition()},writeToTerminal:function(e){return!!ui.ty&&(ui.ty.write(e),!0)}}),Ct.onBoot((function(e){ui.attach(e.ty),e.config?ui.setTitle("REPL @ "+e.config.name,!0):ui.setTitle("REPL",!0),e.flush&&e.flush((function(e){return ui.write(e)}),(function(e){return ui.write(e)})),t=atom.config.observe("julia-client.consoleOptions.prompt",(function(e){fi(e+" ")})),Di(ui.terminal)})),Ct.onDetached((function(){ui.setTitle("REPL",!0),ui.detach(),ui.write("[?1049h"),ui.write("[?1049l"),ui.write("[?1003h"),ui.write("[?1003l"),ui.write("[?1004h"),ui.write("[?1004l"),ui.write("\n\r\rJulia has exited.\n\rPress Enter to start a new session.\n\r"),t&&t.dispose()})),yi.add(atom.commands.add("atom-workspace",{"julia-client:open-REPL":function(){ki().then((function(){return ui.show()}))},"julia-client:clear-REPL":function(){ui.clear()}}),atom.commands.add(".julia-terminal",{"julia-client:copy-or-interrupt":function(){ui.copySelection()||atom.commands.dispatch(ui.view,"julia-client:interrupt-julia")}}),atom.commands.add("atom-workspace",{"julia-client:new-terminal":function(){ji()},"julia-client:new-terminal-from-current-folder":function(e){var t=ci.currentDir(e.target);t&&ji(t)},"julia-client:new-remote-terminal":function(){var e;(e=wi.InkTerminal.fromId("terminal-remote-julia-".concat(Math.floor(1e7*Math.random())),Pi())).attachCustomKeyEventHandler((function(t){return Ri(t,e)})),e.onDidOpenLink(Ci),e.registerTooltipHandler(Ii,Ti),Di(e.terminal),rt((function(e){return new Promise((function(t,n){var i=new m.Client;i.on("ready",(function(){i.shell({term:"xterm-256color"},(function(n,o){o.on("close",(function(){i.end()})),o.resize=function(e,t){return o.setWindow(t,e,999,999)},t({pty:o,cwd:"~",conf:e})}))})).connect(e)}))})).then((function(t){var n=t.pty,i=t.cwd,o=t.conf;e.attach(n,!0,i),e.setTitle("Terminal @ ".concat(o.name)),e.setDefaultLocation(atom.config.get("julia-client.uiOptions.layouts.terminal.defaultLocation")),e.open({split:atom.config.get("julia-client.uiOptions.layouts.terminal.split")}).then((function(){return e.show()})),n.on("close",(function(){return e.detach()}))})).catch((function(e){}))}})),Si((function(e){e.ty||(e.attachCustomKeyEventHandler((function(t){return Ri(t,e)})),Di(e.terminal),e.onDidOpenLink(Ci),e.registerTooltipHandler(Ii,Ti),Li(e.persistentState.cwd).then((function(t){var n=t.pty,i=t.cwd;return e.attach(n,!0,i)})).catch((function(){})))}),/terminal\-julia\-\d+/),Si((function(e){return e.close()}),/terminal\-remote\-julia\-\d+/)},open:ki,close:function(){return ui.close()},deactivate:function(){Si((function(e){return e.detach()}),/terminal\-julia\-\d+/),Si((function(e){e.detach(),e.close()}),/terminal\-remote\-julia\-\d+/),ui&&ui.detach(),yi&&yi.dispose(),yi=null}}),Bi=Ct.import("completions"),_i=Ct.import("completiondetail"),Mi=new(function(){function e(){P(this,e),C(this,"selector",".source.julia"),C(this,"disableForSelector",".source.julia .comment"),C(this,"excludeLowerPriority",!0),C(this,"inclusionPriority",1),C(this,"suggestionPriority",atom.config.get("julia-client.juliaOptions.autoCompletionSuggestionPriority")),C(this,"filterSuggestions",!1)}return S(e,[{key:"activate",value:function(){var e=this;this.subscriptions=new i.CompositeDisposable,this.subscriptions.add(atom.config.observe("julia-client.juliaOptions.fuzzyCompletionMode",(function(t){e.fuzzyCompletionMode=t})),atom.config.observe("julia-client.juliaOptions.noAutoParenthesis",(function(t){e.noAutoParenthesis=t})))}},{key:"deactivate",value:function(){this.subscriptions.dispose()}},{key:"getSuggestions",value:function(e){if(!Ct.isActive())return[];var t=e.editor,n=e.bufferPosition,o=e.activatedManually,r=n.row,a=n.column,s=new i.Point(r,0),l=new i.Point(r,a),u=new i.Range(s,l),c=t.getTextInBufferRange(u);if(!o){if(0===a)return[];var d=new i.Point(r,a-1),f=new i.Range(d,n),p=t.getTextInBufferRange(f);if(!t.scopeDescriptorForBufferPosition(n).scopes.includes("meta.bracket.julia")&&!/\b(import|using)\b/.test(c)&&" "===p)return[]}var m=this.baselineCompletions(e,c);return Promise.race([m,this.sleep()])}},{key:"baselineCompletions",value:function(e,t){var n=this,i=e.editor,o=e.bufferPosition,r=o.row,a=o.column,s=e.activatedManually,l=te(i,r),u=l.context,c=l.startRow;return Bi({line:t,path:i.getPath(),mod:dn.current(),context:u,row:r+1,startRow:c,column:a+1,is_fuzzy:this.fuzzyCompletionMode,force:s||!1}).then((function(e){return e.map((function(e){return n.toCompletion(e)}))})).catch((function(){return[]}))}},{key:"toCompletion",value:function(e){var t=this.makeIcon(e.icon);return t&&(e.iconHTML=t),!e.description&&e.descriptionMoreURL&&(e.description=" "),e}},{key:"makeIcon",value:function(e){return e?e.startsWith("icon-")?''):1===e.length?e:"":""}},{key:"sleep",value:function(){return new Promise((function(e){setTimeout((function(){e(null)}),1e3)}))}},{key:"getSuggestionDetailsOnSelect",value:function(e){var t=_i(e).then((function(e){return!e.description&&e.descriptionMoreURL&&(e.description=" "),e})).catch((function(e){}));return Promise.race([t,this.sleep()])}},{key:"onDidInsertSuggestion",value:function(e){var t=e.editor;"function"!==e.suggestion.type||this.noAutoParenthesis||t.mutateSelectedText((function(e){if(e.isEmpty()){var n=e.getBufferRange().start,o=n.row,r=n.column,a=new i.Point(o,r),s=new i.Point(o,r+1),l=new i.Range(a,s),u=new i.Range(s,s);"("!==t.getTextInBufferRange(l)&&e.insertText("()"),e.setBufferRange(u)}}))}}]),e}()),Fi=Nr.tags.webview;var Ji,zi,Ni,Hi,Vi,Wi,qi={activate:function(){var e=this;return Ct.handle({plot:function(t){return e.show(t)},plotsize:function(){return e.plotSize()},ploturl:function(t){return e.ploturl(t)},jlpane:function(t,n){return e.jlpane(t,n)}}),this.create(),atom.config.observe("julia-client.uiOptions.usePlotPane",(function(t){return t?e.pane.setTitle("Plots"):e.pane.setTitle("Plots (disabled)")})),atom.config.observe("julia-client.uiOptions.layouts.plotPane.defaultLocation",(function(t){e.pane.setDefaultLocation(t)}))},create:function(){return this.pane=this.ink.PlotPane.fromId("default")},open:function(){return this.pane.open({split:atom.config.get("julia-client.uiOptions.layouts.plotPane.split")})},ensureVisible:function(){return this.pane.ensureVisible({split:atom.config.get("julia-client.uiOptions.layouts.plotPane.split")})},close:function(){return this.pane.close()},show:function(e){this.ensureVisible();var t=Nr.render(e);return this.pane.show(new this.ink.Pannable(t),{maxSize:atom.config.get("julia-client.uiOptions.maxNumberPlots")}),t},plotSize:function(){var e=this;return this.ensureVisible().then((function(){return{size:e.pane.size(),ratio:window.devicePixelRatio}}))},webview:function(e){var t=e.startsWith("data");if(t){var n=function(e){var t;t=e.split(",")[0].indexOf("base64")>=0?atob(e.split(",")[1]):unescape(e.split(",")[1]);for(var n=e.split(",")[0].split(":")[1].split(";")[0],i=new Uint8Array(t.length),o=0;o{var n;return null!=(n=this.ink)?n.Opener.open(e,t,{pending:atom.config.get("core.allowPendingPaneItems")}):void 0}}),zi.handle({versionwarning:function(e){return atom.notifications.addWarning("Outdated version of Atom.jl detected.",{description:e,dismissable:!0})}}),zi.handle({createWindow:e=>{var t,n;return t=new Ji(e),null!=e.url&&t.loadURL(e.url),t.setMenu(null),n=t.id,this.windows[n]=t,t.on("close",()=>delete this.windows[n]),n},withWin:(e,t)=>this.evalwith(this.windows[e],t),winActive:e=>this.windows.hasOwnProperty(e),notify:function(e){return Hi.show(e,!0)}}),zi.onDetached(()=>{var e,t,n,i;for(e in n=[],t=this.windows)i=t[e],delete this.windows[e],n.push(i.close());return n})},deactivate:function(){var e,t,n,i;for(e in n=[],t=this.windows)i=t[e],n.push(i.close());return n}},Qi=Ct.import(["debugfile","module"]),eo=Qi.debugfile,to=Qi.module,no='\n \n \n \n \n \n \n \n \n ',io='\n \n \n \n \n \n \n \n \n ',oo='\n \n \n \n \n \n \n \n \n \n \n ',ro='\n \n \n \n \n \n \n \n \n \n \n ',ao='\n \n \n \n \n \n \n \n \n ';function so(e,t){!function(e){return!Ui&&(void 0===e.originalEvent&&atom.notifications.addError("You need to be debugging to do that.",{description:"You can start debugging by calling `Juno.@enter f(args...)` from the integrated REPL.",dismissable:!0}),!0)}(e)?t():e.abortKeyBinding()}function lo(e){Ui?atom.notifications.addError("Can't start a debugging session while debugging.",{description:"Please finish the current session first.",dismissable:!0}):e()}function uo(e){(Ui=e)?Yi.ensureVisible():($i.destroy(),li.update(),Yi.reset())}function co(e){return St.boot(),Ct.import("toggleBP")(e)}function fo(){return St.boot(),Ct.import("clearbps")()}function po(){return St.boot(),Ct.import("toggleUncaught")()}function mo(){return St.boot(),Ct.import("toggleException")()}function ho(){return St.boot(),Ct.import("toggleCompiled")()}function go(){return St.boot(),Ct.import("getBreakpoints")()}function vo(e){return St.boot(),Ct.import("addArgs")(e)}function bo(e){return St.boot(),Ct.import("toggleAllActiveBP")(e)}function wo(e){return St.boot(),Ct.import("toggleActiveBP")(e)}function yo(e,t){return St.boot(),Ct.import("addConditionById")(e,t)}function ko(e){return St.boot(),Ct.import("setStackLevel")(e)}Ct.handle({debugmode:uo,stepto:function(e,t,n,i){$i.step(e,t-1,Nr.render(n),i),li.update()},working:function(){Ct.ipc.loading.working()},doneWorking:function(){Ct.ipc.loading.done()},getFileBreakpoints:function(){return Ki.getFileBreakpoints().filter((function(e){return e.isactive})).map((function(e){return{file:e.file,line:e.line,condition:e.condition}}))}});var jo,Po,xo=Object.freeze({__proto__:null,activate:function(e){var t=[{icon:"playback-fast-forward",tooltip:"Debug: Continue",command:"julia-debug:continue",color:"success"},{tooltip:"Debug: Next Line",command:"julia-debug:step-to-next-line",svg:ro},{tooltip:"Debug: Step to Selected Line",command:"julia-debug:step-to-selected-line",svg:oo},{tooltip:"Debug: Next Expression",command:"julia-debug:step-to-next-expression",svg:ao},{tooltip:"Debug: Step Into",command:"julia-debug:step-into",svg:no},{tooltip:"Debug: Step Out",command:"julia-debug:step-out",svg:io},{icon:"x",tooltip:"Debug: Stop Debugging",command:"julia-debug:stop-debugging",color:"error"}];$i=new(Zi=e).Stepper({buttons:t,pending:!atom.config.get("julia-client.uiOptions.openNewEditorWhenDebugging")}),Ki=new Zi.breakpoints(atom.config.get("julia-client.juliaSyntaxScopes"),{toggle:co,clear:fo,toggleUncaught:po,toggleException:mo,refresh:go,addArgs:vo,toggleActive:wo,toggleAllActive:bo,addCondition:yo,setLevel:ko,toggleCompiled:ho}),Yi=Zi.DebuggerPane.fromId("julia-debugger-pane",$i,Ki,t,[{text:"Run File",tooltip:"Debug: Run File",command:"julia-debug:run-file"},{text:"Step Through File",tooltip:"Debug: Step Through File",command:"julia-debug:step-through-file"},{text:"Run Block",tooltip:"Debug: Run Block",command:"julia-debug:run-block"},{text:"Step Through Block",tooltip:"Debug: Step Through Block",command:"julia-debug:step-through-block"}]),(Gi=new i.CompositeDisposable).add(atom.config.observe("julia-client.uiOptions.layouts.debuggerPane.defaultLocation",(function(e){Yi.setDefaultLocation(e)}))),Gi.add(Ct.onDetached((function(){uo(!1),Ki.clear(!0)})))},deactivate:function(){Ki.destroy(),Gi.dispose()},open:function(){return Yi.open({split:atom.config.get("julia-client.uiOptions.layouts.debuggerPane.split")})},close:function(){return Yi.close()},finish:function(e){so(e,(function(){return Ct.import("finish")()}))},nextline:function(e){so(e,(function(){return Ct.import("nextline")()}))},stepexpr:function(e){so(e,(function(){return Ct.import("stepexpr")()}))},stepin:function(e){so(e,(function(){return Ct.import("stepin")()}))},stop:function(e){so(e,(function(){return Ct.import("stop")()}))},continueForward:function(e){so(e,(function(){return Ct.import("continue")()}))},toselectedline:function(e){so(e,(function(){var e=$i.edForFile($i.file);null!=e&&Ct.import("toline")(e.getCursorBufferPosition().row+1)}))},debugFile:function(e,t){lo((function(){if(t){var n=De.getPathFromTreeView(t);if(!n)return void atom.notifications.addError("This file has no path.");try{var i=De.readCode(n);to({path:n,code:i,row:1,column:1}).then((function(t){eo(dn.current(t),i,n,e)})).catch((function(e){}))}catch(e){atom.notifications.addError("Error happened",{detail:e,dismissable:!0})}}else{var o=atom.workspace.getActiveTextEditor();if(!o||!o.getGrammar||"source.julia"!==o.getGrammar().id)return void atom.notifications.addError("Can't debug current file.",{description:"Please make sure a Julia file is open in the workspace."});var r=Ct.editorPath(o)||"untitled-"+o.getBuffer().id,a=dn.current()||"Main";eo(a,o.getText(),r,e)}}))},debugBlock:function(e,t){lo((function(){var n=atom.workspace.getActiveTextEditor();if(n){var i=Ct.editorPath(n)||"untitled-"+n.getBuffer().id,o=dn.current()||"Main",r=(t?Ie:Ee).get(n);if(0!==r.length){var a=r[0],s=a.range,l=a.text,u=a.line,c=O(s,2),d=O(c[0],1)[0],f=O(c[1],1)[0];Zi.highlight(n,d,f),eo(o,l,i,e,u)}}else atom.notifications.addError("Can't debug current code block.",{description:"Please make sure a file is open in the workspace."})}))},clearbps:function(){St.boot(),Ki.clear(),Ct.isActive()&&Ct.import("clearbps")()},togglebp:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:atom.workspace.getActiveTextEditor();if(t&&t.getPath()){var n=Ct.editorPath(t);t.getCursors().map((function(t){var i=t.getBufferPosition().row+1;e?Ki.toggleConditionAtSourceLocation({file:n,line:i}):Ki.toggleAtSourceLocation({file:n,line:i})}))}else atom.notifications.addError("Need a saved file to add a breakpoint")}}),So=Ct.import({msg:["loadProfileTrace","saveProfileTrace"]}),Co=So.loadProfileTrace,Oo=So.saveProfileTrace;function Do(){jo.teardown()}var Eo,Io,To,Ro,Lo=Object.freeze({__proto__:null,activate:function(e){(jo=e.PlotPane.fromId("Profile")).getTitle=function(){return"Profiler"},(Po=new i.CompositeDisposable).add(Ct.onDetached((function(){return Do()}))),Po.add(atom.config.observe("julia-client.uiOptions.layouts.profiler.defaultLocation",(function(e){jo.setDefaultLocation(e)}))),Ct.handle({profile:function(t){var n=new e.Profiler.ProfileViewer({data:t,save:function(e){return Oo(e,t)},customClass:"julia-profile"});jo.ensureVisible({split:atom.config.get("julia-client.uiOptions.layouts.profiler.split")}),jo.show(new e.Pannable(n,{zoomstrategy:"width",minScale:.5}))}}),Po.add(atom.commands.add("atom-workspace","julia-client:clear-profile",(function(){Do(),jo.close()}))),Po.add(atom.commands.add("atom-workspace","julia-client:load-profile-trace",(function(){var e=v.remote.dialog.showOpenDialog({title:"Load Profile Trace",properties:["openFile"]});Co(e)})))},deactivate:function(){Po.dispose()}}),Ao=Ct.import("updateeditor");function Bo(e){e&&e instanceof i.TextEditor&&(To&&To.dispose(),To=new i.CompositeDisposable,"source.julia"!==e.getGrammar().id?Eo.setItems([]):(To.add(e.onDidStopChanging(r.throttle((function(){return _o(e)}),300)),e.onDidChangeCursorPosition(r.throttle((function(){return function(e){var t=e.getCursorBufferPosition().row+1;Ro=Ro.map((function(e){return e.isActive=e.start<=t&&t<=e.stop,e})),Eo.setItems(Ro)}(e)}),300))),_o(e,{updateSymbols:!1})),To.add(e.onDidDestroy((function(){Ro=[],Eo.setItems([])})),e.onDidChangeGrammar((function(t){Bo(e)}))))}function _o(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{updateSymbols:!0};if(!Ct.isActive())return new Promise((function(e){return e([])}));var n=e.getText(),i=dn.current(),o=i||"Main",r=e.getPath()||"untitled-"+e.getBuffer().getId();Ao({text:n,mod:o,path:r,updateSymbols:t.updateSymbols}).then((function(t){Ro=Mo(e,t)})).catch((function(e){}))}function Mo(e,t){var n=e.getCursorBufferPosition().row+1;return t=t.map((function(t){return t.isActive=t.start<=n&&n<=t.stop,t.onClick=function(){var n,i=T(atom.workspace.getPanes());try{for(i.s();!(n=i.n()).done;){var o=n.value;if(o.getItems().includes(e)){o.activate(),o.setActiveItem(e),e.setCursorBufferPosition([t.start-1,0]),e.scrollToCursorPosition();break}}}catch(e){i.e(e)}finally{i.f()}},t})),Eo.setItems(t),t}var Fo,Jo,zo=Object.freeze({__proto__:null,activate:function(e){Eo=e.Outline.fromId("Julia-Outline"),Io=new i.CompositeDisposable,To=new i.CompositeDisposable,Ro=[],Io.add(atom.config.observe("julia-client.uiOptions.layouts.outline.defaultLocation",(function(e){Eo.setDefaultLocation(e)})),atom.workspace.onDidStopChangingActivePaneItem(r.throttle((function(e){return Bo(e)}),300)),atom.packages.onDidActivateInitialPackages((function(){return Bo(atom.workspace.getActivePaneItem())})),Ct.onDetached((function(){Ro=[],Eo.setItems([])})),new i.Disposable((function(){Ro=[],Eo.setItems([]),To&&To.dispose()})))},open:function(){return Eo.open({split:atom.config.get("julia-client.uiOptions.layouts.outline.split")})},close:function(){return Eo.close()},deactivate:function(){Io&&Io.dispose()}});var No=Object.freeze({__proto__:null,activate:function(e){var t=e.Linter;Jo=t.lintPane,Ct.handle({staticLint:function(e){Jo.ensureVisible({split:atom.config.get("julia-client.uiOptions.layouts.linter.split")}),t.setItems(e)}}),(Fo=new i.CompositeDisposable).add(atom.commands.add(".workspace",{"julia-client:clear-linter":function(){return t.clearItems()}})),Fo.add(atom.config.observe("julia-client.uiOptions.layouts.linter.defaultLocation",(function(e){Jo.setDefaultLocation(e)})))},open:function(){return Jo.open({split:atom.config.get("julia-client.uiOptions.layouts.linter.split")})},close:function(){return Jo.close()},deactivate:function(){Fo&&Fo.dispose()}}),Ho=Ct.import({rpc:["packages"]}).packages;var Vo=Object.freeze({__proto__:null,openPackage:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=Ho();t.then((function(t){var n=[];for(var i in t)n.push({primary:i,secondary:t[i]});zr.show(n,{infoMessage:"Select package to open"}).then((function(n){n&&(e?atom.open({pathsToOpen:[t[n.primary]]}):atom.project.addPath(t[n.primary],{mustExist:!0,exact:!0}))}))})).catch((function(){atom.notifications.addError("Couldn't find your Julia packages.")}))}}),Wo=Ct.import(["reportinfo"]).reportinfo;function qo(e){atom.notifications.addInfo("Juno Debug Info",{description:"Please provide the info above when you report an issue. Make sure to strip it of any kind of sensitive info you might not want to share.",detail:e,dismissable:!0,buttons:[{text:"Copy to Clipboard",onDidClick:function(){atom.clipboard.write(e)}}]})}var Uo,$o=Ct.import("format");function Go(e){var t=e.getBuffer().getRange();return Ko(e,t,e.getText())}function Ko(e,t,n){var i=s.dirname(Ct.editorPath(e)),o=function(e,t){var n=e.markBufferRange(t,{invalidate:"inside"});return e.decorateMarker(n,{type:"highlight",class:"ink-block"}),n}(e,t),r=e.getTabLength(),a=e.getPreferredLineLength();$o({text:n,dir:i,indent:r,margin:a}).then((function(t){var n=t.error,i=t.formattedtext;n?atom.notifications.addError("Julia-Client: Format-Code",{description:n,dismissable:!0}):o.isValid()?e.setTextInBufferRange(o.getBufferRange(),i):atom.notifications.addError("Julia-Client: Format-Code",{description:"Cancelled the formatting task because the selected code has been manually modified.",dismissable:!0})})).catch((function(e){})).finally((function(){o.destroy()}))}var Yo,Zo,Xo=Object.freeze({__proto__:null,formatCode:function(){var e=atom.workspace.getActiveTextEditor();if(e){var t=e.getSelections();1!==t.length||t[0].getText()?t.forEach((function(t){!function(e,t){var n=t.getBufferRange();Ko(e,n,t.getText())}(e,t)})):Go(e)}},activate:function(){Uo=new i.CompositeDisposable;var e=new WeakSet;Uo.add(atom.workspace.observeTextEditors((function(t){e.add(t);var n=t.getBuffer().onDidSave((function(){t&&t.getGrammar&&"source.julia"===t.getGrammar().id&&Ct.isActive()&&e.has(t)&&Go(t).then((function(){e.delete(t),t.save().then((function(){e.add(t)})).catch((function(e){}))})).catch((function(e){}))}));Uo.add(n),Uo.add(t.onDidDestroy((function(){n.dispose()})))})))},deactivate:function(){Uo&&Uo.dispose&&Uo.dispose()}}),Qo=Ct.import("datatip"),er=atom.grammars.grammarForScopeName("source.julia"),tr=new(function(){function e(){P(this,e),C(this,"providerName","julia-client-datatip-provider"),C(this,"priority",100),C(this,"grammarScopes",atom.config.get("julia-client.juliaSyntaxScopes")),C(this,"useAtomIDEUI",!1)}var t;return S(e,[{key:"datatip",value:(t=j(regeneratorRuntime.mark((function e(t,n){var i,o,r,a,s,l,u,c,d,f,p,m,h,g,v;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(Ct.isActive()){e.next=2;break}return e.abrupt("return");case 2:if(q(t,n)){e.next=4;break}return e.abrupt("return");case 4:if(i=ge(t,{bufferPosition:n}),o=i.range,r=i.word,o=be(r,o,n),we(r=t.getTextInBufferRange(o))){e.next=9;break}return e.abrupt("return");case 9:return e.next=11,dn.getEditorModule(t,n);case 11:return a=e.sent,s=a.main,l=a.sub,u=s?l?"".concat(s,".").concat(l):s:"Main",c=n.column,d=n.row,f=te(t,d),p=f.context,m=f.startRow,e.prev=17,e.next=20,Qo({word:r,mod:u,path:t.getPath(),column:c+1,row:d+1,startRow:m,context:p});case 20:if(!(h=e.sent).error){e.next=23;break}return e.abrupt("return");case 23:if(!this.useAtomIDEUI){e.next=33;break}if(!h.line){e.next=29;break}return g=t.lineTextForBufferRow(h.line).trim(),e.abrupt("return",{range:o,markedStrings:[{type:"snippet",value:g,grammar:er}]});case 29:if(!h.strings){e.next=31;break}return e.abrupt("return",{range:o,markedStrings:h.strings.map((function(e){return{type:e.type,value:e.value,grammar:"snippet"===e.type?er:null}}))});case 31:e.next=40;break;case 33:if(!h.line){e.next=38;break}return v=t.lineTextForBufferRow(h.line).trim(),e.abrupt("return",{range:o,markedStrings:[{type:"snippet",value:v,grammar:er}]});case 38:if(!h.strings){e.next=40;break}return e.abrupt("return",{range:o,markedStrings:h.strings.map((function(e){return{type:"markdown",value:"snippet"===e.type?"```julia\n".concat(e.value,"\n```"):e.value,grammar:"snippet"===e.type?er:null}}))});case 40:e.next=45;break;case 42:return e.prev=42,e.t0=e.catch(17),e.abrupt("return");case 45:case"end":return e.stop()}}),e,this,[[17,42]])}))),function(e,n){return t.apply(this,arguments)})}]),e}()),nr=Ct.import({rpc:["moduleinfo"]}).moduleinfo,ir=Ct.import("docs");({CompositeDisposable:Yo,Disposable:Zo}=o);var or={modules:dn,evaluation:ci,console:Ai,completions:Mi,workspace:li,plots:qi,frontend:Xi,debugger:xo,profiler:Lo,outline:zo,linter:No,packages:Vo,debuginfo:function(){var e="# Atom:\nVersion: ".concat(atom.getVersion(),"\nDev Mode: ").concat(atom.inDevMode(),"\nOfficial Release: ").concat(atom.isReleasedVersion(),"\n").concat(JSON.stringify(process.versions,null,2),"\n"),t=["julia-client","ink","uber-juno","language-julia","language-weave","indent-detective","latex-completions"];t.forEach((function(n,i){e+="# "+t[i]+":";var o=atom.packages.getActivePackage(n);e+=o?"\nVersion: ".concat(o.metadata.version,"\nConfig:\n").concat(JSON.stringify(o.config.settings[n],null,2),"\n"):"not installed\n",e+="\n\n"})),Wo().then((function(t){e+="# versioninfo():\n",qo(e+=t)})).catch((function(t){qo(e+="Could not connect to Julia.")}))},formatter:Xo,goto:bn,activate:function(){return this.subs=new Yo,this.modules.activate(),this.completions.activate(),this.frontend.activate(),this.subs.add(atom.config.observe("julia-client.juliaOptions.formatOnSave",e=>e?this.formatter.activate():this.formatter.deactivate())),this.subs.add(new Zo(()=>{var e,t,n,i,o;for(o=[],e=0,t=(i=[this.modules,this.completions,this.frontend,this.formatter]).length;e{var e,t,n,i;for(i=[],e=0,t=(n=[this.console,this.debugger,this.profiler,this.linter,this.goto,this.outline]).length;e Juno -> Settings -> Julia-Client -> UI Options -> Layout Options`**.\n `Julia-Client: Restore-Default-Layout` command will restore the layout at later point in time.\n Use `Julia-Client: Reset-Default-Layout-Settings` command to reset the layout settings if it gets messed up.",dismissable:!0})}}),yr=function(){function e(t){P(this,e),this.size=t,this.history=[],this.openedItem=void 0}return S(e,[{key:"push",value:function(e){if(!(this.openedItem&&this.openedItem.file&&this.openedItem.line&&e.file==this.openedItem.file&&e.line==this.openedItem.line))for(this.history.push(e);this.history.length>this.size;)this.history.shift()}},{key:"moveBack",value:function(){var e=this.history.pop();if(e&&e.open){var t=atom.workspace.getActivePaneItem();if(t instanceof i.TextEditor){var n=t.getPath()||"untitled-"+t.buffer.getId(),o=t.getCursorBufferPosition().row;this.openedItem={file:n,line:o}}e.open()}}}]),e}();var kr,jr,Pr,xr=Object.freeze({__proto__:null,activate:function(e){(br=new i.CompositeDisposable).add(atom.workspace.onDidStopChangingActivePaneItem((function(t){t instanceof i.TextEditor?gr=t:t instanceof e.InkTerminal&&(vr=t)})),atom.packages.onDidActivateInitialPackages((function(){gr=atom.workspace.getActiveTextEditor(),atom.workspace.getPanes().forEach((function(t){var n=t.getActiveItem();n instanceof e.InkTerminal&&(vr=n)}))})));var t=new yr(30);e.Opener.onDidOpen((function(e){e.newLocation;var n=e.oldLocation;n&&t.push(n)})),br.add(atom.commands.add("atom-workspace",{"julia-client:focus-last-editor":function(){return function(){var e=atom.workspace.paneForItem(gr);e&&(e.activate(),e.activateItem(gr))}()},"julia-client:focus-last-terminal":function(){vr&&vr.open&&vr.open()},"julia-client:return-from-goto":function(){return t.moveBack()}}))},deactivate:function(){gr=null,vr=null,br.dispose(),br=null}}),Sr=[];function Cr(e,t,n){if(0===n.length)return t&&t.destroy&&t.destroy(),null;var i=ie(e);if(i[1].row+=1,i[1].column=0,t&&t.destroy){var o=t.getBufferRange();if(o.start.row==i[0].row&&o.end.row==i[1].row)return t;t.destroy()}return t=e.markBufferRange(i),e.decorateMarker(t,{type:"line-number",class:"julia-current-cell"}),e.decorateMarker(t,{type:"line",class:"julia-current-cell"}),t}function Or(e,t){t.forEach((function(e){return e.destroy()}));var n="^("+atom.config.get("julia-client.uiOptions.cellDelimiter").join("|")+")",i=new RegExp(n),o=e.getBuffer();t=[];for(var r=0;r<=o.getEndPosition().row;r++){var a=$(e,r),s=a.line,l=a.scope;if(i.test(s)&&l.join(".").indexOf("comment.line")>-1){var u=e.markBufferRange([[r,0],[r,1/0]]);e.decorateMarker(u,{type:"line",class:"julia-cell-border"}),t.push(u)}}return t}var Dr,Er,Ir=Object.freeze({__proto__:null,activate:function(){kr=new i.CompositeDisposable,jr=new i.CompositeDisposable,kr.add(atom.workspace.observeActiveTextEditor((function(e){e&&e.getGrammar&&"source.julia"===e.getGrammar().id&&(jr&&jr.dispose&&(jr.dispose(),jr=new i.CompositeDisposable),Sr=Or(e,Sr),Pr=Cr(e,Pr,Sr),jr.add(e.onDidChangeCursorPosition((function(t){Pr=Cr(e,Pr,Sr)}))),jr.add(e.onDidStopChanging((function(){Sr=Or(e,Sr),Pr=Cr(e,Pr,Sr)}))),jr.add(e.onDidDestroy((function(){Pr&&Pr.destroy&&Pr.destroy(),Sr.forEach((function(e){return e.destroy()})),jr.dispose()}))),jr.add(e.onDidChangeGrammar((function(t){Pr&&Pr.destroy&&Pr.destroy(),Sr.forEach((function(e){return e.destroy()})),"source.julia"==e.getGrammar().id&&(Sr=Or(e,Sr),Pr=Cr(e,Pr,Sr))}))))})))},deactivate:function(){Pr&&Pr.destroy&&Pr.destroy(),Sr.forEach((function(e){return e.destroy()})),Pr=null,Sr=[],kr&&kr.dispose&&kr.dispose(),jr&&jr.dispose&&jr.dispose()}});({CompositeDisposable:Dr,Disposable:Er}=o);var Tr,Rr,Lr,Ar,Br,_r,Mr,Fr,Jr={notifications:Ft,selector:$t,views:Zt,progress:ln,layout:wr,docpane:Bn,focusutils:xr,cellhighlighter:Ir,activate:function(e){return this.client=e,this.subs=new Dr,this.notifications.activate(),this.subs.add(atom.config.observe("julia-client.uiOptions.highlightCells",e=>e?this.cellhighlighter.activate():this.cellhighlighter.deactivate())),this.subs.add(new Er(()=>this.cellhighlighter.deactivate())),this.subs.add(this.client.onAttached(()=>this.notifications.show("Client Connected"))),this.subs.add(this.client.onDetached(()=>{var e;return null!=(e=this.ink)?e.Result.invalidateAll():void 0}))},deactivate:function(){return this.subs.dispose()},consumeInk:function(e){return this.ink=e,this.views.ink=this.ink,this.progress.ink=this.ink,this.selector.activate(this.ink),this.docpane.activate(this.ink),this.progress.activate(),this.focusutils.activate(this.ink),this.subs.add(new Er(()=>(this.docpane.deactivate(),this.progress.deactivate(),this.focusutils.deactivate())))}},zr=Jr.selector,Nr=Jr.views,Hr=Jr.docpane;Ar=t,Lr=le,Br=Et,Mr=_t,Fr=Mt,_r=h,Tr="[`ink`](https://github.com/JunoLab/atom-ink)",Rr="[`language-julia`](https://github.com/JuliaEditorSupport/atom-language-julia)";var Vr={misc:Oe,ui:Jr,connection:St,runtime:or,activate:function(e){var t,n,i;for(Ar.setScheduler(atom.views),process.env.TERM="xterm-256color",Lr.activate(this),t=0,n=(i=[Br,this.connection,this.runtime]).length;t(Mr.updateSettings(),atom.config.get("julia-client.firstBoot")?this.ui.layout.queryDefaultLayout():atom.config.get("julia-client.uiOptions.layouts.openDefaultPanesOnStartUp")?setTimeout(()=>this.ui.layout.restoreDefaultLayout(),150):void 0))},requireDeps:function(e){return atom.packages.isPackageLoaded("ink")&&atom.packages.isPackageLoaded("language-julia")?e():y.install("julia-client").then(()=>this.enableDeps(e)).catch((function(e){return atom.notifications.addError("Installing Juno's dependencies failed.",{description:`Juno requires the packages ${Tr} and ${Rr} to run.\nPlease install them manually via \`File -> Settings -> Packages\`,\nor open a terminal and run\n\n apm install ink\n apm install language-julia\n\nand then restart Atom.`,dismissable:!0})}))},enableDeps:function(e){var t;return atom.packages.isPackageLoaded("ink")&&atom.packages.isPackageLoaded("language-julia")?e():(atom.packages.enablePackage("ink"),atom.packages.enablePackage("language-julia"),atom.packages.isPackageLoaded("ink")&&atom.packages.isPackageLoaded("language-julia")?(atom.notifications.addSuccess("Automatically enabled Juno's dependencies.",{description:`Juno requires the ${Tr} and ${Rr} packages.\nWe've automatically enabled them for you.`,dismissable:!0}),t=atom.packages.loadedPackages.ink.metadata.version,atom.devMode||_r.satisfies(t,"^0.12.3")||atom.notifications.addWarning("Potentially incompatible `ink` version detected.",{description:`Please make sure to upgrade ${Tr} to a version compatible with \`^0.12.3\`.\nThe currently installed version is \`${t}\`.\n\nIf you cannot install an appropriate version via via \`File -> Settings -> Packages\`,\nopen a terminal and run\n\n apm install ink@x.y.z\n\nwhere \`x.y.z\` is satisfies \`^0.12.3\`.`,dismissable:!0}),e()):atom.notifications.addError("Failed to enable Juno's dependencies.",{description:`Juno requires the ${Tr} and ${Rr} packages.\nPlease install them manually via \`File -> Settings -> Packages\`,\nor open a terminal and run\n\n apm install ink\n apm install language-julia\n\nand then restart Atom.`,dismissable:!0}))},config:Dt,deactivate:function(){var e,t,n,i,o;for(i=[],e=0,t=(n=[Lr,Br,Fr,this.connection,this.runtime,this.ui]).length;e 1) {\r\n if (scopes.indexOf(\"source.embedded.julia\") > -1) {\r\n code += lines[i] + \"\\n\"\r\n }\r\n }\r\n }\r\n return code\r\n}\r\n\r\nfunction getEmbeddedScope (cursor) {\r\n let scopes = cursor.getScopeDescriptor().scopes\r\n let targetScope = null\r\n for (let scope of scopes) {\r\n if (scope.startsWith('source.embedded.')) {\r\n targetScope = scope\r\n break\r\n }\r\n }\r\n return targetScope\r\n}\r\n\r\nfunction getCurrentCellRange (ed, cursor) {\r\n let scope = getEmbeddedScope(cursor)\r\n if (scope === null) return null\r\n\r\n let start = cursor.getBufferRow()\r\n let end = start\r\n while (start - 1 >= 0 &&\r\n ed.scopeDescriptorForBufferPosition([start - 1, 0]).scopes.indexOf(scope) > -1) {\r\n start -= 1\r\n }\r\n while (end + 1 <= ed.getLastBufferRow() &&\r\n ed.scopeDescriptorForBufferPosition([end + 1, 0]).scopes.indexOf(scope) > -1) {\r\n end += 1\r\n }\r\n return [[start, 0], [end, Infinity]]\r\n}\r\n\r\nexport function getCursorCellRanges (ed) {\r\n let ranges = []\r\n for (const cursor of ed.getCursors()) {\r\n let range = getCurrentCellRange(ed, cursor)\r\n if (range !== null) {\r\n ranges.push(range)\r\n }\r\n }\r\n return ranges\r\n}\r\n\r\nexport function moveNext (ed) {\r\n for (const cursor of ed.getCursors()) {\r\n let scope = getEmbeddedScope(cursor)\r\n if (scope === null) return null\r\n\r\n let range = getCurrentCellRange(ed, cursor)\r\n let endRow = range[1][0] + 1\r\n while (endRow + 1 <= ed.getLastBufferRow() &&\r\n ed.scopeDescriptorForBufferPosition([endRow + 1, 0]).scopes.indexOf(scope) === -1) {\r\n endRow += 1\r\n }\r\n cursor.setBufferPosition([endRow+1, Infinity])\r\n }\r\n}\r\n\r\nexport function movePrev (ed) {\r\n for (const cursor of ed.getCursors()) {\r\n let scope = getEmbeddedScope(cursor)\r\n if (scope === null) return null\r\n\r\n let range = getCurrentCellRange(ed, cursor)\r\n let startRow = range[0][0] - 1\r\n while (startRow - 1 >= 0 &&\r\n ed.scopeDescriptorForBufferPosition([startRow - 1, 0]).scopes.indexOf(scope) === -1) {\r\n startRow -= 1\r\n }\r\n cursor.setBufferPosition([startRow-1, Infinity])\r\n }\r\n}\r\n\r\nexport function get (ed) {\r\n let ranges = getCursorCellRanges(ed)\r\n if (ranges.length === 0) return []\r\n\r\n let processedRanges = []\r\n for (let range of ranges) {\r\n let text = ed.getTextInBufferRange(range)\r\n range[1][0] += 1 // move result one line down\r\n processedRanges.push({\r\n range: range,\r\n selection: ed.getSelections()[0],\r\n line: range[0][0],\r\n text: text || ' '\r\n })\r\n }\r\n return processedRanges\r\n}\r\n","/** @babel */\r\n\r\nimport { Point, Range } from 'atom'\r\n\r\nconst juliaScopes = ['source.julia', 'source.embedded.julia']\r\nconst openers = [\r\n 'if', 'while', 'for', 'begin', 'function', 'macro', 'module', 'baremodule', 'type', 'immutable',\r\n 'struct', 'mutable struct', 'try', 'let', 'do', 'quote', 'abstract type', 'primitive type'\r\n]\r\nconst reopeners = [ 'else', 'elseif', 'catch', 'finally' ]\r\n\r\nfunction isKeywordScope (scopes) {\r\n // Skip 'source.julia'\r\n return scopes.slice(1).some(scope => {\r\n return scope.indexOf('keyword') > -1\r\n })\r\n}\r\n\r\nexport function isStringScope (scopes) {\r\n let isString = false\r\n let isInterp = false\r\n for (const scope of scopes) {\r\n if (scope.indexOf('string') > -1) {\r\n isString = true\r\n }\r\n if (scope.indexOf('interpolation') > -1) {\r\n isInterp = true\r\n }\r\n }\r\n return isString && !isInterp\r\n}\r\n\r\nfunction forRange (editor, range) {\r\n // this should happen here and not a top-level so that we aren't relying on\r\n // Atom to load packages in a specific order:\r\n const juliaGrammar = atom.grammars.grammarForScopeName('source.julia')\r\n\r\n if (juliaGrammar === undefined) return []\r\n\r\n const scopes = []\r\n let n_parens = 0\r\n let n_brackets = 0\r\n const text = editor.getTextInBufferRange(range)\r\n juliaGrammar.tokenizeLines(text).forEach(lineTokens => {\r\n lineTokens.forEach(token => {\r\n const { value } = token\r\n if (!isStringScope(token.scopes)) {\r\n if (n_parens > 0 && value === ')') {\r\n n_parens -= 1\r\n scopes.splice(scopes.lastIndexOf('paren'), 1)\r\n return\r\n } else if (n_brackets > 0 && value === ']') {\r\n n_brackets -= 1\r\n scopes.splice(scopes.lastIndexOf('bracket'), 1)\r\n return\r\n } else if (value === '(') {\r\n n_parens += 1\r\n scopes.push('paren')\r\n return\r\n } else if (value === '[') {\r\n n_brackets += 1\r\n scopes.push('bracket')\r\n return\r\n }\r\n }\r\n if (!(isKeywordScope(token.scopes))) return\r\n if (!(n_parens === 0 && n_brackets === 0)) return\r\n\r\n const reopen = reopeners.includes(value)\r\n if (value === 'end' || reopen) scopes.pop()\r\n if (openers.includes(value) || reopen) scopes.push(value)\r\n })\r\n })\r\n return scopes\r\n}\r\n\r\nexport function forLines (editor, start, end) {\r\n const startPoint = new Point(start, 0)\r\n const endPoint = new Point(end, Infinity)\r\n const range = new Range(startPoint, endPoint)\r\n return forRange(editor, range)\r\n}\r\n\r\nexport function isCommentScope (scopes) {\r\n // Skip 'source.julia'\r\n return scopes.slice(1).some(scope => {\r\n return scope.indexOf('comment') > -1\r\n })\r\n}\r\n\r\n/**\r\n * Returns `true` if the scope at `bufferPosition` in `editor` is valid code scope to be inspected.\r\n * Supposed to be used within Atom-IDE integrations, whose `grammarScopes` setting doesn't support\r\n * embedded scopes by default.\r\n */\r\nexport function isValidScopeToInspect (editor, bufferPosition) {\r\n const scopes = editor\r\n .scopeDescriptorForBufferPosition(bufferPosition)\r\n .getScopesArray()\r\n return scopes.some(scope => {\r\n return juliaScopes.includes(scope)\r\n }) ?\r\n !isCommentScope(scopes) && !isStringScope(scopes) :\r\n false\r\n}\r\n","\r\n// TODO: docstrings\r\n\r\nimport { forLines } from './scopes'\r\n\r\nexport function getLine (ed, l) {\r\n return {\r\n scope: ed.scopeDescriptorForBufferPosition([l, 0]).scopes,\r\n line: ed.getTextInBufferRange([[l, 0], [l, Infinity]])\r\n }\r\n}\r\n\r\nfunction isBlank ({line, scope}, allowDocstrings = false) {\r\n for (const s of scope) {\r\n if (/\\bcomment\\b/.test(s) || (!allowDocstrings && /\\bdocstring\\b/.test(s))) {\r\n return true\r\n }\r\n }\r\n return /^\\s*(#.*)?$/.test(line)\r\n}\r\nfunction isEnd ({ line, scope }) {\r\n if (isStringEnd({ line, scope })) {\r\n return true\r\n }\r\n return /^(end\\b|\\)|\\]|\\})/.test(line)\r\n}\r\nfunction isStringEnd ({ line, scope }) {\r\n scope = scope.join(' ')\r\n return /\\bstring\\.multiline\\.end\\b/.test(scope) ||\r\n (/\\bstring\\.end\\b/.test(scope) && /\\bbacktick\\b/.test(scope))\r\n}\r\nfunction isCont ({ line, scope }) {\r\n scope = scope.join(' ')\r\n if (/\\bstring\\b/.test(scope) && !(/\\bpunctuation\\.definition\\.string\\b/.test(scope))) {\r\n return true\r\n }\r\n\r\n return line.match(/^(else|elseif|catch|finally)\\b/)\r\n}\r\nfunction isStart (lineInfo) {\r\n return !(/^\\s/.test(lineInfo.line) || isBlank(lineInfo) || isEnd(lineInfo) || isCont(lineInfo))\r\n}\r\n\r\nfunction walkBack(ed, row) {\r\n while ((row > 0) && !isStart(getLine(ed, row))) {\r\n row--\r\n }\r\n return row\r\n}\r\n\r\nfunction walkForward (ed, start) {\r\n let end = start\r\n let mark = start\r\n while (mark < ed.getLastBufferRow()) {\r\n mark++\r\n const lineInfo = getLine(ed, mark)\r\n\r\n if (isStart(lineInfo)) {\r\n break\r\n }\r\n if (isEnd(lineInfo)) {\r\n // An `end` only counts when there still are unclosed blocks (indicated by `forLines`\r\n // returning a non-empty array).\r\n // If the line closes a multiline string we also take that as ending the block.\r\n if (\r\n !(forLines(ed, start, mark-1).length === 0) ||\r\n isStringEnd(lineInfo)\r\n ) {\r\n end = mark\r\n }\r\n } else if (!(isBlank(lineInfo) || isStart(lineInfo))) {\r\n end = mark\r\n }\r\n }\r\n return end\r\n}\r\n\r\nfunction getRange (ed, row) {\r\n const start = walkBack(ed, row)\r\n const end = walkForward(ed, start)\r\n if (start <= row && row <= end) {\r\n return [[start, 0], [end, Infinity]]\r\n }\r\n}\r\n\r\nfunction getSelection (ed, sel) {\r\n const {start, end} = sel.getBufferRange()\r\n const range = [[start.row, start.column], [end.row, end.column]]\r\n while (isBlank(getLine(ed, range[0][0]), true) && (range[0][0] <= range[1][0])) {\r\n range[0][0]++\r\n range[0][1] = 0\r\n }\r\n while (isBlank(getLine(ed, range[1][0]), true) && (range[1][0] >= range[0][0])) {\r\n range[1][0]--\r\n range[1][1] = Infinity\r\n }\r\n return range\r\n}\r\n\r\nexport function moveNext (ed, sel, range) {\r\n // Ensure enough room at the end of the buffer\r\n const row = range[1][0]\r\n let last\r\n while ((last = ed.getLastBufferRow()) < (row+2)) {\r\n if ((last !== row) && !isBlank(getLine(ed, last))) {\r\n break\r\n }\r\n sel.setBufferRange([[last, Infinity], [last, Infinity]])\r\n sel.insertText('\\n')\r\n }\r\n // Move the cursor\r\n let to = row + 1\r\n while ((to < ed.getLastBufferRow()) && isBlank(getLine(ed, to))) {\r\n to++\r\n }\r\n to = walkForward(ed, to)\r\n return sel.setBufferRange([[to, Infinity], [to, Infinity]])\r\n}\r\n\r\nfunction getRanges (ed) {\r\n const ranges = ed.getSelections().map(sel => {\r\n return {\r\n selection: sel,\r\n range: sel.isEmpty() ?\r\n getRange(ed, sel.getHeadBufferPosition().row) :\r\n getSelection(ed, sel)\r\n }\r\n })\r\n return ranges.filter(({ range }) => {\r\n return range && ed.getTextInBufferRange(range).trim()\r\n })\r\n}\r\n\r\nexport function get (ed) {\r\n return getRanges(ed).map(({ range, selection }) => {\r\n return {\r\n range,\r\n selection,\r\n line: range[0][0],\r\n text: ed.getTextInBufferRange(range)\r\n }\r\n })\r\n}\r\n\r\nexport function getLocalContext (editor, row) {\r\n const range = getRange(editor, row)\r\n const context = range ? editor.getTextInBufferRange(range) : ''\r\n // NOTE:\r\n // backend code expects startRow to be number for most cases, e.g.: `row = row - startRow`\r\n // so let's just return `0` when there is no local context\r\n // to check there is a context or not, just check `isempty(context)`\r\n const startRow = range ? range[0][0] : 0\r\n return {\r\n context,\r\n startRow\r\n }\r\n}\r\n\r\nexport function select (ed = atom.workspace.getActiveTextEditor()) {\r\n if (!ed) return\r\n return ed.mutateSelectedText(selection => {\r\n const range = getRange(ed, selection.getHeadBufferPosition().row)\r\n if (range) {\r\n selection.setBufferRange(range)\r\n }\r\n })\r\n}\r\n","\r\n\r\nimport { get as weaveGet,\r\n moveNext as weaveMoveNext,\r\n movePrev as weaveMovePrev } from './weave.js'\r\n\r\nimport { getLine } from './blocks.js'\r\n\r\nimport { Point } from 'atom'\r\n\r\nexport function getRange (ed) {\r\n // Cell range is:\r\n // Start of line below top delimiter (and/or start of top row of file) to\r\n // End of line before end delimiter\r\n var buffer = ed.getBuffer()\r\n var start = buffer.getFirstPosition()\r\n var end = buffer.getEndPosition()\r\n var regexString = '^(' + atom.config.get('julia-client.uiOptions.cellDelimiter').join('|') + ')'\r\n var regex = new RegExp(regexString)\r\n var cursor = ed.getCursorBufferPosition()\r\n cursor.column = Infinity // cursor on delimiter line means eval cell below\r\n\r\n\r\n let foundDelim = false\r\n for (let i = cursor.row + 1; i <= ed.getLastBufferRow(); i++) {\r\n let {line, scope} = getLine(ed, i)\r\n foundDelim = regex.test(line) && scope.join('.').indexOf('comment.line') > -1\r\n end.row = i\r\n if (foundDelim) break\r\n }\r\n\r\n if (foundDelim) {\r\n end.row -= 1\r\n if (end.row < 0) end.row = 0\r\n end.column = Infinity\r\n }\r\n\r\n foundDelim = false\r\n if (cursor.row > 0) {\r\n for (let i = end.row; i >= 0; i--) {\r\n let {line, scope} = getLine(ed, i)\r\n foundDelim = regex.test(line) && scope.join('.').indexOf('comment.line') > -1\r\n start.row = i\r\n if (foundDelim) {\r\n break\r\n }\r\n }\r\n start.column = 0\r\n }\r\n\r\n return [start, end]\r\n}\r\n\r\nexport function get (ed) {\r\n if (ed.getGrammar().scopeName.indexOf('source.julia') > -1) {\r\n return jlGet(ed)\r\n } else {\r\n return weaveGet(ed)\r\n }\r\n}\r\n\r\nfunction jlGet (ed) {\r\n var range = getRange(ed)\r\n var text = ed.getTextInBufferRange(range)\r\n if (text.trim() === '') text = ' '\r\n var res = {\r\n range: [[range[0].row, range[0].column], [range[1].row, range[1].column]],\r\n selection: ed.getSelections()[0],\r\n line: range[0].row,\r\n text: text\r\n }\r\n return [res]\r\n}\r\n\r\nexport function moveNext (ed) {\r\n if (ed == null) {\r\n ed = atom.workspace.getActiveTextEditor()\r\n }\r\n if (ed.getGrammar().scopeName.indexOf('source.julia') > -1) {\r\n return jlMoveNext(ed)\r\n } else {\r\n return weaveMoveNext(ed)\r\n }\r\n}\r\n\r\nfunction jlMoveNext (ed) {\r\n var range = getRange(ed)\r\n var sel = ed.getSelections()[0]\r\n var nextRow = range[1].row + 2 // 2 = 1 to get to delimiter line + 1 more to go past it\r\n return sel.setBufferRange([[nextRow, 0], [nextRow, 0]])\r\n}\r\n\r\nexport function movePrev (ed) {\r\n if (ed == null) {\r\n ed = atom.workspace.getActiveTextEditor()\r\n }\r\n if (ed.getGrammar().scopeName.indexOf('source.weave') > -1) {\r\n return weaveMovePrev(ed)\r\n } else {\r\n return jlMovePrev(ed)\r\n }\r\n}\r\n\r\nfunction jlMovePrev (ed) {\r\n var range = getRange(ed)\r\n var prevRow = range[0].row - 2 // 2 = 1 to get to delimiter line + 1 more to go past it\r\n var sel = ed.getSelections()[0]\r\n return sel.setBufferRange([[prevRow, 0], [prevRow, 0]])\r\n}\r\n","shell = require 'shell'\r\ncells = require '../misc/cells'\r\n{CompositeDisposable} = require 'atom'\r\n\r\nmodule.exports =\r\n activate: (juno) ->\r\n requireClient = (a, f) -> juno.connection.client.require a, f\r\n disrequireClient = (a, f) -> juno.connection.client.disrequire a, f\r\n boot = -> juno.connection.boot()\r\n\r\n cancelComplete = (e) ->\r\n atom.commands.dispatch(e.currentTarget, 'autocomplete-plus:cancel')\r\n\r\n @subs = new CompositeDisposable()\r\n\r\n # atom-text-editors with Julia scopes\r\n for scope in atom.config.get('julia-client.juliaSyntaxScopes')\r\n @subs.add atom.commands.add \"atom-text-editor[data-grammar='#{scope.replace /\\./g, ' '}']\",\r\n 'julia-client:run-block': (event) =>\r\n cancelComplete event\r\n @withInk ->\r\n boot()\r\n juno.runtime.evaluation.eval()\r\n 'julia-client:run-and-move': (event) =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.evaluation.eval(move: true)\r\n 'julia-client:run-all': (event) =>\r\n cancelComplete event\r\n @withInk ->\r\n boot()\r\n juno.runtime.evaluation.evalAll()\r\n 'julia-client:run-cell': =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.evaluation.eval(cell: true)\r\n 'julia-client:run-cell-and-move': =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.evaluation.eval(cell: true, move: true)\r\n 'julia-client:select-block': =>\r\n juno.misc.blocks.select()\r\n 'julia-client:next-cell': =>\r\n cells.moveNext()\r\n 'julia-client:prev-cell': =>\r\n cells.movePrev()\r\n 'julia-client:goto-symbol': =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.goto.gotoSymbol()\r\n 'julia-client:show-documentation': =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.evaluation.toggleDocs()\r\n # @NOTE: `'clear-workspace'` is now not handled by Atom.jl\r\n # 'julia-client:reset-workspace': =>\r\n # requireClient 'reset the workspace', ->\r\n # editor = atom.workspace.getActiveTextEditor()\r\n # atom.commands.dispatch atom.views.getView(editor), 'inline-results:clear-all'\r\n # juno.connection.client.import('clear-workspace')()\r\n 'julia-client:send-to-stdin': (e) =>\r\n requireClient ->\r\n ed = e.currentTarget.getModel()\r\n done = false\r\n for s in ed.getSelections()\r\n continue unless s.getText()\r\n done = true\r\n juno.connection.client.stdin s.getText()\r\n juno.connection.client.stdin ed.getText() unless done\r\n 'julia-debug:run-block': =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.debugger.debugBlock(false, false)\r\n 'julia-debug:step-through-block': =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.debugger.debugBlock(true, false)\r\n 'julia-debug:run-cell': =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.debugger.debugBlock(false, true)\r\n 'julia-debug:step-through-cell': =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.debugger.debugBlock(true, true)\r\n 'julia-debug:toggle-breakpoint': =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.debugger.togglebp()\r\n 'julia-debug:toggle-conditional-breakpoint': =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.debugger.togglebp(true)\r\n\r\n # atom-text-editor with Julia grammar scope\r\n @subs.add atom.commands.add 'atom-text-editor[data-grammar=\"source julia\"]',\r\n 'julia-client:format-code': =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.formatter.formatCode()\r\n\r\n # Where \"module\" matters\r\n @subs.add atom.commands.add 'atom-text-editor[data-grammar=\"source julia\"],\r\n .julia-terminal,\r\n .ink-workspace',\r\n 'julia-client:set-working-module': -> juno.runtime.modules.chooseModule()\r\n\r\n # tree-view\r\n @subs.add atom.commands.add '.tree-view',\r\n 'julia-client:run-all': (ev) =>\r\n cancelComplete ev\r\n @withInk ->\r\n boot()\r\n juno.runtime.evaluation.evalAll(ev.target)\r\n 'julia-debug:run-file': (ev) =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.debugger.debugFile(false, ev.target)\r\n 'julia-debug:step-through-file': (ev) =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.debugger.debugFile(true, ev.target)\r\n\r\n # atom-work-space\r\n @subs.add atom.commands.add 'atom-workspace',\r\n 'julia-client:open-external-REPL': -> juno.connection.terminal.repl()\r\n 'julia-client:start-julia': -> disrequireClient 'boot Julia', -> boot()\r\n 'julia-client:start-remote-julia-process': -> disrequireClient 'boot a remote Julia process', -> juno.connection.bootRemote()\r\n 'julia-client:kill-julia': -> juno.connection.client.kill()\r\n 'julia-client:interrupt-julia': => requireClient 'interrupt Julia', -> juno.connection.client.interrupt()\r\n 'julia-client:disconnect-julia': => requireClient 'disconnect Julia', -> juno.connection.client.disconnect()\r\n # 'julia-client:reset-julia-server': -> juno.connection.local.server.reset() # server mode not functional\r\n 'julia-client:connect-external-process': -> disrequireClient -> juno.connection.messages.connectExternal()\r\n 'julia-client:connect-terminal': -> disrequireClient -> juno.connection.terminal.connectedRepl()\r\n 'julia-client:open-plot-pane': => @withInk -> juno.runtime.plots.open()\r\n 'julia-client:open-outline-pane': => @withInk -> juno.runtime.outline.open()\r\n 'julia-client:open-workspace': => @withInk -> juno.runtime.workspace.open()\r\n 'julia-client:restore-default-layout': -> juno.ui.layout.restoreDefaultLayout()\r\n 'julia-client:close-juno-panes': -> juno.ui.layout.closePromises()\r\n 'julia-client:reset-default-layout-settings': -> juno.ui.layout.resetDefaultLayoutSettings()\r\n 'julia-client:settings': -> atom.workspace.open('atom://config/packages/julia-client')\r\n\r\n 'julia-debug:run-file': =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.debugger.debugFile(false)\r\n 'julia-debug:step-through-file': =>\r\n @withInk ->\r\n boot()\r\n juno.runtime.debugger.debugFile(true)\r\n 'julia-debug:clear-all-breakpoints': => juno.runtime.debugger.clearbps()\r\n 'julia-debug:step-to-next-line': (ev) => juno.runtime.debugger.nextline(ev)\r\n 'julia-debug:step-to-selected-line': (ev) => juno.runtime.debugger.toselectedline(ev)\r\n 'julia-debug:step-to-next-expression': (ev) => juno.runtime.debugger.stepexpr(ev)\r\n 'julia-debug:step-into': (ev) => juno.runtime.debugger.stepin(ev)\r\n 'julia-debug:stop-debugging': (ev) => juno.runtime.debugger.stop(ev)\r\n 'julia-debug:step-out': (ev) => juno.runtime.debugger.finish(ev)\r\n 'julia-debug:continue': (ev) => juno.runtime.debugger.continueForward(ev)\r\n 'julia-debug:open-debugger-pane': => juno.runtime.debugger.open()\r\n\r\n 'julia:new-julia-file': =>\r\n atom.workspace.open().then((ed) =>\r\n gr = atom.grammars.grammarForScopeName('source.julia')\r\n ed.setGrammar(gr) if gr\r\n )\r\n 'julia:open-julia-startup-file': -> atom.workspace.open(juno.misc.paths.home('.julia', 'config', 'startup.jl'))\r\n 'julia:open-juno-startup-file': -> atom.workspace.open(juno.misc.paths.home('.julia', 'config', 'juno_startup.jl'))\r\n 'julia:open-julia-home': -> shell.openItem juno.misc.paths.juliaHome()\r\n 'julia:open-package-in-new-window': -> requireClient 'get packages', -> juno.runtime.packages.openPackage()\r\n 'julia:open-package-as-project-folder': -> requireClient 'get packages', -> juno.runtime.packages.openPackage(false)\r\n 'julia:get-help': -> shell.openExternal 'http://discourse.julialang.org'\r\n 'julia-client:debug-info': =>\r\n boot()\r\n juno.runtime.debuginfo()\r\n\r\n 'julia-client:work-in-current-folder': (ev) ->\r\n requireClient 'change working folder', ->\r\n juno.runtime.evaluation.cdHere(ev.target)\r\n 'julia-client:work-in-project-folder': ->\r\n requireClient 'change working folder', ->\r\n juno.runtime.evaluation.cdProject()\r\n 'julia-client:work-in-home-folder': ->\r\n requireClient 'change working folder', ->\r\n juno.runtime.evaluation.cdHome()\r\n 'julia-client:select-working-folder': ->\r\n requireClient 'change working folder', ->\r\n juno.runtime.evaluation.cdSelect()\r\n 'julia-client:activate-environment-in-current-folder': (ev) ->\r\n requireClient 'activate an environment', ->\r\n juno.runtime.evaluation.activateProject(ev.target)\r\n 'julia-client:activate-environment-in-parent-folder': (ev) ->\r\n requireClient 'activate an environment', ->\r\n juno.runtime.evaluation.activateParentProject(ev.target)\r\n 'julia-client:activate-default-environment': (ev) ->\r\n requireClient 'activate an environment', ->\r\n juno.runtime.evaluation.activateDefaultProject()\r\n\r\n deactivate: ->\r\n @subs.dispose()\r\n\r\n withInk: (f, err) ->\r\n if @ink?\r\n f()\r\n else if err\r\n atom.notifications.addError 'Please install the Ink package.',\r\n detail: 'Julia Client requires the Ink package to run.\r\n You can install it via `File -> Settings -> Install`.'\r\n dismissable: true\r\n else\r\n setTimeout (=> @withInk f, true), 100\r\n","/** @babel */\r\n\r\nimport path from 'path'\r\nimport fs from 'fs'\r\nimport child_process from 'child_process'\r\n\r\nexport function home (...p) {\r\n const key = process.platform === 'win32' ? 'USERPROFILE' : 'HOME'\r\n return path.join(process.env[key], ...p)\r\n}\r\n\r\nexport function juliaHome (...p) {\r\n const juliaHome = (process.env.JULIA_HOME || home('.julia'))\r\n return path.join(juliaHome, ...p)\r\n}\r\n\r\nexport function jlpath () {\r\n return expandHome(atom.config.get('julia-client.juliaPath'))\r\n}\r\n\r\nexport function expandHome (p) {\r\n return p.startsWith('~') ? p.replace('~', home()) : p\r\n}\r\n\r\nexport function fullPath (p) {\r\n return new Promise((resolve, reject) => {\r\n if (fs.existsSync(p)) return resolve(p)\r\n const current_dir = process.cwd()\r\n const exepath = path.dirname(process.execPath)\r\n try {\r\n process.chdir(exepath)\r\n const realpath = fs.realpathSync(p)\r\n fs.existsSync(realpath) && resolve(realpath)\r\n } catch (err) {\r\n console.log(err)\r\n } finally {\r\n try {\r\n process.chdir(current_dir)\r\n } catch (err) {\r\n console.error(err)\r\n }\r\n }\r\n if (process.platform === 'win32') {\r\n if (/[a-zA-Z]\\:/.test(p)) return reject(\"Couldn't resolve path.\")\r\n }\r\n const which = process.platform === 'win32' ? 'where' : 'which'\r\n child_process.exec(`${which} \"${p}\"`, (err, stdout, stderr) => {\r\n if (err) return reject(stderr)\r\n const p = stdout.trim()\r\n if (fs.existsSync(p)) return resolve(p)\r\n return reject('Couldn\\'t resolve path.')\r\n })\r\n })\r\n}\r\n\r\nexport function getVersion (path = jlpath()) {\r\n return new Promise((resolve, reject) => {\r\n child_process.exec(`\"${path}\" --version`, (err, stdout, stderr) => {\r\n if (err) return reject(stderr)\r\n const res = stdout.match(/(\\d+)\\.(\\d+)\\.(\\d+)/)\r\n if (!res) return reject('Couldn\\'t resolve version.')\r\n const [_, major, minor, patch] = res\r\n return resolve({ major, minor, patch })\r\n })\r\n })\r\n}\r\n\r\nexport function projectDir () {\r\n if (atom.config.get('julia-client.juliaOptions.persistWorkingDir')) {\r\n return new Promise(resolve => {\r\n const p = atom.config.get('julia-client.juliaOptions.workingDir')\r\n try {\r\n fs.stat(p, (err, stats) => {\r\n if (err) {\r\n return resolve(atomProjectDir())\r\n } else {\r\n return resolve(p)\r\n }\r\n })\r\n } catch (err) {\r\n return resolve(atomProjectDir())\r\n }\r\n })\r\n } else {\r\n return atomProjectDir()\r\n }\r\n}\r\n\r\nfunction atomProjectDir () {\r\n const dirs = atom.workspace.project.getDirectories()\r\n let ws = process.env.HOME\r\n if (!ws) {\r\n ws = process.env.USERPROFILE\r\n }\r\n if (dirs.length === 0 || dirs[0].path.match('app.asar')) {\r\n return Promise.resolve(ws)\r\n }\r\n return new Promise(resolve => {\r\n // use the first open project folder (or its parent folder for files) if\r\n // it is valid\r\n try {\r\n fs.stat(dirs[0].path, (err, stats) => {\r\n if (err) return resolve(ws)\r\n if (stats.isFile()) return resolve(path.dirname(dirs[0].path))\r\n return resolve(dirs[0].path)\r\n })\r\n } catch (err) {\r\n return resolve(ws)\r\n }\r\n })\r\n}\r\n\r\nfunction packageDir (...s) {\r\n const packageRoot = path.resolve(__dirname, '..', '..')\r\n return path.join(packageRoot, ...s)\r\n}\r\n\r\nexport const script = (...s) => packageDir('script', ...s)\r\n\r\nexport function getPathFromTreeView (el) {\r\n // invoked from tree-view context menu\r\n let pathEl = el.closest('[data-path]')\r\n if (!pathEl) {\r\n // invoked from command with focusing on tree-view\r\n const activeEl = el.querySelector('.tree-view .selected')\r\n if (activeEl) pathEl = activeEl.querySelector('[data-path]')\r\n }\r\n if (pathEl) return pathEl.dataset.path\r\n return null\r\n}\r\n\r\nexport function getDirPathFromTreeView (el) {\r\n // invoked from tree-view context menu\r\n let dirEl = el.closest('.directory')\r\n if (!dirEl) {\r\n // invoked from command with focusing on tree-view\r\n const activeEl = el.querySelector('.tree-view .selected')\r\n if (activeEl) dirEl = activeEl.closest('.directory')\r\n }\r\n if (dirEl) {\r\n const pathEl = dirEl.querySelector('[data-path]')\r\n if (pathEl) return pathEl.dataset.path\r\n }\r\n return null\r\n}\r\n\r\nexport const readCode = (path) => fs.readFileSync(path, 'utf-8')\r\n","/** @babel */\r\n\r\nimport { Point, Range } from 'atom'\r\n\r\nexport const wordRegex = /[\\u00A0-\\uFFFF\\w_!´\\.]*@?[\\u00A0-\\uFFFF\\w_!´]+/\r\n\r\n/**\r\n * Takes an `editor` and gets the word at current cursor position. If that is nonempty, call\r\n * function `fn` with arguments `word` and `range`.\r\n */\r\nexport function withWord (editor, fn) {\r\n const { word, range } = getWordAndRange(editor)\r\n // If we only find numbers or nothing, return prematurely\r\n if (!isValidWordToInspect(word)) return\r\n fn(word, range)\r\n}\r\n\r\n/**\r\n * Returns the word and its range in the `editor`.\r\n *\r\n * `options`\r\n * - `bufferPosition` {Point}: If given returns the word at the `bufferPosition`, returns the word at the current cursor otherwise.\r\n * - `wordRegex` {RegExp} : A RegExp indicating what constitutes a “word” (default: `wordRegex`).\r\n */\r\nexport function getWordAndRange (editor, options = {\r\n bufferPosition: undefined,\r\n wordRegex: wordRegex\r\n}) {\r\n // @TODO?:\r\n // The following lines are kinda iffy: The regex may or may not be well chosen\r\n // and it duplicates the efforts from atom-language-julia.\r\n // It might be better to select the current word via finding the smallest \r\n // containing the bufferPosition/cursor which also has `function` or `macro` as its class.\r\n const bufferPosition = options.bufferPosition ?\r\n options.bufferPosition :\r\n editor.getLastCursor().getBufferPosition()\r\n const range = getWordRangeAtBufferPosition(editor, bufferPosition, {\r\n wordRegex: options.wordRegex ? options.wordRegex : wordRegex\r\n })\r\n const word = editor.getTextInBufferRange(range)\r\n return { word, range }\r\n}\r\n\r\n/**\r\n * Returns the range of a word containing the `bufferPosition` in `editor`.\r\n *\r\n * `options`\r\n * - `wordRegex` {RegExp}: A RegExp indicating what constitutes a “word” (default: `wordRegex`).\r\n */\r\nexport function getWordRangeAtBufferPosition (editor, bufferPosition, options = {\r\n wordRegex: wordRegex\r\n}) {\r\n // adapted from https://github.com/atom/atom/blob/v1.38.2/src/cursor.js#L606-L616\r\n const { row, column } = bufferPosition\r\n const ranges = editor.getBuffer().findAllInRangeSync(\r\n options.wordRegex ? options.wordRegex : wordRegex,\r\n new Range(new Point(row, 0), new Point(row, Infinity))\r\n )\r\n const range = ranges.find(range =>\r\n range.end.column >= column && range.start.column <= column\r\n )\r\n return range ? Range.fromObject(range) : new Range(bufferPosition, bufferPosition)\r\n}\r\n\r\n/**\r\n * Examples: `|` represents `bufferPosition`:\r\n * - `\"he|ad.word.foot\"` => `Range` of `\"head\"`\r\n * - `\"head|.word.foot\"` => `Range` of `\"head\"`\r\n * - `\"head.|word.foot\"` => `Range` of `\"head.word\"`\r\n * - `\"head.word.fo|ot\"` => `Range` of `\"head.word.field\"`\r\n */\r\nexport function getWordRangeWithoutTrailingDots (word, range, bufferPosition) {\r\n const { start } = range\r\n const { column: startColumn } = start\r\n const { row: endRow } = range.end\r\n let endColumn = startColumn\r\n\r\n const { column } = bufferPosition\r\n\r\n const elements = word.split('.')\r\n for (const element of elements) {\r\n endColumn += element.length\r\n if (column <= endColumn) {\r\n break\r\n } else {\r\n endColumn += 1\r\n }\r\n }\r\n\r\n const end = new Point(endRow, endColumn)\r\n return new Range(start, end)\r\n}\r\n\r\n/**\r\n * Returns `true` if `word` is valid word to be inspected.\r\n */\r\nexport function isValidWordToInspect (word) {\r\n return word.length > 0 && isNaN(word)\r\n}\r\n","\r\n\r\nexport function getColors(selectors) {\r\n let grammar = atom.grammars.grammarForScopeName(\"source.julia\")\r\n\r\n let styled = {}\r\n let color = {}\r\n let div = document.createElement('div')\r\n div.classList.add('editor', 'editor-colors', 'julia-syntax-color-selector')\r\n\r\n for (let style in selectors) {\r\n let child = document.createElement('span')\r\n child.innerText = 'foo'\r\n child.classList.add(...selectors[style])\r\n div.appendChild(child)\r\n styled[style] = child\r\n }\r\n\r\n document.body.appendChild(div)\r\n // wait till rendered?\r\n for (let style in selectors) {\r\n try {\r\n color[style] = rgb2hex(window.getComputedStyle(styled[style])['color'])\r\n } catch (e) {\r\n console.error(e)\r\n }\r\n }\r\n color['background'] = rgb2hex(window.getComputedStyle(div)['backgroundColor'])\r\n document.body.removeChild(div)\r\n\r\n return color\r\n}\r\n\r\nfunction rgb2hex(rgb) {\r\n if (rgb.search(\"rgb\") == -1) {\r\n return rgb\r\n } else {\r\n rgb = rgb.match(/^rgba?\\((\\d+),\\s*(\\d+),\\s*(\\d+)(?:,\\s*(\\d+))?\\)$/)\r\n function hex(x) {\r\n return (\"0\" + parseInt(x).toString(16)).slice(-2);\r\n }\r\n return hex(rgb[1]) + hex(rgb[2]) + hex(rgb[3]);\r\n }\r\n}\r\n","Loading = null\r\nlwaits = []\r\nwithLoading = (f) -> if Loading? then f() else lwaits.push f\r\n\r\n{bufferLines} = require '../misc'\r\n\r\nmodule.exports =\r\nclass IPC\r\n\r\n @consumeInk: (ink) ->\r\n Loading = ink.Loading\r\n f() for f in lwaits\r\n\r\n constructor: (stream) ->\r\n withLoading =>\r\n @loading = new Loading\r\n @handlers = {}\r\n @callbacks = {}\r\n @queue = []\r\n @id = 0\r\n\r\n if stream? then @setStream stream\r\n\r\n @handle\r\n cb: (id, result) =>\r\n @callbacks[id]?.resolve result\r\n delete @callbacks[id]\r\n\r\n cancelCallback: (id, e) =>\r\n @callbacks[id].reject e\r\n\r\n handle: (type, f) ->\r\n if f?\r\n @handlers[type] = f\r\n else\r\n @handle t, f for t, f of type\r\n\r\n writeMsg: -> throw new Error 'msg not implemented'\r\n\r\n msg: (type, args...) -> @writeMsg [type, args...]\r\n\r\n rpc: (type, args...) ->\r\n p = new Promise (resolve, reject) =>\r\n @id += 1\r\n @callbacks[@id] = {resolve, reject}\r\n @msg {type, callback: @id}, args...\r\n @loading?.monitor p\r\n\r\n flush: ->\r\n @writeMsg msg for msg in @queue\r\n @queue = []\r\n\r\n reset: ->\r\n @loading?.reset()\r\n @queue = []\r\n cb.reject 'disconnected' for id, cb of @callbacks\r\n @callbacks = {}\r\n\r\n input: ([type, args...]) ->\r\n if type.constructor == Object\r\n {type, callback} = type\r\n if @handlers.hasOwnProperty type\r\n result = Promise.resolve().then => @handlers[type] args...\r\n if callback\r\n result\r\n .then (result) => @msg 'cb', callback, result\r\n .catch (err) =>\r\n console.error(err)\r\n @msg 'cancelCallback', callback, @errJson err\r\n else\r\n console.log \"julia-client: unrecognised message #{type}\", args\r\n\r\n import: (fs, rpc = true, mod = {}) ->\r\n return unless fs?\r\n if fs.constructor == String then return @import([fs], rpc, mod)[fs]\r\n if fs.rpc? or fs.msg?\r\n mod = {}\r\n @import fs.rpc, true, mod\r\n @import fs.msg, false, mod\r\n else\r\n fs.forEach (f) =>\r\n mod[f] = (args...) =>\r\n if rpc then @rpc f, args... else @msg f, args...\r\n mod\r\n\r\n isWorking: -> @loading?.isWorking()\r\n onWorking: (f) -> @loading?.onWorking f\r\n onDone: (f) -> @loading?.onDone f\r\n onceDone: (f) -> @loading?.onceDone f\r\n\r\n errJson: (obj) ->\r\n return unless obj instanceof Error\r\n {type: 'error', message: obj.message, stack: obj.stack}\r\n\r\n readStream: (s) ->\r\n s.on 'data', cb = bufferLines (m) => if m then @input JSON.parse m\r\n @unreadStream = -> s.removeListener 'data', cb\r\n\r\n writeStream: (s) ->\r\n @writeMsg = (m) ->\r\n s.write JSON.stringify m\r\n s.write '\\n'\r\n\r\n setStream: (@stream) ->\r\n @readStream @stream\r\n @writeStream @stream\r\n @stream.on 'end', => @reset()\r\n","{debounce} = require 'underscore-plus'\r\n\r\nmodule.exports =\r\n paths: require './misc/paths'\r\n blocks: require './misc/blocks'\r\n cells: require './misc/cells'\r\n words: require './misc/words'\r\n weave: require './misc/weave'\r\n colors: require './misc/colors'\r\n scopes: require './misc/scopes'\r\n\r\n bufferLines: (t, f) ->\r\n if not f? then [t, f] = [null, t]\r\n buffer = ['']\r\n flush = if not t? then -> else debounce (->\r\n if buffer[0] isnt ''\r\n f buffer[0], false\r\n buffer[0] = ''), t\r\n (data) ->\r\n lines = data.toString().split '\\n'\r\n buffer[0] += lines.shift()\r\n buffer.push lines...\r\n while buffer.length > 1\r\n f buffer.shift(), true\r\n flush()\r\n\r\n time: (desc, p) ->\r\n s = -> new Date().getTime()/1000\r\n t = s()\r\n p.then -> console.log \"#{desc}: #{(s()-t).toFixed(2)}s\"\r\n .catch ->\r\n p\r\n\r\n hook: (obj, method, f) ->\r\n souper = obj[method].bind obj\r\n obj[method] = (a...) -> f souper, a...\r\n\r\n once: (f) ->\r\n done = false\r\n (args...) ->\r\n return if done\r\n done = true\r\n f.call @, args...\r\n\r\n mutex: ->\r\n wait = Promise.resolve()\r\n (f) ->\r\n current = wait\r\n release = null\r\n wait = new Promise((resolve) -> release = resolve).catch ->\r\n current.then => f.call @, release\r\n\r\n exclusive: (f) ->\r\n lock = module.exports.mutex()\r\n (args...) ->\r\n lock (release) =>\r\n result = f.call @, args...\r\n release result\r\n result\r\n\r\n # takes a time period in seconds and formats it as hh:mm:ss\r\n formatTimePeriod: (dt) ->\r\n return unless dt > 1\r\n h = Math.floor dt/(60*60)\r\n m = Math.floor (dt -= h*60*60)/60\r\n s = Math.round (dt - m*60)\r\n parts = [h, m, s]\r\n for i, dt of parts\r\n parts[i] = if dt < 10 then \"0#{dt}\" else \"#{dt}\"\r\n parts.join ':'\r\n","{throttle} = require 'underscore-plus'\r\n{Emitter} = require 'atom'\r\n\r\nIPC = require './ipc'\r\n\r\nmodule.exports =\r\n\r\n # Connection logic injects a connection via `attach`.\r\n ## Required interface:\r\n # .message(json)\r\n ## Optional interface:\r\n # .stdin(data)\r\n # .interrupt()\r\n # .kill()\r\n\r\n # Messaging\r\n\r\n ipc: new IPC\r\n\r\n handle: (a...) -> @ipc.handle a...\r\n input: (m) -> @ipc.input m\r\n readStream: (s) -> @ipc.readStream s\r\n import: (a...) -> @ipc.import a...\r\n\r\n activate: ->\r\n\r\n @emitter = new Emitter\r\n\r\n @bootMode = atom.config.get('julia-client.juliaOptions.bootMode')\r\n\r\n @ipc.writeMsg = (msg) =>\r\n if @isActive() and @conn.ready?() isnt false\r\n @conn.message msg\r\n else\r\n @ipc.queue.push msg\r\n\r\n @handle 'error', (options) =>\r\n if atom.config.get 'julia-client.uiOptions.errorNotifications'\r\n atom.notifications.addError options.msg, options\r\n console.error options.detail\r\n atom.beep()\r\n\r\n plotpane = null\r\n\r\n @onAttached =>\r\n args = atom.config.get 'julia-client.juliaOptions.arguments'\r\n @import('connected')()\r\n if args.length > 0\r\n @import('args') args\r\n\r\n plotpane = atom.config.observe 'julia-client.uiOptions.usePlotPane', (use) =>\r\n @import('enableplotpane')(use)\r\n\r\n @onDetached =>\r\n plotpane?.dispose()\r\n\r\n @onBoot (proc) =>\r\n @remoteConfig = proc.config\r\n\r\n setBootMode: (@bootMode) ->\r\n\r\n editorPath: (ed) ->\r\n if not ed? then return ed\r\n if @bootMode is 'Remote' and @remoteConfig?\r\n path = ed.getPath()\r\n if not path? then return path\r\n ind = path.indexOf(@remoteConfig.host)\r\n if ind > -1\r\n path = path.slice(ind + @remoteConfig.host.length, path.length)\r\n path = path.replace(/\\\\/g, '/')\r\n return path\r\n else\r\n return path\r\n else\r\n return ed.getPath()\r\n\r\n deactivate: ->\r\n @emitter.dispose()\r\n if @isActive() then @detach()\r\n\r\n # Basic handlers (communication through stderr)\r\n\r\n basicHandlers: {}\r\n\r\n basicHandler: (s) ->\r\n if (match = s.toString().match /juno-msg-(.*)/)\r\n @basicHandlers[match[1]]?()\r\n true\r\n\r\n handleBasic: (msg, f) -> @basicHandlers[msg] = f\r\n\r\n # Connecting & Booting\r\n\r\n emitter: new Emitter\r\n\r\n onAttached: (cb) -> @emitter.on 'attached', cb\r\n onDetached: (cb) -> @emitter.on 'detached', cb\r\n\r\n onceAttached: (cb) ->\r\n f = @onAttached (args...) ->\r\n f.dispose()\r\n cb.call this, args...\r\n\r\n isActive: -> @conn?\r\n\r\n attach: (@conn) ->\r\n @flush() unless @conn.ready?() is false\r\n @emitter.emit 'attached'\r\n\r\n detach: ->\r\n delete @conn\r\n @ipc.reset()\r\n @emitter.emit 'detached'\r\n\r\n flush: -> @ipc.flush()\r\n\r\n isWorking: -> @ipc.isWorking()\r\n onWorking: (f) -> @ipc.onWorking f\r\n onDone: (f) -> @ipc.onDone f\r\n onceDone: (f) -> @ipc.onceDone f\r\n\r\n # Management & UI\r\n\r\n onStdout: (f) -> @emitter.on 'stdout', f\r\n onStderr: (f) -> @emitter.on 'stderr', f\r\n onInfo: (f) -> @emitter.on 'info', f\r\n onBoot: (f) -> @emitter.on 'boot', f\r\n stdout: (data) -> @emitter.emit 'stdout', data\r\n stderr: (data) -> @emitter.emit 'stderr', data unless @basicHandler data\r\n info: (data) -> @emitter.emit 'info', data\r\n\r\n clientCall: (name, f, args...) ->\r\n if not @conn[f]?\r\n atom.notifications.addError \"This client doesn't support #{name}.\"\r\n else\r\n @conn[f].call @conn, args...\r\n\r\n stdin: (data) -> @clientCall 'STDIN', 'stdin', data\r\n\r\n interrupt: ->\r\n if @isActive()\r\n @clientCall 'interrupts', 'interrupt'\r\n\r\n disconnect: ->\r\n if @isActive()\r\n @clientCall 'disconnecting', 'disconnect'\r\n\r\n kill: ->\r\n if @isActive()\r\n if not @isWorking()\r\n @import('exit')().catch ->\r\n else\r\n @clientCall 'kill', 'kill'\r\n else\r\n @ipc.reset()\r\n\r\n clargs: ->\r\n {precompiled, optimisationLevel, deprecationWarnings} =\r\n atom.config.get 'julia-client.juliaOptions'\r\n as = []\r\n as.push \"--depwarn=#{if deprecationWarnings then 'yes' else 'no'}\"\r\n as.push \"-O#{optimisationLevel}\" unless optimisationLevel is 2\r\n as.push \"--color=yes\"\r\n as.push \"-i\"\r\n startupArgs = atom.config.get 'julia-client.juliaOptions.startupArguments'\r\n if startupArgs.length > 0\r\n as = as.concat startupArgs\r\n as = as.map (arg) => arg.trim()\r\n as = as.filter (arg) => arg.length > 0\r\n as\r\n\r\n connectedError: (action = 'do that') ->\r\n if @isActive()\r\n atom.notifications.addError \"Can't #{action} with a Julia client running.\",\r\n description: \"Stop the current client with `Packages -> Juno -> Stop Julia`.\"\r\n true\r\n else\r\n false\r\n\r\n notConnectedError: (action = 'do that') ->\r\n if not @isActive()\r\n atom.notifications.addError \"Can't #{action} without a Julia client running.\",\r\n description: \"Start a client with `Packages -> Juno -> Start Julia`.\"\r\n true\r\n else\r\n false\r\n\r\n require: (a, f) ->\r\n f ? [a, f] = [null, a]\r\n @notConnectedError(a) or f()\r\n\r\n disrequire: (a, f) ->\r\n f ? [a, f] = [null, a]\r\n @connectedError(a) or f()\r\n\r\n withCurrent: (f) ->\r\n current = @conn\r\n (a...) =>\r\n return unless current is @conn\r\n f(a...)\r\n","net = require 'net'\r\nclient = require '../client'\r\n\r\nmodule.exports =\r\n server: null\r\n port: null\r\n\r\n listeners: []\r\n\r\n next: ->\r\n conn = new Promise (resolve) =>\r\n @listeners.push resolve\r\n conn.dispose = =>\r\n @listeners = @listeners.filter (x) -> x is conn\r\n conn\r\n\r\n connect: (sock) ->\r\n message = (m) -> sock.write JSON.stringify m\r\n client.readStream sock\r\n sock.on 'end', -> client.detach()\r\n sock.on 'error', -> client.detach()\r\n client.attach {message}\r\n\r\n handle: (sock) ->\r\n if @listeners.length > 0\r\n @listeners.shift()(sock)\r\n else if not client.isActive()\r\n @connect sock\r\n else\r\n sock.end()\r\n\r\n listen: ->\r\n return Promise.resolve(@port) if @port?\r\n new Promise (resolve, reject) =>\r\n externalPort = atom.config.get('julia-client.juliaOptions.externalProcessPort')\r\n if externalPort == 'random'\r\n port = 0\r\n else\r\n port = parseInt(externalPort)\r\n @server = net.createServer((sock) => @handle(sock))\r\n @server.on 'error', (err) =>\r\n if err.code == 'EADDRINUSE'\r\n details = ''\r\n if port != 0\r\n details = 'Please change to another port in the settings and try again.'\r\n atom.notifications.addError \"Julia could not be started.\",\r\n description: \"\"\"\r\n Port `#{port}` is already in use.\r\n\r\n \"\"\" + if details isnt ''\r\n \"\"\"\r\n #{details}\r\n \"\"\"\r\n else\r\n \"Please try again or set a fixed port that you know is unused.\"\r\n dismissable: true\r\n reject(err)\r\n @server.listen port, '127.0.0.1', =>\r\n @port = @server.address().port\r\n resolve(@port)\r\n","child_process = require 'child_process'\r\nnet = require 'net'\r\n\r\ntcp = require './process/tcp'\r\nclient = require './client'\r\n{paths} = require '../misc'\r\n\r\ndisrequireClient = (a, f) -> client.disrequire a, f\r\n\r\nmodule.exports =\r\n\r\n escpath: (p) -> '\"' + p + '\"'\r\n escape: (sh) -> sh.replace(/\"/g, '\\\\\"')\r\n\r\n exec: (sh) ->\r\n child_process.exec sh, (err, stdout, stderr) ->\r\n if err?\r\n console.log err\r\n\r\n term: (sh) ->\r\n switch process.platform\r\n when \"darwin\"\r\n @exec \"osascript -e 'tell application \\\"Terminal\\\" to activate'\"\r\n @exec \"osascript -e 'tell application \\\"Terminal\\\" to do script \\\"#{@escape(sh)}\\\"'\"\r\n when \"win32\"\r\n @exec \"#{@terminal()} \\\"#{sh}\\\"\"\r\n else\r\n @exec \"#{@terminal()} \\\"#{@escape(sh)}\\\"\"\r\n\r\n terminal: -> atom.config.get(\"julia-client.consoleOptions.terminal\")\r\n\r\n defaultShell: ->\r\n sh = process.env[\"SHELL\"]\r\n if sh?\r\n sh\r\n else if process.platform == 'win32'\r\n 'powershell.exe'\r\n else\r\n 'bash'\r\n\r\n defaultTerminal: ->\r\n if process.platform == 'win32'\r\n 'cmd /C start cmd /C'\r\n else\r\n 'x-terminal-emulator -e'\r\n\r\n repl: -> @term \"#{@escpath paths.jlpath()}\"\r\n\r\n connectCommand: ->\r\n tcp.listen().then (port) =>\r\n \"#{@escpath paths.jlpath()} #{client.clargs().join(' ')} #{paths.script('boot_repl.jl')} #{port}\"\r\n\r\n connectedRepl: -> @connectCommand().then (cmd) => @term cmd\r\n","client = require './client'\r\ntcp = require './process/tcp'\r\n\r\nmodule.exports =\r\n activate: ->\r\n\r\n client.handleBasic 'install', =>\r\n @note?.dismiss()\r\n atom.notifications.addError \"Error installing Atom.jl package\",\r\n description:\r\n \"\"\"\r\n Go to the `Packages -> Juno -> Open REPL` menu and\r\n run `Pkg.add(\"Atom\")` in Julia, then try again.\r\n If you still see an issue, please report it to:\r\n\r\n https://discourse.julialang.org/\r\n \"\"\"\r\n dismissable: true\r\n\r\n client.handleBasic 'load', =>\r\n @note?.dismiss()\r\n atom.notifications.addError \"Error loading Atom.jl package\",\r\n description:\r\n \"\"\"\r\n Go to the `Packages -> Juno -> Open REPL` menu and\r\n run `Pkg.update()` in Julia, then try again.\r\n If you still see an issue, please report it to:\r\n\r\n https://discourse.julialang.org/\r\n \"\"\"\r\n dismissable: true\r\n\r\n client.handleBasic 'installing', =>\r\n @note?.dismiss()\r\n @note = atom.notifications.addInfo \"Installing Julia packages...\",\r\n description:\r\n \"\"\"\r\n Julia's first run will take a couple of minutes.\r\n See the REPL below for progress.\r\n \"\"\"\r\n dismissable: true\r\n @openConsole()\r\n\r\n client.handleBasic 'precompiling', =>\r\n @note?.dismiss()\r\n @note = atom.notifications.addInfo \"Compiling Julia packages...\",\r\n description:\r\n \"\"\"\r\n Julia's first run will take a couple of minutes.\r\n See the REPL below for progress.\r\n \"\"\"\r\n dismissable: true\r\n @openConsole()\r\n\r\n client.handle welcome: =>\r\n @note?.dismiss()\r\n atom.notifications.addSuccess \"Welcome to Juno!\",\r\n description:\r\n \"\"\"\r\n Success! Juno is set up and ready to roll.\r\n Try entering `2+2` in the REPL below.\r\n \"\"\"\r\n dismissable: true\r\n @openConsole()\r\n\r\n openConsole: ->\r\n atom.commands.dispatch atom.views.getView(atom.workspace),\r\n 'julia-client:open-REPL'\r\n\r\n jlNotFound: (path, details = '') ->\r\n atom.notifications.addError \"Julia could not be started.\",\r\n description:\r\n \"\"\"\r\n We tried to launch Julia from: `#{path}`\r\n This path can be changed in the settings.\r\n \"\"\"\r\n detail: details\r\n dismissable: true\r\n\r\n connectExternal: ->\r\n tcp.listen().then (port) ->\r\n code = \"using Atom; using Juno; Juno.connect(#{port})\"\r\n msg = atom.notifications.addInfo \"Connect an external process\",\r\n description:\r\n \"\"\"\r\n To connect a Julia process running in the terminal, run the command:\r\n\r\n #{code}\r\n \"\"\"\r\n dismissable: true\r\n buttons: [{text: 'Copy', onDidClick: -> atom.clipboard.write code}]\r\n client.onceAttached ->\r\n if not msg.isDismissed()\r\n msg.dismiss()\r\n atom.notifications.addSuccess \"Julia is connected.\"\r\n","\r\n\r\nimport tcp from './tcp'\r\nimport * as pty from 'node-pty-prebuilt-multiarch'\r\nimport net from 'net'\r\nimport { paths, mutex } from '../../misc'\r\nimport { jlNotFound } from '../messages'\r\n\r\nexport var lock = mutex()\r\n\r\nexport function get (path, args) {\r\n return lock((release) => {\r\n let p = get_(path, args)\r\n p.catch((err) => {\r\n release()\r\n })\r\n release(p.then(({socket}) => socket))\r\n return p\r\n })\r\n}\r\n\r\nexport function get_ (path, args) {\r\n const env = customEnv()\r\n return getProcess(path, args, env)\r\n}\r\n\r\nexport function customEnv (env = process.env) {\r\n let confnt = atom.config.get('julia-client.juliaOptions.numberOfThreads')\r\n let confntInt = parseInt(confnt)\r\n\r\n if (confnt == 'auto') {\r\n env.JULIA_NUM_THREADS = require('physical-cpu-count')\r\n } else if (confntInt != 0 && isFinite(confntInt)) {\r\n env.JULIA_NUM_THREADS = confntInt\r\n }\r\n\r\n if (atom.config.get('julia-client.disableProxy')) {\r\n delete env.HTTP_PROXY\r\n delete env.HTTPS_PROXY\r\n delete env.http_proxy\r\n delete env.https_proxy\r\n }\r\n\r\n return env\r\n}\r\n\r\nfunction getProcess (path, args, env) {\r\n return new Promise((resolve, reject) => {\r\n tcp.listen().then((port) => {\r\n paths.fullPath(path).then((path) => {\r\n paths.projectDir().then((cwd) => {\r\n // space before port needed for pty.js on windows:\r\n let ty = pty.spawn(path, [...args, paths.script('boot_repl.jl'), ` ${port}`], {\r\n cols: 100,\r\n rows: 30,\r\n env: env,\r\n cwd: cwd,\r\n useConpty: true,\r\n handleFlowControl: true\r\n })\r\n\r\n let sock = socket(ty)\r\n\r\n sock.catch((err) => {\r\n reject(err)\r\n })\r\n\r\n // catch errors when interacting with ty, just to be safe (errors might crash Atom)\r\n let proc = {\r\n ty: ty,\r\n kill: () => {\r\n // only kill pty if it's still alive:\r\n if (ty._readable || ty._writable) {\r\n try {\r\n ty.kill()\r\n } catch (err) {\r\n console.log('Terminal:')\r\n console.log(err);\r\n }\r\n }\r\n },\r\n interrupt: () => {\r\n try {\r\n ty.write('\\x03')\r\n } catch (err) {\r\n console.log('Terminal:')\r\n console.log(err);\r\n }\r\n },\r\n socket: sock,\r\n onExit: (f) => {\r\n try {\r\n ty.on('exit', f)\r\n } catch (err) {\r\n console.log('Terminal:')\r\n console.log(err);\r\n }\r\n },\r\n onStderr: (f) => {},\r\n onStdout: (f) => {\r\n try {\r\n ty.on('data', f)\r\n } catch (err) {\r\n console.log('Terminal:')\r\n console.log(err);\r\n }\r\n }\r\n }\r\n\r\n resolve(proc)\r\n }).catch((err) => {\r\n reject(err)\r\n })\r\n }).catch((err) => {\r\n jlNotFound(path, err)\r\n reject(err)\r\n })\r\n }).catch((err) => {\r\n reject(err)\r\n })\r\n })\r\n}\r\n\r\nfunction socket (ty) {\r\n conn = tcp.next()\r\n failure = new Promise((resolve, reject) => {\r\n ty.on('exit', (err) => {\r\n conn.dispose()\r\n reject(err)\r\n })\r\n })\r\n return Promise.race([conn, failure])\r\n}\r\n","{isEqual} = require 'underscore-plus'\r\nhash = require 'object-hash'\r\nbasic = require './basic'\r\n\r\nIPC = require '../ipc'\r\n\r\nmodule.exports =\r\n provider: ->\r\n basic\r\n\r\n cacheLength: 1\r\n\r\n procs: {}\r\n\r\n key: (path, args) -> hash([path, args...].join(' ').trim())\r\n\r\n cache: (path, args) -> @procs[@key(path, args)] ?= []\r\n\r\n removeFromCache: (path, args, obj) ->\r\n key = @key path, args\r\n @procs[key] = @procs[key].filter (x) -> x != obj\r\n\r\n toCache: (path, args, proc) ->\r\n proc.cached = true\r\n @cache(path, args).push proc\r\n\r\n fromCache: (path, args) ->\r\n ps = @cache path, args\r\n p = ps.shift()\r\n return unless p?\r\n p.cached = false\r\n p.init.then =>\r\n @start path, args\r\n p.proc\r\n\r\n start: (path, args) ->\r\n allArgs = [args, atom.config.get('julia-client.juliaOptions')]\r\n @provider().lock (release) =>\r\n if @cache(path, allArgs).length < @cacheLength\r\n p = @provider().get_(path, args).then (proc) =>\r\n obj = {path, allArgs, proc: proc}\r\n @monitor proc\r\n @warmup obj\r\n @toCache path, allArgs, obj\r\n proc.socket\r\n .then => @start path, allArgs\r\n .catch (e) => @removeFromCache path, allArgs, obj\r\n release proc.socket\r\n p.catch (err) =>\r\n release()\r\n else\r\n release()\r\n return\r\n\r\n flush: (events, out, err) ->\r\n for {type, data} in events\r\n (if type == 'stdout' then out else err) data\r\n\r\n monitor: (proc) ->\r\n proc.events = []\r\n proc.wasCached = true\r\n proc.onStdout (data) -> proc.events?.push {type: 'stdout', data}\r\n proc.onStderr (data) -> proc.events?.push {type: 'stderr', data}\r\n proc.flush = (out, err) =>\r\n @flush proc.events, out, err\r\n delete proc.events\r\n\r\n boot: (ipc) -> ipc.rpc 'ping'\r\n repl: (ipc) -> ipc.rpc 'changemodule', {mod: 'Main'}\r\n\r\n warmup: (obj) ->\r\n obj.init = Promise.resolve()\r\n obj.proc.socket\r\n .then (sock) =>\r\n return unless obj.cached\r\n ipc = new IPC sock\r\n [@boot, @repl].forEach (f) ->\r\n obj.init = obj.init.then ->\r\n if obj.cached then f ipc\r\n obj.init = obj.init\r\n .catch (err) -> console.warn 'julia warmup error:', err\r\n .then -> ipc.unreadStream()\r\n return\r\n .catch ->\r\n\r\n get: (path, args) ->\r\n allArgs = [args, atom.config.get('julia-client.juliaOptions')]\r\n if (proc = @fromCache path, allArgs) then p = proc\r\n else p = @provider().get path, args\r\n @start path, args\r\n p\r\n\r\n reset: ->\r\n for key, ps of @procs\r\n for p in ps\r\n p.proc.kill()\r\n","\r\n\r\nimport tcp from './tcp'\r\nimport net from 'net'\r\nimport { paths, mutex } from '../../misc'\r\nimport * as ssh from 'ssh2'\r\nimport fs from 'fs'\r\n\r\nexport var lock = mutex()\r\n\r\nlet getRemoteConf = undefined\r\nlet getRemoteName = undefined\r\nlet serversettings = {}\r\nlet currentServer = undefined\r\n\r\nexport function get (path, args) {\r\n return lock((release) => {\r\n let p = get_(path, args)\r\n release(p.then(({socket}) => socket))\r\n p.catch(() => release())\r\n return p\r\n })\r\n}\r\n\r\nfunction getConnectionSettings () {\r\n return new Promise((resolve, reject) => {\r\n if (getRemoteConf) {\r\n let conf = getRemoteConf('Juno requests access to your server configuration to open a terminal.')\r\n conf.then(conf => resolve(conf)).catch(reason => reject(reason))\r\n } else {\r\n reject('nopackage')\r\n }\r\n })\r\n}\r\n\r\nexport function withRemoteConfig (f) {\r\n return new Promise((resolve, reject) => {\r\n if (getRemoteName === undefined) {\r\n reject()\r\n } else {\r\n getRemoteName().then(name => {\r\n name = name.toString()\r\n let cachedSettings = serversettings[name]\r\n if (cachedSettings) {\r\n resolve(f(maybe_add_agent(cachedSettings)))\r\n } else {\r\n getConnectionSettings().then(conf => {\r\n serversettings[name] = conf\r\n resolve(f(maybe_add_agent(conf)))\r\n }).catch(reason => {\r\n showRemoteError(reason)\r\n reject()\r\n })\r\n }\r\n }).catch(reason => {\r\n showRemoteError(reason)\r\n reject()\r\n })\r\n }\r\n })\r\n}\r\n\r\nfunction maybe_add_agent (conf) {\r\n if (conf && atom.config.get('julia-client.remoteOptions.agentAuth')) {\r\n let sshsock = ssh_socket()\r\n if (!conf.agent && sshsock) {\r\n conf.agent = sshsock\r\n }\r\n if (!conf.agentForward) {\r\n conf.agentForward = atom.config.get('julia-client.remoteOptions.forwardAgent')\r\n }\r\n }\r\n return conf\r\n}\r\n\r\nfunction ssh_socket () {\r\n let sock = process.env['SSH_AUTH_SOCK']\r\n if (sock) {\r\n return sock\r\n } else {\r\n if (process.platform == 'win32') {\r\n return 'pageant'\r\n } else {\r\n return ''\r\n }\r\n }\r\n}\r\n\r\nconst storageKey = 'juno_remote_server_exec_key'\r\n\r\nfunction setRemoteExec (server, command) {\r\n let store = getRemoteStore()\r\n store[server] = command\r\n setRemoteStore(store)\r\n}\r\n\r\nfunction getRemoteExec (server) {\r\n let store = getRemoteStore()\r\n return store[server]\r\n}\r\n\r\nfunction setRemoteStore (store) {\r\n localStorage[storageKey] = JSON.stringify(store)\r\n}\r\n\r\nfunction getRemoteStore () {\r\n let store = localStorage[storageKey]\r\n if (store == undefined) {\r\n store = []\r\n } else {\r\n store = JSON.parse(store)\r\n }\r\n return store\r\n}\r\n\r\nfunction showRemoteError (reason) {\r\n if (reason == 'nopackage') {\r\n atom.notifications.addInfo('ftp-remote-edit not installed')\r\n } else if (reason == 'noservers') {\r\n let notif = atom.notifications.addInfo('Please select a project', {\r\n description: `Connect to a server in the ftp-remote-edit tree view.`,\r\n dismissable: true,\r\n buttons: [\r\n {\r\n text: 'Toggle Remote Tree View',\r\n onDidClick: () => {\r\n let edview = atom.views.getView(atom.workspace)\r\n atom.commands.dispatch(edview, 'ftp-remote-edit:toggle')\r\n notif.dismiss()\r\n }\r\n }\r\n ]\r\n })\r\n } else {\r\n atom.notifications.addError('Remote Connection Failed', {\r\n details: `Unknown Error: \\n\\n ${reason}`\r\n })\r\n }\r\n}\r\n\r\nexport function consumeGetServerConfig (getconf) {\r\n getRemoteConf = getconf\r\n}\r\n\r\nexport function consumeGetServerName (name) {\r\n getRemoteName = name\r\n}\r\n\r\nexport function get_ (path, args) {\r\n return withRemoteConfig(conf => {\r\n let execs = getRemoteExec(conf.name)\r\n if (!execs) {\r\n console.log(\"open a dialog and get config here\")\r\n }\r\n return new Promise((resolve, reject) => {\r\n tcp.listen().then((port) => {\r\n let conn = new ssh.Client()\r\n\r\n conn.on('ready', () => {\r\n conn.forwardIn('127.0.0.1', port, err => {\r\n if (err) {\r\n console.error(`Error while forwarding remote connection from ${port}: ${err}`)\r\n atom.notifications.addError(`Port in use`, {\r\n description: `Port ${port} on the remote server already in use.\r\n Try again with another port.`\r\n })\r\n reject()\r\n }\r\n })\r\n let jlpath = atom.config.get('julia-client.remoteOptions.remoteJulia')\r\n\r\n // construct something like\r\n //\r\n // /bin/sh -c 'tmux new -s sessionname '\\'' julia -i -e '\\'\\\\\\'\\''startup_repl'\\'\\\\\\'\\'' '\\''port'\\'' '\\'' '\r\n //\r\n // with properly escaped single quotes.\r\n\r\n let exec = ''\r\n if (atom.config.get('julia-client.remoteOptions.tmux')) {\r\n let sessionName = atom.config.get('julia-client.remoteOptions.tmuxName')\r\n exec += `/bin/sh -c '`\r\n exec += `tmux new -s ${sessionName} '\\\\''`\r\n if (threadCount() !== undefined) {\r\n exec += ` JULIA_NUM_THREADS=\"${threadCount()}\" `\r\n }\r\n exec += jlpath\r\n exec += ` ${args.join(' ')} -e '\\\\'\\\\\\\\\\\\'\\\\''`\r\n // could automatically escape single quotes with `replace(/'/, `'\\\\'\\\\\\\\\\\\'\\\\\\\\\\\\\\\\\\\\\\\\\\\\'\\\\\\\\\\\\'\\\\''`)`,\r\n // but that's so ugly I'd rather not do that\r\n exec += fs.readFileSync(paths.script('boot_repl.jl')).toString()\r\n exec += `'\\\\'\\\\\\\\\\\\'\\\\'' ${port} '\\\\'' `\r\n exec += `|| tmux send-keys -t ${sessionName}.left ^A ^K ^H '\\\\''Juno.connect(${port})'\\\\'' ENTER `\r\n exec += `&& tmux attach -t ${sessionName} `\r\n exec += `'`\r\n } else {\r\n exec += `/bin/sh -c '`\r\n if (threadCount() !== undefined) {\r\n exec += `JULIA_NUM_THREADS=\"${threadCount()}\" `\r\n }\r\n exec += `${jlpath} ${args.join(' ')} -e '\\\\''`\r\n // could automatically escape single quotes with `replace(/'/, `'\\\\'\\\\\\\\\\\\'\\\\''`)`,\r\n // but that's so ugly I'd rather not do that\r\n exec += fs.readFileSync(paths.script('boot_repl.jl')).toString()\r\n exec += `'\\\\'' ${port}`\r\n exec += `'`\r\n }\r\n\r\n conn.exec(exec, { pty: { term: \"xterm-256color\" } }, (err, stream) => {\r\n if (err) console.error(`Error while executing command \\n\\`${exec}\\`\\n on remote server.`)\r\n\r\n stream.on('close', (err) => {\r\n if (err) {\r\n let description = 'We tried to launch Julia '\r\n if (atom.config.get('julia-client.remoteOptions.tmux')) {\r\n description += `in a \\`tmux\\` session named \\`${atom.config.get('julia-client.remoteOptions.tmuxName')}\\` `\r\n }\r\n description += `from \\`${jlpath}\\` but the process failed with \\`${err}\\`.\\n\\n`\r\n description += 'Please make sure your settings are correct.'\r\n atom.notifications.addError(\"Remote Julia session could not be started.\", {\r\n description: description,\r\n dismissable: true\r\n })\r\n }\r\n conn.end()\r\n })\r\n stream.on('error', () => {\r\n conn.end()\r\n })\r\n stream.on('finish', () => {\r\n conn.end()\r\n })\r\n\r\n let sock = socket(stream)\r\n\r\n // forward resize handling\r\n stream.resize = (cols, rows) => stream.setWindow(rows, cols, 999, 999)\r\n let proc = {\r\n ty: stream,\r\n kill: () => stream.signal('KILL'),\r\n disconnect: () => stream.close(),\r\n interrupt: () => stream.write('\\x03'), // signal handling doesn't seem to work :/\r\n socket: sock,\r\n onExit: (f) => stream.on('close', f),\r\n onStderr: (f) => stream.stderr.on('data', data => f(data.toString())),\r\n onStdout: (f) => stream.on('data', data => f(data.toString())),\r\n config: conf\r\n }\r\n resolve(proc)\r\n })\r\n }).on('tcp connection', (info, accept, reject) => {\r\n let stream = accept() // connect to forwarded connection\r\n stream.on('close', () => {\r\n conn.end()\r\n })\r\n stream.on('error', () => {\r\n conn.end()\r\n })\r\n stream.on('finish', () => {\r\n conn.end()\r\n })\r\n // start server that the julia server can connect to\r\n let sock = net.createConnection({ port: port }, () => {\r\n stream.pipe(sock).pipe(stream)\r\n })\r\n sock.on('close', () => {\r\n conn.end()\r\n })\r\n sock.on('error', () => {\r\n conn.end()\r\n })\r\n sock.on('finish', () => {\r\n conn.end()\r\n })\r\n }).connect(conf)\r\n }).catch((err) => {\r\n let description = 'The following error occured when trying to open a tcp '\r\n description += 'connection: '\r\n description += `\\`${err}\\``\r\n atom.notifications.addError(\"Error while connecting to remote Julia session.\", {\r\n description: description,\r\n dismissable: true\r\n })\r\n reject()\r\n })\r\n })\r\n })\r\n}\r\n\r\nfunction threadCount () {\r\n let confnt = atom.config.get('julia-client.juliaOptions.numberOfThreads')\r\n let confntInt = parseInt(confnt)\r\n if (confntInt != 0 && isFinite(confntInt)) {\r\n return confntInt\r\n } else {\r\n return undefined\r\n }\r\n}\r\n\r\nfunction socket (stream) {\r\n conn = tcp.next()\r\n failure = new Promise((resolve, reject) => {\r\n stream.on('close', (err) => {\r\n conn.dispose()\r\n reject(err)\r\n })\r\n })\r\n return Promise.race([conn, failure])\r\n}\r\n","{paths} = require '../misc'\r\nmessages = require './messages'\r\nclient = require './client'\r\n\r\njunorc = client.import 'junorc', false\r\n\r\ncycler = require './process/cycler'\r\nssh = require './process/remote'\r\nbasic = require './process/basic'\r\n\r\nmodule.exports =\r\n consumeGetServerConfig: (getconf) ->\r\n ssh.consumeGetServerConfig(getconf)\r\n\r\n consumeGetServerName: (name) ->\r\n ssh.consumeGetServerName(name)\r\n\r\n provider: (p) ->\r\n bootMode = undefined\r\n if p?\r\n bootMode = p\r\n else\r\n bootMode = atom.config.get('julia-client.juliaOptions.bootMode')\r\n switch bootMode\r\n when 'Cycler' then cycler\r\n when 'Remote' then ssh\r\n when 'Basic' then basic\r\n\r\n activate: ->\r\n if process.platform == 'win32'\r\n process.env.JULIA_EDITOR = \"\\\"#{process.execPath}\\\" #{if atom.devMode then '-d' else ''} -a\"\r\n else\r\n process.env.JULIA_EDITOR = \"atom #{if atom.devMode then '-d' else ''} -a\"\r\n\r\n paths.getVersion()\r\n .then =>\r\n @provider().start? paths.jlpath(), client.clargs()\r\n .catch ->\r\n\r\n monitor: (proc) ->\r\n client.emitter.emit('boot', proc)\r\n proc.ready = -> false\r\n client.attach(proc)\r\n return proc\r\n\r\n connect: (proc, sock) ->\r\n proc.message = (m) -> sock.write JSON.stringify m\r\n client.readStream sock\r\n sock.on 'end', ->\r\n proc.kill()\r\n client.detach()\r\n sock.on 'error', ->\r\n proc.kill()\r\n client.detach()\r\n proc.ready = -> true\r\n client.flush()\r\n proc\r\n\r\n start: (provider) ->\r\n [path, args] = [paths.jlpath(), client.clargs()]\r\n check = paths.getVersion()\r\n\r\n if provider is 'Remote'\r\n check = Promise.resolve()\r\n else\r\n check.catch (err) =>\r\n messages.jlNotFound paths.jlpath(), err\r\n\r\n proc = check\r\n .then => @spawnJulia(path, args, provider)\r\n .then (proc) => @monitor(proc)\r\n\r\n # set working directory here, so we queue this task before anything else\r\n if provider is 'Remote'\r\n ssh.withRemoteConfig((conf) -> junorc conf.remote).catch ->\r\n else\r\n paths.projectDir().then (dir) -> junorc dir\r\n\r\n proc\r\n .then (proc) =>\r\n Promise.all [proc, proc.socket]\r\n .then ([proc, sock]) =>\r\n @connect proc, sock\r\n .catch (e) ->\r\n client.detach()\r\n console.error(\"Julia exited with #{e}.\")\r\n proc\r\n\r\n spawnJulia: (path, args, provider) ->\r\n @provider(provider).get(path, args)\r\n","{time} = require './misc'\r\nexternalTerminal = require './connection/terminal'\r\n\r\nmodule.exports =\r\n IPC: require './connection/ipc'\r\n messages: require './connection/messages'\r\n client: require './connection/client'\r\n local: require './connection/local'\r\n terminal: require './connection/terminal'\r\n\r\n activate: ->\r\n @messages.activate()\r\n @client.activate()\r\n @client.boot = => @boot()\r\n @local.activate()\r\n @booting = false\r\n\r\n deactivate: ->\r\n @client.deactivate()\r\n\r\n consumeInk: (ink) ->\r\n @IPC.consumeInk ink\r\n @ink = ink\r\n\r\n consumeGetServerConfig: (getconf) ->\r\n @local.consumeGetServerConfig(getconf)\r\n\r\n consumeGetServerName: (name) ->\r\n @local.consumeGetServerName(name)\r\n\r\n _boot: (provider) ->\r\n if not @client.isActive() and not @booting\r\n @booting = true\r\n @client.setBootMode(provider)\r\n if provider is 'External Terminal'\r\n p = externalTerminal.connectedRepl()\r\n else\r\n p = @local.start(provider)\r\n\r\n if @ink?\r\n @ink.Opener.allowRemoteFiles(provider == 'Remote')\r\n p.then =>\r\n @booting = false\r\n p.catch =>\r\n @booting = false\r\n time \"Julia Boot\", @client.import('ping')()\r\n\r\n bootRemote: ->\r\n @_boot('Remote')\r\n\r\n boot: ->\r\n @_boot(atom.config.get('julia-client.juliaOptions.bootMode'))\r\n","{terminal} = require '../connection'\r\n\r\nconfig =\r\n juliaPath:\r\n type: 'string'\r\n default: 'julia'\r\n description: 'The location of the Julia binary.'\r\n order: 1\r\n\r\n juliaOptions:\r\n type: 'object'\r\n order: 2\r\n collapsed: true\r\n properties:\r\n bootMode:\r\n title: 'Boot Mode'\r\n type: 'string'\r\n description: '`Basic` spins up a local Julia process on demand and is the most\r\n robust option. The `Cycler` will keep a few local Julia processes\r\n around at all times to reduce downtime when a process exits.\r\n `External Terminal` opens an external terminal and connects it to Juno,\r\n much like the `Julia Client: Connect Terminal` command.\r\n `Remote` is similar to the `Julia Client: Start Remote Julia Process`\r\n command but changes the default, so that evaluating a line\r\n in the editor or pressing `Enter` in the REPL tab will start\r\n a remote Julia process instead of a local one.'\r\n enum: ['Basic', 'Cycler', 'External Terminal', 'Remote']\r\n default: 'Basic'\r\n radio: true\r\n order: 1\r\n optimisationLevel:\r\n title: 'Optimisation Level'\r\n description: 'Higher levels take longer to compile, but produce faster code.'\r\n type: 'integer'\r\n enum: [0, 1, 2, 3]\r\n default: 2\r\n radio: true\r\n order: 2\r\n deprecationWarnings:\r\n title: 'Deprecation Warnings'\r\n type: 'boolean'\r\n description: 'If disabled, hides deprecation warnings.'\r\n default: true\r\n order: 3\r\n numberOfThreads:\r\n title: 'Number of Threads'\r\n type: 'string'\r\n description: '`global` will use global setting, `auto` sets it to number of cores.'\r\n default: 'auto'\r\n order: 4\r\n startupArguments:\r\n title: 'Additional Julia Startup Arguments'\r\n type: 'array'\r\n description: '`-i`, `-O`, and `--depwarn` will be set by the above options\r\n automatically, but can be overwritten here. Arguments are\r\n comma-separated, and you should never need to quote\r\n anything (even e.g. paths with spaces in them).'\r\n default: []\r\n items:\r\n type: 'string'\r\n order: 5\r\n externalProcessPort:\r\n title: 'Port for Communicating with the Julia Process'\r\n type: 'string'\r\n description: '`random` will use a new port each time, or enter an integer to set the port statically.'\r\n default: 'random'\r\n order: 6\r\n arguments:\r\n title: 'Arguments'\r\n type: 'array'\r\n description: 'Set `ARGS` to the following entries (comma-separated). Requires restart of Julia process.'\r\n default: []\r\n items:\r\n type: 'string'\r\n order: 7\r\n persistWorkingDir:\r\n title: 'Persist Working Directory'\r\n type: 'boolean'\r\n default: false\r\n order: 8\r\n workingDir:\r\n title: 'Working Directory'\r\n type: 'string'\r\n default: ''\r\n order: 9\r\n fuzzyCompletionMode:\r\n title: 'Fuzzy Completion Mode'\r\n description:\r\n '''\r\n If `true`, in-editor auto-completions are generated based on fuzzy (i.e. more permissive) matches,\r\n otherwise based on strict matches as in REPL.\r\n ***NOTE***: this setting doesn't affect completions in REPL,\r\n and so in-REPL completions will still work as usual (i.e. based on strict matches and will complete eagerly).\r\n '''\r\n type: 'boolean'\r\n default: true\r\n order: 10\r\n autoCompletionSuggestionPriority:\r\n title: 'Auto-Completion Suggestion Priority'\r\n description:\r\n '''\r\n Specify the sort order of auto-completion suggestions provided by Juno.\r\n Note the default providers like snippets have priority of `1`.\r\n Requires Atom restart to take an effect.\r\n '''\r\n type: 'integer'\r\n default: 3\r\n order: 11\r\n noAutoParenthesis:\r\n title: 'Don\\'t Insert Parenthesis on Function Auto-completion'\r\n description: 'If enabled, Juno will not insert parenthesis after completing a function.'\r\n type: 'boolean'\r\n default: false\r\n order: 12\r\n formatOnSave:\r\n title: 'Format the current editor when saving'\r\n description: 'If enabled, Juno will format the current editor on save if a Julia session is running.'\r\n type: 'boolean'\r\n default: false\r\n order: 13\r\n formattingOptions:\r\n title: 'Formatting Options'\r\n description:\r\n '''\r\n ⚠ This config is deprecated. In order to specify\r\n [Formatting Options](https://domluna.github.io/JuliaFormatter.jl/dev/#Formatting-Options-1),\r\n use `.JuliaFormatter.toml` configuration file instead.\r\n See the [\"Configuration File\" section](https://domluna.github.io/JuliaFormatter.jl/stable/config/)\r\n in JuliaFormatter.jl's documentation for more details.\r\n '''\r\n type: 'object'\r\n order: 14\r\n collapsed: true\r\n properties:\r\n mock: # NOTE: otherwise the deprecated description doesn't show up\r\n title: \"mock (doesn't have any effect)\"\r\n type: 'boolean'\r\n default: false\r\n\r\n uiOptions:\r\n title: 'UI Options'\r\n type: 'object'\r\n order: 3\r\n collapsed: true\r\n properties:\r\n resultsDisplayMode:\r\n title: 'Result Display Mode'\r\n type: 'string'\r\n default: 'inline'\r\n enum: [\r\n {value:'inline', description:'Float results next to code'}\r\n {value:'block', description:'Display results under code'}\r\n {value:'console', description:'Display results in the REPL'}\r\n ]\r\n order: 1\r\n scrollToResult:\r\n title: 'Scroll to Inline Results'\r\n type: 'boolean'\r\n default: false\r\n order: 2\r\n docsDisplayMode:\r\n title: 'Documentation Display Mode'\r\n type: 'string'\r\n default: 'pane'\r\n enum: [\r\n {value: 'inline', description: 'Show documentation in the editor'}\r\n {value: 'pane', description: 'Show documentation in the documentation pane'}\r\n ]\r\n order: 3\r\n errorNotifications:\r\n title: 'Error Notifications'\r\n type: 'boolean'\r\n default: true\r\n description: 'When evaluating a script, show errors in a notification as\r\n well as in the REPL.'\r\n order: 4\r\n errorInRepl:\r\n title: 'Show Errors in REPL (Inline Evaluation)'\r\n type: 'boolean'\r\n default: false\r\n description: 'If enabled, Juno always shows errors in the REPL when using inline evaluation.'\r\n order: 5\r\n enableMenu:\r\n title: 'Enable Menu'\r\n type: 'boolean'\r\n default: false\r\n description: 'Show a Julia menu in the menu bar (requires restart).'\r\n order: 6\r\n enableToolBar:\r\n title: 'Enable Toolbar'\r\n type: 'boolean'\r\n default: false\r\n description: 'Show Julia icons in the tool bar (requires restart).'\r\n order: 7\r\n usePlotPane:\r\n title: 'Enable Plot Pane'\r\n type: 'boolean'\r\n default: true\r\n description: 'Show plots in Atom.'\r\n order: 8\r\n maxNumberPlots:\r\n title: 'Maximum Number of Plots in History'\r\n type: 'number'\r\n default: 50\r\n description: 'Increasing this number may lead to high memory consumption and poor performance.'\r\n order: 9\r\n openNewEditorWhenDebugging:\r\n title: 'Open New Editor When Debugging'\r\n type: 'boolean'\r\n default: false\r\n description: 'Opens a new editor tab when stepping into a new file instead\r\n of reusing the current one (requires restart).'\r\n order: 10\r\n cellDelimiter:\r\n title: 'Cell Delimiter'\r\n type: 'array'\r\n default: ['##\\\\s', '#---', '#\\\\s?%%']\r\n description: 'Regular expressions for determining cell delimiters.'\r\n order: 11\r\n highlightCells:\r\n title: 'Highlight Cells'\r\n type: 'boolean'\r\n description: 'Customize the appearence of Juno\\'s cell highlighting by\r\n adding styles for `.line.julia-current-cell` or\r\n `.line-number.julia-current-cell` to your personal\r\n stylesheet.'\r\n default: true\r\n order: 12\r\n layouts:\r\n title: 'Layout Options'\r\n type: 'object'\r\n order: 13\r\n collapsed: true\r\n properties:\r\n console:\r\n title: 'REPL'\r\n type: 'object'\r\n order: 1\r\n collapsed: true\r\n properties:\r\n defaultLocation:\r\n title: 'Default location of REPL Pane'\r\n type: 'string'\r\n enum: ['center', 'left', 'bottom', 'right']\r\n default: 'bottom'\r\n radio: true\r\n order: 1\r\n split:\r\n title: 'Splitting rule of REPL Pane'\r\n type: 'string'\r\n enum: ['no split', 'left', 'up', 'right', 'down']\r\n default: 'no split'\r\n radio: true\r\n order: 2\r\n terminal:\r\n title: 'Terminal'\r\n type: 'object'\r\n order: 2\r\n collapsed: true\r\n properties:\r\n defaultLocation:\r\n title: 'Default location of Terminal Pane'\r\n type: 'string'\r\n enum: ['center', 'left', 'bottom', 'right']\r\n default: 'bottom'\r\n radio: true\r\n order: 1\r\n split:\r\n title: 'Splitting rule of Terminal Pane'\r\n type: 'string'\r\n enum: ['no split', 'left', 'up', 'right', 'down']\r\n default: 'no split'\r\n radio: true\r\n order: 2\r\n workspace:\r\n title: 'Workspace'\r\n type: 'object'\r\n order: 3\r\n collapsed: true\r\n properties:\r\n defaultLocation:\r\n title: 'Default location of Workspace Pane'\r\n type: 'string'\r\n enum: ['center', 'left', 'bottom', 'right']\r\n default: 'center'\r\n radio: true\r\n order: 1\r\n split:\r\n title: 'Splitting rule of Workspace Pane'\r\n type: 'string'\r\n enum: ['no split', 'left', 'up', 'right', 'down']\r\n default: 'right'\r\n radio: true\r\n order: 2\r\n documentation:\r\n title: 'Documentation Browser'\r\n type: 'object'\r\n order: 4\r\n collapsed: true\r\n properties:\r\n defaultLocation:\r\n title: 'Default location of Documentation Browser Pane'\r\n type: 'string'\r\n enum: ['center', 'left', 'bottom', 'right']\r\n default: 'center'\r\n radio: true\r\n order: 1\r\n split:\r\n title: 'Splitting rule of Documentation Browser Pane'\r\n type: 'string'\r\n enum: ['no split', 'left', 'up', 'right', 'down']\r\n default: 'right'\r\n radio: true\r\n order: 2\r\n plotPane:\r\n title: 'Plot Pane'\r\n type: 'object'\r\n order: 5\r\n collapsed: true\r\n properties:\r\n defaultLocation:\r\n title: 'Default location of Plot Pane'\r\n type: 'string'\r\n enum: ['center', 'left', 'bottom', 'right']\r\n default: 'center'\r\n radio: true\r\n order: 1\r\n split:\r\n title: 'Splitting rule of Plot Pane'\r\n type: 'string'\r\n enum: ['no split', 'left', 'up', 'right', 'down']\r\n default: 'right'\r\n radio: true\r\n order: 2\r\n debuggerPane:\r\n title: 'Debugger Pane'\r\n type: 'object'\r\n order: 6\r\n collapsed: true\r\n properties:\r\n defaultLocation:\r\n title: 'Default location of Debugger Pane'\r\n type: 'string'\r\n enum: ['center', 'left', 'bottom', 'right']\r\n default: 'right'\r\n radio: true\r\n order: 1\r\n split:\r\n title: 'Splitting rule of Debugger Pane'\r\n type: 'string'\r\n enum: ['no split', 'left', 'up', 'right', 'down']\r\n default: 'no split'\r\n radio: true\r\n order: 2\r\n profiler:\r\n title: 'Profiler'\r\n type: 'object'\r\n order: 7\r\n collapsed: true\r\n properties:\r\n defaultLocation:\r\n title: 'Default location of Profiler Pane'\r\n type: 'string'\r\n enum: ['center', 'left', 'bottom', 'right']\r\n default: 'center'\r\n radio: true\r\n order: 1\r\n split:\r\n title: 'Splitting rule of Profiler Pane'\r\n type: 'string'\r\n enum: ['no split', 'left', 'up', 'right', 'down']\r\n default: 'right'\r\n radio: true\r\n order: 2\r\n linter:\r\n title: 'Linter'\r\n type: 'object'\r\n order: 8\r\n collapsed: true\r\n properties:\r\n defaultLocation:\r\n title: 'Default location of Linter Pane'\r\n type: 'string'\r\n enum: ['center', 'left', 'bottom', 'right']\r\n default: 'bottom'\r\n radio: true\r\n order: 1\r\n split:\r\n title: 'Splitting rule of Linter Pane'\r\n type: 'string'\r\n enum: ['no split', 'left', 'up', 'right', 'down']\r\n default: 'no split'\r\n radio: true\r\n order: 2\r\n outline:\r\n title: 'Outline'\r\n type: 'object'\r\n order: 9\r\n collapsed: true\r\n properties:\r\n defaultLocation:\r\n title: 'Default location of Outline Pane'\r\n type: 'string'\r\n enum: ['center', 'left', 'bottom', 'right']\r\n default: 'left'\r\n radio: true\r\n order: 1\r\n split:\r\n title: 'Splitting rule of Outline Pane'\r\n type: 'string'\r\n enum: ['no split', 'left', 'up', 'right', 'down']\r\n default: 'down'\r\n radio: true\r\n order: 2\r\n defaultPanes:\r\n title: 'Default Panes'\r\n description: 'Specify panes that are opened by `Julia Client: Restore Default Layout`.\r\n The location and splitting rule of each pane follow the settings above.'\r\n type: 'object'\r\n order: 10\r\n properties:\r\n console:\r\n title: 'REPL'\r\n type: 'boolean'\r\n default: true\r\n order: 1\r\n workspace:\r\n title: 'Workspace'\r\n type: 'boolean'\r\n default: true\r\n order: 2\r\n documentation:\r\n title: 'Documentation Browser'\r\n type: 'boolean'\r\n default: true\r\n order: 3\r\n plotPane:\r\n title: 'Plot Pane'\r\n type: 'boolean'\r\n default: true\r\n order: 4\r\n debuggerPane:\r\n title: 'Debugger Pane'\r\n type: 'boolean'\r\n default: false\r\n order: 5\r\n linter:\r\n title: 'Linter'\r\n type: 'boolean'\r\n default: false\r\n order: 6\r\n outline:\r\n title: 'Outline'\r\n type: 'boolean'\r\n default: false\r\n order: 7\r\n openDefaultPanesOnStartUp:\r\n title: 'Open Default Panes on Startup'\r\n description: 'If enabled, opens panes specified above on startup.\r\n Note a layout deserialized from a previous window state\r\n would be modified by that, i.e.: disable this if you want\r\n to keep the deserialized layout.'\r\n type: 'boolean'\r\n default: true\r\n order: 11\r\n\r\n consoleOptions:\r\n type: 'object'\r\n title: 'Terminal Options'\r\n order: 4\r\n collapsed: true\r\n properties:\r\n maximumConsoleSize:\r\n title: 'Scrollback Buffer Size'\r\n type: 'integer'\r\n default: 10000\r\n order: 1\r\n prompt:\r\n title: 'Terminal Prompt'\r\n type: 'string'\r\n default: 'julia>'\r\n order: 2\r\n shell:\r\n title: 'Shell'\r\n type: 'string'\r\n default: terminal.defaultShell()\r\n description: 'The location of an executable shell. Set to `$SHELL` by default,\r\n and if `$SHELL` isn\\'t set then fallback to `bash` or `powershell.exe` (on Windows).'\r\n order: 3\r\n terminal:\r\n title: 'Terminal'\r\n type: 'string'\r\n default: terminal.defaultTerminal()\r\n description: 'Command used to open an external terminal.'\r\n order: 4\r\n whitelistedKeybindingsREPL:\r\n title: 'Whitelisted Keybindings for the Julia REPL'\r\n type: 'array'\r\n default: ['Ctrl-C', 'F5', 'F8', 'F9', 'F10', 'F11', 'Shift-F5', 'Shift-F8', 'Shift-F9', 'Shift-F10', 'Shift-F11']\r\n description: 'The listed keybindings are not handled by the REPL and instead directly passed to Atom.'\r\n order: 5\r\n whitelistedKeybindingsTerminal:\r\n title: 'Whitelisted Keybindings for Terminals'\r\n type: 'array'\r\n default: []\r\n description: 'The listed keybindings are not handled by any terminals and instead directly passed to Atom.'\r\n order: 6\r\n cursorStyle:\r\n title: 'Cursor Style'\r\n type: 'string'\r\n enum: ['block', 'underline', 'bar']\r\n default: 'block'\r\n radio: true\r\n order: 7\r\n cursorBlink:\r\n title: 'Cursor Blink'\r\n type: 'boolean'\r\n default: false\r\n order: 8\r\n terminalRendererType:\r\n title: 'Terminal Renderer'\r\n type: 'string'\r\n enum: ['webgl', 'canvas', 'dom']\r\n default: 'webgl'\r\n radio: true\r\n description: 'The `webgl` renderer is fastest, but is still experimental. `canvas` performs well\r\n in many cases, while `dom` is a slow falback. Note that it\\'s not possible\r\n to hot-swap to the `webgl` renderer.'\r\n order: 9\r\n linkModifier:\r\n title: 'Ctrl/Cmd modifier for link activation'\r\n type: 'boolean'\r\n default: true\r\n order: 10\r\n\r\n remoteOptions:\r\n type: 'object'\r\n order: 5\r\n collapsed: true\r\n properties:\r\n remoteJulia:\r\n title: 'Command to execute Julia on the remote server'\r\n type: 'string'\r\n default: 'julia'\r\n order: 1\r\n tmux:\r\n title: 'Use a persistent tmux session'\r\n description: 'Requires tmux to be installed on the server you\\'re connecting to.'\r\n type: 'boolean'\r\n default: false\r\n order: 2\r\n tmuxName:\r\n title: 'tmux session name'\r\n type: 'string'\r\n default: 'juno_tmux_session'\r\n order: 3\r\n agentAuth:\r\n title: 'Use SSH agent'\r\n description: 'Requires `$SSH_AUTH_SOCKET` to be set. Defaults to putty\\'s pageant on Windows.'\r\n type: 'boolean'\r\n default: true\r\n order: 4\r\n forwardAgent:\r\n title: 'Forward SSH agent'\r\n type: 'boolean'\r\n default: true\r\n order: 5\r\n\r\n juliaSyntaxScopes:\r\n title: 'Julia Syntax Scopes'\r\n description:\r\n 'The listed syntax scopes (comma separated) will be recoginized as Julia files.\r\n You may have to restart Atom to take an effect.\\n\r\n **DO NOT** edit this unless you\\'re sure about the effect.'\r\n type: 'array'\r\n default: ['source.julia', 'source.weave.md', 'source.weave.latex']\r\n order: 6\r\n\r\n disableProxy:\r\n title: 'Disable System Proxy for Child Processes'\r\n description:\r\n 'This unsets the `HTTP_PROXY` and `HTTPS_PROXY` environment variables in all integrated\r\n terminals. Try this option if you\\'re experiencing issues when installing Julia packages\r\n in Juno.'\r\n type: 'boolean'\r\n default: false\r\n order: 7\r\n\r\n firstBoot:\r\n type: 'boolean'\r\n default: true\r\n order: 99\r\n\r\nif process.platform != 'darwin'\r\n config.consoleOptions.properties.whitelistedKeybindingsREPL.default =\r\n ['Ctrl-C', 'Ctrl-J', 'Ctrl-K', 'Ctrl-E', 'Ctrl-V', 'Ctrl-M', 'F5', 'F8', 'F9',\r\n 'F10', 'F11', 'Shift-F5', 'Shift-F8', 'Shift-F9', 'Shift-F10', 'Shift-F11']\r\n\r\nif process.platform == 'darwin'\r\n config.consoleOptions.properties.macOptionIsMeta =\r\n title: 'Use Option as Meta'\r\n type: 'boolean'\r\n default: false\r\n order: 5.5\r\n\r\nmodule.exports = config\r\n","{CompositeDisposable} = require 'atom'\r\n\r\nmodule.exports =\r\n activate: ->\r\n @subs = new CompositeDisposable\r\n # Package submenu\r\n @subs.add atom.menu.add [{\r\n label: 'Packages',\r\n submenu: @menu\r\n }]\r\n\r\n # App Menu\r\n if atom.config.get 'julia-client.uiOptions.enableMenu'\r\n @subs.add = atom.menu.add @menu\r\n # TODO: find a less hacky way to do this\r\n menu = atom.menu.template.pop()\r\n atom.menu.template.splice 3, 0, menu\r\n\r\n deactivate: ->\r\n @subs.dispose()\r\n\r\n menu: [{\r\n label: 'Juno'\r\n submenu: [\r\n {label: 'Start Julia', command: 'julia-client:start-julia'}\r\n {label: 'Start Remote Julia Process', command: 'julia-client:start-remote-julia-process'}\r\n {label: 'Interrupt Julia', command: 'julia-client:interrupt-julia'}\r\n {label: 'Stop Julia', command: 'julia-client:kill-julia'}\r\n\r\n {type: 'separator'}\r\n\r\n {label: 'Open REPL', command: 'julia-client:open-REPL'}\r\n {label: 'Clear REPL', command: 'julia-client:clear-REPL'}\r\n {label: 'Open External REPL', command: 'julia-client:open-external-REPL'}\r\n {\r\n label: 'Working Directory'\r\n submenu: [\r\n {label: 'Current File\\'s Folder', command: 'julia-client:work-in-current-folder'}\r\n {label: 'Select Project Folder', command: 'julia-client:work-in-project-folder'}\r\n {label: 'Home Folder', command: 'julia-client:work-in-home-folder'}\r\n {label: 'Select...', command: 'julia-client:select-working-folder'}\r\n ]\r\n }\r\n {\r\n label: 'Environment',\r\n submenu: [\r\n {label: 'Environment in Current File\\'s Folder', command: 'julia-client:activate-environment-in-current-folder'}\r\n {label: 'Environment in Parent Folder', command: 'julia-client:activate-environment-in-parent-folder'}\r\n {label: 'Default Environment', command: 'julia-client:activate-default-environment'}\r\n ]\r\n }\r\n {label: 'Set Working Module', command: 'julia-client:set-working-module'}\r\n\r\n {type: 'separator'}\r\n\r\n {label: 'Run Block', command: 'julia-client:run-block'}\r\n {label: 'Run All', command: 'julia-client:run-all'}\r\n\r\n {type: 'separator'}\r\n\r\n {label: 'Format Code', command: 'julia-client:format-code'}\r\n\r\n {type: 'separator'}\r\n\r\n {label: 'Debug: Run Block', command: 'julia-debug:run-block'}\r\n {label: 'Debug: Step through Block', command: 'julia-debug:step-through-block'}\r\n {label: 'Debug: Run File', command: 'julia-debug:run-file'}\r\n {label: 'Debug: Step through File', command: 'julia-debug:step-through-file'}\r\n\r\n {type: 'separator'}\r\n\r\n {label: 'Open Workspace', command: 'julia-client:open-workspace'}\r\n {label: 'Open Outline Pane', command: 'julia-client:open-outline-pane'}\r\n {label: 'Open Documentation Browser', command: 'julia-client:open-documentation-browser'}\r\n {label: 'Open Plot Pane', command: 'julia-client:open-plot-pane'}\r\n {label: 'Open Debugger Pane', command: 'julia-debug:open-debugger-pane'}\r\n\r\n {type: 'separator'}\r\n\r\n {label: 'Open New Julia File', command: 'julia:new-julia-file'}\r\n {label: 'Open Julia Startup File', command: 'julia:open-julia-startup-file'}\r\n {label: 'Open Juno Startup File', command: 'julia:open-juno-startup-file'}\r\n {label: 'Open Julia Home', command: 'julia:open-julia-home'}\r\n {label: 'Open Package in New Window...', command: 'julia:open-package-in-new-window'}\r\n {label: 'Open Package as Project Folder...', command: 'julia:open-package-as-project-folder'}\r\n\r\n {type: 'separator'}\r\n\r\n {\r\n label: 'New Terminal'\r\n submenu: [\r\n {label: 'Current File\\'s Folder', command: 'julia-client:new-terminal-from-current-folder'}\r\n {label: 'Select Project Folder', command: 'julia-client:new-terminal'}\r\n ]\r\n }\r\n {label: 'New Remote Terminal', command: 'julia-client:new-remote-terminal'}\r\n\r\n {type: 'separator'}\r\n\r\n {label: 'Debug Information', command: 'julia-client:debug-info'}\r\n {label: 'Help...', command: 'julia:get-help'}\r\n {label: 'Settings...', command: 'julia-client:settings'}\r\n ]\r\n }]\r\n","\r\n\r\nlet validSchemes = require('../package/config')\r\nlet invalidSchemes = [] // Keeps invalid config schemes to be notified to users\r\n\r\nfunction dispose() {\r\n validSchemes = null\r\n invalidSchemes = null\r\n}\r\n\r\n/**\r\n * Updates settings by removing deprecated (i.e.: not used anymore) configs so that no one tries to\r\n * tweak them.\r\n */\r\nexport function updateSettings() {\r\n const currentConfig = atom.config.get('julia-client')\r\n searchForDeprecated(currentConfig, [])\r\n\r\n if (invalidSchemes.length > 0) {\r\n const message = atom.notifications.addWarning('Julia-Client: Invalid (deprecated) settings found', {\r\n detail: invalidSchemes.join('\\n'),\r\n dismissable: true,\r\n description: 'Remove these invalid settings ?',\r\n buttons: [\r\n {\r\n text: 'Yes',\r\n onDidClick: () => {\r\n message.dismiss()\r\n invalidSchemes.forEach((invalidScheme) => {\r\n atom.config.unset(invalidScheme)\r\n })\r\n dispose()\r\n }\r\n },\r\n {\r\n text: 'No',\r\n onDidClick: () => {\r\n message.dismiss()\r\n dispose()\r\n }\r\n }\r\n ]\r\n })\r\n }\r\n}\r\n\r\n/**\r\n * Recursively search deprecated configs\r\n */\r\nfunction searchForDeprecated(config, currentSchemes) {\r\n Object.entries(config).forEach(([key, value]) => {\r\n // @NOTE: Traverse the current config schemes by post-order in order to push all the invalid\r\n // config schemes into `invalidSchemes`\r\n if (Object.prototype.toString.call(value) === '[object Object]') {\r\n const nextSchemes = currentSchemes.slice(0)\r\n nextSchemes.push(key)\r\n searchForDeprecated(value, nextSchemes)\r\n }\r\n\r\n // Make `validScheme` corresponding to `currentSchemes` path for the validity checking below\r\n let validScheme = validSchemes\r\n currentSchemes.forEach((scheme) => {\r\n Object.entries(validScheme).forEach(([_key, _value]) => {\r\n if (_key === scheme) {\r\n validScheme = _value\r\n } else if (_key === 'properties' && _value[scheme]) {\r\n validScheme = _value[scheme]\r\n }\r\n })\r\n });\r\n\r\n // Check if the `config` scheme being searched at this recursion is in `validScheme`\r\n if (!validScheme[key] && (!validScheme.properties || !validScheme.properties[key])) {\r\n let invalidScheme = 'julia-client.'\r\n invalidScheme += currentSchemes.length === 0 ? '' : `${currentSchemes.join('.')}.`\r\n invalidScheme += key\r\n invalidSchemes.push(invalidScheme)\r\n }\r\n });\r\n}\r\n","/** @babel */\r\n\r\nimport SelectList from 'atom-select-list'\r\n\r\n/**\r\n * @type {SelectList}\r\n */\r\nlet selector\r\nlet panel, ink\r\n\r\nexport function activate (_ink) {\r\n ink = _ink\r\n selector = new SelectList({\r\n items: [],\r\n elementForItem\r\n })\r\n selector.element.classList.add('command-palette', 'julia-client-selector')\r\n panel = atom.workspace.addModalPanel({ item: selector.element })\r\n}\r\n\r\nfunction elementForItem (item, { selected }) {\r\n const view = document.createElement('li')\r\n if (selected) view.classList.add('active')\r\n const name = (item.primary) ? item.primary.toString() : item.toString()\r\n const primary = ink.matchHighlighter.highlightMatches(name, selector.getFilterQuery())\r\n view.appendChild(primary)\r\n if (item.secondary) {\r\n const secondary = document.createElement('div')\r\n secondary.classList.add('secondary-line', 'path')\r\n secondary.innerText = item.secondary\r\n view.classList.add('two-lines')\r\n primary.classList.add('primary-line')\r\n view.append(secondary)\r\n }\r\n return view\r\n}\r\n\r\nexport function show (items, { active, emptyMessage, errorMessage, infoMessage, allowCustom } = {}) {\r\n selector.update({\r\n items: [],\r\n query: '',\r\n loadingMessage: 'Loading ...',\r\n })\r\n const lastFocusedPane = atom.workspace.getActivePane()\r\n panel.show()\r\n selector.focus()\r\n let confirmed = false\r\n return new Promise((resolve, reject) => {\r\n // HACK:\r\n // we can't pass those callback functions to `update` while atom-select-list's document says they can be ...\r\n selector.props.didConfirmSelection = (item) => {\r\n confirmed = true\r\n selector.cancelSelection()\r\n resolve(item)\r\n }\r\n selector.props.didConfirmEmptySelection = () => {\r\n confirmed = true\r\n selector.cancelSelection()\r\n const query = selector.getQuery()\r\n if (allowCustom && query.length > 0) {\r\n resolve(query)\r\n } else {\r\n resolve()\r\n }\r\n }\r\n selector.props.didCancelSelection = () => {\r\n panel.hide()\r\n lastFocusedPane.activate()\r\n const query = selector.getQuery()\r\n if (!confirmed) {\r\n if (allowCustom && query.length > 0) {\r\n resolve(query)\r\n } else {\r\n resolve()\r\n }\r\n }\r\n }\r\n selector.props.filterKeyForItem = (items.length > 0 && items[0] instanceof Object) ?\r\n item => item.primary : item => item\r\n if (items.constructor == Promise) {\r\n items.then(items => {\r\n selector.update({\r\n items,\r\n emptyMessage,\r\n errorMessage,\r\n infoMessage,\r\n loadingMessage: ''\r\n })\r\n if (active) {\r\n const index = (active instanceof Number) ? active :\r\n (active instanceof Function) ? items.findIndex(active) :\r\n items.findIndex(item => item == active)\r\n selector.selectIndex(index)\r\n }\r\n }).catch(err => {\r\n reject(err)\r\n selector.cancelSelection()\r\n })\r\n } else {\r\n selector.update({\r\n items,\r\n emptyMessage,\r\n errorMessage,\r\n infoMessage,\r\n loadingMessage: ''\r\n })\r\n if (active) {\r\n const index = (active instanceof Number) ? active :\r\n (active instanceof Function) ? items.findIndex(active) :\r\n items.findIndex(item => item == active)\r\n selector.selectIndex(index)\r\n }\r\n }\r\n })\r\n}\r\n","module.exports =\r\n consumeToolBar: (bar) ->\r\n return unless atom.config.get 'julia-client.uiOptions.enableToolBar'\r\n\r\n @bar = bar 'julia-client'\r\n\r\n # Files & Folders\r\n\r\n @bar.addButton\r\n icon: 'file-code'\r\n iconset: 'fa'\r\n tooltip: 'New Julia File'\r\n callback: 'julia:new-julia-file'\r\n\r\n @bar.addButton\r\n icon: 'save'\r\n iconset: 'fa'\r\n tooltip: 'Save'\r\n callback: 'core:save'\r\n\r\n @bar.addButton\r\n icon: 'folder-open'\r\n iconset: 'fa'\r\n tooltip: 'Open File...'\r\n callback: 'application:open-file'\r\n\r\n # Julia process\r\n\r\n @bar.addSpacer()\r\n\r\n @bar.addButton\r\n icon: 'globe'\r\n tooltip: 'Start Local Julia Process'\r\n callback: 'julia-client:start-julia'\r\n\r\n @bar.addButton\r\n iconset: 'ion'\r\n icon: 'md-planet'\r\n tooltip: 'Start Remote Julia Process'\r\n callback: 'julia-client:start-remote-julia-process'\r\n\r\n @bar.addButton\r\n icon: 'md-pause'\r\n iconset: 'ion'\r\n tooltip: 'Interrupt Julia'\r\n callback: 'julia-client:interrupt-julia'\r\n\r\n @bar.addButton\r\n icon: 'md-square'\r\n iconset: 'ion'\r\n tooltip: 'Stop Julia'\r\n callback: 'julia-client:kill-julia'\r\n\r\n # Evaluation\r\n\r\n @bar.addSpacer()\r\n\r\n @bar.addButton\r\n icon: 'zap'\r\n tooltip: 'Run Block'\r\n callback: 'julia-client:run-and-move'\r\n\r\n @bar.addButton\r\n icon: 'md-play'\r\n iconset: 'ion'\r\n tooltip: 'Run All'\r\n callback: 'julia-client:run-all'\r\n\r\n @bar.addButton\r\n icon: 'format-float-none'\r\n iconset: 'mdi'\r\n tooltip: 'Format Code'\r\n callback: 'julia-client:format-code'\r\n\r\n # Windows & Panes\r\n\r\n @bar.addSpacer()\r\n\r\n @bar.addButton\r\n icon: 'terminal'\r\n tooltip: 'Show REPL'\r\n callback: 'julia-client:open-REPL'\r\n\r\n @bar.addButton\r\n icon: 'book'\r\n tooltip: 'Show Workspace'\r\n callback: 'julia-client:open-workspace'\r\n\r\n @bar.addButton\r\n icon: 'list-unordered'\r\n tooltip: 'Show Outline'\r\n callback: 'julia-client:open-outline-pane'\r\n\r\n @bar.addButton\r\n icon: 'info'\r\n tooltip: 'Show Documentation Browser'\r\n callback: 'julia-client:open-documentation-browser'\r\n\r\n @bar.addButton\r\n icon: 'graph'\r\n tooltip: 'Show Plot Pane'\r\n callback: 'julia-client:open-plot-pane'\r\n\r\n @bar.addButton\r\n icon: 'bug'\r\n tooltip: 'Show Debugger Pane'\r\n callback: 'julia-debug:open-debugger-pane'\r\n\r\n deactivate: ->\r\n @bar?.removeItems()\r\n","remote = require 'remote'\r\n\r\nmodule.exports =\r\n # notes: []\r\n # window: remote.getCurrentWindow()\r\n\r\n activate: ->\r\n # document.addEventListener 'focusin', =>\r\n # @clear()\r\n\r\n enabled: -> atom.config.get('julia-client.uiOptions.notifications')\r\n\r\n show: (msg, force) ->\r\n # return unless force or (@enabled() and not document.hasFocus())\r\n # n = new Notification \"Julia Client\",\r\n # body: msg\r\n # n.onclick = =>\r\n # @window.focus()\r\n # @notes.push(n)\r\n\r\n # clear: ->\r\n # for note in @notes\r\n # note.close()\r\n # @notes = []\r\n","_ = require 'underscore-plus'\r\n\r\n# Implementation identical to https://github.com/atom/highlights/blob/master/src/highlights.coffee,\r\n# but uses an externally provided grammar.\r\nmodule.exports =\r\n # Highlights some `text` according to the specified `grammar`.\r\n highlight: (text, grammar, {scopePrefix, block}={}) ->\r\n scopePrefix ?= ''\r\n block ?= false\r\n lineTokens = grammar.tokenizeLines(text)\r\n\r\n # Remove trailing newline\r\n if lineTokens.length > 0\r\n lastLineTokens = lineTokens[lineTokens.length - 1]\r\n\r\n if lastLineTokens.length is 1 and lastLineTokens[0].value is ''\r\n lineTokens.pop()\r\n\r\n html = ''\r\n for tokens in lineTokens\r\n scopeStack = []\r\n html += \"<#{if block then \"div\" else \"span\"} class=\\\"line\\\">\"\r\n for {value, scopes} in tokens\r\n value = ' ' unless value\r\n html = @updateScopeStack(scopeStack, scopes, html, scopePrefix)\r\n html += \"#{@escapeString(value)}\"\r\n html = @popScope(scopeStack, html) while scopeStack.length > 0\r\n html += \"\"\r\n html += ''\r\n html\r\n\r\n escapeString: (string) ->\r\n string.replace /[&\"'<> ]/g, (match) ->\r\n switch match\r\n when '&' then '&'\r\n when '\"' then '"'\r\n when \"'\" then '''\r\n when '<' then '<'\r\n when '>' then '>'\r\n when ' ' then ' '\r\n else match\r\n\r\n updateScopeStack: (scopeStack, desiredScopes, html, scopePrefix) ->\r\n excessScopes = scopeStack.length - desiredScopes.length\r\n if excessScopes > 0\r\n html = @popScope(scopeStack, html) while excessScopes--\r\n\r\n # pop until common prefix\r\n for i in [scopeStack.length..0]\r\n break if _.isEqual(scopeStack[0...i], desiredScopes[0...i])\r\n html = @popScope(scopeStack, html)\r\n\r\n # push on top of common prefix until scopeStack is desiredScopes\r\n for j in [i...desiredScopes.length]\r\n html = @pushScope(scopeStack, desiredScopes[j], html, scopePrefix)\r\n\r\n html\r\n\r\n pushScope: (scopeStack, scope, html, scopePrefix) ->\r\n scopeStack.push(scope)\r\n className = scopePrefix + scope.replace(/\\.+/g, \" #{scopePrefix}\")\r\n html += \"\"\r\n\r\n popScope: (scopeStack, html) ->\r\n scopeStack.pop()\r\n html += ''\r\n","Highlighter = require './highlighter'\r\n\r\n{client} = require '../connection'\r\n{once} = require '../misc'\r\n\r\ngetlazy = client.import 'getlazy'\r\n\r\nmodule.exports = views =\r\n dom: ({tag, attrs, contents}, opts) ->\r\n view = document.createElement tag\r\n for k, v of attrs\r\n if v instanceof Array then v = v.join ' '\r\n view.setAttribute k, v\r\n if contents?\r\n if contents.constructor isnt Array\r\n contents = [contents]\r\n for child in contents\r\n view.appendChild @render child, opts\r\n view\r\n\r\n html: ({content, block = false}) ->\r\n view = @render if block then @tags.div() else @tags.span()\r\n view.innerHTML = content\r\n view = if view.children.length == 1 then view.children[0] else view\r\n\r\n tree: ({head, children, expand}, opts) ->\r\n @ink.tree.treeView(@render(head, opts),\r\n children.map((x)=>@render(@tags.div([x]), opts)),\r\n expand: expand)\r\n\r\n lazy: ({head, id}, opts) ->\r\n conn = client.conn\r\n if opts.registerLazy?\r\n opts.registerLazy id\r\n else\r\n console.warn 'Unregistered lazy view'\r\n view = @ink.tree.treeView @render(head, opts), [],\r\n onToggle: once =>\r\n return unless client.conn == conn\r\n getlazy(id).then (children) =>\r\n body = view.querySelector ':scope > .body'\r\n children.map((x) => @render(@tags.div([x]), opts)).forEach (x) =>\r\n body.appendChild(@ink.ansiToHTML(x))\r\n\r\n subtree: ({label, child}, opts) ->\r\n @render (if child.type == \"tree\"\r\n type: \"tree\"\r\n head: @tags.span [label, child.head]\r\n children: child.children\r\n # children: child.children.map((x) => @tags.span \"gutted\", x)\r\n else\r\n @tags.span \"gutted\", [label, child]), opts\r\n\r\n copy: ({view, text}, opts) ->\r\n view = @render view, opts\r\n atom.commands.add view,\r\n 'core:copy': (e) ->\r\n atom.clipboard.write text\r\n e.stopPropagation()\r\n view\r\n\r\n link: ({file, line, contents}) ->\r\n view = @render @tags.a {href: '#'}, contents\r\n # TODO: maybe need to dispose of the tooltip onclick and readd them, but\r\n # that doesn't seem to be necessary\r\n if @ink.Opener.isUntitled(file)\r\n tt = atom.tooltips.add view, title: -> 'untitled'\r\n else\r\n tt = atom.tooltips.add view, title: -> file\r\n view.onclick = (e) =>\r\n @ink.Opener.open(file, line, {\r\n pending: atom.config.get('core.allowPendingPaneItems')\r\n })\r\n e.stopPropagation()\r\n view.addEventListener 'DOMNodeRemovedFromDocument', =>\r\n tt.dispose()\r\n view\r\n\r\n number: ({value, full}) ->\r\n rounded = value.toPrecision(3)\r\n rounded += '…' unless rounded.toString().length >= full.length\r\n view = @render @tags.span 'syntax--constant syntax--numeric', rounded\r\n isfull = false\r\n view.onclick = (e) ->\r\n view.innerText = if !isfull then full else rounded\r\n isfull = !isfull\r\n e.stopPropagation()\r\n view\r\n\r\n code: ({text, attrs, scope}) ->\r\n grammar = atom.grammars.grammarForScopeName(\"source.julia\")\r\n block = attrs?.block || false\r\n highlighted = Highlighter.highlight(text, grammar, {scopePrefix: 'syntax--', block})\r\n @render {type: 'html', block, content: highlighted}\r\n\r\n latex: ({attrs, text}) ->\r\n block = attrs?.block || false\r\n latex = @ink.KaTeX.texify(text, block)\r\n @render {type: 'html', block, content: latex}\r\n\r\n views:\r\n dom: (a...) -> views.dom a...\r\n html: (a...) -> views.html a...\r\n tree: (a...) -> views.tree a...\r\n lazy: (a...) -> views.lazy a...\r\n subtree: (a...) -> views.subtree a...\r\n link: (a...) -> views.link a...\r\n copy: (a...) -> views.copy a...\r\n number: (a...) -> views.number a...\r\n code: (a...) -> views.code a...\r\n latex: (a...) -> views.latex a...\r\n\r\n render: (data, opts = {}) ->\r\n if @views.hasOwnProperty(data.type)\r\n r = @views[data.type](data, opts)\r\n @ink.ansiToHTML(r)\r\n r\r\n else if data?.constructor is String\r\n new Text data\r\n else\r\n @render \"julia-client: can't render #{data?.type}\"\r\n\r\n tag: (tag, attrs, contents) ->\r\n if attrs?.constructor is String\r\n attrs = class: attrs\r\n if attrs?.constructor isnt Object\r\n [contents, attrs] = [attrs, undefined]\r\n type: 'dom'\r\n tag: tag\r\n attrs: attrs\r\n contents: contents\r\n\r\n tags: {}\r\n\r\n['div', 'span', 'a', 'strong', 'table', 'tr', 'td', 'webview'].forEach (tag) ->\r\n views.tags[tag] = (attrs, contents) ->\r\n views.tag tag, attrs, contents\r\n","{CompositeDisposable} = require 'atom'\r\n{client} = require '../connection'\r\n{formatTimePeriod} = require '../misc'\r\n\r\nmodule.exports =\r\n progs: {}\r\n\r\n activate: ->\r\n @subs = new CompositeDisposable\r\n client.handle 'progress': (t, id, m) => @[t] id, m\r\n status = []\r\n @subs.add client.onWorking =>\r\n status = @ink?.progress.add(null, description: 'Julia')\r\n @subs.add client.onDone => status?.destroy()\r\n @subs.add client.onDetached => @clear()\r\n\r\n deactivate: ->\r\n @clear()\r\n @subs.dispose()\r\n\r\n add: (id) ->\r\n pr = @ink.progress.add()\r\n pr.t0 = Date.now()\r\n pr.showTime = true\r\n @progs[id] = pr\r\n\r\n progress: (id, prog) ->\r\n pr = @progs[id]\r\n return unless pr?\r\n pr.level = prog\r\n if pr.showTime then @rightText id, null\r\n\r\n message: (id, m) -> @progs[id]?.message = m\r\n\r\n leftText: (id, m) -> @progs[id]?.description = m\r\n\r\n rightText: (id, m) ->\r\n pr = @progs[id]\r\n return unless pr?\r\n if m?.length\r\n pr.rightText = m\r\n pr.showTime = false\r\n else\r\n dt = (Date.now() - pr.t0)*(1/pr.level - 1)/1000\r\n pr.showTime = true\r\n pr.rightText = formatTimePeriod dt\r\n\r\n delete: (id) ->\r\n pr = @progs[id]\r\n return unless pr?\r\n pr.destroy()\r\n delete @progs[id]\r\n\r\n clear: ->\r\n for _, p of @progs\r\n p?.destroy()\r\n @progs = {}\r\n","# TODO: this code is awful, refactor\r\n\r\n{CompositeDisposable, Disposable, Emitter} = require 'atom'\r\n{debounce} = require 'underscore-plus'\r\n\r\n{client} = require '../connection'\r\n{show} = require '../ui/selector'\r\n\r\n{module: getmodule, allmodules, ismodule} = client.import ['module', 'allmodules', 'ismodule']\r\n\r\nmodule.exports =\r\n\r\n activate: ->\r\n @subs = new CompositeDisposable\r\n @itemSubs = new CompositeDisposable\r\n @subs.add @emitter = new Emitter\r\n\r\n @subs.add atom.workspace.observeActivePaneItem (item) => @updateForItem item\r\n @subs.add client.onAttached => @updateForItem()\r\n @subs.add client.onDetached => @updateForItem()\r\n\r\n deactivate: ->\r\n @subs.dispose()\r\n\r\n _current: null\r\n lastEditorModule: null\r\n\r\n setCurrent: (@_current, editor) ->\r\n if editor then @lastEditorModule = @_current\r\n @emitter.emit 'did-change', @_current\r\n\r\n onDidChange: (f) -> @emitter.on 'did-change', f\r\n\r\n current: (m = @_current) ->\r\n return unless m?\r\n {main, inactive, sub, subInactive} = m\r\n if main is @follow then return @current @lastEditorModule\r\n if not main or inactive\r\n \"Main\"\r\n else if not sub or subInactive\r\n main\r\n else\r\n \"#{main}.#{sub}\"\r\n\r\n # Choosing Modules\r\n\r\n itemSelector: 'atom-text-editor[data-grammar=\"source julia\"], .julia-console.julia, ink-terminal, .ink-workspace'\r\n\r\n isValidItem: (item) -> atom.views.getView(item)?.matches @itemSelector\r\n\r\n autodetect: 'Auto Detect'\r\n follow: 'Follow Editor'\r\n\r\n chooseModule: ->\r\n item = atom.workspace.getActivePaneItem()\r\n ised = atom.workspace.isTextEditor item\r\n return unless @isValidItem item\r\n client.require 'change modules', =>\r\n if (item = atom.workspace.getActivePaneItem())\r\n active = item.juliaModule or (if ised then @autodetect else 'Main')\r\n modules = allmodules().then (modules) =>\r\n if ised\r\n modules.unshift @autodetect\r\n else if @lastEditorModule?\r\n modules.unshift @follow\r\n modules\r\n modules.catch (err) =>\r\n console.log err\r\n show(modules, { active }).then (mod) =>\r\n return unless mod?\r\n if mod is @autodetect\r\n delete item.juliaModule\r\n else\r\n item.juliaModule = mod\r\n item.setModule?(mod if mod isnt @autodetect)\r\n @updateForItem item\r\n\r\n updateForItem: (item = atom.workspace.getActivePaneItem()) ->\r\n @itemSubs.dispose()\r\n if not @isValidItem item\r\n @itemSubs.add item?.onDidChangeGrammar? => @updateForItem()\r\n @setCurrent()\r\n else if not client.isActive()\r\n @setCurrent main: 'Main', inactive: true\r\n else if atom.workspace.isTextEditor item\r\n @updateForEditor item\r\n else\r\n mod = item.juliaModule or 'Main'\r\n ismodule(mod)\r\n .then (ismod) =>\r\n @setCurrent main: mod, inactive: !ismod\r\n .catch (err) =>\r\n console.log err\r\n\r\n updateForEditor: (editor) ->\r\n @setCurrent main: editor.juliaModule or 'Main', true\r\n @setEditorModule editor\r\n @itemSubs.add editor.onDidChangeCursorPosition =>\r\n @setEditorModuleLazy editor\r\n\r\n getEditorModule: (ed, bufferPosition = null) ->\r\n return unless client.isActive()\r\n if bufferPosition\r\n {row, column} = bufferPosition\r\n else\r\n sels = ed.getSelections()\r\n {row, column} = sels[sels.length - 1].getBufferRange().end\r\n data =\r\n path: client.editorPath(ed)\r\n code: ed.getText()\r\n row: row+1, column: column+1\r\n module: ed.juliaModule\r\n getmodule(data)\r\n .catch (err) =>\r\n console.log err\r\n\r\n setEditorModule: (ed) ->\r\n modulePromise = @getEditorModule ed\r\n return unless modulePromise\r\n modulePromise.then (mod) =>\r\n if atom.workspace.getActivePaneItem() is ed\r\n @setCurrent mod, true\r\n\r\n setEditorModuleLazy: debounce ((ed) -> @setEditorModule(ed)), 100\r\n\r\n # The View\r\n\r\n activateView: ->\r\n @onDidChange (c) => @updateView c\r\n\r\n @dom = document.createElement 'span'\r\n @dom.classList.add 'julia', 'inline-block'\r\n\r\n @mainView = document.createElement 'a'\r\n @dividerView = document.createElement 'span'\r\n @subView = document.createElement 'span'\r\n\r\n @dom.appendChild x for x in [@mainView, @dividerView, @subView]\r\n\r\n @mainView.onclick = =>\r\n atom.commands.dispatch atom.views.getView(atom.workspace.getActivePaneItem()),\r\n 'julia-client:set-working-module'\r\n\r\n atom.tooltips.add @dom,\r\n title: => \"Currently working in module #{@current()}\"\r\n\r\n # @NOTE: Grammar selector has `priority` 10 and thus set the it to a bit lower\r\n # than that to avoid collision that may cause unexpected result.\r\n @tile = @statusBar.addRightTile item: @dom, priority: 5\r\n disposable = new Disposable(=>\r\n @tile.destroy()\r\n delete @tile)\r\n @subs.add(disposable)\r\n disposable\r\n\r\n updateView: (m) ->\r\n return unless @tile?\r\n if not m?\r\n @dom.style.display = 'none'\r\n else\r\n {main, sub, inactive, subInactive} = m\r\n if main is @follow\r\n return @updateView @lastEditorModule\r\n @dom.style.display = ''\r\n @mainView.innerText = main or 'Main'\r\n if sub\r\n @subView.innerText = sub\r\n @dividerView.innerText = '/'\r\n else\r\n view.innerText = '' for view in [@subView, @dividerView]\r\n if inactive\r\n @dom.classList.add 'fade'\r\n else\r\n @dom.classList.remove 'fade'\r\n for view in [@subView, @dividerView]\r\n if subInactive\r\n view.classList.add 'fade'\r\n else\r\n view.classList.remove 'fade'\r\n\r\n consumeStatusBar: (bar) ->\r\n @statusBar = bar\r\n disposable = @activateView()\r\n @updateView @_current\r\n disposable\r\n","\r\n\r\nimport { CompositeDisposable } from 'atom'\r\nimport { client } from '../connection'\r\nconst views = require('./views')\r\nimport goto from '../runtime/goto'\r\n\r\nconst {\r\n searchdocs: searchDocs,\r\n gotosymbol: gotoSymbol,\r\n moduleinfo: moduleInfo,\r\n regeneratedocs: regenerateDocs\r\n} = client.import({rpc: ['searchdocs', 'gotosymbol', 'moduleinfo'], msg: ['regeneratedocs']})\r\n\r\nlet ink, subs, pane\r\n\r\nexport function activate(_ink) {\r\n ink = _ink\r\n\r\n pane = ink.DocPane.fromId('Documentation')\r\n\r\n pane.search = (text, mod, exportedOnly, allPackages, nameOnly) => {\r\n client.boot()\r\n return new Promise((resolve) => {\r\n searchDocs({query: text, mod, exportedOnly, allPackages, nameOnly}).then((res) => {\r\n if (!res.error) {\r\n for (let i = 0; i < res.items.length; i += 1) {\r\n res.items[i].score = res.scores[i]\r\n res.items[i] = processItem(res.items[i])\r\n }\r\n // erase module input if the actual searched module has been changed\r\n if (res.shoulderase) {\r\n pane.modEd.setText('')\r\n }\r\n }\r\n resolve(res)\r\n })\r\n })\r\n }\r\n\r\n pane.regenerateCache = () => {\r\n regenerateDocs()\r\n }\r\n\r\n subs = new CompositeDisposable()\r\n subs.add(atom.commands.add('atom-workspace', 'julia-client:open-documentation-browser', open))\r\n subs.add(atom.commands.add('atom-workspace', 'julia-client:regenerate-doc-cache', () => {\r\n regenerateDocs()\r\n }))\r\n subs.add(atom.config.observe('julia-client.uiOptions.layouts.documentation.defaultLocation', (defaultLocation) => {\r\n pane.setDefaultLocation(defaultLocation)\r\n }))\r\n}\r\n\r\nexport function open () {\r\n return pane.open({\r\n split: atom.config.get('julia-client.uiOptions.layouts.documentation.split')\r\n })\r\n}\r\nexport function ensureVisible () {\r\n return pane.ensureVisible({\r\n split: atom.config.get('julia-client.uiOptions.layouts.documentation.split')\r\n })\r\n}\r\nexport function close () {\r\n return pane.close()\r\n}\r\n\r\nexport function processItem (item) {\r\n item.html = views.render(item.html)\r\n\r\n processLinks(item.html.getElementsByTagName('a'))\r\n\r\n item.onClickName = () => {\r\n gotoSymbol({\r\n word: item.name,\r\n mod: item.mod\r\n }).then(results => {\r\n if (results.error) return\r\n return goto.selectItemsAndGo(results.items)\r\n })\r\n }\r\n\r\n item.onClickModule = () => {\r\n moduleInfo({mod: item.mod}).then(({doc, items}) => {\r\n items.map((x) => processItem(x))\r\n showDocument(views.render(doc), items)\r\n })\r\n }\r\n\r\n return item\r\n}\r\n\r\nexport function processLinks (links) {\r\n for (let i = 0; i < links.length; i++) {\r\n const link = links[i]\r\n if (link.attributes['href'].value == '@ref') {\r\n links[i].onclick = () => pane.kwsearch(link.innerText)\r\n }\r\n }\r\n}\r\n\r\nexport function showDocument (view, items) {\r\n pane.showDocument(view, items)\r\n}\r\n\r\nexport function deactivate () {\r\n subs.dispose()\r\n}\r\n","/** @babel */\r\n\r\nimport path from 'path'\r\nimport fs from 'fs'\r\nimport { CompositeDisposable, Range } from 'atom'\r\n\r\nimport { client } from '../connection'\r\nimport modules from './modules'\r\nimport { isValidScopeToInspect } from '../misc/scopes'\r\nimport {\r\n getWordAndRange,\r\n getWordRangeAtBufferPosition,\r\n getWordRangeWithoutTrailingDots,\r\n isValidWordToInspect\r\n} from '../misc/words'\r\nimport { getLocalContext } from '../misc/blocks'\r\nimport { show } from '../ui/selector'\r\n\r\nconst {\r\n gotosymbol: gotoSymbol,\r\n regeneratesymbols: regenerateSymbols,\r\n clearsymbols: clearSymbols,\r\n} = client.import(['gotosymbol', 'regeneratesymbols', 'clearsymbols'])\r\n\r\nconst includeRegex = /(include|include_dependency)\\(\".+\\.jl\"\\)/\r\nconst filePathRegex = /\".+\\.jl\"/\r\n\r\nclass Goto {\r\n activate (ink) {\r\n this.ink = ink\r\n this.subscriptions = new CompositeDisposable()\r\n this.subscriptions.add(\r\n atom.commands.add('atom-workspace', 'julia-client:regenerate-symbols-cache', () => {\r\n regenerateSymbols()\r\n }),\r\n atom.commands.add('atom-workspace', 'julia-client:clear-symbols-cache', () => {\r\n clearSymbols()\r\n })\r\n )\r\n }\r\n\r\n deactivate () {\r\n this.subscriptions.dispose()\r\n }\r\n\r\n getJumpFilePath(editor, bufferPosition) {\r\n const includeRange = getWordRangeAtBufferPosition(editor, bufferPosition, {\r\n wordRegex: includeRegex\r\n })\r\n if (includeRange.isEmpty()) return false\r\n\r\n // return if the bufferPosition is not on the path string\r\n const filePathRange = getWordRangeAtBufferPosition(editor, bufferPosition, {\r\n wordRegex: filePathRegex\r\n })\r\n if (filePathRange.isEmpty()) return false\r\n\r\n const filePathText = editor.getTextInBufferRange(filePathRange)\r\n const filePathBody = filePathText.replace(/\"/g, '')\r\n const dirPath = path.dirname(editor.getPath())\r\n const filePath = path.join(dirPath, filePathBody)\r\n\r\n // return if there is not such a file exists\r\n if (!fs.existsSync(filePath)) return false\r\n return { range: filePathRange, filePath }\r\n }\r\n\r\n isClientAndInkReady () {\r\n return client.isActive() && this.ink !== undefined\r\n }\r\n\r\n // TODO: handle remote files ?\r\n selectItemsAndGo (items) {\r\n if (items.length === 0) return\r\n if (items.length === 1) {\r\n const item = items[0]\r\n return this.ink.Opener.open(item.file, item.line, {\r\n pending: atom.config.get('core.allowPendingPaneItems')\r\n })\r\n }\r\n items = items.map(result => {\r\n result.primary = result.text\r\n result.secondary = `${result.file}:${result.line}`\r\n return result\r\n })\r\n return show(items).then(item => {\r\n if (!item) return\r\n this.ink.Opener.open(item.file, item.line, {\r\n pending: atom.config.get('core.allowPendingPaneItems')\r\n })\r\n })\r\n }\r\n\r\n gotoSymbol () {\r\n const editor = atom.workspace.getActiveTextEditor()\r\n const bufferPosition = editor.getCursorBufferPosition()\r\n\r\n // file jumps\r\n const rangeFilePath = this.getJumpFilePath(editor, bufferPosition)\r\n if (rangeFilePath) {\r\n const { filePath } = rangeFilePath\r\n return this.ink.Opener.open(filePath, 0, {\r\n pending: atom.config.get('core.allowPendingPaneItems'),\r\n })\r\n }\r\n\r\n if (!this.isClientAndInkReady()) return\r\n\r\n // get word without trailing dot accessors at the buffer position\r\n let { word, range } = getWordAndRange(editor, {\r\n bufferPosition\r\n })\r\n range = getWordRangeWithoutTrailingDots(word, range, bufferPosition)\r\n word = editor.getTextInBufferRange(range)\r\n\r\n // check the validity of code to be inspected\r\n if (!(isValidWordToInspect(word))) return\r\n\r\n // local context\r\n const { column, row } = bufferPosition\r\n const { context, startRow } = getLocalContext(editor, row)\r\n\r\n // module context\r\n const currentModule = modules.current()\r\n const mod = currentModule ? currentModule : 'Main'\r\n const text = editor.getText() // buffer text that will be used for fallback entry\r\n\r\n return gotoSymbol({\r\n word,\r\n path: editor.getPath() || 'untitled-' + editor.getBuffer().getId(),\r\n // local context\r\n column: column + 1,\r\n row: row + 1,\r\n startRow,\r\n context,\r\n onlyGlobal: false,\r\n // module context\r\n mod,\r\n text\r\n }).then(results => {\r\n if (results.error) return\r\n this.selectItemsAndGo(results.items)\r\n }).catch(err => {\r\n console.log(err)\r\n })\r\n }\r\n\r\n provideHyperclick () {\r\n const getSuggestion = async (textEditor, bufferPosition) => {\r\n // file jumps -- invoked even if Julia isn't running\r\n const rangeFilePath = this.getJumpFilePath(textEditor, bufferPosition)\r\n if (rangeFilePath) {\r\n const { range, filePath } = rangeFilePath\r\n return {\r\n range,\r\n callback: () => {\r\n return this.ink.Opener.open(filePath, 0, {\r\n pending: atom.config.get('core.allowPendingPaneItems'),\r\n })\r\n }\r\n }\r\n }\r\n\r\n // If Julia is not running, do nothing\r\n if (!this.isClientAndInkReady()) return\r\n\r\n // If the scope at `bufferPosition` is not valid code scope, do nothing\r\n if (!isValidScopeToInspect(textEditor, bufferPosition)) return\r\n\r\n // get word without trailing dot accessors at the buffer position\r\n let { word, range } = getWordAndRange(textEditor, {\r\n bufferPosition\r\n })\r\n range = getWordRangeWithoutTrailingDots(word, range, bufferPosition)\r\n word = textEditor.getTextInBufferRange(range)\r\n\r\n // check the validity of code to be inspected\r\n if (!(isValidWordToInspect(word))) return\r\n\r\n // local context\r\n const { column, row } = bufferPosition\r\n const { context, startRow } = getLocalContext(textEditor, row)\r\n\r\n // module context\r\n const { main, sub } = await modules.getEditorModule(textEditor, bufferPosition)\r\n const mod = main ? (sub ? `${main}.${sub}` : main) : 'Main'\r\n const text = textEditor.getText() // buffer text that will be used for fallback entry\r\n\r\n return new Promise((resolve) => {\r\n gotoSymbol({\r\n word,\r\n path: textEditor.getPath() || 'untitled-' + textEditor.getBuffer().getId(),\r\n // local context\r\n column: column + 1,\r\n row: row + 1,\r\n startRow,\r\n context,\r\n onlyGlobal: false,\r\n // module context\r\n mod,\r\n text\r\n }).then(results => {\r\n // If the `goto` call fails or there is no where to go to, do nothing\r\n if (results.error) {\r\n resolve({\r\n range: new Range([0,0], [0,0]),\r\n callback: () => {}\r\n })\r\n }\r\n resolve({\r\n range,\r\n callback: () => setTimeout(() => this.selectItemsAndGo(results.items), 5)\r\n })\r\n }).catch(err => {\r\n console.log(err)\r\n })\r\n })\r\n }\r\n\r\n return {\r\n providerName: 'julia-client-hyperclick-provider',\r\n priority: 100,\r\n grammarScopes: atom.config.get('julia-client.juliaSyntaxScopes'),\r\n getSuggestion\r\n }\r\n }\r\n}\r\n\r\nexport default new Goto()\r\n","{CompositeDisposable} = require 'atom'\r\n\r\n{client} = require '../connection'\r\n{views} = require '../ui'\r\ngoto = require './goto'\r\nmodules = require './modules'\r\n\r\n{ workspace, gotosymbol: gotoSymbol, clearLazy } = client.import rpc: ['workspace', 'gotosymbol'], msg: 'clearLazy'\r\n\r\nmodule.exports =\r\n activate: ->\r\n @create()\r\n\r\n client.onDetached =>\r\n @ws.setItems []\r\n @lazyTrees = []\r\n\r\n atom.config.observe 'julia-client.uiOptions.layouts.workspace.defaultLocation', (defaultLocation) =>\r\n @ws.setDefaultLocation defaultLocation\r\n\r\n lazyTrees: []\r\n\r\n update: ->\r\n return @ws.setItems [] unless client.isActive() and @ws.currentPane()\r\n clearLazy @lazyTrees\r\n registerLazy = (id) => @lazyTrees.push id\r\n mod = if @mod == modules.follow then modules.current() else (@mod or 'Main')\r\n p = workspace(mod).then (ws) =>\r\n for {items} in ws\r\n for item in items\r\n item.value = views.render item.value, {registerLazy}\r\n item.onClick = @onClick(item.name)\r\n @ws.setItems ws\r\n p.catch (err) ->\r\n if err isnt 'disconnected'\r\n console.error 'Error refreshing workspace'\r\n console.error err\r\n\r\n onClick: (name) ->\r\n () =>\r\n mod = if @mod == modules.follow then modules.current() else (@mod or 'Main')\r\n gotoSymbol\r\n word: name,\r\n mod: mod\r\n .then (results) =>\r\n return if results.error\r\n goto.selectItemsAndGo(results.items)\r\n\r\n create: ->\r\n @ws = @ink.Workspace.fromId 'julia'\r\n @ws.setModule = (mod) => @mod = mod\r\n @ws.refresh = () => @update()\r\n @ws.refreshModule = () =>\r\n m = modules.chooseModule()\r\n if m?.then?\r\n m.then(() => @update())\r\n\r\n open: ->\r\n @ws.open\r\n split: atom.config.get 'julia-client.uiOptions.layouts.workspace.split'\r\n\r\n close: ->\r\n @ws.close()\r\n","# TODO: this is very horrible, refactor\r\npath = require 'path'\r\n{dialog, BrowserWindow} = require('electron').remote\r\n\r\n{client} = require '../connection'\r\n{notifications, views, selector, docpane} = require '../ui'\r\n{paths, blocks, cells, words, weave} = require '../misc'\r\n{processLinks} = require '../ui/docs'\r\nworkspace = require './workspace'\r\nmodules = require './modules'\r\n{\r\n eval: evaluate, evalall, evalshow, module: getmodule,\r\n cd, clearLazy, activateProject, activateParentProject, activateDefaultProject\r\n} = client.import\r\n rpc: ['eval', 'evalall', 'evalshow', 'module'],\r\n msg: ['cd', 'clearLazy', 'activateProject', 'activateParentProject', 'activateDefaultProject']\r\nsearchDoc = client.import('docs')\r\n\r\nmodule.exports =\r\n _currentContext: ->\r\n editor = atom.workspace.getActiveTextEditor()\r\n mod = modules.current() || 'Main'\r\n edpath = client.editorPath(editor) || 'untitled-' + editor.getBuffer().id\r\n {editor, mod, edpath}\r\n\r\n _showError: (r, lines) ->\r\n @errorLines?.lights.destroy()\r\n lights = @ink.highlights.errorLines (file: file, line: line-1 for {file, line} in lines)\r\n @errorLines = {r, lights}\r\n r.onDidDestroy =>\r\n if @errorLines?.r == r then @errorLines.lights.destroy()\r\n\r\n eval: ({move, cell}={}) ->\r\n {editor, mod, edpath} = @_currentContext()\r\n codeSelector = if cell? then cells else blocks\r\n # global options\r\n resultsDisplayMode = atom.config.get('julia-client.uiOptions.resultsDisplayMode')\r\n errorInRepl = atom.config.get('julia-client.uiOptions.errorInRepl')\r\n scrollToResult = atom.config.get('julia-client.uiOptions.scrollToResult')\r\n\r\n Promise.all codeSelector.get(editor).map ({range, line, text, selection}) =>\r\n codeSelector.moveNext editor, selection, range if move\r\n [[start], [end]] = range\r\n @ink.highlight editor, start, end\r\n rtype = resultsDisplayMode\r\n if cell and not (rtype is 'console')\r\n rtype = 'block'\r\n if rtype is 'console'\r\n evalshow({text, line: line+1, mod, path: edpath})\r\n notifications.show \"Evaluation Finished\"\r\n workspace.update()\r\n else\r\n r = null\r\n setTimeout (=> r ?= new @ink.Result editor, [start, end], {type: rtype, scope: 'julia', goto: scrollToResult}), 0.1\r\n evaluate({text, line: line+1, mod, path: edpath, errorInRepl})\r\n .catch -> r?.destroy()\r\n .then (result) =>\r\n if not result?\r\n r?.destroy()\r\n console.error 'Error: Something went wrong while evaluating.'\r\n return\r\n error = result.type == 'error'\r\n view = if error then result.view else result\r\n if not r? or r.isDestroyed then r = new @ink.Result editor, [start, end], {type: rtype, scope: 'julia', goto: scrollToResult}\r\n registerLazy = (id) ->\r\n r.onDidDestroy client.withCurrent -> clearLazy [id]\r\n editor.onDidDestroy client.withCurrent -> clearLazy id\r\n r.setContent views.render(view, {registerLazy}), {error}\r\n if error\r\n atom.beep() if error\r\n @ink.highlight editor, start, end, 'error-line'\r\n if result.highlights?\r\n @_showError r, result.highlights\r\n notifications.show \"Evaluation Finished\"\r\n workspace.update()\r\n result\r\n\r\n evalAll: (el) ->\r\n if el\r\n path = paths.getPathFromTreeView el\r\n if not path\r\n return atom.notifications.addError 'This file has no path.'\r\n try\r\n code = paths.readCode(path)\r\n data =\r\n path: path\r\n code: code\r\n row: 1\r\n column: 1\r\n getmodule(data)\r\n .then (mod) =>\r\n evalall({\r\n path: path\r\n module: modules.current mod\r\n code: code\r\n })\r\n .then (result) ->\r\n notifications.show \"Evaluation Finished\"\r\n workspace.update()\r\n .catch (err) =>\r\n console.log(err)\r\n .catch (err) =>\r\n console.log(err)\r\n\r\n catch error\r\n atom.notifications.addError 'Error happened',\r\n detail: error\r\n dismissable: true\r\n else\r\n {editor, mod, edpath} = @_currentContext()\r\n atom.commands.dispatch atom.views.getView(editor), 'inline-results:clear-all'\r\n [scope] = editor.getRootScopeDescriptor().getScopesArray()\r\n weaveScopes = ['source.weave.md', 'source.weave.latex']\r\n module = if weaveScopes.includes scope then mod else editor.juliaModule\r\n code = if weaveScopes.includes scope then weave.getCode editor else editor.getText()\r\n evalall({\r\n path: edpath\r\n module: module\r\n code: code\r\n })\r\n .then (result) ->\r\n notifications.show \"Evaluation Finished\"\r\n workspace.update()\r\n .catch (err) =>\r\n console.log(err)\r\n\r\n toggleDocs: () ->\r\n { editor, mod, edpath } = @_currentContext()\r\n bufferPosition = editor.getLastCursor().getBufferPosition()\r\n # get word without trailing dot accessors at the buffer position\r\n { word, range } = words.getWordAndRange(editor, { bufferPosition })\r\n range = words.getWordRangeWithoutTrailingDots(word, range, bufferPosition)\r\n word = editor.getTextInBufferRange(range)\r\n\r\n return unless words.isValidWordToInspect(word)\r\n searchDoc({word: word, mod: mod})\r\n .then (result) =>\r\n if result.error then return\r\n v = views.render result\r\n processLinks(v.getElementsByTagName('a'))\r\n if atom.config.get('julia-client.uiOptions.docsDisplayMode') == 'inline'\r\n d = new @ink.InlineDoc editor, range,\r\n content: v\r\n highlight: true\r\n d.view.classList.add 'julia'\r\n else\r\n docpane.ensureVisible()\r\n docpane.showDocument(v, [])\r\n .catch (err) =>\r\n console.log(err)\r\n\r\n # Working Directory\r\n\r\n _cd: (dir) ->\r\n if atom.config.get('julia-client.juliaOptions.persistWorkingDir')\r\n atom.config.set('julia-client.juliaOptions.workingDir', dir)\r\n cd(dir)\r\n\r\n cdHere: (el) ->\r\n dir = @currentDir(el)\r\n if dir\r\n @_cd(dir)\r\n\r\n activateProject: (el) ->\r\n dir = @currentDir(el)\r\n if dir\r\n activateProject(dir)\r\n\r\n activateParentProject: (el) ->\r\n dir = @currentDir(el)\r\n if dir\r\n activateParentProject(dir)\r\n\r\n activateDefaultProject: ->\r\n activateDefaultProject()\r\n\r\n currentDir: (el) ->\r\n dirPath = paths.getDirPathFromTreeView el\r\n return dirPath if dirPath\r\n # invoked from normal command usage\r\n file = client.editorPath(atom.workspace.getCenter().getActiveTextEditor())\r\n return path.dirname(file) if file\r\n atom.notifications.addError 'This file has no path.'\r\n return null\r\n\r\n cdProject: ->\r\n dirs = atom.project.getPaths()\r\n if dirs.length < 1\r\n atom.notifications.addError 'This project has no folders.'\r\n else if dirs.length == 1\r\n @_cd dirs[0]\r\n else\r\n selector.show(dirs, { infoMessage: 'Select project to work in' })\r\n .then (dir) =>\r\n return unless dir?\r\n @_cd dir\r\n .catch (err) =>\r\n console.log(err)\r\n\r\n cdHome: ->\r\n @_cd paths.home()\r\n\r\n cdSelect: ->\r\n opts = properties: ['openDirectory']\r\n dialog.showOpenDialog BrowserWindow.getFocusedWindow(), opts, (path) =>\r\n if path? then @_cd path[0]\r\n","\r\n\r\nimport { client } from '../connection'\r\nimport { customEnv } from '../connection/process/basic'\r\nimport { CompositeDisposable } from 'atom'\r\nimport { paths } from '../misc'\r\nimport evaluation from './evaluation'\r\nimport modules from './modules'\r\nimport * as pty from 'node-pty-prebuilt-multiarch'\r\nimport { debounce } from 'underscore-plus'\r\nimport { selector } from '../ui'\r\nimport { withRemoteConfig } from '../connection/process/remote'\r\nimport * as ssh from 'ssh2'\r\n\r\nconst { changeprompt, changemodule, fullpath } =\r\n client.import({ msg: ['changeprompt', 'changemodule'], rpc: ['fullpath'] })\r\n\r\nconst isWindows = process.platform === 'win32'\r\nconst uriRegex = isWindows ?\r\n /(@ ([^\\s]+)\\s(.*?)\\:(\\d+)|((([a-zA-Z]:|\\.\\.?|\\~)|([^\\0<>\\?\\|\\/\\s!$`&*()\\[\\]+'\":;])+)?((\\\\|\\/)([^\\0<>\\?\\|\\/!$`&*()\\[\\]+'\":;])+)+\\.[^\\0<>\\?\\|\\/\\s!$`&*()\\[\\]+'\":;]+)(\\:\\d+)?)/ :\r\n /(@ ([^\\s]+)\\s(.*?)\\:(\\d+)|(((\\.\\.?|\\~)|([^\\0\\s!$`&*()\\[\\]+'\":;\\\\])+)?(\\/([^\\0\\s!$`&*()\\[\\]+'\":;\\\\])+)+)(\\:\\d+)?)/\r\n\r\nvar whitelistedKeybindingsREPL = []\r\nvar whitelistedKeybindingsTerminal = []\r\nvar ink = undefined\r\nlet subs = undefined\r\n\r\nexport var terminal\r\n\r\nexport function activate (_ink) {\r\n ink = _ink\r\n subs = new CompositeDisposable()\r\n\r\n process.env['TERM'] = 'xterm-256color'\r\n\r\n subs.add(\r\n atom.config.observe('julia-client.consoleOptions.whitelistedKeybindingsREPL', (kbds) => {\r\n whitelistedKeybindingsREPL = kbds.map(s => s.toLowerCase())\r\n }),\r\n atom.config.observe('julia-client.consoleOptions.whitelistedKeybindingsTerminal', (kbds) => {\r\n whitelistedKeybindingsTerminal = kbds.map(s => s.toLowerCase())\r\n }),\r\n atom.config.observe('julia-client.consoleOptions.cursorStyle', updateTerminalSettings),\r\n atom.config.observe('julia-client.consoleOptions.maximumConsoleSize', updateTerminalSettings),\r\n atom.config.observe('julia-client.consoleOptions.macOptionIsMeta', updateTerminalSettings),\r\n atom.config.observe('julia-client.consoleOptions.terminalRendererType', updateTerminalSettings),\r\n atom.config.observe('julia-client.consoleOptions.cursorBlink', updateTerminalSettings)\r\n )\r\n\r\n terminal = ink.InkTerminal.fromId('julia-terminal', terminalOptions())\r\n terminal.setTitle('REPL', true)\r\n terminal.onDidOpenLink(hasKeyboardModifier)\r\n terminal.registerTooltipHandler(showTooltip, hideTooltip)\r\n terminal.class = 'julia-terminal'\r\n\r\n subs.add(atom.config.observe('julia-client.uiOptions.layouts.console.defaultLocation', (defaultLocation) => {\r\n terminal.setDefaultLocation(defaultLocation)\r\n }))\r\n\r\n terminal.write('\\x1b[1m\\x1b[32mPress Enter to start Julia. \\x1b[0m\\n\\r')\r\n terminal.startRequested = () => {\r\n client.boot()\r\n }\r\n\r\n terminal.attachCustomKeyEventHandler((e) => handleKeybinding(e, terminal, whitelistedKeybindingsREPL))\r\n\r\n modules.onDidChange(debounce(() => changemodule({mod: modules.current()}), 200))\r\n\r\n client.handle({\r\n updateWorkspace: () => require('./workspace').update(),\r\n clearconsole: () => terminal.clear(),\r\n cursorpos: () => terminal.cursorPosition(),\r\n writeToTerminal: (str) => {\r\n if (terminal.ty) {\r\n terminal.ty.write(str)\r\n return true\r\n }\r\n return false\r\n }\r\n })\r\n\r\n let promptObserver\r\n client.onBoot((proc) => {\r\n terminal.attach(proc.ty)\r\n\r\n if (proc.config) {\r\n terminal.setTitle('REPL @ '+proc.config.name, true)\r\n } else {\r\n terminal.setTitle('REPL', true)\r\n }\r\n\r\n if (proc.flush) {\r\n proc.flush((d) => terminal.write(d), (d) => terminal.write(d))\r\n }\r\n\r\n promptObserver = atom.config.observe('julia-client.consoleOptions.prompt', (prompt) => {\r\n changeprompt(prompt + ' ')\r\n })\r\n\r\n addLinkHandler(terminal.terminal)\r\n })\r\n\r\n client.onDetached(() => {\r\n terminal.setTitle('REPL', true)\r\n terminal.detach()\r\n // make sure to switch to the normal termbuffer, otherwise there might be\r\n // issues when leaving an xterm session:\r\n terminal.write('\\x1b[?1049h')\r\n terminal.write('\\x1b[?1049l')\r\n // disable mouse event capturing in case it was left enabled\r\n terminal.write('\\x1b[?1003h')\r\n terminal.write('\\x1b[?1003l')\r\n // reset focus events\r\n terminal.write('\\x1b[?1004h')\r\n terminal.write('\\x1b[?1004l')\r\n terminal.write('\\n\\r\\x1b[1m\\r\\x1b[31mJulia has exited.\\n\\r\\x1b[32mPress Enter to start a new session.\\x1b[0m\\n\\r')\r\n if (promptObserver) promptObserver.dispose()\r\n })\r\n\r\n subs.add(\r\n // repl commands\r\n atom.commands.add('atom-workspace', {\r\n 'julia-client:open-REPL': () => {\r\n open().then(() => terminal.show())\r\n },\r\n 'julia-client:clear-REPL': () => {\r\n terminal.clear()\r\n },\r\n }),\r\n atom.commands.add('.julia-terminal', {\r\n 'julia-client:copy-or-interrupt': () => {\r\n if (!terminal.copySelection()) {\r\n atom.commands.dispatch(terminal.view, 'julia-client:interrupt-julia')\r\n }\r\n }\r\n }),\r\n // terminal commands\r\n atom.commands.add('atom-workspace', {\r\n 'julia-client:new-terminal': () => {\r\n newTerminal()\r\n },\r\n 'julia-client:new-terminal-from-current-folder': ev => {\r\n const dir = evaluation.currentDir(ev.target)\r\n if (!dir) return\r\n newTerminal(dir)\r\n },\r\n 'julia-client:new-remote-terminal': () => {\r\n newRemoteTerminal()\r\n }\r\n })\r\n )\r\n\r\n // handle deserialized terminals\r\n forEachPane(item => {\r\n if (!item.ty) {\r\n item.attachCustomKeyEventHandler((e) => handleKeybinding(e, item))\r\n addLinkHandler(item.terminal)\r\n item.onDidOpenLink(hasKeyboardModifier)\r\n item.registerTooltipHandler(showTooltip, hideTooltip)\r\n shellPty(item.persistentState.cwd)\r\n .then(({pty, cwd}) => item.attach(pty, true, cwd))\r\n .catch(() => {})\r\n }\r\n }, /terminal\\-julia\\-\\d+/)\r\n forEachPane(item => item.close(), /terminal\\-remote\\-julia\\-\\d+/)\r\n}\r\n\r\nexport function open () {\r\n return terminal.open({\r\n split: atom.config.get('julia-client.uiOptions.layouts.console.split')\r\n })\r\n}\r\n\r\nexport function close () {\r\n return terminal.close()\r\n}\r\n\r\nfunction newTerminal (cwd) {\r\n const term = ink.InkTerminal.fromId(`terminal-julia-${Math.floor(Math.random()*10000000)}`, terminalOptions())\r\n term.attachCustomKeyEventHandler((e) => handleKeybinding(e, term))\r\n term.onDidOpenLink(hasKeyboardModifier)\r\n term.registerTooltipHandler(showTooltip, hideTooltip)\r\n addLinkHandler(term.terminal)\r\n shellPty(cwd).then(({pty, cwd}) => {\r\n term.attach(pty, true, cwd)\r\n term.setDefaultLocation(atom.config.get('julia-client.uiOptions.layouts.terminal.defaultLocation'))\r\n term.open({\r\n split: atom.config.get('julia-client.uiOptions.layouts.terminal.split')\r\n }).then(() => term.show()).catch(err => {\r\n console.log(err)\r\n })\r\n }).catch(() => {})\r\n}\r\n\r\nfunction newRemoteTerminal () {\r\n const term = ink.InkTerminal.fromId(`terminal-remote-julia-${Math.floor(Math.random()*10000000)}`, terminalOptions())\r\n term.attachCustomKeyEventHandler((e) => handleKeybinding(e, term))\r\n term.onDidOpenLink(hasKeyboardModifier)\r\n term.registerTooltipHandler(showTooltip, hideTooltip)\r\n addLinkHandler(term.terminal)\r\n remotePty().then(({pty, cwd, conf}) => {\r\n term.attach(pty, true, cwd)\r\n term.setTitle(`Terminal @ ${conf.name}`)\r\n term.setDefaultLocation(atom.config.get('julia-client.uiOptions.layouts.terminal.defaultLocation'))\r\n term.open({\r\n split: atom.config.get('julia-client.uiOptions.layouts.terminal.split')\r\n }).then(() => term.show())\r\n pty.on('close', () => term.detach())\r\n }).catch((e) => console.error(e))\r\n}\r\n\r\nfunction terminalOptions () {\r\n const opts = {\r\n scrollback: atom.config.get('julia-client.consoleOptions.maximumConsoleSize'),\r\n cursorStyle: atom.config.get('julia-client.consoleOptions.cursorStyle'),\r\n rendererType: atom.config.get('julia-client.consoleOptions.terminalRendererType'),\r\n cursorBlink: atom.config.get('julia-client.consoleOptions.cursorBlink')\r\n }\r\n if (process.platform === 'darwin') {\r\n opts.macOptionIsMeta = atom.config.get('julia-client.consoleOptions.macOptionIsMeta')\r\n }\r\n return opts\r\n}\r\n\r\nfunction updateTerminalSettings () {\r\n const settings = terminalOptions()\r\n forEachPane((item) => {\r\n for (const key in settings) {\r\n item.setOption(key, settings[key])\r\n }\r\n }, /terminal\\-julia\\-\\d+|julia\\-terminal|terminal\\-remote\\-julia\\-\\d+/)\r\n}\r\n\r\nfunction forEachPane (f, id = /terminal\\-julia\\-\\d+/) {\r\n atom.workspace.getPaneItems().forEach((item) => {\r\n if (item.id && item.name === 'InkTerminal' && item.id.match(id)) {\r\n f(item)\r\n }\r\n })\r\n}\r\n\r\nfunction hasKeyboardModifier (event) {\r\n if (atom.config.get('julia-client.consoleOptions.linkModifier')) {\r\n return process.platform == 'darwin' ? event.metaKey : event.ctrlKey\r\n }\r\n return true\r\n}\r\n\r\nfunction handleLink (event, uri) {\r\n if (!hasKeyboardModifier(event)) return false\r\n\r\n if (client.isActive()) {\r\n fullpath(uri).then(([path, line]) => {\r\n ink.Opener.open(path, line - 1, {\r\n pending: atom.config.get('core.allowPendingPaneItems')\r\n })\r\n })\r\n } else {\r\n let urimatch = uri.match(/@ ([^\\s]+)\\s(.*?)\\:(\\d+)/)\r\n if (urimatch) {\r\n ink.Opener.open(urimatch[1], parseInt(urimatch[2]) - 1, {\r\n pending: atom.config.get('core.allowPendingPaneItems')\r\n })\r\n } else {\r\n const matchregex = isWindows ?\r\n /(([a-zA-Z]\\:)?[^\\:]+)(?:\\:(\\d+))?/ :\r\n /([^\\:]+)(?:\\:(\\d+))?/\r\n urimatch = uri.match(matchregex)\r\n if (urimatch) {\r\n const line = urimatch[2] !== null ? parseInt(urimatch[2]) : 0\r\n ink.Opener.open(urimatch[1], line - 1, {\r\n pending: atom.config.get('core.allowPendingPaneItems')\r\n })\r\n }\r\n }\r\n }\r\n}\r\n\r\nfunction addLinkHandler (terminal) {\r\n terminal.registerLinkMatcher(uriRegex, handleLink, {\r\n willLinkActivate: ev => hasKeyboardModifier(ev),\r\n tooltipCallback: (ev, uri, location) => showTooltip(ev, uri, location, terminal),\r\n leaveCallback: () => hideTooltip()\r\n })\r\n}\r\n\r\nlet tooltip = null\r\n\r\nfunction showTooltip (event, uri, location, terminal) {\r\n hideTooltip()\r\n\r\n if (atom.config.get('julia-client.consoleOptions.linkModifier')) {\r\n const el = document.createElement('div')\r\n el.classList.add('terminal-link-tooltip')\r\n\r\n const terminalRect = terminal.element.getBoundingClientRect()\r\n const colWidth = terminalRect.width / terminal.cols\r\n const rowHeight = terminalRect.height / terminal.rows\r\n\r\n const leftPosition = location.start.x * colWidth + terminalRect.left\r\n const topPosition = (location.start.y - 1.5) * rowHeight + terminalRect.top\r\n\r\n el.style.top = topPosition + 'px'\r\n el.style.left = leftPosition + 'px'\r\n\r\n el.innerText = (process.platform == 'darwin' ? 'Cmd' : 'Ctrl') + '-Click to open link.'\r\n\r\n tooltip = el\r\n document.body.appendChild(el)\r\n\r\n return true\r\n } else {\r\n return false\r\n }\r\n}\r\n\r\nfunction hideTooltip () {\r\n if (tooltip) {\r\n try {\r\n document.body.removeChild(tooltip)\r\n } catch (err) {\r\n\r\n } finally {\r\n tooltip = null\r\n }\r\n }\r\n}\r\n\r\nfunction handleKeybinding (e, term, binds = whitelistedKeybindingsTerminal) {\r\n if (process.platform !== 'win32' && e.keyCode === 13 && (e.altKey || e.metaKey) && e.type === 'keydown') {\r\n // Meta-Enter doesn't work properly with xterm.js atm, so we send the right escape sequence ourselves:\r\n if (term.ty) {\r\n term.ty.write('\\x1b\\x0d')\r\n }\r\n return false\r\n } else if (binds.indexOf(atom.keymaps.keystrokeForKeyboardEvent(e)) > -1) {\r\n // let certain user defined key events fall through to Atom's handler\r\n return false\r\n }\r\n return e\r\n}\r\n\r\nfunction remotePty () {\r\n return withRemoteConfig(conf => {\r\n return new Promise((resolve, reject) => {\r\n const conn = new ssh.Client()\r\n conn.on('ready', () => {\r\n conn.shell({ term: \"xterm-256color\" }, (err, stream) => {\r\n if (err) console.error(`Error while starting remote shell.`)\r\n\r\n stream.on('close', () => {\r\n conn.end()\r\n })\r\n\r\n // forward resize handling\r\n stream.resize = (cols, rows) => stream.setWindow(rows, cols, 999, 999)\r\n\r\n resolve({pty: stream, cwd: '~', conf: conf})\r\n })\r\n }).connect(conf)\r\n })\r\n })\r\n}\r\n\r\nfunction shellPty (cwd) {\r\n process.env['TERM'] = 'xterm-256color'\r\n return new Promise((resolve, reject) => {\r\n let pr\r\n if (cwd) {\r\n pr = new Promise((resolve) => resolve(cwd))\r\n } else {\r\n // show project paths\r\n pr = selector.show(atom.project.getPaths(), {\r\n emptyMessage: 'Enter a custom path above.',\r\n allowCustom: true\r\n })\r\n }\r\n pr.then((cwd) => {\r\n if (cwd) {\r\n cwd = paths.expandHome(cwd)\r\n if (!require('fs').existsSync(cwd)) {\r\n atom.notifications.addWarning(\"Path does not exist.\", {\r\n description: \"Defaulting to `HOME` for new terminal's working directory.\"\r\n })\r\n cwd = paths.home()\r\n }\r\n const env = customEnv()\r\n const ty = pty.spawn(atom.config.get(\"julia-client.consoleOptions.shell\"), [], {\r\n cols: 100,\r\n rows: 30,\r\n cwd: cwd,\r\n env: env,\r\n useConpty: true,\r\n handleFlowControl: true\r\n })\r\n resolve({\r\n pty: ty,\r\n cwd: cwd})\r\n } else {\r\n reject()\r\n }\r\n })\r\n })\r\n}\r\n\r\nexport function deactivate () {\r\n // detach node-pty process from ink terminals; necessary for updates to work cleanly\r\n forEachPane(item => item.detach(), /terminal\\-julia\\-\\d+/)\r\n // remote terminals shouldn't be serialized\r\n forEachPane(item => {\r\n item.detach()\r\n item.close()\r\n }, /terminal\\-remote\\-julia\\-\\d+/)\r\n if (terminal) terminal.detach()\r\n if (subs) subs.dispose()\r\n subs = null\r\n}\r\n","/** @babel */\r\n\r\n/**\r\n * @TODO: Custom sorting?\r\n * @TODO: Complete quotes for strings\r\n */\r\n\r\nimport { CompositeDisposable, Point, Range } from 'atom'\r\n\r\nimport { client } from '../connection'\r\nimport modules from './modules'\r\n\r\nimport { getLocalContext } from '../misc/blocks'\r\n\r\nconst bracketScope = 'meta.bracket.julia'\r\nconst baselineCompletionAdapter = client.import('completions')\r\nconst completionDetail = client.import('completiondetail')\r\n\r\nclass AutoCompleteProvider {\r\n selector = '.source.julia'\r\n disableForSelector = `.source.julia .comment`\r\n excludeLowerPriority = true\r\n inclusionPriority = 1\r\n suggestionPriority = atom.config.get('julia-client.juliaOptions.autoCompletionSuggestionPriority')\r\n filterSuggestions = false\r\n\r\n activate () {\r\n this.subscriptions = new CompositeDisposable()\r\n this.subscriptions.add(\r\n atom.config.observe('julia-client.juliaOptions.fuzzyCompletionMode', v => {\r\n this.fuzzyCompletionMode = v\r\n }),\r\n atom.config.observe('julia-client.juliaOptions.noAutoParenthesis', v => {\r\n this.noAutoParenthesis = v\r\n })\r\n )\r\n }\r\n\r\n deactivate () {\r\n this.subscriptions.dispose()\r\n }\r\n\r\n getSuggestions (data) {\r\n if (!client.isActive()) return []\r\n const { editor, bufferPosition, activatedManually } = data\r\n const { row, column } = bufferPosition\r\n const startPoint = new Point(row, 0)\r\n const endPoint = new Point(row, column)\r\n const lineRange = new Range(startPoint, endPoint)\r\n const line = editor.getTextInBufferRange(lineRange)\r\n\r\n // suppress completions if an whitespace precedes, except the special cases below\r\n // - activatedManually (i.e. an user forces completions)\r\n // - the current position is in function call: show method completions\r\n // - after `using`/`import` keyword: show package completions\r\n if (!activatedManually) {\r\n if (column === 0) return []\r\n const prevCharPosition = new Point(row, column - 1)\r\n const charRange = new Range(prevCharPosition, bufferPosition)\r\n const char = editor.getTextInBufferRange(charRange)\r\n const { scopes } = editor.scopeDescriptorForBufferPosition(bufferPosition)\r\n if (\r\n !scopes.includes(bracketScope) &&\r\n !(/\\b(import|using)\\b/.test(line)) &&\r\n char === ' '\r\n ) return []\r\n }\r\n\r\n const baselineCompletions = this.baselineCompletions(data, line)\r\n return Promise.race([baselineCompletions, this.sleep()])\r\n }\r\n\r\n baselineCompletions (data, line) {\r\n const { editor, bufferPosition: { row, column }, activatedManually } = data\r\n const { context, startRow } = getLocalContext(editor, row)\r\n return baselineCompletionAdapter({\r\n // general\r\n line,\r\n path: editor.getPath(),\r\n mod: modules.current(),\r\n // local context\r\n context,\r\n row: row + 1,\r\n startRow,\r\n column: column + 1,\r\n // configurations\r\n is_fuzzy: this.fuzzyCompletionMode,\r\n force: activatedManually || false,\r\n }).then(completions => {\r\n return completions.map(completion => {\r\n return this.toCompletion(completion)\r\n })\r\n }).catch(() => {\r\n return []\r\n })\r\n }\r\n\r\n toCompletion (completion) {\r\n const icon = this.makeIcon(completion.icon)\r\n if (icon) completion.iconHTML = icon\r\n // workaround https://github.com/atom/autocomplete-plus/issues/868\r\n if (!completion.description && completion.descriptionMoreURL) {\r\n completion.description = ' '\r\n }\r\n return completion\r\n }\r\n\r\n // should sync with atom-ink/lib/workspace/workspace.js\r\n makeIcon(icon) {\r\n // if not specified, just fallback to `completion.type`\r\n if (!icon) return ''\r\n if (icon.startsWith('icon-')) return ``\r\n return icon.length === 1 ? icon : ''\r\n }\r\n\r\n sleep () {\r\n return new Promise(resolve => {\r\n setTimeout(() => {\r\n resolve(null)\r\n }, 1000)\r\n })\r\n }\r\n\r\n getSuggestionDetailsOnSelect (_completion) {\r\n const completionWithDetail = completionDetail(_completion).then(completion => {\r\n // workaround https://github.com/atom/autocomplete-plus/issues/868\r\n if (!completion.description && completion.descriptionMoreURL) {\r\n completion.description = ' '\r\n }\r\n return completion\r\n }).catch(err => {\r\n console.log(err)\r\n })\r\n return Promise.race([completionWithDetail, this.sleep()])\r\n }\r\n\r\n onDidInsertSuggestion ({ editor, suggestion: { type } }) {\r\n if (type !== 'function' || this.noAutoParenthesis) return\r\n editor.mutateSelectedText(selection => {\r\n if (!selection.isEmpty()) return\r\n const { row, column } = selection.getBufferRange().start\r\n const currentPoint = new Point(row, column)\r\n const nextPoint = new Point(row, column + 1)\r\n const range = new Range(currentPoint, nextPoint)\r\n const finishRange = new Range(nextPoint, nextPoint)\r\n if (editor.getTextInBufferRange(range) !== '(') {\r\n selection.insertText('()')\r\n }\r\n selection.setBufferRange(finishRange)\r\n })\r\n }\r\n}\r\n\r\nexport default new AutoCompleteProvider()\r\n","\r\n\r\nimport { client } from '../connection'\r\nimport { views } from '../ui'\r\n\r\nconst { webview } = views.tags\r\n\r\nfunction consoleLog (e) {\r\n let log\r\n if (e.level === 0) {\r\n log = console.log\r\n } else if (e.level === 1) {\r\n log = console.warn\r\n } else if (e.level === 2) {\r\n log = console.error\r\n }\r\n log(e.message, `\\nat ${e.sourceID}:${e.line}`)\r\n}\r\n\r\n// https://stackoverflow.com/a/5100158/12113178\r\nfunction dataURItoBlob (dataURI) {\r\n // convert base64/URLEncoded data component to raw binary data held in a string\r\n let byteString\r\n if (dataURI.split(',')[0].indexOf('base64') >= 0)\r\n byteString = atob(dataURI.split(',')[1])\r\n else\r\n byteString = unescape(dataURI.split(',')[1])\r\n\r\n // separate out the mime component\r\n var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];\r\n\r\n // write the bytes of the string to a typed array\r\n var ia = new Uint8Array(byteString.length)\r\n for (var i = 0; i < byteString.length; i++) {\r\n ia[i] = byteString.charCodeAt(i)\r\n }\r\n\r\n return new Blob([ia], {type:mimeString})\r\n}\r\n\r\nexport default {\r\n activate () {\r\n client.handle({\r\n plot: x => this.show(x),\r\n plotsize: () => this.plotSize(),\r\n ploturl: url => this.ploturl(url),\r\n jlpane: (id, opts) => this.jlpane(id, opts)\r\n })\r\n this.create()\r\n\r\n atom.config.observe('julia-client.uiOptions.usePlotPane', enabled => {\r\n if (enabled) {\r\n return this.pane.setTitle('Plots')\r\n } else {\r\n return this.pane.setTitle('Plots (disabled)')\r\n }\r\n })\r\n\r\n return atom.config.observe('julia-client.uiOptions.layouts.plotPane.defaultLocation', defaultLocation => {\r\n this.pane.setDefaultLocation(defaultLocation)\r\n })\r\n },\r\n\r\n create () {\r\n return this.pane = this.ink.PlotPane.fromId('default')\r\n },\r\n\r\n open () {\r\n return this.pane.open({\r\n split: atom.config.get('julia-client.uiOptions.layouts.plotPane.split')})\r\n },\r\n\r\n ensureVisible () {\r\n return this.pane.ensureVisible({ split: atom.config.get('julia-client.uiOptions.layouts.plotPane.split') })\r\n },\r\n\r\n close () {\r\n return this.pane.close()\r\n },\r\n\r\n show (view) {\r\n this.ensureVisible()\r\n const v = views.render(view)\r\n this.pane.show(new this.ink.Pannable(v), {\r\n maxSize: atom.config.get('julia-client.uiOptions.maxNumberPlots')\r\n })\r\n return v\r\n },\r\n\r\n plotSize () {\r\n return this.ensureVisible().then(() => {\r\n return {\r\n size: this.pane.size(),\r\n ratio: window.devicePixelRatio\r\n }\r\n })\r\n },\r\n\r\n webview (url) {\r\n const isDataURI = url.startsWith('data')\r\n if (isDataURI) {\r\n const object = dataURItoBlob(url)\r\n url = URL.createObjectURL(object)\r\n }\r\n\r\n const v = views.render(webview({\r\n class: 'blinkjl',\r\n src: url,\r\n style: 'width: 100%; height: 100%'\r\n }))\r\n v.classList.add('native-key-bindings')\r\n v.addEventListener('console-message', e => consoleLog(e))\r\n if (isDataURI) {\r\n v.addEventListener('dom-ready', e => {\r\n URL.revokeObjectURL(url)\r\n })\r\n }\r\n return v\r\n },\r\n\r\n ploturl (url) {\r\n const v = this.webview(url)\r\n this.ensureVisible()\r\n return this.pane.show(v, {\r\n maxSize: atom.config.get('julia-client.uiOptions.maxNumberPlots')\r\n })\r\n },\r\n\r\n jlpane (id, opts) {\r\n if (opts == null) { opts = {} }\r\n let v = undefined\r\n if (opts.url) {\r\n v = this.webview(opts.url)\r\n if (opts.devtools) {\r\n v.addEventListener('dom-ready', () => {\r\n return v.openDevTools()\r\n })\r\n }\r\n }\r\n\r\n const pane = this.ink.HTMLPane.fromId(id)\r\n\r\n if (opts.close) {\r\n return pane.close()\r\n } else if (opts.destroy) {\r\n if (pane.closeAndDestroy) {\r\n return pane.closeAndDestroy()\r\n }\r\n } else {\r\n pane.show({\r\n item: v,\r\n icon: opts.icon,\r\n title: opts.title\r\n })\r\n\r\n return pane.ensureVisible({\r\n split: opts.split || atom.config.get('julia-client.uiOptions.layouts.plotPane.split')\r\n })\r\n }\r\n }\r\n}\r\n","{BrowserWindow} = require('electron').remote\r\nvm = require 'vm'\r\n\r\n{client} = require '../connection'\r\n{selector, notifications} = require '../ui'\r\n{colors} = require '../misc'\r\n\r\nmodule.exports =\r\n evalwith: (obj, code) ->\r\n vm.runInThisContext(\"(function(){return #{code}})\").call obj\r\n\r\n windows: {}\r\n\r\n activate: ->\r\n client.handle select: (items) -> selector.show items\r\n\r\n client.handle input: () -> selector.show([], {allowCustom: true})\r\n\r\n client.handle syntaxcolors: (selectors) -> colors.getColors(selectors)\r\n\r\n client.handle openFile: (file, line) => @ink?.Opener.open(file, line, {\r\n pending: atom.config.get('core.allowPendingPaneItems')\r\n })\r\n\r\n client.handle versionwarning: (msg) ->\r\n atom.notifications.addWarning \"Outdated version of Atom.jl detected.\",\r\n description: msg\r\n dismissable: true\r\n\r\n # Blink APIs\r\n\r\n client.handle\r\n createWindow: (opts) =>\r\n w = new BrowserWindow opts\r\n if opts.url?\r\n w.loadURL opts.url\r\n w.setMenu(null)\r\n wid = w.id\r\n @windows[wid] = w\r\n w.on 'close', => delete @windows[wid]\r\n return wid\r\n\r\n withWin: (id, code) =>\r\n @evalwith @windows[id], code\r\n\r\n winActive: (id) =>\r\n @windows.hasOwnProperty id\r\n\r\n notify: (msg) ->\r\n notifications.show msg, true\r\n\r\n\r\n client.onDetached =>\r\n for id, win of @windows\r\n delete @windows[id]\r\n win.close()\r\n\r\n deactivate: ->\r\n for id, win of @windows\r\n win.close()\r\n","\r\n/** @jsx etch.dom */\r\n\r\nimport { CompositeDisposable } from 'atom'\r\nimport { views } from '../ui'\r\nimport { client } from '../connection'\r\nimport connection from '../connection'\r\nimport { blocks, cells, paths } from '../misc'\r\nimport modules from './modules'\r\n\r\nimport workspace from './workspace'\r\n\r\nconst { debugfile, module: getmodule } = client.import(['debugfile', 'module'])\r\n\r\nlet active, stepper, subs, breakpoints, debuggerPane, ink\r\n\r\nconst buttonSVGs = {\r\n 'step-in': `\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n `,\r\n 'step-out': `\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n `,\r\n 'step-to-selection': `\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n `,\r\n 'step-line': `\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n `,\r\n 'step-expr': `\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n `\r\n}\r\n\r\nexport function activate (_ink) {\r\n ink = _ink\r\n const buttons = [\r\n {icon: 'playback-fast-forward', tooltip: 'Debug: Continue', command: 'julia-debug:continue', color: 'success'},\r\n {tooltip: 'Debug: Next Line', command: 'julia-debug:step-to-next-line', svg: buttonSVGs['step-line']},\r\n {tooltip: 'Debug: Step to Selected Line', command: 'julia-debug:step-to-selected-line', svg: buttonSVGs['step-to-selection']},\r\n {tooltip: 'Debug: Next Expression', command: 'julia-debug:step-to-next-expression', svg: buttonSVGs['step-expr']},\r\n {tooltip: 'Debug: Step Into', command: 'julia-debug:step-into', svg: buttonSVGs['step-in']},\r\n {tooltip: 'Debug: Step Out', command: 'julia-debug:step-out', svg: buttonSVGs['step-out']},\r\n {icon: 'x', tooltip: 'Debug: Stop Debugging', command: 'julia-debug:stop-debugging', color: 'error'},\r\n ]\r\n const startButtons = [\r\n {text: 'Run File', tooltip: 'Debug: Run File', command: 'julia-debug:run-file'},\r\n {text: 'Step Through File', tooltip: 'Debug: Step Through File', command: 'julia-debug:step-through-file'},\r\n {text: 'Run Block', tooltip: 'Debug: Run Block', command: 'julia-debug:run-block'},\r\n {text: 'Step Through Block', tooltip: 'Debug: Step Through Block', command: 'julia-debug:step-through-block'},\r\n ]\r\n stepper = new ink.Stepper({\r\n buttons: buttons,\r\n pending: !atom.config.get('julia-client.uiOptions.openNewEditorWhenDebugging')\r\n })\r\n breakpoints = new ink.breakpoints(atom.config.get('julia-client.juliaSyntaxScopes'), {\r\n toggle: toggleJuliaBP,\r\n clear: clearJulia,\r\n toggleUncaught: toggleUncaughtJulia,\r\n toggleException: toggleExceptionJulia,\r\n refresh: getBreakpoints,\r\n addArgs: addArgsJulia,\r\n toggleActive: toggleActiveJulia,\r\n toggleAllActive: toggleAllActiveJulia,\r\n addCondition: addCondition,\r\n setLevel: setLevel,\r\n toggleCompiled: toggleCompiled\r\n })\r\n debuggerPane = ink.DebuggerPane.fromId('julia-debugger-pane', stepper, breakpoints, buttons, startButtons)\r\n\r\n subs = new CompositeDisposable()\r\n subs.add(atom.config.observe('julia-client.uiOptions.layouts.debuggerPane.defaultLocation', (defaultLocation) => {\r\n debuggerPane.setDefaultLocation(defaultLocation)\r\n }))\r\n subs.add(client.onDetached(() => {\r\n debugmode(false)\r\n breakpoints.clear(true)\r\n }))\r\n}\r\n\r\nexport function deactivate() {\r\n breakpoints.destroy()\r\n subs.dispose()\r\n}\r\n\r\nexport function open () {\r\n return debuggerPane.open({\r\n split: atom.config.get('julia-client.uiOptions.layouts.debuggerPane.split')\r\n })\r\n}\r\n\r\nexport function close () {\r\n return debuggerPane.close()\r\n}\r\n\r\nfunction activeError(ev) {\r\n if (!active) {\r\n // Only show an error when toolbar button or command is used directly. `ev.originalEvent` is\r\n // a `KeyboardEvent` if this was triggered by a keystroke.\r\n if (ev.originalEvent === undefined) {\r\n atom.notifications.addError('You need to be debugging to do that.', {\r\n description: 'You can start debugging by calling `Juno.@enter f(args...)` from the integrated REPL.',\r\n dismissable: true\r\n })\r\n }\r\n return true\r\n }\r\n return false\r\n}\r\n\r\nfunction requireDebugging(ev, f) {\r\n if (activeError(ev)) {\r\n ev.abortKeyBinding()\r\n } else {\r\n f()\r\n }\r\n}\r\n\r\nfunction requireNotDebugging(f) {\r\n if (active) {\r\n atom.notifications.addError('Can\\'t start a debugging session while debugging.', {\r\n description: 'Please finish the current session first.',\r\n dismissable: true\r\n })\r\n } else {\r\n f()\r\n }\r\n}\r\n\r\nfunction debugmode(a) {\r\n active = a\r\n if (!active) {\r\n stepper.destroy()\r\n workspace.update()\r\n debuggerPane.reset()\r\n } else {\r\n debuggerPane.ensureVisible()\r\n }\r\n}\r\n\r\nclient.handle({\r\n debugmode,\r\n stepto(file, line, text, moreinfo) {\r\n stepper.step(file, line - 1, views.render(text), moreinfo)\r\n workspace.update()\r\n },\r\n working() { client.ipc.loading.working() },\r\n doneWorking() { client.ipc.loading.done() },\r\n getFileBreakpoints() {\r\n const bps = breakpoints.getFileBreakpoints()\r\n return bps.filter(bp => bp.isactive).map(bp => {\r\n return {\r\n file: bp.file,\r\n line: bp.line,\r\n condition: bp.condition\r\n }\r\n })\r\n }\r\n})\r\n\r\nexport function finish (ev) { requireDebugging(ev, () => client.import('finish')()) }\r\nexport function nextline (ev) { requireDebugging(ev, () => client.import('nextline')()) }\r\nexport function stepexpr (ev) { requireDebugging(ev, () => client.import('stepexpr')()) }\r\nexport function stepin (ev) { requireDebugging(ev, () => client.import('stepin')()) }\r\nexport function stop (ev) { requireDebugging(ev, () => client.import('stop')()) }\r\nexport function continueForward (ev) { requireDebugging(ev, () => client.import('continue')()) }\r\nexport function toselectedline (ev) {\r\n requireDebugging(ev, () => {\r\n const ed = stepper.edForFile(stepper.file)\r\n if (ed != null) {\r\n client.import('toline')(ed.getCursorBufferPosition().row + 1)\r\n }\r\n })\r\n}\r\n\r\nexport function debugFile(shouldStep, el) {\r\n requireNotDebugging(() => {\r\n if (el) {\r\n const path = paths.getPathFromTreeView(el)\r\n if (!path) {\r\n atom.notifications.addError('This file has no path.')\r\n return\r\n }\r\n try {\r\n const code = paths.readCode(path)\r\n const data = { path, code, row: 1, column: 1 }\r\n getmodule(data).then(mod => {\r\n debugfile(modules.current(mod), code, path, shouldStep)\r\n }).catch(err => {\r\n console.log(err)\r\n })\r\n } catch (err) {\r\n atom.notifications.addError('Error happened', {\r\n detail: err,\r\n dismissable: true\r\n })\r\n }\r\n } else {\r\n const ed = atom.workspace.getActiveTextEditor()\r\n if (!(ed && ed.getGrammar && ed.getGrammar().id === 'source.julia')) {\r\n atom.notifications.addError('Can\\'t debug current file.', {\r\n description: 'Please make sure a Julia file is open in the workspace.'\r\n })\r\n return\r\n }\r\n const edpath = client.editorPath(ed) || 'untitled-' + ed.getBuffer().id\r\n const mod = modules.current() || 'Main'\r\n debugfile(mod, ed.getText(), edpath, shouldStep)\r\n }\r\n })\r\n}\r\n\r\nexport function debugBlock(shouldStep, cell) {\r\n requireNotDebugging(() => {\r\n const ed = atom.workspace.getActiveTextEditor()\r\n if (!ed) {\r\n atom.notifications.addError('Can\\'t debug current code block.', {\r\n description: 'Please make sure a file is open in the workspace.'\r\n })\r\n return\r\n }\r\n const edpath = client.editorPath(ed) || 'untitled-' + ed.getBuffer().id\r\n const mod = modules.current() || 'Main'\r\n const selector = cell ? cells : blocks\r\n const blks = selector.get(ed)\r\n if (blks.length === 0) {\r\n return\r\n }\r\n const { range, text, line } = blks[0]\r\n const [[start], [end]] = range\r\n ink.highlight(ed, start, end)\r\n debugfile(mod, text, edpath, shouldStep, line)\r\n })\r\n}\r\n\r\nexport function clearbps() {\r\n connection.boot()\r\n breakpoints.clear()\r\n if (client.isActive()) client.import('clearbps')()\r\n}\r\n\r\nfunction toggleJuliaBP (item) {\r\n connection.boot()\r\n return client.import('toggleBP')(item)\r\n}\r\nfunction clearJulia () {\r\n connection.boot()\r\n return client.import('clearbps')()\r\n}\r\nfunction toggleUncaughtJulia () {\r\n connection.boot()\r\n return client.import('toggleUncaught')()\r\n}\r\nfunction toggleExceptionJulia () {\r\n connection.boot()\r\n return client.import('toggleException')()\r\n}\r\nfunction toggleCompiled () {\r\n connection.boot()\r\n return client.import('toggleCompiled')()\r\n}\r\nfunction getBreakpoints () {\r\n connection.boot()\r\n return client.import('getBreakpoints')()\r\n}\r\nfunction addArgsJulia (args) {\r\n connection.boot()\r\n return client.import('addArgs')(args)\r\n}\r\nfunction toggleAllActiveJulia (args) {\r\n connection.boot()\r\n return client.import('toggleAllActiveBP')(args)\r\n}\r\nfunction toggleActiveJulia (item) {\r\n connection.boot()\r\n return client.import('toggleActiveBP')(item)\r\n}\r\nfunction addCondition (item, cond) {\r\n connection.boot()\r\n return client.import('addConditionById')(item, cond)\r\n}\r\nfunction setLevel (level) {\r\n connection.boot()\r\n return client.import('setStackLevel')(level)\r\n}\r\n\r\nexport function togglebp (\r\n cond = false,\r\n ed = atom.workspace.getActiveTextEditor()\r\n) {\r\n if (!ed || !ed.getPath()) {\r\n atom.notifications.addError('Need a saved file to add a breakpoint')\r\n return\r\n }\r\n const file = client.editorPath(ed)\r\n ed.getCursors().map((cursor) => {\r\n const line = cursor.getBufferPosition().row + 1\r\n if (cond) {\r\n breakpoints.toggleConditionAtSourceLocation({\r\n file: file,\r\n line: line\r\n })\r\n } else {\r\n breakpoints.toggleAtSourceLocation({\r\n file: file,\r\n line: line\r\n })\r\n }\r\n })\r\n}\r\n","\r\n\r\nimport { client } from '../connection'\r\nimport { CompositeDisposable } from 'atom'\r\nimport { remote } from 'electron'\r\n\r\nlet pane, subs\r\nvar {loadProfileTrace, saveProfileTrace} = client.import({msg: ['loadProfileTrace', 'saveProfileTrace']})\r\n\r\nexport function activate (ink) {\r\n pane = ink.PlotPane.fromId('Profile')\r\n pane.getTitle = () => {return 'Profiler'}\r\n subs = new CompositeDisposable()\r\n\r\n subs.add(client.onDetached(() => clear()))\r\n subs.add(atom.config.observe('julia-client.uiOptions.layouts.profiler.defaultLocation', (defaultLocation) => {\r\n pane.setDefaultLocation(defaultLocation)\r\n }))\r\n\r\n client.handle({\r\n profile(data) {\r\n const save = (path) => saveProfileTrace(path, data)\r\n const profile = new ink.Profiler.ProfileViewer({data, save, customClass: 'julia-profile'})\r\n pane.ensureVisible({\r\n split: atom.config.get('julia-client.uiOptions.layouts.profiler.split')\r\n })\r\n pane.show(new ink.Pannable(profile, {zoomstrategy: 'width', minScale: 0.5}))\r\n }\r\n })\r\n\r\n subs.add(atom.commands.add('atom-workspace', 'julia-client:clear-profile', () => {\r\n clear()\r\n pane.close()\r\n }))\r\n\r\n subs.add(atom.commands.add('atom-workspace', 'julia-client:load-profile-trace', () => {\r\n const path = remote.dialog.showOpenDialog({title: 'Load Profile Trace', properties: ['openFile']})\r\n loadProfileTrace(path)\r\n }))\r\n}\r\n\r\nfunction clear () {\r\n pane.teardown()\r\n}\r\n\r\nexport function deactivate () {\r\n subs.dispose()\r\n}\r\n","\r\n\r\nimport { CompositeDisposable, Disposable, TextEditor } from 'atom'\r\nimport { throttle } from 'underscore-plus'\r\nimport { client } from '../connection'\r\nimport modules from './modules'\r\n\r\nconst updateeditor = client.import('updateeditor')\r\nlet pane, subs, edSubs, outline\r\n\r\nexport function activate (ink) {\r\n pane = ink.Outline.fromId('Julia-Outline')\r\n subs = new CompositeDisposable()\r\n edSubs = new CompositeDisposable()\r\n outline = []\r\n\r\n subs.add(\r\n atom.config.observe('julia-client.uiOptions.layouts.outline.defaultLocation', defaultLocation => {\r\n pane.setDefaultLocation(defaultLocation)\r\n }),\r\n atom.workspace.onDidStopChangingActivePaneItem(throttle(ed => watchEditor(ed), 300)),\r\n atom.packages.onDidActivateInitialPackages(() => watchEditor(atom.workspace.getActivePaneItem())),\r\n client.onDetached(() => {\r\n outline = []\r\n pane.setItems([])\r\n }),\r\n new Disposable(() => {\r\n outline = []\r\n pane.setItems([])\r\n if (edSubs) edSubs.dispose()\r\n })\r\n )\r\n}\r\n\r\nfunction watchEditor (ed) {\r\n if (!(ed && ed instanceof TextEditor)) return\r\n\r\n if (edSubs) edSubs.dispose()\r\n edSubs = new CompositeDisposable() // we can't repeat disposing on the same `CompositeDisposable` object\r\n\r\n if (ed.getGrammar().id !== 'source.julia') {\r\n pane.setItems([])\r\n } else {\r\n edSubs.add(\r\n ed.onDidStopChanging(throttle(() => updateEditor(ed), 300)),\r\n ed.onDidChangeCursorPosition(throttle(() => updateOutline(ed), 300))\r\n )\r\n updateEditor(ed, { updateSymbols: false })\r\n }\r\n edSubs.add(\r\n ed.onDidDestroy(() => {\r\n outline = []\r\n pane.setItems([])\r\n }),\r\n ed.onDidChangeGrammar(grammar => {\r\n watchEditor(ed)\r\n })\r\n )\r\n}\r\n\r\n// NOTE: update outline and symbols cache all in one go\r\nfunction updateEditor (ed, options = {\r\n updateSymbols: true\r\n}) {\r\n if (!client.isActive()) return new Promise(resolve => resolve([]))\r\n\r\n const text = ed.getText()\r\n const currentModule = modules.current()\r\n const mod = currentModule ? currentModule : 'Main'\r\n const path = ed.getPath() || 'untitled-' + ed.getBuffer().getId()\r\n\r\n updateeditor({\r\n text,\r\n mod,\r\n path,\r\n // https://github.com/JunoLab/Juno.jl/issues/407\r\n updateSymbols: options.updateSymbols\r\n }).then(outlineItems => {\r\n outline = handleOutline(ed, outlineItems)\r\n }).catch(err => {\r\n console.log(err);\r\n })\r\n}\r\n\r\nfunction handleOutline (ed, outlineItems) {\r\n const cursorLine = ed.getCursorBufferPosition().row + 1\r\n\r\n outlineItems = outlineItems.map(outlineItem => {\r\n outlineItem.isActive = outlineItem.start <= cursorLine && cursorLine <= outlineItem.stop\r\n outlineItem.onClick = () => {\r\n for (const pane of atom.workspace.getPanes()) {\r\n if (pane.getItems().includes(ed)) {\r\n pane.activate()\r\n pane.setActiveItem(ed)\r\n ed.setCursorBufferPosition([outlineItem.start - 1, 0])\r\n ed.scrollToCursorPosition()\r\n break\r\n }\r\n }\r\n }\r\n return outlineItem\r\n })\r\n\r\n pane.setItems(outlineItems)\r\n return outlineItems\r\n}\r\n\r\nfunction updateOutline (ed) {\r\n const cursorLine = ed.getCursorBufferPosition().row + 1\r\n outline = outline.map(item => {\r\n item.isActive = item.start <= cursorLine && cursorLine <= item.stop\r\n return item\r\n })\r\n pane.setItems(outline)\r\n}\r\n\r\nexport function open () {\r\n return pane.open({\r\n split: atom.config.get('julia-client.uiOptions.layouts.outline.split')\r\n })\r\n}\r\n\r\nexport function close () {\r\n return pane.close()\r\n}\r\n\r\nexport function deactivate () {\r\n if (subs) subs.dispose()\r\n}\r\n","\r\n\r\nimport { CompositeDisposable } from 'atom'\r\nimport { client } from '../connection'\r\n\r\nlet subs, lintPane\r\n\r\nexport function activate (ink) {\r\n const linter = ink.Linter\r\n lintPane = linter.lintPane\r\n\r\n client.handle({\r\n staticLint: (warnings) => {\r\n lintPane.ensureVisible({\r\n split: atom.config.get('julia-client.uiOptions.layouts.linter.split')\r\n })\r\n linter.setItems(warnings)\r\n }\r\n })\r\n\r\n subs = new CompositeDisposable()\r\n\r\n subs.add(atom.commands.add('.workspace', {\r\n 'julia-client:clear-linter': () => linter.clearItems()\r\n }))\r\n subs.add(atom.config.observe('julia-client.uiOptions.layouts.linter.defaultLocation', (defaultLocation) => {\r\n lintPane.setDefaultLocation(defaultLocation)\r\n }))\r\n}\r\n\r\nexport function open () {\r\n return lintPane.open({\r\n split: atom.config.get('julia-client.uiOptions.layouts.linter.split')\r\n })\r\n}\r\n\r\nexport function close () {\r\n return lintPane.close()\r\n}\r\n\r\nexport function deactivate () {\r\n if (subs) {\r\n subs.dispose()\r\n }\r\n}\r\n","\r\n\r\nimport { client } from '../connection'\r\nimport { selector } from '../ui'\r\n\r\nvar { packages } = client.import({ rpc: ['packages'] })\r\n\r\nexport function openPackage (newWindow = true) {\r\n const pkgs = packages()\r\n pkgs.then(pkgs => {\r\n const ps = []\r\n for (const pkg in pkgs) {\r\n ps.push({ primary: pkg, secondary: pkgs[pkg] })\r\n }\r\n selector.show(ps, { infoMessage: 'Select package to open' }).then( pkg => {\r\n if (pkg) {\r\n if (newWindow) {\r\n atom.open({ pathsToOpen: [pkgs[pkg.primary]]})\r\n } else {\r\n atom.project.addPath(pkgs[pkg.primary], {\r\n mustExist: true,\r\n exact: true\r\n })\r\n }\r\n }\r\n })\r\n }).catch(() => {\r\n atom.notifications.addError(\"Couldn't find your Julia packages.\")\r\n })\r\n}\r\n","\r\n\r\nimport { client } from '../connection'\r\n\r\nconst { reportinfo } = client.import(['reportinfo'])\r\n\r\nexport default function debuginfo () {\r\n let atomReport = `# Atom:\r\nVersion: ${atom.getVersion()}\r\nDev Mode: ${atom.inDevMode()}\r\nOfficial Release: ${atom.isReleasedVersion()}\r\n${JSON.stringify(process.versions, null, 2)}\r\n`\r\n const atomPkgs = ['julia-client', 'ink', 'uber-juno', 'language-julia', 'language-weave',\r\n 'indent-detective', 'latex-completions']\r\n atomPkgs.forEach((pkg, ind) => {\r\n atomReport += '# ' + atomPkgs[ind] + ':'\r\n let activePkg = atom.packages.getActivePackage(pkg)\r\n if (activePkg) {\r\n atomReport +=\r\n `\r\nVersion: ${activePkg.metadata.version}\r\nConfig:\r\n${JSON.stringify(activePkg.config.settings[pkg], null, 2)}\r\n`\r\n } else {\r\n atomReport += 'not installed\\n'\r\n }\r\n atomReport += '\\n\\n'\r\n })\r\n\r\n reportinfo().then(info => {\r\n atomReport += \"# versioninfo():\\n\"\r\n atomReport += info\r\n showNotification(atomReport)\r\n }).catch(err => {\r\n atomReport += 'Could not connect to Julia.'\r\n showNotification(atomReport)\r\n })\r\n}\r\n\r\nfunction showNotification (atomReport) {\r\n atom.notifications.addInfo('Juno Debug Info', {\r\n description: 'Please provide the info above when you report an issue. ' +\r\n 'Make sure to strip it of any kind of sensitive info you might ' +\r\n 'not want to share.',\r\n detail: atomReport,\r\n dismissable: true,\r\n buttons: [\r\n {\r\n text: 'Copy to Clipboard',\r\n onDidClick: () => {\r\n atom.clipboard.write(atomReport)\r\n }\r\n }\r\n ]\r\n })\r\n}\r\n","/** @babel */\r\n\r\nimport path from 'path'\r\nimport { client } from '../connection'\r\nimport { CompositeDisposable } from 'atom'\r\n\r\nconst format = client.import('format')\r\n\r\nexport function formatCode () {\r\n const editor = atom.workspace.getActiveTextEditor()\r\n if (!editor) return\r\n\r\n const selections = editor.getSelections()\r\n if (selections.length === 1 && !selections[0].getText()) {\r\n formatEditor(editor)\r\n } else {\r\n selections.forEach((selection) => {\r\n formatEditorWithSelection(editor, selection)\r\n })\r\n }\r\n}\r\n\r\nfunction formatEditor (editor) {\r\n const range = editor.getBuffer().getRange()\r\n return formatEditorTextInRange(editor, range, editor.getText())\r\n}\r\n\r\nfunction formatEditorWithSelection (editor, selection) {\r\n const range = selection.getBufferRange()\r\n return formatEditorTextInRange(editor, range, selection.getText())\r\n}\r\n\r\nfunction formatEditorTextInRange (editor, range, text) {\r\n const dir = path.dirname(client.editorPath(editor))\r\n const marker = markRange(editor, range)\r\n // NOTE: Branch on `getSoftTabs` if supported by formatter.\r\n const indent = editor.getTabLength()\r\n const margin = editor.getPreferredLineLength()\r\n format({\r\n text,\r\n dir,\r\n indent,\r\n margin,\r\n }).then(({ error, formattedtext }) => {\r\n if (error) {\r\n atom.notifications.addError('Julia-Client: Format-Code', {\r\n description: error,\r\n dismissable: true\r\n })\r\n } else {\r\n if (marker.isValid()) {\r\n editor.setTextInBufferRange(marker.getBufferRange(), formattedtext)\r\n } else {\r\n atom.notifications.addError('Julia-Client: Format-Code', {\r\n description: 'Cancelled the formatting task because the selected code has been manually modified.',\r\n dismissable: true\r\n })\r\n }\r\n }\r\n }).catch(err => {\r\n console.log(err)\r\n }).finally(() => {\r\n marker.destroy()\r\n })\r\n}\r\n\r\nfunction markRange(editor, range) {\r\n const marker = editor.markBufferRange(range, {\r\n invalidate: 'inside'\r\n })\r\n editor.decorateMarker(marker, {\r\n type: 'highlight',\r\n class: 'ink-block'\r\n })\r\n return marker\r\n}\r\n\r\nlet subs\r\n\r\nexport function activate() {\r\n subs = new CompositeDisposable()\r\n const edWatch = new WeakSet()\r\n\r\n subs.add(atom.workspace.observeTextEditors(ed => {\r\n edWatch.add(ed)\r\n // use onDidSave instead of onWillSave to guarantee our formatter is the last to run:\r\n const edsub = ed.getBuffer().onDidSave(() => {\r\n if (ed && ed.getGrammar && ed.getGrammar().id === 'source.julia') {\r\n if (client.isActive() && edWatch.has(ed)) {\r\n formatEditor(ed).then(() => {\r\n edWatch.delete(ed)\r\n ed.save().then(() => {\r\n edWatch.add(ed)\r\n }).catch(err => {\r\n console.log(err)\r\n })\r\n }).catch(err => {\r\n console.log(err)\r\n })\r\n }\r\n }\r\n })\r\n subs.add(edsub)\r\n\r\n subs.add(ed.onDidDestroy(() => {\r\n edsub.dispose()\r\n }))\r\n }))\r\n}\r\n\r\nexport function deactivate() {\r\n subs && subs.dispose && subs.dispose()\r\n}\r\n","{ CompositeDisposable, Disposable } = require 'atom'\r\n\r\nmodule.exports =\r\n modules: require './runtime/modules'\r\n evaluation: require './runtime/evaluation'\r\n console: require './runtime/console'\r\n completions: require './runtime/completions'\r\n workspace: require './runtime/workspace'\r\n plots: require './runtime/plots'\r\n frontend: require './runtime/frontend'\r\n debugger: require './runtime/debugger'\r\n profiler: require './runtime/profiler'\r\n outline: require './runtime/outline'\r\n linter: require './runtime/linter'\r\n packages: require './runtime/packages'\r\n debuginfo: require './runtime/debuginfo'\r\n formatter: require './runtime/formatter'\r\n goto: require './runtime/goto'\r\n\r\n activate: ->\r\n @subs = new CompositeDisposable()\r\n\r\n @modules.activate()\r\n @completions.activate()\r\n @frontend.activate()\r\n @subs.add atom.config.observe 'julia-client.juliaOptions.formatOnSave', (val) =>\r\n if val\r\n @formatter.activate()\r\n else\r\n @formatter.deactivate()\r\n\r\n @subs.add new Disposable(=>\r\n mod.deactivate() for mod in [@modules, @completions, @frontend, @formatter])\r\n\r\n deactivate: ->\r\n @subs.dispose()\r\n\r\n consumeInk: (ink) ->\r\n @evaluation.ink = ink\r\n @frontend.ink = ink\r\n for mod in [@console, @debugger, @profiler, @linter, @goto, @outline]\r\n mod.activate(ink)\r\n for mod in [@workspace, @plots]\r\n mod.ink = ink\r\n mod.activate()\r\n @subs.add new Disposable(=>\r\n mod.deactivate() for mod in [@console, @debugger, @profiler, @linter, @goto, @outline])\r\n\r\n provideAutoComplete: -> @completions\r\n\r\n provideHyperclick: -> @goto.provideHyperclick()\r\n\r\n consumeStatusBar: (bar) ->\r\n @modules.consumeStatusBar bar\r\n\r\n consumeDatatip: (datatipService) ->\r\n datatipProvider = require './runtime/datatip'\r\n # @NOTE: Check if the service is passed by Atom-IDE-UI's datatip service:\r\n # currently atom-ide-datatip can't render code snippets correctly.\r\n if datatipService.constructor.name == 'DatatipManager'\r\n datatipProvider.useAtomIDEUI = true\r\n else\r\n # @NOTE: Overwrite the weird default config settings of atom-ide-datatip\r\n atom.config.set 'atom-ide-datatip',\r\n showDataTipOnCursorMove: false\r\n showDataTipOnMouseMove: true\r\n datatipDisposable = datatipService.addProvider(datatipProvider)\r\n @subs.add(datatipDisposable)\r\n datatipDisposable\r\n\r\n handleURI: require './runtime/urihandler'\r\n","/** @babel */\r\n\r\n/**\r\n * @FIXME?\r\n * Use `component` property instaed of `markedStrings` and reuse exisiting our full-featured\r\n * components in ../ui/views.coffee.\r\n * Code in https://github.com/TypeStrong/atom-typescript/blob/master/dist/main/atom-ide/datatipProvider.js\r\n * can be helpful.\r\n */\r\n\r\nimport { client } from '../connection'\r\nimport modules from './modules'\r\nimport { isValidScopeToInspect } from '../misc/scopes'\r\nimport {\r\n getWordAndRange,\r\n getWordRangeWithoutTrailingDots,\r\n isValidWordToInspect\r\n} from '../misc/words'\r\nimport { getLocalContext } from '../misc/blocks'\r\n\r\nconst datatip = client.import('datatip')\r\n\r\nconst grammar = atom.grammars.grammarForScopeName('source.julia')\r\n\r\nclass DatatipProvider {\r\n providerName = 'julia-client-datatip-provider'\r\n\r\n priority = 100\r\n\r\n grammarScopes = atom.config.get('julia-client.juliaSyntaxScopes')\r\n\r\n useAtomIDEUI = false\r\n\r\n async datatip(editor, bufferPosition) {\r\n // If Julia is not running, do nothing\r\n if (!client.isActive()) return\r\n\r\n // If the scope at `bufferPosition` is not valid code scope, do nothing\r\n if (!isValidScopeToInspect(editor, bufferPosition)) return\r\n\r\n // get word without trailing dot accessors at the buffer position\r\n let { range, word } = getWordAndRange(editor, {\r\n bufferPosition\r\n })\r\n range = getWordRangeWithoutTrailingDots(word, range, bufferPosition)\r\n word = editor.getTextInBufferRange(range)\r\n\r\n // check the validity of code to be inspected\r\n if (!(isValidWordToInspect(word))) return\r\n\r\n const { main, sub } = await modules.getEditorModule(editor, bufferPosition)\r\n const mod = main ? (sub ? `${main}.${sub}` : main) : 'Main'\r\n\r\n const { column, row } = bufferPosition\r\n const { context, startRow } = getLocalContext(editor, row)\r\n\r\n try {\r\n const result = await datatip({\r\n word,\r\n mod,\r\n path: editor.getPath(),\r\n column: column + 1,\r\n row: row + 1,\r\n startRow,\r\n context\r\n })\r\n if (result.error) return\r\n if (this.useAtomIDEUI) {\r\n if (result.line) {\r\n const value = editor.lineTextForBufferRow(result.line).trim()\r\n return {\r\n range,\r\n markedStrings: [{\r\n type: 'snippet',\r\n value,\r\n grammar\r\n }]\r\n }\r\n } else if (result.strings) {\r\n return {\r\n range,\r\n markedStrings: result.strings.map(string => {\r\n return {\r\n type: string.type,\r\n value: string.value,\r\n grammar: string.type === 'snippet' ? grammar : null\r\n }\r\n })\r\n }\r\n }\r\n } else {\r\n if (result.line) {\r\n const value = editor.lineTextForBufferRow(result.line).trim()\r\n return {\r\n range,\r\n markedStrings: [{\r\n type: 'snippet',\r\n value,\r\n grammar\r\n }]\r\n }\r\n } else if (result.strings) {\r\n // @NOTE: atom-ide-datatip can't render multiple `snippet`s in `markedStrings` correctly\r\n return {\r\n range,\r\n markedStrings: result.strings.map(string => {\r\n return {\r\n type: 'markdown',\r\n value: string.type === 'snippet' ? `\\`\\`\\`julia\\n${string.value}\\n\\`\\`\\`` : string.value,\r\n grammar: string.type === 'snippet' ? grammar : null\r\n }\r\n })\r\n }\r\n }\r\n }\r\n } catch (error) {\r\n return\r\n }\r\n }\r\n}\r\n\r\nexport default new DatatipProvider()\r\n","\r\n\r\nimport { client } from '../connection'\r\nimport { docpane, views } from '../ui'\r\n\r\nconst { moduleinfo } = client.import({ rpc: ['moduleinfo'] })\r\nconst docs = client.import('docs')\r\n\r\nexport default function handleURI (parsedURI) {\r\n const { query } = parsedURI\r\n\r\n if (query.open) { // open a file\r\n atom.workspace.open(query.file, {\r\n initialLine: Number(query.line),\r\n pending: atom.config.get('core.allowPendingPaneItems')\r\n })\r\n } else if (query.docs) { // show docs\r\n const { word, mod } = query\r\n docs({ word, mod }).then(result => {\r\n if (result.error) return\r\n const view = views.render(result)\r\n docpane.processLinks(view.getElementsByTagName('a'))\r\n docpane.ensureVisible()\r\n docpane.showDocument(view, [])\r\n }).catch(err => {\r\n console.log(err)\r\n })\r\n } else if (query.moduleinfo){ // show module info\r\n const { mod } = query\r\n moduleinfo({ mod }).then(({ doc, items }) => {\r\n items.map(item => {\r\n docpane.processItem(item)\r\n })\r\n const view = views.render(doc)\r\n docpane.ensureVisible()\r\n docpane.showDocument(view, items)\r\n }).catch(err => {\r\n console.log(err)\r\n })\r\n }\r\n}\r\n","\r\n\r\nconst repl = () => {\r\n return require('../runtime').console\r\n}\r\nconst workspace = () => {\r\n return require('../runtime').workspace\r\n}\r\nconst documentation = () => {\r\n return require('../ui').docpane\r\n}\r\nconst plotPane = () => {\r\n return require('../runtime').plots\r\n}\r\nconst debuggerPane = () => {\r\n return require('../runtime').debugger\r\n}\r\nconst linter = () => {\r\n return require('../runtime').linter\r\n}\r\nconst outline = () => {\r\n return require('../runtime').outline\r\n}\r\n\r\nfunction specifiedPanes () {\r\n const panes = []\r\n // @NOTE: Push panes in order of their 'importance': Refer to function `openPanesHelper` for why\r\n if (atom.config.get('julia-client.uiOptions.layouts.defaultPanes.console')) panes.push(repl)\r\n if (atom.config.get('julia-client.uiOptions.layouts.defaultPanes.workspace')) panes.push(workspace)\r\n if (atom.config.get('julia-client.uiOptions.layouts.defaultPanes.documentation')) panes.push(documentation)\r\n if (atom.config.get('julia-client.uiOptions.layouts.defaultPanes.plotPane')) panes.push(plotPane)\r\n if (atom.config.get('julia-client.uiOptions.layouts.defaultPanes.debuggerPane')) panes.push(debuggerPane)\r\n if (atom.config.get('julia-client.uiOptions.layouts.defaultPanes.linter')) panes.push(linter)\r\n if (atom.config.get('julia-client.uiOptions.layouts.defaultPanes.outline')) panes.push(outline)\r\n\r\n return panes\r\n}\r\n\r\nexport function closePromises () {\r\n // Close only specified panes, i.e.: non-specified panes won't be closed/opened\r\n const panes = specifiedPanes()\r\n\r\n const promises = panes.map(pane => {\r\n return pane().close()\r\n })\r\n\r\n return promises\r\n}\r\n\r\nfunction bundlePanes () {\r\n const containers = []\r\n containers.push(atom.workspace.getCenter())\r\n containers.push(atom.workspace.getLeftDock())\r\n containers.push(atom.workspace.getBottomDock())\r\n containers.push(atom.workspace.getRightDock())\r\n\r\n containers.forEach(container => {\r\n const panes = container.getPanes()\r\n const firstPane = panes[0]\r\n const otherPanes = panes.slice(1)\r\n otherPanes.forEach(pane => {\r\n const items = pane.getItems()\r\n items.forEach(item => {\r\n pane.moveItemToPane(item, firstPane)\r\n })\r\n })\r\n })\r\n}\r\n\r\nfunction openPanes () {\r\n const panes = specifiedPanes()\r\n\r\n openPanesHelper(panes)\r\n}\r\n\r\nfunction openPanesHelper (panes) {\r\n if (panes.length === 0) {\r\n // If there is no more pane to be opened, activate the first item in each pane. This works since\r\n // Juno-panes are opened in order of their importance as defined in `specifiedPanes` function\r\n atom.workspace.getPanes().forEach(pane => {\r\n pane.activateItemAtIndex(0)\r\n })\r\n // Activate `WorkspaceCenter` at last\r\n atom.workspace.getCenter().activate()\r\n return\r\n }\r\n\r\n const pane = panes.shift()\r\n pane().open().catch((err) => {\r\n // @FIXME: This is a temporal remedy for https://github.com/JunoLab/atom-julia-client/pull/561#issuecomment-500150318\r\n console.error(err)\r\n pane().open()\r\n }).finally(() => {\r\n // Re-focus the previously focused pane (i.e. the bundled pane by `bundlePanes`) after each opening\r\n // This prevents opening multiple panes with the same splitting rule in a same location from\r\n // ending up in a funny state\r\n const container = atom.workspace.getActivePaneContainer()\r\n container.activatePreviousPane()\r\n openPanesHelper(panes)\r\n })\r\n}\r\n\r\nexport function restoreDefaultLayout () {\r\n // Close Juno-specific panes first to reset to default layout\r\n Promise.all(closePromises()).then(() => {\r\n\r\n // Simplify layouts in each container to prevent funny splitting\r\n bundlePanes()\r\n\r\n // Open Juno-specific panes again\r\n openPanes()\r\n })\r\n}\r\n\r\nexport function resetDefaultLayoutSettings () {\r\n const onStartup = atom.config.get('julia-client.uiOptions.layouts.openDefaultPanesOnStartUp')\r\n atom.config.unset('julia-client.uiOptions.layouts')\r\n atom.config.set('julia-client.uiOptions.layouts.openDefaultPanesOnStartUp', onStartup)\r\n}\r\n\r\nexport function queryDefaultLayout () {\r\n const message = atom.notifications.addInfo('Julia-Client: Open Juno-specific panes on startup ?', {\r\n buttons: [\r\n {\r\n text: 'Yes',\r\n onDidClick: () => {\r\n restoreDefaultLayout()\r\n message.dismiss()\r\n atom.config.set('julia-client.firstBoot', false)\r\n atom.config.set('julia-client.uiOptions.layouts.openDefaultPanesOnStartUp', true)\r\n }\r\n },\r\n {\r\n text: 'No',\r\n onDidClick: () => {\r\n message.dismiss()\r\n atom.config.set('julia-client.firstBoot', false)\r\n atom.config.set('julia-client.uiOptions.layouts.openDefaultPanesOnStartUp', false)\r\n }\r\n }\r\n ],\r\n description:\r\n `You can specify the panes to be opened and their _default location_ and _splitting rule_ in\r\n **\\`Packages -> Juno -> Settings -> Julia-Client -> UI Options -> Layout Options\\`**.\r\n \\`Julia-Client: Restore-Default-Layout\\` command will restore the layout at later point in time.\r\n Use \\`Julia-Client: Reset-Default-Layout-Settings\\` command to reset the layout settings if it gets messed up.`,\r\n dismissable: true\r\n })\r\n}\r\n","\r\n\r\nimport {TextEditor, CompositeDisposable} from 'atom'\r\n\r\nlet lastEditor\r\nlet lastTerminal\r\nlet subs\r\n\r\nclass FocusHistory {\r\n constructor (size) {\r\n this.size = size\r\n this.history = []\r\n this.openedItem = undefined\r\n }\r\n\r\n push (item) {\r\n if (this.openedItem &&\r\n this.openedItem.file &&\r\n this.openedItem.line &&\r\n item.file == this.openedItem.file &&\r\n item.line == this.openedItem.line) {\r\n return\r\n }\r\n\r\n this.history.push(item)\r\n while (this.history.length > this.size) {\r\n this.history.shift()\r\n }\r\n return\r\n }\r\n\r\n moveBack () {\r\n const item = this.history.pop()\r\n if (item && item.open) {\r\n const activeItem = atom.workspace.getActivePaneItem()\r\n if (activeItem instanceof TextEditor) {\r\n const file = activeItem.getPath() || 'untitled-' + activeItem.buffer.getId()\r\n const line = activeItem.getCursorBufferPosition().row\r\n this.openedItem = {file, line}\r\n }\r\n item.open()\r\n }\r\n }\r\n}\r\n\r\nexport function activate (ink) {\r\n subs = new CompositeDisposable()\r\n\r\n subs.add(\r\n atom.workspace.onDidStopChangingActivePaneItem(item => {\r\n if (item instanceof TextEditor) {\r\n lastEditor = item\r\n } else if (item instanceof ink.InkTerminal) {\r\n lastTerminal = item\r\n }\r\n }),\r\n atom.packages.onDidActivateInitialPackages(() => {\r\n lastEditor = atom.workspace.getActiveTextEditor()\r\n atom.workspace.getPanes().forEach(pane => {\r\n const item = pane.getActiveItem()\r\n if (item instanceof ink.InkTerminal) {\r\n lastTerminal = item\r\n }\r\n })\r\n })\r\n )\r\n\r\n const history = new FocusHistory(30)\r\n ink.Opener.onDidOpen(({newLocation, oldLocation}) => {\r\n if (oldLocation) history.push(oldLocation)\r\n })\r\n\r\n subs.add(atom.commands.add('atom-workspace', {\r\n 'julia-client:focus-last-editor': () => focusLastEditor(),\r\n 'julia-client:focus-last-terminal': () => focusLastTerminal(),\r\n 'julia-client:return-from-goto': () => history.moveBack()\r\n }))\r\n}\r\n\r\nexport function deactivate () {\r\n lastEditor = null\r\n lastTerminal = null\r\n subs.dispose()\r\n subs = null\r\n}\r\n\r\nfunction focusLastEditor () {\r\n const pane = atom.workspace.paneForItem(lastEditor)\r\n if (pane) {\r\n pane.activate()\r\n pane.activateItem(lastEditor)\r\n }\r\n}\r\n\r\nfunction focusLastTerminal () {\r\n if (lastTerminal && lastTerminal.open) lastTerminal.open()\r\n}\r\n","\r\n\r\nimport { getRange } from '../misc/cells'\r\nimport { CompositeDisposable } from 'atom'\r\nimport { getLine } from '../misc/blocks.js'\r\n\r\nlet subs\r\nlet edSubs\r\nlet marker\r\nlet borders = []\r\n\r\nexport function activate () {\r\n subs = new CompositeDisposable()\r\n edSubs = new CompositeDisposable()\r\n\r\n subs.add(atom.workspace.observeActiveTextEditor(ed => {\r\n if (ed && ed.getGrammar && ed.getGrammar().id === 'source.julia') {\r\n if (edSubs && edSubs.dispose) {\r\n edSubs.dispose()\r\n edSubs = new CompositeDisposable()\r\n }\r\n borders = highlightCellBorders(ed, borders)\r\n\r\n marker = highlightCurrentCell(ed, marker, borders)\r\n\r\n edSubs.add(ed.onDidChangeCursorPosition(ev => {\r\n marker = highlightCurrentCell(ed, marker, borders)\r\n }))\r\n\r\n edSubs.add(ed.onDidStopChanging(() => {\r\n borders = highlightCellBorders(ed, borders)\r\n marker = highlightCurrentCell(ed, marker, borders)\r\n }))\r\n\r\n edSubs.add(ed.onDidDestroy(() => {\r\n marker && marker.destroy && marker.destroy()\r\n borders.forEach(m => m.destroy())\r\n edSubs.dispose()\r\n }))\r\n\r\n edSubs.add(ed.onDidChangeGrammar((grammar) => {\r\n marker && marker.destroy && marker.destroy()\r\n borders.forEach(m => m.destroy())\r\n\r\n if (ed.getGrammar().id == 'source.julia') {\r\n borders = highlightCellBorders(ed, borders)\r\n marker = highlightCurrentCell(ed, marker, borders)\r\n }\r\n }))\r\n }\r\n }))\r\n}\r\n\r\nfunction highlightCurrentCell (ed, marker, borders) {\r\n if (borders.length === 0) {\r\n marker && marker.destroy && marker.destroy()\r\n return null\r\n }\r\n\r\n const range = getRange(ed)\r\n\r\n range[1].row +=1\r\n range[1].column = 0\r\n\r\n if (marker && marker.destroy) {\r\n const mrange = marker.getBufferRange()\r\n if (mrange.start.row == range[0].row &&\r\n mrange.end.row == range[1].row) {\r\n return marker\r\n } else {\r\n marker.destroy()\r\n }\r\n }\r\n\r\n marker = ed.markBufferRange(range)\r\n ed.decorateMarker(marker, {\r\n type: 'line-number',\r\n class: 'julia-current-cell'\r\n })\r\n ed.decorateMarker(marker, {\r\n type: 'line',\r\n class: 'julia-current-cell'\r\n })\r\n\r\n return marker\r\n}\r\n\r\nfunction highlightCellBorders (ed, borders) {\r\n borders.forEach(m => m.destroy())\r\n\r\n const regexString = '^(' + atom.config.get('julia-client.uiOptions.cellDelimiter').join('|') + ')'\r\n const regex = new RegExp(regexString)\r\n\r\n const buffer = ed.getBuffer()\r\n\r\n borders = []\r\n\r\n for (let i = 0; i <= buffer.getEndPosition().row; i++) {\r\n const { line, scope } = getLine(ed, i)\r\n if (regex.test(line) && scope.join('.').indexOf('comment.line') > -1) {\r\n const m = ed.markBufferRange([[i, 0], [i, Infinity]])\r\n ed.decorateMarker(m, {\r\n type: 'line',\r\n class: 'julia-cell-border'\r\n })\r\n borders.push(m)\r\n }\r\n }\r\n\r\n return borders\r\n}\r\n\r\nfunction destroyMarkers () {\r\n marker && marker.destroy && marker.destroy()\r\n borders.forEach(m => m.destroy())\r\n marker = null\r\n borders = []\r\n}\r\n\r\nexport function deactivate () {\r\n destroyMarkers()\r\n subs && subs.dispose && subs.dispose()\r\n edSubs && edSubs.dispose && edSubs.dispose()\r\n}\r\n","{CompositeDisposable, Disposable} = require 'atom'\r\n\r\nmodule.exports =\r\n notifications: require './ui/notifications'\r\n selector: require './ui/selector'\r\n views: require './ui/views'\r\n progress: require './ui/progress'\r\n layout: require './ui/layout'\r\n docpane: require './ui/docs'\r\n focusutils: require './ui/focusutils'\r\n cellhighlighter: require './ui/cellhighlighter'\r\n\r\n activate: (@client) ->\r\n @subs = new CompositeDisposable\r\n\r\n @notifications.activate()\r\n @subs.add atom.config.observe 'julia-client.uiOptions.highlightCells', (val) =>\r\n if val\r\n @cellhighlighter.activate()\r\n else\r\n @cellhighlighter.deactivate()\r\n @subs.add new Disposable =>\r\n @cellhighlighter.deactivate()\r\n\r\n @subs.add @client.onAttached =>\r\n @notifications.show(\"Client Connected\")\r\n @subs.add @client.onDetached =>\r\n @ink?.Result.invalidateAll()\r\n\r\n deactivate: ->\r\n @subs.dispose()\r\n\r\n consumeInk: (@ink) ->\r\n @views.ink = @ink\r\n @progress.ink = @ink\r\n @selector.activate(@ink)\r\n @docpane.activate(@ink)\r\n @progress.activate()\r\n @focusutils.activate(@ink)\r\n @subs.add(new Disposable(=>\r\n @docpane.deactivate()\r\n @progress.deactivate()\r\n @focusutils.deactivate()))\r\n","etch = require 'etch'\r\n\r\ncommands = require './package/commands'\r\nconfig = require './package/config'\r\nmenu = require './package/menu'\r\nsettings = require './package/settings'\r\ntoolbar = require './package/toolbar'\r\nsemver = require 'semver'\r\n\r\n# TODO: Update me when tagging a new relase:\r\nINK_VERSION_COMPAT = \"^0.12.3\"\r\n\r\nINK_LINK = '[`ink`](https://github.com/JunoLab/atom-ink)'\r\nLANGUAGE_JULIA_LINK = '[`language-julia`](https://github.com/JuliaEditorSupport/atom-language-julia)'\r\n\r\nmodule.exports = JuliaClient =\r\n misc: require './misc'\r\n ui: require './ui'\r\n connection: require './connection'\r\n runtime: require './runtime'\r\n\r\n activate: (state) ->\r\n etch.setScheduler(atom.views)\r\n process.env['TERM'] = 'xterm-256color'\r\n commands.activate @\r\n x.activate() for x in [menu, @connection, @runtime]\r\n @ui.activate @connection.client\r\n\r\n @requireDeps =>\r\n settings.updateSettings()\r\n\r\n if atom.config.get('julia-client.firstBoot')\r\n @ui.layout.queryDefaultLayout()\r\n else\r\n if atom.config.get('julia-client.uiOptions.layouts.openDefaultPanesOnStartUp')\r\n setTimeout (=> @ui.layout.restoreDefaultLayout()), 150\r\n\r\n requireDeps: (fn) ->\r\n isLoaded = atom.packages.isPackageLoaded(\"ink\") and atom.packages.isPackageLoaded(\"language-julia\")\r\n\r\n if isLoaded\r\n fn()\r\n else\r\n require('atom-package-deps').install('julia-client')\r\n .then => @enableDeps fn\r\n .catch (err) ->\r\n console.error err\r\n atom.notifications.addError 'Installing Juno\\'s dependencies failed.',\r\n description:\r\n \"\"\"\r\n Juno requires the packages #{INK_LINK} and #{LANGUAGE_JULIA_LINK} to run.\r\n Please install them manually via `File -> Settings -> Packages`,\r\n or open a terminal and run\r\n\r\n apm install ink\r\n apm install language-julia\r\n\r\n and then restart Atom.\r\n \"\"\"\r\n dismissable: true\r\n\r\n enableDeps: (fn) ->\r\n isEnabled = atom.packages.isPackageLoaded(\"ink\") and atom.packages.isPackageLoaded(\"language-julia\")\r\n\r\n if isEnabled\r\n fn()\r\n else\r\n atom.packages.enablePackage('ink')\r\n atom.packages.enablePackage('language-julia')\r\n\r\n if atom.packages.isPackageLoaded(\"ink\") and atom.packages.isPackageLoaded(\"language-julia\")\r\n atom.notifications.addSuccess \"Automatically enabled Juno's dependencies.\",\r\n description:\r\n \"\"\"\r\n Juno requires the #{INK_LINK} and #{LANGUAGE_JULIA_LINK} packages.\r\n We've automatically enabled them for you.\r\n \"\"\"\r\n dismissable: true\r\n\r\n inkVersion = atom.packages.loadedPackages[\"ink\"].metadata.version\r\n if not atom.devMode and not semver.satisfies(inkVersion, INK_VERSION_COMPAT)\r\n atom.notifications.addWarning \"Potentially incompatible `ink` version detected.\",\r\n description:\r\n \"\"\"\r\n Please make sure to upgrade #{INK_LINK} to a version compatible with `#{INK_VERSION_COMPAT}`.\r\n The currently installed version is `#{inkVersion}`.\r\n\r\n If you cannot install an appropriate version via via `File -> Settings -> Packages`,\r\n open a terminal and run\r\n\r\n apm install ink@x.y.z\r\n\r\n where `x.y.z` is satisfies `#{INK_VERSION_COMPAT}`.\r\n \"\"\"\r\n dismissable: true\r\n\r\n fn()\r\n else\r\n atom.notifications.addError \"Failed to enable Juno's dependencies.\",\r\n description:\r\n \"\"\"\r\n Juno requires the #{INK_LINK} and #{LANGUAGE_JULIA_LINK} packages.\r\n Please install them manually via `File -> Settings -> Packages`,\r\n or open a terminal and run\r\n\r\n apm install ink\r\n apm install language-julia\r\n\r\n and then restart Atom.\r\n \"\"\"\r\n dismissable: true\r\n\r\n config: config\r\n\r\n deactivate: ->\r\n x.deactivate() for x in [commands, menu, toolbar, @connection, @runtime, @ui]\r\n\r\n consumeInk: (ink) ->\r\n commands.ink = ink\r\n x.consumeInk ink for x in [@connection, @runtime, @ui]\r\n\r\n consumeStatusBar: (bar) -> @runtime.consumeStatusBar bar\r\n\r\n consumeToolBar: (bar) -> toolbar.consumeToolBar bar\r\n\r\n consumeGetServerConfig: (conf) -> @connection.consumeGetServerConfig(conf)\r\n\r\n consumeGetServerName: (name) -> @connection.consumeGetServerName(name)\r\n\r\n consumeDatatip: (datatipService) -> @runtime.consumeDatatip datatipService\r\n\r\n provideClient: -> @connection.client\r\n\r\n provideAutoComplete: -> @runtime.provideAutoComplete()\r\n\r\n provideHyperclick: -> @runtime.provideHyperclick()\r\n\r\n handleURI: (parsedURI) -> @runtime.handleURI parsedURI\r\n"],"names":["getEmbeddedScope","cursor","targetScope","getScopeDescriptor","scopes","scope","startsWith","getCurrentCellRange","ed","start","getBufferRow","end","scopeDescriptorForBufferPosition","indexOf","getLastBufferRow","Infinity","getCursorCellRanges","ranges","getCursors","range","push","moveNext","endRow","setBufferPosition","movePrev","startRow","get","length","processedRanges","text","getTextInBufferRange","selection","getSelections","line","lines","getText","split","N","getLineCount","code","i","juliaScopes","openers","reopeners","isStringScope","isString","isInterp","forLines","editor","startPoint","Point","endPoint","juliaGrammar","atom","grammars","grammarForScopeName","undefined","n_parens","n_brackets","tokenizeLines","forEach","lineTokens","token","value","splice","lastIndexOf","slice","some","isKeywordScope","reopen","includes","pop","forRange","Range","isCommentScope","isValidScopeToInspect","bufferPosition","getScopesArray","getLine","l","isBlank","allowDocstrings","s","test","isEnd","isStringEnd","join","isStart","lineInfo","match","walkForward","mark","getRange","row","walkBack","getSelection","sel","getBufferRange","column","getLocalContext","context","last","setBufferRange","insertText","to","map","isEmpty","getHeadBufferPosition","filter","trim","getRanges","workspace","getActiveTextEditor","mutateSelectedText","buffer","getBuffer","getFirstPosition","getEndPosition","regexString","config","regex","RegExp","getCursorBufferPosition","foundDelim","CompositeDisposable","cells","shell","getGrammar","scopeName","jlGet","weaveGet","nextRow","jlMoveNext","weaveMoveNext","weaveMovePrev","prevRow","jlMovePrev","require$$0","require$$1","require$$2","activate","juno","boot","cancelComplete","disrequireClient","len","ref","requireClient","a","f","connection","client","require","disrequire","e","commands","dispatch","currentTarget","this","subs","add","replace","julia-client:run-block","event","withInk","runtime","evaluation","eval","julia-client:run-and-move","move","julia-client:run-all","evalAll","julia-client:run-cell","cell","julia-client:run-cell-and-move","julia-client:select-block","misc","blocks","select","julia-client:next-cell","julia-client:prev-cell","julia-client:goto-symbol","goto","gotoSymbol","julia-client:show-documentation","toggleDocs","julia-client:send-to-stdin","done","j","len1","ref1","getModel","stdin","julia-debug:run-block","debugger","debugBlock","julia-debug:step-through-block","julia-debug:run-cell","julia-debug:step-through-cell","julia-debug:toggle-breakpoint","togglebp","julia-debug:toggle-conditional-breakpoint","julia-client:format-code","formatter","formatCode","julia-client:set-working-module","modules","chooseModule","ev","target","julia-debug:run-file","debugFile","julia-debug:step-through-file","julia-client:open-external-REPL","terminal","repl","julia-client:start-julia","julia-client:start-remote-julia-process","bootRemote","julia-client:kill-julia","kill","julia-client:interrupt-julia","interrupt","julia-client:disconnect-julia","disconnect","julia-client:connect-external-process","messages","connectExternal","julia-client:connect-terminal","connectedRepl","julia-client:open-plot-pane","plots","open","julia-client:open-outline-pane","outline","julia-client:open-workspace","julia-client:restore-default-layout","ui","layout","restoreDefaultLayout","julia-client:close-juno-panes","closePromises","julia-client:reset-default-layout-settings","resetDefaultLayoutSettings","julia-client:settings","julia-debug:clear-all-breakpoints","clearbps","julia-debug:step-to-next-line","nextline","julia-debug:step-to-selected-line","toselectedline","julia-debug:step-to-next-expression","stepexpr","julia-debug:step-into","stepin","julia-debug:stop-debugging","stop","julia-debug:step-out","finish","julia-debug:continue","continueForward","julia-debug:open-debugger-pane","julia:new-julia-file","then","gr","setGrammar","julia:open-julia-startup-file","paths","home","julia:open-juno-startup-file","julia:open-julia-home","openItem","juliaHome","julia:open-package-in-new-window","packages","openPackage","julia:open-package-as-project-folder","julia:get-help","openExternal","julia-client:debug-info","debuginfo","julia-client:work-in-current-folder","cdHere","julia-client:work-in-project-folder","cdProject","julia-client:work-in-home-folder","cdHome","julia-client:select-working-folder","cdSelect","julia-client:activate-environment-in-current-folder","activateProject","julia-client:activate-environment-in-parent-folder","activateParentProject","julia-client:activate-default-environment","activateDefaultProject","deactivate","dispose","err","notifications","addError","detail","dismissable","setTimeout","key","process","platform","p","path","env","jlpath","expandHome","atomProjectDir","dirs","project","getDirectories","ws","HOME","USERPROFILE","Promise","resolve","fs","stat","stats","isFile","dirname","packageDir","packageRoot","__dirname","JULIA_HOME","reject","existsSync","current_dir","cwd","exepath","execPath","chdir","realpath","realpathSync","which","child_process","exec","stdout","stderr","res","major","minor","patch","el","pathEl","closest","activeEl","querySelector","dataset","dirEl","readFileSync","wordRegex","getWordAndRange","options","getLastCursor","getBufferPosition","getWordRangeAtBufferPosition","word","findAllInRangeSync","find","fromObject","getWordRangeWithoutTrailingDots","startColumn","endColumn","isValidWordToInspect","isNaN","fn","rgb2hex","rgb","search","hex","x","parseInt","toString","Loading","bufferLines","lwaits","withLoading","selectors","styled","color","div","document","createElement","style","classList","child","innerText","appendChild","body","window","getComputedStyle","removeChild","debounce","module","require$$3","words","require$$4","weave","require$$5","colors","require$$6","require$$7","t","flush","data","shift","time","desc","Date","getTime","catch","hook","obj","method","souper","bind","once","args","call","mutex","wait","current","release","exclusive","lock","exports","result","formatTimePeriod","dt","h","m","parts","Math","floor","round","Emitter","[object Object]","ink","results","stream","loading","handlers","callbacks","queue","id","setStream","handle","cb","cancelCallback","type","Error","writeMsg","msg","callback","monitor","reset","constructor","Object","hasOwnProperty","errJson","rpc","mod","String","import","isWorking","onWorking","onDone","onceDone","message","stack","on","input","JSON","parse","unreadStream","removeListener","write","stringify","readStream","writeStream","net","ipc","plotpane","emitter","bootMode","base","isActive","ready","conn","beep","onAttached","observe","use","onDetached","onBoot","proc","remoteConfig","setBootMode","editorPath","ind","getPath","host","detach","basicHandlers","basicHandler","name1","handleBasic","onceAttached","attach","emit","onStdout","onStderr","onInfo","info","clientCall","name","clargs","as","deprecationWarnings","optimisationLevel","precompiled","startupArgs","concat","arg","connectedError","action","description","notConnectedError","withCurrent","tcp","server","port","listeners","next","connect","sock","listen","externalPort","createServer","details","address","escpath","escape","sh","term","defaultShell","defaultTerminal","connectCommand","script","cmd","dismiss","note","addInfo","openConsole","welcome","addSuccess","views","getView","jlNotFound","buttons","onDidClick","clipboard","isDismissed","get_","fullPath","projectDir","ty","pty","cols","rows","useConpty","handleFlowControl","failure","race","socket","_readable","_writable","onExit","getProcess","customEnv","confnt","confntInt","JULIA_NUM_THREADS","isFinite","HTTP_PROXY","HTTPS_PROXY","http_proxy","https_proxy","IPC","basic","hash","provider","cacheLength","procs","cache","removeFromCache","toCache","cached","fromCache","ps","init","allArgs","warmup","events","out","wasCached","getRemoteConf","getRemoteName","serversettings","withRemoteConfig","cachedSettings","maybe_add_agent","conf","reason","showRemoteError","sshsock","agent","agentForward","getRemoteExec","store","localStorage","getRemoteStore","notif","edview","ssh","forwardIn","sessionName","threadCount","resize","setWindow","signal","close","accept","createConnection","pipe","cycler","junorc","getconf","externalTerminal","consumeGetServerConfig","consumeGetServerName","JULIA_EDITOR","devMode","getVersion","check","spawnJulia","remote","dir","all","local","booting","consumeInk","_boot","Opener","allowRemoteFiles","juliaPath","default","order","juliaOptions","collapsed","properties","title","enum","radio","numberOfThreads","startupArguments","items","externalProcessPort","arguments","persistWorkingDir","workingDir","fuzzyCompletionMode","autoCompletionSuggestionPriority","noAutoParenthesis","formatOnSave","formattingOptions","mock","uiOptions","resultsDisplayMode","scrollToResult","docsDisplayMode","errorNotifications","errorInRepl","enableMenu","enableToolBar","usePlotPane","maxNumberPlots","openNewEditorWhenDebugging","cellDelimiter","highlightCells","layouts","console","defaultLocation","documentation","plotPane","debuggerPane","profiler","linter","defaultPanes","openDefaultPanesOnStartUp","consoleOptions","maximumConsoleSize","prompt","whitelistedKeybindingsREPL","whitelistedKeybindingsTerminal","cursorStyle","cursorBlink","terminalRendererType","linkModifier","remoteOptions","remoteJulia","tmux","tmuxName","agentAuth","forwardAgent","juliaSyntaxScopes","disableProxy","firstBoot","macOptionIsMeta","menu","label","submenu","template","command","validSchemes","invalidSchemes","selector","panel","searchForDeprecated","currentSchemes","entries","prototype","nextSchemes","validScheme","scheme","_key","_value","invalidScheme","addWarning","unset","consumeToolBar","bar","addButton","icon","iconset","tooltip","addSpacer","removeItems","enabled","show","force","elementForItem","item","selected","view","primary","matchHighlighter","highlightMatches","getFilterQuery","secondary","append","active","emptyMessage","errorMessage","infoMessage","allowCustom","update","query","loadingMessage","lastFocusedPane","getActivePane","focus","confirmed","props","didConfirmSelection","cancelSelection","didConfirmEmptySelection","getQuery","didCancelSelection","hide","filterKeyForItem","index","Number","Function","findIndex","selectIndex","_","Highlighter","getlazy","_ink","SelectList","element","addModalPanel","highlight","grammar","scopePrefix","block","html","k","lastLineTokens","scopeStack","tokens","updateScopeStack","escapeString","popScope","string","desiredScopes","excessScopes","ref2","isEqual","pushScope","dom","tag","attrs","contents","opts","v","Array","setAttribute","render","content","tags","span","innerHTML","children","tree","head","expand","treeView","lazy","registerLazy","onToggle","ansiToHTML","subtree","copy","core:copy","stopPropagation","link","file","tt","href","isUntitled","tooltips","onclick","pending","addEventListener","number","full","isfull","rounded","toPrecision","highlighted","latex","KaTeX","texify","r","Text","class","Disposable","allmodules","getmodule","ismodule","progs","status","progress","destroy","clear","pr","t0","now","showTime","prog","level","rightText","leftText","delete","pane","itemSubs","observeActivePaneItem","updateForItem","_current","lastEditorModule","setCurrent","onDidChange","inactive","main","sub","subInactive","follow","itemSelector","isValidItem","matches","autodetect","ised","getActivePaneItem","isTextEditor","juliaModule","unshift","setModule","updateForEditor","ismod","onDidChangeGrammar","setEditorModule","onDidChangeCursorPosition","setEditorModuleLazy","getEditorModule","sels","modulePromise","activateView","disposable","c","updateView","mainView","dividerView","subView","tile","statusBar","addRightTile","priority","display","remove","consumeStatusBar","gotosymbol","regenerateSymbols","regeneratesymbols","clearSymbols","clearsymbols","includeRegex","filePathRegex","subscriptions","filePathRange","filePathBody","dirPath","filePath","_this","rangeFilePath","getJumpFilePath","isClientAndInkReady","currentModule","getId","onlyGlobal","error","_this2","selectItemsAndGo","getSuggestion","textEditor","_this3","providerName","grammarScopes","searchDocs","searchdocs","moduleInfo","moduleinfo","regenerateDocs","regeneratedocs","processItem","processLinks","getElementsByTagName","onClickName","onClickModule","doc","showDocument","links","attributes","kwsearch","clearLazy","DocPane","fromId","exportedOnly","allPackages","nameOnly","score","scores","shoulderase","modEd","setText","regenerateCache","setDefaultLocation","ensureVisible","BrowserWindow","cd","dialog","docpane","evalall","evalshow","evaluate","searchDoc","create","setItems","lazyTrees","currentPane","onClick","Workspace","refresh","refreshModule","_currentContext","edpath","_showError","lights","highlights","errorLines","onDidDestroy","codeSelector","rtype","Result","isDestroyed","setContent","weaveScopes","getRootScopeDescriptor","getCode","getPathFromTreeView","readCode","InlineDoc","_cd","set","currentDir","getDirPathFromTreeView","getCenter","getPaths","showOpenDialog","getFocusedWindow","changeprompt","changemodule","fullpath","isWindows","uriRegex","newTerminal","InkTerminal","random","terminalOptions","attachCustomKeyEventHandler","handleKeybinding","onDidOpenLink","hasKeyboardModifier","registerTooltipHandler","showTooltip","hideTooltip","addLinkHandler","shellPty","scrollback","rendererType","updateTerminalSettings","settings","forEachPane","setOption","getPaneItems","metaKey","ctrlKey","handleLink","uri","urimatch","matchregex","registerLinkMatcher","willLinkActivate","tooltipCallback","location","leaveCallback","terminalRect","getBoundingClientRect","colWidth","width","rowHeight","height","leftPosition","left","topPosition","y","top","binds","keyCode","altKey","keymaps","keystrokeForKeyboardEvent","promptObserver","kbds","toLowerCase","setTitle","startRequested","updateWorkspace","clearconsole","cursorpos","cursorPosition","writeToTerminal","str","d","copySelection","persistentState","baselineCompletionAdapter","completionDetail","activatedManually","lineRange","prevCharPosition","charRange","char","baselineCompletions","sleep","is_fuzzy","completions","completion","toCompletion","makeIcon","iconHTML","descriptionMoreURL","_completion","completionWithDetail","suggestion","currentPoint","nextPoint","finishRange","webview","vm","plot","plotsize","plotSize","ploturl","url","jlpane","PlotPane","Pannable","maxSize","size","ratio","devicePixelRatio","isDataURI","object","dataURI","byteString","atob","unescape","mimeString","ia","Uint8Array","charCodeAt","Blob","dataURItoBlob","URL","createObjectURL","src","log","warn","sourceID","consoleLog","revokeObjectURL","devtools","openDevTools","HTMLPane","closeAndDestroy","stepper","breakpoints","evalwith","runInThisContext","windows","syntaxcolors","getColors","openFile","versionwarning","createWindow","w","wid","loadURL","setMenu","withWin","winActive","notify","win","debugfile","buttonSVGs","requireDebugging","originalEvent","activeError","abortKeyBinding","requireNotDebugging","debugmode","toggleJuliaBP","clearJulia","toggleUncaughtJulia","toggleExceptionJulia","toggleCompiled","getBreakpoints","addArgsJulia","toggleAllActiveJulia","toggleActiveJulia","addCondition","cond","setLevel","stepto","moreinfo","step","working","doneWorking","getFileBreakpoints","bp","isactive","condition","svg","Stepper","toggle","toggleUncaught","toggleException","addArgs","toggleActive","toggleAllActive","DebuggerPane","edForFile","shouldStep","blks","toggleConditionAtSourceLocation","toggleAtSourceLocation","loadProfileTrace","saveProfileTrace","teardown","edSubs","getTitle","profile","Profiler","ProfileViewer","save","customClass","zoomstrategy","minScale","updateeditor","watchEditor","TextEditor","onDidStopChanging","throttle","updateEditor","cursorLine","updateOutline","updateSymbols","outlineItems","handleOutline","outlineItem","getPanes","getItems","setActiveItem","setCursorBufferPosition","scrollToCursorPosition","lintPane","Outline","onDidStopChangingActivePaneItem","onDidActivateInitialPackages","Linter","staticLint","warnings","clearItems","newWindow","pkgs","pkg","pathsToOpen","addPath","mustExist","exact","reportinfo","showNotification","atomReport","format","formatEditor","formatEditorTextInRange","marker","markBufferRange","invalidate","decorateMarker","markRange","indent","getTabLength","margin","getPreferredLineLength","formattedtext","isValid","setTextInBufferRange","selections","formatEditorWithSelection","edWatch","WeakSet","observeTextEditors","edsub","onDidSave","has","datatip","useAtomIDEUI","lineTextForBufferRow","markedStrings","strings","docs","frontend","require$$8","require$$9","require$$10","require$$11","require$$12","inDevMode","isReleasedVersion","versions","atomPkgs","activePkg","getActivePackage","metadata","version","require$$14","require$$15","val","len2","provideAutoComplete","provideHyperclick","consumeDatatip","datatipService","datatipDisposable","datatipProvider","require$$16","showDataTipOnCursorMove","showDataTipOnMouseMove","addProvider","handleURI","parsedURI","initialLine","specifiedPanes","panes","openPanes","openPanesHelper","activateItemAtIndex","getActivePaneContainer","activatePreviousPane","containers","getLeftDock","getBottomDock","getRightDock","container","firstPane","moveItemToPane","lastEditor","lastTerminal","onStartup","FocusHistory","history","openedItem","activeItem","getActiveItem","onDidOpen","newLocation","oldLocation","paneForItem","activateItem","focusLastEditor","moveBack","borders","highlightCurrentCell","mrange","highlightCellBorders","observeActiveTextEditor","INK_LINK","LANGUAGE_JULIA_LINK","etch","semver","toolbar","focusutils","cellhighlighter","invalidateAll","state","setScheduler","requireDeps","updateSettings","queryDefaultLayout","isPackageLoaded","install","enableDeps","inkVersion","enablePackage","loadedPackages","satisfies","provideClient"],"mappings":"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"} \ No newline at end of file diff --git a/lib/connection/process/basic.js b/lib/connection/process/basic.js index dfe023c0..b9ffac12 100644 --- a/lib/connection/process/basic.js +++ b/lib/connection/process/basic.js @@ -1,4 +1,4 @@ -'use babel' + import tcp from './tcp' import * as pty from 'node-pty-prebuilt-multiarch' diff --git a/lib/connection/process/remote.js b/lib/connection/process/remote.js index 874731eb..6dad36c8 100644 --- a/lib/connection/process/remote.js +++ b/lib/connection/process/remote.js @@ -1,4 +1,4 @@ -'use babel' + import tcp from './tcp' import net from 'net' diff --git a/lib/misc/blocks.js b/lib/misc/blocks.js index 46417203..f6a597ec 100644 --- a/lib/misc/blocks.js +++ b/lib/misc/blocks.js @@ -1,4 +1,4 @@ -'use babel' + // TODO: docstrings import { forLines } from './scopes' diff --git a/lib/misc/cells.js b/lib/misc/cells.js index af611973..2a2839bb 100644 --- a/lib/misc/cells.js +++ b/lib/misc/cells.js @@ -1,4 +1,4 @@ -'use babel' + import { get as weaveGet, moveNext as weaveMoveNext, diff --git a/lib/misc/colors.js b/lib/misc/colors.js index 9a01c912..a6db6962 100644 --- a/lib/misc/colors.js +++ b/lib/misc/colors.js @@ -1,4 +1,4 @@ -'use babel' + export function getColors(selectors) { let grammar = atom.grammars.grammarForScopeName("source.julia") diff --git a/lib/misc/weave.js b/lib/misc/weave.js index 481a1071..91534fd4 100644 --- a/lib/misc/weave.js +++ b/lib/misc/weave.js @@ -1,4 +1,4 @@ -'use babel' + import 'atom' diff --git a/lib/package/settings.js b/lib/package/settings.js index 78870fb7..a8bee92f 100644 --- a/lib/package/settings.js +++ b/lib/package/settings.js @@ -1,4 +1,4 @@ -'use babel' + let validSchemes = require('../package/config') let invalidSchemes = [] // Keeps invalid config schemes to be notified to users diff --git a/lib/runtime/console.js b/lib/runtime/console.js index 3e4fa926..5185ba33 100644 --- a/lib/runtime/console.js +++ b/lib/runtime/console.js @@ -1,4 +1,4 @@ -'use babel' + import { client } from '../connection' import { customEnv } from '../connection/process/basic' diff --git a/lib/runtime/debugger.js b/lib/runtime/debugger.js index 03bed5e7..6583e0e0 100644 --- a/lib/runtime/debugger.js +++ b/lib/runtime/debugger.js @@ -1,4 +1,4 @@ -'use babel' + /** @jsx etch.dom */ import { CompositeDisposable } from 'atom' diff --git a/lib/runtime/debuginfo.js b/lib/runtime/debuginfo.js index de71ff26..370cd524 100644 --- a/lib/runtime/debuginfo.js +++ b/lib/runtime/debuginfo.js @@ -1,4 +1,4 @@ -'use babel' + import { client } from '../connection' diff --git a/lib/runtime/linter.js b/lib/runtime/linter.js index f09eecfa..a49ad16f 100644 --- a/lib/runtime/linter.js +++ b/lib/runtime/linter.js @@ -1,4 +1,4 @@ -'use babel' + import { CompositeDisposable } from 'atom' import { client } from '../connection' diff --git a/lib/runtime/outline.js b/lib/runtime/outline.js index f7cf7c36..d3ecd9ed 100644 --- a/lib/runtime/outline.js +++ b/lib/runtime/outline.js @@ -1,4 +1,4 @@ -'use babel' + import { CompositeDisposable, Disposable, TextEditor } from 'atom' import { throttle } from 'underscore-plus' diff --git a/lib/runtime/packages.js b/lib/runtime/packages.js index 9d132d2e..d4d0f063 100644 --- a/lib/runtime/packages.js +++ b/lib/runtime/packages.js @@ -1,4 +1,4 @@ -'use babel' + import { client } from '../connection' import { selector } from '../ui' diff --git a/lib/runtime/plots.js b/lib/runtime/plots.js index 9ce7802c..51b88a8e 100644 --- a/lib/runtime/plots.js +++ b/lib/runtime/plots.js @@ -1,4 +1,4 @@ -'use babel' + import { client } from '../connection' import { views } from '../ui' diff --git a/lib/runtime/profiler.js b/lib/runtime/profiler.js index 11d32485..51190d80 100644 --- a/lib/runtime/profiler.js +++ b/lib/runtime/profiler.js @@ -1,4 +1,4 @@ -'use babel' + import { client } from '../connection' import { CompositeDisposable } from 'atom' diff --git a/lib/runtime/urihandler.js b/lib/runtime/urihandler.js index c20db964..0ccd7202 100644 --- a/lib/runtime/urihandler.js +++ b/lib/runtime/urihandler.js @@ -1,4 +1,4 @@ -"use babel" + import { client } from '../connection' import { docpane, views } from '../ui' diff --git a/lib/ui/cellhighlighter.js b/lib/ui/cellhighlighter.js index 031ea185..da0a383a 100644 --- a/lib/ui/cellhighlighter.js +++ b/lib/ui/cellhighlighter.js @@ -1,4 +1,4 @@ -'use babel' + import { getRange } from '../misc/cells' import { CompositeDisposable } from 'atom' diff --git a/lib/ui/docs.js b/lib/ui/docs.js index 3f936872..c2778361 100644 --- a/lib/ui/docs.js +++ b/lib/ui/docs.js @@ -1,4 +1,4 @@ -'use babel' + import { CompositeDisposable } from 'atom' import { client } from '../connection' diff --git a/lib/ui/focusutils.js b/lib/ui/focusutils.js index f20563a8..7b1c673a 100644 --- a/lib/ui/focusutils.js +++ b/lib/ui/focusutils.js @@ -1,4 +1,4 @@ -'use babel' + import {TextEditor, CompositeDisposable} from 'atom' diff --git a/lib/ui/layout.js b/lib/ui/layout.js index 0e4dadbc..d85c82a2 100644 --- a/lib/ui/layout.js +++ b/lib/ui/layout.js @@ -1,4 +1,4 @@ -'use babel' + const repl = () => { return require('../runtime').console diff --git a/package-lock.json b/package-lock.json index 78bdeaf4..58d04784 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4,11 +4,1262 @@ "lockfileVersion": 1, "requires": true, "dependencies": { + "@babel/cli": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.8.4.tgz", + "integrity": "sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag==", + "dev": true, + "requires": { + "chokidar": "^2.1.8", + "commander": "^4.0.1", + "convert-source-map": "^1.1.0", + "fs-readdir-recursive": "^1.1.0", + "glob": "^7.0.0", + "lodash": "^4.17.13", + "make-dir": "^2.1.0", + "slash": "^2.0.0", + "source-map": "^0.5.0" + } + }, + "@babel/code-frame": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.8.3" + } + }, + "@babel/compat-data": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.6.tgz", + "integrity": "sha512-5QPTrNen2bm7RBc7dsOmcA5hbrS4O2Vhmk5XOL4zWW/zD/hV0iinpefDlkm+tBBy8kDtFaaeEvmAqt+nURAV2g==", + "dev": true, + "requires": { + "browserslist": "^4.11.1", + "invariant": "^2.2.4", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/core": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz", + "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.6", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.6", + "@babel/parser": "^7.9.6", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", + "lodash": "^4.17.13", + "resolve": "^1.3.2", + "semver": "^5.4.1", + "source-map": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", + "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", + "dev": true, + "requires": { + "@babel/types": "^7.9.6", + "jsesc": "^2.5.1", + "lodash": "^4.17.13", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", + "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", + "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-builder-react-jsx": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz", + "integrity": "sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/types": "^7.9.0" + } + }, + "@babel/helper-builder-react-jsx-experimental": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.5.tgz", + "integrity": "sha512-HAagjAC93tk748jcXpZ7oYRZH485RCq/+yEv9SIWezHRPv9moZArTnkUNciUNzvwHUABmiWKlcxJvMcu59UwTg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-module-imports": "^7.8.3", + "@babel/types": "^7.9.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.9.6.tgz", + "integrity": "sha512-x2Nvu0igO0ejXzx09B/1fGBxY9NXQlBW2kZsSxCJft+KHN8t9XWzIvFxtPHnBOAXpVsdxZKZFbRUC8TsNKajMw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.9.6", + "browserslist": "^4.11.1", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.9.6.tgz", + "integrity": "sha512-6N9IeuyHvMBRyjNYOMJHrhwtu4WJMrYf8hVbEHD3pbbbmNOk1kmXSQs7bA4dYDUaIx4ZEzdnvo6NwC3WHd/Qow==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.9.5", + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.9.6", + "@babel/helper-split-export-declaration": "^7.8.3" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", + "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-regex": "^7.8.3", + "regexpu-core": "^4.7.0" + } + }, + "@babel/helper-define-map": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", + "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/types": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", + "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", + "dev": true, + "requires": { + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-function-name": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", + "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.9.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", + "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-imports": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-module-transforms": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", + "lodash": "^4.17.13" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "dev": true + }, + "@babel/helper-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", + "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", + "dev": true, + "requires": { + "lodash": "^4.17.13" + } + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", + "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-wrap-function": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-replace-supers": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz", + "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" + } + }, + "@babel/helper-simple-access": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", + "dev": true, + "requires": { + "@babel/types": "^7.8.3" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", + "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" + } + }, + "@babel/helpers": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz", + "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==", + "dev": true, + "requires": { + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" + } + }, + "@babel/highlight": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", + "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==", + "dev": true + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", + "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz", + "integrity": "sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", + "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", + "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz", + "integrity": "sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.9.5" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", + "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.8", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz", + "integrity": "sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", + "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz", + "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", + "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", + "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", + "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", + "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "lodash": "^4.17.13" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz", + "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-define-map": "^7.8.3", + "@babel/helper-function-name": "^7.9.5", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-split-export-declaration": "^7.8.3", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", + "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz", + "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", + "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", + "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", + "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", + "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", + "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", + "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", + "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz", + "integrity": "sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz", + "integrity": "sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz", + "integrity": "sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", + "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", + "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", + "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz", + "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", + "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz", + "integrity": "sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz", + "integrity": "sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw==", + "dev": true, + "requires": { + "@babel/helper-builder-react-jsx": "^7.9.0", + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz", + "integrity": "sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw==", + "dev": true, + "requires": { + "@babel/helper-builder-react-jsx-experimental": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" + } + }, + "@babel/plugin-transform-react-jsx-self": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz", + "integrity": "sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" + } + }, + "@babel/plugin-transform-react-jsx-source": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz", + "integrity": "sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-jsx": "^7.8.3" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", + "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", + "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", + "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", + "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", + "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-regex": "^7.8.3" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", + "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", + "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", + "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/preset-env": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.6.tgz", + "integrity": "sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.9.6", + "@babel/helper-compilation-targets": "^7.9.6", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-proposal-async-generator-functions": "^7.8.3", + "@babel/plugin-proposal-dynamic-import": "^7.8.3", + "@babel/plugin-proposal-json-strings": "^7.8.3", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.8.3", + "@babel/plugin-transform-async-to-generator": "^7.8.3", + "@babel/plugin-transform-block-scoped-functions": "^7.8.3", + "@babel/plugin-transform-block-scoping": "^7.8.3", + "@babel/plugin-transform-classes": "^7.9.5", + "@babel/plugin-transform-computed-properties": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.9.5", + "@babel/plugin-transform-dotall-regex": "^7.8.3", + "@babel/plugin-transform-duplicate-keys": "^7.8.3", + "@babel/plugin-transform-exponentiation-operator": "^7.8.3", + "@babel/plugin-transform-for-of": "^7.9.0", + "@babel/plugin-transform-function-name": "^7.8.3", + "@babel/plugin-transform-literals": "^7.8.3", + "@babel/plugin-transform-member-expression-literals": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.6", + "@babel/plugin-transform-modules-commonjs": "^7.9.6", + "@babel/plugin-transform-modules-systemjs": "^7.9.6", + "@babel/plugin-transform-modules-umd": "^7.9.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", + "@babel/plugin-transform-new-target": "^7.8.3", + "@babel/plugin-transform-object-super": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.9.5", + "@babel/plugin-transform-property-literals": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.7", + "@babel/plugin-transform-reserved-words": "^7.8.3", + "@babel/plugin-transform-shorthand-properties": "^7.8.3", + "@babel/plugin-transform-spread": "^7.8.3", + "@babel/plugin-transform-sticky-regex": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/plugin-transform-typeof-symbol": "^7.8.4", + "@babel/plugin-transform-unicode-regex": "^7.8.3", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.9.6", + "browserslist": "^4.11.1", + "core-js-compat": "^3.6.2", + "invariant": "^2.2.2", + "levenary": "^1.1.1", + "semver": "^5.5.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.9.4", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.9.4.tgz", + "integrity": "sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-transform-react-display-name": "^7.8.3", + "@babel/plugin-transform-react-jsx": "^7.9.4", + "@babel/plugin-transform-react-jsx-development": "^7.9.0", + "@babel/plugin-transform-react-jsx-self": "^7.9.0", + "@babel/plugin-transform-react-jsx-source": "^7.9.0" + } + }, + "@babel/runtime": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", + "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" + } + }, + "@babel/traverse": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", + "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.6", + "@babel/helper-function-name": "^7.9.5", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", + "debug": "^4.1.0", + "globals": "^11.1.0", + "lodash": "^4.17.13" + }, + "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", + "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.9.5", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + }, + "@rollup/plugin-commonjs": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.1.0.tgz", + "integrity": "sha512-Ycr12N3ZPN96Fw2STurD21jMqzKwL9QuFhms3SD7KKRK7oaXUsBU9Zt0jL/rOPHiPYisI21/rXGO3jr9BnLHUA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.8", + "commondir": "^1.0.1", + "estree-walker": "^1.0.1", + "glob": "^7.1.2", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0" + } + }, + "@rollup/plugin-json": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.0.3.tgz", + "integrity": "sha512-QMUT0HZNf4CX17LMdwaslzlYHUKTYGuuk34yYIgZrNdu+pMEfqMS55gck7HEeHBKXHM4cz5Dg1OVwythDdbbuQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.8" + } + }, + "@rollup/plugin-node-resolve": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-7.1.3.tgz", + "integrity": "sha512-RxtSL3XmdTAE2byxekYLnx+98kEUOrPHF/KRVjLH+DEIHy6kjIw7YINQzn+NXiH/NTrQLAwYs0GWB+csWygA9Q==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.8", + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.14.2" + } + }, + "@rollup/pluginutils": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.9.tgz", + "integrity": "sha512-TLZavlfPAZYI7v33wQh4mTP6zojne14yok3DNSLcjoG/Hirxfkonn6icP5rrNWRn8nZsirJBFFpijVOJzkUHDg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "micromatch": "^4.0.2" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/node": { + "version": "13.13.4", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.4.tgz", + "integrity": "sha512-x26ur3dSXgv5AwKS0lNfbjpCakGIduWU1DU91Zz58ONRWrIKGunmZBNv4P7N+e27sJkiGDsw/3fT4AtsqQBrBA==", + "dev": true + }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "optional": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "optional": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", @@ -23,6 +1274,34 @@ "readable-stream": "^2.0.6" } }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true, + "optional": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true, + "optional": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true, + "optional": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true, + "optional": true + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -31,6 +1310,27 @@ "safer-buffer": "~2.1.0" } }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true, + "optional": true + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true, + "optional": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "optional": true + }, "atom-package-deps": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/atom-package-deps/-/atom-package-deps-4.6.0.tgz", @@ -73,6 +1373,87 @@ } } }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-transform-react-remove-prop-types": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.24.tgz", + "integrity": "sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "optional": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -81,6 +1462,23 @@ "tweetnacl": "^0.14.3" } }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "optional": true + }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bl": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.2.tgz", @@ -90,6 +1488,59 @@ "safe-buffer": "^5.1.1" } }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "optional": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "browserslist": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", + "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001043", + "electron-to-chromium": "^1.3.413", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" + } + }, "buffer-alloc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", @@ -109,16 +1560,166 @@ "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha1-+PeLdniYiO858gXNY39o5wISKyw=" }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "builtin-modules": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.1.0.tgz", + "integrity": "sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw==", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "optional": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "caniuse-lite": { + "version": "1.0.30001048", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001048.tgz", + "integrity": "sha512-g1iSHKVxornw0K8LG9LLdf+Fxnv7T1Z+mMsf0/YYLclQX4Cd522Ap0Lrw6NFqHgezit78dtyWxzlV2Xfc7vgRg==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + } + }, "chownr": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.2.tgz", "integrity": "sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A==" }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "optional": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" }, + "coffeescript": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.5.1.tgz", + "integrity": "sha512-J2jRPX0eeFh5VKyVnoLrfVFgLZtnnmp96WQSLAS8OrLm2wtQLcnikYKe1gViJKDH7vucjuhHvBKKBP3rKcD1tQ==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "optional": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, "consistent-env": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/consistent-env/-/consistent-env-1.3.1.tgz", @@ -132,11 +1733,62 @@ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, + "convert-source-map": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true, + "optional": true + }, + "core-js-compat": { + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", + "dev": true, + "requires": { + "browserslist": "^4.8.5", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "optional": true + }, "decompress-response": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", @@ -150,6 +1802,60 @@ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -160,29 +1866,812 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "electron-to-chromium": { + "version": "1.3.426", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.426.tgz", + "integrity": "sha512-sdQ7CXQbFflKY5CU63ra+kIYq9F7d1OqI33856qJZxTrwo0sLASdmoRl9lWpGrQDS9Nk/RFliQWd3PPDrZ+Meg==", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "requires": { + "once": "^1.4.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etch": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/etch/-/etch-0.14.0.tgz", + "integrity": "sha512-puqbFxz7lSm+YK6Q+bvRkNndRv6PRvGscSEhcFjmtL4nX/Az5rRCNPvK3aVTde85c/L5X0vI5kqfnpYddRalJQ==" + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "optional": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "optional": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "optional": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true, + "optional": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, "requires": { - "once": "^1.4.0" + "locate-path": "^2.0.0" } }, - "etch": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/etch/-/etch-0.14.0.tgz", - "integrity": "sha512-puqbFxz7lSm+YK6Q+bvRkNndRv6PRvGscSEhcFjmtL4nX/Az5rRCNPvK3aVTde85c/L5X0vI5kqfnpYddRalJQ==" + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true, + "optional": true }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "optional": true, + "requires": { + "map-cache": "^0.2.2" + } }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, + "fs-readdir-recursive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz", + "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==", + "dev": true + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.12.tgz", + "integrity": "sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1", + "node-pre-gyp": "*" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "3.2.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "glob": { + "version": "7.1.6", + "bundled": true, + "dev": true, + "optional": true, + "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" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.24", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "optional": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true + }, + "minipass": { + "version": "2.9.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.3.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.14.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + } + }, + "nopt": { + "version": "4.0.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.4.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.8", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "rimraf": { + "version": "2.7.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.7.1", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.13", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.3", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "yallist": { + "version": "3.1.1", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, "fuzzaldrin": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fuzzaldrin/-/fuzzaldrin-2.1.0.tgz", @@ -208,16 +2697,136 @@ "wide-align": "^1.1.0" } }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true, + "optional": true + }, "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "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" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true, + "optional": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "optional": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -228,6 +2837,111 @@ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true, + "optional": true + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "optional": true + } + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true, + "optional": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "optional": true + }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -236,31 +2950,303 @@ "number-is-nan": "^1.0.0" } }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "optional": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "optional": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "is-reference": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.1.4.tgz", + "integrity": "sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw==", + "dev": true, + "requires": { + "@types/estree": "0.0.39" + } + }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "optional": true + }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true, + "optional": true + }, + "jest-worker": { + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", + "dev": true, + "requires": { + "merge-stream": "^2.0.0", + "supports-color": "^6.1.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json5": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + }, + "dependencies": { + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + } + } + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "optional": true + }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true + }, + "levenary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "dev": true, + "requires": { + "leven": "^3.1.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.15", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "dev": true + }, "lodash.uniq": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=" }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "requires": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true, + "optional": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "optional": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, "minimist": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "optional": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "optional": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, "mkdirp": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", @@ -276,11 +3262,38 @@ } } }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true, + "optional": true + }, "nan": { "version": "2.14.0", "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "optional": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, "napi-build-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz", @@ -310,11 +3323,24 @@ "prebuild-install": "^5.2.5" } }, + "node-releases": { + "version": "1.1.53", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.53.tgz", + "integrity": "sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ==", + "dev": true + }, "noop-logger": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "optional": true + }, "npmlog": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", @@ -336,11 +3362,83 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "optional": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "object-hash": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.0.3.tgz", "integrity": "sha512-JPKn0GMu+Fa3zt3Bmr66JhokJU5BaNBIh4ZeTlaCBzrBsOeXzwcKKAK1tbLiPKgvwmPXsDvvLHoWh5Bm7ofIYg==" }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "optional": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", + "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "function-bind": "^1.1.1", + "has-symbols": "^1.0.0", + "object-keys": "^1.0.11" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "optional": true, + "requires": { + "isobject": "^3.0.1" + } + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -354,11 +3452,95 @@ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true, + "optional": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true, + "optional": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "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=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, "physical-cpu-count": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/physical-cpu-count/-/physical-cpu-count-2.0.0.tgz", "integrity": "sha1-GN4vl+S/epVRrXURlCtUlverpmA=" }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true, + "optional": true + }, "prebuild-install": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.0.tgz", @@ -382,6 +3564,12 @@ "which-pm-runs": "^1.0.0" } }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, "process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -421,11 +3609,250 @@ "util-deprecate": "~1.0.1" } }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "optional": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerate-unicode-properties": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4", + "private": "^0.1.8" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexpu-core": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regjsgen": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", + "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==", + "dev": true + }, + "regjsparser": { + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true, + "optional": true + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true, + "optional": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true, + "optional": true + }, + "resolve": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true, + "optional": true + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true, + "optional": true + }, + "rollup": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.7.6.tgz", + "integrity": "sha512-AdHosxHBKyBsdtbT1/AqbWNQ87O4SSxS4N9iMwEpoCDAT6e4Du3uJSy83mp3ckgmCxly5VeXGx0WHsm21Djytg==", + "dev": true, + "requires": { + "fsevents": "~2.1.2" + }, + "dependencies": { + "fsevents": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", + "dev": true, + "optional": true + } + } + }, + "rollup-plugin-babel": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.4.0.tgz", + "integrity": "sha512-Lek/TYp1+7g7I+uMfJnnSJ7YWoD58ajo6Oarhlex7lvUce+RCKRuGRSgztDO3/MF/PuGKmUL5iTHKf208UNszw==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.0.0", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-coffee-script": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-coffee-script/-/rollup-plugin-coffee-script-2.0.0.tgz", + "integrity": "sha512-7hEjNhf9pezf/4PxHKHF2uEy+sgR1X9R5mCnOoF/ctKpFc5emY0+wYIxBth/0FJAa4F3+MQHOFEVxsuMIlOtUA==", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "rollup-plugin-node-resolve": "^3.0.0", + "rollup-pluginutils": "^2.0.1" + } + }, + "rollup-plugin-node-resolve": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz", + "integrity": "sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg==", + "dev": true, + "requires": { + "builtin-modules": "^2.0.0", + "is-module": "^1.0.0", + "resolve": "^1.1.6" + }, + "dependencies": { + "builtin-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-2.0.0.tgz", + "integrity": "sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg==", + "dev": true + } + } + }, + "rollup-plugin-peer-deps-external": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-peer-deps-external/-/rollup-plugin-peer-deps-external-2.2.2.tgz", + "integrity": "sha512-XcHH4UW9exRTAf73d8rk2dw2UgF//cWbilhRI4Ni/n+t0zA1eBtohKyJROn0fxa4/+WZ5R3onAyIDiwRQL+59A==", + "dev": true + }, + "rollup-plugin-terser": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz", + "integrity": "sha512-XGMJihTIO3eIBsVGq7jiNYOdDMb3pVxuzY0uhOE/FM4x/u9nQgr3+McsjzqBn3QfHIpNSZmFnpoKAwHBEcsT7g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.5.5", + "jest-worker": "^24.9.0", + "rollup-pluginutils": "^2.8.2", + "serialize-javascript": "^2.1.2", + "terser": "^4.6.2" + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "optional": true, + "requires": { + "ret": "~0.1.10" + } + }, "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -479,11 +3906,42 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, + "serialize-javascript": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", + "dev": true + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", @@ -504,6 +3962,190 @@ "simple-concat": "^1.0.0" } }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "optional": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "optional": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "optional": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "optional": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "dev": true, + "optional": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true, + "optional": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "optional": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, "ssh2": { "version": "0.8.4", "resolved": "https://registry.npmjs.org/ssh2/-/ssh2-0.8.4.tgz", @@ -522,6 +4164,29 @@ "streamsearch": "~0.1.2" } }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "optional": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "optional": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, "streamsearch": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", @@ -566,6 +4231,15 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, "tar-fs": { "version": "1.16.3", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-1.16.3.tgz", @@ -602,11 +4276,88 @@ "xtend": "^4.0.0" } }, + "terser": { + "version": "4.6.13", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.13.tgz", + "integrity": "sha512-wMvqukYgVpQlymbnNbabVZbtM6PN63AzqexpwJL8tbh/mRT9LE5o+ruVduAGL7D6Fpjl+Q+06U5I9Ul82odAhw==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, "to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "optional": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "optional": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "optional": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "optional": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, "tunnel-agent": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", @@ -633,6 +4384,112 @@ "underscore": "~1.6.0" } }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "optional": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "optional": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "optional": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "optional": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true, + "optional": true + } + } + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true, + "optional": true + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true, + "optional": true + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true, + "optional": true + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", diff --git a/package.json b/package.json index fa057c8b..d37f7c14 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "julia-client", - "main": "./lib/julia-client", + "main": "./dist/julia-client", "version": "0.12.4", "description": "The core package of Juno, the Julia IDE", "keywords": [ @@ -21,6 +21,10 @@ ], "repository": "https://github.com/JunoLab/atom-julia-client", "license": "MIT", + "scripts": { + "build": "NODE_ENV=production BABEL_ENV=production rollup -c", + "postinstall": "node script/postinstall.js" + }, "engines": { "atom": ">=1.39.0 <2.0.0" }, @@ -36,8 +40,25 @@ "ssh2": "^0.8.4", "underscore-plus": "*" }, - "scripts": { - "postinstall": "node script/postinstall.js" + "devDependencies": { + "coffeescript": "^2.5.1", + "rollup": "^2.6.1", + "@rollup/plugin-node-resolve": "^7.1.3", + "@rollup/plugin-commonjs": "^11.1.0", + "rollup-plugin-babel": "^4.4.0", + "rollup-plugin-terser": "^5.3.0", + "rollup-plugin-coffee-script": "^2.0.0", + "@rollup/plugin-json": "^4.0.3", + "rollup-plugin-peer-deps-external": "^2.2.2", + "@babel/core": "^7.9.0", + "@babel/cli": "^7.8.4", + "@babel/plugin-transform-modules-commonjs": "^7.9.0", + "@babel/preset-env": "^7.9.6", + "@babel/preset-react": "^7.9.4", + "babel-plugin-transform-react-remove-prop-types": "^0.4.24", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-proposal-class-properties": "^7.8.3" }, "consumedServices": { "status-bar": { diff --git a/rollup.config.js b/rollup.config.js new file mode 100644 index 00000000..db588e00 --- /dev/null +++ b/rollup.config.js @@ -0,0 +1,84 @@ +import resolve from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; +import peerexternal from 'rollup-plugin-peer-deps-external'; + +import babel from 'rollup-plugin-babel'; +// import typescript from '@rollup/plugin-typescript'; +import coffeescript from 'rollup-plugin-coffee-script'; +import json from '@rollup/plugin-json'; + +import { terser } from 'rollup-plugin-terser'; + +// import pkg from './package.json'; + +let plugins = [ + + // Convert CoffeeScript to JavaScript + coffeescript(), + + babel(), + + json(), + + // // datatip loads faster without this + peerexternal({ + includeDependencies: true, + }), + + // so Rollup can find externals + resolve({ extensions: ['.js', '.coffee'], preferBuiltins: true }), + + // so Rollup can convert externals to an ES module + commonjs({ + extensions: ['.js', '.coffee'], + // undetected named exports + namedExports: { + // left-hand side can be an absolute path, a path relative to the current directory, or the name of a module in node_modules + 'underscore-plus': ['debounce', 'throttle'], + }, + }), + + + // // Convert TypeScript to JavaScript + // typescript( + // { noEmitOnError: false } + // ), +]; + +// minify only in production mode +if (process.env.NODE_ENV === 'production') { + plugins.push( + // minify + terser({ + ecma: 2018, + warnings: true, + compress: { + drop_console: true, + }, + }) + ); +} + +export default [ + { + input: 'lib/julia-client.coffee', + output: [ + { + dir: "dist", + format: 'cjs', + sourcemap: true, + }, + ], + // loaded externally + external: [ + 'electron', + 'atom', + 'fs', + 'path', + // 'ssh2', + // 'atom-package-deps', + // 'node-pty-prebuilt-multiarch' + ], + plugins: plugins, + }, +];