From 94bef2772a3b7759ed9813ad34b641fd5dac7e41 Mon Sep 17 00:00:00 2001 From: Jim Cramer Date: Sun, 18 Aug 2019 19:57:47 +0200 Subject: [PATCH 01/22] Prepare for class 23 (WIP) --- .eslintrc.json | 2 +- .vscode/extensions.json | 10 + .vscode/settings.json | 3 +- Week1/MAKEME.md | 73 +- Week1/assets/hyf-github-error.png | Bin 10721 -> 10721 bytes Week1/assets/hyf-github.png | Bin 71234 -> 71234 bytes Week2/MAKEME.md | 84 ++- Week2/assets/week2.png | Bin 0 -> 51788 bytes Week3/MAKEME.md | 52 +- homework-classes/App.js | 95 +-- homework-classes/Contributor.js | 19 - homework-classes/Model.js | 50 ++ homework-classes/Observer.js | 11 + homework-classes/Repository.js | 33 - homework-classes/Subject.js | 23 + homework-classes/Util.js | 35 - homework-classes/View.js | 103 +++ homework-classes/hyf.png | Bin 6971 -> 9116 bytes homework-classes/index.html | 13 +- homework-classes/style.css | 134 +++- homework/hyf.png | Bin 6971 -> 9116 bytes homework/index.js | 20 +- package-lock.json | 1148 +++++++++++------------------ package.json | 17 +- prettier.config.js | 1 - 25 files changed, 934 insertions(+), 992 deletions(-) create mode 100644 .vscode/extensions.json create mode 100644 Week2/assets/week2.png delete mode 100644 homework-classes/Contributor.js create mode 100644 homework-classes/Model.js create mode 100644 homework-classes/Observer.js delete mode 100644 homework-classes/Repository.js create mode 100644 homework-classes/Subject.js delete mode 100644 homework-classes/Util.js create mode 100644 homework-classes/View.js diff --git a/.eslintrc.json b/.eslintrc.json index 53642f8ce..5a7dad200 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,5 +1,5 @@ { - "extends": ["airbnb", "prettier"], + "extends": ["airbnb-base", "prettier"], "plugins": ["prettier"], "env": { "browser": true, diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 000000000..469f36b11 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,10 @@ +{ + "recommendations": [ + "CoenraadS.bracket-pair-colorizer", + "dbaeumer.vscode-eslint", + "esbenp.prettier-vscode", + "ritwickdey.LiveServer", + "streetsidesoftware.code-spell-checker", + "techer.open-in-browser" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json index f9ecd22b9..4678924cf 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,6 +6,7 @@ "editor.tabSize": 2, "cSpell.words": [ "networkidle", - "tabindex" + "tabindex", + "whiteframe" ] } \ No newline at end of file diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index c09be166f..40c09779b 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -19,14 +19,12 @@ _This homework is more extensive and challenging than previous homework! Please You are going to write a _Single Page Application_ (SPA) that uses the [GitHub API](https://developer.github.com/guides/getting-started/). -This application should display information about the available [HYF GitHub repositories](https://github.com/hackyourfuture). The functionalities we would like to see in your application are as follows: +This application should display information about the available [HYF GitHub repositories](https://github.com/hackyourfuture). The functionalities we would like to see in your application in the first week are as follows: -- The user should be able to select a repository from a list of available repositories. -- The application should display high-level information about the selected repository and show a list of its contributors. -- When clicking on the name of the selected repository the GitHub page for the corresponding repository should be opened in a new browser tab. -- When clicking on a contributor, the GitHub page for the contributor should be opened in a new browser tab. +- The application should fetch repository information for the HYF GitHub account and display summary information for each repository. +- This list of repositories should be sorted alphabetically by repository name. -Figure 1 below shows an example of what your application could look like. Note that this is just an example. If you find it boring or unimaginative, please improve on it! On the other hand, a simpler version is OK too, so long as you implement the expected functionality. +Figure 1 below shows an example of what your application could look like. ![UI Example](./assets/hyf-github.png) @@ -48,11 +46,7 @@ If you open this URL in the browser (_try it!_) you will receive JSON data about The returned JSON data contains some basic information about each repository, such as `name`, `full_name`, `description` etc. There are also many properties that contain URLs that can be used to obtain detail information about certain aspects of the repository. -#### 1.2.2 Get contributor information for a repository - -The JSON data that is returned from the initial request to get repository information includes a property named `contributors_url`. Use the value of this property to fetch a list of contributors. - -#### 1.2.3 GitHub API documentation +#### 1.2.2 GitHub API documentation You can find detailed information about the GitHub API by means of the link listed below. However, the documentation is very extensive and not easy to digest. For this homework it is not necessary to study the GitHub API documentation. We provide the link here for completeness. @@ -70,11 +64,11 @@ While you do not need to read this guide in detail, it is recommended that you r You will be working on the same application during the next three weeks. For each week you will need to create a new Git branch, as listed in the Table 1 below. -| Week | Branch | Assignment | -| :--: | ------- | -------------------------------------------------------------------------------------------------------------------------------- | -| 1 | `week1` | - Create a basic application using callbacks to handle network requests. | -| 2 | `week2` | Based on the `week1` branch:
- Refactor the callbacks to promises.
- Make the UI responsive. | -| 3 | `week3` | Based on the `week2` branch:
- Refactor the application to use ES6 Classes and async/await.
- Make the app ARIA-compliant. | +| Week | Branch | Assignment | +| :--: | ------- | ---------- | +| 1 | `week1` | - Create a basic application using callbacks to handle network requests. | +| 2 | `week2` | Based on the `week1` branch:
- Display details on a single repository and its contributors
- Refactor the callbacks to promises. | +| 3 | `week3` | Based on the `week2` branch:
- Refactor the application to use `fetch` and `async`/`await`.
- Reuse portions of the code to complete a provided Object Oriented (OOP) version of the application that uses ES6 classes. | Table 1. Homework schedule @@ -83,17 +77,13 @@ You will be working on the same application during the next three weeks. For eac 1. Fork the JavaScript3 repository (_this repository_) to your own GitHub account. 2. Clone the fork to your laptop. 3. Open the newly created `JavaScript3` folder from the cloned repository in VSCode. -4. Install the following extension in VSCode: - - **Prettier - Code formatter**. - -5. Open a Terminal window in VSCode and type the following command to install Prettier and ESLint tools as required for the homework: +4. Open a Terminal window in VSCode and type the following command to install Prettier and ESLint tools as required for the homework: ``` npm install ``` -6. Create a new branch for the week 1 homework with the following command: +5. Create a new branch for the week 1 homework with the following command: ``` git checkout -b week1 @@ -135,37 +125,23 @@ _**Do not change or delete any files outside of the `homework` folder!**_ | `createAndAppend` | A utility function for easily creating and appending HTML elements. | | `main` | Contains the start-up code for the application. | - `index.js` also contains a constant with the URL for the HYF repositories as listed in section 2.2.1: + `index.js` also contains a constant with the URL required for fetching information about the HYF repositories: ```js const HYF_REPOS_URL = 'https://api.github.com/orgs/HackYourFuture/repos?per_page=100'; ``` -3. Open the `index.html` file in your browser. Notice that it produces the same JSON output that you saw previously when you opened the URL directly in the browser. +3. Open the `index.html` file in your browser. You will see an unordered list with the names of the HYF repositories. -4. Review the `main()` function in `index.js` and examine how this code renders the JSON output in the browser by means of a `pre` HTML element (for demonstration purposes). +4. Review the `main()` function in `index.js` and examine how this code fetches the JSON data and calls renders the data as unordered list in the web page. ### 1.6 Week 1 Assignment -The assignment is to produce an application similar to the one illustrated in Figure 1 above. - -It should include the following components: +1. The assignment is to produce an application similar to the one illustrated in Figure 1 above. -1. An HTML `select` element from which the user can select a HYF repository. This `select` element must be populated with `option` elements, one for each HYF repository. -2. A left-hand column that displays basic information about the selected repository. -3. A right-hand column that displays a list of contributors to the repository. +2. You should render network errors to the DOM (see Figure 2 below for an example). Do not use `console.log` as regular users will not see the console output. Use the predefined `alert-error` class from `style.css` to style your error. - > In case you run out of time, you can also do the contributors list in week 2. - -**Functional Requirements:** - -1. The list of repositories in the `select` element should be sorted (case-insensitive) on repository name. -2. At start-up your application should display information about the first repository as displayed in the `select` element. -3. When the user changes the selection, the information in the web page should be refreshed for the newly selected repository. -4. You should be able to click on the repository name of the selected repository to open a new browser tab with the GitHub page for that repository. -5. You should be able to click on a contributor to open a new browser tab with the GitHub page for that contributor. -6. You should render network errors to the DOM (see Figure 2 below for an example). Do not use `console.log` as regular users will not see the console output. Use the predefined `alert-error` class from `style.css` to style your error. -7. Your UI should be responsive. Try it with Chrome Developer Tools in the browser, using a mobile phone format and a tablet format, portrait and landscape. If necessary, you can also do this work in week 2. +3. Your UI should be responsive. Try it with Chrome Developer Tools in the browser, using a mobile phone format and a tablet format, portrait and landscape. If necessary, you can also do this work in week 2. ![Error rendering](./assets/hyf-github-error.png) @@ -183,27 +159,18 @@ It should include the following components: **Hints:** -- Add one `option` element per repository to the `select` element, where each `option` element has the array index of the repository as its `value` attribute and the name of the repository as its text content: - - ```html - - ``` - * To sort the list repositories use [`.sort()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) and [`.localeCompare()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare). * Use CSS media queries and [Flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/) to make the UI responsive. * To force a `404` network error so that you can test the rendering of errors, change the URL to make an invalid GitHub request, e.g. append an `x` to `orgs`: `orgsx`. + ### 1.7 Handing in your homework If necessary, review the instructions how to [Hand in homework](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/homework_pr.md) using GitHub pull request. -To test whether your code will be accepted when you submit your homework as a pull request you need to ensure that it does not contain ESLinr errors. Open a terminal window in VSCode and type the following command: +To test whether your code will be accepted when you submit your homework as a pull request you need to ensure that it does not contain ESLint errors. Open a terminal window in VSCode and type the following command: ``` npm test diff --git a/Week1/assets/hyf-github-error.png b/Week1/assets/hyf-github-error.png index 545c658f4b105f1dd36fdde8d9bdd4d276d3dcdf..707651dd359cbf0579e182f578f3e8ebd19feb9d 100644 GIT binary patch delta 3769 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 K`uo!M%6|j?Zv+Vd delta 3769 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 diff --git a/Week1/assets/hyf-github.png b/Week1/assets/hyf-github.png index bfc5ac470b0c62063272656b3254e2b336ef365f..393bc02886d86fd70b222759bc862f24ff8fe565 100644 GIT binary patch delta 41537 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 delta 41537 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 1. Example User Interface using [Material Design](https://material.io/guidelines/) principles. -The homework for week 2 will build on the work you did in week 1. You will create a new branch based on the `week1` branch. +The web page should include the following components: -1. Make sure that you committed all changes in the week 1 version of your homework. -2. Create a new `week2` branch: +1. An HTML `select` element from which the user can select a HYF repository. This `select` element must be populated with `option` elements, one for each HYF repository. +2. A left-hand column that displays basic information about the selected repository. +3. A right-hand column that displays a list of contributors to the repository. - ``` - git checkout -b week2 - ``` +**Functional Requirements:** + +1. The list of repositories in the `select` element should be sorted (case-insensitive) on repository name. +2. At start-up your application should display information about the first repository as displayed in the `select` element. +3. When the user changes the selection, the information in the web page should be refreshed for the newly selected repository. +4. You should be able to click on the repository name of the selected repository to open a new browser tab with the GitHub page for that repository. +5. You should be able to click on a contributor to open a new browser tab with the GitHub page for that contributor. +6. Your UI should be responsive. Try it with Chrome Developer Tools in the browser, using a mobile phone format and a tablet format, portrait and landscape. + +**Code modifications:** + +**`index.js`** + +- Modify this file as required to meet the functional requirements of the assignment. +- Convert the callbacks to promises. + +**`style.css`** + +- Add your own styling. + +**Hints:** + +- Add one `option` element per repository to the `select` element, where each `option` element has the array index of the repository as its `value` attribute and the name of the repository as its text content: -### 3.2 Assignment + ```html + + ``` -You will continue to work on the files `index.js` and (possibly) `style.css`. +* To sort the list repositories use [`.sort()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort) and [`.localeCompare()`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare). -- Complete your GitHub app code from the previous week, if needed, to meet the requirements from that week's assignment. -- Replace all asynchronous callbacks (e.g. as used with `XMLHttpRequest`) by ES6 promises. -- Beautify your app's styling. -- If not yet completed in week 1, make your app responsive (use CSS media queries and [Flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/)). +* Use CSS media queries and [Flexbox](https://css-tricks.com/snippets/css/a-guide-to-flexbox/) to make the UI responsive. -### 3.3 Handing in your homework +### Handing in your homework If necessary, review the instructions how to [Hand in homework](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/homework_pr.md) using GitHub pull request. -To test whether your code will be accepted when you submit your homework as a pull request you need to ensure that it does not contain ESLinr errors. Open a terminal window in VSCode and type the following command: +To test whether your code will be accepted when you submit your homework as a pull request you need to ensure that it does not contain ESLint errors. Open a terminal window in VSCode and type the following command: ``` npm test diff --git a/Week2/assets/week2.png b/Week2/assets/week2.png new file mode 100644 index 0000000000000000000000000000000000000000..0a3be59cd247a69c63ec77f237e7e618d4467d79 GIT binary patch literal 51788 zcmd43byU<}^frp3f=CF`DIkKRAl*nw=gj6e&_w) zgI?!iD-4YO6$Ke7Z6A}p#iyT)0G~N;!RO@{eA%itjGrF~e}07h6o-ZWk+!;-WIO%X zgENIJ-}r~(q^^>wu#oss?jgZHM?}QLj~)?YD?FEa`sjo7cw(TM&Gy+66ny7C(o%=i zK_sh=8#cC@)=w^`?Wj5hdZya@Ua4^vNy_{y-$L0}T=c?L!=@{A-bMabb12m^xZN@caMiA^D^)An9^D zsnoJUxppTo59T-5;x2k*w5462|d3b#F!*`o4P3GU=E5pHPA43=#vIM^}WyUAqbxhjc85e1c! zKP=}NLRkrh@bQDzfWwe{gIu==+%CZMaL;@Ru_p3}e}v{*z41`N2-tw5b};dJ`nnj$ zH2b(V2;X_FwP{qW$3^Aex?!4=D@J>-HXR~A?{F_Fal?#5XKj04cppyMVB`58XRw*_ z<2kR=2Wlid9KKYWKn6SYb#BU=y$#yR?Y=U;;|v0;l}bt^GWEg&w2bZ)11^{Xg?slG z&Z%7v!_te?lulc34UK#+b_J1oqEDv9vOB7$JpK6At&GI5S1-+hd1@6re1d<8*7wnYO6t( zO&)+FzIxb3sgLUQm7R+2N7pnypBtw?t&ca}y`-ezZ1|g80egmgx%qEf@pn!YUgk}I zUlB+l4Zd39PJeFOGYFe3#2NyceA~$n-?N*d0JH)Ojr6O^09XQ3+#ruk&(ey;a>aTR zfM|=VE|n>O&!`++ep+sT^@pvy?ynyOQ%}a`Sb6plaPyCv+fv}%=f%V$#g_PTp@U<7%WY~8&(C47h)ZX0dAgrFidj;V=8O>1E8gG-^K%|?^tmGgo zcypl3?H|{=XrhmE?IIi*-{AEo$RA-WIDPqPS(?gPzZt)HMJW-uQBMnIQubUPAq+ch6V)l;!+9i@=1l|Lu&x3=SF7%BAR1I~ld3ho*2Ir2SS5{gv~5#{g?dZVf@G)G!+ zYo9ja+7ni5)))0MV+SV@%e!Jij<~$>*qAMjXd&C@V9D^z6UsWg-Nu@>oloiLEBsc1 zF{Bi?cYFMAsL##Srpr1BSu|h49_zT=fabed*(dP<8#&w zBlVHhYxyB;Peb99OFF&A)+PjcN#t638t-rombfyJREgN#Beh%VlHFL5o2j$r0 za>XBobtHlP10a~T&%8Ludbf`^xwm-yZA?y@#SLwou$rycjVS;L??B>r4%v~A7IkqkU|b1n6-bd| zBXE(ps{6>-^;(&bx(^2obB>K{+wbrZ;%*OXmc&{b#;@n%vxpJ2-hL#M=gE?)D`HH& zrYDRXe~&mAUIbs{4Kvu1`KkcQENz#{6V89pO_v8s(ZfEGhx7_=J9@+=Yr~&T#VQy) z-4}uN=;k(XEh?Q=FK3reDNuRSS2P;vA zdhO_@|5)|hlM8xtv&bfkkvI0$q5fbsyj4^y#1hpgOOrE!P#yDl*f z&SmEx+jpNWk-FBgy&B|i#>z38hL5F^gK}UvSjsJG2@U7^<#FIvBhSW^pa9L~3gX@% zJ;x$rH9rwRRk?9OS)te=mI0Q@oRC$y67R!)B8&gomiz|F#&tWkm`-6a+?6R zdiRRGO1A1ETMEC4-fz-9u6!GTztX%#OuU$lI=)fWcnvI`&wGl^HKc>N{Eh#CC`!A0 zabhY*e_(`hRndCH?G^C4LF$}y5ng+4*j=tqV|I1C>1}LG(yGkct^v0 zxR9=o*VMPLt&5ikO~8dMl!kdXR1o$7Q>z`kqrm!V|IytxdrWbDvc!V$i z18tOHXn-ilBu{G6WH8+4dvevv>T`Z=%P1_YRDt(rrxZL@B*!>w=tYv#vMOoa&#e*f zyOCj2c~(M8`|ciN@;)s0v1=7ieZkZ%6Iv1hn*3+FJvz+(x9CwY)9)4G{EPn}=K90` zx5%;TOXtcrYJH!5JHAlcmp6l}qOX2NpdlP(xx|6f4Y|7UPLNQ57uh4e|#EDA&`rbLxt=Dw zb63y(wD*D~E~akFq|yK0Oy~OB%PF{?M+Z92O!J^&tr2`$V0?Bk_Ty488rH{;LKcGY zw$&Y4`zhDNh8fWnZr?5Y#2qg=Ei~T|5fb9XGA;(c>jAQiv_8!=t=tAsZ09`Wn9^ZR_nI3-PX=W&AmZ&NdXYG^svdDb@U-Y$DoN93d*Huabd z2@K|-J%<6{>;=GbE?}9DpoeD-5N2_zB9Nh6=-f3s(IYIjec#2Ht@VO-HE_Y9+YD+j zv6h_0|MkMKzkc)NzQ0M4wV?0A>COx8!xyHfHIR5ezV{I7SgOhZl~+U*r+;4pVQASk z(wqbgj#;tRUOQCJj-%hDxX>5+Pu{awf6x^Ge**>PcETU9TQqyiasW2Y(_4yNFYR3U zG`gupg$CJU$4M7ck}p5m@`4V^d+_vm4%*#ZgtPyfnCEM^R59I?EpY1iIQqa|zU9QV zV?pOW^rT~cSkhW=0W4X@p~|n6J__}575d(<6Qy9wV(@TT58f>KUp#%MHYy%;7j4NG zI=%^f%jt1aOTlr@5cHzh{vp3G&5zPN|8dal)>ThGsH+c+L968_sm;p+{$;MC!?gd_ zost?Ye?ZEGl{9kKmXT>N#VQ&-w?98mPYA$?4q<3XLYYyw_Nf)(92u~Ne;?T_*bEC; zpNig}2%nxn9cz>Rtk8Fg(Q&#<-_SijiD>Tqe%SEe09*G^VEwu!(W+hDdn4YKbfLFq zXcx+zaAAt>rG0GTW;&5D+V>s0VakA$Ap6!$>-!}i`_tFDJh1J=)ZNUDe#FaJI;j4y z!JO8EYF6S?IkZjWJ<|iCT`Suy;HIfg?tKeSHvBpN$t;~;GOr;6?;82{dJ9b=iiT5(%={Sd^>epjhw>PCHD z*5e2(kv{bQ{^?5M>gh(pG;@MJ^G=ZE7yIEaF+m}@M!Zt@T82{apOc#(P0A9iErBWV z`~iX)=^`~@P??ny8CfhcPvgCC>|COa({Du-CG+suhZ>@XOF}||WJM2@SDliI3axI< z>gLU%2IdgGNin^p;B|F<{SvURgRsQ4SgHZIN3E3?k25ewo7a~o`pi{7`Z_fChLlaW zg1Ga+w_za~fK!8vj&Bg*e$gw)$!&12^Saw$zuw!15Az$-_MfB?K3YR{IaL_zBHhi% zR|8A8-q$GSGC|+ZcyxXH@Y^|v`?`~ls=)rPI>p9FndTnxM|<~`uKTepyM<@7JBx`L^cYi)8Hj^mt4NLZi&59V6}tI12uJz0aa0#yWo;_ ztbwN5!FsQoIrM^`eZ4R(nkYGF=g(AG42?s*Rft-9ipffAJRPus8?~%4}ly0VC((dtOW*dp!6%l)Y zV+p7yE4YW@`tSU+&l%GoqAd@S?P-3Dw0_Uce3Zs83i&iO))z-Y*rLfy|1k=y-s^Sc z(Y!@da8_7AV3gF8`2sBHsrvMhquEC}=mCjdBQQEBaQdN|I2h`fI_<GuSX>GbfXTftv8 zza#K2J$o9&qDipMWMyO+bvP7p5Mxfl8W$Tlg#0QGYF$V<>wO;A7R(<`t9`?*JCqYbOb3^UBVYBn&*?t^dM2ttI zs_n5E2-~DV93}Op*2f%kMCg49lu087x8D3rqKIYNG`oH1=n

yYR!c>hm$${Gy*N9&8XDjZ!65Rw_ciO4 z0&aFLEIenv__Nv_t*>({#yj`xE&E==WFBy2C{3B&xkGWnzEKCWENz0#Jwmk4zVlFkwA zUE)Mh&#vxEf;BeYy)nJloYs7`DnyjD`0Y^YQxyIS4d+#4vCtj@wK(UEa7cSZ{%+_S zF5bPJcnZ{2mGzB;1m2r>)!K>%2Gu6MG)9*tE%!%>7iF8elLW^N_ATFxu1g9EHe#TP zioN@YLEDN*VPJ4@2<(Btz*yzfz(+*aind)cZ;In-Ma_C>M7IU7bV^BSGjy@pn_Oiy zl(>YaYv~ZLZ6?2| zypqx#xM_@it9|v)xZLTBUY$2}F#h#dZw(FfZMj~GCAIsW9-ejAu^{m6fGn&mwBazA z$4SkC7#JSJ5ORgz?e8Za7blKG zizmAOF6s_0y+`YkEtdk66Bg{o)5UJp?R6bosX}uWa5r9Z;`c2J>xic=TTI`dXBr*WBCNn29fqV6ysrW=%FRy~JIbo7vs+uqhLB(6-tKNnYKpCmouZ+D4Ut!foH9vbFwA+LF zI7vtr2nkSgSy6J!bGN8T54?{ONFInoHx(5ujzh>RfnKf&aCZm;~Lq@38Pp8iO=Vl3`;QmS7? z>df*6iV+(X9gIBIsiWyB&yQYTtgLi&bp8{}c6k5psn*E*JjN>kJ>x?S?L9m?e5`+Yb*8W^Xi^TEM;a8OWq*Wp?nQa`5QB q{eMOe|IHi!$Di^1?!}AeXDJlZH8z|Z3FM~O3k6wKnM$dzKmQAHWO%^< diff --git a/homework-classes/index.html b/homework-classes/index.html index 2d1fc8fa7..99c41b9af 100644 --- a/homework-classes/index.html +++ b/homework-classes/index.html @@ -13,15 +13,18 @@ Codestin Search App - + -

- - - + + + + diff --git a/homework-classes/style.css b/homework-classes/style.css index a8985a8a5..83ea60355 100644 --- a/homework-classes/style.css +++ b/homework-classes/style.css @@ -1,3 +1,133 @@ +body { + margin: 0 auto; + background-color: #f8f8f8; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, + Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + color: rgb(0, 0, 0, 87%); +} + +#main-container { + display: flex; + flex-direction: column; + align-items: stretch; + margin: 0 4px; +} + +@media (min-width: 960px) { + body { + width: 960px; + } + #main-container { + flex-direction: row; + align-items: flex-start; + margin: 0; + } +} + +.header { + color: white; + background-color: #3f51b5; + padding: 8px 16px; + display: flex; + flex-direction: row; + align-items: center; +} + +.repo-select { + height: 32px; + margin: 0 16px; +} + +.repo-container, +.contributors-container { + background-color: white; + flex: 1; + margin: 8px 4px; +} + +.card-container { + padding: 16px; +} + +.contributor-header { + font-size: 0.8rem; + color: rgb(0, 0, 0, 54%); + padding: 16px; +} + +.contributor-list { + list-style-type: none; + padding: 0; + margin: 0; +} + +.contributor-item { + border-bottom: solid 1px rgb(0, 0, 0, 12%); + padding: 16px; + display: flex; + flex-direction: row; + align-items: center; + text-decoration: none; +} + +.contributor-item:hover { + background-color: #eee; +} + +.contributor-avatar { + border-radius: 3px; + margin-right: 16px; +} + +.contributor-data { + flex: 1; + display: flex; + flex-direction: row; + justify-content: space-between; + align-content: center; +} + +.contributor-badge { + font-size: 12px; + padding: 2px 8px; + line-height: 1rem; + background-color: gray; + color: white; + border-radius: 4px; +} + +table { + table-layout: fixed; + color: rgb(0, 0, 0, 81%); +} + +td, +th { + vertical-align: top; +} + +th { + width: 100px; + min-width: 100px; + max-width: 100px; +} + +.whiteframe { + border: none; + border-radius: 2px; + background-color: #fff; + box-shadow: 0 1px 8px 0 rgba(0, 0, 0, 0.2), 0 3px 4px 0 rgba(0, 0, 0, 0.14), + 0 3px 3px -2px rgba(0, 0, 0, 0.12); +} + +.alert { + padding: 0.75rem 1.25rem; + margin: 4px 0; + border-radius: 0.25rem; + flex: 1; +} + .alert-error { - color: red; -} \ No newline at end of file + color: #721c24; + background-color: #f8d7da; +} diff --git a/homework/hyf.png b/homework/hyf.png index a4626c91cc28dd92f3a8843aa3919c472d609984..76bc5a13b4a53ea97a6c09ca5fe399f40ab20e4e 100644 GIT binary patch literal 9116 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 GkN*WepL25n literal 6971 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

yYR!c>hm$${Gy*N9&8XDjZ!65Rw_ciO4 z0&aFLEIenv__Nv_t*>({#yj`xE&E==WFBy2C{3B&xkGWnzEKCWENz0#Jwmk4zVlFkwA zUE)Mh&#vxEf;BeYy)nJloYs7`DnyjD`0Y^YQxyIS4d+#4vCtj@wK(UEa7cSZ{%+_S zF5bPJcnZ{2mGzB;1m2r>)!K>%2Gu6MG)9*tE%!%>7iF8elLW^N_ATFxu1g9EHe#TP zioN@YLEDN*VPJ4@2<(Btz*yzfz(+*aind)cZ;In-Ma_C>M7IU7bV^BSGjy@pn_Oiy zl(>YaYv~ZLZ6?2| zypqx#xM_@it9|v)xZLTBUY$2}F#h#dZw(FfZMj~GCAIsW9-ejAu^{m6fGn&mwBazA z$4SkC7#JSJ5ORgz?e8Za7blKG zizmAOF6s_0y+`YkEtdk66Bg{o)5UJp?R6bosX}uWa5r9Z;`c2J>xic=TTI`dXBr*WBCNn29fqV6ysrW=%FRy~JIbo7vs+uqhLB(6-tKNnYKpCmouZ+D4Ut!foH9vbFwA+LF zI7vtr2nkSgSy6J!bGN8T54?{ONFInoHx(5ujzh>RfnKf&aCZm;~Lq@38Pp8iO=Vl3`;QmS7? z>df*6iV+(X9gIBIsiWyB&yQYTtgLi&bp8{}c6k5psn*E*JjN>kJ>x?S?L9m?e5`+Yb*8W^Xi^TEM;a8OWq*Wp?nQa`5QB q{eMOe|IHi!$Di^1?!}AeXDJlZH8z|Z3FM~O3k6wKnM$dzKmQAHWO%^< diff --git a/homework/index.js b/homework/index.js index d150b6609..3886cbac9 100644 --- a/homework/index.js +++ b/homework/index.js @@ -19,8 +19,7 @@ function createAndAppend(name, parent, options = {}) { const elem = document.createElement(name); parent.appendChild(elem); - Object.keys(options).forEach(key => { - const value = options[key]; + Object.entries(options).forEach(([key, value]) => { if (key === 'text') { elem.textContent = value; } else { @@ -30,17 +29,26 @@ return elem; } + function renderRepoDetails(repo, ul) { + createAndAppend('li', ul, { text: repo.name }); + } + function main(url) { - fetchJSON(url, (err, repositories) => { + fetchJSON(url, (err, repos) => { const root = document.getElementById('root'); if (err) { - createAndAppend('div', root, { text: err.message, class: 'alert-error' }); + createAndAppend('div', root, { + text: err.message, + class: 'alert-error', + }); return; } - createAndAppend('pre', root, { text: JSON.stringify(repositories, null, 2) }); + const ul = createAndAppend('ul', root); + repos.forEach(repo => renderRepoDetails(repo, ul)); }); } - const HYF_REPOS_URL = 'https://api.github.com/orgs/HackYourFuture/repos?per_page=100'; + const HYF_REPOS_URL = + 'https://api.github.com/orgs/HackYourFuture/repos?per_page=100'; window.onload = () => main(HYF_REPOS_URL); } diff --git a/package-lock.json b/package-lock.json index aff021598..9219dda64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,19 +5,17 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", - "dev": true, + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "requires": { "@babel/highlight": "^7.0.0" } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "requires": { "chalk": "^2.0.0", "esutils": "^2.0.2", @@ -25,22 +23,19 @@ } }, "acorn": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.0.4.tgz", - "integrity": "sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg==", - "dev": true + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", + "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" }, "acorn-jsx": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", - "dev": true + "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==" }, "ajv": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.5.tgz", - "integrity": "sha512-7q7gtRQDJSyuEHjuVgHoUa2VuemFiCMrfQc9Tc08XTAc4Zj/5U1buQJ0HU6i7fKjXU09SVgSmxa4sLvuvS8Iyg==", - "dev": true, + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "requires": { "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", @@ -49,22 +44,22 @@ } }, "ansi-escapes": { - "version": "3.1.0", - "resolved": "http://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", - "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", - "dev": true + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.2.1.tgz", + "integrity": "sha512-Cg3ymMAdN10wOk/VYfLV7KCQyv7EDirJ64500sU7n9UlmioEtDuU5Gd+hj73hXSU/ex7tHJSssmyftDdkMLO8Q==", + "requires": { + "type-fest": "^0.5.2" + } }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", - "dev": true + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -73,88 +68,47 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, "requires": { "sprintf-js": "~1.0.2" } }, - "aria-query": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz", - "integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=", - "dev": true, - "requires": { - "ast-types-flow": "0.0.7", - "commander": "^2.11.0" - } - }, "array-includes": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", - "dev": true, "requires": { "define-properties": "^1.1.2", "es-abstract": "^1.7.0" } }, - "ast-types-flow": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz", - "integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0=", - "dev": true - }, - "axobject-query": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz", - "integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==", - "dev": true, - "requires": { - "ast-types-flow": "0.0.7" - } + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" }, "balanced-match": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, - "caller-path": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", - "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", - "dev": true, - "requires": { - "callsites": "^0.2.0" - } - }, "callsites": { - "version": "0.2.0", - "resolved": "http://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", - "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", - "dev": true + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", - "dev": true, + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -164,35 +118,25 @@ "chardet": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "circular-json": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", - "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", - "dev": true + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" } }, "cli-width": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", - "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", - "dev": true + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" }, "color-convert": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -200,51 +144,46 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "commander": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz", - "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", - "dev": true + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "confusing-browser-globals": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/confusing-browser-globals/-/confusing-browser-globals-1.0.8.tgz", + "integrity": "sha512-lI7asCibVJ6Qd3FGU7mu4sfG4try4LX3+GVS+Gv8UlrEf2AeW57piecapnog2UHZSbcX/P/1UDWVaTsblowlZg==" }, "contains-path": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", - "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", - "dev": true + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=" }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", "semver": "^5.5.0", "shebang-command": "^1.2.0", "which": "^1.2.9" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, - "damerau-levenshtein": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz", - "integrity": "sha1-AxkcQyy27qFou3fzpV/9zLiXhRQ=", - "dev": true - }, "debug": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.0.tgz", - "integrity": "sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg==", - "dev": true, + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", "requires": { "ms": "^2.1.1" } @@ -252,60 +191,54 @@ "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "define-properties": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, "requires": { "object-keys": "^1.0.12" } }, "doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "requires": { "esutils": "^2.0.2" } }, "emoji-regex": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz", - "integrity": "sha512-PAHp6TxrCy7MGMFidro8uikr+zlJJKJ/Q6mm2ExZ7HwkyR9lSVFfE3kt36qcwa24BQL7y0G9axycGjK1A/0uNQ==", - "dev": true + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, "es-abstract": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", - "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", - "dev": true, + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", + "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", "requires": { - "es-to-primitive": "^1.1.1", + "es-to-primitive": "^1.2.0", "function-bind": "^1.1.1", - "has": "^1.0.1", - "is-callable": "^1.1.3", - "is-regex": "^1.0.4" + "has": "^1.0.3", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-keys": "^1.0.12" } }, "es-to-primitive": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", - "dev": true, "requires": { "is-callable": "^1.1.4", "is-date-object": "^1.0.1", @@ -315,82 +248,66 @@ "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.9.0.tgz", - "integrity": "sha512-g4KWpPdqN0nth+goDNICNXGfJF7nNnepthp46CAlJoJtC5K/cLu3NgCM3AHu1CkJ5Hzt9V0Y0PBAO6Ay/gGb+w==", - "dev": true, + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.1.0.tgz", + "integrity": "sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==", "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.5.3", + "ajv": "^6.10.0", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", - "doctrine": "^2.1.0", - "eslint-scope": "^4.0.0", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", "eslint-utils": "^1.3.1", "eslint-visitor-keys": "^1.0.0", - "espree": "^4.0.0", + "espree": "^6.0.0", "esquery": "^1.0.1", "esutils": "^2.0.2", - "file-entry-cache": "^2.0.0", + "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", + "glob-parent": "^5.0.0", "globals": "^11.7.0", "ignore": "^4.0.6", + "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.1.0", - "is-resolvable": "^1.1.0", - "js-yaml": "^3.12.0", + "inquirer": "^6.4.1", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.5", + "lodash": "^4.17.14", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", - "pluralize": "^7.0.0", "progress": "^2.0.0", "regexpp": "^2.0.1", - "require-uncached": "^1.0.3", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", - "table": "^5.0.2", - "text-table": "^0.2.0" - } - }, - "eslint-config-airbnb": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb/-/eslint-config-airbnb-17.1.0.tgz", - "integrity": "sha512-R9jw28hFfEQnpPau01NO5K/JWMGLi6aymiF6RsnMURjTk+MqZKllCqGK/0tOvHkPi/NWSSOU2Ced/GX++YxLnw==", - "dev": true, - "requires": { - "eslint-config-airbnb-base": "^13.1.0", - "object.assign": "^4.1.0", - "object.entries": "^1.0.4" + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" } }, "eslint-config-airbnb-base": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.1.0.tgz", - "integrity": "sha512-XWwQtf3U3zIoKO1BbHh6aUhJZQweOwSt4c2JrPDg9FP3Ltv3+YfEv7jIDB8275tVnO/qOHbfuYg3kzw6Je7uWw==", - "dev": true, + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.0.0.tgz", + "integrity": "sha512-2IDHobw97upExLmsebhtfoD3NAKhV4H0CJWP3Uprd/uk+cHuWYOczPVxQ8PxLFUAw7o3Th1RAU8u1DoUpr+cMA==", "requires": { - "eslint-restricted-globals": "^0.1.1", + "confusing-browser-globals": "^1.0.7", "object.assign": "^4.1.0", - "object.entries": "^1.0.4" + "object.entries": "^1.1.0" } }, "eslint-config-prettier": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-3.3.0.tgz", - "integrity": "sha512-Bc3bh5bAcKNvs3HOpSi6EfGA2IIp7EzWcg2tS4vP7stnXu/J1opihHDM7jI9JCIckyIDTgZLSWn7J3HY0j2JfA==", - "dev": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-6.0.0.tgz", + "integrity": "sha512-vDrcCFE3+2ixNT5H83g28bO/uYAwibJxerXPj+E7op4qzBCsAV36QfvdAyVOoNxKAH2Os/e01T/2x++V0LPukA==", "requires": { "get-stdin": "^6.0.0" } @@ -399,7 +316,6 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", - "dev": true, "requires": { "debug": "^2.6.9", "resolve": "^1.5.0" @@ -409,7 +325,6 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -417,26 +332,23 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "eslint-module-utils": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", - "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", - "dev": true, + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", + "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", "requires": { "debug": "^2.6.8", - "pkg-dir": "^1.0.0" + "pkg-dir": "^2.0.0" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } @@ -444,43 +356,40 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, "eslint-plugin-import": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", - "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", - "dev": true, + "version": "2.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", + "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", "requires": { + "array-includes": "^3.0.3", "contains-path": "^0.1.0", - "debug": "^2.6.8", + "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "^0.3.1", - "eslint-module-utils": "^2.2.0", - "has": "^1.0.1", - "lodash": "^4.17.4", - "minimatch": "^3.0.3", + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.0", + "has": "^1.0.3", + "minimatch": "^3.0.4", + "object.values": "^1.1.0", "read-pkg-up": "^2.0.0", - "resolve": "^1.6.0" + "resolve": "^1.11.0" }, "dependencies": { "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, "requires": { "ms": "2.0.0" } }, "doctrine": { "version": "1.5.0", - "resolved": "http://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", - "dev": true, "requires": { "esutils": "^2.0.2", "isarray": "^1.0.0" @@ -489,84 +398,46 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, - "eslint-plugin-jsx-a11y": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.1.2.tgz", - "integrity": "sha512-7gSSmwb3A+fQwtw0arguwMdOdzmKUgnUcbSNlo+GjKLAQFuC2EZxWqG9XHRI8VscBJD5a8raz3RuxQNFW+XJbw==", - "dev": true, - "requires": { - "aria-query": "^3.0.0", - "array-includes": "^3.0.3", - "ast-types-flow": "^0.0.7", - "axobject-query": "^2.0.1", - "damerau-levenshtein": "^1.0.4", - "emoji-regex": "^6.5.1", - "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1" - } - }, "eslint-plugin-prettier": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.0.tgz", - "integrity": "sha512-4g11opzhqq/8+AMmo5Vc2Gn7z9alZ4JqrbZ+D4i8KlSyxeQhZHlmIrY8U9Akf514MoEhogPa87Jgkq87aZ2Ohw==", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.0.tgz", + "integrity": "sha512-XWX2yVuwVNLOUhQijAkXz+rMPPoCr7WFiAl8ig6I7Xn+pPVhDhzg4DxHpmbeb0iqjO9UronEA3Tb09ChnFVHHA==", "requires": { "prettier-linter-helpers": "^1.0.0" } }, - "eslint-plugin-react": { - "version": "7.11.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz", - "integrity": "sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw==", - "dev": true, - "requires": { - "array-includes": "^3.0.3", - "doctrine": "^2.1.0", - "has": "^1.0.3", - "jsx-ast-utils": "^2.0.1", - "prop-types": "^15.6.2" - } - }, - "eslint-restricted-globals": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz", - "integrity": "sha1-NfDVy8ZMLj7WLpO0saevBbp+1Nc=", - "dev": true - }, "eslint-scope": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", - "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", - "dev": true, + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" } }, "eslint-utils": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz", - "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==", - "dev": true + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.0.tgz", + "integrity": "sha512-7ehnzPaP5IIEh1r1tkjuIrxqhNkzUJa9z3R92tLJdZIVdWaczEhr3EbhGtsMrVxi1KeR8qA7Off6SWc5WNQqyQ==", + "requires": { + "eslint-visitor-keys": "^1.0.0" + } }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", - "dev": true + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" }, "espree": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", - "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", - "dev": true, + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.0.0.tgz", + "integrity": "sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==", "requires": { - "acorn": "^6.0.2", + "acorn": "^6.0.7", "acorn-jsx": "^5.0.0", "eslint-visitor-keys": "^1.0.0" } @@ -574,14 +445,12 @@ "esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" }, "esquery": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", - "dev": true, "requires": { "estraverse": "^4.0.0" } @@ -590,28 +459,24 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", - "dev": true, "requires": { "estraverse": "^4.1.0" } }, "estraverse": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "esutils": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -621,97 +486,86 @@ "fast-deep-equal": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", - "dev": true + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-diff": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", - "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", - "dev": true + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==" }, "fast-json-stable-stringify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.0.0.tgz", + "integrity": "sha512-HKri+WoWoUgr83pehn/SIgLOMZ9nAWC6dcGj26RY2R4F50u4+RTUz0RCrUlOV3nKRAICW1UGzyb+kcX2qK1S/g==", "requires": { "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", - "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", - "dev": true, + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "requires": { - "flat-cache": "^1.2.1", - "object-assign": "^4.0.1" + "flat-cache": "^2.0.1" } }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" + "locate-path": "^2.0.0" } }, "flat-cache": { - "version": "1.3.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz", - "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", - "dev": true, + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "requires": { - "circular-json": "^0.3.1", - "graceful-fs": "^4.1.2", - "rimraf": "~2.6.2", - "write": "^0.2.1" + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" } }, + "flatted": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "function-bind": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" }, "get-stdin": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", - "dev": true + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==" }, "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "dev": true, + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -721,23 +575,28 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.0.0.tgz", + "integrity": "sha512-Z2RwiujPRGluePM6j699ktJYxmPpJKCfpGA13jz2hmFZC7gKetzrWvg5KN3+OsIFmydGyZ1AVwERCq1w/ZZwRg==", + "requires": { + "is-glob": "^4.0.1" + } + }, "globals": { - "version": "11.9.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.9.0.tgz", - "integrity": "sha512-5cJVtyXWH8PiJPVLZzzoIizXx944O4OmRro5MWKx5fT4MgcN7OfaMutPeaTdJCCURwbWdhhcCWcKIffPnmTzBg==", - "dev": true + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "graceful-fs": { - "version": "4.1.15", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", - "dev": true + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { "function-bind": "^1.1.1" } @@ -745,26 +604,22 @@ "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, "has-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", - "dev": true + "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=" }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", - "dev": true + "version": "2.8.4", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.4.tgz", + "integrity": "sha512-pzXIvANXEFrc5oFFXRMkbLPQ2rXRoDERwDLyrcUxGhaZhgP54BBSl9Oheh7Vv0T090cszWBxPjkQQ5Sq1PbBRQ==" }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -772,111 +627,106 @@ "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" + }, + "import-fresh": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.1.0.tgz", + "integrity": "sha512-PpuksHKGt8rXfWEr9m9EHIpgyyaltBy8+eF6GJM0QCAxMgxCfucMF3mjecK2QsJr0amJW7gTqh5/wht0z2UhEQ==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" } }, "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, "inquirer": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", - "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", - "dev": true, + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.5.1.tgz", + "integrity": "sha512-uxNHBeQhRXIoHWTSNYUFhQVrHYFThIt6IVo2fFmSe8aBwdR3/w6b58hJpiL/fMukFkvGzjg+hSxFtwvVmKZmXw==", "requires": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", + "ansi-escapes": "^4.2.1", + "chalk": "^2.4.2", + "cli-cursor": "^3.1.0", "cli-width": "^2.0.0", - "external-editor": "^3.0.0", - "figures": "^2.0.0", - "lodash": "^4.17.10", - "mute-stream": "0.0.7", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", "run-async": "^2.2.0", - "rxjs": "^6.1.0", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", + "rxjs": "^6.4.0", + "string-width": "^4.1.0", + "strip-ansi": "^5.1.0", "through": "^2.3.6" } }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "http://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "^1.0.0" - } + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, "is-callable": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", - "dev": true + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" }, "is-date-object": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "requires": { + "is-extglob": "^2.1.1" + } }, "is-promise": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", - "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", - "dev": true + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" }, "is-regex": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", - "dev": true, "requires": { "has": "^1.0.1" } }, - "is-resolvable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", - "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", - "dev": true - }, "is-symbol": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", - "dev": true, "requires": { "has-symbols": "^1.0.0" } @@ -884,26 +734,22 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" }, "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "3.13.1", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, "requires": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -912,29 +758,17 @@ "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", - "dev": true - }, - "jsx-ast-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz", - "integrity": "sha1-6AGxs5mF4g//yHtA43SAgOLcrH8=", - "dev": true, - "requires": { - "array-includes": "^3.0.3" - } + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -942,9 +776,8 @@ }, "load-json-file": { "version": "2.0.0", - "resolved": "http://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, "requires": { "graceful-fs": "^4.1.2", "parse-json": "^2.2.0", @@ -956,118 +789,89 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, "requires": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" - }, - "dependencies": { - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - } } }, "lodash": { "version": "4.17.15", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } + "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } }, "minimist": { "version": "0.0.8", - "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" }, "mkdirp": { "version": "0.5.1", - "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, "requires": { "minimist": "0.0.8" } }, "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", - "dev": true + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" }, "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", - "dev": true, + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "requires": { "hosted-git-info": "^2.1.4", - "is-builtin-module": "^1.0.0", + "resolve": "^1.10.0", "semver": "2 || 3 || 4 || 5", "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + } } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, "object-keys": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", - "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, "object.assign": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", - "dev": true, "requires": { "define-properties": "^1.1.2", "function-bind": "^1.1.1", @@ -1076,40 +880,47 @@ } }, "object.entries": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.0.4.tgz", - "integrity": "sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8=", - "dev": true, + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz", + "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.6.1", - "function-bind": "^1.1.0", - "has": "^1.0.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" + } + }, + "object.values": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", + "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", - "dev": true, + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "requires": { - "mimic-fn": "^1.0.0" + "mimic-fn": "^2.1.0" } }, "optionator": { "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.4", @@ -1121,15 +932,13 @@ }, "os-tmpdir": { "version": "1.0.2", - "resolved": "http://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" }, "p-limit": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, "requires": { "p-try": "^1.0.0" } @@ -1138,7 +947,6 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, "requires": { "p-limit": "^1.1.0" } @@ -1146,144 +954,97 @@ "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } }, "parse-json": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, "requires": { "error-ex": "^1.2.0" } }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" }, "path-is-absolute": { "version": "1.0.1", - "resolved": "http://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" }, "path-parse": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" }, "path-type": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, "requires": { "pify": "^2.0.0" } }, "pify": { "version": "2.3.0", - "resolved": "http://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" }, "pkg-dir": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", - "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", - "dev": true, + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "requires": { - "find-up": "^1.0.0" + "find-up": "^2.1.0" } }, - "pluralize": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", - "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", - "dev": true - }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prettier": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.15.2.tgz", - "integrity": "sha512-YgPLFFA0CdKL4Eg2IHtUSjzj/BWgszDHiNQAe0VAIBse34148whfdzLagRL+QiKS+YfK5ftB6X4v/MBw8yCoug==", - "dev": true + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.18.2.tgz", + "integrity": "sha512-OeHeMc0JhFE9idD4ZdtNibzY0+TPHSpSSb9h8FqtP+YnoZZ1sl8Vc9b1sasjfymH3SonAF4QcA2+mzHPhMvIiw==" }, "prettier-linter-helpers": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", - "dev": true, "requires": { "fast-diff": "^1.1.2" } }, "progress": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.1.tgz", - "integrity": "sha512-OE+a6vzqazc+K6LxJrX5UPyKFvGnL5CYmq2jFGNIBWHpc4QyE49/YOumcrpQFJpfejmvRtbJzgO1zPmMCqlbBg==", - "dev": true - }, - "prop-types": { - "version": "15.6.2", - "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.2.tgz", - "integrity": "sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ==", - "dev": true, - "requires": { - "loose-envify": "^1.3.1", - "object-assign": "^4.1.1" - } + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, "requires": { "load-json-file": "^2.0.0", "normalize-package-data": "^2.3.2", @@ -1294,87 +1055,58 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, "requires": { "find-up": "^2.0.0", "read-pkg": "^2.0.0" - }, - "dependencies": { - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - } } }, "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true - }, - "require-uncached": { - "version": "1.0.3", - "resolved": "http://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", - "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", - "dev": true, - "requires": { - "caller-path": "^0.1.0", - "resolve-from": "^1.0.0" - } + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" }, "resolve": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", - "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", - "dev": true, + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", + "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", "requires": { - "path-parse": "^1.0.5" + "path-parse": "^1.0.6" } }, "resolve-from": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", - "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", - "dev": true + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "requires": { - "onetime": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "rimraf": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", - "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", - "dev": true, + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", - "dev": true, "requires": { "is-promise": "^2.1.0" } }, "rxjs": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.3.tgz", - "integrity": "sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw==", - "dev": true, + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", "requires": { "tslib": "^1.9.0" } @@ -1382,20 +1114,17 @@ "safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "semver": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz", - "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==", - "dev": true + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "shebang-command": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -1403,29 +1132,34 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "slice-ansi": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", - "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", "is-fullwidth-code-point": "^2.0.0" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + } } }, "spdx-correct": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.2.tgz", - "integrity": "sha512-q9hedtzyXHr5S0A1vEPoK/7l8NpfkFYTq6iCY+Pno2ZbdZR6WexZFtqeVGkGxW3TEJMN914Z55EnAGMmenlIQQ==", - "dev": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", + "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -1434,133 +1168,149 @@ "spdx-exceptions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true + "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" }, "spdx-expression-parse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, "requires": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.2.tgz", - "integrity": "sha512-qky9CVt0lVIECkEsYbNILVnPvycuEBkXoMFLRWsREkomQLevYhtRKC+R91a5TOAQ3bCMjikRwhyaRqj1VYatYg==", - "dev": true + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==" }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" }, "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "dev": true, + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.1.0.tgz", + "integrity": "sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==", "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^5.2.0" } }, "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "dev": true, + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "requires": { - "ansi-regex": "^3.0.0" + "ansi-regex": "^4.1.0" } }, "strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" }, "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==" }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } }, "table": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/table/-/table-5.1.0.tgz", - "integrity": "sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg==", - "dev": true, - "requires": { - "ajv": "^6.5.3", - "lodash": "^4.17.10", - "slice-ansi": "1.0.0", - "string-width": "^2.1.1" + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + } } }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", - "dev": true + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" }, "through": { "version": "2.3.8", - "resolved": "http://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "requires": { "os-tmpdir": "~1.0.2" } }, "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", - "dev": true + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" }, "type-check": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, "requires": { "prelude-ls": "~1.1.2" } }, + "type-fest": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.5.2.tgz", + "integrity": "sha512-DWkS49EQKVX//Tbupb9TFa19c7+MK1XmzkrZUR8TAktmE/DizXoaoJV6TZ/tSIPXipqNiRI6CyAe7x69Jb6RSw==" + }, "uri-js": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, "requires": { "punycode": "^2.1.0" } }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==" + }, "validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -1570,7 +1320,6 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -1578,20 +1327,17 @@ "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", - "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", - "dev": true, + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "requires": { "mkdirp": "^0.5.1" } diff --git a/package.json b/package.json index fd3398c5b..7eeca2da8 100644 --- a/package.json +++ b/package.json @@ -8,15 +8,12 @@ }, "author": "Jim Cramer", "license": "CC-BY-4.0", - "devDependencies": { - "eslint": "^5.9.0", - "eslint-config-airbnb": "^17.1.0", - "eslint-config-airbnb-base": "^13.1.0", - "eslint-config-prettier": "^3.3.0", - "eslint-plugin-import": "^2.14.0", - "eslint-plugin-jsx-a11y": "^6.1.2", - "eslint-plugin-prettier": "^3.0.0", - "eslint-plugin-react": "^7.11.1", - "prettier": "^1.15.2" + "dependencies": { + "eslint": "^6.2.0", + "eslint-config-airbnb-base": "^14.0.0", + "eslint-config-prettier": "^6.0.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-prettier": "^3.1.0", + "prettier": "^1.18.2" } } diff --git a/prettier.config.js b/prettier.config.js index ee80efd56..8b959e312 100644 --- a/prettier.config.js +++ b/prettier.config.js @@ -1,5 +1,4 @@ module.exports = { - printWidth: 100, singleQuote: true, trailingComma: 'all', bracketSpacing: true, From 88b72648f135b57c7e3a5fe0d5d968b30ae7fbec Mon Sep 17 00:00:00 2001 From: Jim Cramer Date: Mon, 19 Aug 2019 13:08:18 +0200 Subject: [PATCH 02/22] Fix ESLint version error --- package-lock.json | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9219dda64..b918fcb7a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,9 +23,9 @@ } }, "acorn": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.3.0.tgz", - "integrity": "sha512-/czfa8BwS88b9gWQVhc8eknunSA2DoJpJyTQkhheIf5E48u1N0R4q/YxxsAeqRrmK9TQ/uYfgLDfZo91UlANIA==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.0.0.tgz", + "integrity": "sha512-PaF/MduxijYYt7unVGRuds1vBC9bFxbNf+VWqhOClfdgy7RlVkQqt610ig1/yxTgsDIfW1cWDel5EBbOy3jdtQ==" }, "acorn-jsx": { "version": "5.0.1", @@ -251,9 +251,9 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "eslint": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.1.0.tgz", - "integrity": "sha512-QhrbdRD7ofuV09IuE2ySWBz0FyXCq0rriLTZXZqaWSI79CVtHVRdkFuFTViiqzZhkCgfOh9USpriuGN2gIpZDQ==", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.2.0.tgz", + "integrity": "sha512-sS0SZwm5UAoI83F+cgdomz0cBNPs+AnRvEboNYeWvrZ8UcDHCu/5muocwoDL2TkHq9skkP0GvZjmwI8HG7S3sw==", "requires": { "@babel/code-frame": "^7.0.0", "ajv": "^6.10.0", @@ -262,9 +262,9 @@ "debug": "^4.0.1", "doctrine": "^3.0.0", "eslint-scope": "^5.0.0", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^6.0.0", + "eslint-utils": "^1.4.0", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.0", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", @@ -433,13 +433,13 @@ "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==" }, "espree": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-6.0.0.tgz", - "integrity": "sha512-lJvCS6YbCn3ImT3yKkPe0+tJ+mH6ljhGNjHQH9mRtiO6gjhVAOhVXW1yjnwqGwTkK3bGbye+hb00nFNmu0l/1Q==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.0.tgz", + "integrity": "sha512-boA7CHRLlVWUSg3iL5Kmlt/xT3Q+sXnKoRYYzj1YeM10A76TEJBbotV5pKbnK42hEUIr121zTv+QLRM5LsCPXQ==", "requires": { - "acorn": "^6.0.7", + "acorn": "^7.0.0", "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "eslint-visitor-keys": "^1.1.0" } }, "esprima": { From d21420c3923c9971e5ae974d738d785df8ed28c5 Mon Sep 17 00:00:00 2001 From: Jim Cramer Date: Mon, 19 Aug 2019 15:30:07 +0200 Subject: [PATCH 03/22] Fix error in OOP starter code --- homework-classes/View.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/homework-classes/View.js b/homework-classes/View.js index 249f98e36..1708f0737 100644 --- a/homework-classes/View.js +++ b/homework-classes/View.js @@ -46,9 +46,9 @@ * @param {Object[]} repos An array of repository objects. */ renderSelect(repos) { - const select = this.createAndAppend('select', this.header); + this.select = this.createAndAppend('select', this.header); // TODO: replace this comment and the console.log with your own code - console.log(select, repos); + console.log(repos); } /** From 13331776ce60069f490ec74f1edbaae891275880 Mon Sep 17 00:00:00 2001 From: Jim Cramer Date: Mon, 26 Aug 2019 09:00:25 +0200 Subject: [PATCH 04/22] Rename Subject to Observable --- .vscode/settings.json | 1 + Week3/MAKEME.md | 4 ++-- homework-classes/App.js | 2 +- homework-classes/Model.js | 17 ++++++++--------- homework-classes/Observable.js | 20 ++++++++++++++++++++ homework-classes/Observer.js | 8 ++++++-- homework-classes/Subject.js | 23 ----------------------- homework-classes/View.js | 20 ++++++++++---------- homework-classes/index.html | 2 +- 9 files changed, 49 insertions(+), 48 deletions(-) create mode 100644 homework-classes/Observable.js delete mode 100644 homework-classes/Subject.js diff --git a/.vscode/settings.json b/.vscode/settings.json index 4678924cf..6b977e680 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -6,6 +6,7 @@ "editor.tabSize": 2, "cSpell.words": [ "networkidle", + "remarcmij", "tabindex", "whiteframe" ] diff --git a/Week3/MAKEME.md b/Week3/MAKEME.md index debdb95f2..d498441b3 100644 --- a/Week3/MAKEME.md +++ b/Week3/MAKEME.md @@ -83,9 +83,9 @@ Object Oriented Programming is a vast topic and in this homework we can only scr | style.css | CSS styling. | | hyf.png | The HYF logo. | | App.js | The **App** class contains the start-up code and manages the overall orchestration of the app. | -| Model.js | The **Model** class is concerned with all data handling (e.g. fetching). Extends the Subject class. | +| Model.js | The **Model** class is concerned with all data handling (e.g. fetching). Extends the Observable class. | | View.js | The **View** class is concerned with rendering the data from the Model to the web page. Extends the Observer class. | -| Subject.js | The **Subject** class is a component of a Observer pattern implementation. | +| Observable.js | The **Observable** class is a component of a Observer pattern implementation. | | Observer.js | The **Observer** class is a component of a Observer pattern implementation. | >For this part of the homework you should need to modify **View.js**, by adding and adapting code from your non-OOP version of the homework to this file. diff --git a/homework-classes/App.js b/homework-classes/App.js index d931bbce8..7b0cff181 100644 --- a/homework-classes/App.js +++ b/homework-classes/App.js @@ -21,7 +21,7 @@ class App { constructor(account) { const model = new Model(account); - this.pageView = new View(model, account); + this.view = new View(model, account); } } diff --git a/homework-classes/Model.js b/homework-classes/Model.js index 7a6fe6223..efeacdd62 100644 --- a/homework-classes/Model.js +++ b/homework-classes/Model.js @@ -1,12 +1,12 @@ 'use strict'; { - const { Subject } = window; + const { Observable } = window; const makeUrl = ({ name, type }) => `https://api.github.com/${type}s/${name}/repos?per_page=100`; - class Model extends Subject { + class Model extends Observable { constructor(account) { super(); this.account = account; @@ -19,20 +19,19 @@ } async fetchData(selectedIndex = 0) { - const newState = { ...this.state, error: null }; + this.state.error = null; try { if (this.state.repos.length === 0) { const repos = await Model.fetchJSON(makeUrl(this.account)); - newState.repos = repos.sort((a, b) => a.name.localeCompare(b.name)); + this.state.repos = repos.sort((a, b) => a.name.localeCompare(b.name)); } - newState.selectedRepo = newState.repos[selectedIndex]; - newState.contributors = await Model.fetchJSON( - newState.selectedRepo.contributors_url, + this.state.selectedRepo = this.state.repos[selectedIndex]; + this.state.contributors = await Model.fetchJSON( + this.state.selectedRepo.contributors_url, ); } catch (err) { - newState.error = err; + this.state.error = err; } - this.state = newState; this.notify(this.state); } diff --git a/homework-classes/Observable.js b/homework-classes/Observable.js new file mode 100644 index 000000000..3eb5b2530 --- /dev/null +++ b/homework-classes/Observable.js @@ -0,0 +1,20 @@ +'use strict'; + +{ + class Observable { + constructor() { + this.observers = new Set(); + } + + subscribe(observer = {}) { + this.observers.add(observer); + return () => this.observers.delete(observer); + } + + notify(data) { + this.observers.forEach(observer => observer.update(data)); + } + } + + window.Observable = Observable; +} diff --git a/homework-classes/Observer.js b/homework-classes/Observer.js index 108edcfb4..26b88195b 100644 --- a/homework-classes/Observer.js +++ b/homework-classes/Observer.js @@ -2,8 +2,12 @@ { class Observer { - constructor(subject) { - subject.register(this); + constructor(Observable) { + Observable.subscribe(this); + } + + update() { + throw new Error('Observer: the `update` method should be overridden.'); } } diff --git a/homework-classes/Subject.js b/homework-classes/Subject.js deleted file mode 100644 index ac0f40313..000000000 --- a/homework-classes/Subject.js +++ /dev/null @@ -1,23 +0,0 @@ -'use strict'; - -{ - class Subject { - constructor() { - this.observers = new Set(); - } - - register(observer = {}) { - if (!(typeof observer.update === 'function')) { - throw new Error(`Observer must implement an 'update' method.`); - } - this.observers.add(observer); - return () => this.observers.delete(observer); - } - - notify(payload) { - this.observers.forEach(observer => observer.update(payload)); - } - } - - window.Subject = Subject; -} diff --git a/homework-classes/View.js b/homework-classes/View.js index 1708f0737..17511e2c3 100644 --- a/homework-classes/View.js +++ b/homework-classes/View.js @@ -12,9 +12,9 @@ this.mainContainer = null; const root = document.getElementById('root'); - this.header = this.createAndAppend('header', root, { class: 'header' }); - this.createAndAppend('p', this.header, { text: account.name }); - this.mainContainer = this.createAndAppend('main', root, { + this.header = View.createAndAppend('header', root, { class: 'header' }); + View.createAndAppend('p', this.header, { text: account.name }); + this.mainContainer = View.createAndAppend('main', root, { id: 'main-container', }); @@ -22,7 +22,7 @@ } /** - * Receives data from the Subject to which this Observer is registered + * Receives data from the Observable to which this Observer is registered * and renders the data. * @param {Object} state On object containing the Model state */ @@ -46,9 +46,9 @@ * @param {Object[]} repos An array of repository objects. */ renderSelect(repos) { - this.select = this.createAndAppend('select', this.header); + this.select = View.createAndAppend('select', this.header); // TODO: replace this comment and the console.log with your own code - console.log(repos); + console.log('renderSelect', repos); } /** @@ -57,7 +57,7 @@ */ renderRepoDetails(repo) { // TODO: replace this comment and the console.log with your own code - console.log(repo); + console.log('renderRepoDetails', repo); } /** @@ -66,7 +66,7 @@ */ renderContributors(contributors) { // TODO: replace this comment and the console.log with your own code - console.log(contributors); + console.log('renderContributors', contributors); } /** @@ -75,7 +75,7 @@ */ renderError(err) { // TODO: replace this comment and the console.log with your own code - console.log(err); + console.log('renderError', err); } /** @@ -85,7 +85,7 @@ * @param {HTMLElement} parent The parent element. * @param {Object} options An object with attribute names and values. */ - createAndAppend(name, parent, options = {}) { + static createAndAppend(name, parent, options = {}) { const elem = document.createElement(name); parent.appendChild(elem); Object.entries(options).forEach(([key, value]) => { diff --git a/homework-classes/index.html b/homework-classes/index.html index 99c41b9af..8a2fffaa4 100644 --- a/homework-classes/index.html +++ b/homework-classes/index.html @@ -21,7 +21,7 @@

- + From 0f1308a23bf991e2efd95ca7ba54fdb2c42892ed Mon Sep 17 00:00:00 2001 From: Jim Cramer Date: Mon, 26 Aug 2019 12:54:34 +0200 Subject: [PATCH 05/22] Remove Observer as a separate class --- homework-classes/Observer.js | 15 --------------- homework-classes/View.js | 6 ++---- homework-classes/index.html | 1 - 3 files changed, 2 insertions(+), 20 deletions(-) delete mode 100644 homework-classes/Observer.js diff --git a/homework-classes/Observer.js b/homework-classes/Observer.js deleted file mode 100644 index 26b88195b..000000000 --- a/homework-classes/Observer.js +++ /dev/null @@ -1,15 +0,0 @@ -'use strict'; - -{ - class Observer { - constructor(Observable) { - Observable.subscribe(this); - } - - update() { - throw new Error('Observer: the `update` method should be overridden.'); - } - } - - window.Observer = Observer; -} diff --git a/homework-classes/View.js b/homework-classes/View.js index 17511e2c3..61a6f1899 100644 --- a/homework-classes/View.js +++ b/homework-classes/View.js @@ -1,11 +1,9 @@ 'use strict'; { - const { Observer } = window; - - class View extends Observer { + class View { constructor(model, account) { - super(model); + model.subscribe(this); this.model = model; this.header = null; this.select = null; diff --git a/homework-classes/index.html b/homework-classes/index.html index 8a2fffaa4..f58a1e2e3 100644 --- a/homework-classes/index.html +++ b/homework-classes/index.html @@ -22,7 +22,6 @@
- From 5448828f3681fc8ef60ecc83222a11a5ec3f32b9 Mon Sep 17 00:00:00 2001 From: Jim Cramer Date: Mon, 26 Aug 2019 22:53:01 +0200 Subject: [PATCH 06/22] Split up View into multiple classes --- homework-classes/App.js | 20 +++++- homework-classes/ContributorsView.js | 28 ++++++++ homework-classes/ErrorView.js | 28 ++++++++ homework-classes/HeaderView.js | 33 +++++++++ homework-classes/RepoView.js | 28 ++++++++ homework-classes/Util.js | 27 +++++++ homework-classes/View.js | 101 --------------------------- homework-classes/index.html | 6 +- homework-classes/style.css | 1 + 9 files changed, 168 insertions(+), 104 deletions(-) create mode 100644 homework-classes/ContributorsView.js create mode 100644 homework-classes/ErrorView.js create mode 100644 homework-classes/HeaderView.js create mode 100644 homework-classes/RepoView.js create mode 100644 homework-classes/Util.js delete mode 100644 homework-classes/View.js diff --git a/homework-classes/App.js b/homework-classes/App.js index 7b0cff181..6fdf0653d 100644 --- a/homework-classes/App.js +++ b/homework-classes/App.js @@ -16,12 +16,28 @@ }, }; - const { Model, View } = window; + const { Model, HeaderView, RepoView, ContributorsView, ErrorView } = window; + const { createAndAppend } = window.Util; class App { constructor(account) { + const root = document.getElementById('root'); + const header = createAndAppend('header', root, { class: 'header' }); + this.mainContainer = createAndAppend('main', root, { + id: 'main-container', + }); + const model = new Model(account); - this.view = new View(model, account); + model.subscribe(this); + model.subscribe(new HeaderView(model, account, header)); + model.subscribe(new RepoView(this.mainContainer)); + model.subscribe(new ContributorsView(this.mainContainer)); + model.subscribe(new ErrorView(this.mainContainer)); + model.fetchData(); + } + + update() { + this.mainContainer.innerHTML = ''; } } diff --git a/homework-classes/ContributorsView.js b/homework-classes/ContributorsView.js new file mode 100644 index 000000000..8dca2669b --- /dev/null +++ b/homework-classes/ContributorsView.js @@ -0,0 +1,28 @@ +'use strict'; + +{ + const { createAndAppend } = window.Util; + + class ContributorsView { + constructor(mainContainer) { + this.mainContainer = mainContainer; + } + + update(state) { + if (!state.error) { + this.render(state.contributors); + } + } + + /** + * Renders the list of contributors + * @param {Object[]} contributors An array of contributor objects + */ + render(contributors) { + // TODO: replace this comment and the console.log with your own code + console.log('renderContributors', contributors); + } + } + + window.ContributorsView = ContributorsView; +} diff --git a/homework-classes/ErrorView.js b/homework-classes/ErrorView.js new file mode 100644 index 000000000..40e35e8f6 --- /dev/null +++ b/homework-classes/ErrorView.js @@ -0,0 +1,28 @@ +'use strict'; + +{ + const { createAndAppend } = window.Util; + + class ErrorView { + constructor(mainContainer) { + this.mainContainer = mainContainer; + } + + update(state) { + if (state.error) { + this.render(state.error); + } + } + + /** + * Renders an error for the 'error' message type. + * @param {Error} error An Error object + */ + render(error) { + // TODO: replace this comment and the console.log with your own code + console.log('renderError', error); + } + } + + window.ErrorView = ErrorView; +} diff --git a/homework-classes/HeaderView.js b/homework-classes/HeaderView.js new file mode 100644 index 000000000..ac902b411 --- /dev/null +++ b/homework-classes/HeaderView.js @@ -0,0 +1,33 @@ +'use strict'; + +{ + const { createAndAppend } = window.Util; + + class HeaderView { + constructor(model, account, header) { + this.model = model; + this.account = account; + this.header = header; + this.select = null; + } + + update(state) { + if (!this.select && !this.error) { + this.render(state.repos); + } + } + + /** + * Renders the data for the 'select' message type. Create a element - * and its
Creative Commons License
This work is licensed under a Creative Commons Attribution 4.0 International License. diff --git a/Week1/MAKEME.md b/Week1/MAKEME.md index 40c09779b..515032461 100644 --- a/Week1/MAKEME.md +++ b/Week1/MAKEME.md @@ -155,7 +155,9 @@ _**Do not change or delete any files outside of the `homework` folder!**_ **`style.css`** -- Add your own styling. +- Add your own CSS styling. Use `style.css` for all your styling your HTML. Avoid using JavaScript for styling unless there is a genuine need. + + **You are not allowed to use a CSS library such as Bootstrap.** **Hints:** diff --git a/Week1/README.md b/Week1/README.md index 0936ae4fc..4e586c32d 100644 --- a/Week1/README.md +++ b/Week1/README.md @@ -3,34 +3,73 @@ ``` In week one we will discuss the following topics: • Structure for a basic SPA (Single Page Application) -• XMLHttpRequests +• AJAX & XMLHttpRequests • API calls ``` Here are resources that we like you to read as a preparation for the first lecture: -### Fundamentals +## 1. DOM manipulation -- [XMLHttpRequest](../../../../fundamentals/blob/master/fundamentals/XMLHttpRequest.md) +To refresh your DOM manipulation skills, watch this YouTube video series from Traversy Media: -### APIs +- [JavaScript DOM Crash Course](https://youtu.be/0ik6X4DJKCc). -- Read about APIS: https://www.programmableweb.com/api-university/what-are-apis-and-how-do-they-work -- Traversy Media (YouTube, 18 mins): [What Is A RESTful API? Explanation of REST & HTTP](https://youtu.be/Q-BpqyOT3a8). +You will be using these particular DOM manipulation methods and properties in the JS3 homework for the next three weeks: -### AJAX & XMLHttpRequests +#### Course Video Part 1 (39 mins): + +- `document.getElementById()` +- `element.textContent` + +#### Course Video Part 2 (21 mins): + +- `document.createElement()` +- `element.setAttribute()` +- `element.appendChild()` + +#### Course Video Part 3 (34 mins): + +- `change` event (`

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 literal 0 HcmV?d00001 diff --git a/Week3/MAKEME.md b/Week3/MAKEME.md index dcdb081fe..debdb95f2 100644 --- a/Week3/MAKEME.md +++ b/Week3/MAKEME.md @@ -13,11 +13,20 @@ _Deadline Monday_ - Fix Requested Changes (if any) on the Pull Request. -## Step 2 +## Step 2: Create a new branch + +1. Make sure that your `week2` branch is checked out and clean. +2. Create a new branch for the week 3 homework: + + ``` + git checkout -b week3 + ``` + +## Step 3 **_Deadline Thursday_** -### 2.1 Preparation +### 3.1 Preparation **Read the fundamental pages on:** @@ -33,7 +42,7 @@ The homework for week 3 will build on the work you did in week 2. You will creat git checkout -b week3 ``` -### 2.2 Assignment +### 3.2 Assignment The assignment consists of two parts. @@ -44,13 +53,13 @@ In the first part you will modify the 'promise' homework in the from week 2 (in In the second part you will 'refactor' your application to use ES6 classes. For this, you need to modify the files in the `homework-classes` folder. -#### 2.2.1 Replace XMLHttpRequest with fetch +#### 3.2.1 Replace XMLHttpRequest with fetch Replace `XMLHttpRequest` in the `fetchJSON` function with `fetch`. Because `fetch` returns a promise out of the box there is no need create a promise yourself with `new Promise(...)`. > `fetch` does not throw an error for HTTP errors. Review the documentation for [`response.ok`](https://developer.mozilla.org/en-US/docs/Web/API/Response/ok) for a clue how detect HTTP errors. -#### 2.2.2 async/await +#### 3.2.2 async/await **Instructions:** @@ -58,38 +67,41 @@ Replace `XMLHttpRequest` in the `fetchJSON` function with `fetch`. Because `fetc 2. Make sure that your error handling code still works. See the week2 MAKEME on how to force an error response from GitHub. -#### 2.2.3 ES6 Classes +#### 3.2.3 Object Orientation and ES6 classes **_Deadline Saturday_** -This final assignment requires you to go the extra mile and master Object Oriented Programming and ES6 classes. +This final assignment requires you to go the extra mile and get acquainted with Object Oriented Programming and ES6 classes. -> The files to be modified are in the **homework-classes** folder. +Object Oriented Programming is a vast topic and in this homework we can only scratch the surface. The approach we have taken for this homework is for you, as aspiring junior developer, to complete an application for which the groundwork has been done by an experienced developer. You may have difficulty understanding the full details of the application, however this is not unlike a real world situation where you will be expected to make relative small modifications to a complex application, without breaking anything. -In this assignment you need to redistribute and adapt the code from `index.js` to the files `App.js`, `Repository.js` and `Contributor.js`. You do not need to modify `Util.js`. +> The relevant files can be found in the **homework-classes** folder. -| File | Description | -| ---------------- | -------------------------------------------------------------------------------------------- | -| `index.html` | The application's HTML file. | -| `App.js` | The `App` class contains the start-up code and manages the overall orchestration of the app. | -| `Repository.js` | The `Repository` class holds code and data for a single repository. | -| `Contributor.js` | The `Contributor` class holds code and data for a single contributor. | -| `Util.js` | The `Util` class contains static helper methods for use in the other classes. | +| File | Description | +| -------------- | -------------------------------------------------------------------------------------------- | +| index.html | The application's HTML file. | +| style.css | CSS styling. | +| hyf.png | The HYF logo. | +| App.js | The **App** class contains the start-up code and manages the overall orchestration of the app. | +| Model.js | The **Model** class is concerned with all data handling (e.g. fetching). Extends the Subject class. | +| View.js | The **View** class is concerned with rendering the data from the Model to the web page. Extends the Observer class. | +| Subject.js | The **Subject** class is a component of a Observer pattern implementation. | +| Observer.js | The **Observer** class is a component of a Observer pattern implementation. | -The `App.js`, `Repository.js` and `Contributor.js` files each contain skeleton code that you can use to migrate portions of your code from `index.js` to. +>For this part of the homework you should need to modify **View.js**, by adding and adapting code from your non-OOP version of the homework to this file. _Read:_ - HYF fundamental: [ES6 Classes](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/oop_classes.md#es6-classes) - More on ES6 classes: [ES6 Classes in Depth](https://ponyfoo.com/articles/es6-classes-in-depth) -#### 2.2.4 ARIA-compliance (BONUS) +#### 3.2.4 ARIA-compliance (BONUS) Please review the material from the HTML/CSS module: [Get familiar with Accessible Rich Internet Applications (ARIA)](https://github.com/HackYourFuture/HTML-CSS/tree/master/Week1#get-familiar-with-accessible-rich-internet-applications-aria). For the GitHub application ARIA-compliance means that the Contributors list should either be a native HTML list (i.e. using `ul` and `li` elements) or otherwise marked with an appropriate ARIA **role**. Furthermore, a user should be able to navigate through all interactive elements using the keyboard (e.g., using the **Tab** key). Pressing **Enter** on such an element should be equivalent to clicking the mouse. -#### 2.2.5 Handing in your homework +#### 3.2.5 Handing in your homework If necessary, review the instructions how to [Hand in homework](https://github.com/HackYourFuture/fundamentals/blob/master/fundamentals/homework_pr.md) using GitHub pull request. @@ -117,7 +129,7 @@ If the answer is 'yes' to the preceding questions you are ready to follow these 2. Create a pull request for your `week3` branch. -## Step 3: Read before next lecture +## Step 4: Read before next lecture _Deadline Sunday morning_ diff --git a/homework-classes/App.js b/homework-classes/App.js index 7cc1c5772..d931bbce8 100644 --- a/homework-classes/App.js +++ b/homework-classes/App.js @@ -1,78 +1,29 @@ 'use strict'; -/* global Util, Repository, Contributor */ - -class App { - constructor(url) { - this.mainContainer = null; - this.initialize(url); - } - - /** - * Initialization - * @param {string} url The GitHub URL for obtaining the organization's repositories. - */ - async initialize(url) { - // Add code here to initialize your app - // 1. Create the fixed HTML elements of your page - // 2. Make an initial XMLHttpRequest using Util.fetchJSON() to populate your element + * and its