");
- div[0].innerHTML = text;
- div.find(".comment").each(function()
- {
- $(this).find("p").each(function()
- {
- $(this).removeClass();
- })
- })
-
- // unhighlight links that don't exist
- div.find(".linkname").each(function()
- {
- var name = $(this).text();
- var found = false;
- for (var i in self.nodes())
- {
- if (self.nodes()[i].title().toLowerCase() == name.toLowerCase())
- {
- found = true;
- break;
- }
- }
- if (!found)
- $(this).removeClass("linkname");
- });
-
- text = div[0].innerHTML;
- return text;
- }
-
- this.updateLineNumbers = function(text)
- {
- // update line numbers
- var lines = text.split("\n");
- var lineNumbers = "";
- for (var i = 0; i < Math.max(1, lines.length); i ++)
- {
- if (i == 0 || i < lines.length - 1 || lines[i].length > 0)
- lineNumbers += (i + 1) + "
";
- }
- $(".editor-container .lines").html(lineNumbers);
- }
-
- this.updateHighlights = function(e)
- {
- if (e.keyCode == 17 || (e.keyCode >= 37 && e.keyCode <= 40))
- return;
-
- // get the text
- var editor = $(".editor");
- var text = editor[0].innerText;
- var startOffset, endOffset;
-
- // ctrl + z
- if ((e.metaKey || e.ctrlKey) && e.keyCode == 90)
- {
- if (self.editingHistory.length > 0)
- {
- var last = self.editingHistory.pop();
- text = last.text;
- startOffset = last.start;
- endOffset = last.end;
- }
- else
- {
- return;
- }
- }
- else
- {
- // get the current start offset
- var range = window.getSelection().getRangeAt(0);
- var preCaretStartRange = range.cloneRange();
- preCaretStartRange.selectNodeContents(editor[0]);
- preCaretStartRange.setEnd(range.startContainer, range.startOffset);
- startOffset = preCaretStartRange.toString().length;
-
- // get the current end offset
- var preCaretEndRange = range.cloneRange();
- preCaretEndRange.selectNodeContents(editor[0]);
- preCaretEndRange.setEnd(range.endContainer, range.endOffset);
- endOffset = preCaretEndRange.toString().length;
-
- // ctrl + c
- if ((e.metaKey || e.ctrlKey) && e.keyCode == 67)
- {
- if (self.gui != undefined)
- {
- var clipboard = self.gui.Clipboard.get();
- clipboard.set(text.substr(startOffset, (endOffset - startOffset)), 'text');
- }
- }
- else
- {
- // ctrl + v
- if ((e.metaKey || e.ctrlKey) && e.keyCode == 86)
- {
- var clipboard = self.gui.Clipboard.get();
- console.log(clipboard);
- text = text.substr(0, startOffset) + clipboard.get('text') + text.substr(endOffset);
- startOffset = endOffset = (startOffset + clipboard.get('text').length);
- }
- // ctrl + x
- else if ((e.metaKey || e.ctrlKey) && e.keyCode == 88)
- {
- if (self.gui != undefined)
- {
- var clipboard = self.gui.Clipboard.get();
- clipboard.set(text.substr(startOffset, (endOffset - startOffset)), 'text');
- text = text.substr(0, startOffset) + text.substr(endOffset);
- endOffset = startOffset;
- }
- }
- // increment if we just hit enter
- else if (e.keyCode == 13)
- {
- startOffset ++;
- endOffset ++;
- if (startOffset > text.length)
- startOffset = text.length;
- if (endOffset > text.length)
- endOffset = text.length;
- }
- // take into account tab character
- else if (e.keyCode == 9)
- {
- text = text.substr(0, startOffset) + "\t" + text.substr(endOffset);
- startOffset ++;
- endOffset = startOffset;
- e.preventDefault();
- }
-
- // save history (in chunks)
- if ((self.editingHistory.length == 0 || text != self.editingHistory[self.editingHistory.length - 1].text))
- {
- if (self.editingSaveHistoryTimeout == null)
- self.editingHistory.push({ text: text, start: startOffset, end: endOffset });
- clearTimeout(self.editingSaveHistoryTimeout);
- self.editingSaveHistoryTimeout = setTimeout(function() { self.editingSaveHistoryTimeout = null; }, 500);
- }
- }
- }
-
- // update text
- //editor[0].innerHTML = self.getHighlightedText(text);
-
- self.updateLineNumbers(text);
-
- // reset offsets
- if (document.createRange && window.getSelection)
- {
- function getTextNodesIn(node)
- {
- var textNodes = [];
- if (node.nodeType == 3)
- textNodes.push(node);
- else
- {
- var children = node.childNodes;
- for (var i = 0, len = children.length; i < len; ++i)
- textNodes.push.apply(textNodes, getTextNodesIn(children[i]));
- }
- return textNodes;
- }
-
- var range = document.createRange();
- range.selectNodeContents(editor[0]);
- var textNodes = getTextNodesIn(editor[0]);
- var charCount = 0, endCharCount;
- var foundStart = false;
- var foundEnd = false;
-
- for (var i = 0, textNode; textNode = textNodes[i++]; )
- {
- endCharCount = charCount + textNode.length;
- if (!foundStart && startOffset >= charCount && (startOffset <= endCharCount || (startOffset == endCharCount && i < textNodes.length)))
- {
- range.setStart(textNode, startOffset - charCount);
- foundStart = true;
- }
- if (!foundEnd && endOffset >= charCount && (endOffset <= endCharCount || (endOffset == endCharCount && i < textNodes.length)))
- {
- range.setEnd(textNode, endOffset - charCount);
- foundEnd = true;
- }
- if (foundStart && foundEnd)
- break;
- charCount = endCharCount;
- }
-
- var sel = window.getSelection();
- sel.removeAllRanges();
- sel.addRange(range);
- }
- }
-
- this.zoom = function(zoomLevel)
- {
- switch (zoomLevel)
- {
- case 1:
- self.cachedScale = 0.25;
- break;
- case 2:
- self.cachedScale = 0.5;
- break;
- case 3:
- self.cachedScale = 0.75;
- break;
- case 4:
- self.cachedScale = 1;
- break;
- }
-
- self.translate(200);
- }
-
- this.translate = function(speed)
- {
- var updateArrowsInterval = setInterval(self.updateArrowsThrottled, 16);
-
- $(".nodes-holder").transition(
- {
- transform: (
- "matrix(" +
- self.cachedScale + ",0,0," +
- self.cachedScale + "," +
- self.transformOrigin[0] +"," +
- self.transformOrigin[1] +
- ")"
- )
- },
- speed || 0,
- "easeInQuad",
- function() {
- clearInterval(updateArrowsInterval);
- self.updateArrowsThrottled();
- }
- );
- }
-
- /**
- * Align selected nodes relative to a node with the lowest x-value
- */
- this.arrangeX = function()
- {
- var SPACING = 250;
-
- var selectedNodes = self.nodes().filter(function(el) {
- return el.selected;
- })
- .sort(function(a, b) {
- if (a.x() > b.x()) return 1;
- if (a.x() < b.x()) return -1;
- return 0;
- }),
- referenceNode = selectedNodes.shift();
-
- if (!selectedNodes.length) {
- alert('Select nodes to align');
- return;
- }
-
- selectedNodes.forEach(function(node, i) {
- var x = referenceNode.x() + (SPACING * (i + 1));
- node.moveTo(x, referenceNode.y());
- });
- }
-
- /**
- * Align selected nodes relative to a node with the lowest y-value
- */
- this.arrangeY = function()
- {
- var SPACING = 250;
-
- var selectedNodes = self.nodes().filter(function(el) {
- return el.selected;
- })
- .sort(function(a, b) {
- if (a.y() > b.y()) return 1;
- if (a.y() < b.y()) return -1;
- return 0;
- }),
- referenceNode = selectedNodes.shift();
-
- if (!selectedNodes.length) {
- alert('Select nodes to align');
- return;
- }
-
- selectedNodes.forEach(function(node, i) {
- var y = referenceNode.y() + (SPACING * (i + 1));
- node.moveTo(referenceNode.x(), y);
- });
- }
-
- this.arrangeSpiral = function()
- {
- for (var i in self.nodes())
- {
- var node = self.nodes()[i];
- var y = Math.sin(i * .5) * (600 + i * 30);
- var x = Math.cos(i * .5) * (600 + i * 30);
- node.moveTo(x, y);
- }
- }
-
- this.sortAlphabetical = function()
- {
- console.log(self.nodes.sort);
- self.nodes.sort(function(a, b) { return a.title().localeCompare(b.title()); });
- }
-
- this.moveNodes = function(offX, offY)
- {
- for (var i in self.nodes())
- {
- var node = self.nodes()[i];
- node.moveTo(node.x() + offX, node.y() + offY);
- }
- }
-
- this.warpToNodeIdx = function(idx)
- {
- if (self.nodes().length > idx)
- {
- var node = self.nodes()[idx];
- var nodeXScaled = -( node.x() * self.cachedScale ),
- nodeYScaled = -( node.y() * self.cachedScale ),
- winXCenter = $(window).width() / 2,
- winYCenter = $(window).height() / 2,
- nodeWidthShift = node.tempWidth * self.cachedScale / 2,
- nodeHeightShift = node.tempHeight * self.cachedScale / 2;
-
- self.transformOrigin[0] = nodeXScaled + winXCenter - nodeWidthShift;
- self.transformOrigin[1] = nodeYScaled + winYCenter - nodeHeightShift;
- self.translate(100);
- self.focusedNodeIdx = idx;
- }
- }
-
- this.warpToSelectedNodeIdx = function(idx)
- {
- if (self.getSelectedNodes().length > idx)
- {
- var node = self.getSelectedNodes()[idx];
- var nodeXScaled = -( node.x() * self.cachedScale ),
- nodeYScaled = -( node.y() * self.cachedScale ),
- winXCenter = $(window).width() / 2,
- winYCenter = $(window).height() / 2,
- nodeWidthShift = node.tempWidth * self.cachedScale / 2,
- nodeHeightShift = node.tempHeight * self.cachedScale / 2;
-
- self.transformOrigin[0] = nodeXScaled + winXCenter - nodeWidthShift;
- self.transformOrigin[1] = nodeYScaled + winYCenter - nodeHeightShift;
- self.translate(100);
- self.focusedNodeIdx = idx;
- }
- }
-
- this.warpToNodeXY = function(x, y)
- {
- //alert("warp to x, y: " + x + ", " + y);
- const nodeWidth = 100, nodeHeight = 100;
- var nodeXScaled = -( x * self.cachedScale ),
- nodeYScaled = -( y * self.cachedScale ),
- winXCenter = $(window).width() / 2,
- winYCenter = $(window).height() / 2,
- nodeWidthShift = nodeWidth * self.cachedScale / 2,
- nodeHeightShift = nodeHeight * self.cachedScale / 2;
-
- self.transformOrigin[0] = nodeXScaled + winXCenter - nodeWidthShift;
- self.transformOrigin[1] = nodeYScaled + winYCenter - nodeHeightShift;
-
- //alert("self.transformOrigin[0]: " + self.transformOrigin[0]);
- self.translate(100);
- }
-
- this.searchWarp = function()
- {
- // if search field is empty
- if (self.$searchField.val() == "")
- {
- // warp to the first node
- self.warpToNodeIdx(0);
- }
- else
- {
- var search = self.$searchField.val().toLowerCase();
- for (var i in self.nodes())
- {
- var node = self.nodes()[i];
- if (node.title().toLowerCase() == search)
- {
- self.warpToNodeIdx(i);
- return;
- }
- }
- }
- }
-
- this.clearSearch = function()
- {
- self.$searchField.val("");
- self.updateSearch();
- }
-
-
- this.updateEditorStats = function()
- {
- var editor = ace.edit('editor');
- var text = editor.getSession().getValue();
- var cursor = editor.getCursorPosition();
-
- var lines = text.split("\n");
-
- $(".editor-footer .character-count").html(text.length);
- $(".editor-footer .line-count").html(lines.length);
- $(".editor-footer .row-index").html(cursor.row);
- $(".editor-footer .column-index").html(cursor.column);
- }
-}
+ }
+ if (e.keyCode === 31 || e.key === "Enter") {
+ // Open active node, if already active, close it
+
+ if (self.editing() === null) {
+ var activeNode = self.nodes()[self.focusedNodeIdx];
+ if (activeNode !== undefined) {
+ self.editNode(activeNode);
+ } else {
+ self.editNode(self.nodes()[0]);
+ }
+ } else if (e.ctrlKey) {
+ //ctrl+ enter closes an open node
+ self.saveNode();
+ }
+ }
+ // Spacebar toggle between nodes
+ if (e.keyCode === 32) {
+ if (self.editing() !== null && !e.ctrlKey) {
+ return; // Ctrl+spacebar to toggle between open nodes
+ }
+ var selectedNodes = self.getSelectedNodes();
+ var nodes = selectedNodes.length > 0 ? selectedNodes : self.nodes();
+ var isNodeSelected = selectedNodes.length > 0;
+ if (
+ self.focusedNodeIdx > -1 &&
+ nodes.length > self.focusedNodeIdx &&
+ (self.transformOrigin[0] !=
+ -nodes[self.focusedNodeIdx].x() +
+ $(window).width() / 2 -
+ $(nodes[self.focusedNodeIdx].element).width() / 2 ||
+ self.transformOrigin[1] !=
+ -nodes[self.focusedNodeIdx].y() +
+ $(window).height() / 2 -
+ $(nodes[self.focusedNodeIdx].element).height() / 2)
+ ) {
+ self.focusedNodeIdx = -1;
+ }
+
+ if (++self.focusedNodeIdx >= nodes.length) {
+ self.focusedNodeIdx = 0;
+ }
+ self.cachedScale = 1;
+ if (isNodeSelected) {
+ self.warpToSelectedNodeIdx(self.focusedNodeIdx);
+ } else {
+ self.warpToNodeIdx(self.focusedNodeIdx);
+ }
+
+ if (self.editing() !== null) {
+ self.editNode(self.nodes()[self.focusedNodeIdx]);
+ }
+ }
+ });
+
+ $(window).on("resize", self.updateArrowsThrottled);
+
+ $(document).on("keyup keydown mousedown mouseup", function(e) {
+ if (self.editing() != null) {
+ self.updateEditorStats();
+ }
+ });
+
+ // apple command key
+ //$(window).on('keydown', function(e) { if (e.keyCode == 91 || e.keyCode == 93) { self.appleCmdKey = true; } });
+ //$(window).on('keyup', function(e) { if (e.keyCode == 91 || e.keyCode == 93) { self.appleCmdKey = false; } });
+
+ // Handle file dropping
+ document.ondragover = document.ondrop = e => {
+ e.preventDefault();
+ };
+ document.body.ondrop = e => {
+ e.preventDefault();
+ data.openFile($("#open-file"), e.dataTransfer.files[0].path);
+ for (i = 1; i < e.dataTransfer.files.length; i++) {
+ data.appendFile(e, e.dataTransfer.files[i].path, false);
+ }
+ };
+ };
+
+ this.getNodesConnectedTo = function(toNode) {
+ var connectedNodes = [];
+ var nodes = self.nodes();
+ for (var i in nodes) {
+ if (nodes[i] != toNode && nodes[i].isConnectedTo(toNode, true)) {
+ var hasNode = false;
+ for (var j in connectedNodes) {
+ if (connectedNodes[j] == nodes[i]) {
+ hasNode = true;
+ break;
+ }
+ }
+ if (!hasNode) connectedNodes.push(nodes[i]);
+ }
+ }
+ return connectedNodes;
+ };
+
+ this.mouseUpOnNodeNotMoved = function() {
+ self.deselectAllNodes();
+ };
+
+ this.matchConnectedColorID = function(fromNode) {
+ var nodes = self.getNodesConnectedTo(fromNode);
+ for (var i in nodes) nodes[i].colorID(fromNode.colorID());
+ };
+
+ this.quit = function() {
+ if (self.gui != undefined) {
+ self.gui.App.quit();
+ }
+ };
+
+ this.refreshWindowTitle = function(editingPath) {
+ // var gui = require('nw.gui');
+ var gui = remote.getCurrentWindow();
+ if (!gui) return;
+
+ // Get the current window
+ // var win = gui.Window.get(); //Borked
+ var win = remote.getCurrentWindow();
+
+ win.title = "Yarn - [" + editingPath + "] "; // + (self.dirty?"*":"");
+ };
+
+ this.recordNodeAction = function(action, node) {
+ //we can't go forward in 'time' when
+ //new actions have been made
+ if (self.nodeFuture.length > 0) {
+ for (var i = 0; i < self.nodeFuture.length; i++) {
+ var future = self.nodeFuture.pop();
+ delete future.node;
+ }
+
+ delete self.nodeFuture;
+ self.nodeFuture = [];
+ }
+
+ var historyItem = {
+ action: action,
+ node: node,
+ lastX: node.x(),
+ lastY: node.y()
+ };
+
+ if (action == "removed") {
+ historyItem.lastY += 80;
+ }
+
+ self.nodeHistory.push(historyItem);
+ };
+
+ this.historyDirection = function(direction) {
+ function removeNode(node) {
+ var index = self.nodes.indexOf(node);
+ if (index >= 0) {
+ self.nodes.splice(index, 1);
+ }
+ self.updateNodeLinks();
+ }
+
+ var historyItem = null;
+
+ if (direction == "undo") historyItem = self.nodeHistory.pop();
+ else historyItem = self.nodeFuture.pop();
+
+ if (!historyItem) return;
+
+ var action = historyItem.action;
+ var node = historyItem.node;
+
+ if (direction == "undo") {
+ //undo actions
+ if (action == "created") {
+ historyItem.lastX = node.x();
+ historyItem.lastY = node.y();
+ removeNode(node);
+ } else if (action == "removed") {
+ self.recreateNode(node, historyItem.lastX, historyItem.lastY);
+ }
+
+ self.nodeFuture.push(historyItem);
+ } //redo undone actions
+ else {
+ if (action == "created") {
+ self.recreateNode(node, historyItem.lastX, historyItem.lastY);
+ } else if (action == "removed") {
+ removeNode(node);
+ }
+
+ self.nodeHistory.push(historyItem);
+ }
+ };
+
+ this.recreateNode = function(node, x, y) {
+ self.nodes.push(node);
+ node.moveTo(x, y);
+ self.updateNodeLinks();
+ };
+
+ this.setSelectedColors = function(node) {
+ var nodes = self.getSelectedNodes();
+ nodes.splice(nodes.indexOf(node), 1);
+
+ for (var i in nodes) nodes[i].colorID(node.colorID());
+ };
+
+ this.getSelectedNodes = function() {
+ var selectedNode = [];
+
+ for (var i in self.nodeSelection) {
+ selectedNode.push(self.nodeSelection[i]);
+ }
+
+ return selectedNode;
+ };
+
+ this.deselectAllNodes = function() {
+ var nodes = self.nodes();
+ for (var i in nodes) {
+ self.removeNodeSelection(nodes[i]);
+ }
+ };
+
+ this.addNodeSelected = function(node) {
+ var index = self.nodeSelection.indexOf(node);
+ if (index < 0) {
+ self.nodeSelection.push(node);
+ node.setSelected(true);
+ }
+ };
+
+ this.removeNodeSelection = function(node) {
+ var index = self.nodeSelection.indexOf(node);
+ if (index >= 0) {
+ self.nodeSelection.splice(index, 1);
+ node.setSelected(false);
+ }
+ };
+
+ this.deleteSelectedNodes = function() {
+ var nodes = self.getSelectedNodes();
+ for (var i in nodes) {
+ self.removeNodeSelection(nodes[i]);
+ nodes[i].remove();
+ }
+ };
+
+ this.newNode = function(updateArrows) {
+ var node = new Node();
+ self.nodes.push(node);
+ if (updateArrows == undefined || updateArrows == true)
+ self.updateNodeLinks();
+
+ self.recordNodeAction("created", node);
+
+ return node;
+ };
+
+ this.newNodeAt = function(x, y) {
+ var node = new Node();
+
+ self.nodes.push(node);
+
+ node.x(x - 100);
+ node.y(y - 100);
+ self.updateNodeLinks();
+ self.recordNodeAction("created", node);
+
+ return node;
+ };
+
+ this.removeNode = function(node) {
+ if (node.selected) {
+ self.deleteSelectedNodes();
+ }
+ var index = self.nodes.indexOf(node);
+ if (index >= 0) {
+ self.recordNodeAction("removed", node);
+ self.nodes.splice(index, 1);
+ }
+ self.updateNodeLinks();
+ };
+
+ this.editNode = function(node) {
+ if (node.active()) {
+ self.editing(node);
+
+ $(".node-editor")
+ .css({ opacity: 0 })
+ .transition({ opacity: 1 }, 250);
+ $(".node-editor .form")
+ .css({ y: "-100" })
+ .transition({ y: "0" }, 250);
+
+ //enable_spellcheck();
+ contents_modified = true;
+ //spell_check();
+
+ self.updateEditorStats();
+ }
+ };
+
+ this.trim = function(x) {
+ return x.replace(/^\s+|\s+$/gm, "");
+ };
+
+ this.appendText = function(textToAppend) {
+ self
+ .editing()
+ .body(
+ self.editing().body() +
+ " [[Answer:" +
+ textToAppend +
+ "|" +
+ textToAppend +
+ "]]"
+ );
+ };
+
+ this.testRunFrom = function(startTestNode) {
+ ipc.send(
+ "testYarnStoryFrom",
+ JSON.parse(data.getSaveData(FILETYPE.JSON)),
+ startTestNode
+ );
+ };
+
+ this.openNodeListMenu = function(action) {
+ var helperLinkSearch = document.getElementById(action + "HelperMenuFilter")
+ .value;
+ var rootMenu = document.getElementById(action + "HelperMenu");
+ for (let i = rootMenu.childNodes.length - 1; i > 1; i--) {
+ rootMenu.removeChild(rootMenu.childNodes[i]);
+ }
+ app.nodes().forEach((node, i) => {
+ if (
+ node
+ .title()
+ .toLowerCase()
+ .indexOf(helperLinkSearch) >= 0 ||
+ helperLinkSearch.length == 0
+ ) {
+ var p = document.createElement("span");
+ p.innerHTML = node.title();
+ p.setAttribute("class", "item");
+ var pColor = node.titleColorValues[app.nodes()[i].colorID()];
+ p.setAttribute("style", "background:" + pColor + ";");
+
+ if (action == "link") {
+ if (node.title() !== self.editing().title()) {
+ p.setAttribute("onclick", "app.appendText('" + node.title() + "')");
+ rootMenu.appendChild(p);
+ }
+ } else if (action == "run") {
+ if (
+ node
+ .title()
+ .toLowerCase()
+ .indexOf(helperLinkSearch) >= 0 ||
+ helperLinkSearch.length == 0
+ ) {
+ p.setAttribute(
+ "onclick",
+ "app.testRunFrom('" + node.title() + "')"
+ );
+ rootMenu.appendChild(p);
+ }
+ }
+ }
+ });
+ };
+
+ this.saveNode = function() {
+ if (self.editing() != null) {
+ self.makeNewNodesFromLinks();//
+ self.updateNodeLinks();
+ self.editing().title(self.trim(self.editing().title()));
+
+ $(".node-editor").transition({ opacity: 0 }, 250);
+ $(".node-editor .form").transition({ y: "-100" }, 250, function() {
+ self.editing(null);
+ });
+
+ setTimeout(self.updateSearch, 100);
+ }
+ };
+
+ this.updateSearch = function() {
+ var search = self.$searchField.val().toLowerCase();
+ var title = $(".search-title input").is(":checked");
+ var body = $(".search-body input").is(":checked");
+ var tags = $(".search-tags input").is(":checked");
+
+ var on = 1;
+ var off = 0.25;
+
+ for (var i = 0; i < app.nodes().length; i++) {
+ var node = app.nodes()[i];
+ var element = $(node.element);
+
+ if (search.length > 0 && (title || body || tags)) {
+ var matchTitle =
+ title &&
+ node
+ .title()
+ .toLowerCase()
+ .indexOf(search) >= 0;
+ var matchBody =
+ body &&
+ node
+ .body()
+ .toLowerCase()
+ .indexOf(search) >= 0;
+ var matchTags =
+ tags &&
+ node
+ .tags()
+ .toLowerCase()
+ .indexOf(search) >= 0;
+
+ if (matchTitle || matchBody || matchTags) {
+ node.active(true);
+ element.clearQueue();
+ element.transition({ opacity: on }, 500);
+ } else {
+ node.active(false);
+ element.clearQueue();
+ element.transition({ opacity: off }, 500);
+ }
+ } else {
+ node.active(true);
+ element.clearQueue();
+ element.transition({ opacity: on }, 500);
+ }
+ }
+ };
+
+ this.updateNodeLinks = function() {
+ for (var i in self.nodes()) self.nodes()[i].updateLinks();
+ };
+
+ this.makeNewNodesFromLinks = function(){
+ var otherNodeTitles = [];
+ app.nodes().forEach((node) => {
+ otherNodeTitles.push(node.title());
+ });
+
+ var nodeLinks = self.editing().getLinksInNode();
+ if (nodeLinks == undefined){return}
+ for (var i = 0; i < nodeLinks.length; i ++)
+ {
+ // Create new Nodes from Node Links
+ if (!otherNodeTitles.includes(nodeLinks[i])){
+ var newNodeOffset = 220 * (i+1);
+ self.newNodeAt(self.editing().x() + newNodeOffset, self.editing().y() - 120).title(nodeLinks[i]);
+ }
+ }
+ }
+
+ this.updateArrows = function() {
+ self.canvas.width = $(window).width();
+ self.canvas.height = $(window).height();
+
+ var scale = self.cachedScale;
+ var offset = $(".nodes-holder").offset();
+
+ self.context.clearRect(0, 0, $(window).width(), $(window).height());
+ self.context.lineWidth = 4 * scale;
+
+ var nodes = self.nodes();
+
+ for (var i in nodes) {
+ var node = nodes[i];
+ nodes[i].tempWidth = $(node.element).width();
+ nodes[i].tempHeight = $(node.element).height();
+ nodes[i].tempOpacity = $(node.element).css("opacity");
+ }
+
+ for (var index in nodes) {
+ var node = nodes[index];
+ if (node.linkedTo().length > 0) {
+ for (var link in node.linkedTo()) {
+ var linked = node.linkedTo()[link];
+
+ // get origins
+ var fromX = (node.x() + node.tempWidth / 2) * scale + offset.left;
+ var fromY = (node.y() + node.tempHeight / 2) * scale + offset.top;
+ var toX = (linked.x() + linked.tempWidth / 2) * scale + offset.left;
+ var toY = (linked.y() + linked.tempHeight / 2) * scale + offset.top;
+
+ // get the normal
+ var distance = Math.sqrt(
+ (fromX - toX) * (fromX - toX) + (fromY - toY) * (fromY - toY)
+ );
+ var normal = {
+ x: (toX - fromX) / distance,
+ y: (toY - fromY) / distance
+ };
+
+ var dist =
+ 110 + 160 * (1 - Math.max(Math.abs(normal.x), Math.abs(normal.y)));
+
+ // get from / to
+ var from = {
+ x: fromX + normal.x * dist * scale,
+ y: fromY + normal.y * dist * scale
+ };
+ var to = {
+ x: toX - normal.x * dist * scale,
+ y: toY - normal.y * dist * scale
+ };
+
+ self.context.strokeStyle =
+ "rgba(0, 0, 0, " + node.tempOpacity * 0.6 + ")";
+ self.context.fillStyle =
+ "rgba(0, 0, 0, " + node.tempOpacity * 0.6 + ")";
+
+ // draw line
+ self.context.beginPath();
+ self.context.moveTo(from.x, from.y);
+ self.context.lineTo(to.x, to.y);
+ self.context.stroke();
+
+ // draw arrow
+ self.context.beginPath();
+ self.context.moveTo(to.x + normal.x * 4, to.y + normal.y * 4);
+ self.context.lineTo(
+ to.x - normal.x * 16 * scale - normal.y * 12 * scale,
+ to.y - normal.y * 16 * scale + normal.x * 12 * scale
+ );
+ self.context.lineTo(
+ to.x - normal.x * 16 * scale + normal.y * 12 * scale,
+ to.y - normal.y * 16 * scale - normal.x * 12 * scale
+ );
+ self.context.fill();
+ }
+ }
+ }
+ };
+
+ this.updateArrowsThrottled = Utils.throttle(
+ this.updateArrows,
+ this.UPDATE_ARROWS_THROTTLE_MS
+ );
+
+ this.getHighlightedText = function(text) {
+ text = text.replace(/\/g, ">");
+ text = text.replace(
+ /\<\<(.*?)\>\>/g,
+ '
'
+ );
+ text = text.replace(
+ /\[\[([^\[\]]*?)\|([^\[\]]*?)\]\]/g,
+ '
'
+ );
+ text = text.replace(
+ /\/\/(.*)?($|\n)/g,
+ '\n'
+ );
+ text = text.replace(
+ /\/\*((.|[\r\n])*)?\*\//gm,
+ ''
+ );
+ text = text.replace(
+ /\/\%((.|[\r\n])*)?\%\//gm,
+ ''
+ );
+
+ // create a temporary document and remove all styles inside comments
+ var div = $("
");
+ div[0].innerHTML = text;
+ div.find(".comment").each(function() {
+ $(this)
+ .find("p")
+ .each(function() {
+ $(this).removeClass();
+ });
+ });
+
+ // unhighlight links that don't exist
+ div.find(".linkname").each(function() {
+ var name = $(this).text();
+ var found = false;
+ for (var i in self.nodes()) {
+ if (
+ self
+ .nodes()
+ [i].title()
+ .toLowerCase() == name.toLowerCase()
+ ) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) $(this).removeClass("linkname");
+ });
+
+ text = div[0].innerHTML;
+ return text;
+ };
+
+ this.updateLineNumbers = function(text) {
+ // update line numbers
+ var lines = text.split("\n");
+ var lineNumbers = "";
+ for (var i = 0; i < Math.max(1, lines.length); i++) {
+ if (i == 0 || i < lines.length - 1 || lines[i].length > 0)
+ lineNumbers += i + 1 + "
";
+ }
+ $(".editor-container .lines").html(lineNumbers);
+ };
+
+ this.updateHighlights = function(e) {
+ if (e.keyCode == 17 || (e.keyCode >= 37 && e.keyCode <= 40)) return;
+
+ // get the text
+ var editor = $(".editor");
+ var text = editor[0].innerText;
+ var startOffset, endOffset;
+
+ // ctrl + z
+ if ((e.metaKey || e.ctrlKey) && e.keyCode == 90) {
+ if (self.editingHistory.length > 0) {
+ var last = self.editingHistory.pop();
+ text = last.text;
+ startOffset = last.start;
+ endOffset = last.end;
+ } else {
+ return;
+ }
+ } else {
+ // get the current start offset
+ var range = window.getSelection().getRangeAt(0);
+ var preCaretStartRange = range.cloneRange();
+ preCaretStartRange.selectNodeContents(editor[0]);
+ preCaretStartRange.setEnd(range.startContainer, range.startOffset);
+ startOffset = preCaretStartRange.toString().length;
+
+ // get the current end offset
+ var preCaretEndRange = range.cloneRange();
+ preCaretEndRange.selectNodeContents(editor[0]);
+ preCaretEndRange.setEnd(range.endContainer, range.endOffset);
+ endOffset = preCaretEndRange.toString().length;
+
+ // ctrl + c
+ if ((e.metaKey || e.ctrlKey) && e.keyCode == 67) {
+ if (self.gui != undefined) {
+ var clipboard = self.gui.Clipboard.get();
+ clipboard.set(
+ text.substr(startOffset, endOffset - startOffset),
+ "text"
+ );
+ }
+ } else {
+ // ctrl + v
+ if ((e.metaKey || e.ctrlKey) && e.keyCode == 86) {
+ var clipboard = self.gui.Clipboard.get();
+ console.log(clipboard);
+ text =
+ text.substr(0, startOffset) +
+ clipboard.get("text") +
+ text.substr(endOffset);
+ startOffset = endOffset = startOffset + clipboard.get("text").length;
+ }
+ // ctrl + x
+ else if ((e.metaKey || e.ctrlKey) && e.keyCode == 88) {
+ if (self.gui != undefined) {
+ var clipboard = self.gui.Clipboard.get();
+ clipboard.set(
+ text.substr(startOffset, endOffset - startOffset),
+ "text"
+ );
+ text = text.substr(0, startOffset) + text.substr(endOffset);
+ endOffset = startOffset;
+ }
+ }
+ // increment if we just hit enter
+ else if (e.keyCode == 13) {
+ startOffset++;
+ endOffset++;
+ if (startOffset > text.length) startOffset = text.length;
+ if (endOffset > text.length) endOffset = text.length;
+ }
+ // take into account tab character
+ else if (e.keyCode == 9) {
+ text = text.substr(0, startOffset) + "\t" + text.substr(endOffset);
+ startOffset++;
+ endOffset = startOffset;
+ e.preventDefault();
+ }
+
+ // save history (in chunks)
+ if (
+ self.editingHistory.length == 0 ||
+ text != self.editingHistory[self.editingHistory.length - 1].text
+ ) {
+ if (self.editingSaveHistoryTimeout == null)
+ self.editingHistory.push({
+ text: text,
+ start: startOffset,
+ end: endOffset
+ });
+ clearTimeout(self.editingSaveHistoryTimeout);
+ self.editingSaveHistoryTimeout = setTimeout(function() {
+ self.editingSaveHistoryTimeout = null;
+ }, 500);
+ }
+ }
+ }
+
+ // update text
+ //editor[0].innerHTML = self.getHighlightedText(text);
+
+ self.updateLineNumbers(text);
+
+ // reset offsets
+ if (document.createRange && window.getSelection) {
+ function getTextNodesIn(node) {
+ var textNodes = [];
+ if (node.nodeType == 3) textNodes.push(node);
+ else {
+ var children = node.childNodes;
+ for (var i = 0, len = children.length; i < len; ++i)
+ textNodes.push.apply(textNodes, getTextNodesIn(children[i]));
+ }
+ return textNodes;
+ }
+
+ var range = document.createRange();
+ range.selectNodeContents(editor[0]);
+ var textNodes = getTextNodesIn(editor[0]);
+ var charCount = 0,
+ endCharCount;
+ var foundStart = false;
+ var foundEnd = false;
+
+ for (var i = 0, textNode; (textNode = textNodes[i++]); ) {
+ endCharCount = charCount + textNode.length;
+ if (
+ !foundStart &&
+ startOffset >= charCount &&
+ (startOffset <= endCharCount ||
+ (startOffset == endCharCount && i < textNodes.length))
+ ) {
+ range.setStart(textNode, startOffset - charCount);
+ foundStart = true;
+ }
+ if (
+ !foundEnd &&
+ endOffset >= charCount &&
+ (endOffset <= endCharCount ||
+ (endOffset == endCharCount && i < textNodes.length))
+ ) {
+ range.setEnd(textNode, endOffset - charCount);
+ foundEnd = true;
+ }
+ if (foundStart && foundEnd) break;
+ charCount = endCharCount;
+ }
+
+ var sel = window.getSelection();
+ sel.removeAllRanges();
+ sel.addRange(range);
+ }
+ };
+
+ this.zoom = function(zoomLevel) {
+ switch (zoomLevel) {
+ case 1:
+ self.cachedScale = 0.25;
+ break;
+ case 2:
+ self.cachedScale = 0.5;
+ break;
+ case 3:
+ self.cachedScale = 0.75;
+ break;
+ case 4:
+ self.cachedScale = 1;
+ break;
+ }
+
+ self.translate(200);
+ };
+
+ this.translate = function(speed) {
+ var updateArrowsInterval = setInterval(self.updateArrowsThrottled, 16);
+
+ $(".nodes-holder").transition(
+ {
+ transform:
+ "matrix(" +
+ self.cachedScale +
+ ",0,0," +
+ self.cachedScale +
+ "," +
+ self.transformOrigin[0] +
+ "," +
+ self.transformOrigin[1] +
+ ")"
+ },
+ speed || 0,
+ "easeInQuad",
+ function() {
+ clearInterval(updateArrowsInterval);
+ self.updateArrowsThrottled();
+ }
+ );
+ };
+
+ /**
+ * Align selected nodes relative to a node with the lowest x-value
+ */
+ this.arrangeX = function() {
+ var SPACING = 250;
+
+ var selectedNodes = self
+ .nodes()
+ .filter(function(el) {
+ return el.selected;
+ })
+ .sort(function(a, b) {
+ if (a.x() > b.x()) return 1;
+ if (a.x() < b.x()) return -1;
+ return 0;
+ }),
+ referenceNode = selectedNodes.shift();
+
+ if (!selectedNodes.length) {
+ alert("Select nodes to align");
+ return;
+ }
+
+ selectedNodes.forEach(function(node, i) {
+ var x = referenceNode.x() + SPACING * (i + 1);
+ node.moveTo(x, referenceNode.y());
+ });
+ };
+
+ /**
+ * Align selected nodes relative to a node with the lowest y-value
+ */
+ this.arrangeY = function() {
+ var SPACING = 250;
+
+ var selectedNodes = self
+ .nodes()
+ .filter(function(el) {
+ return el.selected;
+ })
+ .sort(function(a, b) {
+ if (a.y() > b.y()) return 1;
+ if (a.y() < b.y()) return -1;
+ return 0;
+ }),
+ referenceNode = selectedNodes.shift();
+
+ if (!selectedNodes.length) {
+ alert("Select nodes to align");
+ return;
+ }
+
+ selectedNodes.forEach(function(node, i) {
+ var y = referenceNode.y() + SPACING * (i + 1);
+ node.moveTo(referenceNode.x(), y);
+ });
+ };
+
+ this.arrangeSpiral = function() {
+ for (var i in self.nodes()) {
+ var node = self.nodes()[i];
+ var y = Math.sin(i * 0.5) * (600 + i * 30);
+ var x = Math.cos(i * 0.5) * (600 + i * 30);
+ node.moveTo(x, y);
+ }
+ };
+
+ this.sortAlphabetical = function() {
+ console.log(self.nodes.sort);
+ self.nodes.sort(function(a, b) {
+ return a.title().localeCompare(b.title());
+ });
+ };
+
+ this.moveNodes = function(offX, offY) {
+ for (var i in self.nodes()) {
+ var node = self.nodes()[i];
+ node.moveTo(node.x() + offX, node.y() + offY);
+ }
+ };
+
+ this.warpToNodeIdx = function(idx) {
+ if (self.nodes().length > idx) {
+ var node = self.nodes()[idx];
+ var nodeXScaled = -(node.x() * self.cachedScale),
+ nodeYScaled = -(node.y() * self.cachedScale),
+ winXCenter = $(window).width() / 2,
+ winYCenter = $(window).height() / 2,
+ nodeWidthShift = (node.tempWidth * self.cachedScale) / 2,
+ nodeHeightShift = (node.tempHeight * self.cachedScale) / 2;
+
+ self.transformOrigin[0] = nodeXScaled + winXCenter - nodeWidthShift;
+ self.transformOrigin[1] = nodeYScaled + winYCenter - nodeHeightShift;
+ self.translate(100);
+ self.focusedNodeIdx = idx;
+ }
+ };
+
+ this.warpToSelectedNodeIdx = function(idx) {
+ if (self.getSelectedNodes().length > idx) {
+ var node = self.getSelectedNodes()[idx];
+ var nodeXScaled = -(node.x() * self.cachedScale),
+ nodeYScaled = -(node.y() * self.cachedScale),
+ winXCenter = $(window).width() / 2,
+ winYCenter = $(window).height() / 2,
+ nodeWidthShift = (node.tempWidth * self.cachedScale) / 2,
+ nodeHeightShift = (node.tempHeight * self.cachedScale) / 2;
+
+ self.transformOrigin[0] = nodeXScaled + winXCenter - nodeWidthShift;
+ self.transformOrigin[1] = nodeYScaled + winYCenter - nodeHeightShift;
+ self.translate(100);
+ self.focusedNodeIdx = idx;
+ }
+ };
+
+ this.warpToNodeXY = function(x, y) {
+ //alert("warp to x, y: " + x + ", " + y);
+ const nodeWidth = 100,
+ nodeHeight = 100;
+ var nodeXScaled = -(x * self.cachedScale),
+ nodeYScaled = -(y * self.cachedScale),
+ winXCenter = $(window).width() / 2,
+ winYCenter = $(window).height() / 2,
+ nodeWidthShift = (nodeWidth * self.cachedScale) / 2,
+ nodeHeightShift = (nodeHeight * self.cachedScale) / 2;
+
+ self.transformOrigin[0] = nodeXScaled + winXCenter - nodeWidthShift;
+ self.transformOrigin[1] = nodeYScaled + winYCenter - nodeHeightShift;
+
+ //alert("self.transformOrigin[0]: " + self.transformOrigin[0]);
+ self.translate(100);
+ };
+
+ this.searchWarp = function() {
+ // if search field is empty
+ if (self.$searchField.val() == "") {
+ // warp to the first node
+ self.warpToNodeIdx(0);
+ } else {
+ var search = self.$searchField.val().toLowerCase();
+ for (var i in self.nodes()) {
+ var node = self.nodes()[i];
+ if (node.title().toLowerCase() == search) {
+ self.warpToNodeIdx(i);
+ return;
+ }
+ }
+ }
+ };
+
+ this.clearSearch = function() {
+ self.$searchField.val("");
+ self.updateSearch();
+ };
+
+ this.updateEditorStats = function() {
+ var editor = ace.edit("editor");
+ var text = editor.getSession().getValue();
+ var cursor = editor.getCursorPosition();
+
+ var lines = text.split("\n");
+
+ $(".editor-footer .character-count").html(text.length);
+ $(".editor-footer .line-count").html(lines.length);
+ $(".editor-footer .row-index").html(cursor.row);
+ $(".editor-footer .column-index").html(cursor.column);
+ };
+};
diff --git a/app/js/classes/data.js b/app/js/classes/data.js
index e872999..f04d1f6 100644
--- a/app/js/classes/data.js
+++ b/app/js/classes/data.js
@@ -1,40 +1,58 @@
-var FILETYPE = { JSON: "json", XML: "xml", TWEE: "twee", TWEE2: "tw2", UNKNOWN: "none", YARNTEXT: "yarn.txt" };
-
-var data =
-{
- editingPath: ko.observable(null),
- editingType: ko.observable(""),
- editingFolder: ko.observable(null),
-
- readFile: function(e, filename, clearNodes)
- {
- if (app.fs != undefined)
- {
- if (app.fs.readFile(filename, "utf-8", function(error, contents)
- {
- if (error)
- {
-
- }
- else
- {
- var type = data.getFileType(filename);
- if (type == FILETYPE.UNKNOWN)
- alert("Unknown filetype!");
- else
- {
- data.editingPath(filename);
- data.editingType(type);
- data.loadData(contents, type, clearNodes);
- }
- }
- }));
- }
- else
- {
- alert("Unable to load file from your browser");
- }
- /*
+var FILETYPE = {
+ JSON: "json",
+ XML: "xml",
+ TWEE: "twee",
+ TWEE2: "tw2",
+ UNKNOWN: "none",
+ YARNTEXT: "yarn.txt"
+};
+
+const ipc = require("electron").ipcRenderer;
+
+ipc.on("selected-file", function(event, path, operation) {
+ if (operation == "tryOpenFile") {
+ data.openFile($("#open-file"), path);
+ } else if (operation == "tryAppend") {
+ data.openFileDialog($("#open-file"), path);
+ }
+});
+
+ipc.on("saved-file", function(event, path, type, content) {
+ data.editingType(type);
+ data.saveTo(path, content);
+ app.refreshWindowTitle(path);
+});
+
+ipc.on("loadYarnDataObject", function(event, yarnData) {
+ console.log("Loading YARN data From Game engine...");
+ data.loadData(JSON.stringify(yarnData), FILETYPE.JSON, true);
+});
+
+var data = {
+ editingPath: ko.observable(null),
+ editingType: ko.observable(""),
+ editingFolder: ko.observable(null),
+
+ readFile: function(e, filename, clearNodes) {
+ if (app.fs != undefined) {
+ if (
+ app.fs.readFile(filename, "utf-8", function(error, contents) {
+ if (error) {
+ } else {
+ var type = data.getFileType(filename);
+ if (type == FILETYPE.UNKNOWN) alert("Unknown filetype!");
+ else {
+ data.editingPath(filename);
+ data.editingType(type);
+ data.loadData(contents, type, clearNodes);
+ }
+ }
+ })
+ );
+ } else {
+ alert("Unable to load file from your browser");
+ }
+ /*
else if (window.File && window.FileReader && window.FileList && window.Blob && e.target && e.target.files && e.target.files.length > 0)
{
var reader = new FileReader();
@@ -54,42 +72,35 @@ var data =
reader.readAsText(e.target.files[0], "UTF-8");
}
*/
- },
-
- openFile: function(e, filename)
- {
- data.readFile(e, filename, true);
-
- app.refreshWindowTitle(filename);
- },
-
- openFolder: function(e, foldername)
- {
- editingFolder = foldername;
- alert("openFolder not yet implemented e: " + e + " foldername: " + foldername);
- },
-
- appendFile: function(e, filename)
- {
- data.readFile(e, filename, false);
- },
-
- getFileType: function(filename)
- {
- var clone = filename;
-
- if (filename.toLowerCase().indexOf(".json") > -1)
- return FILETYPE.JSON;
- else if (filename.toLowerCase().indexOf(".yarn.txt") > -1)
- return FILETYPE.YARNTEXT;
- else if (filename.toLowerCase().indexOf(".xml") > -1)
- return FILETYPE.XML;
- else if (filename.toLowerCase().indexOf(".txt") > -1)
- return FILETYPE.TWEE;
- else if (filename.toLowerCase().indexOf(".tw2") > -1)
- return FILETYPE.TWEE2;
- return FILETYPE.UNKNOWN;
- /*
+ },
+
+ openFile: function(e, filename) {
+ data.readFile(e, filename, true);
+ app.refreshWindowTitle(filename);
+ },
+
+ openFolder: function(e, foldername) {
+ editingFolder = foldername;
+ alert(
+ "openFolder not yet implemented e: " + e + " foldername: " + foldername
+ );
+ },
+
+ appendFile: function(e, filename) {
+ data.readFile(e, filename, false);
+ },
+
+ getFileType: function(filename) {
+ var clone = filename;
+
+ if (filename.toLowerCase().indexOf(".json") > -1) return FILETYPE.JSON;
+ else if (filename.toLowerCase().indexOf(".yarn.txt") > -1)
+ return FILETYPE.YARNTEXT;
+ else if (filename.toLowerCase().indexOf(".xml") > -1) return FILETYPE.XML;
+ else if (filename.toLowerCase().indexOf(".txt") > -1) return FILETYPE.TWEE;
+ else if (filename.toLowerCase().indexOf(".tw2") > -1) return FILETYPE.TWEE2;
+ return FILETYPE.UNKNOWN;
+ /*
// is json?
if (/^[\],:{}\s]*$/.test(clone.replace(/\\["\\\/bfnrtu]/g, '@').
replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').
@@ -109,379 +120,340 @@ var data =
return FILETYPE.TWEE;
return FILETYPE.UNKNOWN;
*/
- },
-
- loadData: function(content, type, clearNodes)
- {
- // clear all content
- if (clearNodes)
- app.nodes.removeAll();
-
- var objects = [];
- var i = 0;
- if (type == FILETYPE.JSON)
- {
- content = JSON.parse(content);
- for (i = 0; i < content.length; i ++)
- objects.push(content[i]);
- }
- else if (type == FILETYPE.YARNTEXT)
- {
- var lines = content.split("\n");
- var obj = null;
- var index = 0;
- var readingBody = false;
- for (var i = 0; i < lines.length; i ++)
- {
-
- if (lines[i].trim() == "===")
- {
- readingBody = false;
- if (obj != null)
- {
- objects.push(obj);
- obj = null;
- }
- }
- else if (readingBody)
- {
- obj.body += lines[i] + "\n";
- }
- else
- {
- if (lines[i].indexOf("title:") > -1)
- {
- if (obj == null)
- obj = {};
- obj.title = lines[i].substr(7, lines[i].length-7);
- }
- else if (lines[i].indexOf("position:") > -1)
- {
- if (obj == null)
- obj = {}
- var xy = lines[i].substr(9, lines[i].length-9).split(',');
- obj.position = { x: Number(xy[0].trim()), y: Number(xy[1].trim()) }
- }
- else if (lines[i].indexOf("colorID:") > -1)
- {
- if (obj == null)
- obj = {}
- obj.colorID = Number(lines[i].substr(9, lines[i].length-9).trim());
- }
- else if (lines[i].indexOf("tags:") > -1)
- {
- if (obj == null)
- obj = {}
- obj.tags = lines[i].substr(6, lines[i].length-6);
- }
- else if (lines[i].trim() == "---")
- {
- readingBody = true;
- obj.body = "";
- }
- }
- }
- if (obj != null)
- {
- objects.push(obj);
- }
- }
- else if (type == FILETYPE.TWEE || type == FILETYPE.TWEE2)
- {
- var lines = content.split("\n");
- var obj = null;
- var index = 0;
- for (var i = 0; i < lines.length; i ++)
- {
- lines[i] = lines[i].trim();
- if (lines[i].substr(0, 2) == "::")
- {
- if (obj != null)
- objects.push(obj);
-
- obj = {};
- index ++;
-
- var title = "";
- var tags = "";
- var position = {x: index * 80, y: index * 80};
-
- // check if there are tags
- var openBracket = lines[i].indexOf("[");
- var closeBracket = lines[i].indexOf("]");
- if (openBracket > 0 && closeBracket > 0)
- {
- tags = lines[i].substr(openBracket + 1, closeBracket - openBracket - 1);
- }
-
- // check if there are positions (Twee2)
- var openPosition = lines[i].indexOf("<");
- var closePosition = lines[i].indexOf(">");
-
- if (openPosition > 0 && closePosition > 0)
- {
- var coordinates = lines[i].substr(openPosition + 1, closePosition - openPosition - 1).split(',');
- position.x = parseInt(coordinates[0]);
- position.y = parseInt(coordinates[1]);
- }
-
- var metaStart = 0;
- if (openBracket > 0) {
- metaStart = openBracket;
- } else if (openPosition > 0) {
- // Twee2 dictates that tags must come before position, so we'll only care about this if we don't
- // have any tags for this Passage
- metaStart = openPosition
- }
-
- console.log(openBracket, openPosition, metaStart);
-
- if (metaStart) {
- title = lines[i].substr(3, metaStart - 3);
- } else {
- title = lines[i].substr(3);
- }
-
- obj.title = title;
- obj.tags = tags;
- obj.body = "";
- obj.position = position;
- }
- else if (obj != null)
- {
- if (obj.body.length > 0)
- lines[i] += '\n';
- obj.body += lines[i];
- }
- }
-
- if (obj != null)
- objects.push(obj);
- }
- else if (type == FILETYPE.XML)
- {
- var oParser = new DOMParser();
- var xml = oParser.parseFromString(content, "text/xml");
- content = Utils.xmlToObject(xml);
-
- if (content != undefined)
- for (i = 0; i < content.length; i ++)
- objects.push(content[i]);
- }
-
- var avgX = 0, avgY = 0;
- var numAvg = 0;
- for (var i = 0; i < objects.length; i ++)
- {
- var node = new Node();
- app.nodes.push(node);
-
- var object = objects[i]
- if (object.title != undefined)
- node.title(object.title);
- if (object.body != undefined)
- node.body(object.body);
- if (object.tags != undefined)
- node.tags(object.tags);
- if (object.position != undefined && object.position.x != undefined)
- {
- node.x(object.position.x);
- avgX += object.position.x;
- numAvg ++;
- }
- if (object.position != undefined && object.position.y != undefined)
- {
- node.y(object.position.y);
- avgY += object.position.y;
- }
- if (object.colorID != undefined)
- node.colorID(object.colorID);
- }
-
- if (numAvg > 0)
- {
- app.warpToNodeXY(avgX/numAvg, avgY/numAvg);
- }
-
- $(".arrows").css({ opacity: 0 }).transition({ opacity: 1 }, 500);
- app.updateNodeLinks();
- },
-
- getSaveData: function(type)
- {
- var output = "";
- var content = [];
- var nodes = app.nodes();
-
- for (var i = 0; i < nodes.length; i ++)
- {
- content.push({
- "title": nodes[i].title(),
- "tags": nodes[i].tags(),
- "body": nodes[i].body(),
- "position": { "x": nodes[i].x(), "y": nodes[i].y() },
- "colorID": nodes[i].colorID()
- });
- }
-
- if (type == FILETYPE.JSON)
- {
- output = JSON.stringify(content, null, "\t");
- }
- else if (type == FILETYPE.YARNTEXT)
- {
- for (i = 0; i < content.length; i++)
- {
- output += "title: " + content[i].title + "\n";
- output += "tags: " + content[i].tags + "\n";
- output += "colorID: " + content[i].colorID + "\n";
- output += "position: " + content[i].position.x + "," + content[i].position.y + "\n";
- output += "---\n";
- output += content[i].body;
- var body = content[i].body
- if (!(body.length > 0 && body[body.length-1] == '\n'))
- {
- output += "\n";
- }
- output += "===\n";
- }
- }
- else if (type == FILETYPE.TWEE)
- {
- for (i = 0; i < content.length; i ++)
- {
- var tags = "";
- if (content[i].tags.length > 0)
- tags = " [" + content[i].tags + "]"
- output += ":: " + content[i].title + tags + "\n";
- output += content[i].body + "\n\n";
- }
- }
- else if (type == FILETYPE.TWEE2)
- {
- for (i = 0; i < content.length; i ++)
- {
- var tags = "";
- if (content[i].tags.length > 0)
- tags = " [" + content[i].tags + "]"
- var position = " <" + content[i].position.x + "," + content[i].position.y + ">";
- output += ":: " + content[i].title + tags + position + "\n";
- output += content[i].body + "\n\n";
- }
+ },
+
+ loadData: function(content, type, clearNodes) {
+ // clear all content
+ if (clearNodes) app.nodes.removeAll();
+
+ var objects = [];
+ var i = 0;
+ if (type == FILETYPE.JSON) {
+ content = JSON.parse(content);
+ if (!content) {
+ return;
+ }
+ for (i = 0; i < content.length; i++) objects.push(content[i]);
+ } else if (type == FILETYPE.YARNTEXT) {
+ var lines = content.split("\n");
+ var obj = null;
+ var index = 0;
+ var readingBody = false;
+ for (var i = 0; i < lines.length; i++) {
+ if (lines[i].trim() == "===") {
+ readingBody = false;
+ if (obj != null) {
+ objects.push(obj);
+ obj = null;
+ }
+ } else if (readingBody) {
+ obj.body += lines[i] + "\n";
+ } else {
+ if (lines[i].indexOf("title:") > -1) {
+ if (obj == null) obj = {};
+ obj.title = lines[i].substr(7, lines[i].length - 7);
+ } else if (lines[i].indexOf("position:") > -1) {
+ if (obj == null) obj = {};
+ var xy = lines[i].substr(9, lines[i].length - 9).split(",");
+ obj.position = { x: Number(xy[0].trim()), y: Number(xy[1].trim()) };
+ } else if (lines[i].indexOf("colorID:") > -1) {
+ if (obj == null) obj = {};
+ obj.colorID = Number(
+ lines[i].substr(9, lines[i].length - 9).trim()
+ );
+ } else if (lines[i].indexOf("tags:") > -1) {
+ if (obj == null) obj = {};
+ obj.tags = lines[i].substr(6, lines[i].length - 6);
+ } else if (lines[i].trim() == "---") {
+ readingBody = true;
+ obj.body = "";
+ }
}
- else if (type == FILETYPE.XML)
- {
- output += '
\n';
- for (i = 0; i < content.length; i ++)
- {
- output += "\t\n";
- output += "\t\t" + content[i].title + " \n";
- output += "\t\t" + content[i].tags + " \n";
- output += "\t\t" + content[i].body + "\n";
- output += '\t\t \n';
- output += '\t\t' + content[i].colorID + ' \n';
- output += "\t \n";
- }
- output += ' \n';
- }
-
- return output;
- },
-
- saveTo: function(path, content)
- {
- if (app.fs != undefined)
- {
- app.fs.writeFile(path, content, {encoding: 'utf-8'}, function(err)
- {
- data.editingPath(path);
- if(err)
- alert("Error Saving Data to " + path + ": " + err);
- });
- }
- },
-
- openFileDialog: function(dialog, callback)
- {
- dialog.bind("change", function(e)
- {
- // make callback
- callback(e, dialog.val());
-
- // replace input field with a new identical one, with the value cleared
- // (html can't edit file field values)
- var saveas = '';
- var accept = '';
- if (dialog.attr("nwsaveas") != undefined)
- saveas = 'nwsaveas="' + dialog.attr("nwsaveas") + '"'
- if (dialog.attr("accept") != undefined)
- saveas = 'accept="' + dialog.attr("accept") + '"'
-
- dialog.parent().append('
');
- dialog.unbind("change");
- dialog.remove();
- });
-
- dialog.trigger("click");
- },
-
- saveFileDialog: function(dialog, type, content)
- {
- var file = 'file.' + type;
-
- if (app.fs)
- {
- dialog.attr("nwsaveas", file);
- data.openFileDialog(dialog, function(e, path)
- {
- data.saveTo(path, content);
- app.refreshWindowTitle(path);
- });
- }
- else
- {
- switch(type) {
- case 'json':
- content = "data:text/json," + content;
- break;
- case 'xml':
- content = "data:text/xml," + content;
- break;
- default:
- content = "data:text/plain," + content;
- break;
- }
- window.open(content, "_blank");
- }
- },
-
- tryOpenFile: function()
- {
- data.openFileDialog($('#open-file'), data.openFile);
- },
-
- tryOpenFolder: function()
- {
- data.openFileDialog($('#open-folder'), data.openFolder);
- },
-
- tryAppend: function()
- {
- data.openFileDialog($('#open-file'), data.appendFile);
- },
-
- trySave: function(type)
- {
- data.editingType(type);
- data.saveFileDialog($('#save-file'), type, data.getSaveData(type));
- },
-
- trySaveCurrent: function()
- {
- if (data.editingPath().length > 0 && data.editingType().length > 0)
- {
- data.saveTo(data.editingPath(), data.getSaveData(data.editingType()));
- }
- }
-
-}
+ }
+ if (obj != null) {
+ objects.push(obj);
+ }
+ } else if (type == FILETYPE.TWEE || type == FILETYPE.TWEE2) {
+ var lines = content.split("\n");
+ var obj = null;
+ var index = 0;
+ for (var i = 0; i < lines.length; i++) {
+ lines[i] = lines[i].trim();
+ if (lines[i].substr(0, 2) == "::") {
+ if (obj != null) objects.push(obj);
+
+ obj = {};
+ index++;
+
+ var title = "";
+ var tags = "";
+ var position = { x: index * 80, y: index * 80 };
+
+ // check if there are tags
+ var openBracket = lines[i].indexOf("[");
+ var closeBracket = lines[i].indexOf("]");
+ if (openBracket > 0 && closeBracket > 0) {
+ tags = lines[i].substr(
+ openBracket + 1,
+ closeBracket - openBracket - 1
+ );
+ }
+
+ // check if there are positions (Twee2)
+ var openPosition = lines[i].indexOf("<");
+ var closePosition = lines[i].indexOf(">");
+
+ if (openPosition > 0 && closePosition > 0) {
+ var coordinates = lines[i]
+ .substr(openPosition + 1, closePosition - openPosition - 1)
+ .split(",");
+ position.x = parseInt(coordinates[0]);
+ position.y = parseInt(coordinates[1]);
+ }
+
+ var metaStart = 0;
+ if (openBracket > 0) {
+ metaStart = openBracket;
+ } else if (openPosition > 0) {
+ // Twee2 dictates that tags must come before position, so we'll only care about this if we don't
+ // have any tags for this Passage
+ metaStart = openPosition;
+ }
+
+ console.log(openBracket, openPosition, metaStart);
+
+ if (metaStart) {
+ title = lines[i].substr(3, metaStart - 3);
+ } else {
+ title = lines[i].substr(3);
+ }
+
+ obj.title = title;
+ obj.tags = tags;
+ obj.body = "";
+ obj.position = position;
+ } else if (obj != null) {
+ if (obj.body.length > 0) lines[i] += "\n";
+ obj.body += lines[i];
+ }
+ }
+
+ if (obj != null) objects.push(obj);
+ } else if (type == FILETYPE.XML) {
+ var oParser = new DOMParser();
+ var xml = oParser.parseFromString(content, "text/xml");
+ content = Utils.xmlToObject(xml);
+
+ if (content != undefined)
+ for (i = 0; i < content.length; i++) objects.push(content[i]);
+ }
+
+ var avgX = 0,
+ avgY = 0;
+ var numAvg = 0;
+ for (var i = 0; i < objects.length; i++) {
+ var node = new Node();
+ app.nodes.push(node);
+
+ var object = objects[i];
+ if (object.title != undefined) node.title(object.title);
+ if (object.body != undefined) node.body(object.body);
+ if (object.tags != undefined) node.tags(object.tags);
+ if (object.position != undefined && object.position.x != undefined) {
+ node.x(object.position.x);
+ avgX += object.position.x;
+ numAvg++;
+ }
+ if (object.position != undefined && object.position.y != undefined) {
+ node.y(object.position.y);
+ avgY += object.position.y;
+ }
+ if (object.colorID != undefined) node.colorID(object.colorID);
+ }
+
+ if (numAvg > 0) {
+ app.warpToNodeXY(avgX / numAvg, avgY / numAvg);
+ }
+
+ $(".arrows")
+ .css({ opacity: 0 })
+ .transition({ opacity: 1 }, 500);
+ app.updateNodeLinks();
+ },
+
+ getSaveData: function(type) {
+ var output = "";
+ var content = [];
+ var nodes = app.nodes();
+
+ for (var i = 0; i < nodes.length; i++) {
+ content.push({
+ title: nodes[i].title(),
+ tags: nodes[i].tags(),
+ body: nodes[i].body(),
+ position: { x: nodes[i].x(), y: nodes[i].y() },
+ colorID: nodes[i].colorID()
+ });
+ }
+
+ if (type == FILETYPE.JSON) {
+ output = JSON.stringify(content, null, "\t");
+ } else if (type == FILETYPE.YARNTEXT) {
+ for (i = 0; i < content.length; i++) {
+ output += "title: " + content[i].title + "\n";
+ output += "tags: " + content[i].tags + "\n";
+ output += "colorID: " + content[i].colorID + "\n";
+ output +=
+ "position: " +
+ content[i].position.x +
+ "," +
+ content[i].position.y +
+ "\n";
+ output += "---\n";
+ output += content[i].body;
+ var body = content[i].body;
+ if (!(body.length > 0 && body[body.length - 1] == "\n")) {
+ output += "\n";
+ }
+ output += "===\n";
+ }
+ } else if (type == FILETYPE.TWEE) {
+ for (i = 0; i < content.length; i++) {
+ var tags = "";
+ if (content[i].tags.length > 0) tags = " [" + content[i].tags + "]";
+ output += ":: " + content[i].title + tags + "\n";
+ output += content[i].body + "\n\n";
+ }
+ } else if (type == FILETYPE.TWEE2) {
+ for (i = 0; i < content.length; i++) {
+ var tags = "";
+ if (content[i].tags.length > 0) tags = " [" + content[i].tags + "]";
+ var position =
+ " <" + content[i].position.x + "," + content[i].position.y + ">";
+ output += ":: " + content[i].title + tags + position + "\n";
+ output += content[i].body + "\n\n";
+ }
+ } else if (type == FILETYPE.XML) {
+ output += "
\n";
+ for (i = 0; i < content.length; i++) {
+ output += "\t\n";
+ output += "\t\t" + content[i].title + " \n";
+ output += "\t\t" + content[i].tags + " \n";
+ output += "\t\t" + content[i].body + "\n";
+ output +=
+ '\t\t \n';
+ output += "\t\t" + content[i].colorID + " \n";
+ output += "\t \n";
+ }
+ output += " \n";
+ }
+
+ return output;
+ },
+
+ saveTo: function(path, content) {
+ if (app.fs != undefined) {
+ app.fs.writeFile(path, content, { encoding: "utf-8" }, function(err) {
+ data.editingPath(path);
+ if (err) alert("Error Saving Data to " + path + ": " + err);
+ });
+ }
+ },
+
+ openFileDialog: function(dialog, callback) {
+ dialog.bind("change", function(e) {
+ // make callback
+ callback(e, dialog.val());
+
+ // replace input field with a new identical one, with the value cleared
+ // (html can't edit file field values)
+ var saveas = "";
+ var accept = "";
+ if (dialog.attr("nwsaveas") != undefined)
+ saveas = 'nwsaveas="' + dialog.attr("nwsaveas") + '"';
+ if (dialog.attr("accept") != undefined)
+ saveas = 'accept="' + dialog.attr("accept") + '"';
+
+ dialog
+ .parent()
+ .append(
+ '
"
+ );
+ dialog.unbind("change");
+ dialog.remove();
+ });
+
+ dialog.trigger("click");
+ },
+
+ saveFileDialog: function(dialog, type, content) {
+ if (ipc) {
+ var file = "file." + type;
+ ipc.send("saveFileYarn", type, content);
+ return;
+ }
+ if (app.fs) {
+ dialog.attr("nwsaveas", file);
+ data.openFileDialog(dialog, function(e, path) {
+ data.saveTo(path, content);
+ app.refreshWindowTitle(path);
+ });
+ } else {
+ switch (type) {
+ case "json":
+ content = "data:text/json," + content;
+ break;
+ case "xml":
+ content = "data:text/xml," + content;
+ break;
+ default:
+ content = "data:text/plain," + content;
+ break;
+ }
+ window.open(content, "_blank");
+ }
+ },
+
+ tryOpenFile: function() /// Refactor to send signal to the main process
+ {
+ ipc.send("openFileYarn", "tryOpenFile");
+ // data.openFileDialog($('#open-file'), data.openFile);
+ },
+
+ tryOpenFolder: function() {
+ data.openFileDialog($("#open-folder"), data.openFolder);
+ },
+
+ tryAppend: function() {
+ ipc.send("openFileYarn", "tryAppend");
+ // data.openFileDialog($('#open-file'), data.appendFile);
+ },
+
+ trySave: function(type) {
+ data.editingType(type);
+ data.saveFileDialog($("#save-file"), type, data.getSaveData(type));
+ },
+
+ trySaveCurrent: function() {
+ if (data.editingPath().length > 0 && data.editingType().length > 0) {
+ data.saveTo(data.editingPath(), data.getSaveData(data.editingType()));
+ }
+ },
+
+ sendToExternalApp: function() {
+ ipc.send(
+ "sendYarnDataToObject",
+ JSON.parse(data.getSaveData(FILETYPE.JSON))
+ );
+ }
+};
diff --git a/app/js/classes/node.js b/app/js/classes/node.js
index bffd02d..2803c0e 100644
--- a/app/js/classes/node.js
+++ b/app/js/classes/node.js
@@ -6,7 +6,7 @@ const ClipNodeTextLength = 1024;
var Node = function()
{
var self = this;
-
+ this.titleColorValues = ['#eee','#6EA5E0','#9EDE74','#FFE374','#F7A666','#C47862','#97E1E9'];
// primary values
this.index = ko.observable(globalNodeIndex++);
this.title = ko.observable("Node" + this.index());
@@ -325,38 +325,56 @@ var Node = function()
return false;
}
- this.updateLinks = function()
- {
- self.resetDoubleClick();
- // clear existing links
- self.linkedTo.removeAll();
-
+ this.getLinksInNode = function(){
// find all the links
var links = self.body().match(/\[\[(.*?)\]\]/g);
+
if (links != undefined)
{
var exists = {};
for (var i = links.length - 1; i >= 0; i --)
{
- links[i] = links[i].substr(2, links[i].length - 4).toLowerCase();
-
+ links[i] = links[i].substr(2, links[i].length - 4)//.toLowerCase();
+
if (links[i].indexOf("|") >= 0)
+ {
links[i] = links[i].split("|")[1];
+ }
if (exists[links[i]] != undefined)
+ {
links.splice(i, 1);
-
+ }
exists[links[i]] = true;
}
+ return links
+ }
+ else{return undefined}
+ }
+
+ this.updateLinks = function()
+ {
+ self.resetDoubleClick();
+ // clear existing links
+ self.linkedTo.removeAll();
+ // find all the links
+ var links = self.getLinksInNode();
+ if (links != undefined)
+ {
// update links
for (var index in app.nodes())
{
var other = app.nodes()[index];
for (var i = 0; i < links.length; i ++)
- if (other != self && other.title().toLowerCase() == links[i])
+ {
+ // if (other != self && other.title().toLowerCase() == links[i])
+ if (other != self && other.title() == links[i])
+ {
self.linkedTo.push(other);
- }
+ }
+ }
+ }
}
}
diff --git a/app/js/classes/renderer.js b/app/js/classes/renderer.js
new file mode 100644
index 0000000..6b3f010
--- /dev/null
+++ b/app/js/classes/renderer.js
@@ -0,0 +1,137 @@
+const bondage = require('bondage');
+const bbcode = require('bbcode');
+const yarnRunner = new bondage.Runner();
+const EventEmitter = require('events').EventEmitter
+
+var yarnRender = function() {
+ this.self = this;
+ this.vnChoiceSelectionCursor = ">";
+ this.startTimeWait;
+ this.vnSelectedChoice = -1;
+ this.vnTextScrollInterval;
+ this.finished = false;
+ this.commandsPassedLog = [];
+ this.commandPassed = "";
+ this.emiter = new EventEmitter();
+
+ var vnChoices, vnTextResult, vnResult ,VNtext ,vnTextScroll ,htmIDtoAttachYarnTo,vnTextScrollIdx = 0;
+ this.vnUpdateChoice = function(direction=0){ //dir: -1 or 1
+ if (this.vnSelectedChoice < 0){return};
+ var attemptChoice = this.vnSelectedChoice + direction;
+ if (attemptChoice > vnResult.options.length-1){
+ attemptChoice = 0;
+ }
+ else if (attemptChoice < 0){console.log("last");
+ attemptChoice = vnResult.options.length-1};
+ this.vnSelectedChoice = attemptChoice;
+ vnChoices = "";
+ vnResult.options.forEach((choice,i) => {
+ vnChoices += "\n " ;
+ if(i==this.vnSelectedChoice){ vnChoices += this.vnChoiceSelectionCursor }
+ else{vnChoices += " "};
+ vnChoices += " ["+choice+"] ";
+ })
+ self.updateVNHud();
+ }
+
+ this.vnSelectChoice = function(){
+ var endTimeWait = new Date().getTime();
+ if (endTimeWait - this.startTimeWait < 1000){return}; // we need to wait for user to see the questions
+ vnResult.select(this.vnSelectedChoice);
+ vnResult = VNtext.next().value ;
+ vnChoices = "";
+ this.vnSelectedChoice = -1;
+ this.changeTextScrollSpeed(111);
+ }
+
+ this.changeTextScrollSpeed = function(interval=0){ /// this function is triggered on key press/release
+ if (vnResult == undefined){
+ // this.terminate();
+ this.finished = true;
+ return
+ };
+ if (interval == this.vnTextScrollInterval){return};/// use this to stop it from triggering on every frame
+ this.vnTextScrollInterval = interval;
+ clearInterval(vnTextScroll);//this resets the scroll timer
+
+ // if (vnResult.constructor.name == "CommandResult" ){
+ // this.commandsPassedLog.push(vnResult.value) ;
+ // this.commandsPassed = vnResult.value;
+ // this.emiter.emit("command",vnResult.value);
+ // vnTextScrollIdx = 0;
+ // vnResult = VNtext.next().value;
+ // this.changeTextScrollSpeed(200);
+ // return;
+ // }
+
+ if (vnResult.constructor.name == "OptionsResult"){ /// Add choices to text
+ if (this.vnSelectedChoice === -1){ /// we need to set it to -1 after choice is made
+ this.vnSelectedChoice = 0;
+ this.vnUpdateChoice();
+ this.startTimeWait = new Date().getTime();
+ }
+ return
+ }
+
+ if(vnTextScrollIdx >= vnResult.text.length){ /// Scrolled to end of text, move on
+ vnTextScrollIdx = 0;
+ vnResult = VNtext.next().value
+ this.changeTextScrollSpeed(200);
+ return;
+ };
+ if( interval == 0){return};
+ vnTextScroll = setInterval(self.scrollUpdateText, interval);
+ }
+
+ self.scrollUpdateText = function(){
+ vnTextResult = vnResult.text.substring(0,vnTextScrollIdx);
+ self.updateVNHud();
+ }
+
+ self.updateVNHud = function (){ /// trigger this only on text update
+ vnTextScrollIdx += 1;
+ var bbcodeHtml = vnTextResult;
+ if (vnResult.constructor.name === "TextResult"){
+ if (vnResult.text.includes("[")) {
+ while(vnTextResult.lastIndexOf("[") > vnTextResult.lastIndexOf("]")){
+ vnTextScrollIdx += 1;
+ vnTextResult = vnResult.text.substring(0,vnTextScrollIdx);
+ };
+ bbcodeHtml =bbcode.parse(vnTextResult);
+ }
+ };
+
+ var RenderHtml = "
"
+ RenderHtml += bbcodeHtml + "
"
+ if(vnChoices !== undefined){
+ RenderHtml += "
"+ vnChoices + "
" ///TODO: Render bbcode to html
+ }
+ RenderHtml += "
";
+ document.getElementById(htmIDtoAttachYarnTo).innerHTML=RenderHtml;
+ }
+
+ this.terminate = function(){
+ document.getElementById(htmIDtoAttachYarnTo).innerHTML="";
+ VNtext = null;
+ vnResult = null;
+ }
+
+ this.initYarn = function(yarnDataObject,startChapter,htmlIdToAttachTo){
+ htmIDtoAttachYarnTo =htmlIdToAttachTo
+ this.yarnDataObject= yarnDataObject
+ this.startChapter = startChapter
+ yarnRunner.load(yarnDataObject);
+ this.loadYarnChapter(startChapter);
+ }
+
+ //todo- rename to startChapter
+ this.loadYarnChapter = function(storyChapter){
+ this.finished = false;
+ console.log("LOADING YARN DATA... chapter: "+storyChapter);
+ VNtext = yarnRunner.run(storyChapter);
+ console.log("YARN::")
+ console.log(VNtext);
+ vnResult = VNtext.next().value
+ this.changeTextScrollSpeed(100)
+ }
+}
\ No newline at end of file
diff --git a/app/renderer.html b/app/renderer.html
new file mode 100644
index 0000000..af616c8
--- /dev/null
+++ b/app/renderer.html
@@ -0,0 +1,77 @@
+
+
+
+
+
+
Bondage.js Testing Yarn Story
+
+
+
+
+
+
+
+
+
+
+
Press "Z" to advance...
+
+
+
\ No newline at end of file
diff --git a/build/icon.png b/build/icon.png
new file mode 100644
index 0000000..d53b3d1
Binary files /dev/null and b/build/icon.png differ
diff --git a/main.js b/main.js
new file mode 100644
index 0000000..651887b
--- /dev/null
+++ b/main.js
@@ -0,0 +1,147 @@
+const electron = require("electron");
+const ipcMain = electron.ipcMain;
+const { dialog } = electron;
+const { autoUpdater } = require("electron-updater");
+const isDev = require('electron-is').dev();
+// Module to control application life.
+const app = electron.app;
+// Module to create native browser window.
+const BrowserWindow = electron.BrowserWindow;
+
+// Keep a global reference of the window object, if you don't, the window will
+// be closed automatically when the JavaScript object is garbage collected.
+let mainWindow;
+let yarnRunnerWindow;
+let yarnVersion = "0.3.2";
+
+function createWindow() {
+ // Create the browser window.
+ // screen.height;
+ // screen.width;
+ let { width, height } = require("electron").screen.getPrimaryDisplay().size;
+ mainWindow = new BrowserWindow({
+ defaultWidth: 1000,
+ defaultHeight: 800,
+ maximize: false,
+ show: false,
+ autoHideMenuBar: true
+ });
+ mainWindow.setMenu(null);
+ // and load the index.html of the app.
+ mainWindow.loadURL(`file://${__dirname}/app/index.html`);
+
+ if (isDev) {
+ mainWindow.webContents.openDevTools();
+ }
+
+ mainWindow.on("close", function(event) {
+ event.preventDefault();
+ if (yarnRunnerWindow) {
+ yarnRunnerWindow.destroy();
+ }
+ mainWindow.destroy();
+ mainWindow = null;
+ });
+
+ mainWindow.webContents.on('dom-ready', () => { // in case you want to send data to yarn window on init
+ // mainWindow.webContents.send('loadYarnDataObject', yarnData);
+ mainWindow.webContents.send('setVersionNumber', yarnVersion);
+ mainWindow.show();
+ mainWindow.maximize();
+ });
+
+ ipcMain.on("openFileYarn", (event, operation) => {
+ dialog.showOpenDialog(
+ {
+ properties: ["openFile"]
+ },
+ function(files) {
+ if (files)
+ mainWindow.webContents.send("selected-file", files[0], operation);
+ }
+ );
+ });
+
+ ipcMain.on("saveFileYarn", (event, type, content) => {
+ dialog.showSaveDialog(
+ mainWindow,
+ { filters: [{ name: "story", extensions: [type] }] },
+ function(filepath) {
+ mainWindow.webContents.send("saved-file", filepath, type, content);
+ }
+ );
+ });
+
+ ipcMain.on("sendYarnDataToObject", (event, content, startTestNode) => {
+ // in case you wannt to export yarn object to another embedded app
+ // otherApp.webContents.send('yarnSavedStory',content);
+ // mainWindow.close();
+ });
+
+ ipcMain.on("testYarnStoryFrom", (event, content, startTestNode) => {
+ createYarnTesterWindow(content, startTestNode);
+ });
+
+ // when the update has been downloaded and is ready to be installed, notify the BrowserWindow
+ autoUpdater.on("update-downloaded", info => {
+ mainWindow.webContents.send("updateReady");
+ });
+
+ // when receiving a quitAndInstall signal, quit and install the new version ;)
+ ipcMain.on("quitAndInstall", (event, arg) => {
+ autoUpdater.quitAndInstall();
+ });
+}
+
+function createYarnTesterWindow(content, startTestNode) {
+ // console.log("START RUN::"+startTestNode);
+ if (yarnRunnerWindow) {
+ yarnRunnerWindow.destroy();
+ }
+ yarnRunnerWindow = new BrowserWindow({
+ defaultWidth: 1400,
+ defaultHeight: 200,
+ maximize: false,
+ show: false,
+ autoHideMenuBar: true
+ });
+
+ yarnRunnerWindow.loadURL(`file://${__dirname}/app/renderer.html`);
+ if (isDev) {
+ yarnRunnerWindow.webContents.openDevTools()
+ };
+
+ yarnRunnerWindow.webContents.on("dom-ready", () => {
+ yarnRunnerWindow.webContents.send(
+ "loadYarnDataOnRunner",
+ content,
+ startTestNode
+ );
+ yarnRunnerWindow.show();
+ });
+}
+
+// This method will be called when Electron has finished
+// initialization and is ready to create browser windows.
+// Some APIs can only be used after this event occurs.
+app.on("ready", createWindow);
+
+// Quit when all windows are closed.
+app.on("window-all-closed", function() {
+ // On OS X it is common for applications and their menu bar
+ // to stay active until the user quits explicitly with Cmd + Q
+ if (process.platform !== "darwin") {
+ app.quit();
+ }
+});
+
+app.on("activate", function() {
+ // On OS X it's common to re-create a window in the app when the
+ // dock icon is clicked and there are no other windows open.
+ if (mainWindow === null) {
+ createWindow();
+ }
+});
+
+// In this file you can include the rest of your app's specific main process
+// code. You can also put them in separate files and require them here.
diff --git a/package-lock.json b/package-lock.json
new file mode 100644
index 0000000..92de877
--- /dev/null
+++ b/package-lock.json
@@ -0,0 +1,3152 @@
+{
+ "name": "yarn",
+ "version": "0.3.2",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "7zip-bin": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-4.0.2.tgz",
+ "integrity": "sha512-XtGk+IF57pr852UK1AhQJXqmm1WmSgS5uISL+LPs0z/iAxXouMvdlLJrHPeukP6gd7yR2rDTMSMkHNODgwIq7A==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "8.10.19",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.19.tgz",
+ "integrity": "sha512-+PU57o6DtOSx0/algmxgCwWrmCiomwC/K+LPfXonT0tQMbNTjHEqVzwL9dFEhFoPmLFIiSWjRorLH6Z0hJMT+Q==",
+ "dev": true
+ },
+ "JSONSelect": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/JSONSelect/-/JSONSelect-0.4.0.tgz",
+ "integrity": "sha1-oI7cxn6z/L6Z7WMIVTRKDPKCu40="
+ },
+ "JSV": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz",
+ "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c="
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz",
+ "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=",
+ "dev": true,
+ "requires": {
+ "co": "^4.6.0",
+ "fast-deep-equal": "^1.0.0",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.3.0"
+ }
+ },
+ "ajv-keywords": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz",
+ "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=",
+ "dev": true
+ },
+ "amdefine": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
+ "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=",
+ "optional": true
+ },
+ "ansi-align": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
+ "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "ansi-escapes": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz",
+ "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw=="
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "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==",
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "app-builder-bin": {
+ "version": "1.9.7",
+ "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-1.9.7.tgz",
+ "integrity": "sha512-CBwiiTeilkvsrSOPV7tFsqrd5yR+V8hKqwQa21DD8nZpwN7W7v3GwVgWbaJiX97Llo4S+fvRTHSP92F3FJxIwA==",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "array-find-index": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz",
+ "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=",
+ "dev": true
+ },
+ "asn1": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
+ "dev": true
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
+ "dev": true
+ },
+ "async-exit-hook": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz",
+ "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==",
+ "dev": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
+ "dev": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz",
+ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=",
+ "dev": true
+ },
+ "aws4": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.7.0.tgz",
+ "integrity": "sha512-32NDda82rhwD9/JBCCkB+MRYDp0oSvlo2IL6rQWA10PQi7tDUM3eqMSltXmY+Oyl/7N3P3qNtAlv7X0d9bI28w==",
+ "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
+ },
+ "base64-js": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz",
+ "integrity": "sha1-o5mS1yNYSBGYK+XikLtqU9hnAPE=",
+ "dev": true
+ },
+ "bbcode": {
+ "version": "0.1.5",
+ "resolved": "https://registry.npmjs.org/bbcode/-/bbcode-0.1.5.tgz",
+ "integrity": "sha1-qFR4EEd1tvPh0i8kb1X6DyI4CTs=",
+ "requires": {
+ "underscore": "*"
+ }
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "^0.14.3"
+ }
+ },
+ "bluebird": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
+ "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
+ },
+ "bluebird-lst": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.5.tgz",
+ "integrity": "sha512-Ey0bDNys5qpYPhZ/oQ9vOEvD0TYQDTILMXWP2iGfvMg7rSDde+oV4aQQgqRH+CvBFNz2BSDQnPGMUl6LKBUUQA==",
+ "requires": {
+ "bluebird": "^3.5.1"
+ }
+ },
+ "bondage": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/bondage/-/bondage-1.0.4.tgz",
+ "integrity": "sha512-/UKwgPmv90X+StHOm4fvlqjPQakbN4QGLS9+HWSuSBr9muNKiMVaOlB9NCAYpnzJ8ZDzYxjc+Hmg62P9IR5yPw==",
+ "requires": {
+ "commander": "^2.9.0",
+ "inquirer": "^3.0.6",
+ "jison": "^0.4.17"
+ }
+ },
+ "boxen": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
+ "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
+ "dev": true,
+ "requires": {
+ "ansi-align": "^2.0.0",
+ "camelcase": "^4.0.0",
+ "chalk": "^2.0.1",
+ "cli-boxes": "^1.0.0",
+ "string-width": "^2.0.0",
+ "term-size": "^1.2.0",
+ "widest-line": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "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"
+ }
+ },
+ "buffer-from": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz",
+ "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ=="
+ },
+ "builder-util": {
+ "version": "5.11.2",
+ "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-5.11.2.tgz",
+ "integrity": "sha512-Do6xVlXa6MBaxMdfCHajcfOzyzo8CBDuDVDr0PftVI0CcKpUQIe81kWwcA5w6Ossd7d52harHFuVO3NzxSwWUA==",
+ "dev": true,
+ "requires": {
+ "7zip-bin": "~4.0.2",
+ "app-builder-bin": "1.9.7",
+ "bluebird-lst": "^1.0.5",
+ "builder-util-runtime": "^4.2.1",
+ "chalk": "^2.4.1",
+ "debug": "^3.1.0",
+ "fs-extra-p": "^4.6.0",
+ "is-ci": "^1.1.0",
+ "js-yaml": "^3.11.0",
+ "lazy-val": "^1.0.3",
+ "semver": "^5.5.0",
+ "source-map-support": "^0.5.6",
+ "stat-mode": "^0.2.2",
+ "temp-file": "^3.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "builder-util-runtime": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-4.2.1.tgz",
+ "integrity": "sha512-6Ufp6ExT40RDYNXQgD4xG0fgtpUHyc8XIld6lptKr0re1DNnUrQP4sSV/lJOajpzyercMP/YIzO60/mNuAFiWg==",
+ "requires": {
+ "bluebird-lst": "^1.0.5",
+ "debug": "^3.1.0",
+ "fs-extra-p": "^4.6.0",
+ "sax": "^1.2.4"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
+ "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
+ "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=",
+ "dev": true
+ },
+ "camelcase-keys": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
+ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^2.0.0",
+ "map-obj": "^1.0.0"
+ }
+ },
+ "capture-stack-trace": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
+ "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=",
+ "dev": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz",
+ "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==",
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chardet": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
+ "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I="
+ },
+ "chromium-pickle-js": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz",
+ "integrity": "sha1-BKEGZywYsIWrd02YPfo+oTjyIgU=",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.3.tgz",
+ "integrity": "sha512-SK/846h/Rcy8q9Z9CAwGBLfCJ6EkjJWdpelWDufQpqVDYq2Wnnv8zlSO6AMQap02jvhVruKKpEtQOufo3pFhLg==",
+ "dev": true
+ },
+ "cjson": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/cjson/-/cjson-0.3.0.tgz",
+ "integrity": "sha1-5kObkHA9MS/24iJAl76pLOPQKhQ=",
+ "requires": {
+ "jsonlint": "1.6.0"
+ }
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
+ "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
+ "dev": true
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk="
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
+ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0",
+ "wrap-ansi": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
+ "dev": true
+ },
+ "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=",
+ "dev": true
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.1.tgz",
+ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==",
+ "requires": {
+ "color-name": "^1.1.1"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU="
+ },
+ "colors": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-0.5.1.tgz",
+ "integrity": "sha1-fQAj6usVTo7p/Oddy5I9DtFmd3Q="
+ },
+ "combined-stream": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
+ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
+ "dev": true,
+ "requires": {
+ "delayed-stream": "~1.0.0"
+ }
+ },
+ "commander": {
+ "version": "2.15.1",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz",
+ "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag=="
+ },
+ "compare-version": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz",
+ "integrity": "sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA=",
+ "dev": 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
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
+ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
+ "dev": true,
+ "requires": {
+ "buffer-from": "^1.0.0",
+ "inherits": "^2.0.3",
+ "readable-stream": "^2.2.2",
+ "typedarray": "^0.0.6"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
+ "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
+ "dev": 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"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
+ "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.0"
+ }
+ }
+ }
+ },
+ "configstore": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
+ "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
+ "dev": true,
+ "requires": {
+ "dot-prop": "^4.1.0",
+ "graceful-fs": "^4.1.2",
+ "make-dir": "^1.0.0",
+ "unique-string": "^1.0.0",
+ "write-file-atomic": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ }
+ },
+ "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=",
+ "dev": true
+ },
+ "create-error-class": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
+ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
+ "dev": true,
+ "requires": {
+ "capture-stack-trace": "^1.0.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^4.0.1",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
+ "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
+ "dev": true
+ },
+ "currently-unhandled": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
+ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=",
+ "dev": true,
+ "requires": {
+ "array-find-index": "^1.0.1"
+ }
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "deep-extend": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
+ "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
+ "dev": true
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
+ "dev": true
+ },
+ "dmg-builder": {
+ "version": "4.10.1",
+ "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-4.10.1.tgz",
+ "integrity": "sha512-+NqdmZb5uhPV1exzeH+hD+WLtr79qRjfA38S7DckOIMQW0C5Vykvp4dqCypnupfEnEOVZMcaNCCKK639h/uS/g==",
+ "dev": true,
+ "requires": {
+ "bluebird-lst": "^1.0.5",
+ "builder-util": "^5.11.0",
+ "electron-builder-lib": "~20.14.6",
+ "fs-extra-p": "^4.6.0",
+ "iconv-lite": "^0.4.23",
+ "js-yaml": "^3.11.0",
+ "parse-color": "^1.0.0",
+ "sanitize-filename": "^1.6.1"
+ },
+ "dependencies": {
+ "app-builder-bin": {
+ "version": "1.9.5",
+ "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-1.9.5.tgz",
+ "integrity": "sha512-Uw8jhfww5gYcAvMVgeRZ9cdlXOv+Ivqy4LSbALPMrQrCHHTmfVXETthkhW3cQKdvDo9pRuYn+Q5egSSn04F+Wg==",
+ "dev": true
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "electron-builder-lib": {
+ "version": "20.14.7",
+ "resolved": "https://registry.npmjs.org/electron-builder-lib/-/electron-builder-lib-20.14.7.tgz",
+ "integrity": "sha512-sPlpRN5Nea9ZK+nwZcD5ZuGoK2uCj2muQ7enc+9BeXPAxnEu4yYmYanICAi4BQqUdusm4yjjnN9uPowlbvCNzA==",
+ "dev": true,
+ "requires": {
+ "7zip-bin": "~4.0.2",
+ "app-builder-bin": "1.9.5",
+ "async-exit-hook": "^2.0.1",
+ "bluebird-lst": "^1.0.5",
+ "builder-util": "5.11.1",
+ "builder-util-runtime": "4.2.1",
+ "chromium-pickle-js": "^0.2.0",
+ "debug": "^3.1.0",
+ "ejs": "^2.6.1",
+ "electron-osx-sign": "0.4.10",
+ "electron-publish": "20.14.6",
+ "fs-extra-p": "^4.6.0",
+ "hosted-git-info": "^2.6.0",
+ "is-ci": "^1.1.0",
+ "isbinaryfile": "^3.0.2",
+ "js-yaml": "^3.11.0",
+ "lazy-val": "^1.0.3",
+ "minimatch": "^3.0.4",
+ "normalize-package-data": "^2.4.0",
+ "plist": "^3.0.1",
+ "read-config-file": "3.0.1",
+ "sanitize-filename": "^1.6.1",
+ "semver": "^5.5.0",
+ "stream-json": "^0.6.1",
+ "temp-file": "^3.1.2"
+ },
+ "dependencies": {
+ "builder-util": {
+ "version": "5.11.1",
+ "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-5.11.1.tgz",
+ "integrity": "sha512-fZu9j33B4VMeUJaeb1q2TubKWrk9tAg2Jwpgjstxk7Mu7sNw7v/XB87/EbpNBlE3RPMrXblG6f8asfCRC8IiNQ==",
+ "dev": true,
+ "requires": {
+ "7zip-bin": "~4.0.2",
+ "app-builder-bin": "1.9.5",
+ "bluebird-lst": "^1.0.5",
+ "builder-util-runtime": "^4.2.1",
+ "chalk": "^2.4.1",
+ "debug": "^3.1.0",
+ "fs-extra-p": "^4.6.0",
+ "is-ci": "^1.1.0",
+ "js-yaml": "^3.11.0",
+ "lazy-val": "^1.0.3",
+ "semver": "^5.5.0",
+ "source-map-support": "^0.5.6",
+ "stat-mode": "^0.2.2",
+ "temp-file": "^3.1.2"
+ }
+ }
+ }
+ }
+ }
+ },
+ "dot-prop": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
+ "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
+ "dev": true,
+ "requires": {
+ "is-obj": "^1.0.0"
+ }
+ },
+ "dotenv": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-5.0.1.tgz",
+ "integrity": "sha512-4As8uPrjfwb7VXC+WnLCbXK7y+Ueb2B3zgNCePYfhxS1PYeaO1YTeplffTEcbfLhvFNGLAz90VvJs9yomG7bow==",
+ "dev": true
+ },
+ "dotenv-expand": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz",
+ "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=",
+ "dev": true
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
+ "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
+ "dev": true
+ },
+ "ebnf-parser": {
+ "version": "0.1.10",
+ "resolved": "https://registry.npmjs.org/ebnf-parser/-/ebnf-parser-0.1.10.tgz",
+ "integrity": "sha1-zR9rpHfFY4xAyX7ZtXLbW6tdgzE="
+ },
+ "ecc-jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "~0.1.0"
+ }
+ },
+ "ejs": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz",
+ "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==",
+ "dev": true
+ },
+ "electron": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/electron/-/electron-2.0.2.tgz",
+ "integrity": "sha512-XmkGVoHLOqmjZ2nU/0zEzMl3TZEz452Q1fTJFKjylg4pLYaq7na7V2uxzydVQNQukZGbERoA7ayjxXzTsXbtdA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "^8.0.24",
+ "electron-download": "^3.0.1",
+ "extract-zip": "^1.0.3"
+ }
+ },
+ "electron-builder": {
+ "version": "20.15.1",
+ "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-20.15.1.tgz",
+ "integrity": "sha512-oH+yMWLNH3XhwmvrSC49voVrbsG8bnKMO10vE/OUQnH/hr3Er/KHv8XBEPCYnMk3tCxEvcEANQeLoTVgeMUfKQ==",
+ "dev": true,
+ "requires": {
+ "bluebird-lst": "^1.0.5",
+ "builder-util": "5.11.2",
+ "builder-util-runtime": "4.2.1",
+ "chalk": "^2.4.1",
+ "dmg-builder": "4.10.1",
+ "electron-builder-lib": "20.15.1",
+ "electron-download-tf": "4.3.4",
+ "fs-extra-p": "^4.6.0",
+ "is-ci": "^1.1.0",
+ "lazy-val": "^1.0.3",
+ "read-config-file": "3.0.1",
+ "sanitize-filename": "^1.6.1",
+ "update-notifier": "^2.5.0",
+ "yargs": "^11.0.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "electron-download-tf": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/electron-download-tf/-/electron-download-tf-4.3.4.tgz",
+ "integrity": "sha512-SQYDGMLpTgty1bx3NycuDb7dNPzktVSdK2sqPZjyRocauq/uN/V4S2lcpFVLupaHhKlD8zozm9fTpm5UdohvTg==",
+ "dev": true,
+ "requires": {
+ "debug": "^3.0.0",
+ "env-paths": "^1.0.0",
+ "fs-extra": "^4.0.1",
+ "minimist": "^1.2.0",
+ "nugget": "^2.0.1",
+ "path-exists": "^3.0.0",
+ "rc": "^1.2.1",
+ "semver": "^5.4.1",
+ "sumchecker": "^2.0.2"
+ }
+ },
+ "fs-extra": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz",
+ "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "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
+ },
+ "sumchecker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-2.0.2.tgz",
+ "integrity": "sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.2.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ }
+ }
+ },
+ "electron-builder-lib": {
+ "version": "20.15.1",
+ "resolved": "https://registry.npmjs.org/electron-builder-lib/-/electron-builder-lib-20.15.1.tgz",
+ "integrity": "sha512-7FuH8+WlvIZHCEFreWuiSkOrg+AnYUf2bxYUhddeETMlH8ojfW/ehVM0RbZsEXLdXlJ70wUmxEOBwL7mWiz1lw==",
+ "dev": true,
+ "requires": {
+ "7zip-bin": "~4.0.2",
+ "app-builder-bin": "1.9.7",
+ "async-exit-hook": "^2.0.1",
+ "bluebird-lst": "^1.0.5",
+ "builder-util": "5.11.2",
+ "builder-util-runtime": "4.2.1",
+ "chromium-pickle-js": "^0.2.0",
+ "debug": "^3.1.0",
+ "ejs": "^2.6.1",
+ "electron-osx-sign": "0.4.10",
+ "electron-publish": "20.15.0",
+ "fs-extra-p": "^4.6.0",
+ "hosted-git-info": "^2.6.0",
+ "is-ci": "^1.1.0",
+ "isbinaryfile": "^3.0.2",
+ "js-yaml": "^3.11.0",
+ "lazy-val": "^1.0.3",
+ "minimatch": "^3.0.4",
+ "normalize-package-data": "^2.4.0",
+ "plist": "^3.0.1",
+ "read-config-file": "3.0.1",
+ "sanitize-filename": "^1.6.1",
+ "semver": "^5.5.0",
+ "stream-json": "^0.6.1",
+ "temp-file": "^3.1.2"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "electron-publish": {
+ "version": "20.15.0",
+ "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.15.0.tgz",
+ "integrity": "sha512-0v1jXvbRDlPK5S+LzEZqcvuFHLCSWPKmMYmbDwVheeNRjbJjQLlZyQAINVlV+Ky+yhawChEaAF+dyGLvXEyONg==",
+ "dev": true,
+ "requires": {
+ "bluebird-lst": "^1.0.5",
+ "builder-util": "^5.11.2",
+ "builder-util-runtime": "^4.2.1",
+ "chalk": "^2.4.1",
+ "fs-extra-p": "^4.6.0",
+ "lazy-val": "^1.0.3",
+ "mime": "^2.3.1"
+ }
+ }
+ }
+ },
+ "electron-download": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz",
+ "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.2.0",
+ "fs-extra": "^0.30.0",
+ "home-path": "^1.0.1",
+ "minimist": "^1.2.0",
+ "nugget": "^2.0.0",
+ "path-exists": "^2.1.0",
+ "rc": "^1.1.2",
+ "semver": "^5.3.0",
+ "sumchecker": "^1.2.0"
+ }
+ },
+ "electron-is": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/electron-is/-/electron-is-2.4.1.tgz",
+ "integrity": "sha512-cWPJVsyfU1lTbUCwOyEhTChl+dU5OTPgQ/qffX72aBaWE2YcgmUriRrDioBn5gnlMok/LctTzcnJSVSTUJJMjg==",
+ "requires": {
+ "electron-is-dev": "^0.3.0",
+ "semver": "^5.3.0"
+ }
+ },
+ "electron-is-dev": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-0.3.0.tgz",
+ "integrity": "sha1-FOb9pcaOnk7L7/nM8DfL18BcWv4="
+ },
+ "electron-osx-sign": {
+ "version": "0.4.10",
+ "resolved": "https://registry.npmjs.org/electron-osx-sign/-/electron-osx-sign-0.4.10.tgz",
+ "integrity": "sha1-vk87ibKnWh3F8eckkIGrKSnKOiY=",
+ "dev": true,
+ "requires": {
+ "bluebird": "^3.5.0",
+ "compare-version": "^0.1.2",
+ "debug": "^2.6.8",
+ "isbinaryfile": "^3.0.2",
+ "minimist": "^1.2.0",
+ "plist": "^2.1.0"
+ },
+ "dependencies": {
+ "plist": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-2.1.0.tgz",
+ "integrity": "sha1-V8zbeggh3yGDEhejytVOPhRqECU=",
+ "dev": true,
+ "requires": {
+ "base64-js": "1.2.0",
+ "xmlbuilder": "8.2.2",
+ "xmldom": "0.1.x"
+ }
+ }
+ }
+ },
+ "electron-publish": {
+ "version": "20.14.6",
+ "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-20.14.6.tgz",
+ "integrity": "sha512-14u2eT8qTNKD1ek20UK5AbjDn6qmdhAOEiTcgmjmrMoRJFQIhGwV3emFmfaY1S6uFnFdY/4MyMcU92AXD1oRsw==",
+ "dev": true,
+ "requires": {
+ "bluebird-lst": "^1.0.5",
+ "builder-util": "^5.11.0",
+ "builder-util-runtime": "^4.2.1",
+ "chalk": "^2.4.1",
+ "fs-extra-p": "^4.6.0",
+ "lazy-val": "^1.0.3",
+ "mime": "^2.3.1"
+ }
+ },
+ "electron-updater": {
+ "version": "2.21.10",
+ "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-2.21.10.tgz",
+ "integrity": "sha512-9QNUGHqwddLFIsFiAoFSxu0NdmvB1VGKrH2dGCn/b8nDwfWwHUyCnetMsnwcVSMjHA2Lz4tGfRSDSN3PtlVDKA==",
+ "requires": {
+ "bluebird-lst": "^1.0.5",
+ "builder-util-runtime": "~4.2.1",
+ "electron-is-dev": "^0.3.0",
+ "fs-extra-p": "^4.6.0",
+ "js-yaml": "^3.11.0",
+ "lazy-val": "^1.0.3",
+ "lodash.isequal": "^4.5.0",
+ "semver": "^5.5.0",
+ "source-map-support": "^0.5.5"
+ }
+ },
+ "env-paths": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz",
+ "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=",
+ "dev": true
+ },
+ "error-ex": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz",
+ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=",
+ "dev": true,
+ "requires": {
+ "is-arrayish": "^0.2.1"
+ }
+ },
+ "es6-promise": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
+ "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==",
+ "dev": true
+ },
+ "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="
+ },
+ "escodegen": {
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.3.3.tgz",
+ "integrity": "sha1-8CQBb1qI4Eb9EgBQVek5gC5sXyM=",
+ "requires": {
+ "esprima": "~1.1.1",
+ "estraverse": "~1.5.0",
+ "esutils": "~1.0.0",
+ "source-map": "~0.1.33"
+ }
+ },
+ "esprima": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.1.1.tgz",
+ "integrity": "sha1-W28VR/TRAuZw4UDFCb5ncdautUk="
+ },
+ "estraverse": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-1.5.1.tgz",
+ "integrity": "sha1-hno+jlip+EYYr7bC3bzZFrfLr3E="
+ },
+ "esutils": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-1.0.0.tgz",
+ "integrity": "sha1-gVHTWOIMisx/t0XnRywAJf5JZXA="
+ },
+ "execa": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
+ "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^5.0.1",
+ "get-stream": "^3.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "extend": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
+ "dev": true
+ },
+ "external-editor": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz",
+ "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==",
+ "requires": {
+ "chardet": "^0.4.0",
+ "iconv-lite": "^0.4.17",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extract-zip": {
+ "version": "1.6.7",
+ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz",
+ "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=",
+ "dev": true,
+ "requires": {
+ "concat-stream": "1.6.2",
+ "debug": "2.6.9",
+ "mkdirp": "0.5.1",
+ "yauzl": "2.4.1"
+ }
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
+ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz",
+ "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fd-slicer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz",
+ "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=",
+ "dev": true,
+ "requires": {
+ "pend": "~1.2.0"
+ }
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "find-up": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
+ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
+ "dev": true,
+ "requires": {
+ "path-exists": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
+ "dev": true
+ },
+ "form-data": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz",
+ "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=",
+ "dev": true,
+ "requires": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "^2.1.12"
+ }
+ },
+ "fs-extra": {
+ "version": "0.30.0",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
+ "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^2.1.0",
+ "klaw": "^1.0.0",
+ "path-is-absolute": "^1.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "fs-extra-p": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/fs-extra-p/-/fs-extra-p-4.6.0.tgz",
+ "integrity": "sha512-nSVqB5UfWZQdU6pzBwcFh+7lJpBynnTsVtNJTBhAnAppUQRut0W7WeM271iS0TqQ9FoCqDXqyL0+h+h8DQUCpg==",
+ "requires": {
+ "bluebird-lst": "^1.0.5",
+ "fs-extra": "^6.0.0"
+ },
+ "dependencies": {
+ "fs-extra": {
+ "version": "6.0.1",
+ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz",
+ "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==",
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "jsonfile": "^4.0.0",
+ "universalify": "^0.1.0"
+ }
+ },
+ "jsonfile": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
+ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ }
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
+ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
+ "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
+ "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
+ "dev": true
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
+ "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"
+ }
+ },
+ "global-dirs": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
+ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
+ "dev": true,
+ "requires": {
+ "ini": "^1.3.4"
+ }
+ },
+ "got": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "dev": true,
+ "requires": {
+ "create-error-class": "^3.0.0",
+ "duplexer3": "^0.1.4",
+ "get-stream": "^3.0.0",
+ "is-redirect": "^1.0.0",
+ "is-retry-allowed": "^1.0.0",
+ "is-stream": "^1.0.0",
+ "lowercase-keys": "^1.0.0",
+ "safe-buffer": "^5.0.1",
+ "timed-out": "^4.0.0",
+ "unzip-response": "^2.0.1",
+ "url-parse-lax": "^1.0.0"
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.11",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz",
+ "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=",
+ "dev": true
+ },
+ "har-validator": {
+ "version": "5.0.3",
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz",
+ "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=",
+ "dev": true,
+ "requires": {
+ "ajv": "^5.1.0",
+ "har-schema": "^2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "home-path": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.6.tgz",
+ "integrity": "sha512-wo+yjrdAtoXt43Vy92a+0IPCYViiyLAHyp0QVS4xL/tfvVz5sXIW1ubLZk3nhVkD92fQpUMKX+fzMjr5F489vw==",
+ "dev": true
+ },
+ "hosted-git-info": {
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz",
+ "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==",
+ "dev": true
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
+ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "jsprim": "^1.2.2",
+ "sshpk": "^1.7.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.23",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
+ "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
+ "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
+ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=",
+ "dev": true,
+ "requires": {
+ "repeating": "^2.0.0"
+ }
+ },
+ "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.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
+ "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz",
+ "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==",
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "chalk": "^2.0.0",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^2.0.4",
+ "figures": "^2.0.0",
+ "lodash": "^4.3.0",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rx-lite": "^4.0.8",
+ "rx-lite-aggregates": "^4.0.8",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^4.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
+ "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
+ "dev": true
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
+ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^1.0.0"
+ }
+ },
+ "is-ci": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.1.0.tgz",
+ "integrity": "sha512-c7TnwxLePuqIlxHgr7xtxzycJPegNHFuIrBkwbf8hc58//+Op1CqFkyS+xnIMkwn9UsJIwc174BIjkyBmSpjKg==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^1.0.0"
+ }
+ },
+ "is-finite": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz",
+ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "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",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
+ "dev": true,
+ "requires": {
+ "number-is-nan": "^1.0.0"
+ }
+ },
+ "is-installed-globally": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
+ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
+ "dev": true,
+ "requires": {
+ "global-dirs": "^0.1.0",
+ "is-path-inside": "^1.0.0"
+ }
+ },
+ "is-npm": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
+ "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
+ "dev": true
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-path-inside": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "^1.0.1"
+ }
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
+ "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
+ "dev": true
+ },
+ "is-retry-allowed": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz",
+ "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
+ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
+ "dev": true
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
+ "is-utf8": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
+ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
+ "dev": true
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
+ "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=",
+ "dev": true
+ },
+ "isbinaryfile": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-3.0.2.tgz",
+ "integrity": "sha1-Sj6XTsDLqQBNP8bN5yCeppNopiE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
+ "dev": true
+ },
+ "jison": {
+ "version": "0.4.18",
+ "resolved": "https://registry.npmjs.org/jison/-/jison-0.4.18.tgz",
+ "integrity": "sha512-FKkCiJvozgC7VTHhMJ00a0/IApSxhlGsFIshLW6trWJ8ONX2TQJBBz6DlcO1Gffy4w9LT+uL+PA+CVnUSJMF7w==",
+ "requires": {
+ "JSONSelect": "0.4.0",
+ "cjson": "0.3.0",
+ "ebnf-parser": "0.1.10",
+ "escodegen": "1.3.x",
+ "esprima": "1.1.x",
+ "jison-lex": "0.3.x",
+ "lex-parser": "~0.1.3",
+ "nomnom": "1.5.2"
+ }
+ },
+ "jison-lex": {
+ "version": "0.3.4",
+ "resolved": "https://registry.npmjs.org/jison-lex/-/jison-lex-0.3.4.tgz",
+ "integrity": "sha1-gcoo2E+ESZ36jFlNzePYo/Jux6U=",
+ "requires": {
+ "lex-parser": "0.1.x",
+ "nomnom": "1.5.2"
+ }
+ },
+ "jquery": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz",
+ "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg=="
+ },
+ "js-yaml": {
+ "version": "3.12.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
+ "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ },
+ "dependencies": {
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="
+ }
+ }
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
+ "dev": true,
+ "optional": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz",
+ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=",
+ "dev": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
+ "dev": true
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "jsonfile": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz",
+ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.6"
+ }
+ },
+ "jsonlint": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/jsonlint/-/jsonlint-1.6.0.tgz",
+ "integrity": "sha1-iKpGvCiaesk7tGyuLVihh6m7SUo=",
+ "requires": {
+ "JSV": ">= 4.0.x",
+ "nomnom": ">= 1.5.x"
+ }
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
+ "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "klaw": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
+ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.9"
+ }
+ },
+ "latest-version": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
+ "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
+ "dev": true,
+ "requires": {
+ "package-json": "^4.0.0"
+ }
+ },
+ "lazy-val": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.3.tgz",
+ "integrity": "sha512-pjCf3BYk+uv3ZcPzEVM0BFvO9Uw58TmlrU0oG5tTrr9Kcid3+kdKxapH8CjdYmVa2nO5wOoZn2rdvZx2PKj/xg=="
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
+ "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
+ "dev": true,
+ "requires": {
+ "invert-kv": "^1.0.0"
+ }
+ },
+ "lex-parser": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/lex-parser/-/lex-parser-0.1.4.tgz",
+ "integrity": "sha1-ZMTwJfF/1Tv7RXY/rrFvAVp0dVA="
+ },
+ "load-json-file": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
+ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "parse-json": "^2.2.0",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0",
+ "strip-bom": "^2.0.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"
+ },
+ "dependencies": {
+ "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
+ }
+ }
+ },
+ "lodash": {
+ "version": "4.17.10",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
+ "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg=="
+ },
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA="
+ },
+ "loud-rejection": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
+ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=",
+ "dev": true,
+ "requires": {
+ "currently-unhandled": "^0.4.1",
+ "signal-exit": "^3.0.0"
+ }
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
+ "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
+ "dev": true
+ },
+ "lru-cache": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz",
+ "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==",
+ "dev": true,
+ "requires": {
+ "pseudomap": "^1.0.2",
+ "yallist": "^2.1.2"
+ }
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
+ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
+ "dev": true,
+ "requires": {
+ "pify": "^3.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ }
+ }
+ },
+ "map-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
+ "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=",
+ "dev": true
+ },
+ "mem": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz",
+ "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "meow": {
+ "version": "3.7.0",
+ "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
+ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=",
+ "dev": true,
+ "requires": {
+ "camelcase-keys": "^2.0.0",
+ "decamelize": "^1.1.2",
+ "loud-rejection": "^1.0.0",
+ "map-obj": "^1.0.1",
+ "minimist": "^1.1.3",
+ "normalize-package-data": "^2.3.4",
+ "object-assign": "^4.0.1",
+ "read-pkg-up": "^1.0.1",
+ "redent": "^1.0.0",
+ "trim-newlines": "^1.0.0"
+ }
+ },
+ "mime": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz",
+ "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==",
+ "dev": true
+ },
+ "mime-db": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==",
+ "dev": true
+ },
+ "mime-types": {
+ "version": "2.1.18",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz",
+ "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==",
+ "dev": true,
+ "requires": {
+ "mime-db": "~1.33.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
+ },
+ "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=",
+ "dev": true
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s="
+ },
+ "nomnom": {
+ "version": "1.5.2",
+ "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.5.2.tgz",
+ "integrity": "sha1-9DRUSKhTz71cDSYyDyR3qwUm/i8=",
+ "requires": {
+ "colors": "0.5.x",
+ "underscore": "1.1.x"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz",
+ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "is-builtin-module": "^1.0.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "nugget": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz",
+ "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.1.3",
+ "minimist": "^1.1.0",
+ "pretty-bytes": "^1.0.2",
+ "progress-stream": "^1.1.0",
+ "request": "^2.45.0",
+ "single-line-log": "^1.1.2",
+ "throttleit": "0.0.2"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "oauth-sign": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-keys": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz",
+ "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=",
+ "dev": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0",
+ "lcid": "^1.0.0",
+ "mem": "^1.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
+ "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
+ "dev": true
+ },
+ "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
+ },
+ "package-json": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
+ "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
+ "dev": true,
+ "requires": {
+ "got": "^6.7.1",
+ "registry-auth-token": "^3.0.1",
+ "registry-url": "^3.0.3",
+ "semver": "^5.1.0"
+ }
+ },
+ "parse-color": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parse-color/-/parse-color-1.0.0.tgz",
+ "integrity": "sha1-e3SLlag/A/FqlPU15S1/PZRlhhk=",
+ "dev": true,
+ "requires": {
+ "color-convert": "~0.5.0"
+ },
+ "dependencies": {
+ "color-convert": {
+ "version": "0.5.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz",
+ "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=",
+ "dev": true
+ }
+ }
+ },
+ "parse-json": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
+ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
+ "dev": true,
+ "requires": {
+ "error-ex": "^1.2.0"
+ }
+ },
+ "parser-toolkit": {
+ "version": "0.0.5",
+ "resolved": "https://registry.npmjs.org/parser-toolkit/-/parser-toolkit-0.0.5.tgz",
+ "integrity": "sha1-7EthcpyGMYtW6pcb+6azxnLWLAE=",
+ "dev": true
+ },
+ "path-exists": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
+ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
+ "dev": true,
+ "requires": {
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "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-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "dev": true
+ },
+ "path-type": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
+ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ }
+ },
+ "pend": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz",
+ "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=",
+ "dev": true
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz",
+ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
+ "dev": true
+ },
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "plist": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/plist/-/plist-3.0.1.tgz",
+ "integrity": "sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ==",
+ "dev": true,
+ "requires": {
+ "base64-js": "^1.2.3",
+ "xmlbuilder": "^9.0.7",
+ "xmldom": "0.1.x"
+ },
+ "dependencies": {
+ "base64-js": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz",
+ "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==",
+ "dev": true
+ },
+ "xmlbuilder": {
+ "version": "9.0.7",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz",
+ "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=",
+ "dev": true
+ }
+ }
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
+ "dev": true
+ },
+ "pretty-bytes": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz",
+ "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1",
+ "meow": "^3.1.0"
+ }
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
+ "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
+ "dev": true
+ },
+ "progress-stream": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz",
+ "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=",
+ "dev": true,
+ "requires": {
+ "speedometer": "~0.1.2",
+ "through2": "~0.2.3"
+ }
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
+ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
+ "dev": true
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
+ "dev": true
+ },
+ "qs": {
+ "version": "6.5.2",
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
+ "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==",
+ "dev": true
+ },
+ "rc": {
+ "version": "1.2.8",
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
+ "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
+ "dev": true,
+ "requires": {
+ "deep-extend": "^0.6.0",
+ "ini": "~1.3.0",
+ "minimist": "^1.2.0",
+ "strip-json-comments": "~2.0.1"
+ }
+ },
+ "read-config-file": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-3.0.1.tgz",
+ "integrity": "sha512-xMKmxBYENBqcTMc7r/VteufWgqI9c7oASnOxFa6Crlk4d/nVTOTOJKDhAHJCiGpD8cWzUY9t7K1+M3d75w4f9A==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.4.0",
+ "ajv-keywords": "^3.2.0",
+ "bluebird-lst": "^1.0.5",
+ "dotenv": "^5.0.1",
+ "dotenv-expand": "^4.2.0",
+ "fs-extra-p": "^4.6.0",
+ "js-yaml": "^3.11.0",
+ "json5": "^1.0.1",
+ "lazy-val": "^1.0.3"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.5.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.1.tgz",
+ "integrity": "sha512-pgZos1vgOHDiC7gKNbZW8eKvCnNXARv2oqrGQT7Hzbq5Azp7aZG6DJzADnkuSq7RH6qkXp4J/m68yPX/2uBHyQ==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.1"
+ }
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ }
+ }
+ },
+ "read-pkg": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
+ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
+ "dev": true,
+ "requires": {
+ "load-json-file": "^1.0.0",
+ "normalize-package-data": "^2.3.2",
+ "path-type": "^1.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
+ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
+ "dev": true,
+ "requires": {
+ "find-up": "^1.0.0",
+ "read-pkg": "^1.0.0"
+ }
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
+ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=",
+ "dev": true,
+ "requires": {
+ "core-util-is": "~1.0.0",
+ "inherits": "~2.0.1",
+ "isarray": "0.0.1",
+ "string_decoder": "~0.10.x"
+ }
+ },
+ "redent": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
+ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=",
+ "dev": true,
+ "requires": {
+ "indent-string": "^2.1.0",
+ "strip-indent": "^1.0.1"
+ }
+ },
+ "registry-auth-token": {
+ "version": "3.3.2",
+ "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz",
+ "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==",
+ "dev": true,
+ "requires": {
+ "rc": "^1.1.6",
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
+ "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
+ "dev": true,
+ "requires": {
+ "rc": "^1.0.1"
+ }
+ },
+ "repeating": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
+ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=",
+ "dev": true,
+ "requires": {
+ "is-finite": "^1.0.0"
+ }
+ },
+ "request": {
+ "version": "2.87.0",
+ "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz",
+ "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==",
+ "dev": true,
+ "requires": {
+ "aws-sign2": "~0.7.0",
+ "aws4": "^1.6.0",
+ "caseless": "~0.12.0",
+ "combined-stream": "~1.0.5",
+ "extend": "~3.0.1",
+ "forever-agent": "~0.6.1",
+ "form-data": "~2.3.1",
+ "har-validator": "~5.0.3",
+ "http-signature": "~1.2.0",
+ "is-typedarray": "~1.0.0",
+ "isstream": "~0.1.2",
+ "json-stringify-safe": "~5.0.1",
+ "mime-types": "~2.1.17",
+ "oauth-sign": "~0.8.2",
+ "performance-now": "^2.1.0",
+ "qs": "~6.5.1",
+ "safe-buffer": "^5.1.1",
+ "tough-cookie": "~2.3.3",
+ "tunnel-agent": "^0.6.0",
+ "uuid": "^3.1.0"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
+ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
+ "dev": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
+ "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "rimraf": {
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
+ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.0.5"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "rx-lite": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
+ "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ="
+ },
+ "rx-lite-aggregates": {
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz",
+ "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=",
+ "requires": {
+ "rx-lite": "*"
+ }
+ },
+ "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==",
+ "dev": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+ },
+ "sanitize-filename": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.1.tgz",
+ "integrity": "sha1-YS2hyWRz+gLczaktzVtKsWSmdyo=",
+ "dev": true,
+ "requires": {
+ "truncate-utf8-bytes": "^1.0.0"
+ }
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA=="
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
+ "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
+ "dev": true,
+ "requires": {
+ "semver": "^5.0.3"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
+ },
+ "single-line-log": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz",
+ "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1"
+ }
+ },
+ "source-map": {
+ "version": "0.1.43",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz",
+ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=",
+ "optional": true,
+ "requires": {
+ "amdefine": ">=0.0.4"
+ }
+ },
+ "source-map-support": {
+ "version": "0.5.6",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz",
+ "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==",
+ "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=="
+ }
+ }
+ },
+ "spdx-correct": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz",
+ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==",
+ "dev": true,
+ "requires": {
+ "spdx-expression-parse": "^3.0.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz",
+ "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==",
+ "dev": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
+ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
+ "dev": true,
+ "requires": {
+ "spdx-exceptions": "^2.1.0",
+ "spdx-license-ids": "^3.0.0"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz",
+ "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==",
+ "dev": true
+ },
+ "speedometer": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz",
+ "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=",
+ "dev": true
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
+ },
+ "sshpk": {
+ "version": "1.14.2",
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
+ "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
+ "dev": true,
+ "requires": {
+ "asn1": "~0.2.3",
+ "assert-plus": "^1.0.0",
+ "bcrypt-pbkdf": "^1.0.0",
+ "dashdash": "^1.12.0",
+ "ecc-jsbn": "~0.1.1",
+ "getpass": "^0.1.1",
+ "jsbn": "~0.1.0",
+ "safer-buffer": "^2.0.2",
+ "tweetnacl": "~0.14.0"
+ }
+ },
+ "stat-mode": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-0.2.2.tgz",
+ "integrity": "sha1-5sgLYjEj19gM8TLOU480YokHJQI=",
+ "dev": true
+ },
+ "stream-json": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/stream-json/-/stream-json-0.6.1.tgz",
+ "integrity": "sha512-Tmhl5yUVusgkgCiWnoHD1BA8/LqFX5/OlYj+YMCgUuUMjbacQvSWV8p1grbKvzP6s4EBS4nK5WNsMHX7kugzyg==",
+ "dev": true,
+ "requires": {
+ "parser-toolkit": ">=0.0.3"
+ }
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "string_decoder": {
+ "version": "0.10.31",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
+ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
+ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
+ "dev": true,
+ "requires": {
+ "is-utf8": "^0.2.0"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "dev": true
+ },
+ "strip-indent": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
+ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^4.0.1"
+ }
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "dev": true
+ },
+ "sumchecker": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz",
+ "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.2.0",
+ "es6-promise": "^4.0.5"
+ }
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz",
+ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==",
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "temp-file": {
+ "version": "3.1.2",
+ "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.1.2.tgz",
+ "integrity": "sha512-s5JJnUbvV6QaKBxBJm6wDpKIVVvr/ssrb8Cdaz2iaXcjFMtWX+OGBwY+UTvARoWYI5HlKaoD7xFJSpo0jJUlbA==",
+ "dev": true,
+ "requires": {
+ "async-exit-hook": "^2.0.1",
+ "bluebird-lst": "^1.0.5",
+ "fs-extra-p": "^4.6.0",
+ "lazy-val": "^1.0.3"
+ }
+ },
+ "term-size": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
+ "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
+ "dev": true,
+ "requires": {
+ "execa": "^0.7.0"
+ }
+ },
+ "throttleit": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz",
+ "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
+ },
+ "through2": {
+ "version": "0.2.3",
+ "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz",
+ "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=",
+ "dev": true,
+ "requires": {
+ "readable-stream": "~1.1.9",
+ "xtend": "~2.1.1"
+ }
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
+ "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "tough-cookie": {
+ "version": "2.3.4",
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
+ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
+ "dev": true,
+ "requires": {
+ "punycode": "^1.4.1"
+ }
+ },
+ "trim-newlines": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
+ "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=",
+ "dev": true
+ },
+ "truncate-utf8-bytes": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz",
+ "integrity": "sha1-QFkjkJWS1W94pYGENLC3hInKXys=",
+ "dev": true,
+ "requires": {
+ "utf8-byte-length": "^1.0.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "^5.0.1"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
+ "dev": true,
+ "optional": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
+ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
+ "dev": true
+ },
+ "underscore": {
+ "version": "1.1.7",
+ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.1.7.tgz",
+ "integrity": "sha1-QLq4S60Z0jAJbo1u9ii/8FXYPbA="
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
+ "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
+ "dev": true,
+ "requires": {
+ "crypto-random-string": "^1.0.0"
+ }
+ },
+ "universalify": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
+ "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg=="
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
+ "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
+ "dev": true
+ },
+ "update-notifier": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
+ "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
+ "dev": true,
+ "requires": {
+ "boxen": "^1.2.1",
+ "chalk": "^2.0.1",
+ "configstore": "^3.0.0",
+ "import-lazy": "^2.1.0",
+ "is-ci": "^1.0.10",
+ "is-installed-globally": "^0.1.0",
+ "is-npm": "^1.0.0",
+ "latest-version": "^3.0.0",
+ "semver-diff": "^2.0.0",
+ "xdg-basedir": "^3.0.0"
+ }
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ },
+ "dependencies": {
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ }
+ }
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
+ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
+ "dev": true,
+ "requires": {
+ "prepend-http": "^1.0.1"
+ }
+ },
+ "utf8-byte-length": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz",
+ "integrity": "sha1-9F8VDExm7uloGGUFq5P8u4rWv2E=",
+ "dev": true
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz",
+ "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==",
+ "dev": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz",
+ "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==",
+ "dev": true,
+ "requires": {
+ "spdx-correct": "^3.0.0",
+ "spdx-expression-parse": "^3.0.0"
+ }
+ },
+ "verror": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
+ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
+ "dev": true,
+ "requires": {
+ "assert-plus": "^1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "^1.2.0"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "widest-line": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.0.tgz",
+ "integrity": "sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM=",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
+ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.1",
+ "strip-ansi": "^3.0.1"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write-file-atomic": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz",
+ "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "imurmurhash": "^0.1.4",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
+ "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
+ "dev": true
+ },
+ "xmlbuilder": {
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-8.2.2.tgz",
+ "integrity": "sha1-aSSGc0ELS6QuGmE2VR0pIjNap3M=",
+ "dev": true
+ },
+ "xmldom": {
+ "version": "0.1.27",
+ "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.27.tgz",
+ "integrity": "sha1-1QH5ezvbQDr4757MIFcxh6rawOk=",
+ "dev": true
+ },
+ "xtend": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz",
+ "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=",
+ "dev": true,
+ "requires": {
+ "object-keys": "~0.4.0"
+ }
+ },
+ "y18n": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz",
+ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=",
+ "dev": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
+ "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "dev": true
+ },
+ "yargs": {
+ "version": "11.0.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz",
+ "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^4.0.0",
+ "decamelize": "^1.1.1",
+ "find-up": "^2.1.0",
+ "get-caller-file": "^1.0.1",
+ "os-locale": "^2.0.0",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^1.0.1",
+ "set-blocking": "^2.0.0",
+ "string-width": "^2.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^3.2.1",
+ "yargs-parser": "^9.0.2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "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": {
+ "locate-path": "^2.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "9.0.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz",
+ "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=",
+ "dev": true,
+ "requires": {
+ "camelcase": "^4.1.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
+ "dev": true
+ }
+ }
+ },
+ "yauzl": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz",
+ "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=",
+ "dev": true,
+ "requires": {
+ "fd-slicer": "~1.0.1"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index d1cbbd6..7b7adff 100644
--- a/package.json
+++ b/package.json
@@ -1,14 +1,42 @@
{
- "name": "Yarn",
- "version": "0.2.1",
- "main": "app/index.html",
- "window": {
- "toolbar": false,
- "position": "center",
- "width": 1280,
- "height": 720,
- "min_width": 800,
- "min_height": 600,
- "icon": "Yarn.png"
- }
+ "name": "yarn",
+ "version": "0.3.2",
+ "main": "main.js",
+ "window": {
+ "toolbar": false,
+ "position": "center",
+ "width": 1280,
+ "height": 720,
+ "min_width": 800,
+ "min_height": 600,
+ "icon": "Yarn.png"
+ },
+ "description": "Dialogue editor created for \"Night in the Woods\" (and other projects) by @NoelFB and @infinite_ammo with contributions from @seiyria and @beeglebug. It is heavily inspired by and based on the amazing Twine software: http://twinery.org/. This version has been ported over to Electron and extended with further functionality by Todor Imreorov",
+ "scripts": {
+ "start": "electron .",
+ "build": "build",
+ "ship": "build --win --linux",
+ "release": "build"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/blurymind/Yarn.git"
+ },
+ "author": " @infinite_ammo, @seiyria, @beeglebug ,Todor Imreorov",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/blurymind/Yarn/issues"
+ },
+ "homepage": "https://github.com/blurymind/Yarn#readme",
+ "devDependencies": {
+ "electron": "^2.0.2",
+ "electron-builder": "^20.15.1"
+ },
+ "dependencies": {
+ "bbcode": "^0.1.5",
+ "bondage": "^1.0.4",
+ "electron-is": "^2.4.1",
+ "electron-updater": "^2.21.10",
+ "jquery": "^3.3.1"
+ }
}