├── .github
└── no-response.yml
├── .gitignore
├── .travis.yml
├── CONTRIBUTING.md
├── ISSUE_TEMPLATE.md
├── LICENSE.md
├── PULL_REQUEST_TEMPLATE.md
├── README.md
├── appveyor.yml
├── assets
├── code.svg
├── package.svg
├── project.svg
├── shortcut.svg
└── theme.svg
├── docs
└── events.md
├── lib
├── consent-view.js
├── guide-view.js
├── main.js
├── reporter-proxy.js
├── welcome-package.js
└── welcome-view.js
├── menus
└── welcome.cson
├── package-lock.json
├── package.json
├── styles
└── welcome.less
└── test
├── helpers.js
└── welcome.test.js
/.github/no-response.yml:
--------------------------------------------------------------------------------
1 | # Configuration for probot-no-response - https://github.com/probot/no-response
2 |
3 | # Number of days of inactivity before an issue is closed for lack of response
4 | daysUntilClose: 28
5 |
6 | # Label requiring a response
7 | responseRequiredLabel: more-information-needed
8 |
9 | # Comment to post when closing an issue for lack of response. Set to `false` to disable.
10 | closeComment: >
11 | This issue has been automatically closed because there has been no response
12 | to our request for more information from the original author. With only the
13 | information that is currently in the issue, we don't have enough information
14 | to take action. Please reach out if you have or find the answers we need so
15 | that we can investigate further.
16 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: objective-c
2 |
3 | notifications:
4 | email:
5 | on_success: never
6 | on_failure: change
7 |
8 | script: 'curl -s https://raw.githubusercontent.com/atom/ci/master/build-package.sh | sh'
9 |
10 | git:
11 | depth: 10
12 |
13 | branches:
14 | only:
15 | - master
16 |
--------------------------------------------------------------------------------
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 | See the [Atom contributing guide](https://github.com/atom/atom/blob/master/CONTRIBUTING.md).
2 |
--------------------------------------------------------------------------------
/ISSUE_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
8 |
9 | ### Prerequisites
10 |
11 | * [ ] Put an X between the brackets on this line if you have done all of the following:
12 | * Reproduced the problem in Safe Mode: http://flight-manual.atom.io/hacking-atom/sections/debugging/#using-safe-mode
13 | * Followed all applicable steps in the debugging guide: http://flight-manual.atom.io/hacking-atom/sections/debugging/
14 | * Checked the FAQs on the message board for common solutions: https://discuss.atom.io/c/faq
15 | * Checked that your issue isn't already filed: https://github.com/issues?utf8=✓&q=is%3Aissue+user%3Aatom
16 | * Checked that there is not already an Atom package that provides the described functionality: https://atom.io/packages
17 |
18 | ### Description
19 |
20 | [Description of the issue]
21 |
22 | ### Steps to Reproduce
23 |
24 | 1. [First Step]
25 | 2. [Second Step]
26 | 3. [and so on...]
27 |
28 | **Expected behavior:** [What you expect to happen]
29 |
30 | **Actual behavior:** [What actually happens]
31 |
32 | **Reproduces how often:** [What percentage of the time does it reproduce?]
33 |
34 | ### Versions
35 |
36 | You can get this information from copy and pasting the output of `atom --version` and `apm --version` from the command line. Also, please include the OS and what version of the OS you're running.
37 |
38 | ### Additional Information
39 |
40 | Any additional information, configuration or data that might be necessary to reproduce the issue.
41 |
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (c) 2014 GitHub Inc.
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 | ### Requirements
2 |
3 | * Filling out the template is required. Any pull request that does not include enough information to be reviewed in a timely manner may be closed at the maintainers' discretion.
4 | * All new code requires tests to ensure against regressions
5 |
6 | ### Description of the Change
7 |
8 |
13 |
14 | ### Alternate Designs
15 |
16 |
17 |
18 | ### Benefits
19 |
20 |
21 |
22 | ### Possible Drawbacks
23 |
24 |
25 |
26 | ### Applicable Issues
27 |
28 |
29 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | ### This package is now a part of the [core Atom repository](https://github.com/atom/atom/tree/master/packages/welcome), please direct all issues and pull requests there in the future!
2 |
3 | ---
4 |
5 | ## Welcome package
6 | [](https://travis-ci.org/atom/welcome)
7 | [](https://ci.appveyor.com/project/Atom/welcome/branch/master)
8 | [](https://david-dm.org/atom/welcome)
9 |
10 | Opens a welcome editor with helpful information the very first time Atom is opened and the usage statistics opt-in.
11 |
--------------------------------------------------------------------------------
/appveyor.yml:
--------------------------------------------------------------------------------
1 | platform: x64
2 |
3 | branches:
4 | only:
5 | - master
6 |
7 | clone_depth: 10
8 |
9 | skip_tags: true
10 |
11 | environment:
12 | APM_TEST_PACKAGES:
13 |
14 | matrix:
15 | - ATOM_CHANNEL: stable
16 | - ATOM_CHANNEL: beta
17 |
18 | install:
19 | - ps: Install-Product node 6
20 |
21 | build_script:
22 | - ps: iex ((new-object net.webclient).DownloadString('https://raw.githubusercontent.com/atom/ci/master/build-package.ps1'))
23 |
24 | test: off
25 | deploy: off
26 |
--------------------------------------------------------------------------------
/assets/code.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/assets/package.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/assets/project.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/assets/shortcut.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/assets/theme.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/docs/events.md:
--------------------------------------------------------------------------------
1 | # Events specification
2 |
3 | This document specifies all the data (along with the format) which gets sent from the Welcome package to the GitHub analytics pipeline. This document follows the same format and nomenclature as the [Atom Core Events spec](https://github.com/atom/metrics/blob/master/docs/events.md).
4 |
5 | ## Counters
6 |
7 | Currently the Welcome package does not log any counter events.
8 |
9 | ## Timing events
10 |
11 | Currently the Welcome package does not log any timing events.
12 |
13 | ## Standard events
14 |
15 | #### Welcome package shown
16 |
17 | * **eventType**: `welcome-v1`
18 | * **metadata**
19 |
20 | | field | value |
21 | |-------|-------|
22 | | `ea` | `show-on-initial-load`
23 |
24 |
25 | #### Click on links
26 |
27 | * **eventType**: `welcome-v1`
28 | * **metadata**
29 |
30 | | field | value |
31 | |-------|-------|
32 | | `ea` | link that was clicked
33 |
34 | (There are many potential values for the `ea` param, e.g: `clicked-welcome-atom-docs-link`,`clicked-welcome-atom-org-link`, `clicked-project-cta`, `clicked-init-script-cta`, ...).
35 |
36 |
37 |
--------------------------------------------------------------------------------
/lib/consent-view.js:
--------------------------------------------------------------------------------
1 | 'use babel'
2 | /** @jsx etch.dom */
3 |
4 | import etch from 'etch'
5 |
6 | export default class ConsentView {
7 | constructor () {
8 | etch.initialize(this)
9 | }
10 |
11 | render () {
12 | return (
13 |
14 |
15 |
37 |
38 |
Help improve Atom by sending your anonymous usage data to the Atom team. The resulting data plays a key role in deciding what we focus on next.
39 |
40 |
41 |
42 |
Yes, send my usage data
43 |
Including exception and crash reports. See the atom/metrics package for more details.
44 |
45 |
46 |
47 |
No, do not send my usage data
48 |
Note: We only register anonymously that you opted-out.
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 | with
57 |
58 | by
59 |
60 |
61 |
62 |
63 |
64 | )
65 | }
66 |
67 | update () {
68 | return etch.update(this)
69 | }
70 |
71 | consent () {
72 | atom.config.set('core.telemetryConsent', 'limited')
73 | atom.workspace.closeActivePaneItemOrEmptyPaneOrWindow()
74 | }
75 |
76 | decline () {
77 | atom.config.set('core.telemetryConsent', 'no')
78 | atom.workspace.closeActivePaneItemOrEmptyPaneOrWindow()
79 | }
80 |
81 | openMetricsPackage () {
82 | atom.workspace.open('atom://config/packages/metrics')
83 | }
84 |
85 | getTitle () {
86 | return 'Telemetry Consent'
87 | }
88 |
89 | async destroy () {
90 | await etch.destroy(this)
91 | }
92 | }
93 |
--------------------------------------------------------------------------------
/lib/guide-view.js:
--------------------------------------------------------------------------------
1 | /** @babel */
2 | /** @jsx etch.dom **/
3 |
4 | import etch from 'etch'
5 |
6 | export default class GuideView {
7 | constructor (props) {
8 | this.props = props
9 | this.didClickProjectButton = this.didClickProjectButton.bind(this)
10 | this.didClickGitButton = this.didClickGitButton.bind(this)
11 | this.didClickGitHubButton = this.didClickGitHubButton.bind(this)
12 | this.didClickTeletypeButton = this.didClickTeletypeButton.bind(this)
13 | this.didClickPackagesButton = this.didClickPackagesButton.bind(this)
14 | this.didClickThemesButton = this.didClickThemesButton.bind(this)
15 | this.didClickStylingButton = this.didClickStylingButton.bind(this)
16 | this.didClickInitScriptButton = this.didClickInitScriptButton.bind(this)
17 | this.didClickSnippetsButton = this.didClickSnippetsButton.bind(this)
18 | this.didExpandOrCollapseSection = this.didExpandOrCollapseSection.bind(this)
19 | etch.initialize(this)
20 | }
21 |
22 | update () {}
23 |
24 | render () {
25 | return (
26 |
27 |
28 |
29 |
30 | Get to know Atom!
31 |
32 |
33 |
34 |
35 | Open a Project
36 |
37 |
38 |
39 |
40 |
41 |
42 | In Atom you can open individual files or a whole folder as a
43 | project. Opening a folder will add a tree view to the editor
44 | where you can browse all the files.
45 |
46 |
47 |
48 | Open a Project
49 |
50 |
51 |
52 | Next time: You can also open projects from
53 | the menu, keyboard shortcut or by dragging a folder onto the
54 | Atom dock icon.
55 |
56 |
57 |
58 |
59 |
60 |
61 | Version control with Git and GitHub
62 |
63 |
64 |
65 |
66 |
67 |
68 | Track changes to your code as you work. Branch, commit, push, and pull without leaving
69 | the comfort of your editor. Collaborate with other developers on GitHub.
70 |
71 |
72 |
73 | Open the Git panel
74 |
75 |
76 | Open the GitHub panel
77 |
78 |
79 |
80 | Next time: You can toggle the Git tab by clicking on the
81 | button in your status bar.
82 |
83 |
84 |
85 |
86 |
87 |
88 | Collaborate in real time with Teletype
89 |
90 |
91 |
92 |
93 |
94 |
95 | Share your workspace with team members and collaborate on code in real time.
96 |
97 |
98 |
99 | Install Teletype for Atom
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 | Install a Package
108 |
109 |
110 |
111 |
112 |
113 |
114 | One of the best things about Atom is the package ecosystem.
115 | Installing packages adds new features and functionality you
116 | can use to make the editor suit your needs. Let's install one.
117 |
118 |
119 |
120 | Open Installer
121 |
122 |
123 |
124 | Next time: You can install new packages from the settings.
125 |
126 |
127 |
128 |
129 |
130 |
131 | Choose a Theme
132 |
133 |
134 |
135 |
136 |
137 |
138 | Atom comes with preinstalled themes. Let's try a few.
139 |
140 |
141 |
142 | Open the theme picker
143 |
144 |
145 |
146 | You can also install themes created by the Atom community. To
147 | install new themes, click on "+ Install" and switch the toggle
148 | to "themes".
149 |
150 |
151 | Next time: You can switch themes from the settings.
152 |
153 |
154 |
155 |
156 |
157 |
158 | Customize the Styling
159 |
160 |
161 |
162 |
163 |
164 |
165 | You can customize almost anything by adding your own CSS/LESS.
166 |
167 |
168 |
169 | Open your Stylesheet
170 |
171 |
172 |
173 | Now uncomment some of the examples or try your own
174 |
175 |
176 | Next time: You can open your stylesheet from Menu {this.getApplicationMenuName()}.
177 |
178 |
179 |
180 |
181 |
182 |
183 | Hack on the Init Script
184 |
185 |
186 |
187 |
188 |
189 |
190 | The init script is a bit of JavaScript or CoffeeScript run at
191 | startup. You can use it to quickly change the behaviour of
192 | Atom.
193 |
194 |
195 |
196 | Open your Init Script
197 |
198 |
199 |
200 | Uncomment some of the examples or try out your own.
201 |
202 |
203 | Next time: You can open your init script from Menu > {this.getApplicationMenuName()}.
204 |
205 |
206 |
207 |
208 |
209 |
210 | Add a Snippet
211 |
212 |
213 |
214 |
215 |
216 |
217 | Atom snippets allow you to enter a simple prefix in the editor
218 | and hit tab to expand the prefix into a larger code block with
219 | templated values.
220 |
221 |
222 |
223 | Open your Snippets
224 |
225 |
226 |
227 | In your snippets file, type snip
then hit tab
.
228 | The snip
snippet will expand
229 | to create a snippet!
230 |
231 |
232 | Next time: You can open your snippets in Menu > {this.getApplicationMenuName()}.
233 |
234 |
235 |
236 |
237 |
238 |
239 | Learn Keyboard Shortcuts
240 |
241 |
242 |
243 |
244 |
245 |
246 | If you only remember one keyboard shortcut make
247 | it {this.getCommandPaletteKeyBinding()} .
248 | This keystroke toggles the command palette, which lists every
249 | Atom command. It's a good way to learn more shortcuts. Yes,
250 | you can try it now!
251 |
252 |
253 | If you want to use these guides again use the command
254 | palette {this.getCommandPaletteKeyBinding()} and
255 | search for Welcome .
256 |
257 |
258 |
259 |
260 |
261 |
262 | )
263 | }
264 |
265 | getSectionProps (sectionName) {
266 | const props = {dataset: {section: sectionName}, onclick: this.didExpandOrCollapseSection}
267 | if (this.props.openSections && this.props.openSections.indexOf(sectionName) !== -1) {
268 | props.open = true
269 | }
270 | return props
271 | }
272 |
273 | getCommandPaletteKeyBinding () {
274 | if (process.platform === 'darwin') {
275 | return 'cmd-shift-p'
276 | } else {
277 | return 'ctrl-shift-p'
278 | }
279 | }
280 |
281 | getApplicationMenuName () {
282 | if (process.platform === 'darwin') {
283 | return 'Atom'
284 | } else if (process.platform === 'linux') {
285 | return 'Edit'
286 | } else {
287 | return 'File'
288 | }
289 | }
290 |
291 | serialize () {
292 | return {
293 | deserializer: this.constructor.name,
294 | openSections: this.getOpenSections(),
295 | uri: this.getURI()
296 | }
297 | }
298 |
299 | getURI () {
300 | return this.props.uri
301 | }
302 |
303 | getTitle () {
304 | return 'Welcome Guide'
305 | }
306 |
307 | isEqual (other) {
308 | return other instanceof GuideView
309 | }
310 |
311 | getOpenSections () {
312 | return Array.from(this.element.querySelectorAll('details[open]'))
313 | .map((sectionElement) => sectionElement.dataset.section)
314 | }
315 |
316 | didClickProjectButton () {
317 | this.props.reporterProxy.sendEvent('clicked-project-cta')
318 | atom.commands.dispatch(atom.views.getView(atom.workspace), 'application:open')
319 | }
320 |
321 | didClickGitButton () {
322 | this.props.reporterProxy.sendEvent('clicked-git-cta')
323 | atom.commands.dispatch(atom.views.getView(atom.workspace), 'github:toggle-git-tab')
324 | }
325 |
326 | didClickGitHubButton () {
327 | this.props.reporterProxy.sendEvent('clicked-github-cta')
328 | atom.commands.dispatch(atom.views.getView(atom.workspace), 'github:toggle-github-tab')
329 | }
330 |
331 | didClickPackagesButton () {
332 | this.props.reporterProxy.sendEvent('clicked-packages-cta')
333 | atom.workspace.open('atom://config/install', {split: 'left'})
334 | }
335 |
336 | didClickThemesButton () {
337 | this.props.reporterProxy.sendEvent('clicked-themes-cta')
338 | atom.workspace.open('atom://config/themes', {split: 'left'})
339 | }
340 |
341 | didClickStylingButton () {
342 | this.props.reporterProxy.sendEvent('clicked-styling-cta')
343 | atom.workspace.open('atom://.atom/stylesheet', {split: 'left'})
344 | }
345 |
346 | didClickInitScriptButton () {
347 | this.props.reporterProxy.sendEvent('clicked-init-script-cta')
348 | atom.workspace.open('atom://.atom/init-script', {split: 'left'})
349 | }
350 |
351 | didClickSnippetsButton () {
352 | this.props.reporterProxy.sendEvent('clicked-snippets-cta')
353 | atom.workspace.open('atom://.atom/snippets', {split: 'left'})
354 | }
355 |
356 | didClickTeletypeButton () {
357 | this.props.reporterProxy.sendEvent('clicked-teletype-cta')
358 | atom.workspace.open('atom://config/packages/teletype', {split: 'left'})
359 | }
360 |
361 | didExpandOrCollapseSection (event) {
362 | const sectionName = event.currentTarget.closest('details').dataset.section
363 | const action = event.currentTarget.hasAttribute('open') ? 'collapse' : 'expand'
364 | this.props.reporterProxy.sendEvent(`${action}-${sectionName}-section`)
365 | }
366 | }
367 |
--------------------------------------------------------------------------------
/lib/main.js:
--------------------------------------------------------------------------------
1 | /** @babel */
2 |
3 | import WelcomePackage from './welcome-package'
4 |
5 | export default new WelcomePackage()
6 |
--------------------------------------------------------------------------------
/lib/reporter-proxy.js:
--------------------------------------------------------------------------------
1 | /** @babel */
2 |
3 | export default class ReporterProxy {
4 | constructor () {
5 | this.reporter = null
6 | this.queue = []
7 | this.eventType = 'welcome-v1'
8 | }
9 |
10 | setReporter (reporter) {
11 | this.reporter = reporter
12 | let customEvent
13 |
14 | while ((customEvent = this.queue.shift())) {
15 | this.reporter.addCustomEvent(this.eventType, customEvent)
16 | }
17 | }
18 |
19 | sendEvent (action, label, value) {
20 | const event = { ea: action, el: label, ev: value }
21 | if (this.reporter) {
22 | this.reporter.addCustomEvent(this.eventType, event)
23 | } else {
24 | this.queue.push(event)
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/lib/welcome-package.js:
--------------------------------------------------------------------------------
1 | /** @babel */
2 |
3 | import {CompositeDisposable} from 'atom'
4 | import ReporterProxy from './reporter-proxy'
5 |
6 | let WelcomeView, GuideView, ConsentView
7 |
8 | const WELCOME_URI = 'atom://welcome/welcome'
9 | const GUIDE_URI = 'atom://welcome/guide'
10 | const CONSENT_URI = 'atom://welcome/consent'
11 |
12 | export default class WelcomePackage {
13 | constructor () {
14 | this.reporterProxy = new ReporterProxy()
15 | }
16 |
17 | async activate () {
18 | this.subscriptions = new CompositeDisposable()
19 |
20 | this.subscriptions.add(atom.workspace.addOpener((filePath) => {
21 | if (filePath === WELCOME_URI) {
22 | return this.createWelcomeView({uri: WELCOME_URI})
23 | }
24 | }))
25 |
26 | this.subscriptions.add(atom.workspace.addOpener((filePath) => {
27 | if (filePath === GUIDE_URI) {
28 | return this.createGuideView({uri: GUIDE_URI})
29 | }
30 | }))
31 |
32 | this.subscriptions.add(atom.workspace.addOpener((filePath) => {
33 | if (filePath === CONSENT_URI) {
34 | return this.createConsentView({uri: CONSENT_URI})
35 | }
36 | }))
37 |
38 | this.subscriptions.add(
39 | atom.commands.add('atom-workspace', 'welcome:show', () => this.show())
40 | )
41 |
42 | if (atom.config.get('core.telemetryConsent') === 'undecided') {
43 | await atom.workspace.open(CONSENT_URI)
44 | }
45 |
46 | if (atom.config.get('welcome.showOnStartup')) {
47 | await this.show()
48 | this.reporterProxy.sendEvent('show-on-initial-load')
49 | }
50 | }
51 |
52 | show () {
53 | return Promise.all([
54 | atom.workspace.open(WELCOME_URI, {split: 'left'}),
55 | atom.workspace.open(GUIDE_URI, {split: 'right'})
56 | ])
57 | }
58 |
59 | consumeReporter (reporter) {
60 | return this.reporterProxy.setReporter(reporter)
61 | }
62 |
63 | deactivate () {
64 | this.subscriptions.dispose()
65 | }
66 |
67 | createWelcomeView (state) {
68 | if (WelcomeView == null) WelcomeView = require('./welcome-view')
69 | return new WelcomeView({reporterProxy: this.reporterProxy, ...state})
70 | }
71 |
72 | createGuideView (state) {
73 | if (GuideView == null) GuideView = require('./guide-view')
74 | return new GuideView({reporterProxy: this.reporterProxy, ...state})
75 | }
76 |
77 | createConsentView (state) {
78 | if (ConsentView == null) ConsentView = require('./consent-view')
79 | return new ConsentView({reporterProxy: this.reporterProxy, ...state})
80 | }
81 | }
82 |
--------------------------------------------------------------------------------
/lib/welcome-view.js:
--------------------------------------------------------------------------------
1 | /** @babel */
2 | /** @jsx etch.dom **/
3 |
4 | import etch from 'etch'
5 |
6 | export default class WelcomeView {
7 | constructor (props) {
8 | this.props = props
9 | etch.initialize(this)
10 |
11 | this.element.addEventListener('click', (event) => {
12 | const link = event.target.closest('a')
13 | if (link && link.dataset.event) {
14 | this.props.reporterProxy.sendEvent(`clicked-welcome-${link.dataset.event}-link`)
15 | }
16 | })
17 | }
18 |
19 | didChangeShowOnStartup () {
20 | atom.config.set('welcome.showOnStartup', this.checked)
21 | }
22 |
23 | update () {}
24 |
25 | serialize () {
26 | return {
27 | deserializer: 'WelcomeView',
28 | uri: this.props.uri
29 | }
30 | }
31 |
32 | render () {
33 | return (
34 |
35 |
36 |
61 |
62 |
63 | For help, please visit
64 |
65 | The Atom docs for Guides and the API reference.
66 | The Atom forum at discuss.atom.io
67 | The Atom org . This is where all GitHub-created Atom packages can be found.
68 |
69 |
70 |
71 |
77 |
78 |
81 |
82 |
83 | )
84 | }
85 |
86 | getURI () {
87 | return this.props.uri
88 | }
89 |
90 | getTitle () {
91 | return 'Welcome'
92 | }
93 |
94 | isEqual (other) {
95 | other instanceof WelcomeView
96 | }
97 | }
98 |
--------------------------------------------------------------------------------
/menus/welcome.cson:
--------------------------------------------------------------------------------
1 | 'menu': [
2 | 'label': 'Help'
3 | 'submenu': [
4 | {'label': 'Welcome Guide', 'command': 'welcome:show'}
5 | ]
6 | ]
7 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "welcome",
3 | "version": "0.36.9",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "acorn": {
8 | "version": "5.7.1",
9 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.1.tgz",
10 | "integrity": "sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ==",
11 | "dev": true
12 | },
13 | "acorn-jsx": {
14 | "version": "3.0.1",
15 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz",
16 | "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=",
17 | "dev": true,
18 | "requires": {
19 | "acorn": "3.3.0"
20 | },
21 | "dependencies": {
22 | "acorn": {
23 | "version": "3.3.0",
24 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
25 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=",
26 | "dev": true
27 | }
28 | }
29 | },
30 | "ajv": {
31 | "version": "4.11.8",
32 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
33 | "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
34 | "dev": true,
35 | "requires": {
36 | "co": "4.6.0",
37 | "json-stable-stringify": "1.0.1"
38 | }
39 | },
40 | "ajv-keywords": {
41 | "version": "1.5.1",
42 | "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz",
43 | "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw=",
44 | "dev": true
45 | },
46 | "ansi-escapes": {
47 | "version": "1.4.0",
48 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz",
49 | "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=",
50 | "dev": true
51 | },
52 | "ansi-regex": {
53 | "version": "2.1.1",
54 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
55 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
56 | "dev": true
57 | },
58 | "ansi-styles": {
59 | "version": "2.2.1",
60 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
61 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
62 | "dev": true
63 | },
64 | "argparse": {
65 | "version": "1.0.10",
66 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
67 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
68 | "dev": true,
69 | "requires": {
70 | "sprintf-js": "1.0.3"
71 | }
72 | },
73 | "array-union": {
74 | "version": "1.0.2",
75 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
76 | "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
77 | "dev": true,
78 | "requires": {
79 | "array-uniq": "1.0.3"
80 | }
81 | },
82 | "array-uniq": {
83 | "version": "1.0.3",
84 | "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
85 | "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
86 | "dev": true
87 | },
88 | "arrify": {
89 | "version": "1.0.1",
90 | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
91 | "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
92 | "dev": true
93 | },
94 | "asap": {
95 | "version": "2.0.6",
96 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
97 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=",
98 | "dev": true,
99 | "optional": true
100 | },
101 | "asn1": {
102 | "version": "0.2.4",
103 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz",
104 | "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==",
105 | "dev": true,
106 | "optional": true,
107 | "requires": {
108 | "safer-buffer": "2.1.2"
109 | }
110 | },
111 | "assert-plus": {
112 | "version": "0.2.0",
113 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
114 | "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
115 | "dev": true,
116 | "optional": true
117 | },
118 | "asynckit": {
119 | "version": "0.4.0",
120 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
121 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
122 | "dev": true,
123 | "optional": true
124 | },
125 | "atom-mocha-test-runner": {
126 | "version": "1.2.0",
127 | "resolved": "https://registry.npmjs.org/atom-mocha-test-runner/-/atom-mocha-test-runner-1.2.0.tgz",
128 | "integrity": "sha512-HVbx7cAvySjVfVNKpb2go9RO890Xs6yigWWAwoISOz4l2X5oMTMs1rIw04geuEQeTTmW3ob3nj6YN1KWf2cBHg==",
129 | "dev": true,
130 | "requires": {
131 | "etch": "0.8.0",
132 | "grim": "2.0.2",
133 | "less": "2.7.3",
134 | "mocha": "3.5.3",
135 | "tmp": "0.0.31"
136 | },
137 | "dependencies": {
138 | "etch": {
139 | "version": "0.8.0",
140 | "resolved": "https://registry.npmjs.org/etch/-/etch-0.8.0.tgz",
141 | "integrity": "sha1-VPYZV0NG+KPueXP1T7vQG1YnItY=",
142 | "dev": true,
143 | "requires": {
144 | "virtual-dom": "2.1.1"
145 | }
146 | }
147 | }
148 | },
149 | "aws-sign2": {
150 | "version": "0.6.0",
151 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
152 | "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
153 | "dev": true,
154 | "optional": true
155 | },
156 | "aws4": {
157 | "version": "1.8.0",
158 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
159 | "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==",
160 | "dev": true,
161 | "optional": true
162 | },
163 | "babel-code-frame": {
164 | "version": "6.26.0",
165 | "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
166 | "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=",
167 | "dev": true,
168 | "requires": {
169 | "chalk": "1.1.3",
170 | "esutils": "2.0.2",
171 | "js-tokens": "3.0.2"
172 | }
173 | },
174 | "balanced-match": {
175 | "version": "1.0.0",
176 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
177 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
178 | "dev": true
179 | },
180 | "bcrypt-pbkdf": {
181 | "version": "1.0.2",
182 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
183 | "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=",
184 | "dev": true,
185 | "optional": true,
186 | "requires": {
187 | "tweetnacl": "0.14.5"
188 | }
189 | },
190 | "boom": {
191 | "version": "2.10.1",
192 | "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
193 | "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
194 | "dev": true,
195 | "requires": {
196 | "hoek": "2.16.3"
197 | }
198 | },
199 | "brace-expansion": {
200 | "version": "1.1.11",
201 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
202 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
203 | "dev": true,
204 | "requires": {
205 | "balanced-match": "1.0.0",
206 | "concat-map": "0.0.1"
207 | }
208 | },
209 | "browser-split": {
210 | "version": "0.0.1",
211 | "resolved": "https://registry.npmjs.org/browser-split/-/browser-split-0.0.1.tgz",
212 | "integrity": "sha1-ewl1dPjj6tYG+0Zk5krf3aKYGpM=",
213 | "dev": true
214 | },
215 | "browser-stdout": {
216 | "version": "1.3.0",
217 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz",
218 | "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=",
219 | "dev": true
220 | },
221 | "buffer-from": {
222 | "version": "1.1.1",
223 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz",
224 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==",
225 | "dev": true
226 | },
227 | "caller-path": {
228 | "version": "0.1.0",
229 | "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz",
230 | "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=",
231 | "dev": true,
232 | "requires": {
233 | "callsites": "0.2.0"
234 | }
235 | },
236 | "callsites": {
237 | "version": "0.2.0",
238 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz",
239 | "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=",
240 | "dev": true
241 | },
242 | "camelize": {
243 | "version": "1.0.0",
244 | "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.0.tgz",
245 | "integrity": "sha1-FkpUg+Yw+kMh5a8HAg5TGDGyYJs=",
246 | "dev": true
247 | },
248 | "caseless": {
249 | "version": "0.12.0",
250 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
251 | "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
252 | "dev": true,
253 | "optional": true
254 | },
255 | "chalk": {
256 | "version": "1.1.3",
257 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
258 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
259 | "dev": true,
260 | "requires": {
261 | "ansi-styles": "2.2.1",
262 | "escape-string-regexp": "1.0.5",
263 | "has-ansi": "2.0.0",
264 | "strip-ansi": "3.0.1",
265 | "supports-color": "2.0.0"
266 | },
267 | "dependencies": {
268 | "supports-color": {
269 | "version": "2.0.0",
270 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
271 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
272 | "dev": true
273 | }
274 | }
275 | },
276 | "circular-json": {
277 | "version": "0.3.3",
278 | "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz",
279 | "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==",
280 | "dev": true
281 | },
282 | "cli-cursor": {
283 | "version": "1.0.2",
284 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
285 | "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
286 | "dev": true,
287 | "requires": {
288 | "restore-cursor": "1.0.1"
289 | }
290 | },
291 | "cli-width": {
292 | "version": "2.2.0",
293 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
294 | "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
295 | "dev": true
296 | },
297 | "co": {
298 | "version": "4.6.0",
299 | "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
300 | "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
301 | "dev": true
302 | },
303 | "code-point-at": {
304 | "version": "1.1.0",
305 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
306 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
307 | "dev": true
308 | },
309 | "combined-stream": {
310 | "version": "1.0.6",
311 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz",
312 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=",
313 | "dev": true,
314 | "requires": {
315 | "delayed-stream": "1.0.0"
316 | }
317 | },
318 | "commander": {
319 | "version": "2.9.0",
320 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz",
321 | "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=",
322 | "dev": true,
323 | "requires": {
324 | "graceful-readlink": "1.0.1"
325 | }
326 | },
327 | "concat-map": {
328 | "version": "0.0.1",
329 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
330 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
331 | "dev": true
332 | },
333 | "concat-stream": {
334 | "version": "1.6.2",
335 | "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
336 | "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
337 | "dev": true,
338 | "requires": {
339 | "buffer-from": "1.1.1",
340 | "inherits": "2.0.3",
341 | "readable-stream": "2.3.6",
342 | "typedarray": "0.0.6"
343 | }
344 | },
345 | "core-util-is": {
346 | "version": "1.0.2",
347 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
348 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
349 | "dev": true
350 | },
351 | "cryptiles": {
352 | "version": "2.0.5",
353 | "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
354 | "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
355 | "dev": true,
356 | "optional": true,
357 | "requires": {
358 | "boom": "2.10.1"
359 | }
360 | },
361 | "d": {
362 | "version": "1.0.0",
363 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
364 | "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=",
365 | "dev": true,
366 | "requires": {
367 | "es5-ext": "0.10.46"
368 | }
369 | },
370 | "dashdash": {
371 | "version": "1.14.1",
372 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
373 | "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
374 | "dev": true,
375 | "optional": true,
376 | "requires": {
377 | "assert-plus": "1.0.0"
378 | },
379 | "dependencies": {
380 | "assert-plus": {
381 | "version": "1.0.0",
382 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
383 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
384 | "dev": true,
385 | "optional": true
386 | }
387 | }
388 | },
389 | "debug": {
390 | "version": "2.6.8",
391 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
392 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
393 | "dev": true,
394 | "requires": {
395 | "ms": "2.0.0"
396 | }
397 | },
398 | "debug-log": {
399 | "version": "1.0.1",
400 | "resolved": "https://registry.npmjs.org/debug-log/-/debug-log-1.0.1.tgz",
401 | "integrity": "sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8=",
402 | "dev": true
403 | },
404 | "deep-is": {
405 | "version": "0.1.3",
406 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
407 | "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
408 | "dev": true
409 | },
410 | "deglob": {
411 | "version": "2.1.1",
412 | "resolved": "https://registry.npmjs.org/deglob/-/deglob-2.1.1.tgz",
413 | "integrity": "sha512-2kjwuGGonL7gWE1XU4Fv79+vVzpoQCl0V+boMwWtOQJV2AGDabCwez++nB1Nli/8BabAfZQ/UuHPlp6AymKdWw==",
414 | "dev": true,
415 | "requires": {
416 | "find-root": "1.1.0",
417 | "glob": "7.1.1",
418 | "ignore": "3.3.10",
419 | "pkg-config": "1.1.1",
420 | "run-parallel": "1.1.9",
421 | "uniq": "1.0.1"
422 | }
423 | },
424 | "del": {
425 | "version": "2.2.2",
426 | "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz",
427 | "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=",
428 | "dev": true,
429 | "requires": {
430 | "globby": "5.0.0",
431 | "is-path-cwd": "1.0.0",
432 | "is-path-in-cwd": "1.0.1",
433 | "object-assign": "4.1.1",
434 | "pify": "2.3.0",
435 | "pinkie-promise": "2.0.1",
436 | "rimraf": "2.6.2"
437 | }
438 | },
439 | "delayed-stream": {
440 | "version": "1.0.0",
441 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
442 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
443 | "dev": true
444 | },
445 | "diff": {
446 | "version": "3.2.0",
447 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz",
448 | "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=",
449 | "dev": true
450 | },
451 | "doctrine": {
452 | "version": "1.5.0",
453 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
454 | "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
455 | "dev": true,
456 | "requires": {
457 | "esutils": "2.0.2",
458 | "isarray": "1.0.0"
459 | }
460 | },
461 | "dom-walk": {
462 | "version": "0.1.1",
463 | "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz",
464 | "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=",
465 | "dev": true
466 | },
467 | "ecc-jsbn": {
468 | "version": "0.1.2",
469 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
470 | "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=",
471 | "dev": true,
472 | "optional": true,
473 | "requires": {
474 | "jsbn": "0.1.1",
475 | "safer-buffer": "2.1.2"
476 | }
477 | },
478 | "errno": {
479 | "version": "0.1.7",
480 | "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
481 | "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==",
482 | "dev": true,
483 | "optional": true,
484 | "requires": {
485 | "prr": "1.0.1"
486 | }
487 | },
488 | "error": {
489 | "version": "4.4.0",
490 | "resolved": "https://registry.npmjs.org/error/-/error-4.4.0.tgz",
491 | "integrity": "sha1-v2n/JR+0onnBmtzNqmth6Q2b8So=",
492 | "dev": true,
493 | "requires": {
494 | "camelize": "1.0.0",
495 | "string-template": "0.2.1",
496 | "xtend": "4.0.1"
497 | }
498 | },
499 | "es5-ext": {
500 | "version": "0.10.46",
501 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz",
502 | "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==",
503 | "dev": true,
504 | "requires": {
505 | "es6-iterator": "2.0.3",
506 | "es6-symbol": "3.1.1",
507 | "next-tick": "1.0.0"
508 | },
509 | "dependencies": {
510 | "next-tick": {
511 | "version": "1.0.0",
512 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
513 | "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
514 | "dev": true
515 | }
516 | }
517 | },
518 | "es6-iterator": {
519 | "version": "2.0.3",
520 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
521 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
522 | "dev": true,
523 | "requires": {
524 | "d": "1.0.0",
525 | "es5-ext": "0.10.46",
526 | "es6-symbol": "3.1.1"
527 | }
528 | },
529 | "es6-map": {
530 | "version": "0.1.5",
531 | "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
532 | "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
533 | "dev": true,
534 | "requires": {
535 | "d": "1.0.0",
536 | "es5-ext": "0.10.46",
537 | "es6-iterator": "2.0.3",
538 | "es6-set": "0.1.5",
539 | "es6-symbol": "3.1.1",
540 | "event-emitter": "0.3.5"
541 | }
542 | },
543 | "es6-set": {
544 | "version": "0.1.5",
545 | "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
546 | "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
547 | "dev": true,
548 | "requires": {
549 | "d": "1.0.0",
550 | "es5-ext": "0.10.46",
551 | "es6-iterator": "2.0.3",
552 | "es6-symbol": "3.1.1",
553 | "event-emitter": "0.3.5"
554 | }
555 | },
556 | "es6-symbol": {
557 | "version": "3.1.1",
558 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz",
559 | "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=",
560 | "dev": true,
561 | "requires": {
562 | "d": "1.0.0",
563 | "es5-ext": "0.10.46"
564 | }
565 | },
566 | "es6-weak-map": {
567 | "version": "2.0.2",
568 | "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz",
569 | "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=",
570 | "dev": true,
571 | "requires": {
572 | "d": "1.0.0",
573 | "es5-ext": "0.10.46",
574 | "es6-iterator": "2.0.3",
575 | "es6-symbol": "3.1.1"
576 | }
577 | },
578 | "escape-string-regexp": {
579 | "version": "1.0.5",
580 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
581 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
582 | "dev": true
583 | },
584 | "escope": {
585 | "version": "3.6.0",
586 | "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
587 | "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
588 | "dev": true,
589 | "requires": {
590 | "es6-map": "0.1.5",
591 | "es6-weak-map": "2.0.2",
592 | "esrecurse": "4.2.1",
593 | "estraverse": "4.2.0"
594 | }
595 | },
596 | "eslint": {
597 | "version": "3.10.2",
598 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.10.2.tgz",
599 | "integrity": "sha1-yaEOi/bp1lZRIEd4xQM0Hx6sPOc=",
600 | "dev": true,
601 | "requires": {
602 | "babel-code-frame": "6.26.0",
603 | "chalk": "1.1.3",
604 | "concat-stream": "1.6.2",
605 | "debug": "2.6.8",
606 | "doctrine": "1.5.0",
607 | "escope": "3.6.0",
608 | "espree": "3.5.4",
609 | "estraverse": "4.2.0",
610 | "esutils": "2.0.2",
611 | "file-entry-cache": "2.0.0",
612 | "glob": "7.1.1",
613 | "globals": "9.18.0",
614 | "ignore": "3.3.10",
615 | "imurmurhash": "0.1.4",
616 | "inquirer": "0.12.0",
617 | "is-my-json-valid": "2.19.0",
618 | "is-resolvable": "1.1.0",
619 | "js-yaml": "3.12.0",
620 | "json-stable-stringify": "1.0.1",
621 | "levn": "0.3.0",
622 | "lodash": "4.17.10",
623 | "mkdirp": "0.5.1",
624 | "natural-compare": "1.4.0",
625 | "optionator": "0.8.2",
626 | "path-is-inside": "1.0.2",
627 | "pluralize": "1.2.1",
628 | "progress": "1.1.8",
629 | "require-uncached": "1.0.3",
630 | "shelljs": "0.7.8",
631 | "strip-bom": "3.0.0",
632 | "strip-json-comments": "1.0.4",
633 | "table": "3.8.3",
634 | "text-table": "0.2.0",
635 | "user-home": "2.0.0"
636 | }
637 | },
638 | "eslint-config-standard": {
639 | "version": "6.2.1",
640 | "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-6.2.1.tgz",
641 | "integrity": "sha1-06aKr8cZFjnn7kQec0hzkCY1QpI=",
642 | "dev": true
643 | },
644 | "eslint-config-standard-jsx": {
645 | "version": "3.2.0",
646 | "resolved": "https://registry.npmjs.org/eslint-config-standard-jsx/-/eslint-config-standard-jsx-3.2.0.tgz",
647 | "integrity": "sha1-wkDibtkZoRpCqk3oBZRys4Jo1iA=",
648 | "dev": true
649 | },
650 | "eslint-plugin-promise": {
651 | "version": "3.4.2",
652 | "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.4.2.tgz",
653 | "integrity": "sha1-G+J5Pq/i0YtbEjuBNsJp+AT+cSI=",
654 | "dev": true
655 | },
656 | "eslint-plugin-react": {
657 | "version": "6.7.1",
658 | "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-6.7.1.tgz",
659 | "integrity": "sha1-Gvlq6lRYVoJRV9l8G1DVqPtkpac=",
660 | "dev": true,
661 | "requires": {
662 | "doctrine": "1.5.0",
663 | "jsx-ast-utils": "1.4.1"
664 | }
665 | },
666 | "eslint-plugin-standard": {
667 | "version": "2.0.1",
668 | "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-2.0.1.tgz",
669 | "integrity": "sha1-NYlpn/nJF/LCX3apFmh/ZBw2n/M=",
670 | "dev": true
671 | },
672 | "espree": {
673 | "version": "3.5.4",
674 | "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz",
675 | "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==",
676 | "dev": true,
677 | "requires": {
678 | "acorn": "5.7.1",
679 | "acorn-jsx": "3.0.1"
680 | }
681 | },
682 | "esprima": {
683 | "version": "4.0.1",
684 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
685 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
686 | "dev": true
687 | },
688 | "esrecurse": {
689 | "version": "4.2.1",
690 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
691 | "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
692 | "dev": true,
693 | "requires": {
694 | "estraverse": "4.2.0"
695 | }
696 | },
697 | "estraverse": {
698 | "version": "4.2.0",
699 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
700 | "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
701 | "dev": true
702 | },
703 | "esutils": {
704 | "version": "2.0.2",
705 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
706 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
707 | "dev": true
708 | },
709 | "etch": {
710 | "version": "0.9.0",
711 | "resolved": "https://registry.npmjs.org/etch/-/etch-0.9.0.tgz",
712 | "integrity": "sha1-CSJpiPLO4GkL3yCMyyXkFNXfrV8="
713 | },
714 | "ev-store": {
715 | "version": "7.0.0",
716 | "resolved": "https://registry.npmjs.org/ev-store/-/ev-store-7.0.0.tgz",
717 | "integrity": "sha1-GrDH+CE2UF3XSzHRdwHLK+bSZVg=",
718 | "dev": true,
719 | "requires": {
720 | "individual": "3.0.0"
721 | }
722 | },
723 | "event-emitter": {
724 | "version": "0.3.5",
725 | "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
726 | "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
727 | "dev": true,
728 | "requires": {
729 | "d": "1.0.0",
730 | "es5-ext": "0.10.46"
731 | }
732 | },
733 | "event-kit": {
734 | "version": "2.5.0",
735 | "resolved": "https://registry.npmjs.org/event-kit/-/event-kit-2.5.0.tgz",
736 | "integrity": "sha512-tUDxeNC9JzN2Tw/f8mLtksY34v1hHmaR7lV7X4p04XSjaeUhFMfzjF6Nwov9e0EKGEx63BaKcgXKxjpQaPo0wg==",
737 | "dev": true
738 | },
739 | "exit-hook": {
740 | "version": "1.1.1",
741 | "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
742 | "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
743 | "dev": true
744 | },
745 | "extend": {
746 | "version": "3.0.2",
747 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
748 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
749 | "dev": true,
750 | "optional": true
751 | },
752 | "extsprintf": {
753 | "version": "1.3.0",
754 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz",
755 | "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=",
756 | "dev": true
757 | },
758 | "fast-levenshtein": {
759 | "version": "2.0.6",
760 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
761 | "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
762 | "dev": true
763 | },
764 | "figures": {
765 | "version": "1.7.0",
766 | "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
767 | "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
768 | "dev": true,
769 | "requires": {
770 | "escape-string-regexp": "1.0.5",
771 | "object-assign": "4.1.1"
772 | }
773 | },
774 | "file-entry-cache": {
775 | "version": "2.0.0",
776 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz",
777 | "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=",
778 | "dev": true,
779 | "requires": {
780 | "flat-cache": "1.3.0",
781 | "object-assign": "4.1.1"
782 | }
783 | },
784 | "find-root": {
785 | "version": "1.1.0",
786 | "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz",
787 | "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==",
788 | "dev": true
789 | },
790 | "flat-cache": {
791 | "version": "1.3.0",
792 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz",
793 | "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=",
794 | "dev": true,
795 | "requires": {
796 | "circular-json": "0.3.3",
797 | "del": "2.2.2",
798 | "graceful-fs": "4.1.11",
799 | "write": "0.2.1"
800 | }
801 | },
802 | "forever-agent": {
803 | "version": "0.6.1",
804 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
805 | "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
806 | "dev": true,
807 | "optional": true
808 | },
809 | "form-data": {
810 | "version": "2.1.4",
811 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
812 | "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
813 | "dev": true,
814 | "optional": true,
815 | "requires": {
816 | "asynckit": "0.4.0",
817 | "combined-stream": "1.0.6",
818 | "mime-types": "2.1.19"
819 | }
820 | },
821 | "fs.realpath": {
822 | "version": "1.0.0",
823 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
824 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
825 | "dev": true
826 | },
827 | "generate-function": {
828 | "version": "2.0.0",
829 | "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.0.0.tgz",
830 | "integrity": "sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ=",
831 | "dev": true
832 | },
833 | "generate-object-property": {
834 | "version": "1.2.0",
835 | "resolved": "https://registry.npmjs.org/generate-object-property/-/generate-object-property-1.2.0.tgz",
836 | "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=",
837 | "dev": true,
838 | "requires": {
839 | "is-property": "1.0.2"
840 | }
841 | },
842 | "get-stdin": {
843 | "version": "5.0.1",
844 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-5.0.1.tgz",
845 | "integrity": "sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g=",
846 | "dev": true
847 | },
848 | "getpass": {
849 | "version": "0.1.7",
850 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
851 | "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
852 | "dev": true,
853 | "optional": true,
854 | "requires": {
855 | "assert-plus": "1.0.0"
856 | },
857 | "dependencies": {
858 | "assert-plus": {
859 | "version": "1.0.0",
860 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
861 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
862 | "dev": true,
863 | "optional": true
864 | }
865 | }
866 | },
867 | "glob": {
868 | "version": "7.1.1",
869 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz",
870 | "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=",
871 | "dev": true,
872 | "requires": {
873 | "fs.realpath": "1.0.0",
874 | "inflight": "1.0.6",
875 | "inherits": "2.0.3",
876 | "minimatch": "3.0.4",
877 | "once": "1.4.0",
878 | "path-is-absolute": "1.0.1"
879 | }
880 | },
881 | "global": {
882 | "version": "4.3.2",
883 | "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz",
884 | "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=",
885 | "dev": true,
886 | "requires": {
887 | "min-document": "2.19.0",
888 | "process": "0.5.2"
889 | }
890 | },
891 | "globals": {
892 | "version": "9.18.0",
893 | "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz",
894 | "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==",
895 | "dev": true
896 | },
897 | "globby": {
898 | "version": "5.0.0",
899 | "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz",
900 | "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=",
901 | "dev": true,
902 | "requires": {
903 | "array-union": "1.0.2",
904 | "arrify": "1.0.1",
905 | "glob": "7.1.1",
906 | "object-assign": "4.1.1",
907 | "pify": "2.3.0",
908 | "pinkie-promise": "2.0.1"
909 | }
910 | },
911 | "graceful-fs": {
912 | "version": "4.1.11",
913 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
914 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=",
915 | "dev": true
916 | },
917 | "graceful-readlink": {
918 | "version": "1.0.1",
919 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
920 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=",
921 | "dev": true
922 | },
923 | "grim": {
924 | "version": "2.0.2",
925 | "resolved": "https://registry.npmjs.org/grim/-/grim-2.0.2.tgz",
926 | "integrity": "sha512-Qj7hTJRfd87E/gUgfvM0YIH/g2UA2SV6niv6BYXk1o6w4mhgv+QyYM1EjOJQljvzgEj4SqSsRWldXIeKHz3e3Q==",
927 | "dev": true,
928 | "requires": {
929 | "event-kit": "2.5.0"
930 | }
931 | },
932 | "growl": {
933 | "version": "1.9.2",
934 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz",
935 | "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=",
936 | "dev": true
937 | },
938 | "har-schema": {
939 | "version": "1.0.5",
940 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
941 | "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
942 | "dev": true,
943 | "optional": true
944 | },
945 | "har-validator": {
946 | "version": "4.2.1",
947 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
948 | "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
949 | "dev": true,
950 | "optional": true,
951 | "requires": {
952 | "ajv": "4.11.8",
953 | "har-schema": "1.0.5"
954 | }
955 | },
956 | "has-ansi": {
957 | "version": "2.0.0",
958 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
959 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
960 | "dev": true,
961 | "requires": {
962 | "ansi-regex": "2.1.1"
963 | }
964 | },
965 | "has-flag": {
966 | "version": "1.0.0",
967 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
968 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=",
969 | "dev": true
970 | },
971 | "hawk": {
972 | "version": "3.1.3",
973 | "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
974 | "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
975 | "dev": true,
976 | "optional": true,
977 | "requires": {
978 | "boom": "2.10.1",
979 | "cryptiles": "2.0.5",
980 | "hoek": "2.16.3",
981 | "sntp": "1.0.9"
982 | }
983 | },
984 | "he": {
985 | "version": "1.1.1",
986 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz",
987 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=",
988 | "dev": true
989 | },
990 | "hoek": {
991 | "version": "2.16.3",
992 | "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
993 | "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
994 | "dev": true
995 | },
996 | "home-or-tmp": {
997 | "version": "2.0.0",
998 | "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
999 | "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=",
1000 | "dev": true,
1001 | "requires": {
1002 | "os-homedir": "1.0.2",
1003 | "os-tmpdir": "1.0.2"
1004 | }
1005 | },
1006 | "http-signature": {
1007 | "version": "1.1.1",
1008 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
1009 | "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
1010 | "dev": true,
1011 | "optional": true,
1012 | "requires": {
1013 | "assert-plus": "0.2.0",
1014 | "jsprim": "1.4.1",
1015 | "sshpk": "1.14.2"
1016 | }
1017 | },
1018 | "ignore": {
1019 | "version": "3.3.10",
1020 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz",
1021 | "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==",
1022 | "dev": true
1023 | },
1024 | "image-size": {
1025 | "version": "0.5.5",
1026 | "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
1027 | "integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
1028 | "dev": true,
1029 | "optional": true
1030 | },
1031 | "imurmurhash": {
1032 | "version": "0.1.4",
1033 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
1034 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
1035 | "dev": true
1036 | },
1037 | "individual": {
1038 | "version": "3.0.0",
1039 | "resolved": "https://registry.npmjs.org/individual/-/individual-3.0.0.tgz",
1040 | "integrity": "sha1-58pPhfiVewGHNPKFdQ3CLsL5hi0=",
1041 | "dev": true
1042 | },
1043 | "inflight": {
1044 | "version": "1.0.6",
1045 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1046 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
1047 | "dev": true,
1048 | "requires": {
1049 | "once": "1.4.0",
1050 | "wrappy": "1.0.2"
1051 | }
1052 | },
1053 | "inherits": {
1054 | "version": "2.0.3",
1055 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
1056 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
1057 | "dev": true
1058 | },
1059 | "inquirer": {
1060 | "version": "0.12.0",
1061 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
1062 | "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
1063 | "dev": true,
1064 | "requires": {
1065 | "ansi-escapes": "1.4.0",
1066 | "ansi-regex": "2.1.1",
1067 | "chalk": "1.1.3",
1068 | "cli-cursor": "1.0.2",
1069 | "cli-width": "2.2.0",
1070 | "figures": "1.7.0",
1071 | "lodash": "4.17.10",
1072 | "readline2": "1.0.1",
1073 | "run-async": "0.1.0",
1074 | "rx-lite": "3.1.2",
1075 | "string-width": "1.0.2",
1076 | "strip-ansi": "3.0.1",
1077 | "through": "2.3.8"
1078 | }
1079 | },
1080 | "interpret": {
1081 | "version": "1.1.0",
1082 | "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
1083 | "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=",
1084 | "dev": true
1085 | },
1086 | "is-fullwidth-code-point": {
1087 | "version": "1.0.0",
1088 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
1089 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
1090 | "dev": true,
1091 | "requires": {
1092 | "number-is-nan": "1.0.1"
1093 | }
1094 | },
1095 | "is-my-ip-valid": {
1096 | "version": "1.0.0",
1097 | "resolved": "https://registry.npmjs.org/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz",
1098 | "integrity": "sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ==",
1099 | "dev": true
1100 | },
1101 | "is-my-json-valid": {
1102 | "version": "2.19.0",
1103 | "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.19.0.tgz",
1104 | "integrity": "sha512-mG0f/unGX1HZ5ep4uhRaPOS8EkAY8/j6mDRMJrutq4CqhoJWYp7qAlonIPy3TV7p3ju4TK9fo/PbnoksWmsp5Q==",
1105 | "dev": true,
1106 | "requires": {
1107 | "generate-function": "2.0.0",
1108 | "generate-object-property": "1.2.0",
1109 | "is-my-ip-valid": "1.0.0",
1110 | "jsonpointer": "4.0.1",
1111 | "xtend": "4.0.1"
1112 | }
1113 | },
1114 | "is-object": {
1115 | "version": "1.0.1",
1116 | "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
1117 | "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=",
1118 | "dev": true
1119 | },
1120 | "is-path-cwd": {
1121 | "version": "1.0.0",
1122 | "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
1123 | "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
1124 | "dev": true
1125 | },
1126 | "is-path-in-cwd": {
1127 | "version": "1.0.1",
1128 | "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
1129 | "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
1130 | "dev": true,
1131 | "requires": {
1132 | "is-path-inside": "1.0.1"
1133 | }
1134 | },
1135 | "is-path-inside": {
1136 | "version": "1.0.1",
1137 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
1138 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
1139 | "dev": true,
1140 | "requires": {
1141 | "path-is-inside": "1.0.2"
1142 | }
1143 | },
1144 | "is-property": {
1145 | "version": "1.0.2",
1146 | "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz",
1147 | "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=",
1148 | "dev": true
1149 | },
1150 | "is-resolvable": {
1151 | "version": "1.1.0",
1152 | "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz",
1153 | "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==",
1154 | "dev": true
1155 | },
1156 | "is-typedarray": {
1157 | "version": "1.0.0",
1158 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
1159 | "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
1160 | "dev": true,
1161 | "optional": true
1162 | },
1163 | "isarray": {
1164 | "version": "1.0.0",
1165 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
1166 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
1167 | "dev": true
1168 | },
1169 | "isstream": {
1170 | "version": "0.1.2",
1171 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
1172 | "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
1173 | "dev": true,
1174 | "optional": true
1175 | },
1176 | "js-tokens": {
1177 | "version": "3.0.2",
1178 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz",
1179 | "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=",
1180 | "dev": true
1181 | },
1182 | "js-yaml": {
1183 | "version": "3.12.0",
1184 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz",
1185 | "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==",
1186 | "dev": true,
1187 | "requires": {
1188 | "argparse": "1.0.10",
1189 | "esprima": "4.0.1"
1190 | }
1191 | },
1192 | "jsbn": {
1193 | "version": "0.1.1",
1194 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
1195 | "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
1196 | "dev": true,
1197 | "optional": true
1198 | },
1199 | "json-schema": {
1200 | "version": "0.2.3",
1201 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
1202 | "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
1203 | "dev": true,
1204 | "optional": true
1205 | },
1206 | "json-stable-stringify": {
1207 | "version": "1.0.1",
1208 | "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
1209 | "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
1210 | "dev": true,
1211 | "requires": {
1212 | "jsonify": "0.0.0"
1213 | }
1214 | },
1215 | "json-stringify-safe": {
1216 | "version": "5.0.1",
1217 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
1218 | "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
1219 | "dev": true,
1220 | "optional": true
1221 | },
1222 | "json3": {
1223 | "version": "3.3.2",
1224 | "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz",
1225 | "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=",
1226 | "dev": true
1227 | },
1228 | "jsonify": {
1229 | "version": "0.0.0",
1230 | "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
1231 | "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
1232 | "dev": true
1233 | },
1234 | "jsonpointer": {
1235 | "version": "4.0.1",
1236 | "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.0.1.tgz",
1237 | "integrity": "sha1-T9kss04OnbPInIYi7PUfm5eMbLk=",
1238 | "dev": true
1239 | },
1240 | "jsprim": {
1241 | "version": "1.4.1",
1242 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz",
1243 | "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=",
1244 | "dev": true,
1245 | "optional": true,
1246 | "requires": {
1247 | "assert-plus": "1.0.0",
1248 | "extsprintf": "1.3.0",
1249 | "json-schema": "0.2.3",
1250 | "verror": "1.10.0"
1251 | },
1252 | "dependencies": {
1253 | "assert-plus": {
1254 | "version": "1.0.0",
1255 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
1256 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
1257 | "dev": true,
1258 | "optional": true
1259 | }
1260 | }
1261 | },
1262 | "jsx-ast-utils": {
1263 | "version": "1.4.1",
1264 | "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz",
1265 | "integrity": "sha1-OGchPo3Xm/Ho8jAMDPwe+xgsDfE=",
1266 | "dev": true
1267 | },
1268 | "less": {
1269 | "version": "2.7.3",
1270 | "resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz",
1271 | "integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==",
1272 | "dev": true,
1273 | "requires": {
1274 | "errno": "0.1.7",
1275 | "graceful-fs": "4.1.11",
1276 | "image-size": "0.5.5",
1277 | "mime": "1.6.0",
1278 | "mkdirp": "0.5.1",
1279 | "promise": "7.3.1",
1280 | "request": "2.81.0",
1281 | "source-map": "0.5.7"
1282 | }
1283 | },
1284 | "levn": {
1285 | "version": "0.3.0",
1286 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
1287 | "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
1288 | "dev": true,
1289 | "requires": {
1290 | "prelude-ls": "1.1.2",
1291 | "type-check": "0.3.2"
1292 | }
1293 | },
1294 | "lodash": {
1295 | "version": "4.17.10",
1296 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz",
1297 | "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==",
1298 | "dev": true
1299 | },
1300 | "lodash._baseassign": {
1301 | "version": "3.2.0",
1302 | "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz",
1303 | "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=",
1304 | "dev": true,
1305 | "requires": {
1306 | "lodash._basecopy": "3.0.1",
1307 | "lodash.keys": "3.1.2"
1308 | }
1309 | },
1310 | "lodash._basecopy": {
1311 | "version": "3.0.1",
1312 | "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
1313 | "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=",
1314 | "dev": true
1315 | },
1316 | "lodash._basecreate": {
1317 | "version": "3.0.3",
1318 | "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz",
1319 | "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=",
1320 | "dev": true
1321 | },
1322 | "lodash._getnative": {
1323 | "version": "3.9.1",
1324 | "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
1325 | "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=",
1326 | "dev": true
1327 | },
1328 | "lodash._isiterateecall": {
1329 | "version": "3.0.9",
1330 | "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
1331 | "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=",
1332 | "dev": true
1333 | },
1334 | "lodash.create": {
1335 | "version": "3.1.1",
1336 | "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz",
1337 | "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=",
1338 | "dev": true,
1339 | "requires": {
1340 | "lodash._baseassign": "3.2.0",
1341 | "lodash._basecreate": "3.0.3",
1342 | "lodash._isiterateecall": "3.0.9"
1343 | }
1344 | },
1345 | "lodash.isarguments": {
1346 | "version": "3.1.0",
1347 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
1348 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=",
1349 | "dev": true
1350 | },
1351 | "lodash.isarray": {
1352 | "version": "3.0.4",
1353 | "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
1354 | "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
1355 | "dev": true
1356 | },
1357 | "lodash.keys": {
1358 | "version": "3.1.2",
1359 | "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
1360 | "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
1361 | "dev": true,
1362 | "requires": {
1363 | "lodash._getnative": "3.9.1",
1364 | "lodash.isarguments": "3.1.0",
1365 | "lodash.isarray": "3.0.4"
1366 | }
1367 | },
1368 | "mime": {
1369 | "version": "1.6.0",
1370 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
1371 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
1372 | "dev": true,
1373 | "optional": true
1374 | },
1375 | "mime-db": {
1376 | "version": "1.35.0",
1377 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.35.0.tgz",
1378 | "integrity": "sha512-JWT/IcCTsB0Io3AhWUMjRqucrHSPsSf2xKLaRldJVULioggvkJvggZ3VXNNSRkCddE6D+BUI4HEIZIA2OjwIvg==",
1379 | "dev": true
1380 | },
1381 | "mime-types": {
1382 | "version": "2.1.19",
1383 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.19.tgz",
1384 | "integrity": "sha512-P1tKYHVSZ6uFo26mtnve4HQFE3koh1UWVkp8YUC+ESBHe945xWSoXuHHiGarDqcEZ+whpCDnlNw5LON0kLo+sw==",
1385 | "dev": true,
1386 | "requires": {
1387 | "mime-db": "1.35.0"
1388 | }
1389 | },
1390 | "min-document": {
1391 | "version": "2.19.0",
1392 | "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
1393 | "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
1394 | "dev": true,
1395 | "requires": {
1396 | "dom-walk": "0.1.1"
1397 | }
1398 | },
1399 | "minimatch": {
1400 | "version": "3.0.4",
1401 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
1402 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
1403 | "dev": true,
1404 | "requires": {
1405 | "brace-expansion": "1.1.11"
1406 | }
1407 | },
1408 | "minimist": {
1409 | "version": "0.0.8",
1410 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
1411 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
1412 | "dev": true
1413 | },
1414 | "mkdirp": {
1415 | "version": "0.5.1",
1416 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
1417 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
1418 | "dev": true,
1419 | "requires": {
1420 | "minimist": "0.0.8"
1421 | }
1422 | },
1423 | "mocha": {
1424 | "version": "3.5.3",
1425 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz",
1426 | "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==",
1427 | "dev": true,
1428 | "requires": {
1429 | "browser-stdout": "1.3.0",
1430 | "commander": "2.9.0",
1431 | "debug": "2.6.8",
1432 | "diff": "3.2.0",
1433 | "escape-string-regexp": "1.0.5",
1434 | "glob": "7.1.1",
1435 | "growl": "1.9.2",
1436 | "he": "1.1.1",
1437 | "json3": "3.3.2",
1438 | "lodash.create": "3.1.1",
1439 | "mkdirp": "0.5.1",
1440 | "supports-color": "3.1.2"
1441 | }
1442 | },
1443 | "ms": {
1444 | "version": "2.0.0",
1445 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1446 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
1447 | "dev": true
1448 | },
1449 | "mute-stream": {
1450 | "version": "0.0.5",
1451 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz",
1452 | "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=",
1453 | "dev": true
1454 | },
1455 | "natural-compare": {
1456 | "version": "1.4.0",
1457 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
1458 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
1459 | "dev": true
1460 | },
1461 | "next-tick": {
1462 | "version": "0.2.2",
1463 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-0.2.2.tgz",
1464 | "integrity": "sha1-ddpKkn7liH45BliABltzNkE7MQ0=",
1465 | "dev": true
1466 | },
1467 | "number-is-nan": {
1468 | "version": "1.0.1",
1469 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
1470 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
1471 | "dev": true
1472 | },
1473 | "oauth-sign": {
1474 | "version": "0.8.2",
1475 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
1476 | "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
1477 | "dev": true,
1478 | "optional": true
1479 | },
1480 | "object-assign": {
1481 | "version": "4.1.1",
1482 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1483 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
1484 | "dev": true
1485 | },
1486 | "once": {
1487 | "version": "1.4.0",
1488 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1489 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
1490 | "dev": true,
1491 | "requires": {
1492 | "wrappy": "1.0.2"
1493 | }
1494 | },
1495 | "onetime": {
1496 | "version": "1.1.0",
1497 | "resolved": "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
1498 | "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
1499 | "dev": true
1500 | },
1501 | "optionator": {
1502 | "version": "0.8.2",
1503 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
1504 | "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
1505 | "dev": true,
1506 | "requires": {
1507 | "deep-is": "0.1.3",
1508 | "fast-levenshtein": "2.0.6",
1509 | "levn": "0.3.0",
1510 | "prelude-ls": "1.1.2",
1511 | "type-check": "0.3.2",
1512 | "wordwrap": "1.0.0"
1513 | }
1514 | },
1515 | "os-homedir": {
1516 | "version": "1.0.2",
1517 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
1518 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
1519 | "dev": true
1520 | },
1521 | "os-tmpdir": {
1522 | "version": "1.0.2",
1523 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1524 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
1525 | "dev": true
1526 | },
1527 | "path-is-absolute": {
1528 | "version": "1.0.1",
1529 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1530 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
1531 | "dev": true
1532 | },
1533 | "path-is-inside": {
1534 | "version": "1.0.2",
1535 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
1536 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
1537 | "dev": true
1538 | },
1539 | "path-parse": {
1540 | "version": "1.0.6",
1541 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
1542 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
1543 | "dev": true
1544 | },
1545 | "performance-now": {
1546 | "version": "0.2.0",
1547 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
1548 | "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
1549 | "dev": true,
1550 | "optional": true
1551 | },
1552 | "pify": {
1553 | "version": "2.3.0",
1554 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
1555 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
1556 | "dev": true
1557 | },
1558 | "pinkie": {
1559 | "version": "2.0.4",
1560 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
1561 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
1562 | "dev": true
1563 | },
1564 | "pinkie-promise": {
1565 | "version": "2.0.1",
1566 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
1567 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
1568 | "dev": true,
1569 | "requires": {
1570 | "pinkie": "2.0.4"
1571 | }
1572 | },
1573 | "pkg-config": {
1574 | "version": "1.1.1",
1575 | "resolved": "https://registry.npmjs.org/pkg-config/-/pkg-config-1.1.1.tgz",
1576 | "integrity": "sha1-VX7yLXPaPIg3EHdmxS6tq94pj+Q=",
1577 | "dev": true,
1578 | "requires": {
1579 | "debug-log": "1.0.1",
1580 | "find-root": "1.1.0",
1581 | "xtend": "4.0.1"
1582 | }
1583 | },
1584 | "pluralize": {
1585 | "version": "1.2.1",
1586 | "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz",
1587 | "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=",
1588 | "dev": true
1589 | },
1590 | "prelude-ls": {
1591 | "version": "1.1.2",
1592 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
1593 | "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
1594 | "dev": true
1595 | },
1596 | "process": {
1597 | "version": "0.5.2",
1598 | "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz",
1599 | "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=",
1600 | "dev": true
1601 | },
1602 | "process-nextick-args": {
1603 | "version": "2.0.0",
1604 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz",
1605 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==",
1606 | "dev": true
1607 | },
1608 | "progress": {
1609 | "version": "1.1.8",
1610 | "resolved": "https://registry.npmjs.org/progress/-/progress-1.1.8.tgz",
1611 | "integrity": "sha1-4mDHj2Fhzdmw5WzD4Khd4Xx6V74=",
1612 | "dev": true
1613 | },
1614 | "promise": {
1615 | "version": "7.3.1",
1616 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
1617 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
1618 | "dev": true,
1619 | "optional": true,
1620 | "requires": {
1621 | "asap": "2.0.6"
1622 | }
1623 | },
1624 | "prr": {
1625 | "version": "1.0.1",
1626 | "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
1627 | "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
1628 | "dev": true,
1629 | "optional": true
1630 | },
1631 | "punycode": {
1632 | "version": "1.4.1",
1633 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
1634 | "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
1635 | "dev": true,
1636 | "optional": true
1637 | },
1638 | "qs": {
1639 | "version": "6.4.0",
1640 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
1641 | "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
1642 | "dev": true,
1643 | "optional": true
1644 | },
1645 | "readable-stream": {
1646 | "version": "2.3.6",
1647 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz",
1648 | "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==",
1649 | "dev": true,
1650 | "requires": {
1651 | "core-util-is": "1.0.2",
1652 | "inherits": "2.0.3",
1653 | "isarray": "1.0.0",
1654 | "process-nextick-args": "2.0.0",
1655 | "safe-buffer": "5.1.2",
1656 | "string_decoder": "1.1.1",
1657 | "util-deprecate": "1.0.2"
1658 | }
1659 | },
1660 | "readline2": {
1661 | "version": "1.0.1",
1662 | "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz",
1663 | "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
1664 | "dev": true,
1665 | "requires": {
1666 | "code-point-at": "1.1.0",
1667 | "is-fullwidth-code-point": "1.0.0",
1668 | "mute-stream": "0.0.5"
1669 | }
1670 | },
1671 | "rechoir": {
1672 | "version": "0.6.2",
1673 | "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
1674 | "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
1675 | "dev": true,
1676 | "requires": {
1677 | "resolve": "1.8.1"
1678 | }
1679 | },
1680 | "request": {
1681 | "version": "2.81.0",
1682 | "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
1683 | "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
1684 | "dev": true,
1685 | "optional": true,
1686 | "requires": {
1687 | "aws-sign2": "0.6.0",
1688 | "aws4": "1.8.0",
1689 | "caseless": "0.12.0",
1690 | "combined-stream": "1.0.6",
1691 | "extend": "3.0.2",
1692 | "forever-agent": "0.6.1",
1693 | "form-data": "2.1.4",
1694 | "har-validator": "4.2.1",
1695 | "hawk": "3.1.3",
1696 | "http-signature": "1.1.1",
1697 | "is-typedarray": "1.0.0",
1698 | "isstream": "0.1.2",
1699 | "json-stringify-safe": "5.0.1",
1700 | "mime-types": "2.1.19",
1701 | "oauth-sign": "0.8.2",
1702 | "performance-now": "0.2.0",
1703 | "qs": "6.4.0",
1704 | "safe-buffer": "5.1.2",
1705 | "stringstream": "0.0.6",
1706 | "tough-cookie": "2.3.4",
1707 | "tunnel-agent": "0.6.0",
1708 | "uuid": "3.3.2"
1709 | }
1710 | },
1711 | "require-uncached": {
1712 | "version": "1.0.3",
1713 | "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz",
1714 | "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=",
1715 | "dev": true,
1716 | "requires": {
1717 | "caller-path": "0.1.0",
1718 | "resolve-from": "1.0.1"
1719 | }
1720 | },
1721 | "resolve": {
1722 | "version": "1.8.1",
1723 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
1724 | "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==",
1725 | "dev": true,
1726 | "requires": {
1727 | "path-parse": "1.0.6"
1728 | }
1729 | },
1730 | "resolve-from": {
1731 | "version": "1.0.1",
1732 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz",
1733 | "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=",
1734 | "dev": true
1735 | },
1736 | "restore-cursor": {
1737 | "version": "1.0.1",
1738 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
1739 | "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
1740 | "dev": true,
1741 | "requires": {
1742 | "exit-hook": "1.1.1",
1743 | "onetime": "1.1.0"
1744 | }
1745 | },
1746 | "rimraf": {
1747 | "version": "2.6.2",
1748 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz",
1749 | "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==",
1750 | "dev": true,
1751 | "requires": {
1752 | "glob": "7.1.1"
1753 | }
1754 | },
1755 | "run-async": {
1756 | "version": "0.1.0",
1757 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz",
1758 | "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=",
1759 | "dev": true,
1760 | "requires": {
1761 | "once": "1.4.0"
1762 | }
1763 | },
1764 | "run-parallel": {
1765 | "version": "1.1.9",
1766 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.9.tgz",
1767 | "integrity": "sha512-DEqnSRTDw/Tc3FXf49zedI638Z9onwUotBMiUFKmrO2sdFKIbXamXGQ3Axd4qgphxKB4kw/qP1w5kTxnfU1B9Q==",
1768 | "dev": true
1769 | },
1770 | "rx-lite": {
1771 | "version": "3.1.2",
1772 | "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz",
1773 | "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=",
1774 | "dev": true
1775 | },
1776 | "safe-buffer": {
1777 | "version": "5.1.2",
1778 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1779 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
1780 | "dev": true
1781 | },
1782 | "safer-buffer": {
1783 | "version": "2.1.2",
1784 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1785 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
1786 | "dev": true
1787 | },
1788 | "shelljs": {
1789 | "version": "0.7.8",
1790 | "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz",
1791 | "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
1792 | "dev": true,
1793 | "requires": {
1794 | "glob": "7.1.1",
1795 | "interpret": "1.1.0",
1796 | "rechoir": "0.6.2"
1797 | }
1798 | },
1799 | "slice-ansi": {
1800 | "version": "0.0.4",
1801 | "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
1802 | "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
1803 | "dev": true
1804 | },
1805 | "sntp": {
1806 | "version": "1.0.9",
1807 | "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
1808 | "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
1809 | "dev": true,
1810 | "optional": true,
1811 | "requires": {
1812 | "hoek": "2.16.3"
1813 | }
1814 | },
1815 | "source-map": {
1816 | "version": "0.5.7",
1817 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
1818 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
1819 | "dev": true,
1820 | "optional": true
1821 | },
1822 | "sprintf-js": {
1823 | "version": "1.0.3",
1824 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
1825 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
1826 | "dev": true
1827 | },
1828 | "sshpk": {
1829 | "version": "1.14.2",
1830 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz",
1831 | "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=",
1832 | "dev": true,
1833 | "optional": true,
1834 | "requires": {
1835 | "asn1": "0.2.4",
1836 | "assert-plus": "1.0.0",
1837 | "bcrypt-pbkdf": "1.0.2",
1838 | "dashdash": "1.14.1",
1839 | "ecc-jsbn": "0.1.2",
1840 | "getpass": "0.1.7",
1841 | "jsbn": "0.1.1",
1842 | "safer-buffer": "2.1.2",
1843 | "tweetnacl": "0.14.5"
1844 | },
1845 | "dependencies": {
1846 | "assert-plus": {
1847 | "version": "1.0.0",
1848 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
1849 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
1850 | "dev": true,
1851 | "optional": true
1852 | }
1853 | }
1854 | },
1855 | "standard": {
1856 | "version": "8.6.0",
1857 | "resolved": "https://registry.npmjs.org/standard/-/standard-8.6.0.tgz",
1858 | "integrity": "sha1-Y1Eyvnv7VnwpIQBfMPnjUOR1Kq0=",
1859 | "dev": true,
1860 | "requires": {
1861 | "eslint": "3.10.2",
1862 | "eslint-config-standard": "6.2.1",
1863 | "eslint-config-standard-jsx": "3.2.0",
1864 | "eslint-plugin-promise": "3.4.2",
1865 | "eslint-plugin-react": "6.7.1",
1866 | "eslint-plugin-standard": "2.0.1",
1867 | "standard-engine": "5.2.0"
1868 | }
1869 | },
1870 | "standard-engine": {
1871 | "version": "5.2.0",
1872 | "resolved": "https://registry.npmjs.org/standard-engine/-/standard-engine-5.2.0.tgz",
1873 | "integrity": "sha1-QAZgrlrM6K/U22D/IhSpGQrXkKM=",
1874 | "dev": true,
1875 | "requires": {
1876 | "deglob": "2.1.1",
1877 | "find-root": "1.1.0",
1878 | "get-stdin": "5.0.1",
1879 | "home-or-tmp": "2.0.0",
1880 | "minimist": "1.2.0",
1881 | "pkg-config": "1.1.1"
1882 | },
1883 | "dependencies": {
1884 | "minimist": {
1885 | "version": "1.2.0",
1886 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1887 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
1888 | "dev": true
1889 | }
1890 | }
1891 | },
1892 | "string-template": {
1893 | "version": "0.2.1",
1894 | "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz",
1895 | "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=",
1896 | "dev": true
1897 | },
1898 | "string-width": {
1899 | "version": "1.0.2",
1900 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
1901 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
1902 | "dev": true,
1903 | "requires": {
1904 | "code-point-at": "1.1.0",
1905 | "is-fullwidth-code-point": "1.0.0",
1906 | "strip-ansi": "3.0.1"
1907 | }
1908 | },
1909 | "string_decoder": {
1910 | "version": "1.1.1",
1911 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1912 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1913 | "dev": true,
1914 | "requires": {
1915 | "safe-buffer": "5.1.2"
1916 | }
1917 | },
1918 | "stringstream": {
1919 | "version": "0.0.6",
1920 | "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.6.tgz",
1921 | "integrity": "sha512-87GEBAkegbBcweToUrdzf3eLhWNg06FJTebl4BVJz/JgWy8CvEr9dRtX5qWphiynMSQlxxi+QqN0z5T32SLlhA==",
1922 | "dev": true,
1923 | "optional": true
1924 | },
1925 | "strip-ansi": {
1926 | "version": "3.0.1",
1927 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1928 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1929 | "dev": true,
1930 | "requires": {
1931 | "ansi-regex": "2.1.1"
1932 | }
1933 | },
1934 | "strip-bom": {
1935 | "version": "3.0.0",
1936 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
1937 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
1938 | "dev": true
1939 | },
1940 | "strip-json-comments": {
1941 | "version": "1.0.4",
1942 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-1.0.4.tgz",
1943 | "integrity": "sha1-HhX7ysl9Pumb8tc7TGVrCCu6+5E=",
1944 | "dev": true
1945 | },
1946 | "supports-color": {
1947 | "version": "3.1.2",
1948 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz",
1949 | "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=",
1950 | "dev": true,
1951 | "requires": {
1952 | "has-flag": "1.0.0"
1953 | }
1954 | },
1955 | "table": {
1956 | "version": "3.8.3",
1957 | "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz",
1958 | "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=",
1959 | "dev": true,
1960 | "requires": {
1961 | "ajv": "4.11.8",
1962 | "ajv-keywords": "1.5.1",
1963 | "chalk": "1.1.3",
1964 | "lodash": "4.17.10",
1965 | "slice-ansi": "0.0.4",
1966 | "string-width": "2.1.1"
1967 | },
1968 | "dependencies": {
1969 | "ansi-regex": {
1970 | "version": "3.0.0",
1971 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
1972 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
1973 | "dev": true
1974 | },
1975 | "is-fullwidth-code-point": {
1976 | "version": "2.0.0",
1977 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
1978 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
1979 | "dev": true
1980 | },
1981 | "string-width": {
1982 | "version": "2.1.1",
1983 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
1984 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
1985 | "dev": true,
1986 | "requires": {
1987 | "is-fullwidth-code-point": "2.0.0",
1988 | "strip-ansi": "4.0.0"
1989 | }
1990 | },
1991 | "strip-ansi": {
1992 | "version": "4.0.0",
1993 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
1994 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
1995 | "dev": true,
1996 | "requires": {
1997 | "ansi-regex": "3.0.0"
1998 | }
1999 | }
2000 | }
2001 | },
2002 | "text-table": {
2003 | "version": "0.2.0",
2004 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
2005 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
2006 | "dev": true
2007 | },
2008 | "through": {
2009 | "version": "2.3.8",
2010 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
2011 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
2012 | "dev": true
2013 | },
2014 | "tmp": {
2015 | "version": "0.0.31",
2016 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz",
2017 | "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=",
2018 | "dev": true,
2019 | "requires": {
2020 | "os-tmpdir": "1.0.2"
2021 | }
2022 | },
2023 | "tough-cookie": {
2024 | "version": "2.3.4",
2025 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz",
2026 | "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==",
2027 | "dev": true,
2028 | "optional": true,
2029 | "requires": {
2030 | "punycode": "1.4.1"
2031 | }
2032 | },
2033 | "tunnel-agent": {
2034 | "version": "0.6.0",
2035 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
2036 | "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
2037 | "dev": true,
2038 | "optional": true,
2039 | "requires": {
2040 | "safe-buffer": "5.1.2"
2041 | }
2042 | },
2043 | "tweetnacl": {
2044 | "version": "0.14.5",
2045 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
2046 | "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
2047 | "dev": true,
2048 | "optional": true
2049 | },
2050 | "type-check": {
2051 | "version": "0.3.2",
2052 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
2053 | "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
2054 | "dev": true,
2055 | "requires": {
2056 | "prelude-ls": "1.1.2"
2057 | }
2058 | },
2059 | "typedarray": {
2060 | "version": "0.0.6",
2061 | "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
2062 | "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
2063 | "dev": true
2064 | },
2065 | "uniq": {
2066 | "version": "1.0.1",
2067 | "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
2068 | "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=",
2069 | "dev": true
2070 | },
2071 | "user-home": {
2072 | "version": "2.0.0",
2073 | "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
2074 | "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
2075 | "dev": true,
2076 | "requires": {
2077 | "os-homedir": "1.0.2"
2078 | }
2079 | },
2080 | "util-deprecate": {
2081 | "version": "1.0.2",
2082 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
2083 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
2084 | "dev": true
2085 | },
2086 | "uuid": {
2087 | "version": "3.3.2",
2088 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
2089 | "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==",
2090 | "dev": true,
2091 | "optional": true
2092 | },
2093 | "verror": {
2094 | "version": "1.10.0",
2095 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz",
2096 | "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=",
2097 | "dev": true,
2098 | "optional": true,
2099 | "requires": {
2100 | "assert-plus": "1.0.0",
2101 | "core-util-is": "1.0.2",
2102 | "extsprintf": "1.3.0"
2103 | },
2104 | "dependencies": {
2105 | "assert-plus": {
2106 | "version": "1.0.0",
2107 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
2108 | "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
2109 | "dev": true,
2110 | "optional": true
2111 | }
2112 | }
2113 | },
2114 | "virtual-dom": {
2115 | "version": "2.1.1",
2116 | "resolved": "https://registry.npmjs.org/virtual-dom/-/virtual-dom-2.1.1.tgz",
2117 | "integrity": "sha1-gO2i1IG57eDASRGM78tKBfIdE3U=",
2118 | "dev": true,
2119 | "requires": {
2120 | "browser-split": "0.0.1",
2121 | "error": "4.4.0",
2122 | "ev-store": "7.0.0",
2123 | "global": "4.3.2",
2124 | "is-object": "1.0.1",
2125 | "next-tick": "0.2.2",
2126 | "x-is-array": "0.1.0",
2127 | "x-is-string": "0.1.0"
2128 | }
2129 | },
2130 | "wordwrap": {
2131 | "version": "1.0.0",
2132 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
2133 | "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
2134 | "dev": true
2135 | },
2136 | "wrappy": {
2137 | "version": "1.0.2",
2138 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
2139 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
2140 | "dev": true
2141 | },
2142 | "write": {
2143 | "version": "0.2.1",
2144 | "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz",
2145 | "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=",
2146 | "dev": true,
2147 | "requires": {
2148 | "mkdirp": "0.5.1"
2149 | }
2150 | },
2151 | "x-is-array": {
2152 | "version": "0.1.0",
2153 | "resolved": "https://registry.npmjs.org/x-is-array/-/x-is-array-0.1.0.tgz",
2154 | "integrity": "sha1-3lIBcdR7P0FvVYfWKbidJrEtwp0=",
2155 | "dev": true
2156 | },
2157 | "x-is-string": {
2158 | "version": "0.1.0",
2159 | "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz",
2160 | "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=",
2161 | "dev": true
2162 | },
2163 | "xtend": {
2164 | "version": "4.0.1",
2165 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
2166 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
2167 | "dev": true
2168 | }
2169 | }
2170 | }
2171 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "welcome",
3 | "version": "0.36.9",
4 | "description": "Welcome users to Atom with useful information",
5 | "main": "./lib/main",
6 | "atomTestRunner": "atom-mocha-test-runner",
7 | "repository": "https://github.com/atom/welcome",
8 | "license": "MIT",
9 | "engines": {
10 | "atom": ">0.50.0"
11 | },
12 | "scripts": {
13 | "lint": "standard",
14 | "test": "atom --test test/*.test.js"
15 | },
16 | "consumedServices": {
17 | "metrics-reporter": {
18 | "versions": {
19 | "^1.1.0": "consumeReporter"
20 | }
21 | }
22 | },
23 | "configSchema": {
24 | "showOnStartup": {
25 | "type": "boolean",
26 | "default": true,
27 | "description": "Show welcome panes with useful information when opening a new Atom window."
28 | }
29 | },
30 | "deserializers": {
31 | "WelcomeView": "createWelcomeView",
32 | "GuideView": "createGuideView",
33 | "ConsentView": "createConsentView"
34 | },
35 | "dependencies": {
36 | "etch": "0.9.0"
37 | },
38 | "devDependencies": {
39 | "atom-mocha-test-runner": "^1.0.0",
40 | "standard": "^8.6.0"
41 | },
42 | "standard": {
43 | "globals": [
44 | "atom"
45 | ]
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/styles/welcome.less:
--------------------------------------------------------------------------------
1 | @import "octicon-mixins";
2 | @import "ui-variables";
3 |
4 | .welcome {
5 | display: flex;
6 | font-size: 1.25em;
7 | line-height: 1.4;
8 | color: @text-color;
9 | background-color: @base-background-color;
10 | overflow-x: auto;
11 |
12 | // Overrides ----------------------
13 |
14 | p {
15 | line-height: inherit;
16 | }
17 |
18 | a {
19 | color: @text-color-info;
20 | }
21 |
22 | ul {
23 | padding-left: 2em;
24 | }
25 |
26 | label {
27 | margin-top: 1em;
28 | font-weight: normal;
29 | }
30 |
31 | .input-checkbox {
32 | margin-top: -.2em;
33 | margin-right: .5em;
34 | }
35 |
36 | // Components ----------------------
37 |
38 | &-container {
39 | width: 100%;
40 | max-width: 580px;
41 | min-width: 300px;
42 | margin: auto;
43 | padding: 3em 2em;
44 | }
45 |
46 | &-header {
47 | margin: 0 0 3em 0;
48 | }
49 |
50 | &-logo {
51 | display: block;
52 | width: 100%;
53 | max-width: 280px;
54 | margin: 0 auto 2em auto;
55 | color: @text-color-highlight;
56 | }
57 |
58 | &-title {
59 | font-size: 1.4em;
60 | text-align: center;
61 | line-height: 1.3;
62 | margin: 1em 0;
63 | }
64 |
65 | &-panel {
66 | }
67 |
68 | &-card {
69 | margin: 1em 0;
70 |
71 | border-radius: @component-border-radius*2;
72 | border: 1px solid @base-border-color;
73 | background-color: lighten(@base-background-color, 3%);
74 | }
75 |
76 | &-summary {
77 | padding: 1em 1.5em;
78 | font-size: 1.1em;
79 | font-weight: 300;
80 | line-height: 1.4;
81 | cursor: pointer;
82 | &:hover {
83 | color: lighten(@text-color, 4%);
84 | }
85 | &::-webkit-details-marker {
86 | display: none
87 | }
88 | &:before {
89 | width: 20px;
90 | color: @text-color-subtle;
91 | details[open] & {
92 | color: @text-color-highlight;
93 | }
94 | }
95 | details[open] & {
96 | color: @text-color-highlight;
97 | }
98 | }
99 |
100 | &-highlight {
101 | color: @text-color-highlight;
102 | }
103 |
104 | &-detail {
105 | border-top: 1px solid @base-border-color;
106 | padding: 1.5em;
107 | .welcome-note {
108 | margin-bottom: 0;
109 | }
110 | .btn {
111 | margin-top: @component-padding/3;
112 | margin-bottom: @component-padding/3;
113 | }
114 | }
115 |
116 | &-img {
117 | display: block;
118 | max-width: 100%;
119 | border-radius: 3px;
120 | margin: 0 0 1em 0;
121 | border: 1px solid @base-border-color;
122 | }
123 |
124 | &-consent {
125 | margin-top: 3em;
126 |
127 | &-choices {
128 | display: flex;
129 | flex-direction: row;
130 | flex-wrap: wrap;
131 | margin: 1em -1em;
132 |
133 | button {
134 | width: 100%
135 | }
136 |
137 | div {
138 | margin: .5em 1em;
139 | flex: 1;
140 | }
141 |
142 | .welcome-note {
143 | margin-top: 1em;
144 | }
145 | }
146 | }
147 |
148 | &-key {
149 | display: inline-block;
150 | padding: .3em .4em;
151 | font-size: .8em;
152 | line-height: 1;
153 | border-radius: 3px;
154 | color: @text-color-highlight;
155 | border: 1px solid @text-color-subtle;
156 | background: hsla(0,0%,0%,.1);
157 | }
158 |
159 | &-love {
160 | color: @text-color-subtle;
161 | a { color: @text-color-subtle; }
162 |
163 | .icon::before {
164 | // Make these octicons look good inlined with text
165 | position: relative;
166 | top: 4px;
167 | width: auto;
168 | margin-right: 0;
169 | font-size: 1.5em;
170 | }
171 |
172 | .icon-logo-github::before {
173 | top: 2px;
174 | font-size: 3.6em;
175 | vertical-align: top;
176 | }
177 | }
178 |
179 | &-note {
180 | font-size: .86em;
181 | color: @text-color-subtle;
182 |
183 | .icon {
184 | margin-left: 5px;
185 | }
186 |
187 | .icon::before {
188 | margin-right: 0;
189 | }
190 | }
191 |
192 | &-footer {
193 | margin-top: 1em;
194 | text-align: center;
195 | }
196 | }
197 |
--------------------------------------------------------------------------------
/test/helpers.js:
--------------------------------------------------------------------------------
1 | /** @babel */
2 |
3 | export function conditionPromise (predicate) {
4 | return new Promise((resolve) => {
5 | setInterval(() => {
6 | if (predicate()) resolve()
7 | }, 100)
8 | })
9 | }
10 |
--------------------------------------------------------------------------------
/test/welcome.test.js:
--------------------------------------------------------------------------------
1 | /** @babel */
2 | /* global beforeEach, afterEach, describe, it */
3 |
4 | import WelcomePackage from '../lib/welcome-package'
5 | import assert from 'assert'
6 | import {conditionPromise} from './helpers'
7 |
8 | describe('Welcome', () => {
9 | let welcomePackage
10 |
11 | beforeEach(() => {
12 | welcomePackage = new WelcomePackage()
13 | atom.config.set('welcome.showOnStartup', true)
14 | })
15 |
16 | afterEach(() => {
17 | atom.reset()
18 | })
19 |
20 | describe("when `core.telemetryConsent` is 'undecided'", () => {
21 | beforeEach(async () => {
22 | atom.config.set('core.telemetryConsent', 'undecided')
23 | await welcomePackage.activate()
24 | })
25 |
26 | it('opens the telemetry consent pane and the welcome panes', () => {
27 | const panes = atom.workspace.getCenter().getPanes()
28 | assert.equal(panes.length, 2)
29 | assert.equal(panes[0].getItems()[0].getTitle(), 'Telemetry Consent')
30 | assert.equal(panes[0].getItems()[1].getTitle(), 'Welcome')
31 | assert.equal(panes[1].getItems()[0].getTitle(), 'Welcome Guide')
32 | })
33 | })
34 |
35 | describe('when `core.telemetryConsent` is not `undecided`', () => {
36 | beforeEach(async () => {
37 | atom.config.set('core.telemetryConsent', 'no')
38 | await welcomePackage.activate()
39 | })
40 |
41 | describe('when activated for the first time', () =>
42 | it('shows the welcome panes', () => {
43 | const panes = atom.workspace.getCenter().getPanes()
44 | assert.equal(panes.length, 2)
45 | assert.equal(panes[0].getItems()[0].getTitle(), 'Welcome')
46 | assert.equal(panes[1].getItems()[0].getTitle(), 'Welcome Guide')
47 | })
48 | )
49 |
50 | describe('the welcome:show command', () => {
51 | it('shows the welcome buffer', async () => {
52 | atom.workspace.getCenter().getPanes().map(pane => pane.destroy())
53 | assert(!atom.workspace.getActivePaneItem())
54 |
55 | const workspaceElement = atom.views.getView(atom.workspace)
56 | atom.commands.dispatch(workspaceElement, 'welcome:show')
57 |
58 | await conditionPromise(() => atom.workspace.getActivePaneItem())
59 |
60 | const panes = atom.workspace.getCenter().getPanes()
61 | assert.equal(panes.length, 2)
62 | assert.equal(panes[0].getItems()[0].getTitle(), 'Welcome')
63 | })
64 | })
65 |
66 | describe('deserializing the pane items', () => {
67 | describe('when GuideView is deserialized', () => {
68 | it('remembers open sections', () => {
69 | const panes = atom.workspace.getCenter().getPanes()
70 | const guideView = panes[1].getItems()[0]
71 |
72 | guideView.element.querySelector('details[data-section="snippets"]').setAttribute('open', 'open')
73 | guideView.element.querySelector('details[data-section="init-script"]').setAttribute('open', 'open')
74 |
75 | const state = guideView.serialize()
76 |
77 | assert.deepEqual(state.openSections, ['init-script', 'snippets'])
78 |
79 | const newGuideView = welcomePackage.createGuideView(state)
80 | assert(!newGuideView.element.querySelector('details[data-section="packages"]').hasAttribute('open'))
81 | assert(newGuideView.element.querySelector('details[data-section="snippets"]').hasAttribute('open'))
82 | assert(newGuideView.element.querySelector('details[data-section="init-script"]').hasAttribute('open'))
83 | })
84 | })
85 | })
86 |
87 | describe('reporting events', () => {
88 | let panes, guideView, reportedEvents
89 | beforeEach(() => {
90 | panes = atom.workspace.getCenter().getPanes()
91 | guideView = panes[1].getItems()[0]
92 | reportedEvents = []
93 |
94 | welcomePackage.reporterProxy.sendEvent = (...event) => { reportedEvents.push(event) }
95 | })
96 |
97 | describe('GuideView events', () => {
98 | it('captures expand and collapse events', () => {
99 | guideView.element.querySelector('details[data-section="packages"] summary').click()
100 | assert.deepEqual(reportedEvents, [['expand-packages-section']])
101 |
102 | guideView.element.querySelector('details[data-section="packages"]').setAttribute('open', 'open')
103 | guideView.element.querySelector('details[data-section="packages"] summary').click()
104 | assert.deepEqual(reportedEvents, [['expand-packages-section'], ['collapse-packages-section']])
105 | })
106 |
107 | it('captures button events', () => {
108 | for (const detailElement of Array.from(guideView.element.querySelector('details'))) {
109 | reportedEvents.length = 0
110 |
111 | const sectionName = detailElement.dataset.section
112 | const eventName = `clicked-${sectionName}-cta`
113 | const primaryButton = detailElement.querySelector('.btn-primary')
114 | if (primaryButton) {
115 | primaryButton.click()
116 | assert.deepEqual(reportedEvents, [[eventName]])
117 | }
118 | }
119 | })
120 | })
121 | })
122 |
123 | describe('when the reporter changes', () =>
124 | it('sends all queued events', () => {
125 | welcomePackage.reporterProxy.queue.length = 0
126 |
127 | const reporter1 = {
128 | addCustomEvent (category, event) {
129 | this.reportedEvents.push({ category, ...event })
130 | },
131 | reportedEvents: []
132 | }
133 | const reporter2 = {
134 | addCustomEvent (category, event) {
135 | this.reportedEvents.push({ category, ...event })
136 | },
137 | reportedEvents: []
138 | }
139 |
140 | welcomePackage.reporterProxy.sendEvent('foo', 'bar', 10)
141 | welcomePackage.reporterProxy.sendEvent('foo2', 'bar2', 60)
142 | welcomePackage.reporterProxy.setReporter(reporter1)
143 |
144 | assert.deepEqual(reporter1.reportedEvents, [
145 | {category: 'welcome-v1', ea: 'foo', el: 'bar', ev: 10},
146 | {category: 'welcome-v1', ea: 'foo2', el: 'bar2', ev: 60}
147 | ])
148 |
149 | welcomePackage.consumeReporter(reporter2)
150 | assert.deepEqual(reporter2.reportedEvents, [])
151 | })
152 | )
153 | })
154 | })
155 |
--------------------------------------------------------------------------------