Przeglądaj źródła

feat(server): Populate sample product data via CLI

Michael Bromley 7 lat temu
rodzic
commit
42f71b0ee2

+ 8 - 1
server/build/gulpfile.ts

@@ -13,4 +13,11 @@ gulp.task('copy-cli-assets', () => {
     return gulp.src(['../cli/assets/**/*']).pipe(gulp.dest('../dist/cli/assets'));
     return gulp.src(['../cli/assets/**/*']).pipe(gulp.dest('../dist/cli/assets'));
 });
 });
 
 
-gulp.task('default', gulp.parallel('copy-schemas', 'copy-email-templates', 'copy-cli-assets'));
+gulp.task('copy-cli-images', () => {
+    return gulp.src(['../mock-data/assets/**/*']).pipe(gulp.dest('../dist/cli/assets/images'));
+});
+
+gulp.task(
+    'default',
+    gulp.parallel(['copy-schemas', 'copy-email-templates', 'copy-cli-assets', 'copy-cli-images']),
+);

+ 249 - 1240
server/cli/assets/initial-data.json

@@ -1,1250 +1,259 @@
 {
 {
     "defaultLanguage": "en",
     "defaultLanguage": "en",
+    "defaultZone": "Europe",
     "taxRates": [
     "taxRates": [
         { "name": "Standard Tax", "percentage": 20 },
         { "name": "Standard Tax", "percentage": 20 },
         { "name": "Reduced Tax", "percentage": 10 },
         { "name": "Reduced Tax", "percentage": 10 },
         { "name": "Zero Tax", "percentage": 0 }
         { "name": "Zero Tax", "percentage": 0 }
     ],
     ],
     "countries": [
     "countries": [
-        {
-            "name": "Afghanistan",
-            "code": "AF",
-            "zone": "Asia"
-        },
-        {
-            "name": "Åland Islands",
-            "code": "AX",
-            "zone": "Europe"
-        },
-        {
-            "name": "Albania",
-            "code": "AL",
-            "zone": "Europe"
-        },
-        {
-            "name": "Algeria",
-            "code": "DZ",
-            "zone": "Africa"
-        },
-        {
-            "name": "American Samoa",
-            "code": "AS",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Andorra",
-            "code": "AD",
-            "zone": "Europe"
-        },
-        {
-            "name": "Angola",
-            "code": "AO",
-            "zone": "Africa"
-        },
-        {
-            "name": "Anguilla",
-            "code": "AI",
-            "zone": "Americas"
-        },
-        {
-            "name": "Antigua and Barbuda",
-            "code": "AG",
-            "zone": "Americas"
-        },
-        {
-            "name": "Argentina",
-            "code": "AR",
-            "zone": "Americas"
-        },
-        {
-            "name": "Armenia",
-            "code": "AM",
-            "zone": "Asia"
-        },
-        {
-            "name": "Aruba",
-            "code": "AW",
-            "zone": "Americas"
-        },
-        {
-            "name": "Australia",
-            "code": "AU",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Austria",
-            "code": "AT",
-            "zone": "Europe"
-        },
-        {
-            "name": "Azerbaijan",
-            "code": "AZ",
-            "zone": "Asia"
-        },
-        {
-            "name": "Bahamas",
-            "code": "BS",
-            "zone": "Americas"
-        },
-        {
-            "name": "Bahrain",
-            "code": "BH",
-            "zone": "Asia"
-        },
-        {
-            "name": "Bangladesh",
-            "code": "BD",
-            "zone": "Asia"
-        },
-        {
-            "name": "Barbados",
-            "code": "BB",
-            "zone": "Americas"
-        },
-        {
-            "name": "Belarus",
-            "code": "BY",
-            "zone": "Europe"
-        },
-        {
-            "name": "Belgium",
-            "code": "BE",
-            "zone": "Europe"
-        },
-        {
-            "name": "Belize",
-            "code": "BZ",
-            "zone": "Americas"
-        },
-        {
-            "name": "Benin",
-            "code": "BJ",
-            "zone": "Africa"
-        },
-        {
-            "name": "Bermuda",
-            "code": "BM",
-            "zone": "Americas"
-        },
-        {
-            "name": "Bhutan",
-            "code": "BT",
-            "zone": "Asia"
-        },
-        {
-            "name": "Bolivia (Plurinational State of)",
-            "code": "BO",
-            "zone": "Americas"
-        },
-        {
-            "name": "Bonaire, Sint Eustatius and Saba",
-            "code": "BQ",
-            "zone": "Americas"
-        },
-        {
-            "name": "Bosnia and Herzegovina",
-            "code": "BA",
-            "zone": "Europe"
-        },
-        {
-            "name": "Botswana",
-            "code": "BW",
-            "zone": "Africa"
-        },
-        {
-            "name": "Bouvet Island",
-            "code": "BV",
-            "zone": "Americas"
-        },
-        {
-            "name": "Brazil",
-            "code": "BR",
-            "zone": "Americas"
-        },
-        {
-            "name": "British Indian Ocean Territory",
-            "code": "IO",
-            "zone": "Africa"
-        },
-        {
-            "name": "Brunei Darussalam",
-            "code": "BN",
-            "zone": "Asia"
-        },
-        {
-            "name": "Bulgaria",
-            "code": "BG",
-            "zone": "Europe"
-        },
-        {
-            "name": "Burkina Faso",
-            "code": "BF",
-            "zone": "Africa"
-        },
-        {
-            "name": "Burundi",
-            "code": "BI",
-            "zone": "Africa"
-        },
-        {
-            "name": "Cabo Verde",
-            "code": "CV",
-            "zone": "Africa"
-        },
-        {
-            "name": "Cambodia",
-            "code": "KH",
-            "zone": "Asia"
-        },
-        {
-            "name": "Cameroon",
-            "code": "CM",
-            "zone": "Africa"
-        },
-        {
-            "name": "Canada",
-            "code": "CA",
-            "zone": "Americas"
-        },
-        {
-            "name": "Cayman Islands",
-            "code": "KY",
-            "zone": "Americas"
-        },
-        {
-            "name": "Central African Republic",
-            "code": "CF",
-            "zone": "Africa"
-        },
-        {
-            "name": "Chad",
-            "code": "TD",
-            "zone": "Africa"
-        },
-        {
-            "name": "Chile",
-            "code": "CL",
-            "zone": "Americas"
-        },
-        {
-            "name": "China",
-            "code": "CN",
-            "zone": "Asia"
-        },
-        {
-            "name": "Christmas Island",
-            "code": "CX",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Cocos (Keeling) Islands",
-            "code": "CC",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Colombia",
-            "code": "CO",
-            "zone": "Americas"
-        },
-        {
-            "name": "Comoros",
-            "code": "KM",
-            "zone": "Africa"
-        },
-        {
-            "name": "Congo",
-            "code": "CG",
-            "zone": "Africa"
-        },
-        {
-            "name": "Congo (Democratic Republic of the)",
-            "code": "CD",
-            "zone": "Africa"
-        },
-        {
-            "name": "Cook Islands",
-            "code": "CK",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Costa Rica",
-            "code": "CR",
-            "zone": "Americas"
-        },
-        {
-            "name": "Côte d'Ivoire",
-            "code": "CI",
-            "zone": "Africa"
-        },
-        {
-            "name": "Croatia",
-            "code": "HR",
-            "zone": "Europe"
-        },
-        {
-            "name": "Cuba",
-            "code": "CU",
-            "zone": "Americas"
-        },
-        {
-            "name": "Curaçao",
-            "code": "CW",
-            "zone": "Americas"
-        },
-        {
-            "name": "Cyprus",
-            "code": "CY",
-            "zone": "Asia"
-        },
-        {
-            "name": "Czechia",
-            "code": "CZ",
-            "zone": "Europe"
-        },
-        {
-            "name": "Denmark",
-            "code": "DK",
-            "zone": "Europe"
-        },
-        {
-            "name": "Djibouti",
-            "code": "DJ",
-            "zone": "Africa"
-        },
-        {
-            "name": "Dominica",
-            "code": "DM",
-            "zone": "Americas"
-        },
-        {
-            "name": "Dominican Republic",
-            "code": "DO",
-            "zone": "Americas"
-        },
-        {
-            "name": "Ecuador",
-            "code": "EC",
-            "zone": "Americas"
-        },
-        {
-            "name": "Egypt",
-            "code": "EG",
-            "zone": "Africa"
-        },
-        {
-            "name": "El Salvador",
-            "code": "SV",
-            "zone": "Americas"
-        },
-        {
-            "name": "Equatorial Guinea",
-            "code": "GQ",
-            "zone": "Africa"
-        },
-        {
-            "name": "Eritrea",
-            "code": "ER",
-            "zone": "Africa"
-        },
-        {
-            "name": "Estonia",
-            "code": "EE",
-            "zone": "Europe"
-        },
-        {
-            "name": "Eswatini",
-            "code": "SZ",
-            "zone": "Africa"
-        },
-        {
-            "name": "Ethiopia",
-            "code": "ET",
-            "zone": "Africa"
-        },
-        {
-            "name": "Falkland Islands (Malvinas)",
-            "code": "FK",
-            "zone": "Americas"
-        },
-        {
-            "name": "Faroe Islands",
-            "code": "FO",
-            "zone": "Europe"
-        },
-        {
-            "name": "Fiji",
-            "code": "FJ",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Finland",
-            "code": "FI",
-            "zone": "Europe"
-        },
-        {
-            "name": "France",
-            "code": "FR",
-            "zone": "Europe"
-        },
-        {
-            "name": "French Guiana",
-            "code": "GF",
-            "zone": "Americas"
-        },
-        {
-            "name": "French Polynesia",
-            "code": "PF",
-            "zone": "Oceania"
-        },
-        {
-            "name": "French Southern Territories",
-            "code": "TF",
-            "zone": "Africa"
-        },
-        {
-            "name": "Gabon",
-            "code": "GA",
-            "zone": "Africa"
-        },
-        {
-            "name": "Gambia",
-            "code": "GM",
-            "zone": "Africa"
-        },
-        {
-            "name": "Georgia",
-            "code": "GE",
-            "zone": "Asia"
-        },
-        {
-            "name": "Germany",
-            "code": "DE",
-            "zone": "Europe"
-        },
-        {
-            "name": "Ghana",
-            "code": "GH",
-            "zone": "Africa"
-        },
-        {
-            "name": "Gibraltar",
-            "code": "GI",
-            "zone": "Europe"
-        },
-        {
-            "name": "Greece",
-            "code": "GR",
-            "zone": "Europe"
-        },
-        {
-            "name": "Greenland",
-            "code": "GL",
-            "zone": "Americas"
-        },
-        {
-            "name": "Grenada",
-            "code": "GD",
-            "zone": "Americas"
-        },
-        {
-            "name": "Guadeloupe",
-            "code": "GP",
-            "zone": "Americas"
-        },
-        {
-            "name": "Guam",
-            "code": "GU",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Guatemala",
-            "code": "GT",
-            "zone": "Americas"
-        },
-        {
-            "name": "Guernsey",
-            "code": "GG",
-            "zone": "Europe"
-        },
-        {
-            "name": "Guinea",
-            "code": "GN",
-            "zone": "Africa"
-        },
-        {
-            "name": "Guinea-Bissau",
-            "code": "GW",
-            "zone": "Africa"
-        },
-        {
-            "name": "Guyana",
-            "code": "GY",
-            "zone": "Americas"
-        },
-        {
-            "name": "Haiti",
-            "code": "HT",
-            "zone": "Americas"
-        },
-        {
-            "name": "Heard Island and McDonald Islands",
-            "code": "HM",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Holy See",
-            "code": "VA",
-            "zone": "Europe"
-        },
-        {
-            "name": "Honduras",
-            "code": "HN",
-            "zone": "Americas"
-        },
-        {
-            "name": "Hong Kong",
-            "code": "HK",
-            "zone": "Asia"
-        },
-        {
-            "name": "Hungary",
-            "code": "HU",
-            "zone": "Europe"
-        },
-        {
-            "name": "Iceland",
-            "code": "IS",
-            "zone": "Europe"
-        },
-        {
-            "name": "India",
-            "code": "IN",
-            "zone": "Asia"
-        },
-        {
-            "name": "Indonesia",
-            "code": "ID",
-            "zone": "Asia"
-        },
-        {
-            "name": "Iran (Islamic Republic of)",
-            "code": "IR",
-            "zone": "Asia"
-        },
-        {
-            "name": "Iraq",
-            "code": "IQ",
-            "zone": "Asia"
-        },
-        {
-            "name": "Ireland",
-            "code": "IE",
-            "zone": "Europe"
-        },
-        {
-            "name": "Isle of Man",
-            "code": "IM",
-            "zone": "Europe"
-        },
-        {
-            "name": "Israel",
-            "code": "IL",
-            "zone": "Asia"
-        },
-        {
-            "name": "Italy",
-            "code": "IT",
-            "zone": "Europe"
-        },
-        {
-            "name": "Jamaica",
-            "code": "JM",
-            "zone": "Americas"
-        },
-        {
-            "name": "Japan",
-            "code": "JP",
-            "zone": "Asia"
-        },
-        {
-            "name": "Jersey",
-            "code": "JE",
-            "zone": "Europe"
-        },
-        {
-            "name": "Jordan",
-            "code": "JO",
-            "zone": "Asia"
-        },
-        {
-            "name": "Kazakhstan",
-            "code": "KZ",
-            "zone": "Asia"
-        },
-        {
-            "name": "Kenya",
-            "code": "KE",
-            "zone": "Africa"
-        },
-        {
-            "name": "Kiribati",
-            "code": "KI",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Korea (Democratic People's Republic of)",
-            "code": "KP",
-            "zone": "Asia"
-        },
-        {
-            "name": "Korea (Republic of)",
-            "code": "KR",
-            "zone": "Asia"
-        },
-        {
-            "name": "Kuwait",
-            "code": "KW",
-            "zone": "Asia"
-        },
-        {
-            "name": "Kyrgyzstan",
-            "code": "KG",
-            "zone": "Asia"
-        },
-        {
-            "name": "Lao People's Democratic Republic",
-            "code": "LA",
-            "zone": "Asia"
-        },
-        {
-            "name": "Latvia",
-            "code": "LV",
-            "zone": "Europe"
-        },
-        {
-            "name": "Lebanon",
-            "code": "LB",
-            "zone": "Asia"
-        },
-        {
-            "name": "Lesotho",
-            "code": "LS",
-            "zone": "Africa"
-        },
-        {
-            "name": "Liberia",
-            "code": "LR",
-            "zone": "Africa"
-        },
-        {
-            "name": "Libya",
-            "code": "LY",
-            "zone": "Africa"
-        },
-        {
-            "name": "Liechtenstein",
-            "code": "LI",
-            "zone": "Europe"
-        },
-        {
-            "name": "Lithuania",
-            "code": "LT",
-            "zone": "Europe"
-        },
-        {
-            "name": "Luxembourg",
-            "code": "LU",
-            "zone": "Europe"
-        },
-        {
-            "name": "Macao",
-            "code": "MO",
-            "zone": "Asia"
-        },
-        {
-            "name": "Macedonia (the former Yugoslav Republic of)",
-            "code": "MK",
-            "zone": "Europe"
-        },
-        {
-            "name": "Madagascar",
-            "code": "MG",
-            "zone": "Africa"
-        },
-        {
-            "name": "Malawi",
-            "code": "MW",
-            "zone": "Africa"
-        },
-        {
-            "name": "Malaysia",
-            "code": "MY",
-            "zone": "Asia"
-        },
-        {
-            "name": "Maldives",
-            "code": "MV",
-            "zone": "Asia"
-        },
-        {
-            "name": "Mali",
-            "code": "ML",
-            "zone": "Africa"
-        },
-        {
-            "name": "Malta",
-            "code": "MT",
-            "zone": "Europe"
-        },
-        {
-            "name": "Marshall Islands",
-            "code": "MH",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Martinique",
-            "code": "MQ",
-            "zone": "Americas"
-        },
-        {
-            "name": "Mauritania",
-            "code": "MR",
-            "zone": "Africa"
-        },
-        {
-            "name": "Mauritius",
-            "code": "MU",
-            "zone": "Africa"
-        },
-        {
-            "name": "Mayotte",
-            "code": "YT",
-            "zone": "Africa"
-        },
-        {
-            "name": "Mexico",
-            "code": "MX",
-            "zone": "Americas"
-        },
-        {
-            "name": "Micronesia (Federated States of)",
-            "code": "FM",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Moldova (Republic of)",
-            "code": "MD",
-            "zone": "Europe"
-        },
-        {
-            "name": "Monaco",
-            "code": "MC",
-            "zone": "Europe"
-        },
-        {
-            "name": "Mongolia",
-            "code": "MN",
-            "zone": "Asia"
-        },
-        {
-            "name": "Montenegro",
-            "code": "ME",
-            "zone": "Europe"
-        },
-        {
-            "name": "Montserrat",
-            "code": "MS",
-            "zone": "Americas"
-        },
-        {
-            "name": "Morocco",
-            "code": "MA",
-            "zone": "Africa"
-        },
-        {
-            "name": "Mozambique",
-            "code": "MZ",
-            "zone": "Africa"
-        },
-        {
-            "name": "Myanmar",
-            "code": "MM",
-            "zone": "Asia"
-        },
-        {
-            "name": "Namibia",
-            "code": "NA",
-            "zone": "Africa"
-        },
-        {
-            "name": "Nauru",
-            "code": "NR",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Nepal",
-            "code": "NP",
-            "zone": "Asia"
-        },
-        {
-            "name": "Netherlands",
-            "code": "NL",
-            "zone": "Europe"
-        },
-        {
-            "name": "New Caledonia",
-            "code": "NC",
-            "zone": "Oceania"
-        },
-        {
-            "name": "New Zealand",
-            "code": "NZ",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Nicaragua",
-            "code": "NI",
-            "zone": "Americas"
-        },
-        {
-            "name": "Niger",
-            "code": "NE",
-            "zone": "Africa"
-        },
-        {
-            "name": "Nigeria",
-            "code": "NG",
-            "zone": "Africa"
-        },
-        {
-            "name": "Niue",
-            "code": "NU",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Norfolk Island",
-            "code": "NF",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Northern Mariana Islands",
-            "code": "MP",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Norway",
-            "code": "NO",
-            "zone": "Europe"
-        },
-        {
-            "name": "Oman",
-            "code": "OM",
-            "zone": "Asia"
-        },
-        {
-            "name": "Pakistan",
-            "code": "PK",
-            "zone": "Asia"
-        },
-        {
-            "name": "Palau",
-            "code": "PW",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Palestine, State of",
-            "code": "PS",
-            "zone": "Asia"
-        },
-        {
-            "name": "Panama",
-            "code": "PA",
-            "zone": "Americas"
-        },
-        {
-            "name": "Papua New Guinea",
-            "code": "PG",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Paraguay",
-            "code": "PY",
-            "zone": "Americas"
-        },
-        {
-            "name": "Peru",
-            "code": "PE",
-            "zone": "Americas"
-        },
-        {
-            "name": "Philippines",
-            "code": "PH",
-            "zone": "Asia"
-        },
-        {
-            "name": "Pitcairn",
-            "code": "PN",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Poland",
-            "code": "PL",
-            "zone": "Europe"
-        },
-        {
-            "name": "Portugal",
-            "code": "PT",
-            "zone": "Europe"
-        },
-        {
-            "name": "Puerto Rico",
-            "code": "PR",
-            "zone": "Americas"
-        },
-        {
-            "name": "Qatar",
-            "code": "QA",
-            "zone": "Asia"
-        },
-        {
-            "name": "Réunion",
-            "code": "RE",
-            "zone": "Africa"
-        },
-        {
-            "name": "Romania",
-            "code": "RO",
-            "zone": "Europe"
-        },
-        {
-            "name": "Russian Federation",
-            "code": "RU",
-            "zone": "Europe"
-        },
-        {
-            "name": "Rwanda",
-            "code": "RW",
-            "zone": "Africa"
-        },
-        {
-            "name": "Saint Barthélemy",
-            "code": "BL",
-            "zone": "Americas"
-        },
-        {
-            "name": "Saint Helena, Ascension and Tristan da Cunha",
-            "code": "SH",
-            "zone": "Africa"
-        },
-        {
-            "name": "Saint Kitts and Nevis",
-            "code": "KN",
-            "zone": "Americas"
-        },
-        {
-            "name": "Saint Lucia",
-            "code": "LC",
-            "zone": "Americas"
-        },
-        {
-            "name": "Saint Martin (French part)",
-            "code": "MF",
-            "zone": "Americas"
-        },
-        {
-            "name": "Saint Pierre and Miquelon",
-            "code": "PM",
-            "zone": "Americas"
-        },
-        {
-            "name": "Saint Vincent and the Grenadines",
-            "code": "VC",
-            "zone": "Americas"
-        },
-        {
-            "name": "Samoa",
-            "code": "WS",
-            "zone": "Oceania"
-        },
-        {
-            "name": "San Marino",
-            "code": "SM",
-            "zone": "Europe"
-        },
-        {
-            "name": "Sao Tome and Principe",
-            "code": "ST",
-            "zone": "Africa"
-        },
-        {
-            "name": "Saudi Arabia",
-            "code": "SA",
-            "zone": "Asia"
-        },
-        {
-            "name": "Senegal",
-            "code": "SN",
-            "zone": "Africa"
-        },
-        {
-            "name": "Serbia",
-            "code": "RS",
-            "zone": "Europe"
-        },
-        {
-            "name": "Seychelles",
-            "code": "SC",
-            "zone": "Africa"
-        },
-        {
-            "name": "Sierra Leone",
-            "code": "SL",
-            "zone": "Africa"
-        },
-        {
-            "name": "Singapore",
-            "code": "SG",
-            "zone": "Asia"
-        },
-        {
-            "name": "Sint Maarten (Dutch part)",
-            "code": "SX",
-            "zone": "Americas"
-        },
-        {
-            "name": "Slovakia",
-            "code": "SK",
-            "zone": "Europe"
-        },
-        {
-            "name": "Slovenia",
-            "code": "SI",
-            "zone": "Europe"
-        },
-        {
-            "name": "Solomon Islands",
-            "code": "SB",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Somalia",
-            "code": "SO",
-            "zone": "Africa"
-        },
-        {
-            "name": "South Africa",
-            "code": "ZA",
-            "zone": "Africa"
-        },
-        {
-            "name": "South Georgia and the South Sandwich Islands",
-            "code": "GS",
-            "zone": "Americas"
-        },
-        {
-            "name": "South Sudan",
-            "code": "SS",
-            "zone": "Africa"
-        },
-        {
-            "name": "Spain",
-            "code": "ES",
-            "zone": "Europe"
-        },
-        {
-            "name": "Sri Lanka",
-            "code": "LK",
-            "zone": "Asia"
-        },
-        {
-            "name": "Sudan",
-            "code": "SD",
-            "zone": "Africa"
-        },
-        {
-            "name": "Suriname",
-            "code": "SR",
-            "zone": "Americas"
-        },
-        {
-            "name": "Svalbard and Jan Mayen",
-            "code": "SJ",
-            "zone": "Europe"
-        },
-        {
-            "name": "Sweden",
-            "code": "SE",
-            "zone": "Europe"
-        },
-        {
-            "name": "Switzerland",
-            "code": "CH",
-            "zone": "Europe"
-        },
-        {
-            "name": "Syrian Arab Republic",
-            "code": "SY",
-            "zone": "Asia"
-        },
-        {
-            "name": "Taiwan, Province of China",
-            "code": "TW",
-            "zone": "Asia"
-        },
-        {
-            "name": "Tajikistan",
-            "code": "TJ",
-            "zone": "Asia"
-        },
-        {
-            "name": "Tanzania, United Republic of",
-            "code": "TZ",
-            "zone": "Africa"
-        },
-        {
-            "name": "Thailand",
-            "code": "TH",
-            "zone": "Asia"
-        },
-        {
-            "name": "Timor-Leste",
-            "code": "TL",
-            "zone": "Asia"
-        },
-        {
-            "name": "Togo",
-            "code": "TG",
-            "zone": "Africa"
-        },
-        {
-            "name": "Tokelau",
-            "code": "TK",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Tonga",
-            "code": "TO",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Trinidad and Tobago",
-            "code": "TT",
-            "zone": "Americas"
-        },
-        {
-            "name": "Tunisia",
-            "code": "TN",
-            "zone": "Africa"
-        },
-        {
-            "name": "Turkey",
-            "code": "TR",
-            "zone": "Asia"
-        },
-        {
-            "name": "Turkmenistan",
-            "code": "TM",
-            "zone": "Asia"
-        },
-        {
-            "name": "Turks and Caicos Islands",
-            "code": "TC",
-            "zone": "Americas"
-        },
-        {
-            "name": "Tuvalu",
-            "code": "TV",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Uganda",
-            "code": "UG",
-            "zone": "Africa"
-        },
-        {
-            "name": "Ukraine",
-            "code": "UA",
-            "zone": "Europe"
-        },
-        {
-            "name": "United Arab Emirates",
-            "code": "AE",
-            "zone": "Asia"
-        },
-        {
-            "name": "United Kingdom of Great Britain and Northern Ireland",
-            "code": "GB",
-            "zone": "UK"
-        },
-        {
-            "name": "United States of America",
-            "code": "US",
-            "zone": "Americas"
-        },
-        {
-            "name": "United States Minor Outlying Islands",
-            "code": "UM",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Uruguay",
-            "code": "UY",
-            "zone": "Americas"
-        },
-        {
-            "name": "Uzbekistan",
-            "code": "UZ",
-            "zone": "Asia"
-        },
-        {
-            "name": "Vanuatu",
-            "code": "VU",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Venezuela (Bolivarian Republic of)",
-            "code": "VE",
-            "zone": "Americas"
-        },
-        {
-            "name": "Viet Nam",
-            "code": "VN",
-            "zone": "Asia"
-        },
-        {
-            "name": "Virgin Islands (British)",
-            "code": "VG",
-            "zone": "Americas"
-        },
-        {
-            "name": "Virgin Islands (U.S.)",
-            "code": "VI",
-            "zone": "Americas"
-        },
-        {
-            "name": "Wallis and Futuna",
-            "code": "WF",
-            "zone": "Oceania"
-        },
-        {
-            "name": "Western Sahara",
-            "code": "EH",
-            "zone": "Africa"
-        },
-        {
-            "name": "Yemen",
-            "code": "YE",
-            "zone": "Asia"
-        },
-        {
-            "name": "Zambia",
-            "code": "ZM",
-            "zone": "Africa"
-        },
-        {
-            "name": "Zimbabwe",
-            "code": "ZW",
-            "zone": "Africa"
-        }
+        { "name": "Afghanistan", "code": "AF", "zone": "Asia" },
+        { "name": "Åland Islands", "code": "AX", "zone": "Europe" },
+        { "name": "Albania", "code": "AL", "zone": "Europe" },
+        { "name": "Algeria", "code": "DZ", "zone": "Africa" },
+        { "name": "American Samoa", "code": "AS", "zone": "Oceania" },
+        { "name": "Andorra", "code": "AD", "zone": "Europe" },
+        { "name": "Angola", "code": "AO", "zone": "Africa" },
+        { "name": "Anguilla", "code": "AI", "zone": "Americas" },
+        { "name": "Antigua and Barbuda", "code": "AG", "zone": "Americas" },
+        { "name": "Argentina", "code": "AR", "zone": "Americas" },
+        { "name": "Armenia", "code": "AM", "zone": "Asia" },
+        { "name": "Aruba", "code": "AW", "zone": "Americas" },
+        { "name": "Australia", "code": "AU", "zone": "Oceania" },
+        { "name": "Austria", "code": "AT", "zone": "Europe" },
+        { "name": "Azerbaijan", "code": "AZ", "zone": "Asia" },
+        { "name": "Bahamas", "code": "BS", "zone": "Americas" },
+        { "name": "Bahrain", "code": "BH", "zone": "Asia" },
+        { "name": "Bangladesh", "code": "BD", "zone": "Asia" },
+        { "name": "Barbados", "code": "BB", "zone": "Americas" },
+        { "name": "Belarus", "code": "BY", "zone": "Europe" },
+        { "name": "Belgium", "code": "BE", "zone": "Europe" },
+        { "name": "Belize", "code": "BZ", "zone": "Americas" },
+        { "name": "Benin", "code": "BJ", "zone": "Africa" },
+        { "name": "Bermuda", "code": "BM", "zone": "Americas" },
+        { "name": "Bhutan", "code": "BT", "zone": "Asia" },
+        { "name": "Bolivia (Plurinational State of)", "code": "BO", "zone": "Americas" },
+        { "name": "Bonaire, Sint Eustatius and Saba", "code": "BQ", "zone": "Americas" },
+        { "name": "Bosnia and Herzegovina", "code": "BA", "zone": "Europe" },
+        { "name": "Botswana", "code": "BW", "zone": "Africa" },
+        { "name": "Bouvet Island", "code": "BV", "zone": "Americas" },
+        { "name": "Brazil", "code": "BR", "zone": "Americas" },
+        { "name": "British Indian Ocean Territory", "code": "IO", "zone": "Africa" },
+        { "name": "Brunei Darussalam", "code": "BN", "zone": "Asia" },
+        { "name": "Bulgaria", "code": "BG", "zone": "Europe" },
+        { "name": "Burkina Faso", "code": "BF", "zone": "Africa" },
+        { "name": "Burundi", "code": "BI", "zone": "Africa" },
+        { "name": "Cabo Verde", "code": "CV", "zone": "Africa" },
+        { "name": "Cambodia", "code": "KH", "zone": "Asia" },
+        { "name": "Cameroon", "code": "CM", "zone": "Africa" },
+        { "name": "Canada", "code": "CA", "zone": "Americas" },
+        { "name": "Cayman Islands", "code": "KY", "zone": "Americas" },
+        { "name": "Central African Republic", "code": "CF", "zone": "Africa" },
+        { "name": "Chad", "code": "TD", "zone": "Africa" },
+        { "name": "Chile", "code": "CL", "zone": "Americas" },
+        { "name": "China", "code": "CN", "zone": "Asia" },
+        { "name": "Christmas Island", "code": "CX", "zone": "Oceania" },
+        { "name": "Cocos (Keeling) Islands", "code": "CC", "zone": "Oceania" },
+        { "name": "Colombia", "code": "CO", "zone": "Americas" },
+        { "name": "Comoros", "code": "KM", "zone": "Africa" },
+        { "name": "Congo", "code": "CG", "zone": "Africa" },
+        { "name": "Congo (Democratic Republic of the)", "code": "CD", "zone": "Africa" },
+        { "name": "Cook Islands", "code": "CK", "zone": "Oceania" },
+        { "name": "Costa Rica", "code": "CR", "zone": "Americas" },
+        { "name": "Côte d'Ivoire", "code": "CI", "zone": "Africa" },
+        { "name": "Croatia", "code": "HR", "zone": "Europe" },
+        { "name": "Cuba", "code": "CU", "zone": "Americas" },
+        { "name": "Curaçao", "code": "CW", "zone": "Americas" },
+        { "name": "Cyprus", "code": "CY", "zone": "Asia" },
+        { "name": "Czechia", "code": "CZ", "zone": "Europe" },
+        { "name": "Denmark", "code": "DK", "zone": "Europe" },
+        { "name": "Djibouti", "code": "DJ", "zone": "Africa" },
+        { "name": "Dominica", "code": "DM", "zone": "Americas" },
+        { "name": "Dominican Republic", "code": "DO", "zone": "Americas" },
+        { "name": "Ecuador", "code": "EC", "zone": "Americas" },
+        { "name": "Egypt", "code": "EG", "zone": "Africa" },
+        { "name": "El Salvador", "code": "SV", "zone": "Americas" },
+        { "name": "Equatorial Guinea", "code": "GQ", "zone": "Africa" },
+        { "name": "Eritrea", "code": "ER", "zone": "Africa" },
+        { "name": "Estonia", "code": "EE", "zone": "Europe" },
+        { "name": "Eswatini", "code": "SZ", "zone": "Africa" },
+        { "name": "Ethiopia", "code": "ET", "zone": "Africa" },
+        { "name": "Falkland Islands (Malvinas)", "code": "FK", "zone": "Americas" },
+        { "name": "Faroe Islands", "code": "FO", "zone": "Europe" },
+        { "name": "Fiji", "code": "FJ", "zone": "Oceania" },
+        { "name": "Finland", "code": "FI", "zone": "Europe" },
+        { "name": "France", "code": "FR", "zone": "Europe" },
+        { "name": "French Guiana", "code": "GF", "zone": "Americas" },
+        { "name": "French Polynesia", "code": "PF", "zone": "Oceania" },
+        { "name": "French Southern Territories", "code": "TF", "zone": "Africa" },
+        { "name": "Gabon", "code": "GA", "zone": "Africa" },
+        { "name": "Gambia", "code": "GM", "zone": "Africa" },
+        { "name": "Georgia", "code": "GE", "zone": "Asia" },
+        { "name": "Germany", "code": "DE", "zone": "Europe" },
+        { "name": "Ghana", "code": "GH", "zone": "Africa" },
+        { "name": "Gibraltar", "code": "GI", "zone": "Europe" },
+        { "name": "Greece", "code": "GR", "zone": "Europe" },
+        { "name": "Greenland", "code": "GL", "zone": "Americas" },
+        { "name": "Grenada", "code": "GD", "zone": "Americas" },
+        { "name": "Guadeloupe", "code": "GP", "zone": "Americas" },
+        { "name": "Guam", "code": "GU", "zone": "Oceania" },
+        { "name": "Guatemala", "code": "GT", "zone": "Americas" },
+        { "name": "Guernsey", "code": "GG", "zone": "Europe" },
+        { "name": "Guinea", "code": "GN", "zone": "Africa" },
+        { "name": "Guinea-Bissau", "code": "GW", "zone": "Africa" },
+        { "name": "Guyana", "code": "GY", "zone": "Americas" },
+        { "name": "Haiti", "code": "HT", "zone": "Americas" },
+        { "name": "Heard Island and McDonald Islands", "code": "HM", "zone": "Oceania" },
+        { "name": "Holy See", "code": "VA", "zone": "Europe" },
+        { "name": "Honduras", "code": "HN", "zone": "Americas" },
+        { "name": "Hong Kong", "code": "HK", "zone": "Asia" },
+        { "name": "Hungary", "code": "HU", "zone": "Europe" },
+        { "name": "Iceland", "code": "IS", "zone": "Europe" },
+        { "name": "India", "code": "IN", "zone": "Asia" },
+        { "name": "Indonesia", "code": "ID", "zone": "Asia" },
+        { "name": "Iran (Islamic Republic of)", "code": "IR", "zone": "Asia" },
+        { "name": "Iraq", "code": "IQ", "zone": "Asia" },
+        { "name": "Ireland", "code": "IE", "zone": "Europe" },
+        { "name": "Isle of Man", "code": "IM", "zone": "Europe" },
+        { "name": "Israel", "code": "IL", "zone": "Asia" },
+        { "name": "Italy", "code": "IT", "zone": "Europe" },
+        { "name": "Jamaica", "code": "JM", "zone": "Americas" },
+        { "name": "Japan", "code": "JP", "zone": "Asia" },
+        { "name": "Jersey", "code": "JE", "zone": "Europe" },
+        { "name": "Jordan", "code": "JO", "zone": "Asia" },
+        { "name": "Kazakhstan", "code": "KZ", "zone": "Asia" },
+        { "name": "Kenya", "code": "KE", "zone": "Africa" },
+        { "name": "Kiribati", "code": "KI", "zone": "Oceania" },
+        { "name": "Korea (Democratic People's Republic of)", "code": "KP", "zone": "Asia" },
+        { "name": "Korea (Republic of)", "code": "KR", "zone": "Asia" },
+        { "name": "Kuwait", "code": "KW", "zone": "Asia" },
+        { "name": "Kyrgyzstan", "code": "KG", "zone": "Asia" },
+        { "name": "Lao People's Democratic Republic", "code": "LA", "zone": "Asia" },
+        { "name": "Latvia", "code": "LV", "zone": "Europe" },
+        { "name": "Lebanon", "code": "LB", "zone": "Asia" },
+        { "name": "Lesotho", "code": "LS", "zone": "Africa" },
+        { "name": "Liberia", "code": "LR", "zone": "Africa" },
+        { "name": "Libya", "code": "LY", "zone": "Africa" },
+        { "name": "Liechtenstein", "code": "LI", "zone": "Europe" },
+        { "name": "Lithuania", "code": "LT", "zone": "Europe" },
+        { "name": "Luxembourg", "code": "LU", "zone": "Europe" },
+        { "name": "Macao", "code": "MO", "zone": "Asia" },
+        { "name": "Macedonia (the former Yugoslav Republic of)", "code": "MK", "zone": "Europe" },
+        { "name": "Madagascar", "code": "MG", "zone": "Africa" },
+        { "name": "Malawi", "code": "MW", "zone": "Africa" },
+        { "name": "Malaysia", "code": "MY", "zone": "Asia" },
+        { "name": "Maldives", "code": "MV", "zone": "Asia" },
+        { "name": "Mali", "code": "ML", "zone": "Africa" },
+        { "name": "Malta", "code": "MT", "zone": "Europe" },
+        { "name": "Marshall Islands", "code": "MH", "zone": "Oceania" },
+        { "name": "Martinique", "code": "MQ", "zone": "Americas" },
+        { "name": "Mauritania", "code": "MR", "zone": "Africa" },
+        { "name": "Mauritius", "code": "MU", "zone": "Africa" },
+        { "name": "Mayotte", "code": "YT", "zone": "Africa" },
+        { "name": "Mexico", "code": "MX", "zone": "Americas" },
+        { "name": "Micronesia (Federated States of)", "code": "FM", "zone": "Oceania" },
+        { "name": "Moldova (Republic of)", "code": "MD", "zone": "Europe" },
+        { "name": "Monaco", "code": "MC", "zone": "Europe" },
+        { "name": "Mongolia", "code": "MN", "zone": "Asia" },
+        { "name": "Montenegro", "code": "ME", "zone": "Europe" },
+        { "name": "Montserrat", "code": "MS", "zone": "Americas" },
+        { "name": "Morocco", "code": "MA", "zone": "Africa" },
+        { "name": "Mozambique", "code": "MZ", "zone": "Africa" },
+        { "name": "Myanmar", "code": "MM", "zone": "Asia" },
+        { "name": "Namibia", "code": "NA", "zone": "Africa" },
+        { "name": "Nauru", "code": "NR", "zone": "Oceania" },
+        { "name": "Nepal", "code": "NP", "zone": "Asia" },
+        { "name": "Netherlands", "code": "NL", "zone": "Europe" },
+        { "name": "New Caledonia", "code": "NC", "zone": "Oceania" },
+        { "name": "New Zealand", "code": "NZ", "zone": "Oceania" },
+        { "name": "Nicaragua", "code": "NI", "zone": "Americas" },
+        { "name": "Niger", "code": "NE", "zone": "Africa" },
+        { "name": "Nigeria", "code": "NG", "zone": "Africa" },
+        { "name": "Niue", "code": "NU", "zone": "Oceania" },
+        { "name": "Norfolk Island", "code": "NF", "zone": "Oceania" },
+        { "name": "Northern Mariana Islands", "code": "MP", "zone": "Oceania" },
+        { "name": "Norway", "code": "NO", "zone": "Europe" },
+        { "name": "Oman", "code": "OM", "zone": "Asia" },
+        { "name": "Pakistan", "code": "PK", "zone": "Asia" },
+        { "name": "Palau", "code": "PW", "zone": "Oceania" },
+        { "name": "Palestine, State of", "code": "PS", "zone": "Asia" },
+        { "name": "Panama", "code": "PA", "zone": "Americas" },
+        { "name": "Papua New Guinea", "code": "PG", "zone": "Oceania" },
+        { "name": "Paraguay", "code": "PY", "zone": "Americas" },
+        { "name": "Peru", "code": "PE", "zone": "Americas" },
+        { "name": "Philippines", "code": "PH", "zone": "Asia" },
+        { "name": "Pitcairn", "code": "PN", "zone": "Oceania" },
+        { "name": "Poland", "code": "PL", "zone": "Europe" },
+        { "name": "Portugal", "code": "PT", "zone": "Europe" },
+        { "name": "Puerto Rico", "code": "PR", "zone": "Americas" },
+        { "name": "Qatar", "code": "QA", "zone": "Asia" },
+        { "name": "Réunion", "code": "RE", "zone": "Africa" },
+        { "name": "Romania", "code": "RO", "zone": "Europe" },
+        { "name": "Russian Federation", "code": "RU", "zone": "Europe" },
+        { "name": "Rwanda", "code": "RW", "zone": "Africa" },
+        { "name": "Saint Barthélemy", "code": "BL", "zone": "Americas" },
+        { "name": "Saint Helena, Ascension and Tristan da Cunha", "code": "SH", "zone": "Africa" },
+        { "name": "Saint Kitts and Nevis", "code": "KN", "zone": "Americas" },
+        { "name": "Saint Lucia", "code": "LC", "zone": "Americas" },
+        { "name": "Saint Martin (French part)", "code": "MF", "zone": "Americas" },
+        { "name": "Saint Pierre and Miquelon", "code": "PM", "zone": "Americas" },
+        { "name": "Saint Vincent and the Grenadines", "code": "VC", "zone": "Americas" },
+        { "name": "Samoa", "code": "WS", "zone": "Oceania" },
+        { "name": "San Marino", "code": "SM", "zone": "Europe" },
+        { "name": "Sao Tome and Principe", "code": "ST", "zone": "Africa" },
+        { "name": "Saudi Arabia", "code": "SA", "zone": "Asia" },
+        { "name": "Senegal", "code": "SN", "zone": "Africa" },
+        { "name": "Serbia", "code": "RS", "zone": "Europe" },
+        { "name": "Seychelles", "code": "SC", "zone": "Africa" },
+        { "name": "Sierra Leone", "code": "SL", "zone": "Africa" },
+        { "name": "Singapore", "code": "SG", "zone": "Asia" },
+        { "name": "Sint Maarten (Dutch part)", "code": "SX", "zone": "Americas" },
+        { "name": "Slovakia", "code": "SK", "zone": "Europe" },
+        { "name": "Slovenia", "code": "SI", "zone": "Europe" },
+        { "name": "Solomon Islands", "code": "SB", "zone": "Oceania" },
+        { "name": "Somalia", "code": "SO", "zone": "Africa" },
+        { "name": "South Africa", "code": "ZA", "zone": "Africa" },
+        { "name": "South Georgia and the South Sandwich Islands", "code": "GS", "zone": "Americas" },
+        { "name": "South Sudan", "code": "SS", "zone": "Africa" },
+        { "name": "Spain", "code": "ES", "zone": "Europe" },
+        { "name": "Sri Lanka", "code": "LK", "zone": "Asia" },
+        { "name": "Sudan", "code": "SD", "zone": "Africa" },
+        { "name": "Suriname", "code": "SR", "zone": "Americas" },
+        { "name": "Svalbard and Jan Mayen", "code": "SJ", "zone": "Europe" },
+        { "name": "Sweden", "code": "SE", "zone": "Europe" },
+        { "name": "Switzerland", "code": "CH", "zone": "Europe" },
+        { "name": "Syrian Arab Republic", "code": "SY", "zone": "Asia" },
+        { "name": "Taiwan, Province of China", "code": "TW", "zone": "Asia" },
+        { "name": "Tajikistan", "code": "TJ", "zone": "Asia" },
+        { "name": "Tanzania, United Republic of", "code": "TZ", "zone": "Africa" },
+        { "name": "Thailand", "code": "TH", "zone": "Asia" },
+        { "name": "Timor-Leste", "code": "TL", "zone": "Asia" },
+        { "name": "Togo", "code": "TG", "zone": "Africa" },
+        { "name": "Tokelau", "code": "TK", "zone": "Oceania" },
+        { "name": "Tonga", "code": "TO", "zone": "Oceania" },
+        { "name": "Trinidad and Tobago", "code": "TT", "zone": "Americas" },
+        { "name": "Tunisia", "code": "TN", "zone": "Africa" },
+        { "name": "Turkey", "code": "TR", "zone": "Asia" },
+        { "name": "Turkmenistan", "code": "TM", "zone": "Asia" },
+        { "name": "Turks and Caicos Islands", "code": "TC", "zone": "Americas" },
+        { "name": "Tuvalu", "code": "TV", "zone": "Oceania" },
+        { "name": "Uganda", "code": "UG", "zone": "Africa" },
+        { "name": "Ukraine", "code": "UA", "zone": "Europe" },
+        { "name": "United Arab Emirates", "code": "AE", "zone": "Asia" },
+        { "name": "United Kingdom", "code": "GB", "zone": "Europe" },
+        { "name": "United States of America", "code": "US", "zone": "Americas" },
+        { "name": "United States Minor Outlying Islands", "code": "UM", "zone": "Oceania" },
+        { "name": "Uruguay", "code": "UY", "zone": "Americas" },
+        { "name": "Uzbekistan", "code": "UZ", "zone": "Asia" },
+        { "name": "Vanuatu", "code": "VU", "zone": "Oceania" },
+        { "name": "Venezuela (Bolivarian Republic of)", "code": "VE", "zone": "Americas" },
+        { "name": "Viet Nam", "code": "VN", "zone": "Asia" },
+        { "name": "Virgin Islands (British)", "code": "VG", "zone": "Americas" },
+        { "name": "Virgin Islands (U.S.)", "code": "VI", "zone": "Americas" },
+        { "name": "Wallis and Futuna", "code": "WF", "zone": "Oceania" },
+        { "name": "Western Sahara", "code": "EH", "zone": "Africa" },
+        { "name": "Yemen", "code": "YE", "zone": "Asia" },
+        { "name": "Zambia", "code": "ZM", "zone": "Africa" },
+        { "name": "Zimbabwe", "code": "ZW", "zone": "Africa" }
     ]
     ]
 }
 }

+ 12 - 0
server/cli/assets/sample-products.csv

@@ -0,0 +1,12 @@
+name           , slug           , description                                                                                                                                                                                                                                                                  , assets                              , optionGroups       , optionValues    , sku         , price   , taxCategory , variantAssets
+Spiky Cactus   , spiky-cactus   , "A spiky yet elegant house cactus - perfect for the home or office. Origin and habitat: Probably native only to the Andes of Peru"                                                                                                                                           , charles-deluvio-695736-unsplash.jpg ,                    ,                 , SC011001    , 15.50   , standard    ,
+Running Shoe   , running-shoe   , "With its ultra-light, uber-responsive magic foam and a carbon fiber plate that feels like it’s propelling you forward, the Running Shoe is ready to push you to victories both large and small"                                                                             , chuttersnap-584518-unsplash.jpg     , shoe size          , Size 40         , RS0040      , 99.99   , standard    ,
+               ,                ,                                                                                                                                                                                                                                                                              ,                                     ,                    , Size 42         , RS0042      , 99.99   , standard    ,
+               ,                ,                                                                                                                                                                                                                                                                              ,                                     ,                    , Size 44         , RS0044      , 99.99   , standard    ,
+               ,                ,                                                                                                                                                                                                                                                                              ,                                     ,                    , Size 46         , RS0046      , 99.99   , standard    ,
+Laptop         , laptop         , "Now equipped with seventh-generation Intel Core processors, Laptop is snappier than ever. From daily tasks like launching apps and opening files to more advanced computing, you can power through your day thanks to faster SSDs and Turbo Boost processing up to 3.6GHz." , derick-david-409858-unsplash.jpg    , "screen size, RAM" , "13 inch, 8GB"  , L2201308    , 1299.00 , standard    ,
+               ,                ,                                                                                                                                                                                                                                                                              ,                                     ,                    , "15 inch, 8GB"  , L2201508    , 1399.00 , standard    ,
+               ,                ,                                                                                                                                                                                                                                                                              ,                                     ,                    , "13 inch, 16GB" , L2201316    , 2199.00 , standard    ,
+               ,                ,                                                                                                                                                                                                                                                                              ,                                     ,                    , "15 inch, 16GB" , L2201516    , 2299.00 , standard    ,
+Instant Camera , instant-camera , "With its nostalgic design and simple point-and-shoot functionality, the Instant Camera is the perfect pick to get started with instant photography."                                                                                                                        , eniko-kis-663725-unsplash.jpg       ,                    ,                 , IC22MWDD    , 174.99  , standard    ,
+Road Bike      , road-bike      , "Featuring a full carbon chassis - complete with cyclocross-specific carbon fork - and a component setup geared for hard use on the race circuit, it's got the low weight, exceptional efficiency and brilliant handling you'll need to stay at the front of the pack."      , mikkel-bech-748940-unsplash.jpg     ,                    ,                 , RB000844334 , 2499.00 , standard    ,

+ 32 - 4
server/cli/populate.ts

@@ -10,11 +10,11 @@ export async function populate() {
     logColored('\nPopulating... (this may take a minute or two)\n');
     logColored('\nPopulating... (this may take a minute or two)\n');
     const app = await getApplicationRef();
     const app = await getApplicationRef();
     if (app) {
     if (app) {
-        const { Populator } = require('vendure');
-        const populator = app.get(Populator);
+        const { Populator, Importer } = require('vendure');
         const initialData = require('./assets/initial-data.json');
         const initialData = require('./assets/initial-data.json');
-        await populator.populateInitialData(initialData);
-        logColored('Done!');
+        await populateInitialData(app, initialData, Populator);
+        await populateProducts(app, initialData, Importer);
+        logColored('\nDone!');
         await app.close();
         await app.close();
         process.exit(0);
         process.exit(0);
     }
     }
@@ -69,3 +69,31 @@ async function getApplicationRef(): Promise<INestApplication | undefined> {
     const app = await bootstrap(config);
     const app = await bootstrap(config);
     return app;
     return app;
 }
 }
+
+async function populateInitialData(app: INestApplication, initialData: any, Populator: any) {
+    const populator = app.get(Populator);
+    try {
+        await populator.populateInitialData(initialData);
+    } catch (err) {
+        console.error(err.message);
+    }
+}
+
+async function populateProducts(app: INestApplication, initialData: any, Importer: any) {
+    // copy the images to the import folder
+    const images = path.join(__dirname, 'assets', 'images');
+    const destination = path.join(process.cwd(), 'vendure', 'import-assets');
+    await fs.copy(images, destination);
+
+    // import the csv of same product data
+    const importer = app.get(Importer);
+    const productData = await fs.readFile(path.join(__dirname, 'assets', 'sample-products.csv'), 'utf-8');
+    const importResult = await importer.parseAndImport(productData, initialData.defaultLanguage);
+    if (importResult.errors.length) {
+        console.error(`Error encountered when importing product data:`);
+        console.error(importResult.errors.join('\n'));
+    } else {
+        console.log(`Imported ${importResult.importedCount} products`);
+        await fs.emptyDir(destination);
+    }
+}

+ 2 - 34
server/src/api/resolvers/import.resolver.ts

@@ -1,10 +1,6 @@
 import { Args, Mutation, Resolver } from '@nestjs/graphql';
 import { Args, Mutation, Resolver } from '@nestjs/graphql';
 
 
 import { ImportInfo, ImportProductsMutationArgs, Permission } from '../../../../shared/generated-types';
 import { ImportInfo, ImportProductsMutationArgs, Permission } from '../../../../shared/generated-types';
-import {
-    ImportParser,
-    ParsedProductWithVariants,
-} from '../../data-import/providers/import-parser/import-parser';
 import { Importer } from '../../data-import/providers/importer/importer';
 import { Importer } from '../../data-import/providers/importer/importer';
 import { RequestContext } from '../common/request-context';
 import { RequestContext } from '../common/request-context';
 import { Allow } from '../decorators/allow.decorator';
 import { Allow } from '../decorators/allow.decorator';
@@ -12,7 +8,7 @@ import { Ctx } from '../decorators/request-context.decorator';
 
 
 @Resolver('Import')
 @Resolver('Import')
 export class ImportResolver {
 export class ImportResolver {
-    constructor(private importParser: ImportParser, private importer: Importer) {}
+    constructor(private importer: Importer) {}
 
 
     @Mutation()
     @Mutation()
     @Allow(Permission.SuperAdmin)
     @Allow(Permission.SuperAdmin)
@@ -21,34 +17,6 @@ export class ImportResolver {
         @Args() args: ImportProductsMutationArgs,
         @Args() args: ImportProductsMutationArgs,
     ): Promise<ImportInfo> {
     ): Promise<ImportInfo> {
         const { stream, filename, mimetype, encoding } = await args.csvFile;
         const { stream, filename, mimetype, encoding } = await args.csvFile;
-        let parsed: ParsedProductWithVariants[];
-        try {
-            parsed = await this.importParser.parseProducts(stream);
-        } catch (err) {
-            return {
-                errors: [err.message],
-                importedCount: 0,
-            };
-        }
-
-        if (parsed) {
-            try {
-                const result = await this.importer.importProducts(ctx, parsed);
-                return {
-                    errors: [],
-                    importedCount: parsed.length,
-                };
-            } catch (err) {
-                return {
-                    errors: [err.message],
-                    importedCount: 0,
-                };
-            }
-        } else {
-            return {
-                errors: ['nothing to parse!'],
-                importedCount: 0,
-            };
-        }
+        return this.importer.parseAndImport(stream, ctx);
     }
     }
 }
 }

+ 1 - 0
server/src/data-import/index.ts

@@ -1 +1,2 @@
 export * from './providers/populator/populator';
 export * from './providers/populator/populator';
+export * from './providers/importer/importer';

+ 55 - 2
server/src/data-import/providers/importer/importer.ts

@@ -1,19 +1,22 @@
 import { Injectable } from '@nestjs/common';
 import { Injectable } from '@nestjs/common';
 import * as fs from 'fs-extra';
 import * as fs from 'fs-extra';
 import * as path from 'path';
 import * as path from 'path';
+import { Stream } from 'stream';
 
 
+import { ImportInfo, LanguageCode } from '../../../../../shared/generated-types';
 import { normalizeString } from '../../../../../shared/normalize-string';
 import { normalizeString } from '../../../../../shared/normalize-string';
 import { RequestContext } from '../../../api/common/request-context';
 import { RequestContext } from '../../../api/common/request-context';
 import { ConfigService } from '../../../config/config.service';
 import { ConfigService } from '../../../config/config.service';
 import { Asset } from '../../../entity/asset/asset.entity';
 import { Asset } from '../../../entity/asset/asset.entity';
 import { TaxCategory } from '../../../entity/tax-category/tax-category.entity';
 import { TaxCategory } from '../../../entity/tax-category/tax-category.entity';
 import { AssetService } from '../../../service/services/asset.service';
 import { AssetService } from '../../../service/services/asset.service';
+import { ChannelService } from '../../../service/services/channel.service';
 import { ProductOptionGroupService } from '../../../service/services/product-option-group.service';
 import { ProductOptionGroupService } from '../../../service/services/product-option-group.service';
 import { ProductOptionService } from '../../../service/services/product-option.service';
 import { ProductOptionService } from '../../../service/services/product-option.service';
 import { ProductVariantService } from '../../../service/services/product-variant.service';
 import { ProductVariantService } from '../../../service/services/product-variant.service';
 import { ProductService } from '../../../service/services/product.service';
 import { ProductService } from '../../../service/services/product.service';
 import { TaxCategoryService } from '../../../service/services/tax-category.service';
 import { TaxCategoryService } from '../../../service/services/tax-category.service';
-import { ParsedProductWithVariants } from '../import-parser/import-parser';
+import { ImportParser, ParsedProductWithVariants } from '../import-parser/import-parser';
 
 
 @Injectable()
 @Injectable()
 export class Importer {
 export class Importer {
@@ -21,6 +24,8 @@ export class Importer {
 
 
     constructor(
     constructor(
         private configService: ConfigService,
         private configService: ConfigService,
+        private importParser: ImportParser,
+        private channelService: ChannelService,
         private productService: ProductService,
         private productService: ProductService,
         private productVariantService: ProductVariantService,
         private productVariantService: ProductVariantService,
         private productOptionGroupService: ProductOptionGroupService,
         private productOptionGroupService: ProductOptionGroupService,
@@ -29,7 +34,55 @@ export class Importer {
         private productOptionService: ProductOptionService,
         private productOptionService: ProductOptionService,
     ) {}
     ) {}
 
 
-    async importProducts(ctx: RequestContext, rows: ParsedProductWithVariants[]) {
+    async parseAndImport(
+        input: string | Stream,
+        ctxOrLanguageCode: RequestContext | LanguageCode,
+    ): Promise<ImportInfo> {
+        let ctx: RequestContext;
+        if (ctxOrLanguageCode instanceof RequestContext) {
+            ctx = ctxOrLanguageCode;
+        } else {
+            const channel = await this.channelService.getDefaultChannel();
+            ctx = new RequestContext({
+                isAuthorized: true,
+                authorizedAsOwnerOnly: false,
+                channel,
+                languageCode: ctxOrLanguageCode,
+            });
+        }
+
+        let parsed: ParsedProductWithVariants[];
+        try {
+            parsed = await this.importParser.parseProducts(input);
+        } catch (err) {
+            return {
+                errors: [err.message],
+                importedCount: 0,
+            };
+        }
+
+        if (parsed) {
+            try {
+                const result = await this.importProducts(ctx, parsed);
+                return {
+                    errors: [],
+                    importedCount: parsed.length,
+                };
+            } catch (err) {
+                return {
+                    errors: [err.message],
+                    importedCount: 0,
+                };
+            }
+        } else {
+            return {
+                errors: ['nothing to parse!'],
+                importedCount: 0,
+            };
+        }
+    }
+
+    private async importProducts(ctx: RequestContext, rows: ParsedProductWithVariants[]) {
         const languageCode = ctx.languageCode;
         const languageCode = ctx.languageCode;
         const taxCategories = await this.taxCategoryService.findAll();
         const taxCategories = await this.taxCategoryService.findAll();
         for (const { product, variants } of rows) {
         for (const { product, variants } of rows) {

+ 20 - 0
server/src/data-import/providers/populator/populator.ts

@@ -17,12 +17,16 @@ export interface CountryData {
 }
 }
 export interface InitialData {
 export interface InitialData {
     defaultLanguage: LanguageCode;
     defaultLanguage: LanguageCode;
+    defaultZone: string;
     countries: CountryData[];
     countries: CountryData[];
     taxRates: Array<{ name: string; percentage: number }>;
     taxRates: Array<{ name: string; percentage: number }>;
 }
 }
 
 
 type ZoneMap = Map<string, { entity: Zone; members: string[] }>;
 type ZoneMap = Map<string, { entity: Zone; members: string[] }>;
 
 
+/**
+ * Responsible for populating the database with initial data.
+ */
 @Injectable()
 @Injectable()
 export class Populator {
 export class Populator {
     constructor(
     constructor(
@@ -44,6 +48,22 @@ export class Populator {
 
 
         const zoneMap = await this.populateCountries(ctx, data.countries);
         const zoneMap = await this.populateCountries(ctx, data.countries);
         await this.populateTaxRates(ctx, data.taxRates, zoneMap);
         await this.populateTaxRates(ctx, data.taxRates, zoneMap);
+        await this.setChannelDefaults(zoneMap, data, channel);
+    }
+
+    private async setChannelDefaults(zoneMap, data: InitialData, channel) {
+        const defaultZone = zoneMap.get(data.defaultZone);
+        if (!defaultZone) {
+            throw new Error(
+                `The defaultZone (${data.defaultZone}) did not match any zones from the InitialData`,
+            );
+        }
+        const defaultZoneId = defaultZone.entity.id as string;
+        await this.channelService.update({
+            id: channel.id as string,
+            defaultTaxZoneId: defaultZoneId,
+            defaultShippingZoneId: defaultZoneId,
+        });
     }
     }
 
 
     private async populateCountries(ctx: RequestContext, countries: CountryData[]): Promise<ZoneMap> {
     private async populateCountries(ctx: RequestContext, countries: CountryData[]): Promise<ZoneMap> {