An easy-to-use platform for EEG experimentation in the classroom
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge pull request #66 from makebrainwaves/readme-update

Add event title, expected key press, and correctness to behavioural data

authored by

Dano Morrison and committed by
GitHub
261c0914 993d0e3d

+182 -169
+1
.eslintrc
··· 24 24 "no-use-before-define": "off", 25 25 "no-multi-assign": "off", 26 26 "no-plusplus": "off", 27 + "no-param-reassign": "warn", 27 28 "promise/param-names": "error", 28 29 "promise/always-return": "error", 29 30 "promise/catch-or-return": "error",
-1
app/epics/jupyterEpics.js
··· 391 391 action$.ofType(LOAD_ERP).pipe( 392 392 pluck('payload'), 393 393 map(channelName => { 394 - console.log(channelName); 395 394 if (MUSE_CHANNELS.includes(channelName)) { 396 395 return MUSE_CHANNELS.indexOf(channelName); 397 396 } else if (EMOTIV_CHANNELS.includes(channelName)) {
+6 -6
app/package-lock.json
··· 378 378 }, 379 379 "debug": { 380 380 "version": "2.2.0", 381 - "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", 381 + "resolved": "http://registry.npmjs.org/debug/-/debug-2.2.0.tgz", 382 382 "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", 383 383 "requires": { 384 384 "ms": "0.7.1" ··· 838 838 }, 839 839 "minimist": { 840 840 "version": "0.0.8", 841 - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 841 + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 842 842 "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 843 843 }, 844 844 "minipass": { ··· 860 860 }, 861 861 "mkdirp": { 862 862 "version": "0.5.1", 863 - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 863 + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 864 864 "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 865 865 "requires": { 866 866 "minimist": "0.0.8" ··· 1144 1144 "dependencies": { 1145 1145 "minimist": { 1146 1146 "version": "1.2.0", 1147 - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1147 + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1148 1148 "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 1149 1149 } 1150 1150 } ··· 1188 1188 "dependencies": { 1189 1189 "minimist": { 1190 1190 "version": "1.2.0", 1191 - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1191 + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1192 1192 "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" 1193 1193 } 1194 1194 } 1195 1195 }, 1196 1196 "readable-stream": { 1197 1197 "version": "2.3.6", 1198 - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 1198 + "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", 1199 1199 "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", 1200 1200 "requires": { 1201 1201 "core-util-is": "1.0.2",
+45 -32
app/utils/jspsych/functions.js
··· 1 - import { isNil } from "lodash"; 2 - import { jsPsych } from "jspsych-react"; 3 - import * as path from "path"; 4 - import { readdirSync } from "fs"; 5 - import { EXPERIMENTS } from "../../constants/constants"; 6 - import { buildOddballTimeline } from "./timelines/oddball"; 7 - import { buildN170Timeline } from "./timelines/n170"; 8 - import { buildSSVEPTimeline } from "./timelines/ssvep"; 1 + import { isNil } from 'lodash'; 2 + import { jsPsych } from 'jspsych-react'; 3 + import * as path from 'path'; 4 + import { readdirSync } from 'fs'; 5 + import { EXPERIMENTS } from '../../constants/constants'; 6 + import { buildOddballTimeline } from './timelines/oddball'; 7 + import { buildN170Timeline } from './timelines/n170'; 8 + import { buildSSVEPTimeline } from './timelines/ssvep'; 9 9 import { 10 10 MainTimeline, 11 11 Trial, 12 12 ExperimentParameters 13 - } from "../../constants/interfaces"; 13 + } from '../../constants/interfaces'; 14 14 15 15 // loads a normalized timeline for the default experiments with specific callback fns 16 16 export const loadTimeline = (type: EXPERIMENTS) => { ··· 53 53 }, 54 54 { 55 55 ...timeline.timeline[1], 56 - stimulus: jsPsych.timelineVariable("stimulusVar"), 56 + stimulus: jsPsych.timelineVariable('stimulusVar'), 57 57 type: params.pluginName, 58 58 trial_duration: params.trialDuration, 59 - choices: [params.stimulus1.response, params.stimulus2.response] 59 + choices: [params.stimulus1.response, params.stimulus2.response], 60 + event_title: jsPsych.timelineVariable('eventTitleVar'), 61 + correct_response: jsPsych.timelineVariable('responseVar') 60 62 } 61 63 ], 62 64 sample: { ··· 66 68 timeline_variables: readdirSync(params.stimulus1.dir) 67 69 .map(filename => ({ 68 70 stimulusVar: path.join(params.stimulus1.dir, filename), 69 - eventTypeVar: params.stimulus1.type 71 + eventTypeVar: params.stimulus1.type, 72 + eventTitleVar: params.stimulus1.title, 73 + responseVar: params.stimulus1.response 70 74 })) 71 75 .concat( 72 76 readdirSync(params.stimulus2.dir).map(filename => ({ 73 77 stimulusVar: path.join(params.stimulus2.dir, filename), 74 - eventTypeVar: params.stimulus2.type 78 + eventTypeVar: params.stimulus2.type, 79 + eventTitleVar: params.stimulus2.title, 80 + responseVar: params.stimulus2.response 75 81 })) 76 82 ) 77 83 } ··· 114 120 } 115 121 if (!isNil(jspsychObject.timeline)) { 116 122 const timelineWithCallback = jspsychObject.timeline.map(trial => { 117 - if (trial.id === "trial") { 123 + if (trial.id === 'trial') { 118 124 return { 119 125 ...trial, 120 126 on_start: () => 121 127 eventCallback( 122 - jsPsych.timelineVariable("eventTypeVar")(), 128 + jsPsych.timelineVariable('eventTypeVar')(), 123 129 new Date().getTime() 124 130 ), 125 - on_finish: showProgessBar 126 - ? () => { 127 - jsPsych.setProgressBar( 128 - jsPsych.progress().current_trial_global / 129 - 2 / 130 - jspsychObject.sample.size 131 - ); 132 - } 133 - : null 131 + on_finish: (data: any) => { 132 + data.key_press = jsPsych.pluginAPI.convertKeyCodeToKeyCharacter( 133 + data.key_press 134 + ); 135 + data.expected_key_press = trial.correct_response(); 136 + data.event_title = trial.event_title(); 137 + if (data.key_press === data.expected_key_press) { 138 + data.correct = true; 139 + } else { 140 + data.correct = false; 141 + } 142 + if (showProgessBar) { 143 + jsPsych.setProgressBar( 144 + jsPsych.progress().current_trial_global / 145 + 2 / 146 + jspsychObject.sample.size 147 + ); 148 + } 149 + } 134 150 }; 135 151 } 136 152 return trial; ··· 140 156 return jspsychObject; 141 157 }); 142 158 143 - // Gets the last set of behavioural (key press) data stored in jsPsych 159 + // Gets the last set of behavioral (key press) data stored in jsPsych 144 160 export const getBehaviouralData = () => { 145 161 const rawData = jsPsych.data.get().values(); 146 162 ··· 149 165 rawData[index] = { 150 166 ...rawData[index], 151 167 reaction_time: rawData[index].rt, // rename rt to reaction_time 152 - key_press: jsPsych.pluginAPI.convertKeyCodeToKeyCharacter( 153 - rawData[index].key_press 154 - ), // change keycodes to key strings 155 168 trial_index: rawData[index].trial_index / 2 // Remove fixations from trial index 156 169 }; 157 170 } ··· 160 173 161 174 return jsPsych.data 162 175 .get() 163 - .filterCustom(trial => !trial.stimulus.includes("fixation")) // Remove inter trial data 164 - .ignore("rt") 165 - .ignore("internal_node_id") 166 - .ignore("trial_type") 176 + .filterCustom(trial => !trial.stimulus.includes('fixation')) // Remove inter trial data 177 + .ignore('rt') 178 + .ignore('internal_node_id') 179 + .ignore('trial_type') 167 180 .csv(); 168 181 }; 169 182
+130 -130
package-lock.json
··· 3802 3802 "requires": { 3803 3803 "anymatch": "1.3.2", 3804 3804 "async-each": "1.0.1", 3805 - "fsevents": "1.2.4", 3805 + "fsevents": "1.2.7", 3806 3806 "glob-parent": "2.0.0", 3807 3807 "inherits": "2.0.3", 3808 3808 "is-binary-path": "1.0.1", ··· 7880 7880 }, 7881 7881 "fbjs": { 7882 7882 "version": "0.6.1", 7883 - "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.6.1.tgz", 7883 + "resolved": "http://registry.npmjs.org/fbjs/-/fbjs-0.6.1.tgz", 7884 7884 "integrity": "sha1-lja3cF9bqWhNRLcveDISVK/IYPc=", 7885 7885 "requires": { 7886 7886 "core-js": "1.2.7", ··· 8770 8770 "dev": true 8771 8771 }, 8772 8772 "fsevents": { 8773 - "version": "1.2.4", 8774 - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", 8775 - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", 8773 + "version": "1.2.7", 8774 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.7.tgz", 8775 + "integrity": "sha512-Pxm6sI2MeBD7RdD12RYsqaP0nMiwx8eZBXCa6z2L+mRHm2DYrOYwihmhjpkdjUHwQhslWQjRpEgNq4XvBmaAuw==", 8776 8776 "dev": true, 8777 8777 "optional": true, 8778 8778 "requires": { 8779 8779 "nan": "2.11.0", 8780 - "node-pre-gyp": "0.10.0" 8780 + "node-pre-gyp": "0.10.3" 8781 8781 }, 8782 8782 "dependencies": { 8783 8783 "abbrev": { ··· 8798 8798 "optional": true 8799 8799 }, 8800 8800 "are-we-there-yet": { 8801 - "version": "1.1.4", 8801 + "version": "1.1.5", 8802 8802 "bundled": true, 8803 8803 "dev": true, 8804 8804 "optional": true, ··· 8822 8822 } 8823 8823 }, 8824 8824 "chownr": { 8825 - "version": "1.0.1", 8825 + "version": "1.1.1", 8826 8826 "bundled": true, 8827 8827 "dev": true, 8828 8828 "optional": true ··· 8858 8858 } 8859 8859 }, 8860 8860 "deep-extend": { 8861 - "version": "0.5.1", 8861 + "version": "0.6.0", 8862 8862 "bundled": true, 8863 8863 "dev": true, 8864 8864 "optional": true ··· 8881 8881 "dev": true, 8882 8882 "optional": true, 8883 8883 "requires": { 8884 - "minipass": "2.2.4" 8884 + "minipass": "2.3.5" 8885 8885 } 8886 8886 }, 8887 8887 "fs.realpath": { ··· 8903 8903 "signal-exit": "3.0.2", 8904 8904 "string-width": "1.0.2", 8905 8905 "strip-ansi": "3.0.1", 8906 - "wide-align": "1.1.2" 8906 + "wide-align": "1.1.3" 8907 8907 } 8908 8908 }, 8909 8909 "glob": { 8910 - "version": "7.1.2", 8910 + "version": "7.1.3", 8911 8911 "bundled": true, 8912 8912 "dev": true, 8913 8913 "optional": true, ··· 8927 8927 "optional": true 8928 8928 }, 8929 8929 "iconv-lite": { 8930 - "version": "0.4.21", 8930 + "version": "0.4.24", 8931 8931 "bundled": true, 8932 8932 "dev": true, 8933 8933 "optional": true, ··· 8993 8993 "dev": true 8994 8994 }, 8995 8995 "minipass": { 8996 - "version": "2.2.4", 8996 + "version": "2.3.5", 8997 8997 "bundled": true, 8998 8998 "dev": true, 8999 8999 "requires": { 9000 - "safe-buffer": "5.1.1", 9001 - "yallist": "3.0.2" 9000 + "safe-buffer": "5.1.2", 9001 + "yallist": "3.0.3" 9002 9002 } 9003 9003 }, 9004 9004 "minizlib": { 9005 - "version": "1.1.0", 9005 + "version": "1.2.1", 9006 9006 "bundled": true, 9007 9007 "dev": true, 9008 9008 "optional": true, 9009 9009 "requires": { 9010 - "minipass": "2.2.4" 9010 + "minipass": "2.3.5" 9011 9011 } 9012 9012 }, 9013 9013 "mkdirp": { ··· 9025 9025 "optional": true 9026 9026 }, 9027 9027 "needle": { 9028 - "version": "2.2.0", 9028 + "version": "2.2.4", 9029 9029 "bundled": true, 9030 9030 "dev": true, 9031 9031 "optional": true, 9032 9032 "requires": { 9033 9033 "debug": "2.6.9", 9034 - "iconv-lite": "0.4.21", 9034 + "iconv-lite": "0.4.24", 9035 9035 "sax": "1.2.4" 9036 9036 } 9037 9037 }, 9038 9038 "node-pre-gyp": { 9039 - "version": "0.10.0", 9039 + "version": "0.10.3", 9040 9040 "bundled": true, 9041 9041 "dev": true, 9042 9042 "optional": true, 9043 9043 "requires": { 9044 9044 "detect-libc": "1.0.3", 9045 9045 "mkdirp": "0.5.1", 9046 - "needle": "2.2.0", 9046 + "needle": "2.2.4", 9047 9047 "nopt": "4.0.1", 9048 - "npm-packlist": "1.1.10", 9048 + "npm-packlist": "1.2.0", 9049 9049 "npmlog": "4.1.2", 9050 - "rc": "1.2.7", 9051 - "rimraf": "2.6.2", 9052 - "semver": "5.5.0", 9053 - "tar": "4.4.1" 9050 + "rc": "1.2.8", 9051 + "rimraf": "2.6.3", 9052 + "semver": "5.6.0", 9053 + "tar": "4.4.8" 9054 9054 } 9055 9055 }, 9056 9056 "nopt": { ··· 9064 9064 } 9065 9065 }, 9066 9066 "npm-bundled": { 9067 - "version": "1.0.3", 9067 + "version": "1.0.5", 9068 9068 "bundled": true, 9069 9069 "dev": true, 9070 9070 "optional": true 9071 9071 }, 9072 9072 "npm-packlist": { 9073 - "version": "1.1.10", 9073 + "version": "1.2.0", 9074 9074 "bundled": true, 9075 9075 "dev": true, 9076 9076 "optional": true, 9077 9077 "requires": { 9078 9078 "ignore-walk": "3.0.1", 9079 - "npm-bundled": "1.0.3" 9079 + "npm-bundled": "1.0.5" 9080 9080 } 9081 9081 }, 9082 9082 "npmlog": { ··· 9085 9085 "dev": true, 9086 9086 "optional": true, 9087 9087 "requires": { 9088 - "are-we-there-yet": "1.1.4", 9088 + "are-we-there-yet": "1.1.5", 9089 9089 "console-control-strings": "1.1.0", 9090 9090 "gauge": "2.7.4", 9091 9091 "set-blocking": "2.0.0" ··· 9145 9145 "optional": true 9146 9146 }, 9147 9147 "rc": { 9148 - "version": "1.2.7", 9148 + "version": "1.2.8", 9149 9149 "bundled": true, 9150 9150 "dev": true, 9151 9151 "optional": true, 9152 9152 "requires": { 9153 - "deep-extend": "0.5.1", 9153 + "deep-extend": "0.6.0", 9154 9154 "ini": "1.3.5", 9155 9155 "minimist": "1.2.0", 9156 9156 "strip-json-comments": "2.0.1" ··· 9174 9174 "inherits": "2.0.3", 9175 9175 "isarray": "1.0.0", 9176 9176 "process-nextick-args": "2.0.0", 9177 - "safe-buffer": "5.1.1", 9177 + "safe-buffer": "5.1.2", 9178 9178 "string_decoder": "1.1.1", 9179 9179 "util-deprecate": "1.0.2" 9180 9180 } 9181 9181 }, 9182 9182 "rimraf": { 9183 - "version": "2.6.2", 9183 + "version": "2.6.3", 9184 9184 "bundled": true, 9185 9185 "dev": true, 9186 9186 "optional": true, 9187 9187 "requires": { 9188 - "glob": "7.1.2" 9188 + "glob": "7.1.3" 9189 9189 } 9190 9190 }, 9191 9191 "safe-buffer": { 9192 - "version": "5.1.1", 9192 + "version": "5.1.2", 9193 9193 "bundled": true, 9194 9194 "dev": true 9195 9195 }, ··· 9206 9206 "optional": true 9207 9207 }, 9208 9208 "semver": { 9209 - "version": "5.5.0", 9209 + "version": "5.6.0", 9210 9210 "bundled": true, 9211 9211 "dev": true, 9212 9212 "optional": true ··· 9239 9239 "dev": true, 9240 9240 "optional": true, 9241 9241 "requires": { 9242 - "safe-buffer": "5.1.1" 9242 + "safe-buffer": "5.1.2" 9243 9243 } 9244 9244 }, 9245 9245 "strip-ansi": { ··· 9257 9257 "optional": true 9258 9258 }, 9259 9259 "tar": { 9260 - "version": "4.4.1", 9260 + "version": "4.4.8", 9261 9261 "bundled": true, 9262 9262 "dev": true, 9263 9263 "optional": true, 9264 9264 "requires": { 9265 - "chownr": "1.0.1", 9265 + "chownr": "1.1.1", 9266 9266 "fs-minipass": "1.2.5", 9267 - "minipass": "2.2.4", 9268 - "minizlib": "1.1.0", 9267 + "minipass": "2.3.5", 9268 + "minizlib": "1.2.1", 9269 9269 "mkdirp": "0.5.1", 9270 - "safe-buffer": "5.1.1", 9271 - "yallist": "3.0.2" 9270 + "safe-buffer": "5.1.2", 9271 + "yallist": "3.0.3" 9272 9272 } 9273 9273 }, 9274 9274 "util-deprecate": { ··· 9278 9278 "optional": true 9279 9279 }, 9280 9280 "wide-align": { 9281 - "version": "1.1.2", 9281 + "version": "1.1.3", 9282 9282 "bundled": true, 9283 9283 "dev": true, 9284 9284 "optional": true, ··· 9292 9292 "dev": true 9293 9293 }, 9294 9294 "yallist": { 9295 - "version": "3.0.2", 9295 + "version": "3.0.3", 9296 9296 "bundled": true, 9297 9297 "dev": true 9298 9298 } ··· 12171 12171 "resolved": "https://registry.npmjs.org/react/-/react-0.14.9.tgz", 12172 12172 "integrity": "sha1-kRCmSXxJ1EuhwO3TF67CnC4NkdE=", 12173 12173 "requires": { 12174 - "envify": "^3.0.0", 12175 - "fbjs": "^0.6.1" 12174 + "envify": "3.4.1", 12175 + "fbjs": "0.6.1" 12176 12176 } 12177 12177 } 12178 12178 } ··· 17469 17469 "capture-exit": "1.2.0", 17470 17470 "exec-sh": "0.2.2", 17471 17471 "fb-watchman": "2.0.0", 17472 - "fsevents": "1.2.4", 17472 + "fsevents": "1.2.7", 17473 17473 "micromatch": "3.1.10", 17474 17474 "minimist": "1.2.0", 17475 17475 "walker": "1.0.7", ··· 21504 21504 "anymatch": "2.0.0", 21505 21505 "async-each": "1.0.1", 21506 21506 "braces": "2.3.2", 21507 - "fsevents": "1.2.4", 21507 + "fsevents": "1.2.7", 21508 21508 "glob-parent": "3.1.0", 21509 21509 "inherits": "2.0.3", 21510 21510 "is-binary-path": "1.0.1", ··· 21925 21925 "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", 21926 21926 "dev": true, 21927 21927 "requires": { 21928 - "arr-flatten": "^1.1.0", 21929 - "array-unique": "^0.3.2", 21930 - "extend-shallow": "^2.0.1", 21931 - "fill-range": "^4.0.0", 21932 - "isobject": "^3.0.1", 21933 - "repeat-element": "^1.1.2", 21934 - "snapdragon": "^0.8.1", 21935 - "snapdragon-node": "^2.0.1", 21936 - "split-string": "^3.0.2", 21937 - "to-regex": "^3.0.1" 21928 + "arr-flatten": "1.1.0", 21929 + "array-unique": "0.3.2", 21930 + "extend-shallow": "2.0.1", 21931 + "fill-range": "4.0.0", 21932 + "isobject": "3.0.1", 21933 + "repeat-element": "1.1.3", 21934 + "snapdragon": "0.8.2", 21935 + "snapdragon-node": "2.1.1", 21936 + "split-string": "3.1.0", 21937 + "to-regex": "3.0.2" 21938 21938 }, 21939 21939 "dependencies": { 21940 21940 "extend-shallow": { ··· 21943 21943 "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 21944 21944 "dev": true, 21945 21945 "requires": { 21946 - "is-extendable": "^0.1.0" 21946 + "is-extendable": "0.1.1" 21947 21947 } 21948 21948 } 21949 21949 } ··· 21954 21954 "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", 21955 21955 "dev": true, 21956 21956 "requires": { 21957 - "graceful-fs": "^4.1.2", 21958 - "memory-fs": "^0.4.0", 21959 - "tapable": "^1.0.0" 21957 + "graceful-fs": "4.1.11", 21958 + "memory-fs": "0.4.1", 21959 + "tapable": "1.1.1" 21960 21960 } 21961 21961 }, 21962 21962 "eslint-scope": { ··· 21965 21965 "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", 21966 21966 "dev": true, 21967 21967 "requires": { 21968 - "esrecurse": "^4.1.0", 21969 - "estraverse": "^4.1.1" 21968 + "esrecurse": "4.2.1", 21969 + "estraverse": "4.2.0" 21970 21970 } 21971 21971 }, 21972 21972 "expand-brackets": { ··· 21975 21975 "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", 21976 21976 "dev": true, 21977 21977 "requires": { 21978 - "debug": "^2.3.3", 21979 - "define-property": "^0.2.5", 21980 - "extend-shallow": "^2.0.1", 21981 - "posix-character-classes": "^0.1.0", 21982 - "regex-not": "^1.0.0", 21983 - "snapdragon": "^0.8.1", 21984 - "to-regex": "^3.0.1" 21978 + "debug": "2.6.9", 21979 + "define-property": "0.2.5", 21980 + "extend-shallow": "2.0.1", 21981 + "posix-character-classes": "0.1.1", 21982 + "regex-not": "1.0.2", 21983 + "snapdragon": "0.8.2", 21984 + "to-regex": "3.0.2" 21985 21985 }, 21986 21986 "dependencies": { 21987 21987 "define-property": { ··· 21990 21990 "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", 21991 21991 "dev": true, 21992 21992 "requires": { 21993 - "is-descriptor": "^0.1.0" 21993 + "is-descriptor": "0.1.6" 21994 21994 } 21995 21995 }, 21996 21996 "extend-shallow": { ··· 21999 21999 "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 22000 22000 "dev": true, 22001 22001 "requires": { 22002 - "is-extendable": "^0.1.0" 22002 + "is-extendable": "0.1.1" 22003 22003 } 22004 22004 }, 22005 22005 "is-accessor-descriptor": { ··· 22008 22008 "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", 22009 22009 "dev": true, 22010 22010 "requires": { 22011 - "kind-of": "^3.0.2" 22011 + "kind-of": "3.2.2" 22012 22012 }, 22013 22013 "dependencies": { 22014 22014 "kind-of": { ··· 22017 22017 "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 22018 22018 "dev": true, 22019 22019 "requires": { 22020 - "is-buffer": "^1.1.5" 22020 + "is-buffer": "1.1.6" 22021 22021 } 22022 22022 } 22023 22023 } ··· 22028 22028 "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", 22029 22029 "dev": true, 22030 22030 "requires": { 22031 - "kind-of": "^3.0.2" 22031 + "kind-of": "3.2.2" 22032 22032 }, 22033 22033 "dependencies": { 22034 22034 "kind-of": { ··· 22037 22037 "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 22038 22038 "dev": true, 22039 22039 "requires": { 22040 - "is-buffer": "^1.1.5" 22040 + "is-buffer": "1.1.6" 22041 22041 } 22042 22042 } 22043 22043 } ··· 22048 22048 "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", 22049 22049 "dev": true, 22050 22050 "requires": { 22051 - "is-accessor-descriptor": "^0.1.6", 22052 - "is-data-descriptor": "^0.1.4", 22053 - "kind-of": "^5.0.0" 22051 + "is-accessor-descriptor": "0.1.6", 22052 + "is-data-descriptor": "0.1.4", 22053 + "kind-of": "5.1.0" 22054 22054 } 22055 22055 }, 22056 22056 "kind-of": { ··· 22067 22067 "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", 22068 22068 "dev": true, 22069 22069 "requires": { 22070 - "array-unique": "^0.3.2", 22071 - "define-property": "^1.0.0", 22072 - "expand-brackets": "^2.1.4", 22073 - "extend-shallow": "^2.0.1", 22074 - "fragment-cache": "^0.2.1", 22075 - "regex-not": "^1.0.0", 22076 - "snapdragon": "^0.8.1", 22077 - "to-regex": "^3.0.1" 22070 + "array-unique": "0.3.2", 22071 + "define-property": "1.0.0", 22072 + "expand-brackets": "2.1.4", 22073 + "extend-shallow": "2.0.1", 22074 + "fragment-cache": "0.2.1", 22075 + "regex-not": "1.0.2", 22076 + "snapdragon": "0.8.2", 22077 + "to-regex": "3.0.2" 22078 22078 }, 22079 22079 "dependencies": { 22080 22080 "define-property": { ··· 22083 22083 "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", 22084 22084 "dev": true, 22085 22085 "requires": { 22086 - "is-descriptor": "^1.0.0" 22086 + "is-descriptor": "1.0.2" 22087 22087 } 22088 22088 }, 22089 22089 "extend-shallow": { ··· 22092 22092 "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 22093 22093 "dev": true, 22094 22094 "requires": { 22095 - "is-extendable": "^0.1.0" 22095 + "is-extendable": "0.1.1" 22096 22096 } 22097 22097 } 22098 22098 } ··· 22103 22103 "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", 22104 22104 "dev": true, 22105 22105 "requires": { 22106 - "extend-shallow": "^2.0.1", 22107 - "is-number": "^3.0.0", 22108 - "repeat-string": "^1.6.1", 22109 - "to-regex-range": "^2.1.0" 22106 + "extend-shallow": "2.0.1", 22107 + "is-number": "3.0.0", 22108 + "repeat-string": "1.6.1", 22109 + "to-regex-range": "2.1.1" 22110 22110 }, 22111 22111 "dependencies": { 22112 22112 "extend-shallow": { ··· 22115 22115 "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", 22116 22116 "dev": true, 22117 22117 "requires": { 22118 - "is-extendable": "^0.1.0" 22118 + "is-extendable": "0.1.1" 22119 22119 } 22120 22120 } 22121 22121 } ··· 22126 22126 "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", 22127 22127 "dev": true, 22128 22128 "requires": { 22129 - "kind-of": "^6.0.0" 22129 + "kind-of": "6.0.2" 22130 22130 } 22131 22131 }, 22132 22132 "is-data-descriptor": { ··· 22135 22135 "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", 22136 22136 "dev": true, 22137 22137 "requires": { 22138 - "kind-of": "^6.0.0" 22138 + "kind-of": "6.0.2" 22139 22139 } 22140 22140 }, 22141 22141 "is-descriptor": { ··· 22144 22144 "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", 22145 22145 "dev": true, 22146 22146 "requires": { 22147 - "is-accessor-descriptor": "^1.0.0", 22148 - "is-data-descriptor": "^1.0.0", 22149 - "kind-of": "^6.0.2" 22147 + "is-accessor-descriptor": "1.0.0", 22148 + "is-data-descriptor": "1.0.0", 22149 + "kind-of": "6.0.2" 22150 22150 } 22151 22151 }, 22152 22152 "is-number": { ··· 22155 22155 "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 22156 22156 "dev": true, 22157 22157 "requires": { 22158 - "kind-of": "^3.0.2" 22158 + "kind-of": "3.2.2" 22159 22159 }, 22160 22160 "dependencies": { 22161 22161 "kind-of": { ··· 22164 22164 "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 22165 22165 "dev": true, 22166 22166 "requires": { 22167 - "is-buffer": "^1.1.5" 22167 + "is-buffer": "1.1.6" 22168 22168 } 22169 22169 } 22170 22170 } ··· 22187 22187 "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", 22188 22188 "dev": true, 22189 22189 "requires": { 22190 - "errno": "^0.1.3", 22191 - "readable-stream": "^2.0.1" 22190 + "errno": "0.1.7", 22191 + "readable-stream": "2.3.6" 22192 22192 } 22193 22193 }, 22194 22194 "micromatch": { ··· 22197 22197 "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", 22198 22198 "dev": true, 22199 22199 "requires": { 22200 - "arr-diff": "^4.0.0", 22201 - "array-unique": "^0.3.2", 22202 - "braces": "^2.3.1", 22203 - "define-property": "^2.0.2", 22204 - "extend-shallow": "^3.0.2", 22205 - "extglob": "^2.0.4", 22206 - "fragment-cache": "^0.2.1", 22207 - "kind-of": "^6.0.2", 22208 - "nanomatch": "^1.2.9", 22209 - "object.pick": "^1.3.0", 22210 - "regex-not": "^1.0.0", 22211 - "snapdragon": "^0.8.1", 22212 - "to-regex": "^3.0.2" 22200 + "arr-diff": "4.0.0", 22201 + "array-unique": "0.3.2", 22202 + "braces": "2.3.2", 22203 + "define-property": "2.0.2", 22204 + "extend-shallow": "3.0.2", 22205 + "extglob": "2.0.4", 22206 + "fragment-cache": "0.2.1", 22207 + "kind-of": "6.0.2", 22208 + "nanomatch": "1.2.13", 22209 + "object.pick": "1.3.0", 22210 + "regex-not": "1.0.2", 22211 + "snapdragon": "0.8.2", 22212 + "to-regex": "3.0.2" 22213 22213 } 22214 22214 }, 22215 22215 "source-map": { ··· 22307 22307 "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", 22308 22308 "dev": true, 22309 22309 "requires": { 22310 - "graceful-fs": "^4.1.2", 22311 - "memory-fs": "^0.4.0", 22312 - "tapable": "^1.0.0" 22310 + "graceful-fs": "4.1.11", 22311 + "memory-fs": "0.4.1", 22312 + "tapable": "1.1.1" 22313 22313 } 22314 22314 }, 22315 22315 "find-up": { ··· 22353 22353 "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", 22354 22354 "dev": true, 22355 22355 "requires": { 22356 - "errno": "^0.1.3", 22357 - "readable-stream": "^2.0.1" 22356 + "errno": "0.1.7", 22357 + "readable-stream": "2.3.6" 22358 22358 } 22359 22359 }, 22360 22360 "p-limit": { ··· 22396 22396 "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 22397 22397 "dev": true, 22398 22398 "requires": { 22399 - "is-fullwidth-code-point": "^2.0.0", 22400 - "strip-ansi": "^4.0.0" 22399 + "is-fullwidth-code-point": "2.0.0", 22400 + "strip-ansi": "4.0.0" 22401 22401 } 22402 22402 }, 22403 22403 "strip-ansi": { ··· 22406 22406 "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 22407 22407 "dev": true, 22408 22408 "requires": { 22409 - "ansi-regex": "^3.0.0" 22409 + "ansi-regex": "3.0.0" 22410 22410 } 22411 22411 }, 22412 22412 "supports-color": { ··· 22415 22415 "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 22416 22416 "dev": true, 22417 22417 "requires": { 22418 - "has-flag": "^3.0.0" 22418 + "has-flag": "3.0.0" 22419 22419 } 22420 22420 }, 22421 22421 "tapable": { ··· 22579 22579 "anymatch": "2.0.0", 22580 22580 "async-each": "1.0.1", 22581 22581 "braces": "2.3.2", 22582 - "fsevents": "1.2.4", 22582 + "fsevents": "1.2.7", 22583 22583 "glob-parent": "3.1.0", 22584 22584 "inherits": "2.0.3", 22585 22585 "is-binary-path": "1.0.1",