diff --git a/docs/docs/technical-reference/build-test-run.md b/docs/docs/technical-reference/build-test-run.md index 459d01a46..e8dbeebb5 100644 --- a/docs/docs/technical-reference/build-test-run.md +++ b/docs/docs/technical-reference/build-test-run.md @@ -47,7 +47,7 @@ To build the OpenRefine application from source type: Since OpenRefine is composed of two parts, a server and a in-browser UI, the testing system reflects that: * on the server side, it's powered by [TestNG](http://testng.org/) and the unit tests are written in Java; -* on the client side, we currently do not have any tests. Previously client side tests were implemented with [Windmill](https://github.com/windmill/windmill), which is no longer maintained. +* on the client side, we use [Cypress](https://www.cypress.io/) and the tests are written in Javascript To run all tests, use: ```shell @@ -61,6 +61,12 @@ If you want to run only the server side portion of the tests, use: ./refine server_test ``` +If you are running the UI tests for the first time, [you must go through the installation process.](functional-tests) +If you want to run only the client side portion of the tests, use: +```shell +yarn --cwd ./main/tests/cypress run cypress open +``` + ## Running To run OpenRefine from the command line (assuming you have been able to build from the source code successfully) ```shell diff --git a/docs/docs/technical-reference/functional-tests.md b/docs/docs/technical-reference/functional-tests.md new file mode 100644 index 000000000..b7b581e79 --- /dev/null +++ b/docs/docs/technical-reference/functional-tests.md @@ -0,0 +1,106 @@ +--- +id: functional-tests +title: Functional tests +sidebar_label: Functional tests +--- + +import useBaseUrl from '@docusaurus/useBaseUrl'; + +You will need: + +- [Node.js 10 or 12 and above](https://nodejs.org) +- [Yarn or NPM](https://yarnpkg.com/) +- A Unix/Linux shell environment or the Windows command line + +## Installation + +To install Cypress and dependencies, run : + +``` +cd ./main/tests/cypress +yarn install +``` + +Cypress always assumes that OpenRefine is up and running on the local machine, the tests themselves do not launch OpenRefine, nor restarts it. + +Once OpenRefine is running, Cypress tests can be started in two modes + +### Development / Debugging mode + +Run : + +```shell +yarn --cwd ./main/tests/cypress run cypress open +``` + +It will open the Cypress test runner, where you can choose, replay, visualize tests. +This is the recommended way to run tests when adding or fixing tests + +### Command-line mode + +```shell +yarn --cwd ./main/tests/cypress run cypress run +``` + +It will run all tests in the command-line, without windows, displaying results in the standard output +This is the way to run tests in CI/CD + +## Cypress brief overview + +Cypress operates insides a browser, it's internally using NodeJS. +That's a key difference with tools such as selenium. + +**From the Cypress documentation:** + +> But what this also means is that your test code **is being evaluated inside the browser**. Test code is not evaluated in Node, or any other server side language. The **only** language we will ever support is the language of the web: JavaScript. + +Good starting points with Cypress are the [Getting started guide](https://docs.cypress.io/guides/getting-started/writing-your-first-test.html#Write-your-first-test), and the [Trade-offs](https://docs.cypress.io/guides/references/trade-offs.html#Permanent-trade-offs-1) + +The general workflow of a Cypress test is to + +- Start a browser (yarn run cypress open) +- Visit a URL +- Trigger user actions +- Assert that the DOM contains expected texts and elements using selectors + +## Browsers + +In terms of browsers, Cypress is using what is installed on your operating system. +See the [Cypress documentation](https://docs.cypress.io/guides/guides/launching-browsers.html#Browsers) for a list of supported browsers + +## Folder organization + +Tests are located in main/tests/cypress. +The test should not use any file outside the cypress folder. + +- `/fixtures` contains CSVs and OpenRefine project files used by the tests +- `/integration` contains the tests +- `/plugins` contains custom plugins for the OR project +- `/screenshots` and `/videos` contains the recording of the tests, Git ignored +- `/support` is a custom library of assertion and common user actions, to avoid code duplication in the tests themselves + +## Configuration + +Cypress execution can be configured with environment variables, they can be declared at the OS level, or when running the test + +Available variables are + +- OPENREFINE_URL, determine on which scheme://url:port to access OpenRefine, default to http://localhost:333 + +Cypress contains and [exaustive documentation](https://docs.cypress.io/guides/guides/environment-variables.html#Setting) about configuration, but here are two simple ways to configure the execution of the tests: + +### Overriding with a cypress.env.json file + +This file is ignored by Git, and you can use it to configure Cypress locally + +### Command-line + +You can pass variables at the command-line level + +``` +yarn --cwd ./main/tests/cypress run cypress open --env OPENREFINE_URL="http://localhost:1234" +``` + +## Resources + +[Cypress command line options](https://docs.cypress.io/guides/guides/command-line.html#Installation) diff --git a/docs/sidebars.js b/docs/sidebars.js index f6ccaae36..603cd539b 100644 --- a/docs/sidebars.js +++ b/docs/sidebars.js @@ -38,6 +38,7 @@ module.exports = { 'technical-reference/writing-extensions', 'technical-reference/migrating-older-extensions', 'technical-reference/translating', + 'technical-reference/functional-tests' ] }, }; diff --git a/main/tests/cypress/.gitignore b/main/tests/cypress/.gitignore new file mode 100644 index 000000000..3ffce4d01 --- /dev/null +++ b/main/tests/cypress/.gitignore @@ -0,0 +1,7 @@ +node_modules +.env +.env.local +cypress/videos +cypress/screenshots +npm-debug.log +cypress.env.json \ No newline at end of file diff --git a/main/tests/cypress/Readme.md b/main/tests/cypress/Readme.md new file mode 100644 index 000000000..893215023 --- /dev/null +++ b/main/tests/cypress/Readme.md @@ -0,0 +1,13 @@ +# OpenRefine test suite + +## Install + +``` +cd ./main/tests/e2e +npm install +``` + +## Usage + +- Run OpenRefine on a separate terminal +- Open the Cypress test runner with `./node_modules/.bin/cypress open` diff --git a/main/tests/cypress/cypress.json b/main/tests/cypress/cypress.json new file mode 100644 index 000000000..20fe218dc --- /dev/null +++ b/main/tests/cypress/cypress.json @@ -0,0 +1,11 @@ +{ + "integrationFolder": "./cypress/integration", + "nodeVersion": "system", + "retries": { + "runMode": 1, + "openMode": 1 + }, + "env":{ + "OPENREFINE_URL":"http://localhost:3333" + } +} diff --git a/main/tests/cypress/cypress/fixtures/food-small-csv.openrefine.tar.zip b/main/tests/cypress/cypress/fixtures/food-small-csv.openrefine.tar.zip new file mode 100644 index 000000000..600e322b7 Binary files /dev/null and b/main/tests/cypress/cypress/fixtures/food-small-csv.openrefine.tar.zip differ diff --git a/main/tests/cypress/cypress/fixtures/food.mini.csv b/main/tests/cypress/cypress/fixtures/food.mini.csv new file mode 100644 index 000000000..0e3d0d2d8 --- /dev/null +++ b/main/tests/cypress/cypress/fixtures/food.mini.csv @@ -0,0 +1,3 @@ +NDB_No,Shrt_Desc,Water,Energ_Kcal +01001,"BUTTER,WITH SALT",15.87,717 +01002,"BUTTER,WHIPPED,WITH SALT",15.87,717 \ No newline at end of file diff --git a/main/tests/cypress/cypress/fixtures/food.small.csv b/main/tests/cypress/cypress/fixtures/food.small.csv new file mode 100644 index 000000000..eb389393c --- /dev/null +++ b/main/tests/cypress/cypress/fixtures/food.small.csv @@ -0,0 +1,200 @@ +NDB_No,Shrt_Desc,Water,Energ_Kcal,Protein,Lipid_Tot,Ash,Carbohydrt,Fiber_TD,Sugar_Tot,Calcium,Iron,Magnesium,Phosphorus,Potassium,Sodium,ZInc,Copper,Manganese,Selenium,Vit_C,Thiamin,Ribolfavin,Niacin,Panto_Acid,Vit_B6,Folate_Tot,Folic_Acid,Food_Folate,Folate_DFE,Choline_Tot,Vit_B12,Vit_A_IU,Vit_A_RAE,Retinol,Alpha_Carot,Beta_Carot,Beta_Crypt,Lycopene,Lut+Zea,Vit_E,Vit_K,FA_SAt,FA_Mono,FA_Poly,Cholestrl,GmWt_1,GmWt_Desc1,GmWt_2,GmWt_Desc2,Refuse_Pct +01001,"BUTTER,WITH SALT",15.87,717,0.85,81.11,2.11,0.06,0,0.059999999,24,0.02,2,24,24,576,0.09,0,0,1,0,0.005,0.034,0.042,0.11,0.003,3,0,3,3,19,0.17,2499,684,671,0,158,0,0,0,2.32,7,51.368,21.021,3.043,215,227,1 cup,14,1 tbsp,0 +01002,"BUTTER,WHIPPED,WITH SALT",15.87,717,0.85,81.11,2.11,0.06,0,0.059999999,24,0.16,2,23,26,827,0.05,0.016,0.004,1,0,0.005,0.034,0.042,0.11,0.003,3,0,3,3,19,0.13,2499,684,671,0,158,0,0,0,2.32,7,50.489,23.426,3.012,219,151,1 cup,9,1 tbsp,0 +01003,"BUTTER OIL,ANHYDROUS",0.24,876,0.28,99.48,0,0,0,0,4,0,0,3,5,2,0.01,0.001,0,0,0,0.001,0.005,0.003,0.01,0.001,0,0,0,0,22,0.01,3069,840,824,0,193,0,0,0,2.8,8.6,61.924,28.732,3.694,256,205,1 cup,13,1 tbsp,0 +01004,"CHEESE,BLUE",42.41,353,21.4,28.74,5.11,2.34,0,0.5,528,0.31,23,387,256,1395,2.66,0.04,0.009,14.5,0,0.029,0.382,1.016,1.729,0.166,36,0,36,36,15,1.22,763,198,192,0,74,0,0,0,0.25,2.4,18.669,7.778,0.8,75,28.35,1 oz,17,1 cubic inch,0 +01005,"CHEESE,BRICK",41.11,371,23.24,29.68,3.18,2.79,0,0.50999999,674,0.43,24,451,136,560,2.6,0.024,0.012,14.5,0,0.014,0.351,0.118,0.288,0.065,20,0,20,20,15,1.26,1080,292,286,0,76,0,0,0,0.26,2.5,18.764,8.598,0.784,94,132,"1 cup, diced",113,"1 cup, shredded",0 +01006,"CHEESE,BRIE",48.42,334,20.75,27.68,2.7,0.45,0,0.449999988,184,0.5,20,188,152,629,2.38,0.019,0.034,14.5,0,0.07,0.52,0.38,0.69,0.235,65,0,65,65,15,1.65,592,174,173,0,9,0,0,0,0.24,2.3,17.41,8.013,0.826,100,240,"1 cup, melted",144,"1 cup, sliced",0 +01007,"CHEESE,CAMEMBERT",51.8,300,19.8,24.26,3.68,0.46,0,0.460000008,388,0.33,20,347,187,842,2.38,0.021,0.038,14.5,0,0.028,0.488,0.63,1.364,0.227,62,0,62,62,15,1.3,820,241,240,0,12,0,0,0,0.21,2,15.259,7.023,0.724,72,246,1 cup,28,1 oz,0 +01008,"CHEESE,CARAWAY",39.28,376,25.18,29.2,3.28,3.06,0,,673,0.64,22,490,93,690,2.94,0.024,0.021,14.5,0,0.031,0.45,0.18,0.19,0.074,18,0,18,18,,0.27,1054,271,262,,,,,,,,18.584,8.275,0.83,93,28.35,1 oz,,,0 +01009,"CHEESE,CHEDDAR",36.75,403,24.9,33.14,3.93,1.28,0,0.519999981,721,0.68,28,512,98,621,3.11,0.031,0.01,13.9,0,0.027,0.375,0.08,0.413,0.074,18,0,18,18,16,0.83,1002,265,258,0,85,0,0,0,0.29,2.8,21.092,9.391,0.942,105,132,"1 cup, diced",244,"1 cup, melted",0 +01010,"CHEESE,CHESHIRE",37.65,387,23.37,30.6,3.6,4.78,0,,643,0.21,21,464,95,700,2.79,0.042,0.012,14.5,0,0.046,0.293,0.08,0.413,0.074,18,0,18,18,,0.83,985,233,220,,,,,,,,19.475,8.671,0.87,103,28.35,1 oz,,,0 +01011,"CHEESE,COLBY",38.2,394,23.76,32.11,3.36,2.57,0,0.519999981,685,0.76,26,457,127,604,3.07,0.042,0.012,14.5,0,0.015,0.375,0.093,0.21,0.079,18,0,18,18,15,0.83,994,264,257,0,82,0,0,0,0.28,2.7,20.218,9.28,0.953,95,132,"1 cup, diced",113,"1 cup, shredded",0 +01012,"CHEESE,COTTAGE,CRMD,LRG OR SML CURD",79.79,98,11.12,4.3,1.41,3.38,0,2.670000076,83,0.07,8,159,104,364,0.4,0.029,0.002,9.7,0,0.027,0.163,0.099,0.557,0.046,12,0,12,12,18,0.43,140,37,36,0,12,0,0,0,0.08,0,1.718,0.778,0.123,17,113,4 oz,210,"1 cup, large curd (not packed)",0 +01013,"CHEESE,COTTAGE,CRMD,W/FRUIT",79.64,97,10.69,3.85,1.2,4.61,0.200000003,2.380000114,53,0.16,7,113,90,344,0.33,0.04,0.003,7.7,1.4,0.033,0.142,0.15,0.181,0.068,11,0,11,11,18,0.53,146,38,37,0,14,0,0,0,0.04,0.4,2.311,1.036,0.124,13,226,"1 cup, (not packed)",113,4 oz,0 +01014,"CHEESE,COTTAGE,NONFAT,UNCRMD,DRY,LRG OR SML CURD",81.01,72,10.34,0.29,1.71,6.66,0,1.850000024,86,0.15,11,190,137,330,0.47,0.03,0.022,9.4,0,0.023,0.226,0.144,0.446,0.016,9,0,9,9,18,0.46,8,2,2,0,0,0,0,0,0.01,0,0.169,0.079,0.003,7,145,"1 cup, (not packed)",113,4 oz,0 +01015,"CHEESE,COTTAGE,LOWFAT,2% MILKFAT",80.69,86,11.83,2.45,1.36,3.66,0,3.670000076,91,0.15,7,163,84,330,0.41,0.03,0.007,9.9,0,0.041,0.198,0.108,0.253,0.022,10,0,10,10,16,0.45,74,20,19,0,6,0,0,0,0.04,0,0.979,0.443,0.07,10,226,"1 cup, (not packed)",113,4 oz,0 +01016,"CHEESE,COTTAGE,LOWFAT,1% MILKFAT",82.48,72,12.39,1.02,1.39,2.72,0,2.720000029,61,0.14,5,134,86,406,0.38,0.028,0.003,9,0,0.021,0.165,0.128,0.215,0.068,12,0,12,12,18,0.63,41,11,11,0,3,0,0,0,0.01,0.1,0.645,0.291,0.031,4,226,"1 cup, (not packed)",113,4 oz,0 +01017,"CHEESE,CREAM",54.44,342,5.93,34.24,1.32,4.07,0,3.210000038,98,0.38,9,106,138,321,0.51,0.019,0.011,2.4,0,0.02,0.125,0.145,0.57,0.035,11,0,11,11,27,0.25,1265,362,359,0,41,0,0,0,0.65,3.4,19.292,8.62,1.437,110,232,1 cup,14,1 tbsp,0 +01018,"CHEESE,EDAM",41.56,357,24.99,27.8,4.22,1.43,0,1.429999948,731,0.44,30,536,188,965,3.75,0.036,0.011,14.5,0,0.037,0.389,0.082,0.281,0.076,16,0,16,16,15,1.54,825,243,242,0,11,0,0,0,0.24,2.3,17.572,8.125,0.665,89,28.35,1 oz,198,"1 package, (7 oz)",0 +01019,"CHEESE,FETA",55.22,264,14.21,21.28,5.2,4.09,0,4.090000153,493,0.65,19,337,62,1116,2.88,0.032,0.028,15,0,0.154,0.844,0.991,0.967,0.424,32,0,32,32,15,1.69,422,125,125,0,3,0,0,0,0.18,1.8,14.946,4.623,0.591,89,150,"1 cup, crumbled",28,1 oz,0 +01020,"CHEESE,FONTINA",37.92,389,25.6,31.14,3.79,1.55,0,1.549999952,550,0.23,14,346,64,800,3.5,0.025,0.014,14.5,0,0.021,0.204,0.15,0.429,0.083,6,0,6,6,15,1.68,913,261,258,0,32,0,0,0,0.27,2.6,19.196,8.687,1.654,116,132,"1 cup, diced",108,"1 cup, shredded",0 +01021,"CHEESE,GJETOST",13.44,466,9.65,29.51,4.75,42.65,0,,400,0.52,70,444,1409,600,1.14,0.08,0.04,14.5,0,0.315,1.382,0.813,3.351,0.271,5,0,5,5,,2.42,1113,334,334,,,,,,,,19.16,7.879,0.938,94,28.35,1 oz,227,"1 package, (8 oz)",0 +01022,"CHEESE,GOUDA",41.46,356,24.94,27.44,3.94,2.22,0,2.220000029,700,0.24,29,546,121,819,3.9,0.036,0.011,14.5,0,0.03,0.334,0.063,0.34,0.08,21,0,21,21,15,1.54,563,165,164,0,10,0,0,0,0.24,2.3,17.614,7.747,0.657,114,28.35,1 oz,198,"1 package, (7 oz)",0 +01023,"CHEESE,GRUYERE",33.19,413,29.81,32.34,4.3,0.36,0,0.360000014,1011,0.17,36,605,81,336,3.9,0.032,0.017,14.5,0,0.06,0.279,0.106,0.562,0.081,10,0,10,10,15,1.6,948,271,268,0,33,0,0,0,0.28,2.7,18.913,10.043,1.733,110,132,"1 cup, diced",108,"1 cup, shredded",0 +01024,"CHEESE,LIMBURGER",48.42,327,20.05,27.25,3.79,0.49,0,0.49000001,497,0.13,21,393,128,800,2.1,0.021,0.038,14.5,0,0.08,0.503,0.158,1.177,0.086,58,0,58,58,15,1.04,1155,340,339,0,15,0,0,0,0.23,2.3,16.746,8.606,0.495,90,134,1 cup,28,1 oz,0 +01025,"CHEESE,MONTEREY",41.01,373,24.48,30.28,3.55,0.68,0,0.5,746,0.72,27,444,81,536,3,0.032,0.011,14.5,0,0.015,0.39,0.093,0.21,0.079,18,0,18,18,15,0.83,769,198,192,0,78,0,0,0,0.26,2.5,19.066,8.751,0.899,89,132,"1 cup, diced",113,"1 cup, shredded",0 +01026,"CHEESE,MOZZARELLA,WHL MILK",50.01,300,22.17,22.35,3.28,2.19,0,1.029999971,505,0.44,20,354,76,627,2.92,0.011,0.03,17,0,0.03,0.283,0.104,0.141,0.037,7,0,7,7,15,2.28,676,179,174,0,57,0,0,0,0.19,2.3,13.152,6.573,0.765,79,112,"1 cup, shredded",28,1 oz,0 +01027,"CHEESE,MOZZARELLA,WHL MILK,LO MOIST",48.38,318,21.6,24.64,2.91,2.47,0,1.00999999,575,0.2,21,412,75,415,2.46,0.022,0.009,16.1,0,0.016,0.27,0.094,0.071,0.062,8,0,8,8,15,0.73,745,197,192,0,63,0,0,0,0.21,2.5,15.561,7.027,0.778,89,28.35,1 oz,18,1 cubic inch,0 +01028,"CHEESE,MOZZARELLA,PART SKIM MILK",53.78,254,24.26,15.92,3.27,2.77,0,1.129999995,782,0.22,23,463,84,619,2.76,0.025,0.01,14.4,0,0.018,0.303,0.105,0.079,0.07,9,0,9,9,15,0.82,481,127,124,0,41,0,0,0,0.14,1.6,10.114,4.51,0.472,64,28.35,1 oz,,,0 +01029,"CHEESE,MOZZARELLA,PART SKIM MILK,LO MOIST",46.46,302,25.96,20.03,3.72,3.83,0,0.600000024,731,0.25,26,524,95,528,3.13,0.027,0.011,16.3,0,0.101,0.329,0.119,0.09,0.079,10,0,10,10,14,2.31,517,137,133,0,44,0,0,0,0.37,1.3,12.67,5.73,0.626,54,132,"1 cup, diced",113,"1 cup, shredded",0 +01030,"CHEESE,MUENSTER",41.77,368,23.41,30.04,3.66,1.12,0,1.120000005,717,0.41,27,468,134,628,2.81,0.031,0.008,14.5,0,0.013,0.32,0.103,0.19,0.056,12,0,12,12,15,1.47,1012,298,297,0,13,0,0,0,0.26,2.5,19.113,8.711,0.661,96,132,"1 cup, diced",113,"1 cup, shredded",0 +01031,"CHEESE,NEUFCHATEL",63.11,253,9.15,22.78,1.37,3.59,0,3.190000057,117,0.13,10,138,152,334,0.82,0.027,0.011,3,0,0.022,0.155,0.21,0.575,0.041,14,0,14,14,,0.3,841,241,239,0,27,0,0,,0.4,1.7,12.79,5.784,0.97,74,28.35,1 oz,85,"1 package, (3 oz)",0 +01032,"CHEESE,PARMESAN,GRATED",20.84,431,38.46,28.61,8.03,4.06,0,0.899999976,1109,0.9,38,729,125,1529,3.87,0.238,0.085,17.7,0,0.029,0.486,0.114,0.325,0.049,10,0,10,10,15,2.26,442,120,117,0,31,0,0,0,0.26,1.9,17.301,8.375,1.173,88,100,1 cup,5,1 tbsp,0 +01033,"CHEESE,PARMESAN,HARD",29.16,392,35.75,25.83,6.04,3.22,0,0.800000012,1184,0.82,44,694,92,1602,2.75,0.032,0.02,22.5,0,0.039,0.332,0.271,0.453,0.091,7,0,7,7,15,1.2,399,108,106,0,28,0,0,0,0.23,1.7,16.41,7.515,0.569,68,28.35,1 oz,10,1 cubic inch,0 +01034,"CHEESE,PORT DE SALUT",45.45,352,23.78,28.2,2,0.57,0,0.569999993,650,0.43,24,360,136,534,2.6,0.022,0.011,14.5,0,0.014,0.24,0.06,0.21,0.053,18,0,18,18,15,1.5,1092,315,313,0,29,0,0,0,0.24,2.4,16.691,9.338,0.729,123,132,"1 cup, diced",113,"1 cup, shredded",0 +01035,"CHEESE,PROVOLONE",40.95,351,25.58,26.62,4.71,2.14,0,0.560000002,756,0.52,28,496,138,876,3.23,0.026,0.01,14.5,0,0.019,0.321,0.156,0.476,0.073,10,0,10,10,15,1.46,880,236,230,0,68,0,0,0,0.23,2.2,17.078,7.393,0.769,69,132,"1 cup, diced",28,1 oz,0 +01036,"CHEESE,RICOTTA,WHOLE MILK",71.7,174,11.26,12.98,1.02,3.04,0,0.270000011,207,0.38,11,158,105,84,1.16,0.021,0.006,14.5,0,0.013,0.195,0.104,0.213,0.043,12,0,12,12,18,0.34,445,120,117,0,33,0,0,0,0.11,1.1,8.295,3.627,0.385,51,246,1 cup,124,.5 cup,0 +01037,"CHEESE,RICOTTA,PART SKIM MILK",74.41,138,11.39,7.91,1.15,5.14,0,0.310000002,272,0.44,15,183,125,125,1.34,0.034,0.01,16.7,0,0.021,0.185,0.078,0.242,0.02,13,0,13,13,18,0.29,384,107,105,0,20,0,0,0,0.07,0.7,4.927,2.314,0.26,31,246,1 cup,28,1 oz,0 +01038,"CHEESE,ROMANO",30.91,387,31.8,26.94,6.72,3.63,0,0.730000019,1064,0.77,41,760,86,1200,2.58,0.03,0.02,14.5,0,0.037,0.37,0.077,0.424,0.085,7,0,7,7,15,1.12,415,96,90,0,69,0,0,0,0.23,2.2,17.115,7.838,0.593,104,28.35,1 oz,142,"5 package, (5 oz)",0 +01039,"CHEESE,ROQUEFORT",39.38,369,21.54,30.64,6.44,2,0,,662,0.56,30,392,91,1809,2.08,0.034,0.03,14.5,0,0.04,0.586,0.734,1.731,0.124,49,0,49,49,,0.64,1047,294,290,,,,,,,,19.263,8.474,1.32,90,28.35,1 oz,85,"1 package, (3 oz)",0 +01040,"CHEESE,SWISS",37.12,380,26.93,27.8,2.77,5.38,0,1.320000052,791,0.2,38,567,77,192,4.36,0.043,0.005,18.2,0,0.063,0.296,0.092,0.429,0.083,6,0,6,6,16,3.34,830,220,214,0,70,0,0,0,0.38,2.5,17.779,7.274,0.972,92,132,"1 cup, diced",244,"1 cup, melted",0 +01041,"CHEESE,TILSIT",42.86,340,24.41,25.98,4.87,1.88,0,,700,0.23,13,500,65,753,3.5,0.026,0.013,14.5,0,0.061,0.359,0.205,0.346,0.065,20,0,20,20,,2.1,1045,249,236,,,,,,,,16.775,7.136,0.721,102,28.35,1 oz,170,"1 package, (6 oz)",0 +01042,"CHEESE,PAST PROCESS,AMERICAN,W/DI NA PO4",39.16,375,22.15,31.25,5.84,1.6,0,0.50999999,552,0.19,27,513,169,1489,2.84,0.016,0.008,14.4,0,0.027,0.353,0.069,0.482,0.071,8,0,8,8,36,0.7,961,254,247,0,82,0,0,0,0.27,2.7,19.694,8.951,0.99,94,140,"1 cup, diced",244,"1 cup, melted",0 +01043,"CHEESE,PAST PROCESS,PIMENTO",39.08,375,22.13,31.2,5.84,1.73,0.100000001,0.629999995,614,0.42,22,744,162,1428,2.98,0.033,0.016,14.5,2.3,0.027,0.354,0.078,0.485,0.071,8,0,8,8,36,0.7,1045,248,235,12,151,0,0,20,0.29,2.9,19.663,8.937,0.988,94,140,"1 cup, diced",244,"1 cup, melted",0 +01044,"CHEESE,PAST PROCESS,SWISS,W/DI NA PO4",42.31,334,24.73,25.01,5.85,2.1,0,1.230000019,772,0.61,29,762,216,1370,3.61,0.027,0.014,15.9,0,0.014,0.276,0.038,0.26,0.036,6,0,6,6,36,1.23,746,198,192,0,63,0,0,0,0.34,2.2,16.045,7.046,0.622,85,140,"1 cup, diced",113,"1 cup, shredded",0 +01045,"CHEESE FD,COLD PK,AMERICAN",43.12,331,19.66,24.46,4.44,8.32,0,,497,0.84,30,400,363,966,3.01,0.03,0.01,16.2,0,0.03,0.446,0.074,0.977,0.141,5,0,5,5,,1.28,705,159,148,,,,,,,,15.355,7.165,0.719,64,28.35,1 oz,227,"1 package, (8 oz)",0 +01046,"CHEESE FD,PAST PROCESS,AMERICAN,WO/DI NA PO4",43.21,330,18.4,25.18,5.38,7.83,0,7.429999828,570,0.57,31,439,291,1265,3.19,0.085,0.073,16.1,0,0.068,0.517,0.17,0.974,0.073,7,0,7,7,36,1.26,761,201,196,0,65,0,0,0,0.22,3.4,14.895,7.214,1.108,80,113,1 cup,28,1 oz,0 +01047,"CHEESE FD,PAST PROCESS,SWISS",43.67,323,21.92,24.14,5.77,4.5,0,,723,0.6,28,526,284,1552,3.55,0.03,0.01,16.1,0,0.014,0.4,0.104,0.5,0.035,6,0,6,6,,2.3,856,237,233,,,,,,,,15.487,6.801,0.6,82,28.35,1 oz,227,"1 package, (8 oz)",0 +01048,"CHEESE SPRD,PAST PROCESS,AMERICAN,WO/DI NA PO4",47.65,290,16.41,21.23,5.98,8.73,0,7.320000172,562,0.33,29,712,242,1345,2.59,0.033,0.02,11.3,0,0.048,0.431,0.131,0.686,0.117,7,0,7,7,36,0.4,653,173,168,0,55,0,0,0,0.19,1.8,13.327,6.219,0.624,55,140,"1 cup, diced",244,1 cup,0 +01049,"CREAM,FLUID,HALF AND HALF",80.57,130,2.96,11.5,0.67,4.3,0,0.159999996,105,0.07,10,95,130,41,0.51,0.01,0.001,1.8,0.9,0.035,0.149,0.078,0.289,0.039,3,0,3,3,19,0.33,354,97,95,0,22,0,0,0,0.33,1.3,7.158,3.321,0.427,37,242,1 cup,15,1 tbsp,0 +01050,"CREAM,FLUID,LT (COFFEE CRM OR TABLE CRM)",73.75,195,2.7,19.31,0.58,3.66,0,0.140000001,96,0.04,9,80,122,40,0.27,0.008,0.001,0.6,0.8,0.032,0.148,0.057,0.276,0.032,2,0,2,2,17,0.22,656,181,178,0,37,0,0,0,0.55,1.7,12.02,5.577,0.717,66,240,1 cup,15,1 tbsp,0 +01052,"CREAM,FLUID,LT WHIPPING",63.5,292,2.17,30.91,0.46,2.96,0,0.109999999,69,0.03,7,61,97,34,0.25,0.007,0.001,0.5,0.6,0.024,0.125,0.042,0.259,0.028,4,0,4,4,17,0.2,1013,279,274,0,60,0,0,0,0.88,2.7,19.337,9.093,0.884,111,120,"1 cup, whipped",239,"1 cup, fluid (yields 2 cups whipped)",0 +01053,"CREAM,FLUID,HVY WHIPPING",57.71,345,2.05,37,0.45,2.79,0,0.109999999,65,0.03,7,62,75,38,0.23,0.006,0.001,0.5,0.6,0.022,0.11,0.039,0.255,0.026,4,0,4,4,17,0.18,1470,411,405,0,72,0,0,0,1.06,3.2,23.032,10.686,1.374,137,119.5,"1 cup, whipped",238,"1 cup, fluid (yields 2 cups whipped)",0 +01054,"CREAM,WHIPPED,CRM TOPPING,PRESSURIZED",61.33,257,3.2,22.22,0.76,12.49,0,8,101,0.05,11,89,147,130,0.37,0.01,0.001,1.4,0,0.037,0.065,0.07,0.305,0.041,3,0,3,3,17,0.29,685,188,184,0,43,0,0,0,0.64,1.9,13.831,6.418,0.825,76,60,1 cup,3,1 tbsp,0 +01055,"CREAM,SOUR,RED FAT,CULTURED",80.14,135,2.94,12,0.66,4.26,0,0.159999996,104,0.07,10,95,129,41,0.5,0.016,0.003,2.1,0.9,0.035,0.149,0.067,0.363,0.016,11,0,11,11,19,0.3,372,102,100,0,23,0,0,0,0.34,0.6,7.47,3.466,0.446,39,242,1 cup,15,1 tbsp,0 +01056,"CREAM,SOUR,CULTURED",74.46,193,2.07,19.73,0.85,2.88,0,3.5,110,0.17,10,115,141,80,0.38,0.019,0.011,2.6,0.9,0.036,0.172,0.109,0.336,0.057,7,0,7,7,19,0.28,576,162,160,0,26,0,0,0,0.44,1.8,11.507,5.068,0.84,52,230,1 cup,12,1 tbsp,0 +01057,EGGNOG,74.37,135,3.81,7.48,0.8,13.54,0,8.409999847,130,0.2,19,109,165,54,0.46,0.013,0.005,4.2,1.5,0.034,0.19,0.105,0.417,0.05,1,0,1,1,52,0.45,161,46,45,0,6,1,0,54,0.2,0.2,4.443,2.233,0.339,59,254,1 cup,32,1 fl oz,0 +01058,"SOUR DRSNG,NON-BUTTERFAT,CULTURED,FILLED CREAM-TYPE",74.79,178,3.25,16.57,0.71,4.68,0,4.679999828,113,0.03,10,87,162,48,0.37,0.01,0.002,2.3,0.9,0.038,0.163,0.074,0.398,0.017,12,0,12,12,15,0.33,10,3,3,0,0,0,0,0,1.34,4.1,13.272,1.958,0.468,5,235,1 cup,12,1 tbsp,0 +01059,"MILK,FILLED,FLUID,W/BLEND OF HYDR VEG OILS",87.67,63,3.33,3.46,0.8,4.74,0,,128,0.05,13,97,139,57,0.36,0.01,0.002,2,0.9,0.03,0.123,0.087,0.301,0.04,5,0,5,5,,0.34,7,2,2,,,,,,,,0.768,1.783,0.75,2,244,1 cup,976,1 quart,0 +01060,"MILK,FILLED,FLUID,W/LAURIC ACID OIL",87.73,63,3.33,3.4,0.8,4.74,0,4.739999771,128,0.05,13,97,139,57,0.36,0.01,0.002,2,0.9,0.03,0.123,0.087,0.301,0.04,5,0,5,5,15,0.34,7,2,2,0,0,0,0,0,0.13,0.8,3.101,0.1,0.01,2,244,1 cup,30,1 fl oz,0 +01067,"CREAM SUB,LIQ,W/HYDR VEG OIL&SOY PROT",77.27,136,1,9.97,0.38,11.38,0,11.38000011,9,0.03,0,64,191,79,0.02,0,0,1.1,0,0,0,0,0,0,0,0,0,0,0,0,15,1,0,0,9,0,0,0,0.81,2.5,1.937,7.551,0.027,0,240,1 cup,30,1 fl oz,0 +01068,"CREAM SUB,LIQ,W/LAURIC ACID OIL&NA CASEINATE",77.27,136,1,9.97,0.38,11.38,0,,9,0.03,0,64,191,79,0.02,0.025,0.04,1.1,0,0,0,0,0,0,0,0,0,0,,0,89,4,0,,,,,,,,9.304,0.106,0.003,0,15,"1 container, individual",120,.5 cup,0 +01069,"CREAM SUBSTITUTE,POWDERED",2.21,545,4.79,35.48,2.64,54.88,0,54.88000107,22,1.15,4,422,812,181,0.51,0.115,0.22,0.6,0,0,0.165,0,0,0,0,0,0,0,2,0,33,2,0,0,20,0,0,0,0.59,8.8,32.525,0.968,0.014,0,94,1 cup,2,1 tsp,0 +01070,"DESSERT TOPPING,POWDERED",1.47,577,4.9,39.92,1.17,52.54,0,52.54000092,17,0.03,7,74,166,122,0.08,0.118,0.225,0.6,0,0,0,0,0,0,0,0,0,0,0,0,180,9,0,0,108,0,0,0,1.52,9.9,36.723,0.6,0.447,0,42.5,1.5 oz,1,"1 portion, amount to make 1 tbsp",0 +01071,"DESSERT TOPPING,PDR,1.5 OZ PREP W/1/2 CUP MILK",66.65,188,3.6,12.41,0.81,16.53,0,16.53000069,90,0.04,10,86,151,66,0.27,0.012,0.005,4.8,0.7,0.027,0.117,0.06,0.226,0.03,4,0,4,4,11,0.26,122,23,21,0,32,0,0,0,0.44,2.7,10.684,0.843,0.201,10,80,1 cup,4,1 tbsp,0 +01072,"DESSERT TOPPING,PRESSURIZED",60.37,264,0.98,22.3,0.28,16.07,0,16.06999969,5,0.02,1,18,19,62,0.01,0.024,0.045,1.5,0,0,0,0,0,0,0,0,0,0,0,0,78,4,0,0,47,0,0,0,0.85,5.5,18.912,1.927,0.241,0,70,1 cup,4,1 tbsp,0 +01073,"DESSERT TOPPING,SEMI SOLID,FRZ",50.21,318,1.25,25.31,0.18,23.05,0,23.04999924,6,0.12,2,8,18,25,0.03,0.03,0.058,2.1,0,0,0,0,0,0,0,0,0,0,0,0,143,7,0,0,86,0,0,0,0.96,6.3,21.783,1.616,0.523,0,75,1 cup,4,1 tbsp,0 +01074,"SOUR CRM,IMITN,CULTURED",71.15,208,2.4,19.52,0.3,6.63,0,6.630000114,3,0.39,6,45,161,102,1.18,0.058,0.11,2.5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0.74,4.8,17.791,0.588,0.056,0,230,1 cup,28,1 oz,0 +01075,"MILK SUBSTITUTES,FLUID W/HYDR VEG OILS",88.18,61,1.75,3.41,0.5,6.16,0,6.159999847,33,0.39,6,74,114,78,1.18,0.051,0.097,1.9,0,0.012,0.088,0,0,0,0,0,0,0,,0,0,0,0,0,0,0,0,0,0.28,0.8,0.767,1.998,0.488,0,244,1 cup,30,1 fl oz,0 +01076,"MILK SUBSTITUTES,FLUID,W/LAURIC ACID OIL",88.18,61,1.75,3.41,0.5,6.16,0,,33,0.39,6,74,114,78,1.18,0.051,0.097,1.9,0,0.012,0.088,0,0,0,0,0,0,0,,0,0,0,0,,,,,,,,3.037,0.176,0.008,0,244,1 cup,976,1 quart,0 +01077,"MILK,WHL,3.25% MILKFAT",88.32,60,3.22,3.25,0.69,4.52,0,5.260000229,113,0.03,10,91,143,40,0.4,0.011,0.003,3.7,0,0.044,0.183,0.107,0.362,0.036,5,0,5,5,14,0.44,102,28,28,0,5,0,0,0,0.06,0.2,1.865,0.812,0.195,10,244,1 cup,15,1 tbsp,0 +01078,"MILK,PRODUCER,FLUID,3.7% MILKFAT",87.69,64,3.28,3.66,0.72,4.65,0,,119,0.05,13,93,151,49,0.38,0.01,0.004,2,1.5,0.038,0.161,0.084,0.313,0.042,5,0,5,5,,0.36,138,33,31,,,,,,,,2.278,1.057,0.136,14,244,1 cup,976,1 quart,0 +01079,"MILK,RED FAT,FLUID,2%MILKFAT,W/ADDED VIT A",89.33,50,3.3,1.97,0.71,4.68,0,5.059999943,117,0.03,11,94,150,41,0.43,0.012,0.003,2.5,0.2,0.039,0.185,0.092,0.356,0.038,5,0,5,5,16,0.46,189,55,55,0,3,0,0,0,0.03,0.2,1.257,0.56,0.073,8,244,1 cup,30,1 fl oz,0 +01080,"MILK,RED FAT,FLUID,2% MILKFAT,W/ NONFAT MILK SOL&VIT A",88.86,51,3.48,1.92,0.77,4.97,0,,128,0.05,14,100,162,52,0.4,0.008,0.002,2.3,1,0.04,0.173,0.09,0.336,0.045,5,0,5,5,,0.38,204,56,55,,,,,,,,1.195,0.555,0.071,8,245,1 cup,980,1 quart,0 +01081,"MILK,RED FAT,FLUID,2% MILKFAT,PROT FORT,W/ VIT A",87.71,56,3.95,1.98,0.87,5.49,0,5.260000229,143,0.06,16,112,182,59,0.45,0.008,0.002,2.6,1.1,0.045,0.194,0.101,0.376,0.051,6,0,6,6,,0.43,5,0,,0,3,0,0,0,0.04,0.1,1.232,0.572,0.074,8,246,1 cup,984,1 quart,0 +01082,"MILK,LOWFAT,FLUID,1% MILKFAT,W/ VIT A",89.92,42,3.37,0.97,0.75,4.99,0,5.199999809,119,0.03,11,95,150,44,0.42,0.01,0.003,3.3,0,0.02,0.185,0.093,0.361,0.037,5,0,5,5,18,0.44,196,58,58,0,2,0,0,0,0.01,0.1,0.633,0.277,0.035,5,244,1 cup,30,1 fl oz,0 +01083,"MILK,LOWFAT,FLUID,1% MILKFAT,W/ NONFAT MILK SOL&VIT A",89.81,43,3.48,0.97,0.77,4.97,0,,128,0.05,14,100,162,52,0.4,0.01,0.002,2.3,1,0.04,0.173,0.09,0.336,0.045,5,0,5,5,,0.38,204,59,58,,,,,,,,0.604,0.28,0.036,4,245,1 cup,980,1 quart,0 +01084,"MILK,LOWFAT,FLUID,1% MILKFAT,PROT FORT,W/ VIT A",88.74,48,3.93,1.17,0.86,5.52,0,,142,0.06,16,111,180,58,0.45,0.01,0.002,2.5,1.2,0.045,0.192,0.1,0.373,0.05,6,0,6,6,,0.43,203,61,61,,,,,,,,0.728,0.338,0.043,4,246,1 cup,984,1 quart,0 +01085,"MILK,NONFAT,FLUID,W/ VIT A (FAT FREE OR SKIM)",90.84,34,3.37,0.08,0.75,4.96,0,5.090000153,125,0.03,11,101,156,42,0.42,0.013,0.003,3.1,0,0.045,0.182,0.094,0.357,0.037,5,0,5,5,16,0.53,204,61,61,0,0,0,0,0,0.01,0,0.051,0.021,0.003,2,245,1 cup,31,1 fl oz,0 +01086,"MILK,NONFAT,FLUID,W/ NONFAT MILK SOL&VIT A (FAT FREE/SKIM)",90.38,37,3.57,0.25,0.78,5.02,0,5.019999981,129,0.05,15,104,171,53,0.41,0.011,0.002,2.2,1,0.041,0.175,0.091,0.339,0.046,5,0,5,5,16,0.39,203,61,61,0,0,0,0,0,0,0,0.162,0.065,0.009,2,245,1 cup,31,1 fl oz,0 +01087,"MILK,NONFAT,FLUID,PROT FORT,W/ VIT A (FAT FREE/SKIM)",89.36,41,3.96,0.25,0.87,5.56,0,,143,0.06,16,112,182,59,0.45,0.011,0.002,2.4,1.1,0.045,0.194,0.101,0.376,0.05,6,0,6,6,,0.43,203,61,61,,,,,,,,0.162,0.065,0.009,2,246,1 cup,984,1 quart,0 +01088,"MILK,BTTRMLK,FLUID,CULTURED,LOWFAT",90.13,40,3.31,0.88,0.89,4.79,0,4.789999962,116,0.05,11,89,151,105,0.42,0.011,0.002,2,1,0.034,0.154,0.058,0.275,0.034,5,0,5,5,16,0.22,26,7,7,0,1,0,0,0,0.05,0.1,0.548,0.254,0.033,4,245,1 cup,31,1 fl oz,0 +01089,"MILK,LOW SODIUM,FLUID",88.2,61,3.1,3.46,0.78,4.46,0,4.460000038,101,0.05,5,86,253,3,0.38,0.01,0.004,2,0.9,0.02,0.105,0.043,0.304,0.034,5,0,5,5,16,0.36,103,28,28,0,6,0,0,0,0.06,0.2,2.154,0.999,0.128,14,244,1 cup,30,1 fl oz,0 +01090,"MILK,DRY,WHOLE",2.47,496,26.32,26.71,6.08,38.42,0,38.41999817,912,0.47,85,776,1330,371,3.34,0.08,0.04,16.3,8.6,0.283,1.205,0.646,2.271,0.302,37,0,37,37,119,3.25,915,257,253,0,43,0,0,0,0.48,1.8,16.742,7.924,0.665,97,128,1 cup,32,.25 cup,0 +01091,"MILK,DRY,NONFAT,REG,WO/ VIT A",3.16,362,36.16,0.77,7.93,51.98,0,51.97999954,1257,0.32,110,968,1794,535,4.08,0.041,0.02,27.3,6.8,0.415,1.55,0.951,3.568,0.361,50,0,50,50,169,4.03,22,6,6,0,1,0,0,0,0,0.1,0.499,0.201,0.03,20,120,1 cup,30,.25 cup,0 +01092,"MILK,DRY,NONFAT,INST,W/ VIT A",3.96,358,35.1,0.72,8.03,52.19,0,52.18999863,1231,0.31,117,985,1705,549,4.41,0.041,0.02,27.3,5.6,0.413,1.744,0.891,3.235,0.345,50,0,50,50,168,3.99,2365,709,709,0,1,0,0,0,0.01,0,0.467,0.187,0.028,18,68,1 cup,91,"1 envelope, (1-1/3 cup)",0 +01093,"MILK,DRY,NONFAT,CA RED",4.9,354,35.5,0.2,7.6,51.8,0,,280,0.32,60,1011,680,2280,4.03,0.016,0.008,27.3,6.7,0.163,1.642,0.665,3.312,0.298,50,0,50,50,,3.98,8,2,1,,,,,,,,0.124,0.058,0.007,2,28.35,1 oz,113,.25 lb,0 +01094,"MILK,BUTTERMILK,DRIED",2.97,387,34.3,5.78,7.95,49,0,49,1184,0.3,110,933,1592,517,4.02,0.111,0.023,20.3,5.7,0.392,1.579,0.876,3.17,0.338,47,0,47,47,119,3.82,175,49,48,0,9,0,0,0,0.1,0.4,3.598,1.669,0.215,69,120,1 cup,6,1 tbsp,0 +01095,"MILK,CND,COND,SWTND",27.16,321,7.91,8.7,1.83,54.4,0,54.40000153,284,0.19,26,253,371,127,0.94,0.015,0.006,14.8,2.6,0.09,0.416,0.21,0.75,0.051,11,0,11,11,89,0.44,267,74,73,0,14,0,0,0,0.16,0.6,5.486,2.427,0.337,34,306,1 cup,38,1 fl oz,0 +01096,"MILK,CND,EVAP,WO/ VIT A",74.04,134,6.81,7.56,1.55,10.04,0,10.03999996,261,0.19,24,203,303,106,0.77,0.016,0.006,2.3,1.9,0.047,0.316,0.194,0.638,0.05,8,0,8,8,32,0.16,233,65,64,0,12,0,0,0,0.14,0.5,4.591,2.335,0.245,29,252,1 cup,32,1 fl oz,0 +01097,"MILK,CND,EVAP,NONFAT",79.4,78,7.55,0.2,1.5,11.35,0,11.35000038,290,0.29,27,195,332,115,0.9,0.016,0.006,2.5,1.2,0.045,0.309,0.174,0.738,0.055,9,0,9,9,25,0.24,394,118,118,0,0,0,0,0,0,0,0.121,0.062,0.006,4,256,1 cup,32,1 fl oz,0 +01102,"MILK,CHOC,FLUID,COMM,",82.3,83,3.17,3.39,0.8,10.34,0.800000012,9.539999962,112,0.24,13,101,167,60,0.41,0.065,0.077,1.9,0.9,0.037,0.162,0.125,0.295,0.04,5,0,5,5,17,0.33,95,26,26,0,5,0,0,0,0.06,0.2,2.104,0.99,0.124,12,250,1 cup,31,1 fl oz,0 +01103,"MILK,CHOC,FLUID,COMM,RED FAT",82.17,76,2.99,1.9,0.81,12.13,0.699999988,9.550000191,109,0.24,14,102,169,66,0.39,0.075,0.062,3.4,0,0.045,0.183,0.164,0.539,0.024,2,0,2,2,17,0.33,227,64,63,0,11,0,0,0,0.04,0.2,1.177,0.455,0.089,8,250,1 cup,31,1 fl oz,0 +01104,"MILK,CHOC,FLUID,COMM,LOWFAT",84.5,63,3.24,1,0.82,10.44,0.5,9.93999958,115,0.24,13,103,170,61,0.41,0.065,0.077,1.9,0.9,0.038,0.166,0.127,0.302,0.041,5,0,5,5,17,0.34,196,58,58,0,2,0,0,0,0.02,0.1,0.616,0.3,0.035,3,250,1 cup,1000,1 quart,0 +01105,"MILK,CHOC BEV,HOT COCOA,HOMEMADE",82.57,77,3.52,2.33,0.65,10.63,1,9.670000076,105,0.48,23,105,197,44,0.63,0.103,0.013,2.7,0.2,0.039,0.182,0.133,0.328,0.04,5,0,5,5,,0.42,175,51,51,0,3,0,0,0,0.03,0.2,1.431,0.677,0.034,8,250,1 cup,31,1 fl oz,0 +01106,"MILK,GOAT,FLUID",87.03,69,3.56,4.14,0.82,4.45,0,4.449999809,134,0.05,14,111,204,50,0.3,0.046,0.018,1.4,1.3,0.048,0.138,0.277,0.31,0.046,1,0,1,1,16,0.07,198,57,56,0,7,0,0,0,0.07,0.3,2.667,1.109,0.149,11,244,1 cup,30,1 fl oz,0 +01107,"MILK,HUMAN,MATURE,FLUID",87.5,70,1.03,4.38,0.2,6.89,0,6.889999866,32,0.03,3,14,51,17,0.17,0.052,0.026,1.8,5,0.014,0.036,0.177,0.223,0.011,5,0,5,5,16,0.05,212,61,60,0,7,0,0,0,0.08,0.3,2.009,1.658,0.497,14,246,1 cup,31,1 fl oz,0 +01108,"MILK,INDIAN BUFFALO,FLUID",83.39,97,3.75,6.89,0.79,5.18,0,,169,0.12,31,117,178,52,0.22,0.046,0.018,,2.3,0.052,0.135,0.091,0.192,0.023,6,0,6,6,,0.36,178,53,53,,,,,,,,4.597,1.787,0.146,19,244,1 cup,976,1 quart,0 +01109,"MILK,SHEEP,FLUID",80.7,108,5.98,7,0.96,5.36,0,,193,0.1,18,158,137,44,0.54,0.046,0.018,1.7,4.2,0.065,0.355,0.417,0.407,0.06,7,0,7,7,,0.71,147,44,44,,,,,,,,4.603,1.724,0.308,27,245,1 cup,980,1 quart,0 +01110,"MILK SHAKES,THICK CHOC",72.2,119,3.05,2.7,0.9,21.15,0.300000012,20.85000038,132,0.31,16,126,224,111,0.48,0.065,0.039,1.9,0,0.047,0.222,0.124,0.363,0.025,5,0,5,5,,0.32,67,18,18,0,4,0,0,0,0.05,0.2,1.681,0.78,0.1,11,28.35,1 fl oz,300,"1 container, (10.6 oz)",0 +01111,"MILK SHAKES,THICK VANILLA",74.45,112,3.86,3.03,0.91,17.75,0,17.75,146,0.1,12,115,183,95,0.39,0.051,0.014,2.3,0,0.03,0.195,0.146,0.368,0.042,7,0,7,7,,0.52,91,25,25,0,5,0,0,0,0.05,0.2,1.886,0.875,0.113,12,28.35,1 fl oz,313,"1 container, (11 oz)",0 +01112,"WHEY,ACID,FLUID",93.42,24,0.76,0.09,0.61,5.12,0,5.119999886,103,0.08,10,78,143,48,0.43,0.003,0.002,1.8,0.1,0.042,0.14,0.079,0.381,0.042,2,0,2,2,16,0.18,7,2,2,0,0,0,0,0,0,0,0.057,0.025,0.004,1,246,1 cup,984,1 quart,0 +01113,"WHEY,ACID,DRIED",3.51,339,11.73,0.54,10.77,73.45,0,73.44999695,2054,1.24,199,1349,2289,968,6.31,0.05,0.015,27.3,0.9,0.622,2.06,1.16,5.632,0.62,33,0,33,33,225,2.5,59,17,17,0,1,0,0,0,0,0,0.342,0.149,0.021,3,57,1 cup,3,1 tbsp,0 +01114,"WHEY,SWEET,FLUID",93.12,27,0.85,0.36,0.53,5.14,0,5.139999866,47,0.06,8,46,161,54,0.13,0.004,0.001,1.9,0.1,0.036,0.158,0.074,0.383,0.031,1,0,1,1,16,0.28,12,3,3,0,1,0,0,0,0,0,0.23,0.1,0.011,2,246,1 cup,984,1 quart,0 +01115,"WHEY,SWEET,DRIED",3.19,353,12.93,1.07,8.35,74.46,0,74.45999908,796,0.88,176,932,2080,1079,1.97,0.07,0.009,27.2,1.5,0.519,2.208,1.258,5.62,0.584,12,0,12,12,225,2.37,30,8,8,0,2,0,0,0,0.02,0.1,0.684,0.297,0.034,6,145,1 cup,8,1 tbsp,0 +01116,"YOGURT,PLN,WHL MILK,8 GRAMS PROT PER 8 OZ",87.9,61,3.47,3.25,0.72,4.66,0,4.659999847,121,0.05,12,95,155,46,0.59,0.009,0.004,2.2,0.5,0.029,0.142,0.075,0.389,0.032,7,0,7,7,15,0.37,99,27,27,0,5,0,0,0,0.06,0.2,2.096,0.893,0.092,13,245,"1 cup, (8 fl oz)",227,"1 container, (8 oz)",0 +01117,"YOGURT,PLN,LOFAT,12 GRAMS PROT PER 8 OZ",85.07,63,5.25,1.55,1.09,7.04,0,7.039999962,183,0.08,17,144,234,70,0.89,0.013,0.004,3.3,0.8,0.044,0.214,0.114,0.591,0.049,11,0,11,11,15,0.56,51,14,14,0,2,0,0,0,0.03,0.2,1,0.426,0.044,6,245,"1 cup, (8 fl oz)",227,"1 container, (8 oz)",0 +01118,"YOGURT,PLN,SKIM MILK,13 GRAMS PROT PER 8 OZ",85.23,56,5.73,0.18,1.18,7.68,0,7.679999828,199,0.09,19,157,255,77,0.97,0.015,0.005,3.6,0.9,0.048,0.234,0.124,0.641,0.053,12,0,12,12,15,0.61,7,2,2,0,0,0,0,0,0,0.2,0.116,0.049,0.005,2,245,"1 cup, (8 fl oz)",227,"1 container, (8 oz)",0 +01119,"YOGURT,VANILLA,LOFAT,11 GRAMS PROT PER 8 OZ",79,85,4.93,1.25,1.02,13.8,0,13.80000019,171,0.07,16,135,219,66,0.83,0.013,0.004,4.9,0.8,0.042,0.201,0.107,0.552,0.045,11,0,11,11,15,0.53,43,12,12,0,2,0,0,0,0.02,0.1,0.806,0.343,0.036,5,245,"1 cup, (8 fl oz)",227,"1 container, (8 oz)",0 +01120,"YOGURT,FRUIT,LOFAT,9 GRAMS PROT PER 8 OZ",75.3,99,3.98,1.15,0.93,18.64,0,18.63999939,138,0.06,13,109,177,53,0.67,0.079,0.064,2.8,0.6,0.034,0.162,0.086,0.446,0.037,9,0,9,9,15,0.43,40,11,11,0,2,0,0,0,0.02,0.1,0.742,0.316,0.033,5,245,"1 cup, (8 fl oz)",125,"1 container, (4.4 oz)",0 +01121,"YOGURT,FRUIT,LOFAT,10 GRAMS PROT PER 8 OZ",74.48,102,4.37,1.08,1.02,19.05,0,19.04999924,152,0.07,15,119,195,58,0.74,0.08,0.065,3.1,0.7,0.037,0.178,0.095,0.489,0.04,9,0,9,9,14,0.47,36,10,10,0,2,0,0,0,0.02,0.1,0.697,0.297,0.031,4,245,"1 cup, (8 fl oz)",170,"1 container, (6 oz)",0 +01122,"YOGURT,FRUIT,LOFAT,11 GRAMS PROT PER 8 OZ",74.1,105,4.86,1.41,1.03,18.6,0,,169,0.07,16,133,216,65,0.82,0.08,0.065,3.1,0.7,0.041,0.198,0.105,0.544,0.045,10,0,10,10,,0.52,60,,,,,,,,,,0.909,0.387,0.04,6,227,"1 container, (8 oz)",113,".5 container, (4 oz)",0 +01123,"EGG,WHOLE,RAW,FRESH",75.84,143,12.58,9.94,0.86,0.77,0,0.769999981,53,1.83,12,191,134,140,1.11,0.102,0.038,31.7,0,0.069,0.478,0.07,1.438,0.143,47,0,47,47,251,1.29,487,140,139,0,10,9,0,331,0.97,0.3,3.099,3.81,1.364,423,243,"1 cup, (4.86 large eggs)",56,1 extra large,12 +01124,"EGG,WHITE,RAW,FRESH",87.57,48,10.9,0.17,0.63,0.73,0,0.709999979,7,0.08,11,15,163,166,0.03,0.023,0.011,20,0,0.004,0.439,0.105,0.19,0.005,4,0,4,4,1,0.09,0,0,0,0,0,0,0,0,0,0,0,0,0,0,243,1 cup,33,1 large,0 +01125,"EGG,YOLK,RAW,FRSH",52.31,317,15.86,26.54,1.71,3.59,0,0.560000002,129,2.73,5,390,109,48,2.3,0.077,0.055,56,0,0.176,0.528,0.024,2.99,0.35,146,0,146,146,682,1.95,1442,381,371,38,88,33,0,1094,2.58,0.7,9.551,11.738,4.204,1234,243,1 cup,17,1 large,0 +01126,"EGG,YOLK,RAW,FROZEN",56.2,303,15.5,25.6,1.55,1.15,0,0.50999999,138,3.34,9,417,118,67,2.88,0.024,0.062,41.8,0,0.155,0.52,0.045,3.53,0.345,116,0,116,116,682,1.82,1609,433,423,36,85,32,0,1055,2.49,0.7,7.82,9.747,3.628,1075,227,.5 lb,,,0 +01127,"EGG,YOLK,RAW,FRZ,SUGARED",51.25,307,13.8,22.75,1.4,10.8,0,,123,3.14,10,384,103,67,2.81,0.012,0.059,37.7,0,0.135,0.53,0.023,3.2,0.284,139,0,139,139,,1.77,1315,395,395,,,,,,,,6.97,8.614,3.244,959,227,.5 lb,,,0 +01128,"EGG,WHL,CKD,FRIED",69.13,196,13.63,15.31,1.05,0.88,0,0.829999983,59,1.98,13,208,147,204,1.2,0.111,0.041,34.2,0,0.075,0.518,0.077,1.558,0.155,51,0,51,51,273,1.39,729,198,193,0,46,10,0,358,1.22,5.6,4.294,6.346,2.66,457,46,1 large,,,0 +01129,"EGG,WHL,CKD,HARD-BOILED",74.62,155,12.58,10.61,1.08,1.12,0,1.120000005,50,1.19,10,172,126,124,1.05,0.013,0.026,30.8,0,0.066,0.513,0.064,1.398,0.121,44,0,44,44,225,1.11,586,169,168,0,11,10,0,353,1.03,0.3,3.267,4.077,1.414,424,136,"1 cup, chopped",8,1 tbsp,12 +01130,"EGG,WHOLE,COOKED,OMELET",75.87,157,10.59,12.03,0.84,0.68,0,0.649999976,47,1.55,10,162,114,161,0.93,0.088,0.032,26.7,0,0.058,0.404,0.06,1.21,0.121,39,0,39,39,212,1.09,572,155,152,0,36,8,0,279,1.22,4.5,3.296,4.971,2.252,356,15.2,1 tbsp,61,1 large,0 +01131,"EGG,WHL,CKD,POACHED",75.54,142,12.53,9.9,1.26,0.76,0,0.769999981,53,1.83,12,190,133,294,1.1,0.102,0.039,31.6,0,0.055,0.405,0.059,1.433,0.121,35,0,35,35,200,1.28,485,139,138,0,10,9,0,330,0.96,0.3,3.087,3.795,1.359,422,50,1 large,,,0 +01132,"EGG,WHL,CKD,SCRMBLD",73.15,167,11.09,12.21,1.36,2.2,0,1.730000019,71,1.2,12,170,138,280,1,0.014,0.022,22.5,0.2,0.052,0.437,0.079,1.007,0.118,30,0,30,30,190,0.77,526,143,140,0,33,7,0,245,1.09,4,3.679,4.768,2.148,352,220,1 cup,14,1 tbsp,0 +01133,"EGG,WHOLE,DRIED",3.1,594,47.35,40.95,3.65,4.95,0,3.079999924,231,6.79,42,831,493,523,5.28,0.196,0.125,119.6,0,0.195,1.54,0.305,5.905,0.388,171,0,171,171,1007,3.95,997,275,270,0,41,36,0,1329,3.88,1.2,12.727,15.337,5.804,1715,85,"1 cup, sifted",5,1 tbsp,0 +01134,"EGG,WHL,DRIED,STABILIZED,GLUCOSE RED",1.87,615,48.17,43.95,3.63,2.38,0,,222,8.28,49,715,515,548,5.71,0.27,0.15,121.1,0,0.325,1.232,0.259,6.71,0.42,193,0,193,193,,10.51,2050,616,616,,,,,,,,13.198,17.564,5.713,2017,85,"1 cup, sifted",5,1 tbsp,0 +01135,"EGG,WHITE,DRIED,FLAKES,GLUCOSE RED",14.62,351,76.92,0.04,4.25,4.17,0,4.170000076,83,0.23,67,83,1042,1156,0.15,0.23,0.07,116.8,0,0.035,2.162,0.675,1.829,0.023,89,0,89,89,,0.49,0,0,0,0,0,0,0,0,0,0,0,0,0,0,227,.5 lb,,,0 +01136,"EGG,WHITE,DRIED,PDR,GLUCOSE RED",8.54,376,82.4,0.04,4.55,4.47,0,4.46999979,89,0.24,72,89,1116,1238,0.16,0.17,0.05,125.1,0,0.037,2.316,0.723,1.958,0.024,96,0,96,96,8,0.53,0,0,0,0,0,0,0,0,0,0,0,0,0,0,107,"1 cup, sifted",7,1 tbsp,0 +01137,"EGG,YOLK,DRIED",2.95,666,34.25,55.8,3.4,3.6,0,3.599999905,284,5.42,13,920,244,135,4.93,0.012,0.119,86.8,0,0.29,1.88,0.095,7.765,0.66,244,0,244,244,1388,5.33,1751,417,395,79,186,70,0,2299,5.42,1.5,17.154,21.129,7.895,2335,67,"1 cup, sifted",4,1 tbsp,0 +01138,"EGG,DUCK,WHOLE,FRESH,RAW",70.83,185,12.81,13.77,1.14,1.45,0,0.930000007,64,3.85,17,220,222,146,1.41,0.062,0.038,36.4,0,0.156,0.404,0.2,1.862,0.25,80,0,80,80,263,5.4,674,194,192,0,14,12,0,459,1.34,0.4,3.681,6.525,1.223,884,70,1 egg,,,12 +01139,"EGG,GOOSE,WHOLE,FRESH,RAW",70.43,185,13.87,13.27,1.08,1.35,0,0.939999998,60,3.64,16,208,210,138,1.33,0.062,0.038,36.9,0,0.147,0.382,0.189,1.759,0.236,76,0,76,76,263,5.1,650,187,185,0,13,12,0,442,1.29,0.4,3.595,5.747,1.672,852,144,1 egg,,,13 +01140,"EGG,QUAIL,WHOLE,FRESH,RAW",74.35,158,13.05,11.09,1.1,0.41,0,0.409999996,64,3.65,13,226,132,141,1.47,0.062,0.038,32,0,0.13,0.79,0.15,1.761,0.15,66,0,66,66,263,1.58,543,156,155,0,11,10,0,369,1.08,0.3,3.557,4.324,1.324,844,9,1 egg,,,8 +01141,"EGG,TURKEY,WHL,FRSH,RAW",72.5,171,13.68,11.88,0.79,1.15,0,,99,4.1,13,170,142,151,1.58,0.062,0.038,34.3,0,0.11,0.47,0.024,1.889,0.131,71,0,71,71,,1.69,554,166,166,,,,,,,,3.632,4.571,1.658,933,79,1 egg,,,12 +01142,"EGG SUBSTITUTE,FROZEN",73.1,160,11.29,11.11,1.3,3.2,0,3.200000048,73,1.98,15,72,213,199,0.98,0.022,0.006,41.3,0.5,0.12,0.386,0.14,1.66,0.133,16,0,16,16,2,0.34,225,11,0,0,135,0,0,0,1.59,0.2,1.93,2.435,6.241,2,240,1 cup,60,.25 cup,0 +01143,"EGG SUBSTITUTE,LIQUID",82.75,84,12,3.31,1.3,0.64,0,0.639999986,53,2.1,9,121,330,177,1.3,0.023,0.007,24.9,0,0.11,0.3,0.11,2.7,0.003,15,0,15,15,2,0.3,360,18,0,0,216,0,0,0,0.27,0.8,0.659,0.896,1.603,1,251,1 cup,16,1 tbsp,0 +01144,"EGG SUBSTITUTE,POWDER",3.86,444,55.5,13,5.84,21.8,0,21.79999924,326,3.16,65,478,744,800,1.82,0.207,0.08,127.7,0.8,0.226,1.76,0.577,3.384,0.143,125,0,125,125,118,3.52,1230,369,369,0,0,0,0,0,1.26,0.4,3.766,5.341,1.683,572,9.9,.35 oz,20,.7 oz,0 +01145,"BUTTER,WITHOUT SALT",17.94,717,0.85,81.11,0.04,0.06,0,0.059999999,24,0.02,2,24,24,11,0.09,0.016,0.004,1,0,0.005,0.034,0.042,0.11,0.003,3,0,3,3,19,0.17,2499,684,671,0,158,0,0,0,2.32,7,51.368,21.021,3.043,215,227,1 cup,14,1 tbsp,0 +01146,"CHEESE,PARMESAN,SHREDDED",25,415,37.86,27.34,6.39,3.41,0,,1253,0.87,51,735,97,1696,3.19,0.037,0.023,23.9,0,0.041,0.352,0.287,0.527,0.105,8,0,8,8,,1.4,639,122,108,,,,,,,,17.37,8.734,0.661,72,5,1 tbsp,,,0 +01147,"CHEESE,PAST PROCESS,AMERICAN,WO/DI NA PO4",39.16,375,22.15,31.25,5.84,1.6,0,0.50999999,616,0.39,22,444,162,650,2.99,0.03,0.015,14.4,0,0.027,0.353,0.069,0.482,0.071,8,0,8,8,,0.7,961,254,247,0,82,0,0,0,0.27,2.7,19.694,8.951,0.99,94,28.35,1 oz,18,1 cubic inch,0 +01148,"CHEESE,PAST PROCESS,SWISS,WO/DI NA PO4",42.31,334,24.73,25.01,5.85,2.1,0,,772,0.61,29,540,216,681,3.61,0.027,0.014,15.9,0,0.014,0.276,0.038,0.26,0.036,6,0,6,6,,1.23,808,225,221,,,,,,,,16.045,7.046,0.622,85,28.35,1 oz,18,1 cubic inch,0 +01149,"CHEESE FD,PAST PROCESS,AMERICAN,W/DI NA PO4",43.15,328,19.61,24.6,5.35,7.29,0,7.429999828,574,0.84,31,754,279,1596,2.99,0.03,0.01,16,0,0.029,0.442,0.14,0.558,0.141,7,0,7,7,,1.12,762,201,196,,65,,,,0.22,,15.443,7.206,0.723,64,28.35,1 oz,227,"1 package, (8 oz)",0 +01150,"CHEESE SPRD,PAST PROCESS,AMERICAN,W/DI NA PO4",47.65,290,16.41,21.23,5.98,8.73,0,,562,0.33,29,875,242,1625,2.59,0.033,0.02,11.3,0,0.048,0.431,0.131,0.686,0.117,7,0,7,7,,0.4,788,,,,,,,,,,13.327,6.219,0.624,55,28.35,1 oz,142,"1 jar, (5 oz)",0 +01151,"MILK,NONFAT,FLUID,WO/ VIT A (FAT FREE OR SKIM)",90.8,35,3.41,0.18,0.76,4.85,0,5.090000153,123,0.04,11,101,166,52,0.4,0.011,0.002,2.1,1,0.036,0.14,0.088,0.329,0.04,5,0,5,5,,0.38,7,2,2,,,,,,0.04,,0.117,0.047,0.007,2,245,1 cup,980,1 quart,0 +01152,"MILK,RED FAT,FLUID,2% MILKFAT,W/ NONFAT MILK SOL,WO/ VIT A",87.71,56,3.95,1.98,0.87,5.49,0,,143,0.06,15,112,182,59,0.41,0.011,0.002,2.6,1.1,0.045,0.194,0.101,0.339,0.046,5,0,5,5,,0.39,75,17,16,,,,,,,,1.232,0.065,0.009,8,245,1 cup,980,1 quart,0 +01153,"MILK,CND,EVAP,W/ VIT A",74.04,134,6.81,7.56,1.55,10.04,0,,261,0.19,24,203,303,106,0.77,0.016,0.006,2.3,1.9,0.047,0.316,0.194,0.638,0.05,8,0,8,8,,0.16,397,,,,,,,,,,4.591,2.335,0.245,29,31.5,1 fl oz,126,.5 cup,0 +01154,"MILK,DRY,NONFAT,REG,W/ VIT A",3.16,362,36.16,0.77,7.93,51.98,0,51.97999954,1257,0.32,110,968,1794,535,4.08,0.041,0.02,27.3,6.8,0.415,1.55,0.951,3.568,0.361,50,0,50,50,169,4.03,2179,653,653,0,1,0,0,0,0,0.1,0.499,0.2,0.03,20,120,1 cup,30,.25 cup,0 +01155,"MILK,DRY,NONFAT,INST,WO/ VIT A",3.96,358,35.1,0.72,8.03,52.19,0,52.18999863,1231,0.31,117,985,1705,549,4.41,0.041,0.02,27.3,5.6,0.413,1.744,0.891,3.23,0.345,50,0,50,50,,3.99,15,4,4,0,1,0,0,0,0.01,0,0.47,0.19,0.03,18,68,1 cup,91,"1 envelope, (1-1/3 cup)",0 +01156,"CHEESE,GOAT,HARD TYPE",29.01,452,30.52,35.59,3.72,2.17,0,2.170000076,895,1.88,54,729,48,346,1.59,0.627,0.252,5.5,0,0.14,1.19,2.4,0.41,0.08,4,0,4,4,15,0.12,1745,486,478,0,91,0,0,0,0.31,3,24.609,8.117,0.845,105,28.35,1 oz,,,0 +01157,"CHEESE,GOAT,SEMISOFT TYPE",45.52,364,21.58,29.84,2.94,2.54,0,2.539999962,298,1.62,29,375,158,515,0.66,0.564,0.093,3.8,0,0.072,0.676,1.148,0.19,0.06,2,0,2,2,15,0.22,1464,407,401,0,77,0,0,0,0.26,2.5,20.639,6.808,0.709,79,28.35,1 oz,,,0 +01159,"CHEESE,GOAT,SOFT TYPE",60.75,268,18.52,21.08,1.58,0.89,0,0.889999986,140,1.9,16,256,26,368,0.92,0.732,0.1,2.8,0,0.07,0.38,0.43,0.68,0.25,12,0,12,12,15,0.19,1033,288,283,0,54,0,0,0,0.18,1.8,14.575,4.807,0.501,46,28.35,1 oz,,,0 +01160,"EGG,YOLK,RAW,FRZ,SALTED",50.8,274,14,23,10.6,1.6,0,,114,3.75,10,431,117,3780,2.84,0.109,0.062,37.7,0,0.13,0.43,0.04,3.23,0.261,107,0,107,107,,2.52,1190,357,357,,,,,,,,7.028,8.849,3.15,955,227,.5 lb,,,0 +01161,"CHEESE SUB,MOZZARELLA",47.36,248,11.47,12.22,5.27,23.67,0,23.67000008,610,0.4,41,583,455,685,1.92,0.11,0.028,19.2,0.1,0.026,0.444,0.317,0.083,0.051,11,0,11,11,14,0.81,1457,437,437,0,0,0,0,0,0.11,1,3.711,6.243,1.738,0,113,"1 cup, shredded",28,1 oz,0 +01163,CHEESE FONDUE,61.61,229,14.23,13.47,1.85,3.77,0,,476,0.39,23,306,105,132,1.96,0.026,0.099,9,0,0.027,0.196,0.19,0.233,0.055,8,4,4,11,,0.83,414,109,107,,,,,,,,8.721,3.563,0.484,45,215,1 cup,108,.5 cup,0 +01164,"CHEESE SAU,PREP FROM RECIPE",66.86,197,10.33,14.92,2.41,5.48,0.100000001,,311,0.35,19,229,142,493,1.26,0.019,0.04,6.6,0.6,0.044,0.243,0.204,0.233,0.045,10,2,8,11,,0.35,606,166,163,,,,,,,,8.034,4.735,1.397,38,243,1 cup,30,2 tbsp,0 +01165,"CHEESE,MEXICAN,QUESO ANEJO",38.06,373,21.44,29.98,5.89,4.63,0,4.630000114,680,0.47,28,444,87,1131,2.94,0.008,0.037,14.5,0,0.02,0.209,0.032,0.252,0.047,1,0,1,1,15,1.38,187,54,54,0,4,0,0,0,0.26,2.5,19.033,8.528,0.901,105,132,"1 cup, crumbled",28,1 oz,0 +01166,"CHEESE,MEXICAN,QUESO ASADERO",42.16,356,22.6,28.26,4.11,2.87,0,2.869999886,661,0.51,26,443,86,655,3.02,0.026,0.036,14.5,0,0.021,0.223,0.181,0.231,0.053,8,0,8,8,15,1,190,55,55,0,4,0,0,0,0.24,2.4,17.939,8.038,0.85,105,132,"1 cup, diced",113,"1 cup, shredded",0 +01167,"CHEESE,MEXICAN,QUESO CHIHUAHUA",39.13,374,21.56,29.68,4.06,5.56,0,5.559999943,651,0.47,23,442,52,617,3.5,0.024,0.071,14.5,0,0.018,0.225,0.15,0.279,0.055,2,0,2,2,15,1.03,193,56,56,0,4,0,0,0,0.26,2.5,18.843,8.443,0.892,105,132,"1 cup, diced",113,"1 cup, shredded",0 +01168,"CHEESE,LOFAT,CHEDDAR OR COLBY",63.1,173,24.35,7,3.64,1.91,0,0.519999981,415,0.42,16,484,66,612,1.82,0.021,0.006,14.5,0,0.012,0.221,0.051,0.183,0.045,11,0,11,11,15,0.49,207,60,60,0,4,0,0,0,0.06,0.6,4.342,2.082,0.222,21,132,"1 cup, diced",113,"1 cup, shredded",0 +01169,"CHEESE,LOW-SODIUM,CHEDDAR OR COLBY",38.98,398,24.35,32.62,2.13,1.91,0,0.49000001,703,0.72,27,484,112,21,3.09,0.036,0.011,14.5,0,0.021,0.375,0.086,0.311,0.076,18,0,18,18,15,0.83,996,264,257,0,84,0,0,0,0.28,2.7,20.768,9.189,0.972,100,132,"1 cup, diced",113,"1 cup, shredded",0 +01171,"EGG,WHOLE,RAW,FROZEN",75.85,148,11.95,10.2,0.95,1.05,0,,59,1.85,11,202,130,133,1.38,0.053,0.034,30.8,0,0.06,0.46,0.075,1.48,0.162,73,0,73,73,,1.07,525,158,158,,,,,,,,3.147,3.886,1.412,432,,,,,0 +01172,"EGG,WHITE,RAW,FROZEN",88.55,47,9.8,0,0.6,1.05,0,,7,0.05,10,13,136,158,0.02,0.012,0.007,17.6,0,0.005,0.4,0.1,0.155,0.004,3,0,3,3,,0.06,0,0,0,,,,,,,,0,0,0,0,,,,,0 +01173,"EGG,WHITE,DRIED",5.8,382,81.1,0,5.3,7.8,0,5.400000095,62,0.15,88,111,1125,1280,0.1,0.114,0.007,125.1,0,0.005,2.53,0.865,0.775,0.036,18,0,18,18,,0.18,0,0,0,0,0,0,0,0,0,0,0,0,0,0,,,,,0 +01178,"SOUR CREAM,REDUCED FAT",71,181,7,14.1,0.9,7,0,0.300000012,141,0.06,11,85,211,70,0.27,0.01,,4.1,0.9,0.04,0.24,0.07,,0.02,11,0,11,11,19,0.3,436,119,117,0,27,0,0,0,0.4,0.7,8.7,4.1,0.5,35,,,,,0 +01179,"SOUR CREAM,LIGHT",78.1,136,3.5,10.6,0.7,7.1,0,0.219999999,141,0.07,10,71,212,71,0.5,0.016,,3.1,0.9,0.04,0.12,0.07,,0.02,11,0,11,11,19,0.42,328,90,88,0,21,0,0,0,0.3,0.5,6.6,3.1,0.4,35,,,,,0 +01180,"SOUR CREAM,FAT FREE",80.6,74,3.1,0,0.7,15.6,0,0.389999986,125,0,10,95,129,141,0.5,0.016,,5.3,0,0.04,0.15,0.07,,0.02,11,0,11,11,19,0.3,255,73,72,0,9,0,0,0,0,0,0,0,0,9,,,,,0 +01182,"USDA COMMODITY,CHS,CHEDDAR,RED FAT",48.2,282,27.2,18.3,4.3,2,0,0.579999983,905,0.13,35,583,93,725,4.3,0.021,,15.5,0,0.03,0.3,0.06,,0.084,20,0,20,20,15,1.66,633,150,142,0,95,0,0,0,0.16,1.5,11.6,5.02,0.75,56,,,,,0 +01184,"YOGURT,VAN OR LEM FLAV,NONFAT MILK,SWTND W/LOW-CALORIE SWTNR",87.43,47,3.86,0.18,1,7.5,0,7.5,143,0.12,13,109,177,59,0.67,0.079,,3.1,1.1,0.034,0.162,0.086,,0.037,8,0,8,8,15,0.43,0,0,0,0,0,0,0,0,0,0,0.116,0.049,0.005,2,,,,,0 +01185,"PARMESAN CHS TOPPING,FAT FREE",8.6,370,40,5,6.4,40,0,1.5,800,5,40,700,600,1150,3,0.02,,43.3,0,0.05,0.05,0.2,,0.1,25,0,25,25,15,1.1,151,40,39,0,13,0,0,0,0.04,0.4,3.11,1.446,0.186,20,,,,,0 +01186,"CHEESE,CREAM,FAT FREE",71.87,105,15.69,1,3.77,7.66,0,5.480000019,351,0.19,22,523,278,702,1.5,0.036,0.017,4.9,0,0.04,0.265,0.23,0.84,0.05,35,0,35,35,65,0.95,53,11,10,0,11,0,0,0,0.02,0.2,0.644,0.25,0.057,12,,,,,0 +01187,"YOGURT,CHOC,NONFAT MILK",71.57,108,3.53,0,1.37,23.53,1.200000048,14.97000027,88,0.42,40,166,339,135,1.13,0.209,,7,0,0.047,0.215,0.223,,0.047,12,0,12,12,15,0.5,0,0,0,0,0,0,0,0,0,0,0,0,0,1,,,,,0 +01188,KRAFT CHEEZ WHIZ PAST PROCESS CHS SAU,51.5,276,12,21,5.8,9.2,0.300000012,6.699999809,359,0.19,,806,240,1638,1.64,,,,0.4,,0.24,,,,,,,,,,649,,,,,,,,,,13.1,,,75,33,2 tbsp,,,0 +01189,KRAFT CHEEZ WHIZ LT PAST PROCESS CHS PRODUCT,51.5,215,16.3,9.5,6.4,16.2,0.200000003,8.199999809,418,0.16,,943,297,1705,2.36,,,,0.4,,0.33,,,,,,,,,,628,,,,,,,,,,6.4,,,35,35,2 tbsp,,,0 +01190,KRAFT FREE SINGLES AMERICAN NONFAT PAST PROCESS CHS PRODUCT,58,148,22.7,1,6.1,11.7,0.200000003,6.699999809,712,0.05,,923,236,1298,2.5,,,,0.2,,0.28,,,,,,,,,,2166,,,,,,,,,,0.7,,,16,21,1 slice,,,0 +01191,KRAFT VELVEETA PAST PROCESS CHS SPRD,45.8,303,16.3,22,6,9.8,0,8.100000381,466,0.18,,863,335,1499,1.84,,,,0.2,,0.35,,,,,,,,,,1107,,,,,,,,,,14.4,,,80,28,1 oz,,,0 +01192,KRAFT VELVEETA LT RED FAT PAST PROCESS CHS PRODUCT,51.3,222,19.6,10.6,6.6,11.8,0,8.5,574,0.14,,1024,345,1586,2.49,,,,0.1,,0.65,,,,,,,,,,982,,,,,,,,,,7.1,,,42,28,1 oz,,,0 +01193,KRAFT BREAKSTONE'S RED FAT SOUR CRM,76.2,152,4.5,12,0.8,6.5,0.100000001,6.400000095,161,0.06,,110,210,59,,,,,1.1,,,,,,,,,,,,1053,,,,,,,,,,7.6,,,50,31,2 tbsp,,,0 +01194,KRAFT BREAKSTONE'S FREE FAT FREE SOUR CRM,77.7,91,4.7,1.3,1.2,15.1,0,7.199999809,141,0.05,,116,219,72,,,,,1.2,,,,,,,,,,,,679,,,,,,,,,,0.8,,,9,32,2 tbsp,,,0 +01195,KRAFT BREYERS LOWFAT STRAWBERRY YOGURT (1% MILKFAT),76.5,96,3.8,0.8,0.7,18.2,0.200000003,17.39999962,125,0.1,,89,192,52,,,,,0,,0.19,,,,,,,,,0.53,34,,,,,,,,,,0.5,,,9,227,"1 container, (8 oz)",,,0 +01196,KRAFT BREYERS LT N' LVLY LOWFAT STR'BERY YOGURT (1% MILKFAT),73.3,108,3.2,0.8,0.6,21.9,0.200000003,19.60000038,91,0.11,,67,151,45,,,,,0,,0.14,,,,,,,,,0.46,30,,,,,,,,,,0.5,,,9,125,"1 container, (4.4 oz)",,,0 +01197,KRAFT BREYERS SMOTH&CRMY LOWFAT STR'BERY YOGURT (1% MILKFAT),74.8,102,3.8,0.9,0.7,19.9,0.300000012,17.20000076,108,0.13,,78,177,55,,,,,0,,0.18,,,,,,,,,0.52,31,,,,,,,,,,0.5,,,9,227,"1 container, (8 oz)",,,0 +01198,KRAFT BREYERS LT NONFAT STR'BERY YOGURT (W/ASPRT&FRUCT SW'T),86,55,3.4,0.2,0.6,9.9,0,7.699999809,95,0.11,,68,146,45,,,,,0.6,,0.14,,,,,,,,,0.41,4,,,,,,,,,,0.1,,,5,227,"1 container, (8 oz)",,,0 +01199,"CREAM,HALF & HALF,FAT FREE",86,59,2.6,1.4,1,9,0,5,96,0,16,151,206,144,0.81,0.016,0.002,2.9,0.7,0.056,0.237,0.124,0.459,0.062,4,0,4,4,15,0.52,43,12,12,0,3,0,0,0,0.04,0.2,0.841,0.384,0.052,5,,,,,0 +01200,REDDI WIP FAT FREE WHIPPED TOPPING,66.44,149,3,5,0.56,25,0.400000006,16,108,0.03,8,68,108,72,0.31,0.019,,3,0,0.148,0.619,0.364,,0.123,17,0,17,17,0,1.48,175,49,48,0,9,0,0,0,0.09,0.3,2.869,1.25,0.299,16,,,,,0 +01202,"MILK,CHOC,FLUID,COMM,RED FAT,W/ ADDED CA",82.17,78,2.99,1.9,0.81,12.13,0.699999988,9.550000191,194,0.24,14,76,123,66,0.39,0.075,0.062,3.4,0,0.045,0.565,0.164,0.539,0.024,2,0,2,2,,0.33,227,64,63,0,11,0,0,0,0.04,0.2,1.177,0.455,0.089,8,250,1 cup,31,1 fl oz,0 +01203,"YOGURT,FRUIT,LOFAT,W/LO CAL SWEETENER",74.1,105,4.86,1.41,1.03,18.6,0,2.900000095,152,0.07,16,133,194,58,0.82,0.08,0.065,3.1,0.7,0.041,0.18,0.105,0.544,0.045,10,0,10,10,15,0.52,441,131,131,0,4,0,0,0,0.06,1.2,0.909,0.387,0.04,6,227,"1 8 oz container, (8 oz)",245,"1 cup, (8 fl oz)",0 +01204,"CHEESE,PARMESAN,DRY GRATED,RED FAT",50.6,265,20,20,8.03,1.37,0,0,1109,0.9,38,729,125,1529,3.87,0.238,0.085,17.7,0,0.029,0.486,0.114,0.325,0.049,10,0,10,10,21,2.26,605,160,156,0,51,0,0,0,0.17,1.7,13.317,6.098,0.462,88,100,1 cup,5,1 tbsp,0 +01205,"CREAM SUB,FLAV,LIQ",50.06,251,0.69,13.5,0.55,35.07,1.100000024,33.04000092,6,0.59,19,28,96,80,0.25,0.142,0.142,0.7,0,0.004,0.024,0.091,0.01,0.004,1,0,1,1,0,0,0,0,0,0,0,0,0,1,1.58,3.3,2.635,4.002,6.269,0,,,,,0 +01206,"CREAM SUB,FLAV,POWDERED",1.52,495,0,21.47,0.79,75.42,1.200000048,58.00999832,5,0.63,17,28,90,196,0.23,0.135,0.14,1.3,0,0.004,0.027,0.084,0.009,0.004,1,0,1,1,0,0,0,0,0,0,0,0,0,1,0.41,9.1,19.446,0.618,0.229,0,,,,,0 +01208,"CHEESE,PROVOLONE,RED FAT",50.6,274,24.7,17.6,3.6,3.5,0,0.550000012,756,0.52,28,496,138,876,3.23,0.026,0.01,14.5,0,0.019,0.321,0.156,0.476,0.073,10,0,10,10,13,1.46,532,141,137,0,45,0,0,0,0.15,1.5,11.3,4.89,0.51,55,132,"1 cup, diced",113,"1 cup, shredded",0 +01209,"CHEESE,MEXICAN,BLEND,RED FAT",48.2,282,24.69,19.4,4.3,3.41,0,0.560000002,1146,0.13,35,583,93,776,4.3,0.021,,15.5,0,0.03,0.3,0.06,,0.084,20,0,20,20,14,1.66,586,155,151,0,50,0,0,0,0.17,1.6,11.58,5.02,0.75,62,,,,,0 +01210,"EGG MIX,USDA CMDTY",2.78,549,35.6,34.5,3.15,23.97,,2.460000038,171,3.23,11,451,373,576,2.76,0.149,0.056,118,,0.19,1.277,0.267,6.5,0.207,138,0,138,138,602,2.9,398,117,116,0,0,13,0,,2.04,0.7,10.305,13.745,7.555,1110,,,,,0 +02001,"ALLSPICE,GROUND",8.46,263,6.09,8.69,4.65,72.12,21.60000038,,661,7.06,135,113,1044,77,1.01,0.553,2.943,2.7,39.2,0.101,0.063,2.86,,0.21,36,0,36,36,,0,540,27,0,,,,,,,,2.55,0.66,2.36,0,6,1 tbsp,2,1 tsp,0 +02002,ANISE SEED,9.54,337,17.6,15.9,6.95,50.02,14.60000038,,646,36.96,170,440,1441,16,5.3,0.91,2.3,5,21,0.34,0.29,3.06,0.797,0.65,10,0,10,10,,0,311,16,0,,,,,,,,0.586,9.78,3.15,0,6.7,"1 tbsp, whole",2,"1 tsp, whole",0 +02003,"SPICES,BASIL,DRIED",6.43,251,14.37,3.98,14.27,60.96,40.5,1.710000038,2113,42,422,490,3433,34,5.82,1.367,3.167,2.8,61.2,0.148,0.316,6.948,,2.32,274,0,274,274,55,0,9375,469,0,0,5584,81,393,1150,7.48,1714.5,0.24,0.453,2.168,0,0.7,"1 tsp, leaves",2,"1 tbsp, leaves",0 +02004,"SPICES,BAY LEAF",5.44,313,7.61,8.36,3.62,74.97,26.29999924,,834,43,120,113,529,23,3.7,0.416,8.167,2.8,46.5,0.009,0.421,2.005,,1.74,180,0,180,180,,0,6185,309,0,,,,,,,,2.28,1.64,2.29,0,1.8,"1 tbsp, crumbled",1,"1 tsp, crumbled",0 +02005,CARAWAY SEED,9.87,333,19.77,14.59,5.87,49.9,38,0.639999986,689,16.23,258,568,1351,17,5.5,0.91,1.3,12.1,21,0.383,0.379,3.606,,0.36,10,0,10,10,25,0,363,18,0,0,189,58,6,205,2.5,0,0.62,7.125,3.272,0,6.7,1 tbsp,2,1 tsp,0 +02006,"SPICES,CARDAMOM",8.28,311,10.76,6.7,5.78,68.47,28,,383,13.97,229,178,1119,18,7.47,0.383,28,,21,0.198,0.182,1.102,,0.23,,,,,,0,0,0,0,,,,,,,,0.68,0.87,0.43,0,5.8,"1 tbsp, ground",2,"1 tsp, ground",0 +02007,CELERY SEED,6.04,392,18.07,25.27,9.27,41.35,11.80000019,0.670000017,1767,44.9,440,547,1400,160,6.93,1.37,7.567,12.1,17.1,0.34,0.29,3.06,,0.89,10,0,10,10,25,0,52,3,0,0,31,0,0,0,1.07,0,2.19,15.93,3.72,0,6.5,1 tbsp,2,1 tsp,0 +02008,"CHERVIL,DRIED",7.2,237,23.2,3.9,16.6,49.1,11.30000019,,1346,31.95,130,450,4740,83,8.8,0.44,2.1,29.3,50,0.38,0.68,5.4,,0.93,274,0,274,274,,0,5850,293,0,,,,,,,,0.169,1.399,1.8,0,1.9,1 tbsp,1,1 tsp,0 +02009,CHILI POWDER,7.79,314,12.26,16.76,8.53,54.66,34.20000076,7.190000057,278,14.25,170,303,1916,1010,2.7,0.429,2.165,6,64.1,0.349,0.794,7.893,,3.67,100,0,100,100,66,0,29650,1483,0,2090,15000,3490,21,310,29.05,105.7,2.953,3.574,7.458,0,7.5,1 tbsp,3,1 tsp,0 +02010,"CINNAMON,GROUND",10.58,247,3.99,1.24,3.6,80.59,53.09999847,2.170000076,1002,8.32,60,64,431,10,1.83,0.339,17.466,3.1,3.8,0.022,0.041,1.332,0.358,0.158,6,0,6,6,11,0,295,15,0,1,112,129,15,222,2.32,31.2,0.345,0.246,0.068,0,7.85,1 tbsp,3,1 tsp,0 +02011,"CLOVES,GROUND",6.86,323,5.98,20.07,5.88,61.21,34.20000076,2.380000114,646,8.68,264,105,1102,243,1.09,0.347,30.033,5.9,80.8,0.115,0.267,1.458,,0.59,93,0,93,93,37,0,530,27,0,0,84,468,0,0,8.52,141.8,5.438,1.471,7.088,0,6.6,1 tbsp,2,1 tsp,0 diff --git a/main/tests/cypress/cypress/integration/language/change_language.spec.js b/main/tests/cypress/cypress/integration/language/change_language.spec.js new file mode 100644 index 000000000..b1215acd2 --- /dev/null +++ b/main/tests/cypress/cypress/integration/language/change_language.spec.js @@ -0,0 +1,19 @@ +describe(__filename, function () { + it('Check elements on the langage page', function () { + cy.visitOpenRefine(); + cy.get('.main-layout-panel').contains('Select preferred language'); + cy.get('select#langDD').should('exist'); + cy.get('#set-lang-button').should('exist'); + }); + + // This test can't be implemented + // It's changing the UI for all subsequent tests + // If it fails, the interface will remains in German, making subsequent tests fails + // it('Change the langage', function () { + // cy.visitOpenRefine(); + // cy.navigateTo('Language Settings'); + // cy.get('#langDD').select('de'); + // cy.get('#set-lang-button').click(); + // cy.get('#slogan').contains('Ein leistungsstarkes Werkzeug für die Bearbeitung von ungeordneten Daten.'); + // }); +}); diff --git a/main/tests/cypress/cypress/integration/preferences/change_preference.spec.js b/main/tests/cypress/cypress/integration/preferences/change_preference.spec.js new file mode 100644 index 000000000..56ccaac18 --- /dev/null +++ b/main/tests/cypress/cypress/integration/preferences/change_preference.spec.js @@ -0,0 +1,33 @@ +describe(__filename, function () { + it('Edit a preference', function () { + cy.visitOpenRefine(); + const testPreferenceName = 'PreferenceName_' + Date.now(); + const testPreferenceValue = 'PreferenceValue_' + Date.now(); + + cy.setPreference(testPreferenceName, testPreferenceValue); + + cy.get('#project-links a').contains('Preferences').click(); + cy.get('table.preferences tr').contains(testPreferenceName); + + cy.window().then(($win) => { + cy.stub($win, 'prompt').returns(testPreferenceValue + '_Edited'); + cy.get('table.preferences tr').contains(testPreferenceName).parentsUntil('tbody').find('td:last-child button:first-child').click(); + }); + + cy.get('table.preferences tr').contains(testPreferenceValue + '_Edited'); + }); + + it('Add a new preference', function () { + cy.visitOpenRefine(); + cy.get('#project-links a').contains('Preferences').click(); + + const testPreferenceName = Date.now(); + + cy.window().then(($win) => { + cy.stub($win, 'prompt').returns(testPreferenceName); + cy.get('table.preferences tr:last-child button.button').click(); + }); + + cy.get('table.preferences tr:nth-last-child(2)').contains(testPreferenceName); + }); +}); diff --git a/main/tests/cypress/cypress/integration/project/edit/edit_cells.spec.js b/main/tests/cypress/cypress/integration/project/edit/edit_cells.spec.js new file mode 100644 index 000000000..71efbdeb0 --- /dev/null +++ b/main/tests/cypress/cypress/integration/project/edit/edit_cells.spec.js @@ -0,0 +1,86 @@ +describe(__filename, function () { + it('Ensure the Edit button is visible on mouse over a cell', function () { + cy.loadAndVisitProject('food.mini.csv'); + + cy.getCell(1, 'Water').trigger('mouseover'); + cy.getCell(1, 'Water').find('a.data-table-cell-edit').should('be.visible'); + }); + + it('Ensure the Edit button opens a popup', function () { + cy.loadAndVisitProject('food.mini.csv'); + cy.getCell(1, 'Shrt_Desc').trigger('mouseover').find('a.data-table-cell-edit').click(); + cy.get('.menu-container.data-table-cell-editor').should('exist'); + cy.get('.menu-container.data-table-cell-editor textarea').should('have.value', 'BUTTER,WHIPPED,WITH SALT'); + }); + + it('Test a simple edit', function () { + cy.loadAndVisitProject('food.mini.csv'); + cy.getCell(1, 'Shrt_Desc').trigger('mouseover').find('a.data-table-cell-edit').click(); + cy.get('.menu-container.data-table-cell-editor').should('exist'); + cy.get('.menu-container.data-table-cell-editor textarea').type('OpenRefine Testing'); + cy.get('.menu-container button[bind="okButton"]').click(); + // ensure value has been changed in the grid + cy.get('.menu-container.data-table-cell-editor').should('not.exist'); + cy.assertCellEquals(1, 'Shrt_Desc', 'OpenRefine Testing'); + }); + + it('Test a simple edit, using keyboard shortcut', function () { + cy.loadAndVisitProject('food.mini.csv'); + cy.getCell(1, 'Shrt_Desc').trigger('mouseover').find('a.data-table-cell-edit').click(); + cy.get('.menu-container.data-table-cell-editor').should('exist'); + cy.get('.menu-container.data-table-cell-editor textarea').type('OpenRefine Testing'); + cy.get('body').type('{enter}'); + cy.get('.menu-container.data-table-cell-editor').should('not.exist'); + cy.assertCellEquals(1, 'Shrt_Desc', 'OpenRefine Testing'); + }); + + it('Test the cancel button', function () { + cy.loadAndVisitProject('food.mini.csv'); + cy.getCell(1, 'Shrt_Desc').trigger('mouseover').find('a.data-table-cell-edit').click(); + cy.get('.menu-container.data-table-cell-editor').should('exist'); + cy.get('.menu-container.data-table-cell-editor textarea').type('OpenRefine Testing'); + cy.get('.menu-container button[bind="cancelButton"]').click(); + // ensure value has been changed in the grid + cy.get('.menu-container.data-table-cell-editor').should('not.exist'); + cy.assertCellEquals(1, 'Shrt_Desc', 'BUTTER,WHIPPED,WITH SALT'); + }); + + it('Test the cancel button, using keyboard shortcut', function () { + cy.loadAndVisitProject('food.mini.csv'); + cy.getCell(1, 'Shrt_Desc').trigger('mouseover').find('a.data-table-cell-edit').click(); + cy.get('.menu-container.data-table-cell-editor').should('exist'); + cy.get('.menu-container.data-table-cell-editor textarea').type('OpenRefine Testing'); + cy.get('body').type('{esc}'); + // ensure value has been changed in the grid + cy.get('.menu-container.data-table-cell-editor').should('not.exist'); + cy.assertCellEquals(1, 'Shrt_Desc', 'BUTTER,WHIPPED,WITH SALT'); + }); + + it('Test edit all identical cells', function () { + cy.loadAndVisitProject('food.mini.csv'); + cy.getCell(1, 'Water').trigger('mouseover').find('a.data-table-cell-edit').click(); + cy.get('.menu-container.data-table-cell-editor').should('exist'); + cy.get('.menu-container.data-table-cell-editor textarea').type(42); + cy.get('.menu-container button[bind="okallButton"]').click(); + + // ensure all values has been changed in the grid + cy.get('.menu-container.data-table-cell-editor').should('not.exist'); + cy.get('#notification-container').should('be.visible').contains('Mass edit'); + cy.assertCellEquals(0, 'Water', '42'); + cy.assertCellEquals(1, 'Water', '42'); + }); + + it('Test edit all identical cells, using the shortcut', function () { + cy.loadAndVisitProject('food.mini.csv'); + cy.getCell(1, 'Water').trigger('mouseover').find('a.data-table-cell-edit').click(); + cy.get('.menu-container.data-table-cell-editor').should('exist'); + cy.get('.menu-container.data-table-cell-editor textarea').type(42); + cy.get('body').type('{ctrl}{enter}'); + + // ensure all values has been changed in the grid + cy.get('.menu-container.data-table-cell-editor').should('not.exist'); + cy.get('#notification-container').should('be.visible').contains('Mass edit'); + cy.assertCellEquals(0, 'Water', '42'); + cy.assertCellEquals(1, 'Water', '42'); + }); +}); diff --git a/main/tests/cypress/cypress/integration/project/facets/facets.numeric.spec.js b/main/tests/cypress/cypress/integration/project/facets/facets.numeric.spec.js new file mode 100644 index 000000000..816f7bc42 --- /dev/null +++ b/main/tests/cypress/cypress/integration/project/facets/facets.numeric.spec.js @@ -0,0 +1,18 @@ +describe(__filename, function () { + it('A numeric facet must be casted first', function () { + cy.loadAndVisitProject('food.small.csv'); + cy.columnActionClick('Water', ['Facet', 'Numeric facet']); + cy.get('#refine-tabs-facets .facets-container li:first-child').contains('No numeric value present.'); + }); + + it('Changing the type of the column for numeric', function () { + cy.loadAndVisitProject('food.small.csv'); + cy.columnActionClick('Water', ['Facet', 'Numeric facet']); + cy.get('#refine-tabs-facets .facets-container li:first-child').contains('No numeric value present.'); + + cy.get('#refine-tabs-facets .facets-container li:first-child a[bind="changeButton"]').click(); + cy.get('.expression-preview-code').type('value.toNumber()'); + cy.get('.dialog-footer button').contains('OK').click(); + cy.get('.facet-container .facet-range-body').should('exist'); + }); +}); diff --git a/main/tests/cypress/cypress/integration/project/facets/facets.spec.js b/main/tests/cypress/cypress/integration/project/facets/facets.spec.js new file mode 100644 index 000000000..2a6aeda59 --- /dev/null +++ b/main/tests/cypress/cypress/integration/project/facets/facets.spec.js @@ -0,0 +1,122 @@ +describe(__filename, function () { + it('Test the facets text (no facets yet)', function () { + cy.loadAndVisitProject('food.small.csv'); + cy.columnActionClick('Water', ['Facet', 'Text facet']); + cy.get('#refine-tabs-facets').should('exist').contains('Using facets and filters'); + }); + + it('Create a simple text facet', function () { + cy.loadAndVisitProject('food.small.csv'); + cy.columnActionClick('Water', ['Facet', 'Text facet']); + cy.get('#refine-tabs-facets').should('exist'); + + // check the layout + cy.get('#refine-tabs-facets .facets-container li:first-child span[bind="titleSpan"]').contains('Water'); + cy.get('#refine-tabs-facets .facets-container li:first-child ').contains('182 choices'); + cy.get('#refine-tabs-facets .facets-container li:first-child ').contains('Sort by'); + cy.get('#refine-tabs-facets .facets-container li:first-child ').contains('Cluster'); + }); + + it('Create a facet, Sort by count', function () { + cy.loadAndVisitProject('food.small.csv'); + cy.columnActionClick('Water', ['Facet', 'Text facet']); + cy.get('#refine-tabs-facets').should('exist'); + + // Ensure sort should be by name by default + cy.get('.facet-container .facet-body .facet-choice:first-child').contains('0.24'); + cy.get('#refine-tabs-facets .facets-container li:first-child a[bind="sortByCountLink"]').click(); + // Sort should now be by count + cy.get('.facet-container .facet-body .facet-choice:first-child').contains('15.87'); + }); + + it('Create a facet, Sort by count, then by name', function () { + cy.loadAndVisitProject('food.small.csv'); + cy.columnActionClick('Water', ['Facet', 'Text facet']); + cy.get('#refine-tabs-facets').should('exist'); + + // Sort should be by name by default + cy.get('.facet-container .facet-body .facet-choice:first-child').contains('0.24'); + cy.get('#refine-tabs-facets .facets-container li:first-child a[bind="sortByCountLink"]').click(); + // Sort should now be by count + cy.get('.facet-container .facet-body .facet-choice:first-child').contains('15.87'); + cy.get('#refine-tabs-facets .facets-container li:first-child a[bind="sortByNameLink"]').click(); + cy.get('.facet-container .facet-body .facet-choice:first-child').contains('0.24'); + }); + + it('Test the display of multiple facets', function () { + cy.loadAndVisitProject('food.small.csv'); + cy.columnActionClick('NDB_No', ['Facet', 'Text facet']); + cy.columnActionClick('Shrt_Desc', ['Facet', 'Text facet']); + cy.columnActionClick('Water', ['Facet', 'Text facet']); + + cy.get('#refine-tabs-facets .facets-container li:nth-child(1) span[bind="titleSpan"]').contains('NDB_No'); + cy.get('#refine-tabs-facets .facets-container li:nth-child(2) span[bind="titleSpan"]').contains('Shrt_Desc'); + cy.get('#refine-tabs-facets .facets-container li:nth-child(3) span[bind="titleSpan"]').contains('Water'); + }); + + // it('Test collapsing facet panels', function () { + // The following test does not work + // Because the facet panels uses soem weird CSS with overflow:hidden, Cypress can not detect it + // //// # cy.loadAndVisitProject('food.small.csv'); + // //// # cy.columnActionClick('NDB_No', ['Facet', 'Text facet']); + // //// # ensure facet inner panel is visible + // //// # cy.get('#refine-tabs-facets .facets-container li:nth-child(1) .facet-body-inner').should('be.visible'); + // //// #collapse the panel + // //// # cy.get('#refine-tabs-facets .facets-container li:nth-child(1) a[bind="minimizeButton"]').click(); + // //// # cy.get('#refine-tabs-facets .facets-container li:nth-child(1) .facet-body-inner').should('not.be.visible'); + // }); + + it('Test editing a facet', function () { + cy.loadAndVisitProject('food.small.csv'); + cy.columnActionClick('NDB_No', ['Facet', 'Text facet']); + cy.get('#refine-tabs-facets .facets-container li:nth-child(1) a[bind="changeButton"]').contains('change'); + cy.get('#refine-tabs-facets .facets-container li:nth-child(1) a[bind="changeButton"]').click(); + cy.get('.dialog-container .dialog-header').contains(`Edit Facet's Expression`); + }); + + it('Test editing a facet / Preview', function () { + cy.loadAndVisitProject('food.small.csv'); + cy.columnActionClick('NDB_No', ['Facet', 'Text facet']); + cy.get('#refine-tabs-facets .facets-container li:nth-child(1) a[bind="changeButton"]').click(); + // test the tab + cy.get('.dialog-container #expression-preview-tabs-preview').should('be.visible'); + // test the content + cy.get('.dialog-container #expression-preview-tabs-preview').contains('row'); + }); + + it('Test editing a facet / History', function () { + cy.loadAndVisitProject('food.small.csv'); + cy.columnActionClick('NDB_No', ['Facet', 'Text facet']); + cy.get('#refine-tabs-facets .facets-container li:nth-child(1) a[bind="changeButton"]').click(); + + cy.get('.dialog-container a[bind="or_dialog_history"]').click(); + // test the tab + cy.get('.dialog-container #expression-preview-tabs-history').should('be.visible'); + // test the content + cy.get('.dialog-container #expression-preview-tabs-history').contains('Reuse'); + }); + + it('Test editing a facet / Starred', function () { + cy.loadAndVisitProject('food.small.csv'); + cy.columnActionClick('NDB_No', ['Facet', 'Text facet']); + cy.get('#refine-tabs-facets .facets-container li:nth-child(1) a[bind="changeButton"]').click(); + + cy.get('.dialog-container a[bind="or_dialog_starred"]').click(); + // test the tab + cy.get('.dialog-container #expression-preview-tabs-starred').should('be.visible'); + // test the content + cy.get('.dialog-container #expression-preview-tabs-starred').contains('Expression'); + }); + + it('Test editing a facet / Help', function () { + cy.loadAndVisitProject('food.small.csv'); + cy.columnActionClick('NDB_No', ['Facet', 'Text facet']); + cy.get('#refine-tabs-facets .facets-container li:nth-child(1) a[bind="changeButton"]').click(); + + cy.get('.dialog-container a[bind="or_dialog_help"]').click(); + // test the tab + cy.get('.dialog-container #expression-preview-tabs-help').should('be.visible'); + // test the content + cy.get('.dialog-container #expression-preview-tabs-help').contains('Variables'); + }); +}); diff --git a/main/tests/cypress/cypress/integration/project/facets/facets.text.spec.js b/main/tests/cypress/cypress/integration/project/facets/facets.text.spec.js new file mode 100644 index 000000000..e69de29bb diff --git a/main/tests/cypress/cypress/integration/project/sorting/sorting.spec.js b/main/tests/cypress/cypress/integration/project/sorting/sorting.spec.js new file mode 100644 index 000000000..0aa78b8d3 --- /dev/null +++ b/main/tests/cypress/cypress/integration/project/sorting/sorting.spec.js @@ -0,0 +1,54 @@ +describe(__filename, function () { + it('Perform a basic sort', function () { + cy.loadAndVisitProject('food.mini.csv'); + + // sort and confirm + cy.columnActionClick('Shrt_Desc', ['Sort']); + cy.waitForDialogPanel(); + cy.confirmDialogPanel(); + + // ensure sorting is active + cy.getCell(0, 'Shrt_Desc').contains('BUTTER,WHIPPED,WITH SALT'); + cy.getCell(1, 'Shrt_Desc').contains('BUTTER,WITH SALT'); + }); + + it('Perform a basic sort + Reverse', function () { + cy.loadAndVisitProject('food.mini.csv'); + + // sort and confirm + cy.columnActionClick('Shrt_Desc', ['Sort']); + cy.waitForDialogPanel(); + cy.confirmDialogPanel(); + + // check the sorting + cy.getCell(0, 'Shrt_Desc').contains('BUTTER,WHIPPED,WITH SALT'); + cy.getCell(1, 'Shrt_Desc').contains('BUTTER,WITH SALT'); + + // do a reverse sort + cy.columnActionClick('Shrt_Desc', ['Sort', 'Reverse']); + + // re-check the sorting + cy.getCell(0, 'Shrt_Desc').contains('BUTTER,WITH SALT'); + cy.getCell(1, 'Shrt_Desc').contains('BUTTER,WHIPPED,WITH SALT'); + }); + + it('Perform a basic sort + Remove Sort', function () { + cy.loadAndVisitProject('food.mini.csv'); + + // sort and confirm + cy.columnActionClick('Shrt_Desc', ['Sort']); + cy.waitForDialogPanel(); + cy.confirmDialogPanel(); + + // check the sorting + cy.getCell(0, 'Shrt_Desc').contains('BUTTER,WHIPPED,WITH SALT'); + cy.getCell(1, 'Shrt_Desc').contains('BUTTER,WITH SALT'); + + // remove + cy.columnActionClick('Shrt_Desc', ['Sort', 'Remove sort']); + + // re-check the sorting + cy.getCell(0, 'Shrt_Desc').contains('BUTTER,WITH SALT'); + cy.getCell(1, 'Shrt_Desc').contains('BUTTER,WHIPPED,WITH SALT'); + }); +}); diff --git a/main/tests/cypress/cypress/integration/project/undo_redo/apply.spec.js b/main/tests/cypress/cypress/integration/project/undo_redo/apply.spec.js new file mode 100644 index 000000000..5f578fc71 --- /dev/null +++ b/main/tests/cypress/cypress/integration/project/undo_redo/apply.spec.js @@ -0,0 +1,35 @@ +describe(__filename, function () { + it('Apply a JSON', function () { + cy.loadAndVisitProject('food.mini.csv'); + + cy.get('#or-proj-undoRedo').click(); + cy.get('#refine-tabs-history .history-panel-controls').contains('Apply').click(); + + cy.get('table.data-table thead th[title="Shrt_Desc"]').should('exist'); + cy.get('table.data-table thead th[title="Water"]').should('exist'); + + // JSON for operations that will be applied + const operations = [ + { + op: 'core/column-removal', + columnName: 'Shrt_Desc', + description: 'Remove column Shrt_Desc', + }, + { + op: 'core/column-removal', + columnName: 'Water', + description: 'Remove column Water', + }, + ]; + + cy.get('.dialog-container .history-operation-json').type(JSON.stringify(operations), { + parseSpecialCharSequences: false, + delay: 0, + waitForAnimations: false, + }); + cy.get('.dialog-container button[bind="applyButton"]').click(); + + cy.get('table.data-table thead th[title="Shrt_Desc"]').should('not.to.exist'); + cy.get('table.data-table thead th[title="Water"]').should('not.to.exist'); + }); +}); diff --git a/main/tests/cypress/cypress/integration/project/undo_redo/extract.spec.js b/main/tests/cypress/cypress/integration/project/undo_redo/extract.spec.js new file mode 100644 index 000000000..5eba6f8ce --- /dev/null +++ b/main/tests/cypress/cypress/integration/project/undo_redo/extract.spec.js @@ -0,0 +1,121 @@ +describe(__filename, function () { + it('Test select/unselect all', function () { + cy.loadAndVisitProject('food.mini.csv'); + cy.deleteColumn('NDB_No'); + cy.deleteColumn('Shrt_Desc'); + + cy.get('#or-proj-undoRedo').click(); + cy.get('#refine-tabs-history .history-panel-controls').contains('Extract').click(); + + // unselect all + cy.get('.dialog-container button[bind="unselectAllButton"]').click(); + cy.wait(500); + cy.get('.history-extract-dialog-entries tr:nth-child(1) td:first-child input').should('not.to.be.checked'); + cy.get('.history-extract-dialog-entries tr:nth-child(2) td:first-child input').should('not.to.be.checked'); + cy.get('.dialog-container textarea.history-operation-json').should('have.value', '[]'); + + // // reselect all + cy.get('.dialog-container button[bind="selectAllButton"]').click(); + cy.wait(500); + cy.get('.history-extract-dialog-entries tr:nth-child(1) td:first-child input').should('be.checked'); + cy.get('.history-extract-dialog-entries tr:nth-child(2) td:first-child input').should('be.checked'); + cy.assertTextareaHaveJsonValue('.dialog-container textarea.history-operation-json', [ + { + op: 'core/column-removal', + columnName: 'NDB_No', + description: 'Remove column NDB_No', + }, + { + op: 'core/column-removal', + columnName: 'Shrt_Desc', + description: 'Remove column Shrt_Desc', + }, + ]); + }); + + it('Test select/unselect individual entries', function () { + cy.loadAndVisitProject('food.mini.csv'); + cy.deleteColumn('NDB_No'); + cy.deleteColumn('Shrt_Desc'); + cy.get('#or-proj-undoRedo').click(); + cy.get('#refine-tabs-history .history-panel-controls').contains('Extract').click(); + + // unselect "Remove Water" + cy.get('.history-extract-dialog-entries tr:nth-child(1) td:first-child').click(); + cy.assertTextareaHaveJsonValue('.dialog-container textarea.history-operation-json', [ + { + op: 'core/column-removal', + columnName: 'Shrt_Desc', + description: 'Remove column Shrt_Desc', + }, + ]); + + // unselect "Remove Shrt_Desc" + cy.get('.history-extract-dialog-entries tr:nth-child(2) td:first-child').click(); + cy.assertTextareaHaveJsonValue('.dialog-container textarea.history-operation-json', []); + + // reselect "Remove Shrt_Desc" + cy.get('.history-extract-dialog-entries tr:nth-child(2) td:first-child').click(); + cy.assertTextareaHaveJsonValue('.dialog-container textarea.history-operation-json', [ + { + op: 'core/column-removal', + columnName: 'Shrt_Desc', + description: 'Remove column Shrt_Desc', + }, + ]); + + // reselect "Remove Water" + cy.get('.history-extract-dialog-entries tr:nth-child(1) td:first-child').click(); + cy.assertTextareaHaveJsonValue('.dialog-container textarea.history-operation-json', [ + { + op: 'core/column-removal', + columnName: 'NDB_No', + description: 'Remove column NDB_No', + }, + { + op: 'core/column-removal', + columnName: 'Shrt_Desc', + description: 'Remove column Shrt_Desc', + }, + ]); + }); + + it('Test the close button', function () { + cy.loadAndVisitProject('food.mini.csv'); + cy.deleteColumn('NDB_No'); + cy.get('#or-proj-undoRedo').click(); + cy.get('#refine-tabs-history .history-panel-controls').contains('Extract').click(); + + cy.get('.dialog-container').should('exist').should('be.visible'); + cy.get('.dialog-container button[bind="closeButton"]').click(); + cy.get('.dialog-container').should('not.be.visible'); + }); + + it('Ensure action are recorded in the extract panel', function () { + cy.loadAndVisitProject('food.mini.csv'); + cy.deleteColumn('NDB_No'); + cy.deleteColumn('Shrt_Desc'); + + cy.get('#or-proj-undoRedo').click(); + + cy.get('#refine-tabs-history .history-panel-controls').contains('Extract').click(); + + // test the entries + cy.get('.history-extract-dialog-entries').contains('Remove column NDB_No'); + cy.get('.history-extract-dialog-entries').contains('Remove column Shrt_Desc'); + + // test the json + cy.assertTextareaHaveJsonValue('.dialog-container textarea.history-operation-json', [ + { + op: 'core/column-removal', + columnName: 'NDB_No', + description: 'Remove column NDB_No', + }, + { + op: 'core/column-removal', + columnName: 'Shrt_Desc', + description: 'Remove column Shrt_Desc', + }, + ]); + }); +}); diff --git a/main/tests/cypress/cypress/integration/project/undo_redo/undo_redo.spec.js b/main/tests/cypress/cypress/integration/project/undo_redo/undo_redo.spec.js new file mode 100644 index 000000000..39010e7bb --- /dev/null +++ b/main/tests/cypress/cypress/integration/project/undo_redo/undo_redo.spec.js @@ -0,0 +1,66 @@ +describe(__filename, function () { + it('Ensure the Undo button is visible after deleting a column', function () { + cy.loadAndVisitProject('food.mini.csv'); + cy.deleteColumn('NDB_No'); + + cy.get('#notification-container').should('be.visible').contains('Remove column NDB_No'); + cy.get('#notification-container .notification-action').should('be.visible').contains('Undo'); + }); + + it('Ensure the Undo button is effectively working', function () { + cy.loadAndVisitProject('food.mini.csv'); + + cy.deleteColumn('NDB_No'); + // ensure that the column is back in the grid + cy.get('#notification-container .notification-action').should('be.visible').contains('Undo').click(); + cy.get('.data-table th[title="NDB_No"]').should('exist'); + }); + + it('Delete 3 columns, then successively undo and redo the modifications using the Undo/Redo panel', function () { + cy.loadAndVisitProject('food.mini.csv'); + + // delete NDB_No + cy.deleteColumn('NDB_No'); + cy.get('#or-proj-undoRedo').contains('1 / 1'); + cy.get('.history-panel-body .history-now').contains('Remove column NDB_No'); + + // delete Water + cy.deleteColumn('Water'); + cy.get('#or-proj-undoRedo').contains('2 / 2'); + cy.get('.history-panel-body .history-now').contains('Remove column Water'); + + // Delete Shrt_Desc + cy.deleteColumn('Shrt_Desc'); + cy.get('#or-proj-undoRedo').contains('3 / 3'); + cy.get('.history-panel-body .history-now').contains('Remove column Shrt_Desc'); + + // Open the Undo/Redo panel + cy.get('#or-proj-undoRedo').click(); + + // ensure all previous actions have been recorded + cy.get('.history-panel-body .history-past a.history-entry:nth-of-type(2)').contains('Remove column NDB_No'); + cy.get('.history-panel-body .history-past a.history-entry:nth-of-type(3)').contains('Remove column Water'); + cy.get('.history-panel-body .history-now').contains('Remove column Shrt_Desc'); + + // successively undo all modifications + cy.get('.history-panel-body .history-past a.history-entry:last-of-type').click(); + cy.waitForOrOperation(); + cy.get('.history-panel-body .history-past').contains('Remove column NDB_No'); + cy.get('.history-panel-body .history-now').contains('Remove column Water'); + cy.get('.history-panel-body .history-future').contains('Remove column Shrt_Desc'); + + cy.get('.history-panel-body .history-past a.history-entry:last-of-type').click(); + cy.waitForOrOperation(); + cy.get('.history-panel-body .history-now').contains('Remove column NDB_No'); + cy.get('.history-panel-body .history-future').contains('Remove column Water'); + cy.get('.history-panel-body .history-future').contains('Remove column Shrt_Desc'); + }); + + // Very long test to run + // it('Ensure the Undo button dissapear after timeout after deleting a column', function () { + // const ORNotificationTimeout = 15000; + // cy.loadAndVisitProject('food.mini.csv'); + // cy.columnActionClick('NDB_No', ['Edit column', 'Remove this column']); + // cy.get('#notification-container', { timeout: ORNotificationTimeout }).should('not.be.visible'); + // }); +}); diff --git a/main/tests/cypress/cypress/integration/project_management/create_project.spec.js b/main/tests/cypress/cypress/integration/project_management/create_project.spec.js new file mode 100644 index 000000000..c4eee4068 --- /dev/null +++ b/main/tests/cypress/cypress/integration/project_management/create_project.spec.js @@ -0,0 +1,78 @@ +describe(__filename, function () { + it('Test the create project page', function () { + cy.visitOpenRefine(); + cy.navigateTo('Create Project'); + cy.get('#create-project-ui-source-selection-tabs > div').contains('This Computer').click(); + cy.get('.create-project-ui-source-selection-tab-body.selected').contains('Locate one or more files on your computer to upload'); + + // load a file + const csvFile = { filePath: 'food.mini.csv', mimeType: 'application/csv' }; + cy.get('.create-project-ui-source-selection-tab-body.selected input[type="file"]').attachFile(csvFile); + cy.get('.create-project-ui-source-selection-tab-body.selected button.button-primary').click(); + cy.get('.default-importing-wizard-header input[bind="projectNameInput"]').should('have.value', 'food mini csv'); + + // then ensure we are on the preview page + cy.get('.create-project-ui-panel').contains('Configure Parsing Options'); + }); + + it('Test project naming', function () { + cy.visitOpenRefine(); + cy.createProjectThroughUserInterface('food.mini.csv'); + cy.get('.create-project-ui-panel').contains('Configure Parsing Options'); + cy.get('.default-importing-wizard-header input[bind="projectNameInput"]').type('this is a test'); + cy.doCreateProjectThroughUserInterface(); + + cy.get('#project-name-button').contains('this is a test'); + }); + + it('Test project tagging', function () { + cy.visitOpenRefine(); + cy.createProjectThroughUserInterface('food.mini.csv'); + cy.get('.create-project-ui-panel').contains('Configure Parsing Options'); + const uniqueProjectName = Date.now(); + const uniqueTagName1 = 'tag1_' + Date.now(); + const uniqueTagName2 = 'tag2_' + Date.now(); + + cy.get('.default-importing-wizard-header input[bind="projectNameInput"]').type(uniqueProjectName); + // triger the select input + cy.get('#project-tags-container').click(); + // Type and Validate the tag, pressing enter + cy.get('#project-tags-container .select2-input').type(uniqueTagName1); + cy.get('body').type('{enter}'); + cy.get('#project-tags-container .select2-input').type(uniqueTagName2); + cy.get('body').type('{enter}'); + cy.get('#or-import-parsopt').click(); + cy.doCreateProjectThroughUserInterface(); + + cy.visitOpenRefine(); + cy.navigateTo('Open Project'); + cy.get('#projects-list').contains(uniqueProjectName).parent().parent().contains(uniqueTagName1); + cy.get('#projects-list').contains(uniqueProjectName).parent().parent().contains(uniqueTagName2); + }); + + it('E2E, Creates a simple project, based on a CSV', function () { + // navigate to the create page + cy.visitOpenRefine(); + cy.navigateTo('Create Project'); + // add file + const csvFile = { filePath: 'food.mini.csv', mimeType: 'application/csv' }; + cy.get('.create-project-ui-source-selection-tab-body.selected input[type="file"]').attachFile(csvFile); + cy.get('.create-project-ui-source-selection-tab-body.selected button.button-primary').click(); + + // preview and click next + cy.get('.default-importing-wizard-header button[bind="nextButton"]').click(); + cy.get('#create-project-progress-message').contains('Done.'); + + // workaround to ensure project is loaded + // cypress does not support window.location = ... + cy.get('h2').contains('HTTP ERROR 404'); + cy.location().should((location) => { + expect(location.href).contains('http://localhost:3333/__/project?'); + }); + + cy.location().then((location) => { + const projectId = location.href.split('=').slice(-1)[0]; + cy.visitProject(projectId); + }); + }); +}); diff --git a/main/tests/cypress/cypress/integration/project_management/export_project.spec.js b/main/tests/cypress/cypress/integration/project_management/export_project.spec.js new file mode 100644 index 000000000..834421a45 --- /dev/null +++ b/main/tests/cypress/cypress/integration/project_management/export_project.spec.js @@ -0,0 +1,8 @@ +describe(__filename, function () { + it('Export a project', function () { + const testProjectName = Date.now(); + cy.loadAndVisitProject('food.mini.csv', testProjectName); + cy.get('#export-button').click(); + cy.get('.menu-container a').contains('OpenRefine project archive to file').click(); + }); +}); diff --git a/main/tests/cypress/cypress/integration/project_management/import_project.spec.js b/main/tests/cypress/cypress/integration/project_management/import_project.spec.js new file mode 100644 index 000000000..7fc7821ca --- /dev/null +++ b/main/tests/cypress/cypress/integration/project_management/import_project.spec.js @@ -0,0 +1,35 @@ +describe(__filename, function () { + it('Check the layout for importing a project', function () { + cy.visitOpenRefine(); + cy.navigateTo('Import Project'); + cy.get('.grid-layout').contains('Locate an existing Refine project file'); + }); + + it('Import a project', function () { + cy.visitOpenRefine(); + cy.navigateTo('Import Project'); + // make sure the dataset was loaded properly + const projectFile = { filePath: 'food-small-csv.openrefine.tar.zip', mimeType: 'application/gzip' }; + cy.get('#project-upload-form input#project-tar-file-input').attachFile(projectFile); + cy.get('#project-upload-form').submit(); + + // ensure is loaded + cy.get('div[bind="summaryBarDiv"]').contains('199 rows'); + }); + + it('Import a project, test the renaming', function () { + cy.visitOpenRefine(); + cy.navigateTo('Import Project'); + // make sure the dataset was loaded properly + const projectFile = { filePath: 'food-small-csv.openrefine.tar.zip', mimeType: 'application/gzip' }; + cy.get('#project-upload-form input#project-tar-file-input').attachFile(projectFile); + + // rename + const projectName = Date.now(); + cy.get('#project-name-input').type(projectName); + cy.get('#project-upload-form').submit(); + + // ensure is loaded + cy.get('#project-name-button').contains(projectName); + }); +}); diff --git a/main/tests/cypress/cypress/integration/project_management/list_projects.spec.js b/main/tests/cypress/cypress/integration/project_management/list_projects.spec.js new file mode 100644 index 000000000..75d7dd4ea --- /dev/null +++ b/main/tests/cypress/cypress/integration/project_management/list_projects.spec.js @@ -0,0 +1,18 @@ +describe(__filename, function () { + it('List an existing project, ensure a newly created project is displayed', function () { + const projectName = Date.now(); + cy.loadProject('food.mini.csv', projectName); + cy.visitOpenRefine(); + cy.navigateTo('Open Project'); + cy.get('#projects-list table').contains(projectName); + }); + + it('Visit a project from the Open project page, ensure link is working', function () { + const projectName = Date.now(); + cy.loadProject('food.mini.csv', projectName); + cy.visitOpenRefine(); + cy.navigateTo('Open Project'); + cy.get('#projects-list table').contains(projectName).click(); + cy.get('#project-name-button').contains(projectName); + }); +}); diff --git a/main/tests/cypress/cypress/integration/project_management/open_project.spec.js b/main/tests/cypress/cypress/integration/project_management/open_project.spec.js new file mode 100644 index 000000000..0199febbe --- /dev/null +++ b/main/tests/cypress/cypress/integration/project_management/open_project.spec.js @@ -0,0 +1,9 @@ +describe(__filename, function () { + it('Open an existing project by visiting the URL directly', function () { + const projectName = Date.now(); + cy.loadProject('food.mini.csv', projectName).then((projectId) => { + cy.visitProject(projectId); + cy.get('#project-name-button').contains(projectName); + }); + }); +}); diff --git a/main/tests/cypress/cypress/plugins/index.js b/main/tests/cypress/cypress/plugins/index.js new file mode 100644 index 000000000..495caac97 --- /dev/null +++ b/main/tests/cypress/cypress/plugins/index.js @@ -0,0 +1,22 @@ +/// +// *********************************************************** +// This example plugins/index.js can be used to load plugins +// +// You can change the location of this file or turn off loading +// the plugins file with the 'pluginsFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/plugins-guide +// *********************************************************** + +// This function is called when a project is opened or re-opened (e.g. due to +// the project's config changing) +/** + * @type {Cypress.PluginConfig} + */ +module.exports = (on, config) => { + // `on` is used to hook into various events Cypress emits + // `config` is the resolved Cypress config + + return config; +}; diff --git a/main/tests/cypress/cypress/support/commands.js b/main/tests/cypress/cypress/support/commands.js new file mode 100644 index 000000000..48197ea83 --- /dev/null +++ b/main/tests/cypress/cypress/support/commands.js @@ -0,0 +1,116 @@ +// *********************************************** +// This example commands.js shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** + +import 'cypress-file-upload'; +import 'cypress-wait-until'; +// const fs = require('fs-extra'); +// var uniqid = require('uniqid'); +// +// +Cypress.Commands.add('assertTextareaHaveJsonValue', (selector, json) => { + cy.get(selector).then((el) => { + // expected json needs to be parsed / restringified, to avoid inconsitencies about spaces and tabs + const present = JSON.parse(el.val()); + cy.expect(JSON.stringify(present)).to.equal(JSON.stringify(json)); + }); +}); +Cypress.Commands.add('visitOpenRefine', (options) => { + cy.visit(Cypress.env('OPENREFINE_URL'), options); +}); + +Cypress.Commands.add('createProjectThroughUserInterface', (fixtureFile) => { + cy.navigateTo('Create Project'); + + const uploadFile = { filePath: fixtureFile, mimeType: 'application/csv' }; + cy.get('.create-project-ui-source-selection-tab-body.selected input[type="file"]').attachFile(uploadFile); + cy.get('.create-project-ui-source-selection-tab-body.selected button.button-primary').click(); +}); + +Cypress.Commands.add('doCreateProjectThroughUserInterface', () => { + cy.get('.default-importing-wizard-header button[bind="nextButton"]').click(); + cy.get('#create-project-progress-message').contains('Done.'); + + // workaround to ensure project is loaded + // cypress does not support window.location = ... + cy.get('h2').contains('HTTP ERROR 404'); + cy.location().should((location) => { + expect(location.href).contains('http://localhost:3333/__/project?'); + }); + + cy.location().then((location) => { + const projectId = location.href.split('=').slice(-1)[0]; + cy.visitProject(projectId); + cy.wrap(projectId).as('createdProjectId'); + }); +}); + +Cypress.Commands.add('getCell', (rowIndex, columnName) => { + const cssRowIndex = rowIndex + 1; + // first get the header, to know the cell index + cy.get(`table.data-table thead th[title="${columnName}"]`).then(($elem) => { + // there are 3 td at the beginning of each row + const columnIndex = $elem.index() + 3; + return cy.get(`table.data-table tbody tr:nth-child(${cssRowIndex}) td:nth-child(${columnIndex})`); + }); +}); + +Cypress.Commands.add('assertCellEquals', (rowIndex, columnName, value) => { + const cssRowIndex = rowIndex + 1; + // first get the header, to know the cell index + cy.get(`table.data-table thead th[title="${columnName}"]`).then(($elem) => { + // there are 3 td at the beginning of each row + const columnIndex = $elem.index() + 3; + cy.get(`table.data-table tbody tr:nth-child(${cssRowIndex}) td:nth-child(${columnIndex}) div`).contains(value, { timeout: 5000 }); + }); +}); + +Cypress.Commands.add('navigateTo', (target) => { + cy.get('#action-area-tabs li').contains(target).click(); +}); + +Cypress.Commands.add('waitForOrOperation', () => { + cy.get('body[ajax_in_progress="true"]'); + cy.get('body[ajax_in_progress="false"]'); +}); + +Cypress.Commands.add('deleteColumn', (columnName) => { + cy.get('.data-table th[title="' + columnName + '"]').should('exist'); + cy.columnActionClick(columnName, ['Edit column', 'Remove this column']); + cy.get('.data-table th[title="' + columnName + '"]').should('not.exist'); +}); + +Cypress.Commands.add('waitForDialogPanel', () => { + cy.get('body > .dialog-container > .dialog-frame').should('be.visible'); +}); + +Cypress.Commands.add('confirmDialogPanel', () => { + cy.get('body > .dialog-container > .dialog-frame .dialog-footer button[bind="okButton"]').click(); + cy.get('body > .dialog-container > .dialog-frame').should('not.be.visible'); +}); + +Cypress.Commands.add('columnActionClick', (columnName, actions) => { + cy.get('.data-table th:contains("' + columnName + '") .column-header-menu').click(); + + for (var i = 0; i < actions.length; i++) { + cy.get('body > .menu-container').eq(i).contains(actions[i]).click(); + } + cy.get('body[ajax_in_progress="false"]'); +}); + +Cypress.Commands.add('visitProject', (projectId) => { + cy.visit(Cypress.env('OPENREFINE_URL') + '/project?project=' + projectId); + cy.get('#project-title').should('exist'); +}); + +Cypress.Commands.add('loadAndVisitProject', (fixture, projectName = Date.now()) => { + cy.loadProject(fixture, projectName).then((projectId) => { + cy.visit(Cypress.env('OPENREFINE_URL') + '/project?project=' + projectId); + }); +}); diff --git a/main/tests/cypress/cypress/support/index.js b/main/tests/cypress/cypress/support/index.js new file mode 100644 index 000000000..cc150ee9d --- /dev/null +++ b/main/tests/cypress/cypress/support/index.js @@ -0,0 +1,44 @@ +// *********************************************************** +// This example support/index.js is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands'; +import './openrefine_api'; + +let token; + +beforeEach(() => { + cy.server({ + ignore: (xhr) => { + // Hide XHR Requests from log, OpenRefine is making too many XHR requests, it's polluting the test runner + return true; + }, + }); + + cy.wrap(token, { log: false }).as('token'); + cy.wrap(token, { log: false }).as('deletetoken'); + cy.wrap([], { log: false }).as('loadedProjectIds'); +}); + +afterEach(() => { + cy.cleanupProjects(); +}); + +before(() => { + cy.request('http://127.0.0.1:3333/command/core/get-csrf-token').then((response) => { + // store one unique token for block of runs + token = response.body.token; + }); +}); diff --git a/main/tests/cypress/cypress/support/openrefine_api.js b/main/tests/cypress/cypress/support/openrefine_api.js new file mode 100644 index 000000000..540f267b8 --- /dev/null +++ b/main/tests/cypress/cypress/support/openrefine_api.js @@ -0,0 +1,78 @@ +Cypress.Commands.add('setPreference', (preferenceName, preferenceValue) => { + cy.request(Cypress.env('OPENREFINE_URL') + '/command/core/get-csrf-token').then((response) => { + cy.request({ + method: 'POST', + url: `http://127.0.0.1:3333/command/core/set-preference`, + body: `name=${preferenceName}&value="${preferenceValue}"&csrf_token=${response.body.token}`, + form: false, + headers: { + 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8', + }, + }).then((resp) => { + cy.log('Set preference ' + preferenceName + ' with value ' + preferenceValue); + }); + }); +}); + +Cypress.Commands.add('cleanupProjects', () => { + cy.get('@deletetoken', { log: false }).then((token) => { + cy.get('@loadedProjectIds', { log: false }).then((loadedProjectIds) => { + for (const projectId of loadedProjectIds) { + cy.request({ + method: 'POST', + url: `http://127.0.0.1:3333/command/core/delete-project?csrf_token=` + token, + body: { project: projectId }, + form: true, + }).then((resp) => { + cy.log('Deleted OR project' + projectId); + }); + } + }); + }); +}); + +Cypress.Commands.add('loadProject', (fixture, projectName) => { + const openRefineProjectName = projectName ? projectName : fixture; + cy.fixture(fixture).then((content) => { + cy.get('@token', { log: false }).then((token) => { + // cy.request(Cypress.env('OPENREFINE_URL')+'/command/core/get-csrf-token').then((response) => { + const openRefineFormat = 'text/line-based/*sv'; + // const options = { projectTags: ['OpenRefineTesting'] }; + // '\r\n------BOUNDARY\r\nContent-Disposition: form-data; name="options"\r\n\r\n' + + // JSON.stringify(options) + + + var postData = + '------BOUNDARY\r\nContent-Disposition: form-data; name="project-file"; filename="' + + fixture + + '"\r\nContent-Type: "text/csv"\r\n\r\n' + + content + + '\r\n------BOUNDARY\r\nContent-Disposition: form-data; name="project-name"\r\n\r\n' + + openRefineProjectName + + '\r\n------BOUNDARY\r\nContent-Disposition: form-data; name="format"\r\n\r\n' + + openRefineFormat + + '\r\n------BOUNDARY--'; + + cy.request({ + method: 'POST', + url: `http://127.0.0.1:3333/command/core/create-project-from-upload?csrf_token=` + token, + body: postData, + headers: { + 'content-type': 'multipart/form-data; boundary=----BOUNDARY', + }, + }).then((resp) => { + const location = resp.allRequestResponses[0]['Response Headers'].location; + const projectId = location.split('=').slice(-1)[0]; + cy.log('Created OR project', projectId); + + cy.get('@loadedProjectIds', { log: false }).then((loadedProjectIds) => { + loadedProjectIds.push(projectId); + cy.wrap(loadedProjectIds, { log: false }) + .as('loadedProjectIds') + .then(() => { + return projectId; + }); + }); + }); + }); + }); +}); diff --git a/main/tests/cypress/package.json b/main/tests/cypress/package.json new file mode 100644 index 000000000..d6168940e --- /dev/null +++ b/main/tests/cypress/package.json @@ -0,0 +1,16 @@ +{ + "name":"OpenRefine-Cypress-Test-Suite", + "version":"1.0.0", + "description":"Cypress tests for OpenRefine", + "license":"BSD-3-Clause", + "author":"OpenRefine", + "private":true, + "dependencies":{ + "cypress":"5.6.0", + "cypress-file-upload":"^4.1.1", + "cypress-wait-until":"^1.7.1", + "dotenv":"^8.2.0", + "fs-extra":"^9.0.1", + "uniqid":"^5.2.0" + } +} \ No newline at end of file diff --git a/main/tests/cypress/yarn.lock b/main/tests/cypress/yarn.lock new file mode 100644 index 000000000..1a2dd1121 --- /dev/null +++ b/main/tests/cypress/yarn.lock @@ -0,0 +1,1426 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@cypress/listr-verbose-renderer@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@cypress/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#a77492f4b11dcc7c446a34b3e28721afd33c642a" + integrity sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo= + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +"@cypress/request@^2.88.5": + version "2.88.5" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.5.tgz#8d7ecd17b53a849cfd5ab06d5abe7d84976375d7" + integrity sha512-TzEC1XMi1hJkywWpRfD2clreTa/Z+lOrXDCxxBTBPEcY5azdPi56A6Xw+O4tWJnaJH3iIE7G5aDXZC6JgRZLcA== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +"@cypress/xvfb@^1.2.4": + version "1.2.4" + resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" + integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== + dependencies: + debug "^3.1.0" + lodash.once "^4.1.1" + +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" + integrity sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ== + dependencies: + any-observable "^0.3.0" + +"@types/color-name@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" + integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== + +"@types/sinonjs__fake-timers@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-6.0.1.tgz#681df970358c82836b42f989188d133e218c458e" + integrity sha512-yYezQwGWty8ziyYLdZjwxyMb0CZR49h8JALHGrxjQHWlqGgc8kLdHEgWrgL0uZ29DMvEVBDnHU2Wg36zKSIUtA== + +"@types/sizzle@^2.3.2": + version "2.3.2" + resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.2.tgz#a811b8c18e2babab7d542b3365887ae2e4d9de47" + integrity sha512-7EJYyKTL7tFR8+gDbB6Wwz/arpGa0Mywk1TJbNzKzHtzbwVmY4HR9WqS5VV7dsBUKQmPNr192jHr/VpBluj/hg== + +ajv@^6.12.3: + version "6.12.5" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.5.tgz#19b0e8bae8f476e5ba666300387775fb1a00a4da" + integrity sha512-lRF8RORchjpKG50/WFf8xmg7sgCLFiYNNnqdKflk63whMQcWR5ngGjiSXkL9bjxy6B2npOK2HSMN49jEBMSkag== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-escapes@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" + integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= + +ansi-regex@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" + integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== + +ansi-styles@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" + integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== + dependencies: + "@types/color-name" "^1.1.1" + color-convert "^2.0.1" + +any-observable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + integrity sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog== + +arch@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.1.2.tgz#0c52bbe7344bb4fa260c443d2cbad9c00ff2f0bf" + integrity sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ== + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= + +async@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.0.tgz#b3a2685c5ebb641d3de02d161002c60fc9f85720" + integrity sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= + +aws4@^1.8.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.10.1.tgz#e1e82e4f3e999e2cfd61b161280d16a111f86428" + integrity sha512-zg7Hz2k5lI8kb7U32998pRRFin7zJlkfezGJjUc2heaD4Pw2wObakCDVzkKztTm/Ln7eiVvYsjqak0Ed4LkMDA== + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= + dependencies: + tweetnacl "^0.14.3" + +blob-util@2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" + integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== + +bluebird@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +buffer-crc32@~0.2.3: + version "0.2.13" + resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" + integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +cachedir@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" + integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= + +chalk@^1.0.0, chalk@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= + dependencies: + ansi-styles "^2.2.1" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +check-more-types@^2.24.0: + version "2.24.0" + resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" + integrity sha1-FCD/sQ/URNz8ebQ4kbv//TKoRgA= + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cli-cursor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + integrity sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc= + dependencies: + restore-cursor "^1.0.1" + +cli-cursor@^2.0.0, cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= + dependencies: + restore-cursor "^2.0.0" + +cli-table3@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" + integrity sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ== + dependencies: + object-assign "^4.1.0" + string-width "^4.2.0" + optionalDependencies: + colors "^1.1.2" + +cli-truncate@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" + integrity sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ= + dependencies: + slice-ansi "0.0.4" + string-width "^1.0.1" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" + integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== + +common-tags@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.0.tgz#8e3153e542d4a39e9b10554434afaaf98956a937" + integrity sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= + +concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +cross-spawn@^7.0.0: + version "7.0.3" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" + integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cypress-file-upload@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/cypress-file-upload/-/cypress-file-upload-4.1.1.tgz#952713c8104ab7008de99c65bd63f74b244fe4df" + integrity sha512-tX6UhuJ63rNgjdzxglpX+ZYf/bM6PDhFMtt1qCBljLtAgdearqyfD1AHqyh59rOHCjfM+bf6FA3o9b/mdaX6pw== + dependencies: + mime "^2.4.4" + +cypress-wait-until@^1.7.1: + version "1.7.1" + resolved "https://registry.yarnpkg.com/cypress-wait-until/-/cypress-wait-until-1.7.1.tgz#3789cd18affdbb848e3cfc1f918353c7ba1de6f8" + integrity sha512-8DL5IsBTbAxBjfYgCzdbohPq/bY+IKc63fxtso1C8RWhLnQkZbVESyaclNr76jyxfId6uyzX8+Xnt0ZwaXNtkA== + +cypress@5.6.0: + version "5.6.0" + resolved "https://registry.yarnpkg.com/cypress/-/cypress-5.6.0.tgz#6781755c3ddfd644ce3179fcd7389176c0c82280" + integrity sha512-cs5vG3E2JLldAc16+5yQxaVRLLqMVya5RlrfPWkC72S5xrlHFdw7ovxPb61s4wYweROKTyH01WQc2PFzwwVvyQ== + dependencies: + "@cypress/listr-verbose-renderer" "^0.4.1" + "@cypress/request" "^2.88.5" + "@cypress/xvfb" "^1.2.4" + "@types/sinonjs__fake-timers" "^6.0.1" + "@types/sizzle" "^2.3.2" + arch "^2.1.2" + blob-util "2.0.2" + bluebird "^3.7.2" + cachedir "^2.3.0" + chalk "^4.1.0" + check-more-types "^2.24.0" + cli-table3 "~0.6.0" + commander "^5.1.0" + common-tags "^1.8.0" + debug "^4.1.1" + eventemitter2 "^6.4.2" + execa "^4.0.2" + executable "^4.1.1" + extract-zip "^1.7.0" + fs-extra "^9.0.1" + getos "^3.2.1" + is-ci "^2.0.0" + is-installed-globally "^0.3.2" + lazy-ass "^1.6.0" + listr "^0.14.3" + lodash "^4.17.19" + log-symbols "^4.0.0" + minimist "^1.2.5" + moment "^2.27.0" + ospath "^1.2.2" + pretty-bytes "^5.4.1" + ramda "~0.26.1" + request-progress "^3.0.0" + supports-color "^7.2.0" + tmp "~0.2.1" + untildify "^4.0.0" + url "^0.11.0" + yauzl "^2.10.0" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= + dependencies: + assert-plus "^1.0.0" + +date-fns@^1.27.2: + version "1.30.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c" + integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw== + +debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" + integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== + dependencies: + ms "^2.1.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= + +dotenv@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.2.0.tgz#97e619259ada750eea3e4ea3e26bceea5424b16a" + integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + integrity sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4= + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + +eventemitter2@^6.4.2: + version "6.4.3" + resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.3.tgz#35c563619b13f3681e7eb05cbdaf50f56ba58820" + integrity sha512-t0A2msp6BzOf+QAcI6z9XMktLj52OjGQg+8SJH6v5+3uxNpWYRR3wQmfA+6xtMU9kOC59qk9licus5dYcrYkMQ== + +execa@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/execa/-/execa-4.0.3.tgz#0a34dabbad6d66100bd6f2c576c8669403f317f2" + integrity sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A== + dependencies: + cross-spawn "^7.0.0" + get-stream "^5.0.0" + human-signals "^1.1.1" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.0" + onetime "^5.1.0" + signal-exit "^3.0.2" + strip-final-newline "^2.0.0" + +executable@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + integrity sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g= + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +extract-zip@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" + integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== + dependencies: + concat-stream "^1.6.2" + debug "^2.6.9" + mkdirp "^0.5.4" + yauzl "^2.10.0" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fd-slicer@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" + integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= + dependencies: + pend "~1.2.0" + +figures@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + integrity sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4= + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= + dependencies: + escape-string-regexp "^1.0.5" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +fs-extra@^9.0.1: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= + +get-stream@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +getos@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" + integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== + dependencies: + async "^3.2.0" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= + dependencies: + assert-plus "^1.0.0" + +glob@^7.1.3: + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.0.1.tgz#acdf3bb6685bcd55cb35e8a052266569e9469201" + integrity sha512-5HqUqdhkEovj2Of/ms3IeS/EekcO54ytHRLV4PEY2rhRwrHXLQjeVEES0Lhka0xwNDtGYn58wyC4s5+MHsOO6A== + dependencies: + ini "^1.3.5" + +graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= + dependencies: + ansi-regex "^2.0.0" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +human-signals@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" + integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.3, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +is-ci@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" + integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== + dependencies: + ci-info "^2.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-installed-globally@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" + integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== + dependencies: + global-dirs "^2.0.1" + is-path-inside "^3.0.1" + +is-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + integrity sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA== + dependencies: + symbol-observable "^1.1.0" + +is-path-inside@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" + integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== + +is-promise@^2.1.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= + +is-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" + integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +lazy-ass@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" + integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= + +listr-silent-renderer@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e" + integrity sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4= + +listr-update-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz#4ea8368548a7b8aecb7e06d8c95cb45ae2ede6a2" + integrity sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA== + dependencies: + chalk "^1.1.3" + cli-truncate "^0.2.1" + elegant-spinner "^1.0.1" + figures "^1.7.0" + indent-string "^3.0.0" + log-symbols "^1.0.2" + log-update "^2.3.0" + strip-ansi "^3.0.1" + +listr-verbose-renderer@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz#f1132167535ea4c1261102b9f28dac7cba1e03db" + integrity sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw== + dependencies: + chalk "^2.4.1" + cli-cursor "^2.1.0" + date-fns "^1.27.2" + figures "^2.0.0" + +listr@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.3.tgz#2fea909604e434be464c50bddba0d496928fa586" + integrity sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA== + dependencies: + "@samverschueren/stream-to-observable" "^0.3.0" + is-observable "^1.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.5.0" + listr-verbose-renderer "^0.5.0" + p-map "^2.0.0" + rxjs "^6.3.3" + +lodash.once@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= + +lodash@^4.17.19: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +log-symbols@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + integrity sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg= + dependencies: + chalk "^1.0.0" + +log-symbols@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.0.0.tgz#69b3cc46d20f448eccdb75ea1fa733d9e821c920" + integrity sha512-FN8JBzLx6CzeMrB0tg6pqlGU1wCrXW+ZXGH481kfsBqer0hToTIiHdjH4Mq8xJUbvATujKCvaREGWpGUionraA== + dependencies: + chalk "^4.0.0" + +log-update@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + integrity sha1-iDKP19HOeTiykoN0bwsbwSayRwg= + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +mime-db@1.44.0: + version "1.44.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" + integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.27" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" + integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== + dependencies: + mime-db "1.44.0" + +mime@^2.4.4: + version "2.4.6" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.6.tgz#e5b407c90db442f2beb5b162373d07b69affa4d1" + integrity sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA== + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + +mkdirp@^0.5.4: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + +moment@^2.27.0: + version "2.28.0" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.28.0.tgz#cdfe73ce01327cee6537b0fafac2e0f21a237d75" + integrity sha512-Z5KOjYmnHyd/ukynmFd/WwyXHd7L4J9vTI/nn5Ap9AVUgaAE15VvQ9MOGmJJygEUklupqIrFnor/tjTwRU+tQw== + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +npm-run-path@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + integrity sha1-ofeDj4MUxRbwXs78vEzP4EtO14k= + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= + dependencies: + mimic-fn "^1.0.0" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +ospath@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" + integrity sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs= + +p-map@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" + integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= + +pify@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + +pretty-bytes@^5.4.1: + version "5.4.1" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.4.1.tgz#cd89f79bbcef21e3d21eb0da68ffe93f803e884b" + integrity sha512-s1Iam6Gwz3JI5Hweaz4GoCD1WUNUIyzePFy5+Js2hjwGVt2Z79wNN+ZKOZ2vB6C+Xs6njyB84Z1IthQg8d9LxA== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +psl@^1.1.28: + version "1.8.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" + integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + +punycode@^2.1.0, punycode@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + +ramda@~0.26.1: + version "0.26.1" + resolved "https://registry.yarnpkg.com/ramda/-/ramda-0.26.1.tgz#8d41351eb8111c55353617fc3bbffad8e4d35d06" + integrity sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ== + +readable-stream@^2.2.2: + version "2.3.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" + integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +request-progress@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" + integrity sha1-TKdUCBx/7GP1BeT6qCWqBs1mnb4= + dependencies: + throttleit "^1.0.0" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + integrity sha1-NGYfRohjJ/7SmRR5FSJS35LapUE= + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +rimraf@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rxjs@^6.3.3: + version "6.6.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552" + integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ== + dependencies: + tslib "^1.9.0" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + integrity sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU= + +sshpk@^1.7.0: + version "1.16.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" + integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" + integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" + integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== + dependencies: + ansi-regex "^5.0.0" + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +supports-color@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0, supports-color@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +symbol-observable@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + +throttleit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" + integrity sha1-nnhYNtr0Z0MUWlmEtiaNgoUorGw= + +tmp@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" + integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== + dependencies: + rimraf "^3.0.0" + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tslib@^1.9.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +uniqid@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-5.2.0.tgz#0d0589a7e9ce07116848126764fbff0b68e74329" + integrity sha512-LH8zsvwJ/GL6YtNfSOmMCrI9piraAUjBfw2MCvleNE6a4pVKJwXjG2+HWhkVeFcSg+nmaPKbMrMOoxwQluZ1Mg== + +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + +untildify@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" + integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== + +uri-js@^4.2.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.0.tgz#aa714261de793e8a82347a7bcc9ce74e86f28602" + integrity sha512-B0yRTzYdUCCn9n+F4+Gh4yIDtMQcaJsmYBDsTSG8g/OejKBodLQ2IHfN3bM7jUsRXndopT7OIXWdYqc1fjmV6g== + dependencies: + punycode "^2.1.0" + +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= + +uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + integrity sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo= + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +yauzl@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" + integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= + dependencies: + buffer-crc32 "~0.2.3" + fd-slicer "~1.1.0"