diff --git a/commandLine/src/main.cpp b/commandLine/src/main.cpp index 07d67a7a..d604b0d6 100644 --- a/commandLine/src/main.cpp +++ b/commandLine/src/main.cpp @@ -1,6 +1,6 @@ #include "ofMain.h" #include "optionparser.h" -enum optionIndex { UNKNOWN, HELP, PLUS, RECURSIVE, LISTTEMPLATES, PLATFORMS, ADDONS, OFPATH, VERBOSE, TEMPLATE, DRYRUN }; +enum optionIndex { UNKNOWN, HELP, PLUS, RECURSIVE, LISTTEMPLATES, PLATFORMS, ADDONS, OFPATH, VERBOSE, TEMPLATE, DRYRUN, ADDONDEFINES }; constexpr option::Descriptor usage[] = { {UNKNOWN, 0, "", "",option::Arg::None, "Options:\n" }, @@ -13,6 +13,7 @@ constexpr option::Descriptor usage[] = {VERBOSE, 0,"v","verbose",option::Arg::None, " --verbose, -v \trun verbose" }, {TEMPLATE, 0,"t","template",option::Arg::Optional, " --template, -t \tproject template" }, {DRYRUN, 0,"d","dryrun",option::Arg::None, " --dryrun, -d \tdry run, don't change files" }, + {ADDONDEFINES, 0,"D","addondefines",option::Arg::None, " --addondefines, -D \tadd preprocessor defines for each addon" }, {0,0,0,0,0,0} }; @@ -70,6 +71,7 @@ bool bRecursive; // do we recurse in update mode? bool bHelpRequested; // did we request help? bool bListTemplates; // did we request help? bool bDryRun; // do dry run (useful for debugging recursive update) +bool bAddonDefines; // add preprocessor defines for addons @@ -236,7 +238,6 @@ bool isGoodOFPath(std::string path) { } - void updateProject(std::string path, ofTargetPlatform target, bool bConsiderParameterAddons = true) { // bConsiderParameterAddons = do we consider that the user could call update with a new set of addons @@ -258,6 +259,8 @@ void updateProject(std::string path, ofTargetPlatform target, bool bConsiderPara project->parseAddons(); } + if (bAddonDefines) project->addAddonDefineFlags(); + if (!bDryRun) project->save(); } @@ -340,6 +343,7 @@ int main(int argc, char* argv[]){ //------------------------------------------- pre-parse bAddonsPassedIn = false; bDryRun = false; + bAddonDefines = false; busingEnvVar = false; bVerbose = false; mode = PG_MODE_NONE; @@ -386,6 +390,10 @@ int main(int argc, char* argv[]){ bDryRun = true; } + if (options[ADDONDEFINES].count() > 0){ + bAddonDefines = true; + } + if (options[VERBOSE].count() > 0){ bVerbose = true; } diff --git a/frontend/app.js b/frontend/app.js index edb2f304..482abccc 100644 --- a/frontend/app.js +++ b/frontend/app.js @@ -2,15 +2,15 @@ // instead of ipc, maybe? // https://github.com/atom/electron/blob/master/docs/api/remote.md -var ipc = require('ipc'); -var path = require('path'); -var fs = require('fs'); +const {ipcRenderer} = require('electron'); +const path = require('path'); +const fs = require('fs'); -var platforms; -var templates; +let platforms; +let templates; -// var platforms = { +// let platforms = { // "osx": "OS X (Xcode)", // "vs": "Windows (Visual Studio)", // "ios": "iOS (Xcode)", @@ -20,38 +20,36 @@ var templates; // "linuxarmv7l": "Linux ARMv7 (Makefiles)" // }; -var defaultSettings; -var addonsInstalled; -var currentPath; -var isOfPathGood = false; -var isFirstTimeSierra = false; -var bVerbose = false; -var localAddons = []; - - +let defaultSettings = {}; +let addonsInstalled; +let currentPath; +let isOfPathGood = false; +let isFirstTimeSierra = false; +let bVerbose = false; +let localAddons = []; //----------------------------------------------------------------------------------- // IPC //----------------------------------------------------------------------------------- //------------------------------------------- -ipc.on('setOfPath', function(arg) { +ipcRenderer.on('setOfPath', (sender, arg) => { setOFPath(arg); }); -ipc.on('cwd', function(arg) { +ipcRenderer.on('cwd', (sender, arg) => { console.log(arg); }); -ipc.on('setUpdatePath', function(arg) { - var elem = document.getElementById("updateMultiplePath"); +ipcRenderer.on('setUpdatePath', (sender, arg) => { + let elem = document.getElementById("updateMultiplePath"); elem.value = arg; $("#updateMultiplePath").change(); }); -ipc.on('isUpdateMultiplePathOk', function(arg) { +ipcRenderer.on('isUpdateMultiplePathOk', (sender, arg) => { if (arg == true){ $("#updateMultipleWrongMessage").hide(); $("#updateMultipleButton").removeClass("disabled"); @@ -64,28 +62,30 @@ ipc.on('isUpdateMultiplePathOk', function(arg) { }); //------------------------------------------- -ipc.on('setup', function(arg) { +ipcRenderer.on('setup', (sender, arg) => { setup(); }); //----------------------------------------- // this is called from main when defaults are loaded in: -ipc.on('setDefaults', function(arg) { - +ipcRenderer.on('setDefaults', (sender, arg) => { + console.log('received defaults', arg); defaultSettings = arg; setOFPath(defaultSettings['defaultOfPath']); enableAdvancedMode(defaultSettings['advancedMode']); + enableAddonFlags(defaultSettings['useAddonDefines']); + }); //------------------------------------------- -ipc.on('setStartingProject', function(arg) { +ipcRenderer.on('setStartingProject', (sender, arg) => { $("#projectPath").val(arg['path']); $("#projectName").val(arg['name']); }); //------------------------------------------- -ipc.on('setProjectPath', function(arg) { +ipcRenderer.on('setProjectPath', (sender, arg) => { $("#projectPath").val(arg); //defaultSettings['lastUsedProjectPath'] = arg; //saveDefaultSettings(); @@ -93,30 +93,30 @@ ipc.on('setProjectPath', function(arg) { }); //------------------------------------------- -ipc.on('setGenerateMode', function(arg) { +ipcRenderer.on('setGenerateMode', (sender, arg) => { + console.log('[app.js] switching generate mode...', arg); switchGenerateMode(arg); }); //------------------------------------------- -ipc.on('importProjectSettings', function(settings) { +ipcRenderer.on('importProjectSettings', (sender, settings) => { $("#projectPath").val(settings['projectPath']); $("#projectName").val(settings['projectName']).trigger('change'); // change triggers addon scanning }); //------------------------------------------- -ipc.on('setAddons', function(arg) { +ipcRenderer.on('setAddons', (sender, arg) => { - console.log("got set addons"); - console.log(arg); + console.log("got set addons", arg); addonsInstalled = arg; - var select = document.getElementById("addonsList"); + let select = document.getElementById("addonsList"); select.innerHTML = ""; if (arg !== null && arg.length > 0) { // add: - for (var i = 0; i < arg.length; i++) { + for (let i = 0; i < arg.length; i++) { $('
', { "class": 'item', @@ -156,24 +156,20 @@ ipc.on('setAddons', function(arg) { }); -ipc.on('setPlatforms', function(arg) { +ipcRenderer.on('setPlatforms', (sender, arg) => { - console.log("got set platforms"); - console.log(arg); - console.log("got set platforms"); + console.log("got set platforms", arg); platforms = arg; - var select = document.getElementById("platformList"); - var option, i; - for (var i in platforms) { - var myClass = 'platform'; + for (let i in platforms) { + let myClass = 'platform'; $('
', { "class": 'item', "data-value": i - }).html(platforms[i]).appendTo(select); + }).html(platforms[i]).appendTo(document.getElementById("platformList")); } // start the platform drop down. @@ -184,15 +180,14 @@ ipc.on('setPlatforms', function(arg) { // set the platform to default $('#platformsDropdown').dropdown('set exactly', defaultSettings['defaultPlatform']); - var select = document.getElementById("platformListMulti"); - var option, i; - for (var i in platforms) { - var myClass = 'platform'; + for (let i in platforms) { + let myClass = 'platform'; $('
', { "class": 'item', "data-value": i - }).html(platforms[i]).appendTo(select); } + }).html(platforms[i]).appendTo(document.getElementById("platformListMulti")); + } // start the platform drop down. $('#platformsDropdownMulti') @@ -205,27 +200,22 @@ ipc.on('setPlatforms', function(arg) { }); -ipc.on('setTemplates', function(arg) { +ipcRenderer.on('setTemplates', (sender, arg) => { console.log("----------------"); console.log("got set templates"); console.log(arg); templates = arg; - var select = document.getElementById("templateList"); - var option, i; - for (var i in templates) { - console.log(i); - var myClass = 'template'; + for (let i in templates) { + let myClass = 'template'; $('
', { "class": 'item', "data-value": i - }).html(templates[i]).appendTo(select); + }).html(templates[i]).appendTo(document.getElementById("templateList")); } - console.log(select); - // start the template drop down. $('#templatesDropdown') .dropdown({ @@ -238,16 +228,13 @@ ipc.on('setTemplates', function(arg) { // // set the template to default //$('#templatesDropdown').dropdown('set exactly', defaultSettings['defaultTemplate']); - // Multi - var select = document.getElementById("templateListMulti"); - var option, i; - for (var i in templates) { - var myClass = 'template'; + for (let i in templates) { + let myClass = 'template'; $('
', { "class": 'item', "data-value": i - }).html(templates[i]).appendTo(select); + }).html(templates[i]).appendTo(document.getElementById("templateListMulti")); } // start the platform drop down. @@ -262,7 +249,7 @@ ipc.on('setTemplates', function(arg) { }); -ipc.on('enableTemplate', function (arg) { +ipcRenderer.on('enableTemplate', function (sender, arg) { console.log('enableTemplate'); let items = arg.bMulti === false ? $('#templatesDropdown .menu .item') : $('#templatesDropdownMulti .menu .item'); @@ -285,23 +272,23 @@ ipc.on('enableTemplate', function (arg) { //------------------------------------------- // select the list of addons and notify if some aren't installed -ipc.on('selectAddons', function(arg) { +ipcRenderer.on('selectAddons', (sender, arg) => { // todo : DEAL WITH LOCAL ADDONS HERE.... - var addonsAlreadyPicked = $("#addonsDropdown").val().split(','); + let addonsAlreadyPicked = $("#addonsDropdown").val().split(','); console.log(addonsAlreadyPicked); console.log(arg); console.log(addonsInstalled); - var neededAddons = []; + let neededAddons = []; localAddons = []; //haystack.indexOf(needle) >= 0 - for (var i = 0; i < arg.length; i++) { + for (let i = 0; i < arg.length; i++) { arg[i] = arg[i].trim(); // first, check if it's already picked, then do nothing if (addonsAlreadyPicked.indexOf(arg[i]) >= 0){ @@ -313,7 +300,7 @@ ipc.on('selectAddons', function(arg) { $('#addonsDropdown').dropdown('set selected', arg[i]); } else { - var neededAddonPathRel = path.join($("#projectPath").val(), $("#projectName").val(), arg[i]); + let neededAddonPathRel = path.join($("#projectPath").val(), $("#projectName").val(), arg[i]); console.log(neededAddonPathRel); if (fs.existsSync(neededAddonPathRel) || fs.existsSync(neededAddons[i])){ @@ -373,7 +360,7 @@ ipc.on('selectAddons', function(arg) { //------------------------------------------- // allow main to send UI messages -ipc.on('sendUIMessage', function(arg) { +ipcRenderer.on('sendUIMessage', (sender, arg) => { // check if it has "success" message: @@ -382,12 +369,12 @@ ipc.on('sendUIMessage', function(arg) { }); //------------------------------------------- -ipc.on('consoleMessage', function(msg) { +ipcRenderer.on('consoleMessage', (sender, msg) => { consoleMessage(msg); }); //------------------------------------------- -ipc.on('generateCompleted', function(isSuccessful) { +ipcRenderer.on('generateCompleted', (sender, isSuccessful) => { if (isSuccessful === true) { // We want to switch to update mode now $("#projectName").trigger('change'); @@ -395,13 +382,13 @@ ipc.on('generateCompleted', function(isSuccessful) { }); //------------------------------------------- -ipc.on('updateCompleted', function(isSuccessful) { +ipcRenderer.on('updateCompleted', (sender, isSuccessful) => { if (isSuccessful === true) { // eventual callback after update completed } }); -ipc.on('setRandomisedSketchName', function(newName) { +ipcRenderer.on('setRandomisedSketchName', (sender, newName) => { $("#projectName").val(newName); }); @@ -414,7 +401,7 @@ ipc.on('setRandomisedSketchName', function(newName) { //---------------------------------------- function setOFPath(arg) { // get the element: - var elem = document.getElementById("ofPath"); + let elem = document.getElementById("ofPath"); if (!path.isAbsolute(arg)) { @@ -426,7 +413,7 @@ function setOFPath(arg) { // else check settings for how we want this path.... make relative if we need to: if (defaultSettings['useRelativePath'] === true) { - var relativePath = path.normalize(path.relative(path.resolve(__dirname), arg)) + "/"; + let relativePath = path.normalize(path.relative(path.resolve(__dirname), arg)) + "/"; elem.value = relativePath; } else { elem.value = arg; @@ -449,7 +436,7 @@ function setup() { on: 'manual', onVisible: function(e){ // hide on focus / change / onShow (for dropdowns) - $(e).one('focus change click', function(){ $(this).popup('hide');} ); + $(e).one('focus change click', () => { $(this).popup('hide');} ); console.log($(e).children('input')); } }).popup('show') @@ -462,25 +449,38 @@ function setup() { try{ - var os = require('os'); + let os = require('os'); - var os_release = os.release(); - var os_major_pos = os_release.indexOf("."); - var os_major = os_release.slice(0, os_major_pos); + let os_release = os.release(); + let os_major_pos = os_release.indexOf("."); + let os_major = os_release.slice(0, os_major_pos); - var isSierra = (os.platform() === 'darwin' && Number(os_major)>=16); + let isSierra = (os.platform() === 'darwin' && Number(os_major)>=16); if(isSierra){ - var ofpath = document.getElementById("ofPath").value; - var runningOnVar = false + let ofpath = document.getElementById("ofPath").value; + let runningOnlet = false try{ - runningOnVar = (ofpath.length >= 8 && ofpath.substring(0,8)==='/private'); + runningOnlet = (ofpath.length >= 8 && ofpath.substring(0,8)==='/private'); }catch(e){} - isFirstTimeSierra = runningOnVar; + isFirstTimeSierra = runningOnlet; } }catch(e){ isFirstTimeSierra = false; } + $("#addonDefines").checkbox(); + $("#addonDefines").on("change", () => { + if ($("#addonDefines").filter(":checked").length > 0) { + enableAddonFlags(true); + } else { + enableAddonFlags(false); + } + }); + + console.log('SETTING CHECKED STTAE'); + $("#addonDefines").prop( "checked", defaultSettings['useAddonDefines']); + + $('.main.menu .item').tab({ history: false }); @@ -513,7 +513,6 @@ function setup() { $("#settingsMenuButton").tab({ 'onVisible':function(){ - console.log("settings!! "); $('#createMenuButon').removeClass('active'); $('#updateMenuButton').removeClass('active'); $('#settingsMenuButton').addClass('active'); @@ -535,49 +534,49 @@ function setup() { // bind external URLs (load it in default browser; not within Electron) $('*[data-toggle="external_target"]').click(function (e) { e.preventDefault(); - var shell = require('shell'); + let shell = require('shell'); shell.openExternal( $(this).prop('href') ); }); - $("#projectPath").on('change', function () { + $("#projectPath").on('change', () => { if( $(this).is(":focus")===true ){ return; } $("#projectName").trigger('change'); // checks the project on the new location }); - $("#projectPath").on('focusout', function () { + $("#projectPath").on('focusout', () => { $(this).trigger('change'); }); - $("#projectName").on('change', function () { + $("#projectName").on('change', () => { if( $(this).is(":focus")===true ){ return; } - var project = {}; + let project = {}; // fix "non alpha numeric characters here" as we did in the old PG - var currentStr = $("#projectName").val() - var stripped = currentStr.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g,'_'); + let currentStr = $("#projectName").val() + let stripped = currentStr.replace(/[&\/\\#,+()$~%.'":*?<>{}]/g,'_'); $("#projectName").val(stripped) project['projectName'] = $("#projectName").val(); project['projectPath'] = $("#projectPath").val(); // check if project exists - ipc.send('isOFProjectFolder', project); + ipcRenderer.send('isOFProjectFolder', project); // update link to local project files $("#revealProjectFiles").prop('href', 'file:///' + path.join(project['projectPath'],project['projectName']).replace(/^\//, '') ); }).trigger('change'); - $("#projectName").on('focusout', function () { + $("#projectName").on('focusout', () => { $(this).trigger('change'); }); - $("#updateMultiplePath").on('change', function () { - ipc.send('checkMultiUpdatePath', $("#updateMultiplePath").val()); + $("#updateMultiplePath").on('change', () => { + ipcRenderer.send('checkMultiUpdatePath', $("#updateMultiplePath").val()); }); $("#advancedOptions").checkbox(); - $("#advancedOptions").on("change", function() { + $("#advancedOptions").on("change", () => { if ($("#advancedOptions").filter(":checked").length > 0) { enableAdvancedMode(true); } else { @@ -585,13 +584,13 @@ function setup() { } }); - $("#IDEButton").on("click", function() { + $("#IDEButton").on("click", () => { launchInIDE(); }); $("#verboseOption").checkbox(); - $("#verboseOption").on("change", function() { + $("#verboseOption").on("change", () => { if ($("#verboseOption").filter(":checked").length > 0) { defaultSettings['verboseOutput'] = true; bVerbose = true; @@ -604,13 +603,13 @@ function setup() { }); - $("#ofPath").on("change", function(){ - var ofpath = $("#ofPath").val(); + $("#ofPath").on("change", () => { + let ofpath = $("#ofPath").val(); defaultSettings['defaultOfPath'] = ofpath; console.log("ofPath val " + ofpath); if(isFirstTimeSierra){ - //var sys = require('sys') - var exec = require('child_process').exec; + //let sys = require('sys') + let exec = require('child_process').exec; function puts(error, stdout, stderr) { console.log(stdout + " " + stderr) } exec("xattr -r -d com.apple.quarantine " + ofpath + "/projectGenerator-osx/projectGenerator.app", puts); $("#projectPath").val(ofpath + "/apps/myApps").trigger('change'); @@ -620,8 +619,8 @@ function setup() { console.log("requesting addons"); // trigger reload addons from the new OF path - ipc.send('refreshAddonList', $("#ofPath").val()); - ipc.send('refreshPlatformList', $("#ofPath").val()); + ipcRenderer.send('refreshAddonList', $("#ofPath").val()); + ipcRenderer.send('refreshPlatformList', $("#ofPath").val()); }); @@ -636,11 +635,11 @@ function setup() { // updates ofPath when the field is manually changed $("#ofPath").on('blur', function(e){ - var ofpath = $(this).val(); + let ofpath = $(this).val(); setOFPath(ofpath); if(isFirstTimeSierra){ - //var sys = require('sys') - var exec = require('child_process').exec; + //let sys = require('sys') + let exec = require('child_process').exec; function puts(error, stdout, stderr) { console.log(stdout + " " + stderr) } exec("xattr -d com.apple.quarantine " + ofpath + "/projectGenerator-osx/projectGenerator.app", puts); $("#projectPath").val(ofpath + "/apps/myApps").trigger('change'); @@ -660,8 +659,8 @@ function setup() { });*/ // enable console? (hiddens setting) // if(defaultSettings['showConsole']){ $("body").addClass('enableConsole'); } - // $("#showConsole").on('click', function(){ $('body').addClass('showConsole'); }); - // $("#hideConsole").on('click', function(){ $('body').removeClass('showConsole'); }); + // $("#showConsole").on('click', () => { $('body').addClass('showConsole'); }); + // $("#hideConsole").on('click', () => { $('body').removeClass('showConsole'); }); // initialise the overall-use modal $("#uiModal").modal({ @@ -740,7 +739,7 @@ function setup() { selectedPlatforms: selectedPlatformArray, bMulti: false } - ipc.send('refreshTemplateList', arg); + ipcRenderer.send('refreshTemplateList', arg); }) $("#platformsDropdownMulti").on('change', function () { let selectedPlatforms = $("#platformsDropdownMulti input").val(); @@ -750,7 +749,7 @@ function setup() { selectedPlatforms: selectedPlatformArray, bMulti: true } - ipc.send('refreshTemplateList', arg); + ipcRenderer.send('refreshTemplateList', arg); }) }); @@ -771,14 +770,14 @@ function blockDragEvent(e){ function acceptDraggedFiles( e ){ // handle file - var files = e.originalEvent.dataTransfer.files; - var types = e.originalEvent.dataTransfer.types; + let files = e.originalEvent.dataTransfer.files; + let types = e.originalEvent.dataTransfer.types; // this first check filters out most files if(files && files.length == 1 && files[0].type==="" && types[0]=="Files"){ // this folder check is more relayable - var file = e.originalEvent.dataTransfer.items[0].webkitGetAsEntry(); + let file = e.originalEvent.dataTransfer.items[0].webkitGetAsEntry(); if( file.isDirectory ){ return true; } @@ -819,11 +818,11 @@ function onDropFile( e ){ $("updateMenuButton").triggerHandler('click'); } else { - var files = e.originalEvent.dataTransfer.files; + let files = e.originalEvent.dataTransfer.files; // import single project folder $("#projectName").val( files[0].name ); - var projectFullPath = files[0].path; - var projectParentPath = path.normalize(projectFullPath+'/..'); + let projectFullPath = files[0].path; + let projectParentPath = path.normalize(projectFullPath+'/..'); $("#projectPath").val( projectParentPath ).triggerHandler('change'); $("createMenuButon").triggerHandler('click'); @@ -881,7 +880,7 @@ function openDragInputModal(e){ //---------------------------------------- function saveDefaultSettings() { - var fs = require('fs'); + let fs = require('fs'); fs.writeFile(path.resolve(__dirname, 'settings.json'), JSON.stringify(defaultSettings, null, '\t'), function(err) { if (err) { console.log("Unable to save defaultSettings to settings.json... (Error=" + err.code + ")"); @@ -892,31 +891,31 @@ function saveDefaultSettings() { } //---------------------------------------- -function generate() { +const generate = () => { // let's get all the info: - var platformValueArray = getPlatformList(); + let platformValueArray = getPlatformList(); - var templatePicked = $("#templatesDropdown .active"); - var templateValueArray = []; - for (var i = 0; i < templatePicked.length; i++){ + let templatePicked = $("#templatesDropdown .active"); + let templateValueArray = []; + for (let i = 0; i < templatePicked.length; i++){ templateValueArray.push($(templatePicked[i]).attr("data-value")); } - var addonsPicked = $("#addonsDropdown .active"); - var addonValueArray = []; + let addonsPicked = $("#addonsDropdown .active"); + let addonValueArray = []; - for (var i = 0; i < addonsPicked.length; i++){ + for (let i = 0; i < addonsPicked.length; i++){ addonValueArray.push($(addonsPicked[i]).attr("data-value")); } // add any local addons - for (var i = 0; i < localAddons.length; i++){ + for (let i = 0; i < localAddons.length; i++){ addonValueArray.push(localAddons[i]); } - var lengthOfPlatforms = platformValueArray.length; + let lengthOfPlatforms = platformValueArray.length; - var gen = {}; + let gen = {}; gen['projectName'] = $("#projectName").val(); gen['projectPath'] = $("#projectPath").val(); @@ -934,7 +933,7 @@ function generate() { } else if (gen['platformList'] === null || gen['platformList'] === "" || lengthOfPlatforms == 0) { $("#platformsDropdown").oneTimeTooltip("Please select a platform first."); } else { - ipc.send('generate', gen); + ipcRenderer.send('generate', gen); } } @@ -950,32 +949,33 @@ function updateRecursive() { - var platformsPicked = $("#platformsDropdownMulti .active"); - var platformValueArray = []; - for (var i = 0; i < platformsPicked.length; i++){ + let platformsPicked = $("#platformsDropdownMulti .active"); + let platformValueArray = []; + for (let i = 0; i < platformsPicked.length; i++){ platformValueArray.push($(platformsPicked[i]).attr("data-value")); } - var templatePicked = $("#templatesDropdownMulti .active"); - var templateValueArray = []; - for (var i = 0; i < templatePicked.length; i++){ + let templatePicked = $("#templatesDropdownMulti .active"); + let templateValueArray = []; + for (let i = 0; i < templatePicked.length; i++){ templateValueArray.push($(templatePicked[i]).attr("data-value")); } - var gen = {}; + let gen = {}; gen['updatePath'] = $("#updateMultiplePath").val(); gen['platformList'] = platformValueArray; gen['templateList'] = templateValueArray; gen['updateRecursive'] = true; gen['ofPath'] = $("#ofPath").val(); gen['verbose'] = bVerbose; + gen['addondefines'] = defaultSettings['useAddonDefines']; if (gen['updatePath'] === '') { displayModal("Please set update path"); } else if (platformValueArray.length === 0) { displayModal("Please select a platform first."); } else { - ipc.send('update', gen); + ipcRenderer.send('update', gen); } } @@ -1026,6 +1026,13 @@ function clearAddonSelection() { } +//---------------------------------------- +function enableAddonFlags(useAddonDefines) { + console.log('toggling addon flags:', useAddonDefines); + defaultSettings['useAddonDefines'] = useAddonDefines; + saveDefaultSettings(); +} + //---------------------------------------- function enableAdvancedMode(isAdvanced) { if (isAdvanced) { @@ -1035,6 +1042,7 @@ function enableAdvancedMode(isAdvanced) { $('#templateSection').show(); $('#templateSectionMulti').show(); + $('#addonDefinesSection').show(); } else { $('#platformsDropdown').addClass("disabled"); @@ -1047,6 +1055,7 @@ function enableAdvancedMode(isAdvanced) { $("body").removeClass('advanced'); $('a.updateMultiMenuOption').hide(); + $('#addonDefinesSection').hide(); } defaultSettings['advancedMode'] = isAdvanced; @@ -1070,9 +1079,9 @@ function enableConsole( showConsole ){ //---------------------------------------- function getPlatformList() { - var platformsPicked = $("#platformsDropdown .active"); - var platformValueArray = []; - for (var i = 0; i < platformsPicked.length; i++){ + let platformsPicked = $("#platformsDropdown .active"); + let platformValueArray = []; + for (let i = 0; i < platformsPicked.length; i++){ platformValueArray.push($(platformsPicked[i]).attr("data-value")); } return platformValueArray; @@ -1082,7 +1091,7 @@ function getPlatformList() { function displayModal(message) { $("#uiModal .content").html(message).find('*[data-toggle="external_target"]').click(function (e) { e.preventDefault(); - var shell = require('shell'); + let shell = require('shell'); shell.openExternal( $(this).prop("href") ); }); @@ -1107,65 +1116,67 @@ function consoleMessage(message) { //----------------------------------------------------------------------------------- function quit(){ - ipc.send('quit', ''); + ipcRenderer.send('quit', ''); } function browseOfPath() { - ipc.send('pickOfPath', ''); // current path could go here (but the OS also remembers the last used folder) + ipcRenderer.send('pickOfPath', ''); // current path could go here (but the OS also remembers the last used folder) } function browseProjectPath() { - var path = $("#projectPath").val(); - if (path === ''){ - path = $("#ofPath").val(); + let projectPath = $("#projectPath").val(); + if (projectPath === ''){ + projectPath = $("#ofPath").val(); } - ipc.send('pickProjectPath', path); // current path could go here + ipcRenderer.send('pickProjectPath', projectPath); // current path could go here } function browseImportProject() { - var path = $("#projectPath").val(); - if (path === ''){ - path = $("#ofPath").val(); + + console.log('BROWSE CLICKED'); + let projectPath = $("#projectPath").val(); + if (projectPath === ''){ + projectPath = $("#ofPath").val(); } - ipc.send('pickProjectImport', path); + ipcRenderer.send('pickProjectImport', projectPath); } function getUpdatePath() { - var path = $("#updateMultiplePath").val(); - if (path === ''){ - path = $("#ofPath").val(); + let projectPath = $("#updateMultiplePath").val(); + if (projectPath === ''){ + projectPath = $("#ofPath").val(); } - ipc.send('pickUpdatePath', path); // current path could go here + ipcRenderer.send('pickUpdatePath', projectPath); // current path could go here } function rescanAddons() { - ipc.send('refreshAddonList', $("#ofPath").val()); - var projectInfo = {}; + ipcRenderer.send('refreshAddonList', $("#ofPath").val()); + let projectInfo = {}; projectInfo['projectName'] = $("#projectName").val(); projectInfo['projectPath'] = $("#projectPath").val(); - ipc.send('isOFProjectFolder', projectInfo); // <- this forces addon reload + ipcRenderer.send('isOFProjectFolder', projectInfo); // <- this forces addon reload } function getRandomSketchName(){ - var path = $("#projectPath").val(); - if (path === ''){ + let projectPath = $("#projectPath").val(); + if (projectPath === ''){ $("#projectPath").oneTimeTooltip('Please specify a path first...'); } else { - ipc.send('getRandomSketchName', path ); + ipcRenderer.send('getRandomSketchName', path ); } } function launchInIDE(){ - var platform = getPlatformList()[0]; + let platform = getPlatformList()[0]; - var project = {}; + let project = {}; project['projectName'] = $("#projectName").val(); project['projectPath'] = $("#projectPath").val(); project['platform'] = platform; project['ofPath'] = $("#ofPath").val(); - ipc.send('launchProjectinIDE', project ); + ipcRenderer.send('launchProjectinIDE', project ); } diff --git a/frontend/app/libfmodex.dylib b/frontend/app/libfmodex.dylib new file mode 100644 index 00000000..9637708e Binary files /dev/null and b/frontend/app/libfmodex.dylib differ diff --git a/frontend/app/projectGenerator b/frontend/app/projectGenerator index 47d45008..fe458561 100755 Binary files a/frontend/app/projectGenerator and b/frontend/app/projectGenerator differ diff --git a/frontend/index.html b/frontend/index.html index 1b9df434..dcb33130 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -214,6 +214,14 @@
+
+ +
+ + +
+
+
Generate
diff --git a/frontend/index.js b/frontend/index.js index 17207574..42f6073f 100644 --- a/frontend/index.js +++ b/frontend/index.js @@ -1,17 +1,22 @@ "use strict"; -var app = require('app'); // Module to control application life. -var BrowserWindow = require('browser-window'); // Module to create native browser window. -var dialog = require('dialog'); -var ipc = require('ipc'); -var fs = require('fs'); -var path = require('path'); -var menu = require('menu'); -var moniker = require('moniker'); -var process = require('process'); -var os = require("os"); -var exec = require('child_process').exec; +const {app} = require('electron'); // Module to control application life. +const {BrowserWindow} = require('electron'); // Module to create native browser window. +const {dialog} = require('electron'); +const {ipcMain} = require('electron'); +const {Menu} = require('electron'); + +// const {crashReporter} = require('electron'); // Requires server destination + +const fs = require('fs'); +const path = require('path'); +const moniker = require('moniker'); +const exec = require('child_process').exec; +const os = require("os"); + +const debugDevTools = false; +let dialogIsOpen = false; // Debugging: start the Electron PG from the terminal to see the messages from console.log() // Example: /path/to/PG/Contents/MacOS/Electron /path/to/PG/Contents/Ressources/app @@ -19,19 +24,175 @@ var exec = require('child_process').exec; -//--------------------------------------------------------- load settings -var obj; +const getStartingProjectName = () => { + let ofRoot = obj["defaultOfPath"]; + if (!ofRoot || ofRoot === "") ofRoot = guessOFRoot() + let defaultPathForProjects = path.join(ofRoot, obj["defaultRelativeProjectPath"]); + let foundOne = false; + let goodName = getGoodSketchName(defaultPathForProjects); + startingProject['path'] = defaultPathForProjects; + startingProject['name'] = goodName; +} -try { - var settings = fs.readFileSync(path.resolve(__dirname, 'settings.json')); - obj = JSON.parse(settings, 'utf8'); - console.log(obj); -} catch (e) { +const parseAddonsAndUpdateSelect = (arg) => { + console.log("in parseAddonsAndUpdateSelect " + arg); + //path = require('path').resolve(__dirname, defaultOfPath + "/addons"); + addons = getDirectories(arg + "/addons","ofx"); + + if (addons){ + if (addons.length > 0){ + addons = addons.filter( function(addon) { + return addonsToSkip.indexOf(addon)==-1; + }); + } + } + + console.log("Reloading the addons folder, these were found:"); + console.log(addons); + mainWindow.webContents.send('setAddons', addons); +} + +const parsePlatformsAndUpdateSelect = (arg) => { + let folders = getDirectories(arg + "/scripts/templates"); + console.log("Reloading the templates folder, these were found:"); + console.log(folders); + + let platformsWeHave = {}; + let templatesWeHave = {}; + + if (folders === undefined || folders === null) { + //do something + } else { + // check all folder name under /scripts/templates + for (let id in folders) { + let key = folders[id]; + if (platforms[key]) { + // this folder is for platform + console.log("Found platform, key " + key + " has value " + platforms[key]); + platformsWeHave[key] = platforms[key]; + }else{ + // this folder is for template + if(templates[key]){ + console.log("Found template folder, key " + key + " has value " + templates[key]); + templatesWeHave[key] = templates[key]; + }else{ + // Unofficial folder name, maybe user's custom template? + // We use folder name for both of key and value + console.log("Found unofficial folder, key " + key + " has value " + key); + templatesWeHave[key] = key; + } + } + } + } + // saninty check... + // for(let key in platformsWeHave){ + // console.log("key " + key + " has value " + platformsWeHave[key]); + // } + mainWindow.webContents.send('setPlatforms', platformsWeHave); + + mainWindow.webContents.send('setTemplates', templatesWeHave); + +} + +const getGoodSketchName = (arg) => { + + let currentProjectPath = arg; + let foundOne = false; + let goodName = "mySketch"; + + if (bUseMoniker){ + + let projectNames = new moniker.Dictionary(); + let tmpPath = require('path'); + projectNames.read( tmpPath.join(__dirname, 'static', 'data', 'sketchAdjectives.txt')); + goodName = "mySketch"; + + while (foundOne === false) { + if (fs.existsSync(tmpPath.join(currentProjectPath, goodName))) { + console.log("«" + goodName + "» already exists, generating a new name..."); + let adjective = projectNames.choose(); + goodName = "my" + adjective.charAt(0).toUpperCase() + adjective.slice(1) + "Sketch"; + } else { + foundOne = true; + } + } + + } else { + + let date = new Date(); + let formattedDate = formatDate(date); + goodName = "sketch_" + formattedDate; + let count = 1; + + while (foundOne === false) { + if (fs.existsSync(path.join(currentProjectPath, goodName))) { + console.log("«" + goodName + "» already exists, generating a new name..."); + goodName = "sketch_" + formattedDate + toLetters(count); + count++; + } else { + foundOne = true; + } + } + } + + return goodName; + +} + + +const getDirectories = (srcpath, acceptedPrefix) => { + + // because this is called at a different time, fs and path + // seemed to be "bad" for some reason... + // that's why I am making temp ones here. + // console.log(path); + + let fsTemp = require('fs'); + let pathTemp = require('path'); + + try { - // automatic platform detection - var os = require("os"); - var myPlatform = "Unknown"; + return fsTemp.readdirSync(srcpath).filter( (file) => { + + //console.log(srcpath); + //console.log(file); + try{ + let joinedPath = pathTemp.join(srcpath, file); + if ((acceptedPrefix==null || file.substring(0,acceptedPrefix.length)==acceptedPrefix) && joinedPath !== null) { + // only accept folders (potential addons) + return fsTemp.statSync(joinedPath).isDirectory(); + } + }catch(e){} + }); + } catch (e) { + console.log(e); + return null; + // if (e.code === 'ENOENT') { + // console.log("This doesn't seem to be a valid addons folder:\n" + srcpath); + // mainWindow.webContents.send('sendUIMessage', "No addons were found in " + srcpath + ".\nIs the OF path correct?"); + // } else { + // throw e; + // } + } +} + +let guessOFRoot = () => { + console.log('[index.js] guessing of root...'); + const githubOFRoot = path.resolve(__dirname, '../../../'); + const releaseOFRoot = path.resolve(__dirname, '../../'); + + console.log('Which root am I likely to be in?', path.basename(githubOFRoot), path.basename(releaseOFRoot) ); + + let ofRoot = githubOFRoot; + if (path.basename(releaseOFRoot).indexOf("of_v") !== -1) ofRoot = releaseOFRoot; + return ofRoot; +}; + +let getPlatform = () => { + + console.log('[index.js] getting platform...'); + let myPlatform = "Unknown"; if (/^win/.test(process.platform)) { myPlatform = 'vs'; } @@ -52,19 +213,34 @@ try { myPlatform = 'linux64'; } } + return myPlatform; +}; + +//--------------------------------------------------------- load settings + +let obj; + +// load settings.json + +try { + let settings = fs.readFileSync(path.resolve(__dirname, 'settings.json')); + obj = JSON.parse(settings, 'utf8'); +} catch (e) { + console.error("could not load settings.json"); obj = { - "defaultOfPath": "", - "advancedMode": false, - "defaultPlatform": myPlatform, - "showConsole": false, - "showDeveloperTools": false, - "defaultRelativeProjectPath": "apps/myApps", - "useDictionaryNameGenerator": false + defaultOfPath : guessOFRoot(), + defaultPlatform : getPlatform(), + advancedMode : false, + showConsole : false, + showDeveloperTools : false, + defaultRelativeProjectPath : "apps/myApps", + useDictionaryNameGenerator : false, + useAddonDefines : false }; } -var hostplatform = ""; +let hostplatform = ""; if (/^win/.test(process.platform)) { hostplatform = 'windows'; } else if (process.platform === "darwin") { @@ -75,12 +251,12 @@ if (/^win/.test(process.platform)) { console.log("detected platform: " + hostplatform + " in " + __dirname); -var defaultOfPath = obj["defaultOfPath"]; -var addons; +let defaultOfPath = obj["defaultOfPath"]; +let addons; // hide some addons, per https://github.com/openframeworks/projectGenerator/issues/62 -var addonsToSkip = [ +let addonsToSkip = [ "ofxiOS", "ofxMultiTouch", "ofxEmscripten", @@ -88,7 +264,7 @@ var addonsToSkip = [ "ofxAndroid" ] -var platforms = { +let platforms = { "osx": "OS X (Xcode)", "vs": "Windows (Visual Studio 2017)", "ios": "iOS (Xcode)", @@ -97,9 +273,9 @@ var platforms = { "linuxarmv6l": "Linux ARMv6 (Makefiles)", "linuxarmv7l": "Linux ARMv7 (Makefiles)" }; -var bUseMoniker = obj["useDictionaryNameGenerator"]; +let bUseMoniker = obj["useDictionaryNameGenerator"]; -var templates = { +let templates = { "emscripten": "Emscripten", "gitignore": "Git Ignore", "gles2": "Open GL ES 2", @@ -140,22 +316,22 @@ if (!path.isAbsolute(defaultOfPath)) { } // now, let's look for a folder called mySketch, and keep counting until we find one that doesn't exist -var startingProject = {}; +let startingProject = {}; startingProject['name'] = ""; startingProject['path'] = ""; getStartingProjectName(); //--------------------------------------------------------- // Report crashes to our server. -require('crash-reporter').start(); +// crashReporter.start(); //--------------------------------------------------------- // Keep a global reference of the window object, if you don't, the window will // be closed automatically when the JavaScript object is GCed. -var mainWindow = null; +let mainWindow = null; // Quit when all windows are closed. -app.on('window-all-closed', function() { +app.on('window-all-closed', () => { // 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') { @@ -167,11 +343,11 @@ app.on('window-all-closed', function() { function formatDate(d){ //get the month - var month = d.getMonth(); + let month = d.getMonth(); //get the day - var day = d.getDate(); + let day = d.getDate(); //get the year - var year = d.getFullYear(); + let year = d.getFullYear(); //pull the last two digits of the year year = year.toString().substr(2,2); //increment month by 1 since it is 0 indexed @@ -195,7 +371,7 @@ function formatDate(d){ // wraps over to bb no aa, why? function toLetters(num) { - var mod = num % 26, + let mod = num % 26, pow = num / 26 | 0, out = mod ? String.fromCharCode(96 + (num % 26)) : (--pow, 'z'); return pow ? toLetters(pow) + out : out; @@ -206,36 +382,40 @@ function toLetters(num) { //-------------------------------------------------------- window // This method will be called when Electron has finished // initialization and is ready to create browser windows. -app.on('ready', function() { +app.on('ready', () => { // Create the browser window. + mainWindow = new BrowserWindow({ width: 500, height: 600, resizable: false, - frame: false + frame: false, + webPreferences: { + nodeIntegration: true + } }); // load jquery here: // http://stackoverflow.com/questions/30271011/electron-jquery-errors // and load the index.html of the app. - mainWindow.loadUrl('file://' + __dirname + '/index.html'); + mainWindow.loadURL('file://' + __dirname + '/index.html'); // Open the devtools. - if (obj["showDeveloperTools"]) { + if (obj["showDeveloperTools"] || debugDevTools) { mainWindow.openDevTools(); } //when the window is loaded send the defaults - mainWindow.webContents.on('did-finish-load', function() { + mainWindow.webContents.on('did-finish-load', () => { //parseAddonsAndUpdateSelect(); mainWindow.webContents.send('cwd', app.getAppPath()); mainWindow.webContents.send('cwd', __dirname); mainWindow.webContents.send('cwd', process.resourcesPath); mainWindow.webContents.send('setStartingProject', startingProject); + mainWindow.webContents.send('checkOfPathAfterSetup', ''); mainWindow.webContents.send('setDefaults', obj); mainWindow.webContents.send('setup', ''); - mainWindow.webContents.send('checkOfPathAfterSetup', ''); }); @@ -243,7 +423,7 @@ app.on('ready', function() { //console.log(); // Emitted when the window is closed. - mainWindow.on('closed', function() { + mainWindow.on('closed', () => { mainWindow = null; process.exit(); @@ -252,12 +432,12 @@ app.on('ready', function() { // when you should delete the corresponding element. }); - var menuTmpl = [{ + let menuTmpl = [{ label: 'Atom Shell', submenu: [{ label: 'Quit', accelerator: 'Command+Q', - click: function() { + click: () => { mainWindow.close(); } }] @@ -266,13 +446,13 @@ app.on('ready', function() { submenu: [{ label: 'Reload', accelerator: 'Command+R', - click: function() { + click: () => { mainWindow.reload(); } }, { label: 'Toggle DevTools', accelerator: 'Alt+Command+I', - click: function() { + click: () => { mainWindow.toggleDevTools(); } }] @@ -306,169 +486,18 @@ app.on('ready', function() { selector: 'selectAll:' }, ] }]; - var menuV = menu.buildFromTemplate(menuTmpl); - menu.setApplicationMenu(menuV); + let menuV = Menu.buildFromTemplate(menuTmpl); + Menu.setApplicationMenu(menuV); }); -function getStartingProjectName() { - - var defaultPathForProjects = path.join(obj["defaultOfPath"], obj["defaultRelativeProjectPath"]); - var foundOne = false; - var goodName = getGoodSketchName(defaultPathForProjects); - startingProject['path'] = defaultPathForProjects; - startingProject['name'] = goodName; -} - -function parseAddonsAndUpdateSelect(arg) { - console.log("in parseAddonsAndUpdateSelect " + arg); - //path = require('path').resolve(__dirname, defaultOfPath + "/addons"); - addons = getDirectories(arg + "/addons","ofx"); - - if (addons){ - if (addons.length > 0){ - addons = addons.filter( function(addon) { - return addonsToSkip.indexOf(addon)==-1; - }); - } - } - - console.log("Reloading the addons folder, these were found:"); - console.log(addons); - mainWindow.webContents.send('setAddons', addons); -} - -function parsePlatformsAndUpdateSelect(arg) { - var folders = getDirectories(arg + "/scripts/templates"); - console.log("Reloading the templates folder, these were found:"); - console.log(folders); - - var platformsWeHave = {}; - var templatesWeHave = {}; - - if (folders === undefined || folders === null) { - //do something - } else { - // check all folder name under /scripts/templates - for (var id in folders) { - var key = folders[id]; - if (platforms[key]) { - // this folder is for platform - console.log("Found platform, key " + key + " has value " + platforms[key]); - platformsWeHave[key] = platforms[key]; - }else{ - // this folder is for template - if(templates[key]){ - console.log("Found template folder, key " + key + " has value " + templates[key]); - templatesWeHave[key] = templates[key]; - }else{ - // Unofficial folder name, maybe user's custom template? - // We use folder name for both of key and value - console.log("Found unofficial folder, key " + key + " has value " + key); - templatesWeHave[key] = key; - } - } - } - } - // saninty check... - // for(var key in platformsWeHave){ - // console.log("key " + key + " has value " + platformsWeHave[key]); - // } - mainWindow.webContents.send('setPlatforms', platformsWeHave); - - mainWindow.webContents.send('setTemplates', templatesWeHave); - -} - -function getGoodSketchName(arg){ - - var currentProjectPath = arg; - var foundOne = false; - var goodName = "mySketch"; - - if (bUseMoniker){ - - var projectNames = new moniker.Dictionary(); - var tmpPath = require('path'); - projectNames.read( tmpPath.join(__dirname, 'static', 'data', 'sketchAdjectives.txt')); - goodName = "mySketch"; - - while (foundOne === false) { - if (fs.existsSync(tmpPath.join(currentProjectPath, goodName))) { - console.log("«" + goodName + "» already exists, generating a new name..."); - var adjective = projectNames.choose(); - goodName = "my" + adjective.charAt(0).toUpperCase() + adjective.slice(1) + "Sketch"; - } else { - foundOne = true; - } - } - - } else { - - var date = new Date(); - var formattedDate = formatDate(date); - goodName = "sketch_" + formattedDate; - var count = 1; - - while (foundOne === false) { - if (fs.existsSync(path.join(currentProjectPath, goodName))) { - console.log("«" + goodName + "» already exists, generating a new name..."); - goodName = "sketch_" + formattedDate + toLetters(count); - count++; - } else { - foundOne = true; - } - } - } - - return goodName; - -} - - -function getDirectories(srcpath, acceptedPrefix) { - - // because this is called at a different time, fs and path - // seemed to be "bad" for some reason... - // that's why I am making temp ones here. - // console.log(path); - - var fsTemp = require('fs'); - var pathTemp = require('path'); - - try { - - return fsTemp.readdirSync(srcpath).filter(function(file) { - - //console.log(srcpath); - //console.log(file); - try{ - var joinedPath = pathTemp.join(srcpath, file); - if ((acceptedPrefix==null || file.substring(0,acceptedPrefix.length)==acceptedPrefix) && joinedPath !== null) { - // only accept folders (potential addons) - return fsTemp.statSync(joinedPath).isDirectory(); - } - }catch(e){} - }); - } catch (e) { - console.log(e); - return null; - // if (e.code === 'ENOENT') { - // console.log("This doesn't seem to be a valid addons folder:\n" + srcpath); - // mainWindow.webContents.send('sendUIMessage', "No addons were found in " + srcpath + ".\nIs the OF path correct?"); - // } else { - // throw e; - // } - } -} - // function getDirs(srcpath, cb) { // fs.readdir(srcpath, function (err, files) { // if(err) { // console.error(err); // return cb([]); // } -// var iterator = function (file, cb) { +// let iterator = function (file, cb) { // fs.stat(path.join(srcpath, file), function (err, stats) { // if(err) { // console.error(err); @@ -481,23 +510,23 @@ function getDirectories(srcpath, acceptedPrefix) { // }); // } -ipc.on('isOFProjectFolder', function(event, project) { - var fsTemp = require('fs'); - var pathTemp = require('path'); - var folder; +ipcMain.on('isOFProjectFolder', (event, project) => { + let fsTemp = require('fs'); + let pathTemp = require('path'); + let folder; folder = pathTemp.join(project['projectPath'], project['projectName']); try { - var tmpFiles = fsTemp.readdirSync(folder); + let tmpFiles = fsTemp.readdirSync(folder); if (!tmpFiles || tmpFiles.length <= 1) { return false; } // we need at least 2 files/folders within // todo: also check for config.make & addons.make ? - var foundSrcFolder = false; - var foundAddons = false; - tmpFiles.forEach(function(el, i) { + let foundSrcFolder = false; + let foundAddons = false; + tmpFiles.forEach( (el, i) => { if (el == 'src') { foundSrcFolder = true; } @@ -510,9 +539,9 @@ ipc.on('isOFProjectFolder', function(event, project) { event.sender.send('setGenerateMode', 'updateMode'); if (foundAddons) { - var projectAddons = fsTemp.readFileSync(pathTemp.resolve(folder, 'addons.make')).toString().split("\n"); + let projectAddons = fsTemp.readFileSync(pathTemp.resolve(folder, 'addons.make')).toString().split("\n"); - projectAddons = projectAddons.filter(function(el) { + projectAddons = projectAddons.filter( (el) => { if (el === '' || el === 'addons') { return false; } // eleminates these items @@ -522,9 +551,9 @@ ipc.on('isOFProjectFolder', function(event, project) { }); // remove comments - projectAddons.forEach(function(element, index) { - this[index] = this[index].split('#')[0]; - }, projectAddons); + projectAddons.forEach( (element, index) => { + projectAddons[index] = projectAddons[index].split('#')[0]; + }, projectAddons); // console.log('addons', projectAddons); @@ -555,17 +584,17 @@ ipc.on('isOFProjectFolder', function(event, project) { //----------------------------------------------------------- ipc -ipc.on('refreshAddonList', function(event, arg) { +ipcMain.on('refreshAddonList', function(event, arg) { console.log("in refresh " + arg) parseAddonsAndUpdateSelect(arg); }); -ipc.on('refreshPlatformList', function(event, arg) { +ipcMain.on('refreshPlatformList', function(event, arg) { parsePlatformsAndUpdateSelect(arg); }); -ipc.on('refreshTemplateList', function (event, arg) { +ipcMain.on('refreshTemplateList', function (event, arg) { console.log("refreshTemplateList"); let selectedPlatforms = arg.selectedPlatforms; let ofPath = arg.ofPath; @@ -632,27 +661,33 @@ ipc.on('refreshTemplateList', function (event, arg) { mainWindow.webContents.send('enableTemplate', returnArg); }); -ipc.on('getRandomSketchName', function(event, arg) { - var goodName = getGoodSketchName(arg); +ipcMain.on('getRandomSketchName', function(event, arg) { + let goodName = getGoodSketchName(arg); event.sender.send('setRandomisedSketchName', goodName); event.sender.send('setGenerateMode', 'createMode'); // it's a new sketch name, we are in create mode }); -ipc.on('update', function(event, arg) { +ipcMain.on('update', function(event, arg) { - var update = arg; - var exec = require('child_process').exec; - var pathTemp = require('path'); + console.log('[index.js] updating...', arg); + let update = arg; + let exec = require('child_process').exec; + let pathTemp = require('path'); console.log(update); - var updatePath = ""; - var pathString = ""; - var platformString = ""; - var templateString = ""; - var recursiveString = ""; - var verboseString = ""; - var rootPath = defaultOfPath; + let updatePath = ""; + let pathString = ""; + let platformString = ""; + let templateString = ""; + let recursiveString = ""; + let verboseString = ""; + let rootPath = defaultOfPath; + let definesString = ""; + + if (update['addondefines'] !== null) { + definesString = "-D"; + } if (update['updatePath'] !== null) { updatePath = update['updatePath']; @@ -680,7 +715,7 @@ ipc.on('update', function(event, arg) { verboseString = "-v"; } - var pgApp = pathTemp.normalize(pathTemp.join(pathTemp.join(__dirname, "app"), "projectGenerator")); + let pgApp = pathTemp.normalize(pathTemp.join(pathTemp.join(__dirname, "app"), "projectGenerator")); if( hostplatform == "linux" || hostplatform == "linux64" ){ pgApp = pathTemp.join(rootPath, "apps/projectGenerator/commandLine/bin/projectGenerator"); @@ -692,7 +727,10 @@ ipc.on('update', function(event, arg) { pgApp = "\"" + pgApp + "\""; } - var wholeString = pgApp + " " + recursiveString + " " + verboseString + " " + pathString + " " + platformString + " " + templateString + " " + updatePath; + + let wholeString = pgApp + " " + recursiveString + " " + verboseString + " " + pathString + " " + platformString + " " + templateString + " " + definesString + " " + updatePath; + + console.log('[index.js] sending to pg via update... ', wholeString); exec(wholeString, {maxBuffer : Infinity}, function callback(error, stdout, stderr) { @@ -717,29 +755,33 @@ ipc.on('update', function(event, arg) { } }); - console.log(wholeString); - //console.log(__dirname); }); -ipc.on('generate', function(event, arg) { +ipcMain.on('generate', function(event, arg) { + console.log('[index.js] generating...', arg); - var generate = arg; + let generate = arg; - var exec = require('child_process').exec; + let exec = require('child_process').exec; - var pathTemp = require('path'); + let pathTemp = require('path'); - var projectString = ""; - var pathString = ""; - var addonString = ""; - var platformString = ""; - var templateString = ""; - var verboseString = ""; - var rootPath = defaultOfPath; + let projectString = ""; + let pathString = ""; + let addonString = ""; + let platformString = ""; + let templateString = ""; + let verboseString = ""; + let rootPath = defaultOfPath; + let definesString = ""; + + if (generate['addondefines'] !== null) { + definesString = "-D"; + } if (generate['platformList'] !== null) { @@ -771,7 +813,7 @@ ipc.on('generate', function(event, arg) { projectString = "\"" + pathTemp.join(generate['projectPath'], generate['projectName']) + "\""; } - var pgApp=""; + let pgApp=""; if(hostplatform == "linux" || hostplatform == "linux64"){ pgApp = pathTemp.join(rootPath, "apps/projectGenerator/commandLine/bin/projectGenerator"); //pgApp = "projectGenerator"; @@ -785,14 +827,16 @@ ipc.on('generate', function(event, arg) { pgApp = pgApp = "\"" + pgApp + "\""; } - var wholeString = pgApp + " " + verboseString + " " + pathString + " " + addonString + " " + platformString + " " + templateString + " " + projectString; + let wholeString = pgApp + " " + verboseString + " " + pathString + " " + addonString + " " + platformString + " " + templateString + " " + definesString + " " + projectString; + + console.log('[index.js] sending to pg via generate... ', wholeString); exec(wholeString, {maxBuffer : Infinity}, function callback(error, stdout, stderr) { - var wasError = false; - var text = stdout; //Big text with many line breaks - var lines = text.split(os.EOL); //Will return an array of lines on every OS node works - for (var i = 0; i < lines.length; i++) { + let wasError = false; + let text = stdout; //Big text with many line breaks + let lines = text.split(os.EOL); //Will return an array of lines on every OS node works + for (let i = 0; i < lines.length; i++) { if (lines[i].indexOf("Result:") > -1) { if (lines[i].indexOf("error") > -1) { wasError = true; @@ -803,7 +847,7 @@ ipc.on('generate', function(event, arg) { // wasError = did the PG spit out an error (like a bad path, etc) // error = did node have an error running this command line app - var fullPath = pathTemp.join(generate['projectPath'], generate['projectName']); + let fullPath = pathTemp.join(generate['projectPath'], generate['projectName']); if (error === null && wasError === false) { event.sender.send('consoleMessage', "" + wholeString + "
" + stdout); event.sender.send('sendUIMessage', @@ -843,49 +887,65 @@ ipc.on('generate', function(event, arg) { //console.log(arg); }); -ipc.on('pickOfPath', function(event, arg) { - - path = dialog.showOpenDialog({ +ipcMain.on('pickOfPath', function(event, arg) { + console.log('pick OF Path'); + dialog.showOpenDialog({ title: 'select the root of OF, where you see libs, addons, etc', properties: ['openDirectory'], filters: [], defaultPath: arg - }, function(filenames) { - if (filenames !== undefined && filenames.length > 0) { - defaultOfPath = filenames[0]; - event.sender.send('setOfPath', filenames[0]); + }).then( response => { + + const filename = response.filePaths[0]; + if (filename) { + defaultOfPath = filename; + event.sender.send('setOfPath', filename); } + }).catch(err => { + console.error('pickUpdatePath', err); }); }); -ipc.on('pickUpdatePath', function(event, arg) { - path = dialog.showOpenDialog({ +ipcMain.on('pickUpdatePath', function(event, arg) { + console.log('update OF Path'); + + + dialog.showOpenDialog({ title: 'select root folder where you want to update', properties: ['openDirectory'], filters: [], defaultPath: arg - }, function(filenames) { - if (filenames !== undefined && filenames.length > 0) { - defaultOfPath = filenames[0]; - event.sender.send('setUpdatePath', filenames[0]); + }).then( response => { + + const filename = response.filePaths[0]; + if (filename) { + event.sender.send('setUpdatePath', filename); } + }).catch(err => { + console.error('pickUpdatePath', err); }); }); -ipc.on('pickProjectPath', function(event, arg) { - path = dialog.showOpenDialog({ +ipcMain.on('pickProjectPath', function(event, arg) { + console.log('pick Project Path'); + + dialog.showOpenDialog({ title: 'select parent folder for project, typically apps/myApps', properties: ['openDirectory'], filters: [], defaultPath: arg - }, function(filenames) { - if (filenames !== undefined && filenames.length > 0) { - event.sender.send('setProjectPath', filenames[0]); + }).then( response => { + + const filename = response.filePaths[0]; + if (filename) { + event.sender.send('setProjectPath', filename); } - }); + }).catch(err => { + console.error('pickProjectPath', err); + }) }); -ipc.on('checkMultiUpdatePath', function(event, arg) { +ipcMain.on('checkMultiUpdatePath', function(event, arg) { if (fs.existsSync(arg)) { @@ -896,37 +956,40 @@ ipc.on('checkMultiUpdatePath', function(event, arg) { }); -var dialogIsOpen = false; -ipc.on('pickProjectImport', function(event, arg) { +ipcMain.on('pickProjectImport', function(event, arg) { + if(dialogIsOpen){ return; } dialogIsOpen = true; - path = dialog.showOpenDialog({ + let currentPath = dialog.showOpenDialog(mainWindow, { title: 'Select the folder of your project, typically apps/myApps/myGeniusApp', properties: ['openDirectory'], filters: [], defaultPath: arg - }, function(filenames) { - if (filenames != null) { + }).then( response => { + const filename = response.filePaths[0]; + if (filename) { // gather project information - var tmpPath = require('path'); - var projectSettings = {}; - projectSettings['projectName'] = tmpPath.basename(filenames[0]); - projectSettings['projectPath'] = tmpPath.dirname(filenames[0]); + let projectSettings = {}; + projectSettings['projectName'] = path.basename(filename); + projectSettings['projectPath'] = path.dirname(filename); event.sender.send('importProjectSettings', projectSettings); } dialogIsOpen = false; + }).catch( err => { + console.error('pickProjectImport', err); + dialogIsOpen = false; }); }); -ipc.on('launchProjectinIDE', function(event, arg) { +ipcMain.on('launchProjectinIDE', function(event, arg) { - var pathTemp = require('path'); - var fsTemp = require('fs'); - var fullPath = pathTemp.join(arg['projectPath'], arg['projectName']); + let pathTemp = require('path'); + let fsTemp = require('fs'); + let fullPath = pathTemp.join(arg['projectPath'], arg['projectName']); if( fsTemp.statSync(fullPath).isDirectory() == false ){ // project doesn't exist @@ -937,7 +1000,7 @@ ipc.on('launchProjectinIDE', function(event, arg) { // // launch xcode if( arg.platform == 'osx' ){ if(hostplatform == 'osx'){ - var osxPath = pathTemp.join(fullPath, arg['projectName'] + '.xcodeproj'); + let osxPath = pathTemp.join(fullPath, arg['projectName'] + '.xcodeproj'); console.log( osxPath ); osxPath = "\"" + osxPath + "\""; @@ -947,7 +1010,7 @@ ipc.on('launchProjectinIDE', function(event, arg) { } } else if( arg.platform == 'linux' || arg.platform == 'linux64' ){ if(hostplatform == 'linux'){ - var linuxPath = pathTemp.join(fullPath, arg['projectName'] + '.qbs'); + let linuxPath = pathTemp.join(fullPath, arg['projectName'] + '.qbs'); linuxPath = linuxPath.replace(/ /g, '\\ '); console.log( linuxPath ); exec('xdg-open ' + linuxPath, function callback(error, stdout, stderr){ @@ -965,7 +1028,7 @@ ipc.on('launchProjectinIDE', function(event, arg) { } }); } else if( hostplatform == 'windows'){ - var windowsPath = pathTemp.join(fullPath, arg['projectName'] + '.sln'); + let windowsPath = pathTemp.join(fullPath, arg['projectName'] + '.sln'); console.log( windowsPath ); windowsPath = "\"" + windowsPath + "\""; exec('start ' + "\"\"" + " " + windowsPath, function callback(error, stdout, stderr){ @@ -974,6 +1037,6 @@ ipc.on('launchProjectinIDE', function(event, arg) { } }); -ipc.on('quit', function(event, arg) { +ipcMain.on('quit', function(event, arg) { app.quit(); }); diff --git a/frontend/npm-shrinkwrap.json b/frontend/npm-shrinkwrap.json deleted file mode 100644 index 5574e10c..00000000 --- a/frontend/npm-shrinkwrap.json +++ /dev/null @@ -1,1836 +0,0 @@ -{ - "name": "projectGenerator", - "version": "0.0.1", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "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.2" - } - }, - "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": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "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 - }, - "asar": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/asar/-/asar-0.8.3.tgz", - "integrity": "sha1-wuA/kFRRbbv1Z1noVOnOjRqdOdM=", - "dev": true, - "requires": { - "chromium-pickle-js": "0.1.0", - "commander": "2.3.0", - "cuint": "0.1.5", - "glob": "^5.0.5", - "minimatch": "2.0.4", - "mkdirp": "^0.5.0", - "mksnapshot": "0.1.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-2.0.4.tgz", - "integrity": "sha1-g76hFYA+egl6eAIkJyh+23Yvr+0=", - "dev": true, - "requires": { - "brace-expansion": "^1.0.0" - } - } - } - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "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": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", - "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", - "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.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "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": "0.0.8", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", - "integrity": "sha1-EQHpVE9KdrG8OybUUsqW16NeeXg=", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "binary": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/binary/-/binary-0.3.0.tgz", - "integrity": "sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk=", - "dev": true, - "requires": { - "buffers": "~0.1.1", - "chainsaw": "~0.1.0" - } - }, - "bl": { - "version": "0.9.5", - "resolved": "https://registry.npmjs.org/bl/-/bl-0.9.5.tgz", - "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", - "dev": true, - "requires": { - "readable-stream": "~1.0.26" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - } - } - }, - "bluebird": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-2.11.0.tgz", - "integrity": "sha1-U0uQM8AiyVecVro7Plpcqvu2UOE=", - "dev": true - }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "buffers": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/buffers/-/buffers-0.1.1.tgz", - "integrity": "sha1-skV5w77U1tOWru5tmorn9Ugqt7s=", - "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" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "chainsaw": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chainsaw/-/chainsaw-0.1.0.tgz", - "integrity": "sha1-XqtQsor+WAdNDVgpE4iCi15fvJg=", - "dev": true, - "requires": { - "traverse": ">=0.3.0 <0.4" - } - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - } - }, - "chromium-pickle-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.1.0.tgz", - "integrity": "sha1-HUixB9ghJqLz4hHC6iX4A7pVGyE=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.3.0.tgz", - "integrity": "sha1-/UMOiJgy7DU7ms0d4hfBHLPu+HM=", - "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" - } - }, - "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 - }, - "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" - } - } - } - }, - "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 - }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.x.x" - } - }, - "ctype": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/ctype/-/ctype-0.5.3.tgz", - "integrity": "sha1-gsGMJGH3QRTvFsE1IkrQuRRMoS8=", - "dev": true - }, - "cuint": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/cuint/-/cuint-0.1.5.tgz", - "integrity": "sha1-uEixhGbz8YD5bR624HzLfs8Sai4=", - "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 - }, - "decompress-zip": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.1.0.tgz", - "integrity": "sha1-vOYMEWZPLWYPykvPY0r23l1sFMc=", - "dev": true, - "requires": { - "binary": "^0.3.0", - "graceful-fs": "^3.0.0", - "mkpath": "^0.1.0", - "nopt": "^3.0.1", - "q": "^1.1.2", - "readable-stream": "^1.1.8", - "touch": "0.0.3" - }, - "dependencies": { - "graceful-fs": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz", - "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==", - "dev": true, - "requires": { - "natives": "^1.1.3" - } - } - } - }, - "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 - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "electron-debug": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/electron-debug/-/electron-debug-0.1.1.tgz", - "integrity": "sha1-nkexjSZIeUQOdyV9khzS+eCRE70=" - }, - "electron-download": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-1.4.1.tgz", - "integrity": "sha1-T5G6vypVbxReP7hT32qWwoJeGM0=", - "dev": true, - "requires": { - "debug": "^2.2.0", - "home-path": "^1.0.1", - "minimist": "^1.2.0", - "mkdirp": "^0.5.0", - "mv": "^2.0.3", - "nugget": "^1.5.1", - "path-exists": "^1.0.0", - "rc": "^1.1.2" - } - }, - "electron-packager": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/electron-packager/-/electron-packager-5.2.0.tgz", - "integrity": "sha1-4baqaDtlj707+cDMHdrNlw+LCVg=", - "dev": true, - "requires": { - "asar": "^0.8.2", - "electron-download": "^1.0.0", - "extract-zip": "^1.0.3", - "minimist": "^1.1.1", - "mkdirp": "^0.5.0", - "mv": "^2.0.3", - "ncp": "^2.0.0", - "plist": "^1.1.0", - "rcedit": "^0.3.0", - "rimraf": "^2.3.2", - "run-series": "^1.1.1" - } - }, - "electron-prebuilt": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/electron-prebuilt/-/electron-prebuilt-0.30.8.tgz", - "integrity": "sha1-d84yesFYAYRc7TFq4qvNxuWxvxs=", - "dev": true, - "requires": { - "electron-download": "^1.0.0", - "extract-zip": "^1.0.3" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "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": "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 - }, - "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" - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "foreachasync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", - "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=" - }, - "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.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fs-extra": { - "version": "0.18.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.18.2.tgz", - "integrity": "sha1-rwXKcCsLbfp96AOh96tHnsXCFSU=", - "dev": true, - "requires": { - "graceful-fs": "^3.0.5", - "jsonfile": "^2.0.0", - "rimraf": "^2.2.8" - }, - "dependencies": { - "graceful-fs": { - "version": "3.0.12", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-3.0.12.tgz", - "integrity": "sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg==", - "dev": true, - "requires": { - "natives": "^1.1.3" - } - } - } - }, - "generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "dev": true, - "requires": { - "is-property": "^1.0.2" - } - }, - "generate-object-property": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz", - "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", - "dev": true, - "requires": { - "is-property": "^1.0.0" - } - }, - "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 - }, - "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": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", - "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==", - "dev": true - }, - "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.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "hawk": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-2.3.1.tgz", - "integrity": "sha1-HnMc45RH+h0PbXB/e87r7A/R7B8=", - "dev": true, - "requires": { - "boom": "2.x.x", - "cryptiles": "2.x.x", - "hoek": "2.x.x", - "sntp": "1.x.x" - } - }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, - "home-path": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.7.tgz", - "integrity": "sha512-tM1pVa+u3ZqQwIkXcWfhUlY3HWS3TsnKsfi2OHHvnhkX52s9etyktPyy1rQotkr0euWimChDq+QkQuDe8ngUlQ==", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.4", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", - "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==", - "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" - } - }, - "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.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "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 - }, - "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-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-my-ip-valid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz", - "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==", - "dev": true - }, - "is-my-json-valid": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.20.0.tgz", - "integrity": "sha512-XTHBZSIIxNsIsZXg7XB5l8z/OBFosl1Wao4tXLpeC7eKU4Vm/kdop2azkPqULwnfGQjmeDIyey9g7afMMtdWAA==", - "dev": true, - "requires": { - "generate-function": "^2.0.0", - "generate-object-property": "^1.1.0", - "is-my-ip-valid": "^1.0.0", - "jsonpointer": "^4.0.0", - "xtend": "^4.0.0" - }, - "dependencies": { - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - } - } - }, - "is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=", - "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 - }, - "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 - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": 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.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 - }, - "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 - }, - "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" - } - }, - "jsonpointer": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz", - "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=", - "dev": true - }, - "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" - } - }, - "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" - } - }, - "lodash": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz", - "integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=", - "dev": true - }, - "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" - } - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "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-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, - "requires": { - "mime-db": "1.40.0" - } - }, - "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 - } - } - }, - "mkpath": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/mkpath/-/mkpath-0.1.0.tgz", - "integrity": "sha1-dVSm+Nhxg0zJe1RisSLEwSTW3pE=", - "dev": true - }, - "mksnapshot": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/mksnapshot/-/mksnapshot-0.1.0.tgz", - "integrity": "sha1-99CavKgGrYw3gNpwG7GHeNfOaaw=", - "dev": true, - "requires": { - "decompress-zip": "0.1.0", - "fs-extra": "0.18.2", - "request": "2.55.0" - }, - "dependencies": { - "asn1": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz", - "integrity": "sha1-VZvhg3bQik7E2+gId9J4GGObLfc=", - "dev": true - }, - "assert-plus": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.5.tgz", - "integrity": "sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=", - "dev": true - }, - "aws-sign2": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz", - "integrity": "sha1-xXED96F/wDfwLXwuZLYC6iI/fWM=", - "dev": true - }, - "caseless": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.9.0.tgz", - "integrity": "sha1-t7Zc5r8UE4hlOc/VM/CzDv+pz4g=", - "dev": true - }, - "combined-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.7.tgz", - "integrity": "sha1-ATfmV7qlp1QcV6w3rF/AfXO03B8=", - "dev": true, - "requires": { - "delayed-stream": "0.0.5" - } - }, - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "delayed-stream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz", - "integrity": "sha1-1LH0OpPoKW3+AmlPRoC8N6MTxz8=", - "dev": true - }, - "form-data": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-0.2.0.tgz", - "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", - "dev": true, - "requires": { - "async": "~0.9.0", - "combined-stream": "~0.0.4", - "mime-types": "~2.0.3" - } - }, - "har-validator": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-1.8.0.tgz", - "integrity": "sha1-2DhCsOtMQ1lgrrEIoGejqpTA7rI=", - "dev": true, - "requires": { - "bluebird": "^2.9.30", - "chalk": "^1.0.0", - "commander": "^2.8.1", - "is-my-json-valid": "^2.12.0" - } - }, - "http-signature": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-0.10.1.tgz", - "integrity": "sha1-T72sEyVZqoMjEh5UB3nAoBKyfmY=", - "dev": true, - "requires": { - "asn1": "0.1.11", - "assert-plus": "^0.1.5", - "ctype": "0.5.3" - } - }, - "mime-db": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.12.0.tgz", - "integrity": "sha1-PQxjGA9FjrENMlqqN9fFiuMS6dc=", - "dev": true - }, - "mime-types": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.0.14.tgz", - "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", - "dev": true, - "requires": { - "mime-db": "~1.12.0" - } - }, - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=", - "dev": true - }, - "oauth-sign": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.6.0.tgz", - "integrity": "sha1-fb6uRPbKRU4fFoRR1jB0ZzWBPOM=", - "dev": true - }, - "qs": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-2.4.2.tgz", - "integrity": "sha1-9854jld33wtQENp/fE5zujJHD1o=", - "dev": true - }, - "request": { - "version": "2.55.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.55.0.tgz", - "integrity": "sha1-11wc32eddrsQD5v/4f5VG1wk6T0=", - "dev": true, - "requires": { - "aws-sign2": "~0.5.0", - "bl": "~0.9.0", - "caseless": "~0.9.0", - "combined-stream": "~0.0.5", - "forever-agent": "~0.6.0", - "form-data": "~0.2.0", - "har-validator": "^1.4.0", - "hawk": "~2.3.0", - "http-signature": "~0.10.0", - "isstream": "~0.1.1", - "json-stringify-safe": "~5.0.0", - "mime-types": "~2.0.1", - "node-uuid": "~1.4.0", - "oauth-sign": "~0.6.0", - "qs": "~2.4.0", - "stringstream": "~0.0.4", - "tough-cookie": ">=0.12.0", - "tunnel-agent": "~0.4.0" - } - }, - "tunnel-agent": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.4.3.tgz", - "integrity": "sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us=", - "dev": true - } - } - }, - "moniker": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/moniker/-/moniker-0.1.2.tgz", - "integrity": "sha1-hy37pXXc6o+gSlE1sT1fJL7MyX4=" - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "mv": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/mv/-/mv-2.1.1.tgz", - "integrity": "sha1-rmzg1vbV4KT32JN5jQPB6pVZtqI=", - "dev": true, - "requires": { - "mkdirp": "~0.5.1", - "ncp": "~2.0.0", - "rimraf": "~2.4.0" - } - }, - "n-readlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/n-readlines/-/n-readlines-1.0.0.tgz", - "integrity": "sha512-ISDqGcspVu6U3VKqtJZG1uR55SmNNF9uK0EMq1IvNVVZOui6MW6VR0+pIZhqz85ORAGp+4zW+5fJ/SE7bwEibA==" - }, - "natives": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/natives/-/natives-1.1.6.tgz", - "integrity": "sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA==", - "dev": true - }, - "ncp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ncp/-/ncp-2.0.0.tgz", - "integrity": "sha1-GVoh1sRuNh0vsSgbo4uR6d9727M=", - "dev": true - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "nugget": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/nugget/-/nugget-1.6.2.tgz", - "integrity": "sha1-iMpuA7pXBqmRc/XaCQJZPWvK4Qc=", - "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": "^0.4.1", - "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.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "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" - } - }, - "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" - } - }, - "path-exists": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-1.0.0.tgz", - "integrity": "sha1-1aiZjrce83p0w06w2eum6HjuoIE=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "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": "1.2.0", - "resolved": "https://registry.npmjs.org/plist/-/plist-1.2.0.tgz", - "integrity": "sha1-CEtQk93JJQbiWfh0uNmxr7jHlZM=", - "dev": true, - "requires": { - "base64-js": "0.0.8", - "util-deprecate": "1.0.2", - "xmlbuilder": "4.0.0", - "xmldom": "0.1.x" - } - }, - "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.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "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" - } - }, - "psl": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz", - "integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw==", - "dev": true - }, - "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 - }, - "q": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", - "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" - } - }, - "rcedit": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-0.3.0.tgz", - "integrity": "sha1-y17uGF5Ub57aWXwkjJkGGG+pa84=", - "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" - } - }, - "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.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.0", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "rimraf": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.4.5.tgz", - "integrity": "sha1-7nEM5dk6j9uFb7Xqj/Di11k0sto=", - "dev": true, - "requires": { - "glob": "^6.0.1" - } - }, - "run-series": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/run-series/-/run-series-1.1.8.tgz", - "integrity": "sha512-+GztYEPRpIsQoCSraWHDBs9WVy4eVME16zhOtDB4H9J4xN0XRhknnmLOl+4gRgZtu8dpp9N/utSPjKH/xmDzXg==", - "dev": true - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "single-line-log": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-0.4.1.tgz", - "integrity": "sha1-h6VWSfdJ14PsDc2AToFA2Yc8fO4=", - "dev": true - }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.x.x" - } - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "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.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "speedometer": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", - "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "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" - } - }, - "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 - }, - "stringstream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz", - "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==", - "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-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 - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "throttleit": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", - "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", - "dev": true - }, - "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" - } - }, - "touch": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/touch/-/touch-0.0.3.tgz", - "integrity": "sha1-Ua7z1ElXHU8oel2Hyci0kYGg2x0=", - "dev": true, - "requires": { - "nopt": "~1.0.10" - }, - "dependencies": { - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - } - } - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } - } - }, - "traverse": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.3.9.tgz", - "integrity": "sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk=", - "dev": true - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "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 - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "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" - } - }, - "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.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "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" - } - }, - "walk": { - "version": "2.3.14", - "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.14.tgz", - "integrity": "sha512-5skcWAUmySj6hkBdH6B6+3ddMjVQYH5Qy9QGbPmN8kVmLteXk+yVXg+yfk1nbX30EYakahLrr8iPcCxJQSCBeg==", - "requires": { - "foreachasync": "^3.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "xmlbuilder": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.0.0.tgz", - "integrity": "sha1-mLj2UcowqmJANvEn0RzGbce5B6M=", - "dev": true, - "requires": { - "lodash": "^3.5.0" - } - }, - "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" - } - }, - "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/frontend/package.json b/frontend/package.json index 4c7832e8..b48e732f 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,7 +1,7 @@ { "name": "projectGenerator", "productName": "projectGenerator", - "version": "0.0.1", + "version": "0.30.0", "description": "repo for testing a gui using electron for the project generator", "license": "MIT", "main": "index.js", @@ -16,11 +16,11 @@ }, "scripts": { "start": "electron .", - "build": "electron-packager . $npm_package_productName --icon=static/icon/of.icns --out=dist --ignore='dist' --ignore='readme.md' --prune --all --overwrite --version=0.30.0", - "build:osx": "electron-packager . $npm_package_productName --icon=static/icon/of.icns --out=dist --ignore='dist' --ignore='readme.md' --prune --overwrite --version=0.30.0 --platform=darwin --arch=x64", - "build:linux32": "electron-packager . $npm_package_productName --icon=static/icon/of.icns --out=dist --ignore='dist' --ignore='readme.md' --prune --overwrite --version=0.30.0 --platform=linux --arch=ia32", - "build:linux64": "electron-packager . $npm_package_productName --icon=static/icon/of.icns --out=dist --ignore='dist' --ignore='readme.md' --prune --overwrite --version=0.30.0 --platform=linux --arch=x64", - "build:vs": "electron-packager . $npm_package_productName --icon=static/icon/of.icns --out=dist --ignore='dist' --ignore='readme.md' --prune --overwrite --version=0.30.0 --platform=win32 --arch=ia32" + "build": "electron-packager . $npm_package_productName --icon=static/icon/of.icns --out=dist --ignore='dist' --ignore='readme.md' --prune --all --overwrite ", + "build:osx": "electron-packager . $npm_package_productName --icon=static/icon/of.icns --out=dist --ignore='dist' --ignore='readme.md' --prune --overwrite --platform=darwin --arch=x64", + "build:linux32": "electron-packager . $npm_package_productName --icon=static/icon/of.icns --out=dist --ignore='dist' --ignore='readme.md' --prune --overwrite --platform=linux --arch=ia32", + "build:linux64": "electron-packager . $npm_package_productName --icon=static/icon/of.icns --out=dist --ignore='dist' --ignore='readme.md' --prune --overwrite --platform=linux --arch=x64", + "build:vs": "electron-packager . $npm_package_productName --icon=static/icon/of.icns --out=dist --ignore='dist' --ignore='readme.md' --prune --overwrite --platform=win32 --arch=ia32" }, "files": [ "index.html", @@ -31,13 +31,11 @@ "electron-app" ], "dependencies": { - "electron-debug": "^0.1.1", "moniker": "^0.1.2", - "walk": "^2.3.9", "n-readlines": "^1.0.0" }, "devDependencies": { - "electron-packager": "^5.0.0", - "electron-prebuilt": "^0.30.0" + "electron": "^8.0.3", + "electron-packager": "^14.2.1" } } diff --git a/frontend/readme.md b/frontend/readme.md index b62f4e1e..d35c7027 100644 --- a/frontend/readme.md +++ b/frontend/readme.md @@ -36,32 +36,38 @@ cd openFrameworks/apps/projectGenerator cp commandLine/bin/projectGenerator frontend/app ``` -### Install node.js +### Install Node.js & yarn package manager If you don't already have it, you can install node via a number of means: - Directly from the [node.js website](https://nodejs.org/en/download/) - Using a [package manager for your platform](https://nodejs.org/en/download/package-manager/) - - `brew install node` - - `apt-get install nodejs` - - etc. -- Using a node version manager like [nvm](https://github.com/creationix/nvm) + - MacOS `brew install node` + - Debian/Linux `apt-get install nodejs` + - [Windows installer](https://nodejs.org/en/download/) +- Optionally using a node version manager like [nvm](https://github.com/creationix/nvm) - Install nvm for your platform, then: - `nvm install latest` +To install yarn [follow the guide from the project website](https://classic.yarnpkg.com/en/docs/install) +- MacOS `brew install yarn` +- Debian/Ubuntu `sudo apt update && sudo apt install yarn` +- [Windows installer](https://classic.yarnpkg.com/en/docs/install/#windows-stable) + + ### Install frontend dependencies Install the depencies for the electron app: ``` cd openFrameworks/apps/projectGenerator/frontend -npm install +yarn install ``` ### Updating It's always good to update npm before generating the PG. ``` -npm update +yarn update ``` ### Debugging @@ -78,7 +84,7 @@ Moreover, Electron uses Webkit so all the Webkit developper tools are available Run a development build with: ``` -npm start +yarn start ``` ### Release @@ -86,16 +92,16 @@ npm start To build & package the app for OS X, Linux, and Windows, using [electron-packager](https://github.com/maxogden/electron-packager): ``` -npm run build +yarn run build ``` To build a platform-specific package: ``` -npm run build:osx -npm run build:linux32 -npm run build:linux64 -npm run build:vs +yarn run build:osx +yarn run build:linux32 +yarn run build:linux64 +yarn run build:vs ``` This will created a packaged app for that platform(s) specified inside the `dist` folder. diff --git a/frontend/settings.json b/frontend/settings.json deleted file mode 100644 index fe230ab1..00000000 --- a/frontend/settings.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "advancedMode": false, - "defaultOfPath": "../", - "defaultPlatform": "osx", - "defaultRelativeProjectPath": "apps/myApps", - "showConsole": false, - "showDeveloperTools": false, - "useDictionaryNameGenerator": true -} \ No newline at end of file diff --git a/frontend/yarn.lock b/frontend/yarn.lock new file mode 100644 index 00000000..ee20f102 --- /dev/null +++ b/frontend/yarn.lock @@ -0,0 +1,1106 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@electron/get@^1.0.1", "@electron/get@^1.6.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.9.0.tgz#7fa6e61d7ff50fb82a8a41f437af7de3b97aa9a5" + integrity sha512-OBIKtF6ttIJotDXe4KJMUyTBO4xMii+mFjlA8R4CORuD4HvCUaCK3lPjhdTRCvuEv6gzWNbAvd9DNBv0v780lw== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^9.6.0" + progress "^2.0.3" + sanitize-filename "^1.6.2" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^2.0.2" + global-tunnel-ng "^2.7.1" + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@types/events@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" + integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== + +"@types/glob@^7.1.1": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" + integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== + dependencies: + "@types/events" "*" + "@types/minimatch" "*" + "@types/node" "*" + +"@types/minimatch@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" + integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== + +"@types/node@*": + version "13.9.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-13.9.1.tgz#96f606f8cd67fb018847d9b61e93997dabdefc72" + integrity sha512-E6M6N0blf/jiZx8Q3nb0vNaswQeEyn0XlupO+xN6DtJ6r6IT4nXrTry7zhIfYvFCl3/8Cu6WIysmUBKiqV0bqQ== + +"@types/node@^12.0.12": + version "12.12.30" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.30.tgz#3501e6f09b954de9c404671cefdbcc5d9d7c45f6" + integrity sha512-sz9MF/zk6qVr3pAnM0BSQvYIBK44tS75QC5N+VbWSE4DjCV/pJ+UzCW/F+vVnl7TkOPcuwQureKNtSSwjBTaMg== + +asar@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/asar/-/asar-2.1.0.tgz#97c6a570408c4e38a18d4a3fb748a621b5a7844e" + integrity sha512-d2Ovma+bfqNpvBzY/KU8oPY67ZworixTpkjSx0PCXnQi67c2cXmssaTxpFDUM0ttopXoGx/KRxNg/GDThYbXQA== + dependencies: + chromium-pickle-js "^0.2.0" + commander "^2.20.0" + cuint "^0.2.2" + glob "^7.1.3" + minimatch "^3.0.4" + mkdirp "^0.5.1" + tmp-promise "^1.0.5" + optionalDependencies: + "@types/glob" "^7.1.1" + +author-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/author-regex/-/author-regex-1.0.0.tgz#d08885be6b9bbf9439fe087c76287245f0a81450" + integrity sha1-0IiFvmubv5Q5/gh8dihyRfCoFFA= + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +base64-js@^1.2.3: + version "1.3.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" + integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== + +bluebird@^3.1.1, bluebird@^3.5.0: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +boolean@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.0.1.tgz#35ecf2b4a2ee191b0b44986f14eb5f052a5cbb4f" + integrity sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + integrity sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg== + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + integrity sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow== + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + integrity sha1-+PeLdniYiO858gXNY39o5wISKyw= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +chromium-pickle-js@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz#04a106672c18b085ab774d983dfa3ea138f22205" + integrity sha1-BKEGZywYsIWrd02YPfo+oTjyIgU= + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +commander@^2.20.0: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + +compare-version@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/compare-version/-/compare-version-0.1.2.tgz#0162ec2d9351f5ddd59a9202cba935366a725080" + integrity sha1-AWLsLZNR9d3VmpICy6k1NmpyUIA= + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config-chain@^1.1.11: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +core-js@^3.6.4: + version "3.6.4" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.4.tgz#440a83536b458114b9cb2ac1580ba377dc470647" + integrity sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cross-zip@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cross-zip/-/cross-zip-3.0.0.tgz#478136c7ba2df7e5888f7fb57211a4bbd5afafb4" + integrity sha512-cm+l8PJ6WiSQmKZ/x8DGvUm2u/3FX2JFs1AFd18gdHaVhP5Lf4oE6Jrj2Jd05JYSioz5x+nIRVp0zBQuzuCRcQ== + dependencies: + rimraf "^3.0.0" + +cuint@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" + integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= + +debug@2.6.9, debug@^2.2.0, debug@^2.6.8: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +electron-notarize@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/electron-notarize/-/electron-notarize-0.2.1.tgz#759e8006decae19134f82996ed910db26d9192cc" + integrity sha512-oZ6/NhKeXmEKNROiFmRNfytqu3cxqC95sjooG7kBXQVEUSQkZnbiAhxVh5jXngL881G197pbwpeVPJyM7Ikmxw== + dependencies: + debug "^4.1.1" + fs-extra "^8.1.0" + +electron-osx-sign@^0.4.11: + version "0.4.15" + resolved "https://registry.yarnpkg.com/electron-osx-sign/-/electron-osx-sign-0.4.15.tgz#560e190297f0dbf40d4c192e06f160f669c2d015" + integrity sha512-1QtPNpjIji9bGZ0VRFwtJUyU1uHi7q3XUAOG0qFsvAUfs5H0T8hbgUfyg3xvPzmF1ruV8T8pQmQ86vNfLrcRiA== + dependencies: + bluebird "^3.5.0" + compare-version "^0.1.2" + debug "^2.6.8" + isbinaryfile "^3.0.2" + minimist "^1.2.0" + plist "^3.0.1" + +electron-packager@^14.2.1: + version "14.2.1" + resolved "https://registry.yarnpkg.com/electron-packager/-/electron-packager-14.2.1.tgz#e1884eee608455e71e96342717e0527d25a329df" + integrity sha512-g6y3BVrAOz/iavKD+VMFbehrQcwCWuA3CZvVbmmbQuCfegGA1ytwWn0BNIDDrEdbuz31Fti7mnNHhb5L+3Wq9A== + dependencies: + "@electron/get" "^1.6.0" + asar "^2.0.1" + cross-zip "^3.0.0" + debug "^4.0.1" + electron-notarize "^0.2.0" + electron-osx-sign "^0.4.11" + fs-extra "^8.1.0" + galactus "^0.2.1" + get-package-info "^1.0.0" + junk "^3.1.0" + parse-author "^2.0.0" + plist "^3.0.0" + rcedit "^2.0.0" + resolve "^1.1.6" + sanitize-filename "^1.6.0" + semver "^6.0.0" + yargs-parser "^16.0.0" + +electron@^8.0.3: + version "8.1.1" + resolved "https://registry.yarnpkg.com/electron/-/electron-8.1.1.tgz#737a5af03c7b4af60b49dff7bfe1203fcbd5bf89" + integrity sha512-t+5zzFo7VOgckJc9YpImHJkpqeWxwpmEjywWbAa4IT5MULS7h1XU52H9gMswK/y8xc5lBNwxLhJSty/15+gi1A== + dependencies: + "@electron/get" "^1.0.1" + "@types/node" "^12.0.12" + extract-zip "^1.0.3" + +encodeurl@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + +error-ex@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +extract-zip@^1.0.3: + version "1.6.7" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" + integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= + dependencies: + concat-stream "1.6.2" + debug "2.6.9" + mkdirp "0.5.1" + yauzl "2.4.1" + +fd-slicer@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" + integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= + dependencies: + pend "~1.2.0" + +find-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= + dependencies: + locate-path "^2.0.0" + +flora-colossus@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/flora-colossus/-/flora-colossus-1.0.1.tgz#aba198425a8185341e64f9d2a6a96fd9a3cbdb93" + integrity sha512-d+9na7t9FyH8gBJoNDSi28mE4NgQVGGvxQ4aHtFRetjyh5SXjuus+V5EZaxFmFdXVemSOrx0lsgEl/ZMjnOWJA== + dependencies: + debug "^4.1.1" + fs-extra "^7.0.0" + +fs-extra@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" + integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +galactus@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/galactus/-/galactus-0.2.1.tgz#cbed2d20a40c1f5679a35908e2b9415733e78db9" + integrity sha1-y+0tIKQMH1Z5o1kI4rlBVzPnjbk= + dependencies: + debug "^3.1.0" + flora-colossus "^1.0.0" + fs-extra "^4.0.0" + +get-package-info@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-package-info/-/get-package-info-1.0.0.tgz#6432796563e28113cd9474dbbd00052985a4999c" + integrity sha1-ZDJ5ZWPigRPNlHTbvQAFKYWkmZw= + dependencies: + bluebird "^3.1.1" + debug "^2.2.0" + lodash.get "^4.0.0" + read-pkg-up "^2.0.0" + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.1.0.tgz#01203cdc92597f9b909067c3e656cc1f4d3c4dc9" + integrity sha512-EXr1FOzrzTfGeL0gQdeFEvOMm2mzMOglyiOXSTpPC+iAjAKftbr3jpCMWynogwYnM+eSj9sHGc6wjIcDvYiygw== + dependencies: + pump "^3.0.0" + +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + 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-agent@^2.0.2: + version "2.1.8" + resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-2.1.8.tgz#99d153662b2c04cbc1199ffbc081a3aa656ac50f" + integrity sha512-VpBe/rhY6Rw2VDOTszAMNambg+4Qv8j0yiTNDYEXXXxkUNGWLHp8A3ztK4YDBbFNcWF4rgsec6/5gPyryya/+A== + dependencies: + boolean "^3.0.0" + core-js "^3.6.4" + es6-error "^4.1.1" + matcher "^2.1.0" + roarr "^2.15.2" + semver "^7.1.2" + serialize-error "^5.0.0" + +global-tunnel-ng@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f" + integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg== + dependencies: + encodeurl "^1.0.2" + lodash "^4.17.10" + npm-conf "^1.1.3" + tunnel "^0.0.6" + +globalthis@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.1.tgz#40116f5d9c071f9e8fb0037654df1ab3a83b7ef9" + integrity sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw== + dependencies: + define-properties "^1.1.3" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== + +hosted-git-info@^2.1.4: + version "2.8.8" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" + integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isbinaryfile@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" + integrity sha512-8cJBL5tTd2OS0dM4jz07wQd5g0dCCqIhUxPIGtZfa5L6hWlvV5MHTITy/DBAsF+Oe2LS1X3krBUhNwaGUWpWxw== + dependencies: + buffer-alloc "^1.2.0" + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +junk@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/junk/-/junk-3.1.0.tgz#31499098d902b7e98c5d9b9c80f43457a88abfa1" + integrity sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ== + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +lodash.get@^4.0.0: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= + +lodash@^4.17.10: + version "4.17.15" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" + integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +matcher@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-2.1.0.tgz#64e1041c15b993e23b786f93320a7474bf833c28" + integrity sha512-o+nZr+vtJtgPNklyeUKkkH42OsK8WAfdgaJE2FNxcjLPg+5QbeEoT6vRj8Xq/iv18JlQ9cmKsEu0b94ixWf1YQ== + dependencies: + escape-string-regexp "^2.0.0" + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +minimist@^1.2.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mkdirp@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +mkdirp@^0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.3.tgz#5a514b7179259287952881e94410ec5465659f8c" + integrity sha512-P+2gwrFqx8lhew375MQHHeTlY8AuOJSrGf0R5ddkEndUkmwpgUob/vQuBD1V22/Cw1/lJr4x+EjllSezBThzBg== + dependencies: + minimist "^1.2.5" + +moniker@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/moniker/-/moniker-0.1.2.tgz#872dfba575dcea8fa04a5135b13d5f24beccc97e" + integrity sha1-hy37pXXc6o+gSlE1sT1fJL7MyX4= + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +n-readlines@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/n-readlines/-/n-readlines-1.0.0.tgz#c353797f216c253fdfef7e91da4e8b17c29a91a6" + integrity sha512-ISDqGcspVu6U3VKqtJZG1uR55SmNNF9uK0EMq1IvNVVZOui6MW6VR0+pIZhqz85ORAGp+4zW+5fJ/SE7bwEibA== + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + +npm-conf@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" + integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= + dependencies: + p-limit "^1.1.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= + +parse-author@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/parse-author/-/parse-author-2.0.0.tgz#d3460bf1ddd0dfaeed42da754242e65fb684a81f" + integrity sha1-00YL8d3Q367tQtp1QkLmX7aEqB8= + dependencies: + author-regex "^1.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +plist@^3.0.0, plist@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/plist/-/plist-3.0.1.tgz#a9b931d17c304e8912ef0ba3bdd6182baf2e1f8c" + integrity sha512-GpgvHHocGRyQm74b6FWEZZVRroHKE1I0/BTjAmySaohK+cUn+hZpbqXkc3KWgW3gQYkqcQej35FohcT0FRlkRQ== + dependencies: + base64-js "^1.2.3" + xmlbuilder "^9.0.7" + xmldom "0.1.x" + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +rcedit@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/rcedit/-/rcedit-2.1.1.tgz#483b8f42004895cb81abc5c64c7b91645fc6ed53" + integrity sha512-N1JyXxHD2zpqqW4A77RNK1d/M+tyed9JkvL/lnUI5cf4igF/8B9FNLFCtDUhGrk2GWEPxC+RF0WXWWB3I8QC7w== + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^2.2.2: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + 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" + +resolve@^1.1.6, resolve@^1.10.0: + version "1.15.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" + integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== + dependencies: + path-parse "^1.0.6" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +roarr@^2.15.2: + version "2.15.2" + resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.2.tgz#34f6229ae3c8c12167c4ae60f58fe75e79a1e394" + integrity sha512-jmaDhK9CO4YbQAV8zzCnq9vjAqeO489MS5ehZ+rXmFiPFFE6B+S9KYO6prjmLJ5A0zY3QxVlQdrIya7E/azz/Q== + dependencies: + boolean "^3.0.0" + detect-node "^2.0.4" + globalthis "^1.0.1" + json-stringify-safe "^5.0.1" + semver-compare "^1.0.0" + sprintf-js "^1.1.2" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +sanitize-filename@^1.6.0, sanitize-filename@^1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + +"semver@2 || 3 || 4 || 5": + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== + +semver@^6.0.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" + integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== + +semver@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.1.3.tgz#e4345ce73071c53f336445cfc19efb1c311df2a6" + integrity sha512-ekM0zfiA9SCBlsKa2X1hxyxiI4L3B6EbVJkkdgQXnSEEaHlGdvyodMruTiulSRWMMB4NeIuYNMC9rTKTz97GxA== + +serialize-error@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-5.0.0.tgz#a7ebbcdb03a5d71a6ed8461ffe0fc1a1afed62ac" + integrity sha512-/VtpuyzYf82mHYTtI4QKtwHa79vAdU5OQpNPAmE/0UDdlGT0ZxHwC+J6gXkw29wwoVI8fMPsfcVHOwXtUQYYQA== + dependencies: + type-fest "^0.8.0" + +spdx-correct@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" + integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" + integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" + integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== + +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= + +sumchecker@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" + integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== + dependencies: + debug "^4.1.0" + +tmp-promise@^1.0.5: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-1.1.0.tgz#bb924d239029157b9bc1d506a6aa341f8b13e64c" + integrity sha512-8+Ah9aB1IRXCnIOxXZ0uFozV1nMU5xiu7hhFVUSxZ3bYu+psD4TzagCzVbexUCgNNGJnsmNDQlS4nG3mTyoNkw== + dependencies: + bluebird "^3.5.0" + tmp "0.1.0" + +tmp@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.1.0.tgz#ee434a4e22543082e294ba6201dcc6eafefa2877" + integrity sha512-J7Z2K08jbGcdA1kkQpJSqLF6T0tdQqpR2pnSUXsIchbPdTI9v3e85cLW0d6WDhwuAleOV71j2xWs8qMPfK7nKw== + dependencies: + rimraf "^2.6.3" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" + integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys= + dependencies: + utf8-byte-length "^1.0.1" + +tunnel@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" + integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== + +type-fest@^0.8.0: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +utf8-byte-length@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" + integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +xmlbuilder@^9.0.7: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0= + +xmldom@0.1.x: + version "0.1.31" + resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" + integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ== + +yargs-parser@^16.0.0: + version "16.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-16.1.0.tgz#73747d53ae187e7b8dbe333f95714c76ea00ecf1" + integrity sha512-H/V41UNZQPkUMIT5h5hiwg4QKIY1RPvoBV4XcjUbRM8Bk2oKqqyZ0DIEbTFZB0XjbtSPG8SAa/0DxCQmiRgzKg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yauzl@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" + integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= + dependencies: + fd-slicer "~1.0.1" diff --git a/ofxProjectGenerator/src/projects/baseProject.cpp b/ofxProjectGenerator/src/projects/baseProject.cpp index 1d60d662..ccf266ad 100644 --- a/ofxProjectGenerator/src/projects/baseProject.cpp +++ b/ofxProjectGenerator/src/projects/baseProject.cpp @@ -295,6 +295,7 @@ void baseProject::addAddon(std::string addonName){ } void baseProject::addAddon(ofAddon & addon){ + for(int i=0;i<(int)addons.size();i++){ if(addons[i].name==addon.name) return; } @@ -356,6 +357,14 @@ void baseProject::addAddon(ofAddon & addon){ } } +void baseProject::addAddonDefineFlags() { + for (auto & addon : addons ) { + std::string str = "OFXADDON_"+ofToUpper(addon.name); + ofLogVerbose() << "adding preprocessor define: " << str; + addDefine( str ); + } +} + void baseProject::parseAddons(){ ofFile addonsMake(ofFilePath::join(projectDir,"addons.make")); ofBuffer addonsMakeMem; diff --git a/ofxProjectGenerator/src/projects/baseProject.h b/ofxProjectGenerator/src/projects/baseProject.h index c4048b10..484bff5b 100644 --- a/ofxProjectGenerator/src/projects/baseProject.h +++ b/ofxProjectGenerator/src/projects/baseProject.h @@ -4,6 +4,7 @@ #include "ofAddon.h" #include "ofConstants.h" +#include "ofUtils.h" #include "ofFileUtils.h" #include "pugixml.hpp" @@ -35,13 +36,14 @@ class baseProject { } }; - baseProject(std::string _target); + baseProject(std::string _target ); virtual ~baseProject(){} bool create(std::string path, std::string templateName=""); void parseAddons(); void parseConfigMake(); + void addAddonDefineFlags(); bool save(); // this shouldn't be called by anyone. call "create(...), save" etc @@ -83,6 +85,8 @@ class baseProject { std::string templatePath; std::string target; + + protected: void recursiveCopyContents(const ofDirectory & srcDir, ofDirectory & destDir);