wip: See #33 Refactor ryzenadj option management.

This commit is contained in:
Quentin DECAUNES 2019-07-04 18:27:22 +02:00
parent 068aeff384
commit 2a374f7302
5 changed files with 209 additions and 251 deletions

View File

@ -30,136 +30,9 @@
</ul> </ul>
<ul class="uk-switcher uk-margin-remove" uk-height-viewport="expand: true" style="position:relative;"> <ul class="uk-switcher uk-margin-remove" uk-height-viewport="expand: true" style="position:relative;">
<li class="uk-margin-top uk-margin-bottom uk-container" id="controller-tab"> <li class="uk-margin-top uk-margin-bottom uk-container" id="controller-tab"></li>
<h3><label><input class="uk-checkbox uk-margin-small-right" type="checkbox" id="apply_stapm_time_ms"><span class="option-label"></span></label></h3>
<div class="uk-grid-small" uk-grid>
<div class="uk-width-1-6">
<input class="uk-input " type="number" id="stapm_time_ms" repeat="stapm_time_ms_range">
</div>
<div class="uk-width-expand">
<input class="uk-range" type="range" repeat="stapm_time_ms" id="stapm_time_ms_range">
</div>
</div>
<h3><label><input class="uk-checkbox uk-margin-small-right" type="checkbox" id="apply_stapm_limit_w"><span class="option-label"></span></label></h3>
<div class="uk-grid-small" uk-grid>
<div class="uk-width-1-6">
<input class="uk-input" type="number" id="stapm_limit_w" repeat="stapm_limit_w_range">
</div>
<div class="uk-width-expand">
<input class="uk-range" type="range" repeat="stapm_limit_w" id="stapm_limit_w_range">
</div>
</div>
<h3><label><input class="uk-checkbox uk-margin-small-right" type="checkbox" id="apply_ppt_fast_limit_w"><span class="option-label"></span></label></h3>
<div class="uk-grid-small" uk-grid>
<div class="uk-width-1-6">
<input class="uk-input" type="number" id="ppt_fast_limit_w" repeat="ppt_fast_limit_w_range">
</div>
<div class="uk-width-expand">
<input class="uk-range" type="range" repeat="ppt_fast_limit_w" id="ppt_fast_limit_w_range">
</div>
</div>
<h3><label><input class="uk-checkbox uk-margin-small-right" type="checkbox" id="apply_ppt_slow_limit_w"><span class="option-label"></span></label></h3>
<div class="uk-grid-small" uk-grid>
<div class="uk-width-1-6">
<input class="uk-input" type="number" id="ppt_slow_limit_w" repeat="ppt_slow_limit_w_range">
</div>
<div class="uk-width-expand">
<input class="uk-range" type="range" repeat="ppt_slow_limit_w" id="ppt_slow_limit_w_range">
</div>
</div>
<h3><label><input class="uk-checkbox uk-margin-small-right" type="checkbox" id="apply_temperature_limit_c"><span class="option-label"></span></label></h3>
<div class="uk-grid-small" uk-grid>
<div class="uk-width-1-6">
<input class="uk-input" type="number" id="temperature_limit_c" repeat="temperature_limit_c_range">
</div>
<div class="uk-width-expand">
<input class="uk-range" type="range" repeat="temperature_limit_c" id="temperature_limit_c_range">
</div>
</div>
<h3><label><input class="uk-checkbox uk-margin-small-right" type="checkbox" id="apply_vrm_current_m_a"><span class="option-label"></span></label></h3>
<div class="uk-grid-small" uk-grid>
<div class="uk-width-1-6">
<input class="uk-input" type="number" id="vrm_current_m_a" repeat="vrm_current_m_a_range">
</div>
<div class="uk-width-expand">
<input class="uk-range" type="range" repeat="vrm_current_m_a" id="vrm_current_m_a_range">
</div>
</div>
<h3><label><input class="uk-checkbox uk-margin-small-right" type="checkbox" id="apply_min_fclk_frequency"><span class="option-label"></span></label></h3>
<div class="uk-grid-small" uk-grid>
<div class="uk-width-1-6">
<input class="uk-input" type="number" step="10" id="min_fclk_frequency" repeat="min_fclk_frequency_range">
</div>
<div class="uk-width-expand">
<input class="uk-range" type="range" step="10" repeat="min_fclk_frequency" id="min_fclk_frequency_range">
</div>
</div>
<h3><label><input class="uk-checkbox uk-margin-small-right" type="checkbox" id="apply_max_fclk_frequency"><span class="option-label"></span></label></h3>
<div class="uk-grid-small" uk-grid>
<div class="uk-width-1-6">
<input class="uk-input" type="number" step="10" id="max_fclk_frequency" repeat="max_fclk_frequency_range">
</div>
<div class="uk-width-expand">
<input class="uk-range" type="range" step="10" repeat="max_fclk_frequency" id="max_fclk_frequency_range">
</div>
</div>
<p class="uk-margin">
<button class="uk-button uk-button-primary" onClick="applyRyzenSettings()">Apply</button>
<button class="uk-button uk-button-secondary" uk-toggle="target: #modal-new-preset">Save to preset</button>
</p>
</li>
<li class="uk-margin-top uk-margin-bottom uk-container" id="experimental-tab"> <li class="uk-margin-top uk-margin-bottom uk-container" id="experimental-tab"></li>
<h3><label><input class="uk-checkbox uk-margin-small-right" type="checkbox" id="apply_psi0_current_limit"><span class="option-label"></span></label></h3>
<div class="uk-grid-small" uk-grid>
<div class="uk-width-1-6">
<input class="uk-input" type="number" id="psi0_current_limit" repeat="psi0_current_limit_range">
</div>
<div class="uk-width-expand">
<input class="uk-range" type="range" repeat="psi0_current_limit" id="psi0_current_limit_range">
</div>
</div>
<h3><label><input class="uk-checkbox uk-margin-small-right" type="checkbox" id="apply_min_gfxclk_frequency"><span class="option-label"></span></label></h3>
<div class="uk-grid-small" uk-grid>
<div class="uk-width-1-6">
<input class="uk-input" type="number" id="min_gfxclk_frequency" repeat="min_gfxclk_frequency_range">
</div>
<div class="uk-width-expand">
<input class="uk-range" type="range" repeat="min_gfxclk_frequency" id="min_gfxclk_frequency_range">
</div>
</div>
<h3><label><input class="uk-checkbox uk-margin-small-right" type="checkbox" id="apply_max_gfxclk_frequency"><span class="option-label"></span></label></h3>
<div class="uk-grid-small" uk-grid>
<div class="uk-width-1-6">
<input class="uk-input" type="number" id="max_gfxclk_frequency" repeat="max_gfxclk_frequency_range">
</div>
<div class="uk-width-expand">
<input class="uk-range" type="range" repeat="max_gfxclk_frequency" id="max_gfxclk_frequency_range">
</div>
</div>
<h3><label><input class="uk-checkbox uk-margin-small-right" type="checkbox" id="apply_min_socclk_frequency"><span class="option-label"></span></label></h3>
<div class="uk-grid-small" uk-grid>
<div class="uk-width-1-6">
<input class="uk-input" type="number" step="100" id="min_socclk_frequency" repeat="min_socclk_frequency_range">
</div>
<div class="uk-width-expand">
<input class="uk-range" type="range" step="100" repeat="min_socclk_frequency" id="min_socclk_frequency_range">
</div>
</div>
<h3><label><input class="uk-checkbox uk-margin-small-right" type="checkbox" id="apply_max_socclk_frequency"><span class="option-label"></span></label></h3>
<div class="uk-grid-small" uk-grid>
<div class="uk-width-1-6">
<input class="uk-input" type="number" step="100" id="max_socclk_frequency" repeat="max_socclk_frequency_range">
</div>
<div class="uk-width-expand">
<input class="uk-range" type="range" step="100" repeat="max_socclk_frequency" id="max_socclk_frequency_range">
</div>
</div>
<p class="uk-margin">
<button class="uk-button uk-button-primary" onClick="applyRyzenSettings()">Apply</button>
<button class="uk-button uk-button-secondary" uk-toggle="target: #modal-new-preset">Save to preset</button>
</p>
</li>
<li class="uk-margin-top uk-margin-bottom uk-container"> <li class="uk-margin-top uk-margin-bottom uk-container">
<div id="presetTab"></div> <div id="presetTab"></div>

View File

@ -3,8 +3,8 @@ ready(function(){
const fixPath = require('fix-path'); const fixPath = require('fix-path');
document.isStarting = true; document.isStarting = true;
fixPath(); fixPath();
displayOptions();
preFillSettings(); preFillSettings();
displayOptionData();
loadLatestUsedSettings(); loadLatestUsedSettings();
registerRepeaterForAllInput(); registerRepeaterForAllInput();
registerEventListenerForSettingsInput(); registerEventListenerForSettingsInput();
@ -39,41 +39,32 @@ function applyRyzenSettings() {
const child = require('child_process').execFile; const child = require('child_process').execFile;
const executablePath = getRyzenAdjExecutablePath(); const executablePath = getRyzenAdjExecutablePath();
const options_data = require('./js/options_data.json');
const ryzenAdjConvert = {
"toHex": function (value) { return '0x' + decimalToHexString(value * 1000); },
"toThousand": function (value) { return value * 1000; },
"roundTen": function (value) { return parseInt(value / 10) * 10; },
};
// Create a string to be used for CLI.
var parameters = []; var parameters = [];
for (const option in settings) { for (const option in settings) {
if (settings.hasOwnProperty(option)) { if (settings.hasOwnProperty(option)) {
let value = settings[option]; let value = settings[option];
let option_name = false;
switch (option) { try {
case "--stapm-limit=": option_name = Object.keys(options_data).filter(function(cur_option_name){
case "--fast-limit=": return options_data[cur_option_name].ryzenadj_arg === option;
case "--slow-limit=": })[0];
case "--stapm-time=": } catch (error) {
value = value * 1000; notification('danger', `Unknown option "${option}".`);
break; appendLog(`applyRyzenSettings(): ${error}`);
}
case "--tctl-temp=": if (options_data[option_name].ryzenadj_value_convert) {
case "--max-fclk-frequency=": value = ryzenAdjConvert[
case "--min-fclk-frequency=": options_data[option_name].ryzenadj_value_convert
value = value; ](value);
break;
case "--max-gfxclk=":
case "--min-gfxclk=":
case "--max-socclk-frequency=":
case "--min-socclk-frequency=":
value = parseInt(value / 10) * 10;
break;
case "--psi0-current=":
case "--vrmmax-current=":
value = '0x' + decimalToHexString(value * 1000);
break;
default:
break;
} }
parameters.push('' + option + value); parameters.push('' + option + value);
} }
} }

View File

@ -1,3 +1,74 @@
/**
* Will load options_data.json and display them into index.html.
*/
function displayOptions(){
const options_data = require('./js/options_data.json');
var tabs = {};
for (const option_name in options_data) {
if (!options_data.hasOwnProperty(option_name)) {
appendLog(`Error while loading ${option_name} option.`);
continue;
}
let option_data = options_data[option_name];
if (!option_data.hasOwnProperty('tab')) {
appendLog(`Error while loading ${option_name} tab property.`);
continue;
}
let option_tab = option_data['tab'];
let tab = document.querySelector(`#${option_tab}-tab`);
if (!tab) {
appendLog(`Error while loading ${option_tab} tab.`);
continue;
}
tabs[option_tab] = true;
tab.innerHTML += `
<h3 id="${option_name}-label" uk-tooltip="${option_data.description}"><label>
<input class="uk-checkbox uk-margin-small-right" type="checkbox" id="apply_${option_name}"/>
<span class="option-label">${option_data.label}</span>
</label></h3>
<div class="uk-grid-small" uk-grid>
<div class="uk-width-1-6">
<input
class="uk-input"
type="number"
id="${option_name}"
repeat="${option_name}_range"
min="${option_data.min}"
max="${option_data.max}"
step="${option_data.step}"
value="${option_data.default}"
/>
</div>
<div class="uk-width-expand">
<input
class="uk-range"
type="range"
repeat="${option_name}"
id="${option_name}_range"
min="${option_data.min}"
max="${option_data.max}"
step="${option_data.step}"
value="${option_data.default}"
/>
</div>
</div>
`;
UIkit.tooltip(document.querySelector(`#${option_name}-label`));
}
for (const tab_name in tabs) {
if (tabs.hasOwnProperty(tab_name)) {
const tab = document.querySelector(`#${tab_name}-tab`);
tab.innerHTML += `
<p class="uk-margin">
<button class="uk-button uk-button-primary" onClick="applyRyzenSettings()">Apply</button>
<button class="uk-button uk-button-secondary" uk-toggle="target: #modal-new-preset">Save to preset</button>
</p>
`;
}
}
}
/** /**
* Will create a nodes from an html string. * Will create a nodes from an html string.
* @param {string} str An html string * @param {string} str An html string
@ -350,35 +421,6 @@ function reApplyPeriodically(seconds) {
document.reapplyLoop = setInterval(applyRyzenSettings, seconds * 1000); document.reapplyLoop = setInterval(applyRyzenSettings, seconds * 1000);
} }
/**
* Display tooltip on each options.
*/
function displayOptionData() {
const options_data = require('./js/options_data.json');
for (const option in options_data) {
if (options_data.hasOwnProperty(option)) {
const label = options_data[option].label;
const description = options_data[option].description;
const min = options_data[option].min;
const max = options_data[option].max;
const default_value = options_data[option].default;
const title_container = document.getElementById(option).parentElement.parentElement.previousElementSibling;
const title = title_container.getElementsByClassName('option-label');
const inputs = title_container.nextElementSibling.getElementsByTagName('input');
title_container.setAttribute('uk-tooltip', description);
UIkit.tooltip(title_container);
title[0].innerHTML = label;
for (const input of inputs) {
input.setAttribute('min', min);
input.setAttribute('max', max);
input.value = default_value;
}
}
}
}
/** /**
* Will recreate shortcut on launch ... no other solution for now :( * Will recreate shortcut on launch ... no other solution for now :(
*/ */
@ -412,28 +454,15 @@ function recreateShortcut() {
*/ */
function getCurrentSettings(keyType) { function getCurrentSettings(keyType) {
if (keyType === "ryzenadjArgs") { if (keyType === "ryzenadjArgs") {
const optionToId = {
"--psi0-current=": 'psi0_current_limit',
"--stapm-time=": 'stapm_time_ms',
"--stapm-limit=": 'stapm_limit_w',
"--fast-limit=": 'ppt_fast_limit_w',
"--slow-limit=": 'ppt_slow_limit_w',
"--tctl-temp=": 'temperature_limit_c',
"--vrmmax-current=": 'vrm_current_m_a',
"--min-fclk-frequency=": 'min_fclk_frequency',
"--max-fclk-frequency=": 'max_fclk_frequency',
"--min-gfxclk=": 'min_gfxclk_frequency',
"--max-gfxclk=": 'max_gfxclk_frequency',
"--min-socclk-frequency=": 'min_socclk_frequency',
"--max-socclk-frequency=": 'max_socclk_frequency',
};
const options_data = require('./js/options_data.json');
var settingsToBeUsed = {}; var settingsToBeUsed = {};
for (const option in optionToId) { for (const elementId in options_data) {
if (optionToId.hasOwnProperty(option)) { if (options_data.hasOwnProperty(elementId)) {
const elementId = optionToId[option]; const optionData = options_data[elementId];
const ryzenadjArg = optionData.ryzenadj_arg;
if (document.getElementById('apply_' + elementId).checked) { if (document.getElementById('apply_' + elementId).checked) {
settingsToBeUsed[option] = document.getElementById(elementId).value; settingsToBeUsed[ryzenadjArg] = document.getElementById(elementId).value;
} }
} }
} }

View File

@ -1,93 +1,145 @@
{ {
"psi0_current_limit": {
"description": "The limit of current we let the motherboard deliver to the PSI0.",
"label": "PSI0 Current Limit (mA)",
"min": "20",
"max": "100",
"default": "20"
},
"stapm_time_ms": { "stapm_time_ms": {
"description": "Skin Temperature Aware Power Management. This will define the boost period to be used.", "description": "Skin Temperature Aware Power Management. This will define the boost period to be used.",
"label": "STAPM Constant Time (Sec.)", "label": "STAPM Constant Time (Sec.)",
"tab": "controller",
"min": "1", "min": "1",
"max": "3600", "max": "3600",
"default": "900" "step": "1",
"default": "900",
"ryzenadj_arg": "--stapm-time=",
"ryzenadj_value_convert": "toThousand"
}, },
"stapm_limit_w": { "stapm_limit_w": {
"description": "Skin Temperature Aware Power Management. This will define the socket power package limit which is used to manage the device boost period.", "description": "Skin Temperature Aware Power Management. This will define the socket power package limit which is used to manage the device boost period.",
"label": "STAPM Limit (W)", "label": "STAPM Limit (W)",
"tab": "controller",
"min": "5", "min": "5",
"max": "60", "max": "60",
"default": "20" "step": "1",
"default": "20",
"ryzenadj_arg": "--stapm-limit=",
"ryzenadj_value_convert": "toThousand"
}, },
"ppt_fast_limit_w": { "ppt_fast_limit_w": {
"description": "The amount of power the CPU can draw while boost levels on.", "description": "The amount of power the CPU can draw while boost levels on.",
"label": "PPT Fast Limit (W)", "label": "PPT Fast Limit (W)",
"tab": "controller",
"min": "5", "min": "5",
"max": "60", "max": "60",
"default": "25" "step": "1",
"default": "25",
"ryzenadj_arg": "--fast-limit=",
"ryzenadj_value_convert": "toThousand"
}, },
"ppt_slow_limit_w": { "ppt_slow_limit_w": {
"description": "The amount of power the CPU can draw while boost levels off.", "description": "The amount of power the CPU can draw while boost levels off.",
"label": "PPT Slow Limit (W)", "label": "PPT Slow Limit (W)",
"tab": "controller",
"min": "5", "min": "5",
"max": "60", "max": "60",
"default": "10" "step": "1",
"default": "10",
"ryzenadj_arg": "--slow-limit=",
"ryzenadj_value_convert": "toThousand"
}, },
"temperature_limit_c": { "temperature_limit_c": {
"description": "The temperature the CPU can reach before boost levels off.", "description": "The temperature the CPU can reach before boost levels off.",
"label": "Temperature Limit (°C)", "label": "Temperature Limit (°C)",
"tab": "controller",
"min": "50", "min": "50",
"max": "100", "max": "100",
"default": "75" "step": "1",
"default": "75",
"ryzenadj_arg": "--tctl-temp=",
"ryzenadj_value_convert": false
}, },
"vrm_current_m_a": { "vrm_current_m_a": {
"description": "The limit of current we let the motherboard deliver to the CPU.", "description": "The limit of current we let the motherboard deliver to the CPU.",
"label": "VRM Current (A)", "label": "VRM Current (A)",
"tab": "controller",
"min": "20", "min": "20",
"max": "75", "max": "75",
"default": "30" "step": "1",
}, "default": "30",
"max_fclk_frequency": { "ryzenadj_arg": "--vrmmax-current=",
"description": "Fabric is AMD's marketing term for the bus connection that connects processor dies (GPU/CPU). This define the bus's max. clock limit.", "ryzenadj_value_convert": "toHex"
"label": "Maximum transmission frequency (Mhz)",
"min": "800",
"max": "1600",
"default": "1200"
}, },
"min_fclk_frequency": { "min_fclk_frequency": {
"description": "Fabric is AMD's marketing term for the bus connection that connects processor dies (GPU/CPU). This define the bus's min. clock limit.", "description": "Fabric is AMD's marketing term for the bus connection that connects processor dies (GPU/CPU). This define the bus's min. clock limit.",
"label": "Minimum transmission frequency (Mhz)", "label": "Minimum transmission frequency (Mhz)",
"tab": "controller",
"min": "800", "min": "800",
"max": "1600", "max": "1600",
"default": "800" "step": "1",
"default": "800",
"ryzenadj_arg": "--min-fclk-frequency=",
"ryzenadj_value_convert": false
}, },
"max_gfxclk_frequency": { "max_fclk_frequency": {
"description": "The maximum clock speed the integrated GPU is allowed to run at.", "description": "Fabric is AMD's marketing term for the bus connection that connects processor dies (GPU/CPU). This define the bus's max. clock limit.",
"label": "Maximum GFX Clock Frequency (Mhz)", "label": "Maximum transmission frequency (Mhz)",
"min": "400", "tab": "controller",
"max": "1300", "min": "800",
"default": "1100" "max": "1600",
"step": "1",
"default": "1200",
"ryzenadj_arg": "--max-fclk-frequency=",
"ryzenadj_value_convert": false
},
"psi0_current_limit": {
"description": "The limit of current we let the motherboard deliver to the PSI0.",
"label": "PSI0 Current Limit (mA)",
"tab": "experimental",
"min": "20",
"max": "100",
"step": "1",
"default": "20",
"ryzenadj_arg": "--psi0-current=",
"ryzenadj_value_convert": "toHex"
}, },
"min_gfxclk_frequency": { "min_gfxclk_frequency": {
"description": "The minimum clock speed the integrated GPU is allowed to run at.", "description": "The minimum clock speed the integrated GPU is allowed to run at.",
"label": "Minimum GFX Clock Frequency (Mhz)", "label": "Minimum GFX Clock Frequency (Mhz)",
"tab": "experimental",
"min": "400", "min": "400",
"max": "1300", "max": "1300",
"default": "400" "step": "1",
"default": "400",
"ryzenadj_arg": "--min-gfxclk=",
"ryzenadj_value_convert": "roundTen"
}, },
"max_socclk_frequency": { "max_gfxclk_frequency": {
"description": "The maximum clock speed the CPU is allowed to run at.", "description": "The maximum clock speed the integrated GPU is allowed to run at.",
"label": "Maximum SOC Clock Frequency (Mhz)", "label": "Maximum GFX Clock Frequency (Mhz)",
"min": "200", "tab": "experimental",
"max": "750", "min": "400",
"default": "600" "max": "1300",
"step": "1",
"default": "1100",
"ryzenadj_arg": "--max-gfxclk=",
"ryzenadj_value_convert": "roundTen"
}, },
"min_socclk_frequency": { "min_socclk_frequency": {
"description": "The minimum clock speed the CPU is allowed to run at.", "description": "The minimum clock speed the CPU is allowed to run at.",
"label": "Minimum SOC Clock Frequency (Mhz)", "label": "Minimum SOC Clock Frequency (Mhz)",
"tab": "experimental",
"min": "200", "min": "200",
"max": "750", "max": "750",
"default": "200" "step": "1",
"default": "200",
"ryzenadj_arg": "--min-socclk-frequency=",
"ryzenadj_value_convert": "roundTen"
},
"max_socclk_frequency": {
"description": "The maximum clock speed the CPU is allowed to run at.",
"label": "Maximum SOC Clock Frequency (Mhz)",
"tab": "experimental",
"min": "200",
"max": "750",
"step": "1",
"default": "600",
"ryzenadj_arg": "--max-socclk-frequency=",
"ryzenadj_value_convert": "roundTen"
} }
} }

29
package-lock.json generated
View File

@ -35,7 +35,8 @@
"abbrev": { "abbrev": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"optional": true
}, },
"ajv": { "ajv": {
"version": "6.10.0", "version": "6.10.0",
@ -249,7 +250,8 @@
"ansi-regex": { "ansi-regex": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"optional": true
}, },
"is-fullwidth-code-point": { "is-fullwidth-code-point": {
"version": "2.0.0", "version": "2.0.0",
@ -272,6 +274,7 @@
"version": "5.2.0", "version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"optional": true,
"requires": { "requires": {
"ansi-regex": "^4.1.0" "ansi-regex": "^4.1.0"
} }
@ -864,7 +867,8 @@
"emoji-regex": { "emoji-regex": {
"version": "7.0.3", "version": "7.0.3",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
"integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
"optional": true
}, },
"end-of-stream": { "end-of-stream": {
"version": "1.4.1", "version": "1.4.1",
@ -1343,7 +1347,8 @@
"is-promise": { "is-promise": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz",
"integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=" "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=",
"optional": true
}, },
"is-stream": { "is-stream": {
"version": "1.1.0", "version": "1.1.0",
@ -1428,6 +1433,7 @@
"version": "1.3.1", "version": "1.3.1",
"resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz",
"integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=",
"optional": true,
"requires": { "requires": {
"graceful-fs": "^4.1.9" "graceful-fs": "^4.1.9"
} }
@ -1467,12 +1473,14 @@
"lodash": { "lodash": {
"version": "4.17.11", "version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
"integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
"optional": true
}, },
"lodash._reinterpolate": { "lodash._reinterpolate": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
"integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=" "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=",
"optional": true
}, },
"lodash.get": { "lodash.get": {
"version": "4.4.2", "version": "4.4.2",
@ -2102,6 +2110,7 @@
"version": "2.6.3", "version": "2.6.3",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
"integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
"optional": true,
"requires": { "requires": {
"glob": "^7.1.3" "glob": "^7.1.3"
} }
@ -2140,6 +2149,7 @@
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
"integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
"optional": true,
"requires": { "requires": {
"shebang-regex": "^1.0.0" "shebang-regex": "^1.0.0"
} }
@ -2147,7 +2157,8 @@
"shebang-regex": { "shebang-regex": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
"integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
"optional": true
}, },
"shell-env": { "shell-env": {
"version": "0.3.0", "version": "0.3.0",
@ -2570,7 +2581,8 @@
"ansi-regex": { "ansi-regex": {
"version": "4.1.0", "version": "4.1.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"optional": true
}, },
"is-fullwidth-code-point": { "is-fullwidth-code-point": {
"version": "2.0.0", "version": "2.0.0",
@ -2593,6 +2605,7 @@
"version": "5.2.0", "version": "5.2.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
"integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"optional": true,
"requires": { "requires": {
"ansi-regex": "^4.1.0" "ansi-regex": "^4.1.0"
} }