From 065cdd2451e61a99a64e34ec0d72d8de456899f0 Mon Sep 17 00:00:00 2001 From: Devin Date: Sat, 11 Feb 2023 13:07:55 +0200 Subject: [PATCH 1/6] moved to using sqlite for datastore --- .gitignore | 2 + data/countries.json | 1012 ------------------------------------- data/currencies.json | 100 ---- data/merchants.json | 1144 ------------------------------------------ index.js | 813 +++++++++++++++++++++++++++--- package-lock.json | 566 +++++++++++++++++++-- package.json | 2 + 7 files changed, 1282 insertions(+), 2357 deletions(-) delete mode 100644 data/countries.json delete mode 100644 data/currencies.json delete mode 100644 data/merchants.json diff --git a/.gitignore b/.gitignore index 7b7127c..739da00 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ **/node_modules .env +**.db-shm +**.db-wal \ No newline at end of file diff --git a/data/countries.json b/data/countries.json deleted file mode 100644 index ba95c8c..0000000 --- a/data/countries.json +++ /dev/null @@ -1,1012 +0,0 @@ -{ - "data": { - "result": [ - { - "Code": "ZA", - "Name": "South Africa" - }, - { - "Code": "GB", - "Name": "United Kingdom of Great Britain and Northern Ireland (the)" - }, - { - "Code": "AF", - "Name": "Afghanistan" - }, - { - "Code": "AL", - "Name": "Albania" - }, - { - "Code": "DZ", - "Name": "Algeria" - }, - { - "Code": "AS", - "Name": "American Samoa" - }, - { - "Code": "AD", - "Name": "Andorra" - }, - { - "Code": "AO", - "Name": "Angola" - }, - { - "Code": "AI", - "Name": "Anguilla" - }, - { - "Code": "AQ", - "Name": "Antarctica" - }, - { - "Code": "AG", - "Name": "Antigua and Barbuda" - }, - { - "Code": "AR", - "Name": "Argentina" - }, - { - "Code": "AM", - "Name": "Armenia" - }, - { - "Code": "AW", - "Name": "Aruba" - }, - { - "Code": "AU", - "Name": "Australia" - }, - { - "Code": "AT", - "Name": "Austria" - }, - { - "Code": "AZ", - "Name": "Azerbaijan" - }, - { - "Code": "BS", - "Name": "Bahamas (the)" - }, - { - "Code": "BH", - "Name": "Bahrain" - }, - { - "Code": "BD", - "Name": "Bangladesh" - }, - { - "Code": "BB", - "Name": "Barbados" - }, - { - "Code": "BY", - "Name": "Belarus" - }, - { - "Code": "BE", - "Name": "Belgium" - }, - { - "Code": "BZ", - "Name": "Belize" - }, - { - "Code": "BJ", - "Name": "Benin" - }, - { - "Code": "BM", - "Name": "Bermuda" - }, - { - "Code": "BT", - "Name": "Bhutan" - }, - { - "Code": "BO", - "Name": "Bolivia (Plurinational State of)" - }, - { - "Code": "BQ", - "Name": "Bonaire, Sint Eustatius and Saba" - }, - { - "Code": "BA", - "Name": "Bosnia and Herzegovina" - }, - { - "Code": "BW", - "Name": "Botswana" - }, - { - "Code": "BV", - "Name": "Bouvet Island" - }, - { - "Code": "BR", - "Name": "Brazil" - }, - { - "Code": "IO", - "Name": "British Indian Ocean Territory (the)" - }, - { - "Code": "BN", - "Name": "Brunei Darussalam" - }, - { - "Code": "BG", - "Name": "Bulgaria" - }, - { - "Code": "BF", - "Name": "Burkina Faso" - }, - { - "Code": "BI", - "Name": "Burundi" - }, - { - "Code": "CV", - "Name": "Cabo Verde" - }, - { - "Code": "KH", - "Name": "Cambodia" - }, - { - "Code": "CM", - "Name": "Cameroon" - }, - { - "Code": "CA", - "Name": "Canada" - }, - { - "Code": "KY", - "Name": "Cayman Islands (the)" - }, - { - "Code": "CF", - "Name": "Central African Republic (the)" - }, - { - "Code": "TD", - "Name": "Chad" - }, - { - "Code": "CL", - "Name": "Chile" - }, - { - "Code": "CN", - "Name": "China" - }, - { - "Code": "CX", - "Name": "Christmas Island" - }, - { - "Code": "CC", - "Name": "Cocos (Keeling) Islands (the)" - }, - { - "Code": "CO", - "Name": "Colombia" - }, - { - "Code": "KM", - "Name": "Comoros (the)" - }, - { - "Code": "CD", - "Name": "Congo (the Democratic Republic of the)" - }, - { - "Code": "CG", - "Name": "Congo (the)" - }, - { - "Code": "CK", - "Name": "Cook Islands (the)" - }, - { - "Code": "CR", - "Name": "Costa Rica" - }, - { - "Code": "HR", - "Name": "Croatia" - }, - { - "Code": "CU", - "Name": "Cuba" - }, - { - "Code": "CW", - "Name": "Curaçao" - }, - { - "Code": "CY", - "Name": "Cyprus" - }, - { - "Code": "CZ", - "Name": "Czechia" - }, - { - "Code": "CI", - "Name": "Côte d'Ivoire" - }, - { - "Code": "DK", - "Name": "Denmark" - }, - { - "Code": "DJ", - "Name": "Djibouti" - }, - { - "Code": "DM", - "Name": "Dominica" - }, - { - "Code": "DO", - "Name": "Dominican Republic (the)" - }, - { - "Code": "EC", - "Name": "Ecuador" - }, - { - "Code": "EG", - "Name": "Egypt" - }, - { - "Code": "SV", - "Name": "El Salvador" - }, - { - "Code": "GQ", - "Name": "Equatorial Guinea" - }, - { - "Code": "ER", - "Name": "Eritrea" - }, - { - "Code": "EE", - "Name": "Estonia" - }, - { - "Code": "SZ", - "Name": "Eswatini" - }, - { - "Code": "ET", - "Name": "Ethiopia" - }, - { - "Code": "FK", - "Name": "Falkland Islands (the) [Malvinas]" - }, - { - "Code": "FO", - "Name": "Faroe Islands (the)" - }, - { - "Code": "FJ", - "Name": "Fiji" - }, - { - "Code": "FI", - "Name": "Finland" - }, - { - "Code": "FR", - "Name": "France" - }, - { - "Code": "GF", - "Name": "French Guiana" - }, - { - "Code": "PF", - "Name": "French Polynesia" - }, - { - "Code": "TF", - "Name": "French Southern Territories (the)" - }, - { - "Code": "GA", - "Name": "Gabon" - }, - { - "Code": "GM", - "Name": "Gambia (the)" - }, - { - "Code": "GE", - "Name": "Georgia" - }, - { - "Code": "DE", - "Name": "Germany" - }, - { - "Code": "GH", - "Name": "Ghana" - }, - { - "Code": "GI", - "Name": "Gibraltar" - }, - { - "Code": "GR", - "Name": "Greece" - }, - { - "Code": "GL", - "Name": "Greenland" - }, - { - "Code": "GD", - "Name": "Grenada" - }, - { - "Code": "GP", - "Name": "Guadeloupe" - }, - { - "Code": "GU", - "Name": "Guam" - }, - { - "Code": "GT", - "Name": "Guatemala" - }, - { - "Code": "GG", - "Name": "Guernsey" - }, - { - "Code": "GN", - "Name": "Guinea" - }, - { - "Code": "GW", - "Name": "Guinea-Bissau" - }, - { - "Code": "GY", - "Name": "Guyana" - }, - { - "Code": "HT", - "Name": "Haiti" - }, - { - "Code": "HM", - "Name": "Heard Island and McDonald Islands" - }, - { - "Code": "VA", - "Name": "Holy See (the)" - }, - { - "Code": "HN", - "Name": "Honduras" - }, - { - "Code": "HK", - "Name": "Hong Kong" - }, - { - "Code": "HU", - "Name": "Hungary" - }, - { - "Code": "IS", - "Name": "Iceland" - }, - { - "Code": "IN", - "Name": "India" - }, - { - "Code": "ID", - "Name": "Indonesia" - }, - { - "Code": "IR", - "Name": "Iran (Islamic Republic of)" - }, - { - "Code": "IQ", - "Name": "Iraq" - }, - { - "Code": "IE", - "Name": "Ireland" - }, - { - "Code": "IM", - "Name": "Isle of Man" - }, - { - "Code": "IL", - "Name": "Israel" - }, - { - "Code": "IT", - "Name": "Italy" - }, - { - "Code": "JM", - "Name": "Jamaica" - }, - { - "Code": "JP", - "Name": "Japan" - }, - { - "Code": "JE", - "Name": "Jersey" - }, - { - "Code": "JO", - "Name": "Jordan" - }, - { - "Code": "KZ", - "Name": "Kazakhstan" - }, - { - "Code": "KE", - "Name": "Kenya" - }, - { - "Code": "KI", - "Name": "Kiribati" - }, - { - "Code": "KP", - "Name": "Korea (the Democratic People's Republic of)" - }, - { - "Code": "KR", - "Name": "Korea (the Republic of)" - }, - { - "Code": "KW", - "Name": "Kuwait" - }, - { - "Code": "KG", - "Name": "Kyrgyzstan" - }, - { - "Code": "LA", - "Name": "Lao People's Democratic Republic (the)" - }, - { - "Code": "LV", - "Name": "Latvia" - }, - { - "Code": "LB", - "Name": "Lebanon" - }, - { - "Code": "LS", - "Name": "Lesotho" - }, - { - "Code": "LR", - "Name": "Liberia" - }, - { - "Code": "LY", - "Name": "Libya" - }, - { - "Code": "LI", - "Name": "Liechtenstein" - }, - { - "Code": "LT", - "Name": "Lithuania" - }, - { - "Code": "LU", - "Name": "Luxembourg" - }, - { - "Code": "MO", - "Name": "Macao" - }, - { - "Code": "MK", - "Name": "Macedonia (the former Yugoslav Republic of)" - }, - { - "Code": "MG", - "Name": "Madagascar" - }, - { - "Code": "MW", - "Name": "Malawi" - }, - { - "Code": "MY", - "Name": "Malaysia" - }, - { - "Code": "MV", - "Name": "Maldives" - }, - { - "Code": "ML", - "Name": "Mali" - }, - { - "Code": "MT", - "Name": "Malta" - }, - { - "Code": "MH", - "Name": "Marshall Islands (the)" - }, - { - "Code": "MQ", - "Name": "Martinique" - }, - { - "Code": "MR", - "Name": "Mauritania" - }, - { - "Code": "MU", - "Name": "Mauritius" - }, - { - "Code": "YT", - "Name": "Mayotte" - }, - { - "Code": "MX", - "Name": "Mexico" - }, - { - "Code": "FM", - "Name": "Micronesia (Federated States of)" - }, - { - "Code": "MD", - "Name": "Moldova (the Republic of)" - }, - { - "Code": "MC", - "Name": "Monaco" - }, - { - "Code": "MN", - "Name": "Mongolia" - }, - { - "Code": "ME", - "Name": "Montenegro" - }, - { - "Code": "MS", - "Name": "Montserrat" - }, - { - "Code": "MA", - "Name": "Morocco" - }, - { - "Code": "MZ", - "Name": "Mozambique" - }, - { - "Code": "MM", - "Name": "Myanmar" - }, - { - "Code": "NA", - "Name": "Namibia" - }, - { - "Code": "NR", - "Name": "Nauru" - }, - { - "Code": "NP", - "Name": "Nepal" - }, - { - "Code": "NL", - "Name": "Netherlands (the)" - }, - { - "Code": "NC", - "Name": "New Caledonia" - }, - { - "Code": "NZ", - "Name": "New Zealand" - }, - { - "Code": "NI", - "Name": "Nicaragua" - }, - { - "Code": "NE", - "Name": "Niger (the)" - }, - { - "Code": "NG", - "Name": "Nigeria" - }, - { - "Code": "NU", - "Name": "Niue" - }, - { - "Code": "NF", - "Name": "Norfolk Island" - }, - { - "Code": "MP", - "Name": "Northern Mariana Islands (the)" - }, - { - "Code": "NO", - "Name": "Norway" - }, - { - "Code": "OM", - "Name": "Oman" - }, - { - "Code": "PK", - "Name": "Pakistan" - }, - { - "Code": "PW", - "Name": "Palau" - }, - { - "Code": "PS", - "Name": "Palestine, State of" - }, - { - "Code": "PA", - "Name": "Panama" - }, - { - "Code": "PG", - "Name": "Papua New Guinea" - }, - { - "Code": "PY", - "Name": "Paraguay" - }, - { - "Code": "PE", - "Name": "Peru" - }, - { - "Code": "PH", - "Name": "Philippines (the)" - }, - { - "Code": "PN", - "Name": "Pitcairn" - }, - { - "Code": "PL", - "Name": "Poland" - }, - { - "Code": "PT", - "Name": "Portugal" - }, - { - "Code": "PR", - "Name": "Puerto Rico" - }, - { - "Code": "QA", - "Name": "Qatar" - }, - { - "Code": "RO", - "Name": "Romania" - }, - { - "Code": "RU", - "Name": "Russian Federation (the)" - }, - { - "Code": "RW", - "Name": "Rwanda" - }, - { - "Code": "RE", - "Name": "Réunion" - }, - { - "Code": "BL", - "Name": "Saint Barthélemy" - }, - { - "Code": "SH", - "Name": "Saint Helena, Ascension and Tristan da Cunha" - }, - { - "Code": "KN", - "Name": "Saint Kitts and Nevis" - }, - { - "Code": "LC", - "Name": "Saint Lucia" - }, - { - "Code": "MF", - "Name": "Saint Martin (French part)" - }, - { - "Code": "PM", - "Name": "Saint Pierre and Miquelon" - }, - { - "Code": "VC", - "Name": "Saint Vincent and the Grenadines" - }, - { - "Code": "WS", - "Name": "Samoa" - }, - { - "Code": "SM", - "Name": "San Marino" - }, - { - "Code": "ST", - "Name": "Sao Tome and Principe" - }, - { - "Code": "SA", - "Name": "Saudi Arabia" - }, - { - "Code": "SN", - "Name": "Senegal" - }, - { - "Code": "RS", - "Name": "Serbia" - }, - { - "Code": "SC", - "Name": "Seychelles" - }, - { - "Code": "SL", - "Name": "Sierra Leone" - }, - { - "Code": "SG", - "Name": "Singapore" - }, - { - "Code": "SX", - "Name": "Sint Maarten (Dutch part)" - }, - { - "Code": "SK", - "Name": "Slovakia" - }, - { - "Code": "SI", - "Name": "Slovenia" - }, - { - "Code": "SB", - "Name": "Solomon Islands" - }, - { - "Code": "SO", - "Name": "Somalia" - }, - { - "Code": "GS", - "Name": "South Georgia and the South Sandwich Islands" - }, - { - "Code": "SS", - "Name": "South Sudan" - }, - { - "Code": "ES", - "Name": "Spain" - }, - { - "Code": "LK", - "Name": "Sri Lanka" - }, - { - "Code": "SD", - "Name": "Sudan (the)" - }, - { - "Code": "SR", - "Name": "Suriname" - }, - { - "Code": "SJ", - "Name": "Svalbard and Jan Mayen" - }, - { - "Code": "SE", - "Name": "Sweden" - }, - { - "Code": "CH", - "Name": "Switzerland" - }, - { - "Code": "SY", - "Name": "Syrian Arab Republic" - }, - { - "Code": "TW", - "Name": "Taiwan (Province of China)" - }, - { - "Code": "TJ", - "Name": "Tajikistan" - }, - { - "Code": "TZ", - "Name": "Tanzania, United Republic of" - }, - { - "Code": "TH", - "Name": "Thailand" - }, - { - "Code": "TL", - "Name": "Timor-Leste" - }, - { - "Code": "TG", - "Name": "Togo" - }, - { - "Code": "TK", - "Name": "Tokelau" - }, - { - "Code": "TO", - "Name": "Tonga" - }, - { - "Code": "TT", - "Name": "Trinidad and Tobago" - }, - { - "Code": "TN", - "Name": "Tunisia" - }, - { - "Code": "TR", - "Name": "Turkey" - }, - { - "Code": "TM", - "Name": "Turkmenistan" - }, - { - "Code": "TC", - "Name": "Turks and Caicos Islands (the)" - }, - { - "Code": "TV", - "Name": "Tuvalu" - }, - { - "Code": "UG", - "Name": "Uganda" - }, - { - "Code": "UA", - "Name": "Ukraine" - }, - { - "Code": "AE", - "Name": "United Arab Emirates (the)" - }, - { - "Code": "UM", - "Name": "United States Minor Outlying Islands (the)" - }, - { - "Code": "US", - "Name": "United States of America (the)" - }, - { - "Code": "UY", - "Name": "Uruguay" - }, - { - "Code": "UZ", - "Name": "Uzbekistan" - }, - { - "Code": "VU", - "Name": "Vanuatu" - }, - { - "Code": "VE", - "Name": "Venezuela (Bolivarian Republic of)" - }, - { - "Code": "VN", - "Name": "Viet Nam" - }, - { - "Code": "VG", - "Name": "Virgin Islands (British)" - }, - { - "Code": "VI", - "Name": "Virgin Islands (U.S.)" - }, - { - "Code": "WF", - "Name": "Wallis and Futuna" - }, - { - "Code": "EH", - "Name": "Western Sahara" - }, - { - "Code": "YE", - "Name": "Yemen" - }, - { - "Code": "ZM", - "Name": "Zambia" - }, - { - "Code": "ZW", - "Name": "Zimbabwe" - }, - { - "Code": "AX", - "Name": "Åland Islands" - }, - { - "Code": "undefined", - "Name": "undefined" - } - ] - }, - "links": { - "self": null - }, - "meta": { - "totalPages": 1 - } -} \ No newline at end of file diff --git a/data/currencies.json b/data/currencies.json deleted file mode 100644 index 1e5ac05..0000000 --- a/data/currencies.json +++ /dev/null @@ -1,100 +0,0 @@ -{ - "data": { - "result": [ - { - "Code": "ZAR", - "Name": "South African Rand" - }, - { - "Code": "GBP", - "Name": "British Pound" - }, - { - "Code": "USD", - "Name": "United States Dollar" - }, - { - "Code": "EUR", - "Name": "Euro" - }, - { - "Code": "AUD", - "Name": "Australian Dollar" - }, - { - "Code": "CHF", - "Name": "Swiss Franc" - }, - { - "Code": "CAD", - "Name": "Canadian Dollar" - }, - { - "Code": "DKK", - "Name": "Danish Krone" - }, - { - "Code": "HKD", - "Name": "Hong Kong Dollar" - }, - { - "Code": "JPY", - "Name": "Japanese Yen" - }, - { - "Code": "MUR", - "Name": "Mauritius Rupee" - }, - { - "Code": "NZD", - "Name": "New Zealand Dollar" - }, - { - "Code": "NOK", - "Name": "Norwegian Krone" - }, - { - "Code": "SGD", - "Name": "Singapore Dollar" - }, - { - "Code": "SEK", - "Name": "Swedish Krona" - }, - { - "Code": "AED", - "Name": "Emirati Dirham" - }, - { - "Code": "BWP", - "Name": "Botswana Pula" - }, - { - "Code": "INR", - "Name": "Indian Rupee" - }, - { - "Code": "KES", - "Name": "Kenyan Shilling" - }, - { - "Code": "NGN", - "Name": "Nigerian Naira" - }, - { - "Code": "RUB", - "Name": "Russian Ruble" - }, - { - "Code": "TRY", - "Name": "Turkish Lira" - } - ] - }, - "links": { - "self": null - }, - "meta": { - "totalPages": 1 - } -} \ No newline at end of file diff --git a/data/merchants.json b/data/merchants.json deleted file mode 100644 index 7647bb2..0000000 --- a/data/merchants.json +++ /dev/null @@ -1,1144 +0,0 @@ -{ - "data": { - "result": [ - { - "Code": "7623", - "Name": "A/C, Refrigeration Repair" - }, - { - "Code": "8931", - "Name": "Accounting/Bookkeeping Services" - }, - { - "Code": "7311", - "Name": "Advertising Services" - }, - { - "Code": "763", - "Name": "Agricultural Cooperative" - }, - { - "Code": "4511", - "Name": "Airlines, Air Carriers" - }, - { - "Code": "4582", - "Name": "Airports, Flying Fields" - }, - { - "Code": "4119", - "Name": "Ambulance Services" - }, - { - "Code": "7996", - "Name": "Amusement Parks/Carnivals" - }, - { - "Code": "5937", - "Name": "Antique Reproductions" - }, - { - "Code": "5932", - "Name": "Antique Shops" - }, - { - "Code": "7998", - "Name": "Aquariums" - }, - { - "Code": "8911", - "Name": "Architectural/Surveying Services" - }, - { - "Code": "5971", - "Name": "Art Dealers and Galleries" - }, - { - "Code": "5970", - "Name": "Artists Supply and Craft Shops" - }, - { - "Code": "7531", - "Name": "Auto Body Repair Shops" - }, - { - "Code": "7535", - "Name": "Auto Paint Shops" - }, - { - "Code": "7538", - "Name": "Auto Service Shops" - }, - { - "Code": "5531", - "Name": "Auto and Home Supply Stores" - }, - { - "Code": "6011", - "Name": "Automated Cash Disburse" - }, - { - "Code": "5542", - "Name": "Automated Fuel Dispensers" - }, - { - "Code": "8675", - "Name": "Automobile Associations" - }, - { - "Code": "5533", - "Name": "Automotive Parts and Accessories Stores" - }, - { - "Code": "5532", - "Name": "Automotive Tire Stores" - }, - { - "Code": "9223", - "Name": "Bail and Bond Payments (payment to the surety for the bond, not the actual bond paid to the government agency)" - }, - { - "Code": "5462", - "Name": "Bakeries" - }, - { - "Code": "7929", - "Name": "Bands, Orchestras" - }, - { - "Code": "7230", - "Name": "Barber and Beauty Shops" - }, - { - "Code": "7995", - "Name": "Betting/Casino Gambling" - }, - { - "Code": "5940", - "Name": "Bicycle Shops" - }, - { - "Code": "7932", - "Name": "Billiard/Pool Establishments" - }, - { - "Code": "5551", - "Name": "Boat Dealers" - }, - { - "Code": "4457", - "Name": "Boat Rentals and Leases" - }, - { - "Code": "5942", - "Name": "Book Stores" - }, - { - "Code": "5192", - "Name": "Books, Periodicals, and Newspapers" - }, - { - "Code": "7933", - "Name": "Bowling Alleys" - }, - { - "Code": "4131", - "Name": "Bus Lines" - }, - { - "Code": "8244", - "Name": "Business/Secretarial Schools" - }, - { - "Code": "7278", - "Name": "Buying/Shopping Services" - }, - { - "Code": "4899", - "Name": "Cable, Satellite, and Other Pay Television and Radio" - }, - { - "Code": "5946", - "Name": "Camera and Photographic Supply Stores" - }, - { - "Code": "5441", - "Name": "Candy, Nut, and Confectionery Stores" - }, - { - "Code": "7512", - "Name": "Car Rental Agencies" - }, - { - "Code": "7542", - "Name": "Car Washes" - }, - { - "Code": "5511", - "Name": "Car and Truck Dealers (New & Used) Sales, Service, Repairs Parts and Leasing" - }, - { - "Code": "5521", - "Name": "Car and Truck Dealers (Used Only) Sales, Service, Repairs Parts and Leasing" - }, - { - "Code": "1750", - "Name": "Carpentry Services" - }, - { - "Code": "7217", - "Name": "Carpet/Upholstery Cleaning" - }, - { - "Code": "5811", - "Name": "Caterers" - }, - { - "Code": "8398", - "Name": "Charitable and Social Service Organizations - Fundraising" - }, - { - "Code": "5169", - "Name": "Chemicals and Allied Products (Not Elsewhere Classified)" - }, - { - "Code": "5641", - "Name": "Chidrens and Infants Wear Stores" - }, - { - "Code": "8351", - "Name": "Child Care Services" - }, - { - "Code": "8049", - "Name": "Chiropodists, Podiatrists" - }, - { - "Code": "8041", - "Name": "Chiropractors" - }, - { - "Code": "5993", - "Name": "Cigar Stores and Stands" - }, - { - "Code": "8641", - "Name": "Civic, Social, Fraternal Associations" - }, - { - "Code": "7349", - "Name": "Cleaning and Maintenance" - }, - { - "Code": "7296", - "Name": "Clothing Rental" - }, - { - "Code": "8220", - "Name": "Colleges, Universities" - }, - { - "Code": "5046", - "Name": "Commercial Equipment (Not Elsewhere Classified)" - }, - { - "Code": "5139", - "Name": "Commercial Footwear" - }, - { - "Code": "7333", - "Name": "Commercial Photography, Art and Graphics" - }, - { - "Code": "4111", - "Name": "Commuter Transport, Ferries" - }, - { - "Code": "4816", - "Name": "Computer Network Services" - }, - { - "Code": "7372", - "Name": "Computer Programming" - }, - { - "Code": "7379", - "Name": "Computer Repair" - }, - { - "Code": "5734", - "Name": "Computer Software Stores" - }, - { - "Code": "5045", - "Name": "Computers, Peripherals, and Software" - }, - { - "Code": "1771", - "Name": "Concrete Work Services" - }, - { - "Code": "5039", - "Name": "Construction Materials (Not Elsewhere Classified)" - }, - { - "Code": "7392", - "Name": "Consulting, Public Relations" - }, - { - "Code": "8241", - "Name": "Correspondence Schools" - }, - { - "Code": "5977", - "Name": "Cosmetic Stores" - }, - { - "Code": "7277", - "Name": "Counseling Services" - }, - { - "Code": "7997", - "Name": "Country Clubs" - }, - { - "Code": "4215", - "Name": "Courier Services" - }, - { - "Code": "9211", - "Name": "Court Costs, Including Alimony and Child Support - Courts of Law" - }, - { - "Code": "7321", - "Name": "Credit Reporting Agencies" - }, - { - "Code": "4411", - "Name": "Cruise Lines" - }, - { - "Code": "5451", - "Name": "Dairy Products Stores" - }, - { - "Code": "7911", - "Name": "Dance Hall, Studios, Schools" - }, - { - "Code": "7273", - "Name": "Dating/Escort Services" - }, - { - "Code": "8021", - "Name": "Dentists, Orthodontists" - }, - { - "Code": "5311", - "Name": "Department Stores" - }, - { - "Code": "7393", - "Name": "Detective Agencies" - }, - { - "Code": "5964", - "Name": "Direct Marketing - Catalog Merchant" - }, - { - "Code": "5965", - "Name": "Direct Marketing - Combination Catalog and Retail Merchant" - }, - { - "Code": "5967", - "Name": "Direct Marketing - Inbound Telemarketing" - }, - { - "Code": "5960", - "Name": "Direct Marketing - Insurance Services" - }, - { - "Code": "5969", - "Name": "Direct Marketing - Other" - }, - { - "Code": "5966", - "Name": "Direct Marketing - Outbound Telemarketing" - }, - { - "Code": "5968", - "Name": "Direct Marketing - Subscription" - }, - { - "Code": "5962", - "Name": "Direct Marketing - Travel" - }, - { - "Code": "5310", - "Name": "Discount Stores" - }, - { - "Code": "8011", - "Name": "Doctors" - }, - { - "Code": "5963", - "Name": "Door-To-Door Sales" - }, - { - "Code": "5714", - "Name": "Drapery, Window Covering, and Upholstery Stores" - }, - { - "Code": "5813", - "Name": "Drinking Places" - }, - { - "Code": "5912", - "Name": "Drug Stores and Pharmacies" - }, - { - "Code": "5122", - "Name": "Drugs, Drug Proprietaries, and Druggist Sundries" - }, - { - "Code": "7216", - "Name": "Dry Cleaners" - }, - { - "Code": "5099", - "Name": "Durable Goods (Not Elsewhere Classified)" - }, - { - "Code": "5309", - "Name": "Duty Free Stores" - }, - { - "Code": "5812", - "Name": "Eating Places, Restaurants" - }, - { - "Code": "8299", - "Name": "Educational Services" - }, - { - "Code": "5997", - "Name": "Electric Razor Stores" - }, - { - "Code": "5065", - "Name": "Electrical Parts and Equipment" - }, - { - "Code": "1731", - "Name": "Electrical Services" - }, - { - "Code": "7622", - "Name": "Electronics Repair Shops" - }, - { - "Code": "5732", - "Name": "Electronics Stores" - }, - { - "Code": "8211", - "Name": "Elementary, Secondary Schools" - }, - { - "Code": "7361", - "Name": "Employment/Temp Agencies" - }, - { - "Code": "7394", - "Name": "Equipment Rental" - }, - { - "Code": "7342", - "Name": "Exterminating Services" - }, - { - "Code": "5651", - "Name": "Family Clothing Stores" - }, - { - "Code": "5814", - "Name": "Fast Food Restaurants" - }, - { - "Code": "6012", - "Name": "Financial Institutions" - }, - { - "Code": "9222", - "Name": "Fines - Government Administrative Entities" - }, - { - "Code": "5718", - "Name": "Fireplace, Fireplace Screens, and Accessories Stores" - }, - { - "Code": "5713", - "Name": "Floor Covering Stores" - }, - { - "Code": "5992", - "Name": "Florists" - }, - { - "Code": "5193", - "Name": "Florists Supplies, Nursery Stock, and Flowers" - }, - { - "Code": "5422", - "Name": "Freezer and Locker Meat Provisioners" - }, - { - "Code": "5983", - "Name": "Fuel Dealers (Non Automotive)" - }, - { - "Code": "7261", - "Name": "Funeral Services, Crematories" - }, - { - "Code": "7641", - "Name": "Furniture Repair, Refinishing" - }, - { - "Code": "5712", - "Name": "Furniture, Home Furnishings, and Equipment Stores, Except Appliances" - }, - { - "Code": "5681", - "Name": "Furriers and Fur Shops" - }, - { - "Code": "1520", - "Name": "General Services" - }, - { - "Code": "5947", - "Name": "Gift, Card, Novelty, and Souvenir Shops" - }, - { - "Code": "5231", - "Name": "Glass, Paint, and Wallpaper Stores" - }, - { - "Code": "5950", - "Name": "Glassware, Crystal Stores" - }, - { - "Code": "7992", - "Name": "Golf Courses - Public" - }, - { - "Code": "9399", - "Name": "Government Services (Not Elsewhere Classified)" - }, - { - "Code": "5411", - "Name": "Grocery Stores, Supermarkets" - }, - { - "Code": "5251", - "Name": "Hardware Stores" - }, - { - "Code": "5072", - "Name": "Hardware, Equipment, and Supplies" - }, - { - "Code": "7298", - "Name": "Health and Beauty Spas" - }, - { - "Code": "5975", - "Name": "Hearing Aids Sales and Supplies" - }, - { - "Code": "1711", - "Name": "Heating, Plumbing, A/C" - }, - { - "Code": "5945", - "Name": "Hobby, Toy, and Game Shops" - }, - { - "Code": "5200", - "Name": "Home Supply Warehouse Stores" - }, - { - "Code": "8062", - "Name": "Hospitals" - }, - { - "Code": "7011", - "Name": "Hotels, Motels, and Resorts" - }, - { - "Code": "5722", - "Name": "Household Appliance Stores" - }, - { - "Code": "5085", - "Name": "Industrial Supplies (Not Elsewhere Classified)" - }, - { - "Code": "7375", - "Name": "Information Retrieval Services" - }, - { - "Code": "6399", - "Name": "Insurance - Default" - }, - { - "Code": "6300", - "Name": "Insurance Underwriting, Premiums" - }, - { - "Code": "9950", - "Name": "Intra-Company Purchases" - }, - { - "Code": "5944", - "Name": "Jewelry Stores, Watches, Clocks, and Silverware Stores" - }, - { - "Code": "780", - "Name": "Landscaping Services" - }, - { - "Code": "7211", - "Name": "Laundries" - }, - { - "Code": "7210", - "Name": "Laundry, Cleaning Services" - }, - { - "Code": "8111", - "Name": "Legal Services, Attorneys" - }, - { - "Code": "5948", - "Name": "Luggage and Leather Goods Stores" - }, - { - "Code": "5211", - "Name": "Lumber, Building Materials Stores" - }, - { - "Code": "6010", - "Name": "Manual Cash Disburse" - }, - { - "Code": "4468", - "Name": "Marinas, Service and Supplies" - }, - { - "Code": "1740", - "Name": "Masonry, Stonework, and Plaster" - }, - { - "Code": "7297", - "Name": "Massage Parlors" - }, - { - "Code": "8099", - "Name": "Medical Services" - }, - { - "Code": "8071", - "Name": "Medical and Dental Labs" - }, - { - "Code": "5047", - "Name": "Medical, Dental, Ophthalmic, and Hospital Equipment and Supplies" - }, - { - "Code": "8699", - "Name": "Membership Organizations" - }, - { - "Code": "5611", - "Name": "Mens and Boys Clothing and Accessories Stores" - }, - { - "Code": "5691", - "Name": "Mens, Womens Clothing Stores" - }, - { - "Code": "5051", - "Name": "Metal Service Centers" - }, - { - "Code": "5699", - "Name": "Miscellaneous Apparel and Accessory Shops" - }, - { - "Code": "5599", - "Name": "Miscellaneous Auto Dealers" - }, - { - "Code": "7399", - "Name": "Miscellaneous Business Services" - }, - { - "Code": "5499", - "Name": "Miscellaneous Food Stores - Convenience Stores and Specialty Markets" - }, - { - "Code": "5399", - "Name": "Miscellaneous General Merchandise" - }, - { - "Code": "7299", - "Name": "Miscellaneous General Services" - }, - { - "Code": "5719", - "Name": "Miscellaneous Home Furnishing Specialty Stores" - }, - { - "Code": "2741", - "Name": "Miscellaneous Publishing and Printing" - }, - { - "Code": "7999", - "Name": "Miscellaneous Recreation Services" - }, - { - "Code": "7699", - "Name": "Miscellaneous Repair Shops" - }, - { - "Code": "5999", - "Name": "Miscellaneous Specialty Retail" - }, - { - "Code": "5271", - "Name": "Mobile Home Dealers" - }, - { - "Code": "7832", - "Name": "Motion Picture Theaters" - }, - { - "Code": "4214", - "Name": "Motor Freight Carriers and Trucking - Local and Long Distance, Moving and Storage Companies, and Local Delivery Services" - }, - { - "Code": "5592", - "Name": "Motor Homes Dealers" - }, - { - "Code": "5013", - "Name": "Motor Vehicle Supplies and New Parts" - }, - { - "Code": "5571", - "Name": "Motorcycle Shops and Dealers" - }, - { - "Code": "5561", - "Name": "Motorcycle Shops, Dealers" - }, - { - "Code": "5733", - "Name": "Music Stores-Musical Instruments, Pianos, and Sheet Music" - }, - { - "Code": "5994", - "Name": "News Dealers and Newsstands" - }, - { - "Code": "6051", - "Name": "Non-FI, Money Orders" - }, - { - "Code": "6540", - "Name": "Non-FI, Stored Value Card Purchase/Load" - }, - { - "Code": "5199", - "Name": "Nondurable Goods (Not Elsewhere Classified)" - }, - { - "Code": "5261", - "Name": "Nurseries, Lawn and Garden Supply Stores" - }, - { - "Code": "8050", - "Name": "Nursing/Personal Care" - }, - { - "Code": "5021", - "Name": "Office and Commercial Furniture" - }, - { - "Code": "8043", - "Name": "Opticians, Eyeglasses" - }, - { - "Code": "8042", - "Name": "Optometrists, Ophthalmologist" - }, - { - "Code": "5976", - "Name": "Orthopedic Goods - Prosthetic Devices" - }, - { - "Code": "8031", - "Name": "Osteopaths" - }, - { - "Code": "5921", - "Name": "Package Stores-Beer, Wine, and Liquor" - }, - { - "Code": "5198", - "Name": "Paints, Varnishes, and Supplies" - }, - { - "Code": "7523", - "Name": "Parking Lots, Garages" - }, - { - "Code": "4112", - "Name": "Passenger Railways" - }, - { - "Code": "5933", - "Name": "Pawn Shops" - }, - { - "Code": "5995", - "Name": "Pet Shops, Pet Food, and Supplies" - }, - { - "Code": "5172", - "Name": "Petroleum and Petroleum Products" - }, - { - "Code": "7395", - "Name": "Photo Developing" - }, - { - "Code": "7221", - "Name": "Photographic Studios" - }, - { - "Code": "5044", - "Name": "Photographic, Photocopy, Microfilm Equipment, and Supplies" - }, - { - "Code": "7829", - "Name": "Picture/Video Production" - }, - { - "Code": "5131", - "Name": "Piece Goods, Notions, and Other Dry Goods" - }, - { - "Code": "5074", - "Name": "Plumbing, Heating Equipment, and Supplies" - }, - { - "Code": "8651", - "Name": "Political Organizations" - }, - { - "Code": "9402", - "Name": "Postal Services - Government Only" - }, - { - "Code": "5094", - "Name": "Precious Stones and Metals, Watches and Jewelry" - }, - { - "Code": "8999", - "Name": "Professional Services" - }, - { - "Code": "4225", - "Name": "Public Warehousing and Storage - Farm Products, Refrigerated Goods, Household Goods, and Storage" - }, - { - "Code": "7338", - "Name": "Quick Copy, Repro, and Blueprint" - }, - { - "Code": "4011", - "Name": "Railroads" - }, - { - "Code": "6513", - "Name": "Real Estate Agents and Managers - Rentals" - }, - { - "Code": "5735", - "Name": "Record Stores" - }, - { - "Code": "7519", - "Name": "Recreational Vehicle Rentals" - }, - { - "Code": "5973", - "Name": "Religious Goods Stores" - }, - { - "Code": "8661", - "Name": "Religious Organizations" - }, - { - "Code": "1761", - "Name": "Roofing/Siding, Sheet Metal" - }, - { - "Code": "7339", - "Name": "Secretarial Support Services" - }, - { - "Code": "6211", - "Name": "Security Brokers/Dealers" - }, - { - "Code": "5541", - "Name": "Service Stations" - }, - { - "Code": "5949", - "Name": "Sewing, Needlework, Fabric, and Piece Goods Stores" - }, - { - "Code": "7251", - "Name": "Shoe Repair/Hat Cleaning" - }, - { - "Code": "5661", - "Name": "Shoe Stores" - }, - { - "Code": "7629", - "Name": "Small Appliance Repair" - }, - { - "Code": "5598", - "Name": "Snowmobile Dealers" - }, - { - "Code": "1799", - "Name": "Special Trade Services" - }, - { - "Code": "2842", - "Name": "Specialty Cleaning" - }, - { - "Code": "5941", - "Name": "Sporting Goods Stores" - }, - { - "Code": "7032", - "Name": "Sporting/Recreation Camps" - }, - { - "Code": "7941", - "Name": "Sports Clubs/Fields" - }, - { - "Code": "5655", - "Name": "Sports and Riding Apparel Stores" - }, - { - "Code": "5972", - "Name": "Stamp and Coin Stores" - }, - { - "Code": "5111", - "Name": "Stationary, Office Supplies, Printing and Writing Paper" - }, - { - "Code": "5943", - "Name": "Stationery Stores, Office, and School Supply Stores" - }, - { - "Code": "5996", - "Name": "Swimming Pools Sales" - }, - { - "Code": "4723", - "Name": "TUI Travel - Germany" - }, - { - "Code": "5697", - "Name": "Tailors, Alterations" - }, - { - "Code": "9311", - "Name": "Tax Payments - Government Agencies" - }, - { - "Code": "7276", - "Name": "Tax Preparation Services" - }, - { - "Code": "4121", - "Name": "Taxicabs/Limousines" - }, - { - "Code": "4812", - "Name": "Telecommunication Equipment and Telephone Sales" - }, - { - "Code": "4814", - "Name": "Telecommunication Services" - }, - { - "Code": "4821", - "Name": "Telegraph Services" - }, - { - "Code": "5998", - "Name": "Tent and Awning Shops" - }, - { - "Code": "8734", - "Name": "Testing Laboratories" - }, - { - "Code": "7922", - "Name": "Theatrical Ticket Agencies" - }, - { - "Code": "7012", - "Name": "Timeshares" - }, - { - "Code": "7534", - "Name": "Tire Retreading and Repair" - }, - { - "Code": "4784", - "Name": "Tolls/Bridge Fees" - }, - { - "Code": "7991", - "Name": "Tourist Attractions and Exhibits" - }, - { - "Code": "7549", - "Name": "Towing Services" - }, - { - "Code": "7033", - "Name": "Trailer Parks, Campgrounds" - }, - { - "Code": "4789", - "Name": "Transportation Services (Not Elsewhere Classified)" - }, - { - "Code": "4722", - "Name": "Travel Agencies, Tour Operators" - }, - { - "Code": "7511", - "Name": "Truck StopIteration" - }, - { - "Code": "7513", - "Name": "Truck/Utility Trailer Rentals" - }, - { - "Code": "2791", - "Name": "Typesetting, Plate Making, and Related Services" - }, - { - "Code": "5978", - "Name": "Typewriter Stores" - }, - { - "Code": "9405", - "Name": "U.S. Federal Government Agencies or Departments" - }, - { - "Code": "5137", - "Name": "Uniforms, Commercial Clothing" - }, - { - "Code": "5931", - "Name": "Used Merchandise and Secondhand Stores" - }, - { - "Code": "4900", - "Name": "Utilities" - }, - { - "Code": "5331", - "Name": "Variety Stores" - }, - { - "Code": "742", - "Name": "Veterinary Services" - }, - { - "Code": "7993", - "Name": "Video Amusement Game Supplies" - }, - { - "Code": "7994", - "Name": "Video Game Arcades" - }, - { - "Code": "7841", - "Name": "Video Tape Rental Stores" - }, - { - "Code": "8249", - "Name": "Vocational/Trade Schools" - }, - { - "Code": "7631", - "Name": "Watch/Jewelry Repair" - }, - { - "Code": "7692", - "Name": "Welding Repair" - }, - { - "Code": "5300", - "Name": "Wholesale Clubs" - }, - { - "Code": "5698", - "Name": "Wig and Toupee Stores" - }, - { - "Code": "4829", - "Name": "Wires, Money Orders" - }, - { - "Code": "5631", - "Name": "Womens Accessory and Specialty Shops" - }, - { - "Code": "5621", - "Name": "Womens Ready-To-Wear Stores" - }, - { - "Code": "5935", - "Name": "Wrecking and Salvage Yards" - } - ] - }, - "links": { - "self": null - }, - "meta": { - "totalPages": 1 - } -} \ No newline at end of file diff --git a/index.js b/index.js index 730ffa9..5dcb676 100644 --- a/index.js +++ b/index.js @@ -1,31 +1,686 @@ - import 'dotenv/config' import express from 'express' -import cards from './data/cards.json' import cors from 'cors' import dayjs from 'dayjs' -import { readFile } from 'fs/promises'; -import countries from './data/countries.json' -import currencies from './data/currencies.json' -import merchants from './data/merchants.json' -import accounts from './data/accounts.json' +import Database from 'better-sqlite3' + +const db = new Database('foobar.db') +db.pragma('journal_mode = WAL') + +const prepareDB = () => { + // Create the accounts table + db.exec('CREATE TABLE IF NOT EXISTS accounts (accountId TEXT, accountNumber TEXT, accountName TEXT, referenceName TEXT, productName TEXT)') + // Create the transactions table + db.exec('CREATE TABLE IF NOT EXISTS transactions (accountId TEXT, type TEXT, transactiontype TEXT, status TEXT, description TEXT, cardNumber Number, postedOrder Number, postingDate TEXT, valueDate TEXT, actionDate TEXT, transactionDate TEXT, amount Number, runningBalance Number)') + // Create the countries table + db.exec('CREATE TABLE IF NOT EXISTS countries (code TEXT,name TEXT)') + // Create the currencies table + db.exec('CREATE TABLE IF NOT EXISTS currencies (code TEXT,name TEXT)') + // Create the merchants table + db.exec('CREATE TABLE IF NOT EXISTS merchants (code TEXT,name TEXT)') +} + +const prepareCountries = () => { + const insertCountry = db.prepare('INSERT INTO countries (code,name) VALUES (@code, @name)') + + const insertManyCountries = db.transaction((countryArr) => { + for (const country of countryArr) insertCountry.run(country) + }) + + insertManyCountries([ + { code: 'ZA', name: 'South Africa' }, + { code: 'GB', name: 'United Kingdom of Great Britain and Northern Ireland (the)' }, + { code: 'AF', name: 'Afghanistan' }, + { code: 'AL', name: 'Albania' }, + { code: 'DZ', name: 'Algeria' }, + { code: 'AS', name: 'American Samoa' }, + { code: 'AD', name: 'Andorra' }, + { code: 'AO', name: 'Angola' }, + { code: 'AI', name: 'Anguilla' }, + { code: 'AQ', name: 'Antarctica' }, + { code: 'AG', name: 'Antigua and Barbuda' }, + { code: 'AR', name: 'Argentina' }, + { code: 'AM', name: 'Armenia' }, + { code: 'AW', name: 'Aruba' }, + { code: 'AU', name: 'Australia' }, + { code: 'AT', name: 'Austria' }, + { code: 'AZ', name: 'Azerbaijan' }, + { code: 'BS', name: 'Bahamas (the)' }, + { code: 'BH', name: 'Bahrain' }, + { code: 'BD', name: 'Bangladesh' }, + { code: 'BB', name: 'Barbados' }, + { code: 'BY', name: 'Belarus' }, + { code: 'BE', name: 'Belgium' }, + { code: 'BZ', name: 'Belize' }, + { code: 'BJ', name: 'Benin' }, + { code: 'BM', name: 'Bermuda' }, + { code: 'BT', name: 'Bhutan' }, + { code: 'BO', name: 'Bolivia (Plurinational State of)' }, + { code: 'BQ', name: 'Bonaire, Sint Eustatius and Saba' }, + { code: 'BA', name: 'Bosnia and Herzegovina' }, + { code: 'BW', name: 'Botswana' }, + { code: 'BV', name: 'Bouvet Island' }, + { code: 'BR', name: 'Brazil' }, + { code: 'IO', name: 'British Indian Ocean Territory (the)' }, + { code: 'BN', name: 'Brunei Darussalam' }, + { code: 'BG', name: 'Bulgaria' }, + { code: 'BF', name: 'Burkina Faso' }, + { code: 'BI', name: 'Burundi' }, + { code: 'CV', name: 'Cabo Verde' }, + { code: 'KH', name: 'Cambodia' }, + { code: 'CM', name: 'Cameroon' }, + { code: 'CA', name: 'Canada' }, + { code: 'KY', name: 'Cayman Islands (the)' }, + { code: 'CF', name: 'Central African Republic (the)' }, + { code: 'TD', name: 'Chad' }, + { code: 'CL', name: 'Chile' }, + { code: 'CN', name: 'China' }, + { code: 'CX', name: 'Christmas Island' }, + { code: 'CC', name: 'Cocos (Keeling) Islands (the)' }, + { code: 'CO', name: 'Colombia' }, + { code: 'KM', name: 'Comoros (the)' }, + { code: 'CD', name: 'Congo (the Democratic Republic of the)' }, + { code: 'CG', name: 'Congo (the)' }, + { code: 'CK', name: 'Cook Islands (the)' }, + { code: 'CR', name: 'Costa Rica' }, + { code: 'HR', name: 'Croatia' }, + { code: 'CU', name: 'Cuba' }, + { code: 'CW', name: 'Curaçao' }, + { code: 'CY', name: 'Cyprus' }, + { code: 'CZ', name: 'Czechia' }, + { code: 'CI', name: "Côte d'Ivoire" }, + { code: 'DK', name: 'Denmark' }, + { code: 'DJ', name: 'Djibouti' }, + { code: 'DM', name: 'Dominica' }, + { code: 'DO', name: 'Dominican Republic (the)' }, + { code: 'EC', name: 'Ecuador' }, + { code: 'EG', name: 'Egypt' }, + { code: 'SV', name: 'El Salvador' }, + { code: 'GQ', name: 'Equatorial Guinea' }, + { code: 'ER', name: 'Eritrea' }, + { code: 'EE', name: 'Estonia' }, + { code: 'SZ', name: 'Eswatini' }, + { code: 'ET', name: 'Ethiopia' }, + { code: 'FK', name: 'Falkland Islands (the) [Malvinas]' }, + { code: 'FO', name: 'Faroe Islands (the)' }, + { code: 'FJ', name: 'Fiji' }, + { code: 'FI', name: 'Finland' }, + { code: 'FR', name: 'France' }, + { code: 'GF', name: 'French Guiana' }, + { code: 'PF', name: 'French Polynesia' }, + { code: 'TF', name: 'French Southern Territories (the)' }, + { code: 'GA', name: 'Gabon' }, + { code: 'GM', name: 'Gambia (the)' }, + { code: 'GE', name: 'Georgia' }, + { code: 'DE', name: 'Germany' }, + { code: 'GH', name: 'Ghana' }, + { code: 'GI', name: 'Gibraltar' }, + { code: 'GR', name: 'Greece' }, + { code: 'GL', name: 'Greenland' }, + { code: 'GD', name: 'Grenada' }, + { code: 'GP', name: 'Guadeloupe' }, + { code: 'GU', name: 'Guam' }, + { code: 'GT', name: 'Guatemala' }, + { code: 'GG', name: 'Guernsey' }, + { code: 'GN', name: 'Guinea' }, + { code: 'GW', name: 'Guinea-Bissau' }, + { code: 'GY', name: 'Guyana' }, + { code: 'HT', name: 'Haiti' }, + { code: 'HM', name: 'Heard Island and McDonald Islands' }, + { code: 'VA', name: 'Holy See (the)' }, + { code: 'HN', name: 'Honduras' }, + { code: 'HK', name: 'Hong Kong' }, + { code: 'HU', name: 'Hungary' }, + { code: 'IS', name: 'Iceland' }, + { code: 'IN', name: 'India' }, + { code: 'ID', name: 'Indonesia' }, + { code: 'IR', name: 'Iran (Islamic Republic of)' }, + { code: 'IQ', name: 'Iraq' }, + { code: 'IE', name: 'Ireland' }, + { code: 'IM', name: 'Isle of Man' }, + { code: 'IL', name: 'Israel' }, + { code: 'IT', name: 'Italy' }, + { code: 'JM', name: 'Jamaica' }, + { code: 'JP', name: 'Japan' }, + { code: 'JE', name: 'Jersey' }, + { code: 'JO', name: 'Jordan' }, + { code: 'KZ', name: 'Kazakhstan' }, + { code: 'KE', name: 'Kenya' }, + { code: 'KI', name: 'Kiribati' }, + { code: 'KP', name: "Korea (the Democratic People's Republic of)" }, + { code: 'KR', name: 'Korea (the Republic of)' }, + { code: 'KW', name: 'Kuwait' }, + { code: 'KG', name: 'Kyrgyzstan' }, + { code: 'LA', name: "Lao People's Democratic Republic (the)" }, + { code: 'LV', name: 'Latvia' }, + { code: 'LB', name: 'Lebanon' }, + { code: 'LS', name: 'Lesotho' }, + { code: 'LR', name: 'Liberia' }, + { code: 'LY', name: 'Libya' }, + { code: 'LI', name: 'Liechtenstein' }, + { code: 'LT', name: 'Lithuania' }, + { code: 'LU', name: 'Luxembourg' }, + { code: 'MO', name: 'Macao' }, + { code: 'MK', name: 'Macedonia (the former Yugoslav Republic of)' }, + { code: 'MG', name: 'Madagascar' }, + { code: 'MW', name: 'Malawi' }, + { code: 'MY', name: 'Malaysia' }, + { code: 'MV', name: 'Maldives' }, + { code: 'ML', name: 'Mali' }, + { code: 'MT', name: 'Malta' }, + { code: 'MH', name: 'Marshall Islands (the)' }, + { code: 'MQ', name: 'Martinique' }, + { code: 'MR', name: 'Mauritania' }, + { code: 'MU', name: 'Mauritius' }, + { code: 'YT', name: 'Mayotte' }, + { code: 'MX', name: 'Mexico' }, + { code: 'FM', name: 'Micronesia (Federated States of)' }, + { code: 'MD', name: 'Moldova (the Republic of)' }, + { code: 'MC', name: 'Monaco' }, + { code: 'MN', name: 'Mongolia' }, + { code: 'ME', name: 'Montenegro' }, + { code: 'MS', name: 'Montserrat' }, + { code: 'MA', name: 'Morocco' }, + { code: 'MZ', name: 'Mozambique' }, + { code: 'MM', name: 'Myanmar' }, + { code: 'NA', name: 'Namibia' }, + { code: 'NR', name: 'Nauru' }, + { code: 'NP', name: 'Nepal' }, + { code: 'NL', name: 'Netherlands (the)' }, + { code: 'NC', name: 'New Caledonia' }, + { code: 'NZ', name: 'New Zealand' }, + { code: 'NI', name: 'Nicaragua' }, + { code: 'NE', name: 'Niger (the)' }, + { code: 'NG', name: 'Nigeria' }, + { code: 'NU', name: 'Niue' }, + { code: 'NF', name: 'Norfolk Island' }, + { code: 'MP', name: 'Northern Mariana Islands (the)' }, + { code: 'NO', name: 'Norway' }, + { code: 'OM', name: 'Oman' }, + { code: 'PK', name: 'Pakistan' }, + { code: 'PW', name: 'Palau' }, + { code: 'PS', name: 'Palestine, State of' }, + { code: 'PA', name: 'Panama' }, + { code: 'PG', name: 'Papua New Guinea' }, + { code: 'PY', name: 'Paraguay' }, + { code: 'PE', name: 'Peru' }, + { code: 'PH', name: 'Philippines (the)' }, + { code: 'PN', name: 'Pitcairn' }, + { code: 'PL', name: 'Poland' }, + { code: 'PT', name: 'Portugal' }, + { code: 'PR', name: 'Puerto Rico' }, + { code: 'QA', name: 'Qatar' }, + { code: 'RO', name: 'Romania' }, + { code: 'RU', name: 'Russian Federation (the)' }, + { code: 'RW', name: 'Rwanda' }, + { code: 'RE', name: 'Réunion' }, + { code: 'BL', name: 'Saint Barthélemy' }, + { code: 'SH', name: 'Saint Helena, Ascension and Tristan da Cunha' }, + { code: 'KN', name: 'Saint Kitts and Nevis' }, + { code: 'LC', name: 'Saint Lucia' }, + { code: 'MF', name: 'Saint Martin (French part)' }, + { code: 'PM', name: 'Saint Pierre and Miquelon' }, + { code: 'VC', name: 'Saint Vincent and the Grenadines' }, + { code: 'WS', name: 'Samoa' }, + { code: 'SM', name: 'San Marino' }, + { code: 'ST', name: 'Sao Tome and Principe' }, + { code: 'SA', name: 'Saudi Arabia' }, + { code: 'SN', name: 'Senegal' }, + { code: 'RS', name: 'Serbia' }, + { code: 'SC', name: 'Seychelles' }, + { code: 'SL', name: 'Sierra Leone' }, + { code: 'SG', name: 'Singapore' }, + { code: 'SX', name: 'Sint Maarten (Dutch part)' }, + { code: 'SK', name: 'Slovakia' }, + { code: 'SI', name: 'Slovenia' }, + { code: 'SB', name: 'Solomon Islands' }, + { code: 'SO', name: 'Somalia' }, + { code: 'GS', name: 'South Georgia and the South Sandwich Islands' }, + { code: 'SS', name: 'South Sudan' }, + { code: 'ES', name: 'Spain' }, + { code: 'LK', name: 'Sri Lanka' }, + { code: 'SD', name: 'Sudan (the)' }, + { code: 'SR', name: 'Suriname' }, + { code: 'SJ', name: 'Svalbard and Jan Mayen' }, + { code: 'SE', name: 'Sweden' }, + { code: 'CH', name: 'Switzerland' }, + { code: 'SY', name: 'Syrian Arab Republic' }, + { code: 'TW', name: 'Taiwan (Province of China)' }, + { code: 'TJ', name: 'Tajikistan' }, + { code: 'TZ', name: 'Tanzania, United Republic of' }, + { code: 'TH', name: 'Thailand' }, + { code: 'TL', name: 'Timor-Leste' }, + { code: 'TG', name: 'Togo' }, + { code: 'TK', name: 'Tokelau' }, + { code: 'TO', name: 'Tonga' }, + { code: 'TT', name: 'Trinidad and Tobago' }, + { code: 'TN', name: 'Tunisia' }, + { code: 'TR', name: 'Turkey' }, + { code: 'TM', name: 'Turkmenistan' }, + { code: 'TC', name: 'Turks and Caicos Islands (the)' }, + { code: 'TV', name: 'Tuvalu' }, + { code: 'UG', name: 'Uganda' }, + { code: 'UA', name: 'Ukraine' }, + { code: 'AE', name: 'United Arab Emirates (the)' }, + { code: 'UM', name: 'United States Minor Outlying Islands (the)' }, + { code: 'US', name: 'United States of America (the)' }, + { code: 'UY', name: 'Uruguay' }, + { code: 'UZ', name: 'Uzbekistan' }, + { code: 'VU', name: 'Vanuatu' }, + { code: 'VE', name: 'Venezuela (Bolivarian Republic of)' }, + { code: 'VN', name: 'Viet Nam' }, + { code: 'VG', name: 'Virgin Islands (British)' }, + { code: 'VI', name: 'Virgin Islands (U.S.)' }, + { code: 'WF', name: 'Wallis and Futuna' }, + { code: 'EH', name: 'Western Sahara' }, + { code: 'YE', name: 'Yemen' }, + { code: 'ZM', name: 'Zambia' }, + { code: 'ZW', name: 'Zimbabwe' }, + { code: 'AX', name: 'Åland Islands' }, + { code: 'undefined', name: 'undefined' } + ]) +} + +const prepareCurrencies = () => { + const insertCurrency = db.prepare('INSERT INTO currencies (code,name) VALUES (@code, @name)') + + const insertManyCurrencies = db.transaction((currencyArr) => { + for (const currency of currencyArr) insertCurrency.run(currency) + }) + + insertManyCurrencies([ + { code: 'ZAR', name: 'South African Rand' }, + { code: 'GBP', name: 'British Pound' }, + { code: 'USD', name: 'United States Dollar' }, + { code: 'EUR', name: 'Euro' }, + { code: 'AUD', name: 'Australian Dollar' }, + { code: 'CHF', name: 'Swiss Franc' }, + { code: 'CAD', name: 'Canadian Dollar' }, + { code: 'DKK', name: 'Danish Krone' }, + { code: 'HKD', name: 'Hong Kong Dollar' }, + { code: 'JPY', name: 'Japanese Yen' }, + { code: 'MUR', name: 'Mauritius Rupee' }, + { code: 'NZD', name: 'New Zealand Dollar' }, + { code: 'NOK', name: 'Norwegian Krone' }, + { code: 'SGD', name: 'Singapore Dollar' }, + { code: 'SEK', name: 'Swedish Krona' }, + { code: 'AED', name: 'Emirati Dirham' }, + { code: 'BWP', name: 'Botswana Pula' }, + { code: 'INR', name: 'Indian Rupee' }, + { code: 'KES', name: 'Kenyan Shilling' }, + { code: 'NGN', name: 'Nigerian Naira' }, + { code: 'RUB', name: 'Russian Ruble' }, + { code: 'TRY', name: 'Turkish Lira' } + ]) +} + +const prepareMerchants = () => { + const insertMerchant = db.prepare('INSERT INTO merchants (code,name) VALUES (@code, @name)') -const json = JSON.parse(await readFile(new URL('../../package.json', import.meta.url))); + const insertManyMerchants = db.transaction((merchantArr) => { + for (const merchant of merchantArr) insertMerchant.run(merchant) + }) + + insertManyMerchants([ + { code: '7623', name: 'A/C, Refrigeration Repair' }, + { code: '8931', name: 'Accounting/Bookkeeping Services' }, + { code: '7311', name: 'Advertising Services' }, + { code: '763', name: 'Agricultural Cooperative' }, + { code: '4511', name: 'Airlines, Air Carriers' }, + { code: '4582', name: 'Airports, Flying Fields' }, + { code: '4119', name: 'Ambulance Services' }, + { code: '7996', name: 'Amusement Parks/Carnivals' }, + { code: '5937', name: 'Antique Reproductions' }, + { code: '5932', name: 'Antique Shops' }, + { code: '7998', name: 'Aquariums' }, + { code: '8911', name: 'Architectural/Surveying Services' }, + { code: '5971', name: 'Art Dealers and Galleries' }, + { code: '5970', name: 'Artists Supply and Craft Shops' }, + { code: '7531', name: 'Auto Body Repair Shops' }, + { code: '7535', name: 'Auto Paint Shops' }, + { code: '7538', name: 'Auto Service Shops' }, + { code: '5531', name: 'Auto and Home Supply Stores' }, + { code: '6011', name: 'Automated Cash Disburse' }, + { code: '5542', name: 'Automated Fuel Dispensers' }, + { code: '8675', name: 'Automobile Associations' }, + { code: '5533', name: 'Automotive Parts and Accessories Stores' }, + { code: '5532', name: 'Automotive Tire Stores' }, + { code: '9223', name: 'Bail and Bond Payments (payment to the surety for the bond, not the actual bond paid to the government agency)' }, + { code: '5462', name: 'Bakeries' }, + { code: '7929', name: 'Bands, Orchestras' }, + { code: '7230', name: 'Barber and Beauty Shops' }, + { code: '7995', name: 'Betting/Casino Gambling' }, + { code: '5940', name: 'Bicycle Shops' }, + { code: '7932', name: 'Billiard/Pool Establishments' }, + { code: '5551', name: 'Boat Dealers' }, + { code: '4457', name: 'Boat Rentals and Leases' }, + { code: '5942', name: 'Book Stores' }, + { code: '5192', name: 'Books, Periodicals, and Newspapers' }, + { code: '7933', name: 'Bowling Alleys' }, + { code: '4131', name: 'Bus Lines' }, + { code: '8244', name: 'Business/Secretarial Schools' }, + { code: '7278', name: 'Buying/Shopping Services' }, + { code: '4899', name: 'Cable, Satellite, and Other Pay Television and Radio' }, + { code: '5946', name: 'Camera and Photographic Supply Stores' }, + { code: '5441', name: 'Candy, Nut, and Confectionery Stores' }, + { code: '7512', name: 'Car Rental Agencies' }, + { code: '7542', name: 'Car Washes' }, + { code: '5511', name: 'Car and Truck Dealers (New & Used) Sales, Service, Repairs Parts and Leasing' }, + { code: '5521', name: 'Car and Truck Dealers (Used Only) Sales, Service, Repairs Parts and Leasing' }, + { code: '1750', name: 'Carpentry Services' }, + { code: '7217', name: 'Carpet/Upholstery Cleaning' }, + { code: '5811', name: 'Caterers' }, + { code: '8398', name: 'Charitable and Social Service Organizations - Fundraising' }, + { code: '5169', name: 'Chemicals and Allied Products (Not Elsewhere Classified)' }, + { code: '5641', name: 'Chidrens and Infants Wear Stores' }, + { code: '8351', name: 'Child Care Services' }, + { code: '8049', name: 'Chiropodists, Podiatrists' }, + { code: '8041', name: 'Chiropractors' }, + { code: '5993', name: 'Cigar Stores and Stands' }, + { code: '8641', name: 'Civic, Social, Fraternal Associations' }, + { code: '7349', name: 'Cleaning and Maintenance' }, + { code: '7296', name: 'Clothing Rental' }, + { code: '8220', name: 'Colleges, Universities' }, + { code: '5046', name: 'Commercial Equipment (Not Elsewhere Classified)' }, + { code: '5139', name: 'Commercial Footwear' }, + { code: '7333', name: 'Commercial Photography, Art and Graphics' }, + { code: '4111', name: 'Commuter Transport, Ferries' }, + { code: '4816', name: 'Computer Network Services' }, + { code: '7372', name: 'Computer Programming' }, + { code: '7379', name: 'Computer Repair' }, + { code: '5734', name: 'Computer Software Stores' }, + { code: '5045', name: 'Computers, Peripherals, and Software' }, + { code: '1771', name: 'Concrete Work Services' }, + { code: '5039', name: 'Construction Materials (Not Elsewhere Classified)' }, + { code: '7392', name: 'Consulting, Public Relations' }, + { code: '8241', name: 'Correspondence Schools' }, + { code: '5977', name: 'Cosmetic Stores' }, + { code: '7277', name: 'Counseling Services' }, + { code: '7997', name: 'Country Clubs' }, + { code: '4215', name: 'Courier Services' }, + { code: '9211', name: 'Court Costs, Including Alimony and Child Support - Courts of Law' }, + { code: '7321', name: 'Credit Reporting Agencies' }, + { code: '4411', name: 'Cruise Lines' }, + { code: '5451', name: 'Dairy Products Stores' }, + { code: '7911', name: 'Dance Hall, Studios, Schools' }, + { code: '7273', name: 'Dating/Escort Services' }, + { code: '8021', name: 'Dentists, Orthodontists' }, + { code: '5311', name: 'Department Stores' }, + { code: '7393', name: 'Detective Agencies' }, + { code: '5964', name: 'Direct Marketing - Catalog Merchant' }, + { code: '5965', name: 'Direct Marketing - Combination Catalog and Retail Merchant' }, + { code: '5967', name: 'Direct Marketing - Inbound Telemarketing' }, + { code: '5960', name: 'Direct Marketing - Insurance Services' }, + { code: '5969', name: 'Direct Marketing - Other' }, + { code: '5966', name: 'Direct Marketing - Outbound Telemarketing' }, + { code: '5968', name: 'Direct Marketing - Subscription' }, + { code: '5962', name: 'Direct Marketing - Travel' }, + { code: '5310', name: 'Discount Stores' }, + { code: '8011', name: 'Doctors' }, + { code: '5963', name: 'Door-To-Door Sales' }, + { code: '5714', name: 'Drapery, Window Covering, and Upholstery Stores' }, + { code: '5813', name: 'Drinking Places' }, + { code: '5912', name: 'Drug Stores and Pharmacies' }, + { code: '5122', name: 'Drugs, Drug Proprietaries, and Druggist Sundries' }, + { code: '7216', name: 'Dry Cleaners' }, + { code: '5099', name: 'Durable Goods (Not Elsewhere Classified)' }, + { code: '5309', name: 'Duty Free Stores' }, + { code: '5812', name: 'Eating Places, Restaurants' }, + { code: '8299', name: 'Educational Services' }, + { code: '5997', name: 'Electric Razor Stores' }, + { code: '5065', name: 'Electrical Parts and Equipment' }, + { code: '1731', name: 'Electrical Services' }, + { code: '7622', name: 'Electronics Repair Shops' }, + { code: '5732', name: 'Electronics Stores' }, + { code: '8211', name: 'Elementary, Secondary Schools' }, + { code: '7361', name: 'Employment/Temp Agencies' }, + { code: '7394', name: 'Equipment Rental' }, + { code: '7342', name: 'Exterminating Services' }, + { code: '5651', name: 'Family Clothing Stores' }, + { code: '5814', name: 'Fast Food Restaurants' }, + { code: '6012', name: 'Financial Institutions' }, + { code: '9222', name: 'Fines - Government Administrative Entities' }, + { code: '5718', name: 'Fireplace, Fireplace Screens, and Accessories Stores' }, + { code: '5713', name: 'Floor Covering Stores' }, + { code: '5992', name: 'Florists' }, + { code: '5193', name: 'Florists Supplies, Nursery Stock, and Flowers' }, + { code: '5422', name: 'Freezer and Locker Meat Provisioners' }, + { code: '5983', name: 'Fuel Dealers (Non Automotive)' }, + { code: '7261', name: 'Funeral Services, Crematories' }, + { code: '7641', name: 'Furniture Repair, Refinishing' }, + { code: '5712', name: 'Furniture, Home Furnishings, and Equipment Stores, Except Appliances' }, + { code: '5681', name: 'Furriers and Fur Shops' }, + { code: '1520', name: 'General Services' }, + { code: '5947', name: 'Gift, Card, Novelty, and Souvenir Shops' }, + { code: '5231', name: 'Glass, Paint, and Wallpaper Stores' }, + { code: '5950', name: 'Glassware, Crystal Stores' }, + { code: '7992', name: 'Golf Courses - Public' }, + { code: '9399', name: 'Government Services (Not Elsewhere Classified)' }, + { code: '5411', name: 'Grocery Stores, Supermarkets' }, + { code: '5251', name: 'Hardware Stores' }, + { code: '5072', name: 'Hardware, Equipment, and Supplies' }, + { code: '7298', name: 'Health and Beauty Spas' }, + { code: '5975', name: 'Hearing Aids Sales and Supplies' }, + { code: '1711', name: 'Heating, Plumbing, A/C' }, + { code: '5945', name: 'Hobby, Toy, and Game Shops' }, + { code: '5200', name: 'Home Supply Warehouse Stores' }, + { code: '8062', name: 'Hospitals' }, + { code: '7011', name: 'Hotels, Motels, and Resorts' }, + { code: '5722', name: 'Household Appliance Stores' }, + { code: '5085', name: 'Industrial Supplies (Not Elsewhere Classified)' }, + { code: '7375', name: 'Information Retrieval Services' }, + { code: '6399', name: 'Insurance - Default' }, + { code: '6300', name: 'Insurance Underwriting, Premiums' }, + { code: '9950', name: 'Intra-Company Purchases' }, + { code: '5944', name: 'Jewelry Stores, Watches, Clocks, and Silverware Stores' }, + { code: '780', name: 'Landscaping Services' }, + { code: '7211', name: 'Laundries' }, + { code: '7210', name: 'Laundry, Cleaning Services' }, + { code: '8111', name: 'Legal Services, Attorneys' }, + { code: '5948', name: 'Luggage and Leather Goods Stores' }, + { code: '5211', name: 'Lumber, Building Materials Stores' }, + { code: '6010', name: 'Manual Cash Disburse' }, + { code: '4468', name: 'Marinas, Service and Supplies' }, + { code: '1740', name: 'Masonry, Stonework, and Plaster' }, + { code: '7297', name: 'Massage Parlors' }, + { code: '8099', name: 'Medical Services' }, + { code: '8071', name: 'Medical and Dental Labs' }, + { code: '5047', name: 'Medical, Dental, Ophthalmic, and Hospital Equipment and Supplies' }, + { code: '8699', name: 'Membership Organizations' }, + { code: '5611', name: 'Mens and Boys Clothing and Accessories Stores' }, + { code: '5691', name: 'Mens, Womens Clothing Stores' }, + { code: '5051', name: 'Metal Service Centers' }, + { code: '5699', name: 'Miscellaneous Apparel and Accessory Shops' }, + { code: '5599', name: 'Miscellaneous Auto Dealers' }, + { code: '7399', name: 'Miscellaneous Business Services' }, + { code: '5499', name: 'Miscellaneous Food Stores - Convenience Stores and Specialty Markets' }, + { code: '5399', name: 'Miscellaneous General Merchandise' }, + { code: '7299', name: 'Miscellaneous General Services' }, + { code: '5719', name: 'Miscellaneous Home Furnishing Specialty Stores' }, + { code: '2741', name: 'Miscellaneous Publishing and Printing' }, + { code: '7999', name: 'Miscellaneous Recreation Services' }, + { code: '7699', name: 'Miscellaneous Repair Shops' }, + { code: '5999', name: 'Miscellaneous Specialty Retail' }, + { code: '5271', name: 'Mobile Home Dealers' }, + { code: '7832', name: 'Motion Picture Theaters' }, + { code: '4214', name: 'Motor Freight Carriers and Trucking - Local and Long Distance, Moving and Storage Companies, and Local Delivery Services' }, + { code: '5592', name: 'Motor Homes Dealers' }, + { code: '5013', name: 'Motor Vehicle Supplies and New Parts' }, + { code: '5571', name: 'Motorcycle Shops and Dealers' }, + { code: '5561', name: 'Motorcycle Shops, Dealers' }, + { code: '5733', name: 'Music Stores-Musical Instruments, Pianos, and Sheet Music' }, + { code: '5994', name: 'News Dealers and Newsstands' }, + { code: '6051', name: 'Non-FI, Money Orders' }, + { code: '6540', name: 'Non-FI, Stored Value Card Purchase/Load' }, + { code: '5199', name: 'Nondurable Goods (Not Elsewhere Classified)' }, + { code: '5261', name: 'Nurseries, Lawn and Garden Supply Stores' }, + { code: '8050', name: 'Nursing/Personal Care' }, + { code: '5021', name: 'Office and Commercial Furniture' }, + { code: '8043', name: 'Opticians, Eyeglasses' }, + { code: '8042', name: 'Optometrists, Ophthalmologist' }, + { code: '5976', name: 'Orthopedic Goods - Prosthetic Devices' }, + { code: '8031', name: 'Osteopaths' }, + { code: '5921', name: 'Package Stores-Beer, Wine, and Liquor' }, + { code: '5198', name: 'Paints, Varnishes, and Supplies' }, + { code: '7523', name: 'Parking Lots, Garages' }, + { code: '4112', name: 'Passenger Railways' }, + { code: '5933', name: 'Pawn Shops' }, + { code: '5995', name: 'Pet Shops, Pet Food, and Supplies' }, + { code: '5172', name: 'Petroleum and Petroleum Products' }, + { code: '7395', name: 'Photo Developing' }, + { code: '7221', name: 'Photographic Studios' }, + { code: '5044', name: 'Photographic, Photocopy, Microfilm Equipment, and Supplies' }, + { code: '7829', name: 'Picture/Video Production' }, + { code: '5131', name: 'Piece Goods, Notions, and Other Dry Goods' }, + { code: '5074', name: 'Plumbing, Heating Equipment, and Supplies' }, + { code: '8651', name: 'Political Organizations' }, + { code: '9402', name: 'Postal Services - Government Only' }, + { code: '5094', name: 'Precious Stones and Metals, Watches and Jewelry' }, + { code: '8999', name: 'Professional Services' }, + { code: '4225', name: 'Public Warehousing and Storage - Farm Products, Refrigerated Goods, Household Goods, and Storage' }, + { code: '7338', name: 'Quick Copy, Repro, and Blueprint' }, + { code: '4011', name: 'Railroads' }, + { code: '6513', name: 'Real Estate Agents and Managers - Rentals' }, + { code: '5735', name: 'Record Stores' }, + { code: '7519', name: 'Recreational Vehicle Rentals' }, + { code: '5973', name: 'Religious Goods Stores' }, + { code: '8661', name: 'Religious Organizations' }, + { code: '1761', name: 'Roofing/Siding, Sheet Metal' }, + { code: '7339', name: 'Secretarial Support Services' }, + { code: '6211', name: 'Security Brokers/Dealers' }, + { code: '5541', name: 'Service Stations' }, + { code: '5949', name: 'Sewing, Needlework, Fabric, and Piece Goods Stores' }, + { code: '7251', name: 'Shoe Repair/Hat Cleaning' }, + { code: '5661', name: 'Shoe Stores' }, + { code: '7629', name: 'Small Appliance Repair' }, + { code: '5598', name: 'Snowmobile Dealers' }, + { code: '1799', name: 'Special Trade Services' }, + { code: '2842', name: 'Specialty Cleaning' }, + { code: '5941', name: 'Sporting Goods Stores' }, + { code: '7032', name: 'Sporting/Recreation Camps' }, + { code: '7941', name: 'Sports Clubs/Fields' }, + { code: '5655', name: 'Sports and Riding Apparel Stores' }, + { code: '5972', name: 'Stamp and Coin Stores' }, + { code: '5111', name: 'Stationary, Office Supplies, Printing and Writing Paper' }, + { code: '5943', name: 'Stationery Stores, Office, and School Supply Stores' }, + { code: '5996', name: 'Swimming Pools Sales' }, + { code: '4723', name: 'TUI Travel - Germany' }, + { code: '5697', name: 'Tailors, Alterations' }, + { code: '9311', name: 'Tax Payments - Government Agencies' }, + { code: '7276', name: 'Tax Preparation Services' }, + { code: '4121', name: 'Taxicabs/Limousines' }, + { code: '4812', name: 'Telecommunication Equipment and Telephone Sales' }, + { code: '4814', name: 'Telecommunication Services' }, + { code: '4821', name: 'Telegraph Services' }, + { code: '5998', name: 'Tent and Awning Shops' }, + { code: '8734', name: 'Testing Laboratories' }, + { code: '7922', name: 'Theatrical Ticket Agencies' }, + { code: '7012', name: 'Timeshares' }, + { code: '7534', name: 'Tire Retreading and Repair' }, + { code: '4784', name: 'Tolls/Bridge Fees' }, + { code: '7991', name: 'Tourist Attractions and Exhibits' }, + { code: '7549', name: 'Towing Services' }, + { code: '7033', name: 'Trailer Parks, Campgrounds' }, + { code: '4789', name: 'Transportation Services (Not Elsewhere Classified)' }, + { code: '4722', name: 'Travel Agencies, Tour Operators' }, + { code: '7511', name: 'Truck StopIteration' }, + { code: '7513', name: 'Truck/Utility Trailer Rentals' }, + { code: '2791', name: 'Typesetting, Plate Making, and Related Services' }, + { code: '5978', name: 'Typewriter Stores' }, + { code: '9405', name: 'U.S. Federal Government Agencies or Departments' }, + { code: '5137', name: 'Uniforms, Commercial Clothing' }, + { code: '5931', name: 'Used Merchandise and Secondhand Stores' }, + { code: '4900', name: 'Utilities' }, + { code: '5331', name: 'Variety Stores' }, + { code: '742', name: 'Veterinary Services' }, + { code: '7993', name: 'Video Amusement Game Supplies' }, + { code: '7994', name: 'Video Game Arcades' }, + { code: '7841', name: 'Video Tape Rental Stores' }, + { code: '8249', name: 'Vocational/Trade Schools' }, + { code: '7631', name: 'Watch/Jewelry Repair' }, + { code: '7692', name: 'Welding Repair' }, + { code: '5300', name: 'Wholesale Clubs' }, + { code: '5698', name: 'Wig and Toupee Stores' }, + { code: '4829', name: 'Wires, Money Orders' }, + { code: '5631', name: 'Womens Accessory and Specialty Shops' }, + { code: '5621', name: 'Womens Ready-To-Wear Stores' }, + { code: '5935', name: 'Wrecking and Salvage Yards' } + ]) +} + +const prepareAccounts = () => { + const insertAccount = db.prepare('INSERT INTO accounts (accountId, accountNumber, accountName, referenceName, productName) VALUES (@accountId, @accountNumber, @accountName, @referenceName, @productName)') + + const insertManyAccounts = db.transaction((accounts2) => { + for (const account of accounts2) insertAccount.run(account) + }) + + insertManyAccounts([ + { accountId: '4675778129910189600000003', accountNumber: '10012420003', accountName: 'My Account', referenceName: 'My Account', productName: 'My Account' }, + { accountId: '4675778129910189600000004', accountNumber: '10012420004', accountName: 'My Account', referenceName: 'My Account', productName: 'My Account' }, + { accountId: '4675778129910189600000005', accountNumber: '10012420005', accountName: 'My Account', referenceName: 'My Account', productName: 'My Account' } + ]) +} + +const prepareTransactions = () => { + const insertTransaction = db.prepare('INSERT INTO transactions (accountId, type, transactionType, status, description, cardNumber, postedOrder, postingDate, valueDate, actionDate, transactionDate, amount, runningBalance) VALUES (@accountId, @type, @transactionType, @status, @description, @cardNumber, @postedOrder, @postingDate, @valueDate, @actionDate, @transactionDate, @amount, @runningBalance)') + + const insertManyTransactions = db.transaction((transactions2) => { + for (const transaction of transactions2) insertTransaction.run(transaction) + }) + + const accountId = '4675778129910189600000003' + insertManyTransactions([ + { accountId, type: 'DEBIT', transactionType: 'CardPurchases', status: 'POSTED', description: 'HTTP://WWW.UBEREATS.CO PARKTOWN NOR ZA', cardNumber: '402167xxxxxx9999', postedOrder: 0, postingDate: '2023-01-22', valueDate: '2022-05-15', actionDate: '2022-04-24', transactionDate: '2022-04-21', amount: '40.99', runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'CardPurchases', status: 'POSTED', description: 'HTTP://WWW.UBEREATS.CO PARKTOWN NOR ZA', cardNumber: '402167xxxxxx9999', postedOrder: 0, postingDate: '2023-01-22', valueDate: '2022-05-15', actionDate: '2022-04-24', transactionDate: '2022-04-21', amount: 406.9, runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'FeesAndInterest', status: 'POSTED', description: 'MONTHLY SERVICE CHARGE', cardNumber: '', postedOrder: 0, postingDate: '2023-01-16', valueDate: '2023-01-15', actionDate: '2022-04-24', transactionDate: '2022-04-15', amount: 555, runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'FeesAndInterest', status: 'POSTED', description: 'DEBIT INTEREST', cardNumber: '', postedOrder: 0, postingDate: '2023-01-16', valueDate: '2023-01-15', actionDate: '2022-04-24', transactionDate: '2022-04-15', amount: 0.61, runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'FasterPay', status: 'POSTED', description: 'FASTER PAYMENT FEE', cardNumber: '', postedOrder: 0, postingDate: '2023-01-07', valueDate: '2023-01-15', actionDate: '2022-04-24', transactionDate: '2022-04-07', amount: 40, runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'FasterPay', status: 'POSTED', description: 'BIZ', cardNumber: '', postedOrder: 0, postingDate: '2023-01-07', valueDate: '2022-04-07', actionDate: '2022-04-24', transactionDate: '2022-04-07', amount: 5000, runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'OnlineBankingPayments', status: 'POSTED', description: 'Apple Sauce', cardNumber: '', postedOrder: 0, postingDate: '2023-01-04', valueDate: '2022-04-04', actionDate: '2022-04-24', transactionDate: '2022-04-04', amount: 10000, runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'DebitOrders', status: 'POSTED', description: 'INVESTECPB 40756003 09375003', cardNumber: '', postedOrder: 0, postingDate: '2023-01-01', valueDate: '2022-04-01', actionDate: '2022-04-24', transactionDate: '2022-04-01', amount: '7338.37', runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'DebitOrders', status: 'POSTED', description: 'VIRGIN ACT400396003 178003', cardNumber: '', postedOrder: 0, postingDate: '2023-01-01', valueDate: '2022-04-01', actionDate: '2022-04-24', transactionDate: '2022-04-01', amount: '232.5', runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'FasterPay', status: 'POSTED', description: 'FASTER PAYMENT FEE', cardNumber: '', postedOrder: 0, postingDate: '2022-12-30', valueDate: '2022-04-15', actionDate: '2022-04-24', transactionDate: '2022-03-30', amount: 40, runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'FasterPay', status: 'POSTED', description: 'BIZ', cardNumber: '', postedOrder: 0, postingDate: '2022-12-30', valueDate: '2022-12-30', actionDate: '2022-04-24', transactionDate: '2022-03-30', amount: '25000', runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'OnlineBankingPayments', status: 'POSTED', description: 'LEVIES', cardNumber: '', postedOrder: 0, postingDate: '2022-12-30', valueDate: '2022-03-30', actionDate: '2022-04-24', transactionDate: '2022-03-30', amount: '4593.63', runningBalance: 0 }, + { accountId, type: 'CREDIT', transactionType: 'Deposits', status: 'POSTED', description: 'SALARY', cardNumber: '', postedOrder: 0, postingDate: '2022-12-25', valueDate: '2022-03-25', actionDate: '2022-04-24', transactionDate: '2022-03-25', amount: '17551.96', runningBalance: 0 } + ]) +} + +const insertTransaction = (accountId, type, transactionType, status, description, cardNumber, postingDate, valueDate, actionDate, transactionDate, amount) => { + const insertTransaction = db.prepare('INSERT INTO transactions (accountId, type, transactionType, status, description, cardNumber, postedOrder, postingDate, valueDate, actionDate, transactionDate, amount, runningBalance) VALUES (@accountId, @type, @transactionType, @status, @description, @cardNumber, @postedOrder, @postingDate, @valueDate, @actionDate, @transactionDate, @amount, @runningBalance)') + db.transaction(() => { + insertTransaction.run({ accountId, type, transactionType, status, description, cardNumber, postedOrder: 0, postingDate, valueDate, actionDate, transactionDate, amount, runningBalance: 0 }) + }) +} + +const isValidAccount = (accountId) => { + const accountsArr = db.prepare('SELECT * FROM accounts WHERE accountId = ?').get(accountId) + if (accountsArr === undefined) { + return false // no account was found + } + return true +} + +prepareDB() +prepareAccounts() +prepareTransactions() +prepareCountries() +prepareCurrencies() +prepareMerchants() const app = express() const port = process.env.PORT || 3000 -const datafile = process.env.DATAFILE || 'data/accounts.json' +// const datafile = process.env.DATAFILE || 'data/accounts.json' app.use(cors()) // Configuring body parser middleware -app.use(bodyParser.urlencoded({ extended: false })) -app.use(bodyParser.json()) +app.use(express.urlencoded({ extended: false })) +app.use(express.json()) const accessTokens = {} -const accounts = JSON.parse(fs.readFileSync(datafile, 'utf8')) - app.post('/identity/v2/oauth2/token', (req, res) => { const authStr = Buffer.from(req.headers.authorization.split(' ')[1], 'base64').toString() const [clientId, clientSecret] = authStr.split(':') @@ -58,19 +713,8 @@ app.get('/za/pb/v1/accounts', (req, res) => { if (!isValidToken(req)) { return res.status(401).json() } - - const returnAccounts = [] - for (let i = 0; i < accounts.length; i++) { - const account = { - accountId: accounts[i].accountId, - accountNumber: accounts[i].accountNumber, - accountName: accounts[i].accountName, - referenceName: accounts[i].referenceName, - productName: accounts[i].productName - } - returnAccounts.push(account) - } - const data = { accounts: returnAccounts } + const accountsArr = db.prepare('SELECT * FROM accounts').all() + const data = { accounts: accountsArr } return formatResponse(data, req, res) }) @@ -80,18 +724,19 @@ app.get('/za/pb/v1/accounts/:accountId/balance', (req, res) => { } const accountId = req.params.accountId - for (let i = 0; i < accounts.length; i++) { - if (accounts[i].accountId === accountId) { - const data = { - accountId, - currentBalance: accounts[i].currentBalance, - availableBalance: accounts[i].availableBalance, - currency: accounts[i].currency - } - return formatResponse(data, req, res) - } + + if (isValidAccount(accountId)) { + return res.status(404).json() // no account was found } - return res.status(404).json() // no account was found + + // fetch the currentBalance and availableBalance from the transactions table + const data = { + accountId, + currentBalance: 0, + availableBalance: 0, + currency: 'ZAR' + } + return formatResponse(data, req, res) }) app.get('/za/pb/v1/accounts/:accountId/transactions', (req, res) => { @@ -99,63 +744,93 @@ app.get('/za/pb/v1/accounts/:accountId/transactions', (req, res) => { return res.status(401).json() } const accountId = req.params.accountId + // check that the account exists + if (isValidAccount(accountId)) { + return res.status(404).json() // no account was found + } + const transactionsArr = db.prepare('SELECT * FROM transactions WHERE accountId = ? ORDER BY postingDate ASC').all(accountId) + // console.log(transactionsArr) const toDate = req.query.toDate ?? dayjs().format('YYYY-MM-DD') // set to today const fromDate = req.query.fromDate ?? dayjs().subtract(180, 'day').format('YYYY-MM-DD') // set to 180 in the passed const transactionType = req.query.transactionType ?? null - for (let i = 0; i < accounts.length; i++) { - if (accounts[i].accountId === accountId) { - const transactions = [] - for (let j = 0; j < accounts[i].transactions.length; j++) { - if (transactionType !== null && accounts[i].transactions[j].transactionType !== transactionType) { - continue - } - const transactionDate = dayjs(accounts[i].transactions[j].transactionDate) - // compare both dates together - if (transactionDate.isBefore(fromDate, 'day')) { - continue - } - if (transactionDate.isAfter(toDate, 'day')) { - continue - } - transactions.push(accounts[i].transactions[j]) - } - const data = { transactions } - return formatResponse(data, req, res) + let postedOrder = 0 + let runningBalance = 0 + const transactions = [] + for (let j = 0; j < transactionsArr.length; j++) { + postedOrder++ + if (transactionsArr[j].type === 'CREDIT') { + runningBalance += transactionsArr[j].amount + } else { + runningBalance -= transactionsArr[j].amount } + if (transactionType !== null && transactionsArr[j].transactionType !== transactionType) { + continue + } + const transactionDate = dayjs(transactionsArr[j].postingDate) + // compare both dates together + if (transactionDate.isBefore(fromDate, 'day')) { + continue + } + if (transactionDate.isAfter(toDate, 'day')) { + continue + } + transactionsArr[j].postedOrder = postedOrder + transactionsArr[j].runningBalance = +runningBalance.toFixed(2) + transactions.push(transactionsArr[j]) + } + const data = { transactions } + return formatResponse(data, req, res) +}) + +// function to create transactions for an account +app.post('/za/pb/v1/accounts/:accountId/transactions', (req, res) => { + const accountId = req.params.accountId + const type = req.body.type || 'DEBIT' + const transactionType = req.body.transactionType || 'CardPurchases' + const status = req.body.status || 'POSTED' + const description = req.body.description || 'HTTP://WWW.UBEREATS.CO PARKTOWN NOR ZA' + const cardNumber = req.body.cardNumber || '402167xxxxxx9999' + const postingDate = req.body.postingDate || dayjs().format('YYYY-MM-DD') + const valueDate = req.body.valueDate || dayjs().format('YYYY-MM-DD') + const actionDate = req.body.actionDate || dayjs().add(180, 'day').format('YYYY-MM-DD') + const transactionDate = req.body.transactionDate || dayjs().subtract(1, 'day').format('YYYY-MM-DD') + const amount = req.body.amount || '40.99' + // check that the account exists + if (isValidAccount(accountId)) { + return res.status(404).json() // no account was found } - return res.status(404).json() // no account was found + // insert the transaction + insertTransaction(accountId, type, transactionType, status, description, cardNumber, postingDate, valueDate, actionDate, transactionDate, amount) + return res.status(201).json() }) app.get('/za/v1/cards/countries', (req, res) => { if (!isValidToken(req)) { return res.status(401).json() } - fs.readFile('data/countries.json', 'utf8', function (err, data) { - if (err) throw err - res.json(JSON.parse(data)) - }) + const result = db.prepare('SELECT * FROM countries').all() + const data = { result } + return formatResponse(data, req, res) }) app.get('/za/v1/cards/currencies', (req, res) => { if (!isValidToken(req)) { return res.status(401).json() } - fs.readFile('data/currencies.json', 'utf8', function (err, data) { - if (err) throw err - res.json(JSON.parse(data)) - }) + const result = db.prepare('SELECT * FROM currencies').all() + const data = { result } + return formatResponse(data, req, res) }) app.get('/za/v1/cards/merchants', (req, res) => { if (!isValidToken(req)) { return res.status(401).json() } - fs.readFile('data/merchants.json', 'utf8', function (err, data) { - if (err) throw err - res.json(JSON.parse(data)) - }) + const result = db.prepare('SELECT * FROM merchants').all() + const data = { result } + return formatResponse(data, req, res) }) const formatResponse = (data, req, res) => { diff --git a/package-lock.json b/package-lock.json index 2f14681..7c35c49 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { + "better-sqlite3": "^8.1.0", "body-parser": "^1.20.0", "cors": "^2.8.5", "dayjs": "^1.11.1", @@ -306,6 +307,35 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/better-sqlite3": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-8.1.0.tgz", + "integrity": "sha512-p1m09H+Oi8R9TPj810pdNswMFuVgRNgCJEWypp6jlkOgSwMIrNyuj3hW78xEuBRGok5RzeaUW8aBtTWF3l/TQA==", + "hasInstallScript": true, + "dependencies": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.0" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -315,6 +345,24 @@ "node": ">=8" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "node_modules/body-parser": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", @@ -447,6 +495,29 @@ "node": ">=8" } }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "node_modules/builtins": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.1.0.tgz", @@ -609,6 +680,11 @@ "node": ">= 6" } }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, "node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -773,7 +849,6 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, "engines": { "node": ">=4.0.0" } @@ -819,6 +894,14 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -880,7 +963,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "dependencies": { "once": "^1.4.0" } @@ -1443,6 +1525,14 @@ "node": ">= 0.6" } }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "engines": { + "node": ">=6" + } + }, "node_modules/express": { "version": "4.17.3", "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", @@ -1547,6 +1637,11 @@ "node": "^10.12.0 || >=12.0.0" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1623,6 +1718,11 @@ "node": ">= 0.6" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1716,6 +1816,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, "node_modules/glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -1914,6 +2019,25 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -2476,7 +2600,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -2574,14 +2697,23 @@ "node_modules/minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "node_modules/napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -2596,6 +2728,31 @@ "node": ">= 0.6" } }, + "node_modules/node-abi": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.32.0.tgz", + "integrity": "sha512-HkwdiLzE/LeuOMIQq/dJq70oNyRc88+wt5CH/RXYseE00LkA/c4PkS6Ti1vE4OHYUiKjkwuxjWq9pItgrz8UJw==", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-abi/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/nodemon": { "version": "2.0.15", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", @@ -2822,7 +2979,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "dependencies": { "wrappy": "1" } @@ -3067,6 +3223,31 @@ "node": ">=6" } }, + "node_modules/prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -3118,7 +3299,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -3213,7 +3393,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -3227,14 +3406,12 @@ "node_modules/rc/node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -3245,6 +3422,19 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, + "node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3492,6 +3682,74 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/simple-get/node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/simple-get/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/standard": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/standard/-/standard-17.0.0.tgz", @@ -3565,6 +3823,14 @@ "node": ">= 0.6" } }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -3681,6 +3947,32 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -3740,6 +4032,17 @@ "strip-bom": "^3.0.0" } }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -3890,6 +4193,11 @@ "node": ">=4" } }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -3984,8 +4292,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -4011,8 +4318,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } }, "dependencies": { @@ -4233,12 +4539,44 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "better-sqlite3": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-8.1.0.tgz", + "integrity": "sha512-p1m09H+Oi8R9TPj810pdNswMFuVgRNgCJEWypp6jlkOgSwMIrNyuj3hW78xEuBRGok5RzeaUW8aBtTWF3l/TQA==", + "requires": { + "bindings": "^1.5.0", + "prebuild-install": "^7.1.0" + } + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "requires": { + "file-uri-to-path": "1.0.0" + } + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, "body-parser": { "version": "1.20.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", @@ -4338,6 +4676,15 @@ "fill-range": "^7.0.1" } }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, "builtins": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/builtins/-/builtins-4.1.0.tgz", @@ -4453,6 +4800,11 @@ } } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", @@ -4583,8 +4935,7 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, "deep-is": { "version": "0.1.4", @@ -4618,6 +4969,11 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -4667,7 +5023,6 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, "requires": { "once": "^1.4.0" } @@ -5078,6 +5433,11 @@ "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" + }, "express": { "version": "4.17.3", "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", @@ -5172,6 +5532,11 @@ "flat-cache": "^3.0.4" } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -5230,6 +5595,11 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5295,6 +5665,11 @@ "get-intrinsic": "^1.1.1" } }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==" + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", @@ -5436,6 +5811,11 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", @@ -5850,7 +6230,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -5915,14 +6294,23 @@ "minimist": { "version": "1.2.6", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -5934,6 +6322,24 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "node-abi": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.32.0.tgz", + "integrity": "sha512-HkwdiLzE/LeuOMIQq/dJq70oNyRc88+wt5CH/RXYseE00LkA/c4PkS6Ti1vE4OHYUiKjkwuxjWq9pItgrz8UJw==", + "requires": { + "semver": "^7.3.5" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "nodemon": { "version": "2.0.15", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", @@ -6094,7 +6500,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -6275,6 +6680,25 @@ } } }, + "prebuild-install": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", + "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", + "requires": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6317,7 +6741,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -6387,7 +6810,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -6398,14 +6820,12 @@ "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" } } }, @@ -6415,6 +6835,16 @@ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", "dev": true }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -6593,6 +7023,36 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==" + }, + "simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "requires": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + }, + "dependencies": { + "decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "requires": { + "mimic-response": "^3.1.0" + } + }, + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + } + } + }, "standard": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/standard/-/standard-17.0.0.tgz", @@ -6626,6 +7086,14 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -6709,6 +7177,29 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -6756,6 +7247,14 @@ "strip-bom": "^3.0.0" } }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -6872,6 +7371,11 @@ "prepend-http": "^2.0.0" } }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -6939,8 +7443,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { "version": "3.0.3", @@ -6963,8 +7466,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } } diff --git a/package.json b/package.json index c9f537d..eb6ed32 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,7 @@ { "name": "programmable-banking-sim", "version": "1.0.0", + "type": "module", "description": "Local Simulation of the api service. for local testing and demo purposes", "main": "index.js", "scripts": { @@ -10,6 +11,7 @@ "author": "Devin Pearson", "license": "MIT", "dependencies": { + "better-sqlite3": "^8.1.0", "body-parser": "^1.20.0", "cors": "^2.8.5", "dayjs": "^1.11.1", From 69369de174e5e10f441115e95c98f33bd40acbbd Mon Sep 17 00:00:00 2001 From: Devin Date: Sat, 11 Feb 2023 13:43:03 +0200 Subject: [PATCH 2/6] removed imports again to support pkg builds --- .gitignore | 1 + index.js | 11 +++++------ package.json | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 739da00..0241f97 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ **/node_modules +**/dist .env **.db-shm **.db-wal \ No newline at end of file diff --git a/index.js b/index.js index 5dcb676..d1b267f 100644 --- a/index.js +++ b/index.js @@ -1,10 +1,9 @@ -import 'dotenv/config' -import express from 'express' -import cors from 'cors' -import dayjs from 'dayjs' -import Database from 'better-sqlite3' +require('dotenv').config() +const express = require('express') +const cors = require('cors') +const dayjs = require('dayjs') +const db = require('better-sqlite3')('foobar.db') -const db = new Database('foobar.db') db.pragma('journal_mode = WAL') const prepareDB = () => { diff --git a/package.json b/package.json index eb6ed32..d481c2a 100644 --- a/package.json +++ b/package.json @@ -1,11 +1,11 @@ { "name": "programmable-banking-sim", "version": "1.0.0", - "type": "module", "description": "Local Simulation of the api service. for local testing and demo purposes", "main": "index.js", "scripts": { "start": "npx nodemon index.js", + "build": "pkg index.js --output dist/pbsim --targets node16-linux-x64,node16-macos-x64,node16-win-x64", "test": "npx standard" }, "author": "Devin Pearson", From b2118048453a163c54339a1e79d64b4e4255ef3e Mon Sep 17 00:00:00 2001 From: Devin Date: Sun, 12 Feb 2023 10:44:31 +0200 Subject: [PATCH 3/6] refactor: moved db functions into seperate file --- .env.sample | 2 +- database.js | 704 +++++++++++ index.js | 746 +----------- investec.db | Bin 0 -> 4096 bytes package-lock.json | 2880 +++++++++++++++++++++++++++------------------ package.json | 9 +- 6 files changed, 2489 insertions(+), 1852 deletions(-) create mode 100644 database.js create mode 100644 investec.db diff --git a/.env.sample b/.env.sample index ac9871e..8e2ed17 100644 --- a/.env.sample +++ b/.env.sample @@ -1,5 +1,5 @@ PORT=3000 -DATAFILE='data/accounts.json' +DB_FILE='investec.db' AUTH=false CLIENT_ID= CLIENT_SECRET= diff --git a/database.js b/database.js new file mode 100644 index 0000000..28e9d0c --- /dev/null +++ b/database.js @@ -0,0 +1,704 @@ +function prepareDB (db) { + // Create the accounts table + db.exec('CREATE TABLE IF NOT EXISTS accounts (accountId TEXT, accountNumber TEXT, accountName TEXT, referenceName TEXT, productName TEXT)') + // Create the transactions table + db.exec('CREATE TABLE IF NOT EXISTS transactions (accountId TEXT, type TEXT, transactiontype TEXT, status TEXT, description TEXT, cardNumber Number, postedOrder Number, postingDate TEXT, valueDate TEXT, actionDate TEXT, transactionDate TEXT, amount Number, runningBalance Number)') + // Create the countries table + db.exec('CREATE TABLE IF NOT EXISTS countries (code TEXT,name TEXT)') + // Create the currencies table + db.exec('CREATE TABLE IF NOT EXISTS currencies (code TEXT,name TEXT)') + // Create the merchants table + db.exec('CREATE TABLE IF NOT EXISTS merchants (code TEXT,name TEXT)') +} + +function prepareCountries (db) { + const insertCountry = db.prepare('INSERT INTO countries (code,name) VALUES (@code, @name)') + + const insertManyCountries = db.transaction((countryArr) => { + for (const country of countryArr) insertCountry.run(country) + }) + + insertManyCountries([ + { code: 'ZA', name: 'South Africa' }, + { code: 'GB', name: 'United Kingdom of Great Britain and Northern Ireland (the)' }, + { code: 'AF', name: 'Afghanistan' }, + { code: 'AL', name: 'Albania' }, + { code: 'DZ', name: 'Algeria' }, + { code: 'AS', name: 'American Samoa' }, + { code: 'AD', name: 'Andorra' }, + { code: 'AO', name: 'Angola' }, + { code: 'AI', name: 'Anguilla' }, + { code: 'AQ', name: 'Antarctica' }, + { code: 'AG', name: 'Antigua and Barbuda' }, + { code: 'AR', name: 'Argentina' }, + { code: 'AM', name: 'Armenia' }, + { code: 'AW', name: 'Aruba' }, + { code: 'AU', name: 'Australia' }, + { code: 'AT', name: 'Austria' }, + { code: 'AZ', name: 'Azerbaijan' }, + { code: 'BS', name: 'Bahamas (the)' }, + { code: 'BH', name: 'Bahrain' }, + { code: 'BD', name: 'Bangladesh' }, + { code: 'BB', name: 'Barbados' }, + { code: 'BY', name: 'Belarus' }, + { code: 'BE', name: 'Belgium' }, + { code: 'BZ', name: 'Belize' }, + { code: 'BJ', name: 'Benin' }, + { code: 'BM', name: 'Bermuda' }, + { code: 'BT', name: 'Bhutan' }, + { code: 'BO', name: 'Bolivia (Plurinational State of)' }, + { code: 'BQ', name: 'Bonaire, Sint Eustatius and Saba' }, + { code: 'BA', name: 'Bosnia and Herzegovina' }, + { code: 'BW', name: 'Botswana' }, + { code: 'BV', name: 'Bouvet Island' }, + { code: 'BR', name: 'Brazil' }, + { code: 'IO', name: 'British Indian Ocean Territory (the)' }, + { code: 'BN', name: 'Brunei Darussalam' }, + { code: 'BG', name: 'Bulgaria' }, + { code: 'BF', name: 'Burkina Faso' }, + { code: 'BI', name: 'Burundi' }, + { code: 'CV', name: 'Cabo Verde' }, + { code: 'KH', name: 'Cambodia' }, + { code: 'CM', name: 'Cameroon' }, + { code: 'CA', name: 'Canada' }, + { code: 'KY', name: 'Cayman Islands (the)' }, + { code: 'CF', name: 'Central African Republic (the)' }, + { code: 'TD', name: 'Chad' }, + { code: 'CL', name: 'Chile' }, + { code: 'CN', name: 'China' }, + { code: 'CX', name: 'Christmas Island' }, + { code: 'CC', name: 'Cocos (Keeling) Islands (the)' }, + { code: 'CO', name: 'Colombia' }, + { code: 'KM', name: 'Comoros (the)' }, + { code: 'CD', name: 'Congo (the Democratic Republic of the)' }, + { code: 'CG', name: 'Congo (the)' }, + { code: 'CK', name: 'Cook Islands (the)' }, + { code: 'CR', name: 'Costa Rica' }, + { code: 'HR', name: 'Croatia' }, + { code: 'CU', name: 'Cuba' }, + { code: 'CW', name: 'Curaçao' }, + { code: 'CY', name: 'Cyprus' }, + { code: 'CZ', name: 'Czechia' }, + { code: 'CI', name: "Côte d'Ivoire" }, + { code: 'DK', name: 'Denmark' }, + { code: 'DJ', name: 'Djibouti' }, + { code: 'DM', name: 'Dominica' }, + { code: 'DO', name: 'Dominican Republic (the)' }, + { code: 'EC', name: 'Ecuador' }, + { code: 'EG', name: 'Egypt' }, + { code: 'SV', name: 'El Salvador' }, + { code: 'GQ', name: 'Equatorial Guinea' }, + { code: 'ER', name: 'Eritrea' }, + { code: 'EE', name: 'Estonia' }, + { code: 'SZ', name: 'Eswatini' }, + { code: 'ET', name: 'Ethiopia' }, + { code: 'FK', name: 'Falkland Islands (the) [Malvinas]' }, + { code: 'FO', name: 'Faroe Islands (the)' }, + { code: 'FJ', name: 'Fiji' }, + { code: 'FI', name: 'Finland' }, + { code: 'FR', name: 'France' }, + { code: 'GF', name: 'French Guiana' }, + { code: 'PF', name: 'French Polynesia' }, + { code: 'TF', name: 'French Southern Territories (the)' }, + { code: 'GA', name: 'Gabon' }, + { code: 'GM', name: 'Gambia (the)' }, + { code: 'GE', name: 'Georgia' }, + { code: 'DE', name: 'Germany' }, + { code: 'GH', name: 'Ghana' }, + { code: 'GI', name: 'Gibraltar' }, + { code: 'GR', name: 'Greece' }, + { code: 'GL', name: 'Greenland' }, + { code: 'GD', name: 'Grenada' }, + { code: 'GP', name: 'Guadeloupe' }, + { code: 'GU', name: 'Guam' }, + { code: 'GT', name: 'Guatemala' }, + { code: 'GG', name: 'Guernsey' }, + { code: 'GN', name: 'Guinea' }, + { code: 'GW', name: 'Guinea-Bissau' }, + { code: 'GY', name: 'Guyana' }, + { code: 'HT', name: 'Haiti' }, + { code: 'HM', name: 'Heard Island and McDonald Islands' }, + { code: 'VA', name: 'Holy See (the)' }, + { code: 'HN', name: 'Honduras' }, + { code: 'HK', name: 'Hong Kong' }, + { code: 'HU', name: 'Hungary' }, + { code: 'IS', name: 'Iceland' }, + { code: 'IN', name: 'India' }, + { code: 'ID', name: 'Indonesia' }, + { code: 'IR', name: 'Iran (Islamic Republic of)' }, + { code: 'IQ', name: 'Iraq' }, + { code: 'IE', name: 'Ireland' }, + { code: 'IM', name: 'Isle of Man' }, + { code: 'IL', name: 'Israel' }, + { code: 'IT', name: 'Italy' }, + { code: 'JM', name: 'Jamaica' }, + { code: 'JP', name: 'Japan' }, + { code: 'JE', name: 'Jersey' }, + { code: 'JO', name: 'Jordan' }, + { code: 'KZ', name: 'Kazakhstan' }, + { code: 'KE', name: 'Kenya' }, + { code: 'KI', name: 'Kiribati' }, + { code: 'KP', name: "Korea (the Democratic People's Republic of)" }, + { code: 'KR', name: 'Korea (the Republic of)' }, + { code: 'KW', name: 'Kuwait' }, + { code: 'KG', name: 'Kyrgyzstan' }, + { code: 'LA', name: "Lao People's Democratic Republic (the)" }, + { code: 'LV', name: 'Latvia' }, + { code: 'LB', name: 'Lebanon' }, + { code: 'LS', name: 'Lesotho' }, + { code: 'LR', name: 'Liberia' }, + { code: 'LY', name: 'Libya' }, + { code: 'LI', name: 'Liechtenstein' }, + { code: 'LT', name: 'Lithuania' }, + { code: 'LU', name: 'Luxembourg' }, + { code: 'MO', name: 'Macao' }, + { code: 'MK', name: 'Macedonia (the former Yugoslav Republic of)' }, + { code: 'MG', name: 'Madagascar' }, + { code: 'MW', name: 'Malawi' }, + { code: 'MY', name: 'Malaysia' }, + { code: 'MV', name: 'Maldives' }, + { code: 'ML', name: 'Mali' }, + { code: 'MT', name: 'Malta' }, + { code: 'MH', name: 'Marshall Islands (the)' }, + { code: 'MQ', name: 'Martinique' }, + { code: 'MR', name: 'Mauritania' }, + { code: 'MU', name: 'Mauritius' }, + { code: 'YT', name: 'Mayotte' }, + { code: 'MX', name: 'Mexico' }, + { code: 'FM', name: 'Micronesia (Federated States of)' }, + { code: 'MD', name: 'Moldova (the Republic of)' }, + { code: 'MC', name: 'Monaco' }, + { code: 'MN', name: 'Mongolia' }, + { code: 'ME', name: 'Montenegro' }, + { code: 'MS', name: 'Montserrat' }, + { code: 'MA', name: 'Morocco' }, + { code: 'MZ', name: 'Mozambique' }, + { code: 'MM', name: 'Myanmar' }, + { code: 'NA', name: 'Namibia' }, + { code: 'NR', name: 'Nauru' }, + { code: 'NP', name: 'Nepal' }, + { code: 'NL', name: 'Netherlands (the)' }, + { code: 'NC', name: 'New Caledonia' }, + { code: 'NZ', name: 'New Zealand' }, + { code: 'NI', name: 'Nicaragua' }, + { code: 'NE', name: 'Niger (the)' }, + { code: 'NG', name: 'Nigeria' }, + { code: 'NU', name: 'Niue' }, + { code: 'NF', name: 'Norfolk Island' }, + { code: 'MP', name: 'Northern Mariana Islands (the)' }, + { code: 'NO', name: 'Norway' }, + { code: 'OM', name: 'Oman' }, + { code: 'PK', name: 'Pakistan' }, + { code: 'PW', name: 'Palau' }, + { code: 'PS', name: 'Palestine, State of' }, + { code: 'PA', name: 'Panama' }, + { code: 'PG', name: 'Papua New Guinea' }, + { code: 'PY', name: 'Paraguay' }, + { code: 'PE', name: 'Peru' }, + { code: 'PH', name: 'Philippines (the)' }, + { code: 'PN', name: 'Pitcairn' }, + { code: 'PL', name: 'Poland' }, + { code: 'PT', name: 'Portugal' }, + { code: 'PR', name: 'Puerto Rico' }, + { code: 'QA', name: 'Qatar' }, + { code: 'RO', name: 'Romania' }, + { code: 'RU', name: 'Russian Federation (the)' }, + { code: 'RW', name: 'Rwanda' }, + { code: 'RE', name: 'Réunion' }, + { code: 'BL', name: 'Saint Barthélemy' }, + { code: 'SH', name: 'Saint Helena, Ascension and Tristan da Cunha' }, + { code: 'KN', name: 'Saint Kitts and Nevis' }, + { code: 'LC', name: 'Saint Lucia' }, + { code: 'MF', name: 'Saint Martin (French part)' }, + { code: 'PM', name: 'Saint Pierre and Miquelon' }, + { code: 'VC', name: 'Saint Vincent and the Grenadines' }, + { code: 'WS', name: 'Samoa' }, + { code: 'SM', name: 'San Marino' }, + { code: 'ST', name: 'Sao Tome and Principe' }, + { code: 'SA', name: 'Saudi Arabia' }, + { code: 'SN', name: 'Senegal' }, + { code: 'RS', name: 'Serbia' }, + { code: 'SC', name: 'Seychelles' }, + { code: 'SL', name: 'Sierra Leone' }, + { code: 'SG', name: 'Singapore' }, + { code: 'SX', name: 'Sint Maarten (Dutch part)' }, + { code: 'SK', name: 'Slovakia' }, + { code: 'SI', name: 'Slovenia' }, + { code: 'SB', name: 'Solomon Islands' }, + { code: 'SO', name: 'Somalia' }, + { code: 'GS', name: 'South Georgia and the South Sandwich Islands' }, + { code: 'SS', name: 'South Sudan' }, + { code: 'ES', name: 'Spain' }, + { code: 'LK', name: 'Sri Lanka' }, + { code: 'SD', name: 'Sudan (the)' }, + { code: 'SR', name: 'Suriname' }, + { code: 'SJ', name: 'Svalbard and Jan Mayen' }, + { code: 'SE', name: 'Sweden' }, + { code: 'CH', name: 'Switzerland' }, + { code: 'SY', name: 'Syrian Arab Republic' }, + { code: 'TW', name: 'Taiwan (Province of China)' }, + { code: 'TJ', name: 'Tajikistan' }, + { code: 'TZ', name: 'Tanzania, United Republic of' }, + { code: 'TH', name: 'Thailand' }, + { code: 'TL', name: 'Timor-Leste' }, + { code: 'TG', name: 'Togo' }, + { code: 'TK', name: 'Tokelau' }, + { code: 'TO', name: 'Tonga' }, + { code: 'TT', name: 'Trinidad and Tobago' }, + { code: 'TN', name: 'Tunisia' }, + { code: 'TR', name: 'Turkey' }, + { code: 'TM', name: 'Turkmenistan' }, + { code: 'TC', name: 'Turks and Caicos Islands (the)' }, + { code: 'TV', name: 'Tuvalu' }, + { code: 'UG', name: 'Uganda' }, + { code: 'UA', name: 'Ukraine' }, + { code: 'AE', name: 'United Arab Emirates (the)' }, + { code: 'UM', name: 'United States Minor Outlying Islands (the)' }, + { code: 'US', name: 'United States of America (the)' }, + { code: 'UY', name: 'Uruguay' }, + { code: 'UZ', name: 'Uzbekistan' }, + { code: 'VU', name: 'Vanuatu' }, + { code: 'VE', name: 'Venezuela (Bolivarian Republic of)' }, + { code: 'VN', name: 'Viet Nam' }, + { code: 'VG', name: 'Virgin Islands (British)' }, + { code: 'VI', name: 'Virgin Islands (U.S.)' }, + { code: 'WF', name: 'Wallis and Futuna' }, + { code: 'EH', name: 'Western Sahara' }, + { code: 'YE', name: 'Yemen' }, + { code: 'ZM', name: 'Zambia' }, + { code: 'ZW', name: 'Zimbabwe' }, + { code: 'AX', name: 'Åland Islands' }, + { code: 'undefined', name: 'undefined' } + ]) +} + +function prepareCurrencies (db) { + const insertCurrency = db.prepare('INSERT INTO currencies (code,name) VALUES (@code, @name)') + + const insertManyCurrencies = db.transaction((currencyArr) => { + for (const currency of currencyArr) insertCurrency.run(currency) + }) + + insertManyCurrencies([ + { code: 'ZAR', name: 'South African Rand' }, + { code: 'GBP', name: 'British Pound' }, + { code: 'USD', name: 'United States Dollar' }, + { code: 'EUR', name: 'Euro' }, + { code: 'AUD', name: 'Australian Dollar' }, + { code: 'CHF', name: 'Swiss Franc' }, + { code: 'CAD', name: 'Canadian Dollar' }, + { code: 'DKK', name: 'Danish Krone' }, + { code: 'HKD', name: 'Hong Kong Dollar' }, + { code: 'JPY', name: 'Japanese Yen' }, + { code: 'MUR', name: 'Mauritius Rupee' }, + { code: 'NZD', name: 'New Zealand Dollar' }, + { code: 'NOK', name: 'Norwegian Krone' }, + { code: 'SGD', name: 'Singapore Dollar' }, + { code: 'SEK', name: 'Swedish Krona' }, + { code: 'AED', name: 'Emirati Dirham' }, + { code: 'BWP', name: 'Botswana Pula' }, + { code: 'INR', name: 'Indian Rupee' }, + { code: 'KES', name: 'Kenyan Shilling' }, + { code: 'NGN', name: 'Nigerian Naira' }, + { code: 'RUB', name: 'Russian Ruble' }, + { code: 'TRY', name: 'Turkish Lira' } + ]) +} + +function prepareMerchants (db) { + const insertMerchant = db.prepare('INSERT INTO merchants (code,name) VALUES (@code, @name)') + + const insertManyMerchants = db.transaction((merchantArr) => { + for (const merchant of merchantArr) insertMerchant.run(merchant) + }) + + insertManyMerchants([ + { code: '7623', name: 'A/C, Refrigeration Repair' }, + { code: '8931', name: 'Accounting/Bookkeeping Services' }, + { code: '7311', name: 'Advertising Services' }, + { code: '763', name: 'Agricultural Cooperative' }, + { code: '4511', name: 'Airlines, Air Carriers' }, + { code: '4582', name: 'Airports, Flying Fields' }, + { code: '4119', name: 'Ambulance Services' }, + { code: '7996', name: 'Amusement Parks/Carnivals' }, + { code: '5937', name: 'Antique Reproductions' }, + { code: '5932', name: 'Antique Shops' }, + { code: '7998', name: 'Aquariums' }, + { code: '8911', name: 'Architectural/Surveying Services' }, + { code: '5971', name: 'Art Dealers and Galleries' }, + { code: '5970', name: 'Artists Supply and Craft Shops' }, + { code: '7531', name: 'Auto Body Repair Shops' }, + { code: '7535', name: 'Auto Paint Shops' }, + { code: '7538', name: 'Auto Service Shops' }, + { code: '5531', name: 'Auto and Home Supply Stores' }, + { code: '6011', name: 'Automated Cash Disburse' }, + { code: '5542', name: 'Automated Fuel Dispensers' }, + { code: '8675', name: 'Automobile Associations' }, + { code: '5533', name: 'Automotive Parts and Accessories Stores' }, + { code: '5532', name: 'Automotive Tire Stores' }, + { code: '9223', name: 'Bail and Bond Payments (payment to the surety for the bond, not the actual bond paid to the government agency)' }, + { code: '5462', name: 'Bakeries' }, + { code: '7929', name: 'Bands, Orchestras' }, + { code: '7230', name: 'Barber and Beauty Shops' }, + { code: '7995', name: 'Betting/Casino Gambling' }, + { code: '5940', name: 'Bicycle Shops' }, + { code: '7932', name: 'Billiard/Pool Establishments' }, + { code: '5551', name: 'Boat Dealers' }, + { code: '4457', name: 'Boat Rentals and Leases' }, + { code: '5942', name: 'Book Stores' }, + { code: '5192', name: 'Books, Periodicals, and Newspapers' }, + { code: '7933', name: 'Bowling Alleys' }, + { code: '4131', name: 'Bus Lines' }, + { code: '8244', name: 'Business/Secretarial Schools' }, + { code: '7278', name: 'Buying/Shopping Services' }, + { code: '4899', name: 'Cable, Satellite, and Other Pay Television and Radio' }, + { code: '5946', name: 'Camera and Photographic Supply Stores' }, + { code: '5441', name: 'Candy, Nut, and Confectionery Stores' }, + { code: '7512', name: 'Car Rental Agencies' }, + { code: '7542', name: 'Car Washes' }, + { code: '5511', name: 'Car and Truck Dealers (New & Used) Sales, Service, Repairs Parts and Leasing' }, + { code: '5521', name: 'Car and Truck Dealers (Used Only) Sales, Service, Repairs Parts and Leasing' }, + { code: '1750', name: 'Carpentry Services' }, + { code: '7217', name: 'Carpet/Upholstery Cleaning' }, + { code: '5811', name: 'Caterers' }, + { code: '8398', name: 'Charitable and Social Service Organizations - Fundraising' }, + { code: '5169', name: 'Chemicals and Allied Products (Not Elsewhere Classified)' }, + { code: '5641', name: 'Chidrens and Infants Wear Stores' }, + { code: '8351', name: 'Child Care Services' }, + { code: '8049', name: 'Chiropodists, Podiatrists' }, + { code: '8041', name: 'Chiropractors' }, + { code: '5993', name: 'Cigar Stores and Stands' }, + { code: '8641', name: 'Civic, Social, Fraternal Associations' }, + { code: '7349', name: 'Cleaning and Maintenance' }, + { code: '7296', name: 'Clothing Rental' }, + { code: '8220', name: 'Colleges, Universities' }, + { code: '5046', name: 'Commercial Equipment (Not Elsewhere Classified)' }, + { code: '5139', name: 'Commercial Footwear' }, + { code: '7333', name: 'Commercial Photography, Art and Graphics' }, + { code: '4111', name: 'Commuter Transport, Ferries' }, + { code: '4816', name: 'Computer Network Services' }, + { code: '7372', name: 'Computer Programming' }, + { code: '7379', name: 'Computer Repair' }, + { code: '5734', name: 'Computer Software Stores' }, + { code: '5045', name: 'Computers, Peripherals, and Software' }, + { code: '1771', name: 'Concrete Work Services' }, + { code: '5039', name: 'Construction Materials (Not Elsewhere Classified)' }, + { code: '7392', name: 'Consulting, Public Relations' }, + { code: '8241', name: 'Correspondence Schools' }, + { code: '5977', name: 'Cosmetic Stores' }, + { code: '7277', name: 'Counseling Services' }, + { code: '7997', name: 'Country Clubs' }, + { code: '4215', name: 'Courier Services' }, + { code: '9211', name: 'Court Costs, Including Alimony and Child Support - Courts of Law' }, + { code: '7321', name: 'Credit Reporting Agencies' }, + { code: '4411', name: 'Cruise Lines' }, + { code: '5451', name: 'Dairy Products Stores' }, + { code: '7911', name: 'Dance Hall, Studios, Schools' }, + { code: '7273', name: 'Dating/Escort Services' }, + { code: '8021', name: 'Dentists, Orthodontists' }, + { code: '5311', name: 'Department Stores' }, + { code: '7393', name: 'Detective Agencies' }, + { code: '5964', name: 'Direct Marketing - Catalog Merchant' }, + { code: '5965', name: 'Direct Marketing - Combination Catalog and Retail Merchant' }, + { code: '5967', name: 'Direct Marketing - Inbound Telemarketing' }, + { code: '5960', name: 'Direct Marketing - Insurance Services' }, + { code: '5969', name: 'Direct Marketing - Other' }, + { code: '5966', name: 'Direct Marketing - Outbound Telemarketing' }, + { code: '5968', name: 'Direct Marketing - Subscription' }, + { code: '5962', name: 'Direct Marketing - Travel' }, + { code: '5310', name: 'Discount Stores' }, + { code: '8011', name: 'Doctors' }, + { code: '5963', name: 'Door-To-Door Sales' }, + { code: '5714', name: 'Drapery, Window Covering, and Upholstery Stores' }, + { code: '5813', name: 'Drinking Places' }, + { code: '5912', name: 'Drug Stores and Pharmacies' }, + { code: '5122', name: 'Drugs, Drug Proprietaries, and Druggist Sundries' }, + { code: '7216', name: 'Dry Cleaners' }, + { code: '5099', name: 'Durable Goods (Not Elsewhere Classified)' }, + { code: '5309', name: 'Duty Free Stores' }, + { code: '5812', name: 'Eating Places, Restaurants' }, + { code: '8299', name: 'Educational Services' }, + { code: '5997', name: 'Electric Razor Stores' }, + { code: '5065', name: 'Electrical Parts and Equipment' }, + { code: '1731', name: 'Electrical Services' }, + { code: '7622', name: 'Electronics Repair Shops' }, + { code: '5732', name: 'Electronics Stores' }, + { code: '8211', name: 'Elementary, Secondary Schools' }, + { code: '7361', name: 'Employment/Temp Agencies' }, + { code: '7394', name: 'Equipment Rental' }, + { code: '7342', name: 'Exterminating Services' }, + { code: '5651', name: 'Family Clothing Stores' }, + { code: '5814', name: 'Fast Food Restaurants' }, + { code: '6012', name: 'Financial Institutions' }, + { code: '9222', name: 'Fines - Government Administrative Entities' }, + { code: '5718', name: 'Fireplace, Fireplace Screens, and Accessories Stores' }, + { code: '5713', name: 'Floor Covering Stores' }, + { code: '5992', name: 'Florists' }, + { code: '5193', name: 'Florists Supplies, Nursery Stock, and Flowers' }, + { code: '5422', name: 'Freezer and Locker Meat Provisioners' }, + { code: '5983', name: 'Fuel Dealers (Non Automotive)' }, + { code: '7261', name: 'Funeral Services, Crematories' }, + { code: '7641', name: 'Furniture Repair, Refinishing' }, + { code: '5712', name: 'Furniture, Home Furnishings, and Equipment Stores, Except Appliances' }, + { code: '5681', name: 'Furriers and Fur Shops' }, + { code: '1520', name: 'General Services' }, + { code: '5947', name: 'Gift, Card, Novelty, and Souvenir Shops' }, + { code: '5231', name: 'Glass, Paint, and Wallpaper Stores' }, + { code: '5950', name: 'Glassware, Crystal Stores' }, + { code: '7992', name: 'Golf Courses - Public' }, + { code: '9399', name: 'Government Services (Not Elsewhere Classified)' }, + { code: '5411', name: 'Grocery Stores, Supermarkets' }, + { code: '5251', name: 'Hardware Stores' }, + { code: '5072', name: 'Hardware, Equipment, and Supplies' }, + { code: '7298', name: 'Health and Beauty Spas' }, + { code: '5975', name: 'Hearing Aids Sales and Supplies' }, + { code: '1711', name: 'Heating, Plumbing, A/C' }, + { code: '5945', name: 'Hobby, Toy, and Game Shops' }, + { code: '5200', name: 'Home Supply Warehouse Stores' }, + { code: '8062', name: 'Hospitals' }, + { code: '7011', name: 'Hotels, Motels, and Resorts' }, + { code: '5722', name: 'Household Appliance Stores' }, + { code: '5085', name: 'Industrial Supplies (Not Elsewhere Classified)' }, + { code: '7375', name: 'Information Retrieval Services' }, + { code: '6399', name: 'Insurance - Default' }, + { code: '6300', name: 'Insurance Underwriting, Premiums' }, + { code: '9950', name: 'Intra-Company Purchases' }, + { code: '5944', name: 'Jewelry Stores, Watches, Clocks, and Silverware Stores' }, + { code: '780', name: 'Landscaping Services' }, + { code: '7211', name: 'Laundries' }, + { code: '7210', name: 'Laundry, Cleaning Services' }, + { code: '8111', name: 'Legal Services, Attorneys' }, + { code: '5948', name: 'Luggage and Leather Goods Stores' }, + { code: '5211', name: 'Lumber, Building Materials Stores' }, + { code: '6010', name: 'Manual Cash Disburse' }, + { code: '4468', name: 'Marinas, Service and Supplies' }, + { code: '1740', name: 'Masonry, Stonework, and Plaster' }, + { code: '7297', name: 'Massage Parlors' }, + { code: '8099', name: 'Medical Services' }, + { code: '8071', name: 'Medical and Dental Labs' }, + { code: '5047', name: 'Medical, Dental, Ophthalmic, and Hospital Equipment and Supplies' }, + { code: '8699', name: 'Membership Organizations' }, + { code: '5611', name: 'Mens and Boys Clothing and Accessories Stores' }, + { code: '5691', name: 'Mens, Womens Clothing Stores' }, + { code: '5051', name: 'Metal Service Centers' }, + { code: '5699', name: 'Miscellaneous Apparel and Accessory Shops' }, + { code: '5599', name: 'Miscellaneous Auto Dealers' }, + { code: '7399', name: 'Miscellaneous Business Services' }, + { code: '5499', name: 'Miscellaneous Food Stores - Convenience Stores and Specialty Markets' }, + { code: '5399', name: 'Miscellaneous General Merchandise' }, + { code: '7299', name: 'Miscellaneous General Services' }, + { code: '5719', name: 'Miscellaneous Home Furnishing Specialty Stores' }, + { code: '2741', name: 'Miscellaneous Publishing and Printing' }, + { code: '7999', name: 'Miscellaneous Recreation Services' }, + { code: '7699', name: 'Miscellaneous Repair Shops' }, + { code: '5999', name: 'Miscellaneous Specialty Retail' }, + { code: '5271', name: 'Mobile Home Dealers' }, + { code: '7832', name: 'Motion Picture Theaters' }, + { code: '4214', name: 'Motor Freight Carriers and Trucking - Local and Long Distance, Moving and Storage Companies, and Local Delivery Services' }, + { code: '5592', name: 'Motor Homes Dealers' }, + { code: '5013', name: 'Motor Vehicle Supplies and New Parts' }, + { code: '5571', name: 'Motorcycle Shops and Dealers' }, + { code: '5561', name: 'Motorcycle Shops, Dealers' }, + { code: '5733', name: 'Music Stores-Musical Instruments, Pianos, and Sheet Music' }, + { code: '5994', name: 'News Dealers and Newsstands' }, + { code: '6051', name: 'Non-FI, Money Orders' }, + { code: '6540', name: 'Non-FI, Stored Value Card Purchase/Load' }, + { code: '5199', name: 'Nondurable Goods (Not Elsewhere Classified)' }, + { code: '5261', name: 'Nurseries, Lawn and Garden Supply Stores' }, + { code: '8050', name: 'Nursing/Personal Care' }, + { code: '5021', name: 'Office and Commercial Furniture' }, + { code: '8043', name: 'Opticians, Eyeglasses' }, + { code: '8042', name: 'Optometrists, Ophthalmologist' }, + { code: '5976', name: 'Orthopedic Goods - Prosthetic Devices' }, + { code: '8031', name: 'Osteopaths' }, + { code: '5921', name: 'Package Stores-Beer, Wine, and Liquor' }, + { code: '5198', name: 'Paints, Varnishes, and Supplies' }, + { code: '7523', name: 'Parking Lots, Garages' }, + { code: '4112', name: 'Passenger Railways' }, + { code: '5933', name: 'Pawn Shops' }, + { code: '5995', name: 'Pet Shops, Pet Food, and Supplies' }, + { code: '5172', name: 'Petroleum and Petroleum Products' }, + { code: '7395', name: 'Photo Developing' }, + { code: '7221', name: 'Photographic Studios' }, + { code: '5044', name: 'Photographic, Photocopy, Microfilm Equipment, and Supplies' }, + { code: '7829', name: 'Picture/Video Production' }, + { code: '5131', name: 'Piece Goods, Notions, and Other Dry Goods' }, + { code: '5074', name: 'Plumbing, Heating Equipment, and Supplies' }, + { code: '8651', name: 'Political Organizations' }, + { code: '9402', name: 'Postal Services - Government Only' }, + { code: '5094', name: 'Precious Stones and Metals, Watches and Jewelry' }, + { code: '8999', name: 'Professional Services' }, + { code: '4225', name: 'Public Warehousing and Storage - Farm Products, Refrigerated Goods, Household Goods, and Storage' }, + { code: '7338', name: 'Quick Copy, Repro, and Blueprint' }, + { code: '4011', name: 'Railroads' }, + { code: '6513', name: 'Real Estate Agents and Managers - Rentals' }, + { code: '5735', name: 'Record Stores' }, + { code: '7519', name: 'Recreational Vehicle Rentals' }, + { code: '5973', name: 'Religious Goods Stores' }, + { code: '8661', name: 'Religious Organizations' }, + { code: '1761', name: 'Roofing/Siding, Sheet Metal' }, + { code: '7339', name: 'Secretarial Support Services' }, + { code: '6211', name: 'Security Brokers/Dealers' }, + { code: '5541', name: 'Service Stations' }, + { code: '5949', name: 'Sewing, Needlework, Fabric, and Piece Goods Stores' }, + { code: '7251', name: 'Shoe Repair/Hat Cleaning' }, + { code: '5661', name: 'Shoe Stores' }, + { code: '7629', name: 'Small Appliance Repair' }, + { code: '5598', name: 'Snowmobile Dealers' }, + { code: '1799', name: 'Special Trade Services' }, + { code: '2842', name: 'Specialty Cleaning' }, + { code: '5941', name: 'Sporting Goods Stores' }, + { code: '7032', name: 'Sporting/Recreation Camps' }, + { code: '7941', name: 'Sports Clubs/Fields' }, + { code: '5655', name: 'Sports and Riding Apparel Stores' }, + { code: '5972', name: 'Stamp and Coin Stores' }, + { code: '5111', name: 'Stationary, Office Supplies, Printing and Writing Paper' }, + { code: '5943', name: 'Stationery Stores, Office, and School Supply Stores' }, + { code: '5996', name: 'Swimming Pools Sales' }, + { code: '4723', name: 'TUI Travel - Germany' }, + { code: '5697', name: 'Tailors, Alterations' }, + { code: '9311', name: 'Tax Payments - Government Agencies' }, + { code: '7276', name: 'Tax Preparation Services' }, + { code: '4121', name: 'Taxicabs/Limousines' }, + { code: '4812', name: 'Telecommunication Equipment and Telephone Sales' }, + { code: '4814', name: 'Telecommunication Services' }, + { code: '4821', name: 'Telegraph Services' }, + { code: '5998', name: 'Tent and Awning Shops' }, + { code: '8734', name: 'Testing Laboratories' }, + { code: '7922', name: 'Theatrical Ticket Agencies' }, + { code: '7012', name: 'Timeshares' }, + { code: '7534', name: 'Tire Retreading and Repair' }, + { code: '4784', name: 'Tolls/Bridge Fees' }, + { code: '7991', name: 'Tourist Attractions and Exhibits' }, + { code: '7549', name: 'Towing Services' }, + { code: '7033', name: 'Trailer Parks, Campgrounds' }, + { code: '4789', name: 'Transportation Services (Not Elsewhere Classified)' }, + { code: '4722', name: 'Travel Agencies, Tour Operators' }, + { code: '7511', name: 'Truck StopIteration' }, + { code: '7513', name: 'Truck/Utility Trailer Rentals' }, + { code: '2791', name: 'Typesetting, Plate Making, and Related Services' }, + { code: '5978', name: 'Typewriter Stores' }, + { code: '9405', name: 'U.S. Federal Government Agencies or Departments' }, + { code: '5137', name: 'Uniforms, Commercial Clothing' }, + { code: '5931', name: 'Used Merchandise and Secondhand Stores' }, + { code: '4900', name: 'Utilities' }, + { code: '5331', name: 'Variety Stores' }, + { code: '742', name: 'Veterinary Services' }, + { code: '7993', name: 'Video Amusement Game Supplies' }, + { code: '7994', name: 'Video Game Arcades' }, + { code: '7841', name: 'Video Tape Rental Stores' }, + { code: '8249', name: 'Vocational/Trade Schools' }, + { code: '7631', name: 'Watch/Jewelry Repair' }, + { code: '7692', name: 'Welding Repair' }, + { code: '5300', name: 'Wholesale Clubs' }, + { code: '5698', name: 'Wig and Toupee Stores' }, + { code: '4829', name: 'Wires, Money Orders' }, + { code: '5631', name: 'Womens Accessory and Specialty Shops' }, + { code: '5621', name: 'Womens Ready-To-Wear Stores' }, + { code: '5935', name: 'Wrecking and Salvage Yards' } + ]) +} + +function prepareAccounts (db) { + const insertAccount = db.prepare('INSERT INTO accounts (accountId, accountNumber, accountName, referenceName, productName) VALUES (@accountId, @accountNumber, @accountName, @referenceName, @productName)') + + const insertManyAccounts = db.transaction((accounts2) => { + for (const account of accounts2) insertAccount.run(account) + }) + + insertManyAccounts([ + { accountId: '4675778129910189600000003', accountNumber: '10012420003', accountName: 'Mr J Soap', referenceName: 'Mr J Soap', productName: 'Private Bank Account' }, + { accountId: '4675778129910189600000004', accountNumber: '10012420004', accountName: 'Mr J Soap', referenceName: 'Mr J Soap', productName: 'PrimeSaver' }, + { accountId: '4675778129910189600000005', accountNumber: '10012420005', accountName: 'Mr J Soap', referenceName: 'Mr J Soap', productName: 'Cash Management Account' }, + { accountId: '4675778129910189600000006', accountNumber: '10012420006', accountName: 'Mr J Soap', referenceName: 'Mr J Soap', productName: 'Mortgage Loan Account' }, + { accountId: '4675778129910189600000007', accountNumber: '10012420007', accountName: 'Mr J Soap', referenceName: 'Mr J Soap', productName: 'Instalment Sale Loan Account' } + ]) +} + +function prepareTransactions (db) { + const insertTransaction = db.prepare('INSERT INTO transactions (accountId, type, transactionType, status, description, cardNumber, postedOrder, postingDate, valueDate, actionDate, transactionDate, amount, runningBalance) VALUES (@accountId, @type, @transactionType, @status, @description, @cardNumber, @postedOrder, @postingDate, @valueDate, @actionDate, @transactionDate, @amount, @runningBalance)') + + const insertManyTransactions = db.transaction((transactions2) => { + for (const transaction of transactions2) insertTransaction.run(transaction) + }) + + const accountId = '4675778129910189600000003' + insertManyTransactions([ + { accountId, type: 'DEBIT', transactionType: 'CardPurchases', status: 'POSTED', description: 'HTTP://WWW.UBEREATS.CO PARKTOWN NOR ZA', cardNumber: '402167xxxxxx9999', postedOrder: 0, postingDate: '2023-01-22', valueDate: '2022-05-15', actionDate: '2022-04-24', transactionDate: '2022-04-21', amount: '40.99', runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'CardPurchases', status: 'POSTED', description: 'HTTP://WWW.UBEREATS.CO PARKTOWN NOR ZA', cardNumber: '402167xxxxxx9999', postedOrder: 0, postingDate: '2023-01-22', valueDate: '2022-05-15', actionDate: '2022-04-24', transactionDate: '2022-04-21', amount: 406.9, runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'FeesAndInterest', status: 'POSTED', description: 'MONTHLY SERVICE CHARGE', cardNumber: '', postedOrder: 0, postingDate: '2023-01-16', valueDate: '2023-01-15', actionDate: '2022-04-24', transactionDate: '2022-04-15', amount: 555, runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'FeesAndInterest', status: 'POSTED', description: 'DEBIT INTEREST', cardNumber: '', postedOrder: 0, postingDate: '2023-01-16', valueDate: '2023-01-15', actionDate: '2022-04-24', transactionDate: '2022-04-15', amount: 0.61, runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'FasterPay', status: 'POSTED', description: 'FASTER PAYMENT FEE', cardNumber: '', postedOrder: 0, postingDate: '2023-01-07', valueDate: '2023-01-15', actionDate: '2022-04-24', transactionDate: '2022-04-07', amount: 40, runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'FasterPay', status: 'POSTED', description: 'BIZ', cardNumber: '', postedOrder: 0, postingDate: '2023-01-07', valueDate: '2022-04-07', actionDate: '2022-04-24', transactionDate: '2022-04-07', amount: 5000, runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'OnlineBankingPayments', status: 'POSTED', description: 'Apple Sauce', cardNumber: '', postedOrder: 0, postingDate: '2023-01-04', valueDate: '2022-04-04', actionDate: '2022-04-24', transactionDate: '2022-04-04', amount: 10000, runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'DebitOrders', status: 'POSTED', description: 'INVESTECPB 40756003 09375003', cardNumber: '', postedOrder: 0, postingDate: '2023-01-01', valueDate: '2022-04-01', actionDate: '2022-04-24', transactionDate: '2022-04-01', amount: '7338.37', runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'DebitOrders', status: 'POSTED', description: 'VIRGIN ACT400396003 178003', cardNumber: '', postedOrder: 0, postingDate: '2023-01-01', valueDate: '2022-04-01', actionDate: '2022-04-24', transactionDate: '2022-04-01', amount: '232.5', runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'FasterPay', status: 'POSTED', description: 'FASTER PAYMENT FEE', cardNumber: '', postedOrder: 0, postingDate: '2022-12-30', valueDate: '2022-04-15', actionDate: '2022-04-24', transactionDate: '2022-03-30', amount: 40, runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'FasterPay', status: 'POSTED', description: 'BIZ', cardNumber: '', postedOrder: 0, postingDate: '2022-12-30', valueDate: '2022-12-30', actionDate: '2022-04-24', transactionDate: '2022-03-30', amount: '25000', runningBalance: 0 }, + { accountId, type: 'DEBIT', transactionType: 'OnlineBankingPayments', status: 'POSTED', description: 'LEVIES', cardNumber: '', postedOrder: 0, postingDate: '2022-12-30', valueDate: '2022-03-30', actionDate: '2022-04-24', transactionDate: '2022-03-30', amount: '4593.63', runningBalance: 0 }, + { accountId, type: 'CREDIT', transactionType: 'Deposits', status: 'POSTED', description: 'SALARY', cardNumber: '', postedOrder: 0, postingDate: '2022-12-25', valueDate: '2022-03-25', actionDate: '2022-04-24', transactionDate: '2022-03-25', amount: '17551.96', runningBalance: 0 } + ]) +} + +function insertTransaction (db, transaction) { + const insertTransaction = db.prepare('INSERT INTO transactions (accountId, type, transactionType, status, description, cardNumber, postedOrder, postingDate, valueDate, actionDate, transactionDate, amount, runningBalance) VALUES (@accountId, @type, @transactionType, @status, @description, @cardNumber, @postedOrder, @postingDate, @valueDate, @actionDate, @transactionDate, @amount, @runningBalance)') + db.transaction(() => { + transaction.postedOrder = 0 + transaction.runningBalance = 0 + insertTransaction.run(transaction) + }) +} + +function accountBalance (db, accountId) { + const transactionsArr = db.prepare('SELECT amount, type FROM transactions WHERE accountId = ? ORDER BY postingDate ASC').all(accountId) + let runningBalance = 0 + for (let j = 0; j < transactionsArr.length; j++) { + if (transactionsArr[j].type === 'CREDIT') { + runningBalance += transactionsArr[j].amount + } else { + runningBalance -= transactionsArr[j].amount + } + } + console.log(runningBalance) + return runningBalance.toFixed(2) +} + +function transactions (db, accountId) { + return db.prepare('SELECT * FROM transactions WHERE accountId = ? ORDER BY postingDate ASC').all(accountId) +} + +function countries (db) { + return db.prepare('SELECT code as Code, name as Name FROM countries').all() +} + +function currencies (db) { + return db.prepare('SELECT code as Code, name as Name FROM currencies').all() +} + +function merchants (db) { + return db.prepare('SELECT code as Code, name as Name FROM merchants').all() +} + +function isValidAccount (db, accountId) { + const accountsArr = db.prepare('SELECT * FROM accounts WHERE accountId = ? LIMIT 1').get(accountId) + if (accountsArr === undefined) { + return false // no account was found + } + return true +} + +module.exports = { + prepareDB, + prepareAccounts, + prepareTransactions, + prepareCountries, + prepareCurrencies, + prepareMerchants, + insertTransaction, + transactions, + countries, + currencies, + merchants, + isValidAccount, + accountBalance +} diff --git a/index.js b/index.js index d1b267f..e662923 100644 --- a/index.js +++ b/index.js @@ -1,679 +1,29 @@ require('dotenv').config() +const port = process.env.PORT || 3000 +const envClientId = process.env.CLIENT_ID +const envClientSecret = process.env.CLIENT_SECRET +const envTokenExpiry = process.env.TOKEN_EXPIRY +const envAuth = process.env.AUTH +const dbFile = process.env.DB_FILE || 'investec.db' +const overdraft = process.env.OVERDRAFT || 5000 + const express = require('express') const cors = require('cors') const dayjs = require('dayjs') -const db = require('better-sqlite3')('foobar.db') - +const { faker } = require('@faker-js/faker') +const db = require('better-sqlite3')(dbFile) +const database = require('./database') db.pragma('journal_mode = WAL') -const prepareDB = () => { - // Create the accounts table - db.exec('CREATE TABLE IF NOT EXISTS accounts (accountId TEXT, accountNumber TEXT, accountName TEXT, referenceName TEXT, productName TEXT)') - // Create the transactions table - db.exec('CREATE TABLE IF NOT EXISTS transactions (accountId TEXT, type TEXT, transactiontype TEXT, status TEXT, description TEXT, cardNumber Number, postedOrder Number, postingDate TEXT, valueDate TEXT, actionDate TEXT, transactionDate TEXT, amount Number, runningBalance Number)') - // Create the countries table - db.exec('CREATE TABLE IF NOT EXISTS countries (code TEXT,name TEXT)') - // Create the currencies table - db.exec('CREATE TABLE IF NOT EXISTS currencies (code TEXT,name TEXT)') - // Create the merchants table - db.exec('CREATE TABLE IF NOT EXISTS merchants (code TEXT,name TEXT)') -} - -const prepareCountries = () => { - const insertCountry = db.prepare('INSERT INTO countries (code,name) VALUES (@code, @name)') - - const insertManyCountries = db.transaction((countryArr) => { - for (const country of countryArr) insertCountry.run(country) - }) - - insertManyCountries([ - { code: 'ZA', name: 'South Africa' }, - { code: 'GB', name: 'United Kingdom of Great Britain and Northern Ireland (the)' }, - { code: 'AF', name: 'Afghanistan' }, - { code: 'AL', name: 'Albania' }, - { code: 'DZ', name: 'Algeria' }, - { code: 'AS', name: 'American Samoa' }, - { code: 'AD', name: 'Andorra' }, - { code: 'AO', name: 'Angola' }, - { code: 'AI', name: 'Anguilla' }, - { code: 'AQ', name: 'Antarctica' }, - { code: 'AG', name: 'Antigua and Barbuda' }, - { code: 'AR', name: 'Argentina' }, - { code: 'AM', name: 'Armenia' }, - { code: 'AW', name: 'Aruba' }, - { code: 'AU', name: 'Australia' }, - { code: 'AT', name: 'Austria' }, - { code: 'AZ', name: 'Azerbaijan' }, - { code: 'BS', name: 'Bahamas (the)' }, - { code: 'BH', name: 'Bahrain' }, - { code: 'BD', name: 'Bangladesh' }, - { code: 'BB', name: 'Barbados' }, - { code: 'BY', name: 'Belarus' }, - { code: 'BE', name: 'Belgium' }, - { code: 'BZ', name: 'Belize' }, - { code: 'BJ', name: 'Benin' }, - { code: 'BM', name: 'Bermuda' }, - { code: 'BT', name: 'Bhutan' }, - { code: 'BO', name: 'Bolivia (Plurinational State of)' }, - { code: 'BQ', name: 'Bonaire, Sint Eustatius and Saba' }, - { code: 'BA', name: 'Bosnia and Herzegovina' }, - { code: 'BW', name: 'Botswana' }, - { code: 'BV', name: 'Bouvet Island' }, - { code: 'BR', name: 'Brazil' }, - { code: 'IO', name: 'British Indian Ocean Territory (the)' }, - { code: 'BN', name: 'Brunei Darussalam' }, - { code: 'BG', name: 'Bulgaria' }, - { code: 'BF', name: 'Burkina Faso' }, - { code: 'BI', name: 'Burundi' }, - { code: 'CV', name: 'Cabo Verde' }, - { code: 'KH', name: 'Cambodia' }, - { code: 'CM', name: 'Cameroon' }, - { code: 'CA', name: 'Canada' }, - { code: 'KY', name: 'Cayman Islands (the)' }, - { code: 'CF', name: 'Central African Republic (the)' }, - { code: 'TD', name: 'Chad' }, - { code: 'CL', name: 'Chile' }, - { code: 'CN', name: 'China' }, - { code: 'CX', name: 'Christmas Island' }, - { code: 'CC', name: 'Cocos (Keeling) Islands (the)' }, - { code: 'CO', name: 'Colombia' }, - { code: 'KM', name: 'Comoros (the)' }, - { code: 'CD', name: 'Congo (the Democratic Republic of the)' }, - { code: 'CG', name: 'Congo (the)' }, - { code: 'CK', name: 'Cook Islands (the)' }, - { code: 'CR', name: 'Costa Rica' }, - { code: 'HR', name: 'Croatia' }, - { code: 'CU', name: 'Cuba' }, - { code: 'CW', name: 'Curaçao' }, - { code: 'CY', name: 'Cyprus' }, - { code: 'CZ', name: 'Czechia' }, - { code: 'CI', name: "Côte d'Ivoire" }, - { code: 'DK', name: 'Denmark' }, - { code: 'DJ', name: 'Djibouti' }, - { code: 'DM', name: 'Dominica' }, - { code: 'DO', name: 'Dominican Republic (the)' }, - { code: 'EC', name: 'Ecuador' }, - { code: 'EG', name: 'Egypt' }, - { code: 'SV', name: 'El Salvador' }, - { code: 'GQ', name: 'Equatorial Guinea' }, - { code: 'ER', name: 'Eritrea' }, - { code: 'EE', name: 'Estonia' }, - { code: 'SZ', name: 'Eswatini' }, - { code: 'ET', name: 'Ethiopia' }, - { code: 'FK', name: 'Falkland Islands (the) [Malvinas]' }, - { code: 'FO', name: 'Faroe Islands (the)' }, - { code: 'FJ', name: 'Fiji' }, - { code: 'FI', name: 'Finland' }, - { code: 'FR', name: 'France' }, - { code: 'GF', name: 'French Guiana' }, - { code: 'PF', name: 'French Polynesia' }, - { code: 'TF', name: 'French Southern Territories (the)' }, - { code: 'GA', name: 'Gabon' }, - { code: 'GM', name: 'Gambia (the)' }, - { code: 'GE', name: 'Georgia' }, - { code: 'DE', name: 'Germany' }, - { code: 'GH', name: 'Ghana' }, - { code: 'GI', name: 'Gibraltar' }, - { code: 'GR', name: 'Greece' }, - { code: 'GL', name: 'Greenland' }, - { code: 'GD', name: 'Grenada' }, - { code: 'GP', name: 'Guadeloupe' }, - { code: 'GU', name: 'Guam' }, - { code: 'GT', name: 'Guatemala' }, - { code: 'GG', name: 'Guernsey' }, - { code: 'GN', name: 'Guinea' }, - { code: 'GW', name: 'Guinea-Bissau' }, - { code: 'GY', name: 'Guyana' }, - { code: 'HT', name: 'Haiti' }, - { code: 'HM', name: 'Heard Island and McDonald Islands' }, - { code: 'VA', name: 'Holy See (the)' }, - { code: 'HN', name: 'Honduras' }, - { code: 'HK', name: 'Hong Kong' }, - { code: 'HU', name: 'Hungary' }, - { code: 'IS', name: 'Iceland' }, - { code: 'IN', name: 'India' }, - { code: 'ID', name: 'Indonesia' }, - { code: 'IR', name: 'Iran (Islamic Republic of)' }, - { code: 'IQ', name: 'Iraq' }, - { code: 'IE', name: 'Ireland' }, - { code: 'IM', name: 'Isle of Man' }, - { code: 'IL', name: 'Israel' }, - { code: 'IT', name: 'Italy' }, - { code: 'JM', name: 'Jamaica' }, - { code: 'JP', name: 'Japan' }, - { code: 'JE', name: 'Jersey' }, - { code: 'JO', name: 'Jordan' }, - { code: 'KZ', name: 'Kazakhstan' }, - { code: 'KE', name: 'Kenya' }, - { code: 'KI', name: 'Kiribati' }, - { code: 'KP', name: "Korea (the Democratic People's Republic of)" }, - { code: 'KR', name: 'Korea (the Republic of)' }, - { code: 'KW', name: 'Kuwait' }, - { code: 'KG', name: 'Kyrgyzstan' }, - { code: 'LA', name: "Lao People's Democratic Republic (the)" }, - { code: 'LV', name: 'Latvia' }, - { code: 'LB', name: 'Lebanon' }, - { code: 'LS', name: 'Lesotho' }, - { code: 'LR', name: 'Liberia' }, - { code: 'LY', name: 'Libya' }, - { code: 'LI', name: 'Liechtenstein' }, - { code: 'LT', name: 'Lithuania' }, - { code: 'LU', name: 'Luxembourg' }, - { code: 'MO', name: 'Macao' }, - { code: 'MK', name: 'Macedonia (the former Yugoslav Republic of)' }, - { code: 'MG', name: 'Madagascar' }, - { code: 'MW', name: 'Malawi' }, - { code: 'MY', name: 'Malaysia' }, - { code: 'MV', name: 'Maldives' }, - { code: 'ML', name: 'Mali' }, - { code: 'MT', name: 'Malta' }, - { code: 'MH', name: 'Marshall Islands (the)' }, - { code: 'MQ', name: 'Martinique' }, - { code: 'MR', name: 'Mauritania' }, - { code: 'MU', name: 'Mauritius' }, - { code: 'YT', name: 'Mayotte' }, - { code: 'MX', name: 'Mexico' }, - { code: 'FM', name: 'Micronesia (Federated States of)' }, - { code: 'MD', name: 'Moldova (the Republic of)' }, - { code: 'MC', name: 'Monaco' }, - { code: 'MN', name: 'Mongolia' }, - { code: 'ME', name: 'Montenegro' }, - { code: 'MS', name: 'Montserrat' }, - { code: 'MA', name: 'Morocco' }, - { code: 'MZ', name: 'Mozambique' }, - { code: 'MM', name: 'Myanmar' }, - { code: 'NA', name: 'Namibia' }, - { code: 'NR', name: 'Nauru' }, - { code: 'NP', name: 'Nepal' }, - { code: 'NL', name: 'Netherlands (the)' }, - { code: 'NC', name: 'New Caledonia' }, - { code: 'NZ', name: 'New Zealand' }, - { code: 'NI', name: 'Nicaragua' }, - { code: 'NE', name: 'Niger (the)' }, - { code: 'NG', name: 'Nigeria' }, - { code: 'NU', name: 'Niue' }, - { code: 'NF', name: 'Norfolk Island' }, - { code: 'MP', name: 'Northern Mariana Islands (the)' }, - { code: 'NO', name: 'Norway' }, - { code: 'OM', name: 'Oman' }, - { code: 'PK', name: 'Pakistan' }, - { code: 'PW', name: 'Palau' }, - { code: 'PS', name: 'Palestine, State of' }, - { code: 'PA', name: 'Panama' }, - { code: 'PG', name: 'Papua New Guinea' }, - { code: 'PY', name: 'Paraguay' }, - { code: 'PE', name: 'Peru' }, - { code: 'PH', name: 'Philippines (the)' }, - { code: 'PN', name: 'Pitcairn' }, - { code: 'PL', name: 'Poland' }, - { code: 'PT', name: 'Portugal' }, - { code: 'PR', name: 'Puerto Rico' }, - { code: 'QA', name: 'Qatar' }, - { code: 'RO', name: 'Romania' }, - { code: 'RU', name: 'Russian Federation (the)' }, - { code: 'RW', name: 'Rwanda' }, - { code: 'RE', name: 'Réunion' }, - { code: 'BL', name: 'Saint Barthélemy' }, - { code: 'SH', name: 'Saint Helena, Ascension and Tristan da Cunha' }, - { code: 'KN', name: 'Saint Kitts and Nevis' }, - { code: 'LC', name: 'Saint Lucia' }, - { code: 'MF', name: 'Saint Martin (French part)' }, - { code: 'PM', name: 'Saint Pierre and Miquelon' }, - { code: 'VC', name: 'Saint Vincent and the Grenadines' }, - { code: 'WS', name: 'Samoa' }, - { code: 'SM', name: 'San Marino' }, - { code: 'ST', name: 'Sao Tome and Principe' }, - { code: 'SA', name: 'Saudi Arabia' }, - { code: 'SN', name: 'Senegal' }, - { code: 'RS', name: 'Serbia' }, - { code: 'SC', name: 'Seychelles' }, - { code: 'SL', name: 'Sierra Leone' }, - { code: 'SG', name: 'Singapore' }, - { code: 'SX', name: 'Sint Maarten (Dutch part)' }, - { code: 'SK', name: 'Slovakia' }, - { code: 'SI', name: 'Slovenia' }, - { code: 'SB', name: 'Solomon Islands' }, - { code: 'SO', name: 'Somalia' }, - { code: 'GS', name: 'South Georgia and the South Sandwich Islands' }, - { code: 'SS', name: 'South Sudan' }, - { code: 'ES', name: 'Spain' }, - { code: 'LK', name: 'Sri Lanka' }, - { code: 'SD', name: 'Sudan (the)' }, - { code: 'SR', name: 'Suriname' }, - { code: 'SJ', name: 'Svalbard and Jan Mayen' }, - { code: 'SE', name: 'Sweden' }, - { code: 'CH', name: 'Switzerland' }, - { code: 'SY', name: 'Syrian Arab Republic' }, - { code: 'TW', name: 'Taiwan (Province of China)' }, - { code: 'TJ', name: 'Tajikistan' }, - { code: 'TZ', name: 'Tanzania, United Republic of' }, - { code: 'TH', name: 'Thailand' }, - { code: 'TL', name: 'Timor-Leste' }, - { code: 'TG', name: 'Togo' }, - { code: 'TK', name: 'Tokelau' }, - { code: 'TO', name: 'Tonga' }, - { code: 'TT', name: 'Trinidad and Tobago' }, - { code: 'TN', name: 'Tunisia' }, - { code: 'TR', name: 'Turkey' }, - { code: 'TM', name: 'Turkmenistan' }, - { code: 'TC', name: 'Turks and Caicos Islands (the)' }, - { code: 'TV', name: 'Tuvalu' }, - { code: 'UG', name: 'Uganda' }, - { code: 'UA', name: 'Ukraine' }, - { code: 'AE', name: 'United Arab Emirates (the)' }, - { code: 'UM', name: 'United States Minor Outlying Islands (the)' }, - { code: 'US', name: 'United States of America (the)' }, - { code: 'UY', name: 'Uruguay' }, - { code: 'UZ', name: 'Uzbekistan' }, - { code: 'VU', name: 'Vanuatu' }, - { code: 'VE', name: 'Venezuela (Bolivarian Republic of)' }, - { code: 'VN', name: 'Viet Nam' }, - { code: 'VG', name: 'Virgin Islands (British)' }, - { code: 'VI', name: 'Virgin Islands (U.S.)' }, - { code: 'WF', name: 'Wallis and Futuna' }, - { code: 'EH', name: 'Western Sahara' }, - { code: 'YE', name: 'Yemen' }, - { code: 'ZM', name: 'Zambia' }, - { code: 'ZW', name: 'Zimbabwe' }, - { code: 'AX', name: 'Åland Islands' }, - { code: 'undefined', name: 'undefined' } - ]) -} - -const prepareCurrencies = () => { - const insertCurrency = db.prepare('INSERT INTO currencies (code,name) VALUES (@code, @name)') - - const insertManyCurrencies = db.transaction((currencyArr) => { - for (const currency of currencyArr) insertCurrency.run(currency) - }) - - insertManyCurrencies([ - { code: 'ZAR', name: 'South African Rand' }, - { code: 'GBP', name: 'British Pound' }, - { code: 'USD', name: 'United States Dollar' }, - { code: 'EUR', name: 'Euro' }, - { code: 'AUD', name: 'Australian Dollar' }, - { code: 'CHF', name: 'Swiss Franc' }, - { code: 'CAD', name: 'Canadian Dollar' }, - { code: 'DKK', name: 'Danish Krone' }, - { code: 'HKD', name: 'Hong Kong Dollar' }, - { code: 'JPY', name: 'Japanese Yen' }, - { code: 'MUR', name: 'Mauritius Rupee' }, - { code: 'NZD', name: 'New Zealand Dollar' }, - { code: 'NOK', name: 'Norwegian Krone' }, - { code: 'SGD', name: 'Singapore Dollar' }, - { code: 'SEK', name: 'Swedish Krona' }, - { code: 'AED', name: 'Emirati Dirham' }, - { code: 'BWP', name: 'Botswana Pula' }, - { code: 'INR', name: 'Indian Rupee' }, - { code: 'KES', name: 'Kenyan Shilling' }, - { code: 'NGN', name: 'Nigerian Naira' }, - { code: 'RUB', name: 'Russian Ruble' }, - { code: 'TRY', name: 'Turkish Lira' } - ]) -} - -const prepareMerchants = () => { - const insertMerchant = db.prepare('INSERT INTO merchants (code,name) VALUES (@code, @name)') - - const insertManyMerchants = db.transaction((merchantArr) => { - for (const merchant of merchantArr) insertMerchant.run(merchant) - }) - - insertManyMerchants([ - { code: '7623', name: 'A/C, Refrigeration Repair' }, - { code: '8931', name: 'Accounting/Bookkeeping Services' }, - { code: '7311', name: 'Advertising Services' }, - { code: '763', name: 'Agricultural Cooperative' }, - { code: '4511', name: 'Airlines, Air Carriers' }, - { code: '4582', name: 'Airports, Flying Fields' }, - { code: '4119', name: 'Ambulance Services' }, - { code: '7996', name: 'Amusement Parks/Carnivals' }, - { code: '5937', name: 'Antique Reproductions' }, - { code: '5932', name: 'Antique Shops' }, - { code: '7998', name: 'Aquariums' }, - { code: '8911', name: 'Architectural/Surveying Services' }, - { code: '5971', name: 'Art Dealers and Galleries' }, - { code: '5970', name: 'Artists Supply and Craft Shops' }, - { code: '7531', name: 'Auto Body Repair Shops' }, - { code: '7535', name: 'Auto Paint Shops' }, - { code: '7538', name: 'Auto Service Shops' }, - { code: '5531', name: 'Auto and Home Supply Stores' }, - { code: '6011', name: 'Automated Cash Disburse' }, - { code: '5542', name: 'Automated Fuel Dispensers' }, - { code: '8675', name: 'Automobile Associations' }, - { code: '5533', name: 'Automotive Parts and Accessories Stores' }, - { code: '5532', name: 'Automotive Tire Stores' }, - { code: '9223', name: 'Bail and Bond Payments (payment to the surety for the bond, not the actual bond paid to the government agency)' }, - { code: '5462', name: 'Bakeries' }, - { code: '7929', name: 'Bands, Orchestras' }, - { code: '7230', name: 'Barber and Beauty Shops' }, - { code: '7995', name: 'Betting/Casino Gambling' }, - { code: '5940', name: 'Bicycle Shops' }, - { code: '7932', name: 'Billiard/Pool Establishments' }, - { code: '5551', name: 'Boat Dealers' }, - { code: '4457', name: 'Boat Rentals and Leases' }, - { code: '5942', name: 'Book Stores' }, - { code: '5192', name: 'Books, Periodicals, and Newspapers' }, - { code: '7933', name: 'Bowling Alleys' }, - { code: '4131', name: 'Bus Lines' }, - { code: '8244', name: 'Business/Secretarial Schools' }, - { code: '7278', name: 'Buying/Shopping Services' }, - { code: '4899', name: 'Cable, Satellite, and Other Pay Television and Radio' }, - { code: '5946', name: 'Camera and Photographic Supply Stores' }, - { code: '5441', name: 'Candy, Nut, and Confectionery Stores' }, - { code: '7512', name: 'Car Rental Agencies' }, - { code: '7542', name: 'Car Washes' }, - { code: '5511', name: 'Car and Truck Dealers (New & Used) Sales, Service, Repairs Parts and Leasing' }, - { code: '5521', name: 'Car and Truck Dealers (Used Only) Sales, Service, Repairs Parts and Leasing' }, - { code: '1750', name: 'Carpentry Services' }, - { code: '7217', name: 'Carpet/Upholstery Cleaning' }, - { code: '5811', name: 'Caterers' }, - { code: '8398', name: 'Charitable and Social Service Organizations - Fundraising' }, - { code: '5169', name: 'Chemicals and Allied Products (Not Elsewhere Classified)' }, - { code: '5641', name: 'Chidrens and Infants Wear Stores' }, - { code: '8351', name: 'Child Care Services' }, - { code: '8049', name: 'Chiropodists, Podiatrists' }, - { code: '8041', name: 'Chiropractors' }, - { code: '5993', name: 'Cigar Stores and Stands' }, - { code: '8641', name: 'Civic, Social, Fraternal Associations' }, - { code: '7349', name: 'Cleaning and Maintenance' }, - { code: '7296', name: 'Clothing Rental' }, - { code: '8220', name: 'Colleges, Universities' }, - { code: '5046', name: 'Commercial Equipment (Not Elsewhere Classified)' }, - { code: '5139', name: 'Commercial Footwear' }, - { code: '7333', name: 'Commercial Photography, Art and Graphics' }, - { code: '4111', name: 'Commuter Transport, Ferries' }, - { code: '4816', name: 'Computer Network Services' }, - { code: '7372', name: 'Computer Programming' }, - { code: '7379', name: 'Computer Repair' }, - { code: '5734', name: 'Computer Software Stores' }, - { code: '5045', name: 'Computers, Peripherals, and Software' }, - { code: '1771', name: 'Concrete Work Services' }, - { code: '5039', name: 'Construction Materials (Not Elsewhere Classified)' }, - { code: '7392', name: 'Consulting, Public Relations' }, - { code: '8241', name: 'Correspondence Schools' }, - { code: '5977', name: 'Cosmetic Stores' }, - { code: '7277', name: 'Counseling Services' }, - { code: '7997', name: 'Country Clubs' }, - { code: '4215', name: 'Courier Services' }, - { code: '9211', name: 'Court Costs, Including Alimony and Child Support - Courts of Law' }, - { code: '7321', name: 'Credit Reporting Agencies' }, - { code: '4411', name: 'Cruise Lines' }, - { code: '5451', name: 'Dairy Products Stores' }, - { code: '7911', name: 'Dance Hall, Studios, Schools' }, - { code: '7273', name: 'Dating/Escort Services' }, - { code: '8021', name: 'Dentists, Orthodontists' }, - { code: '5311', name: 'Department Stores' }, - { code: '7393', name: 'Detective Agencies' }, - { code: '5964', name: 'Direct Marketing - Catalog Merchant' }, - { code: '5965', name: 'Direct Marketing - Combination Catalog and Retail Merchant' }, - { code: '5967', name: 'Direct Marketing - Inbound Telemarketing' }, - { code: '5960', name: 'Direct Marketing - Insurance Services' }, - { code: '5969', name: 'Direct Marketing - Other' }, - { code: '5966', name: 'Direct Marketing - Outbound Telemarketing' }, - { code: '5968', name: 'Direct Marketing - Subscription' }, - { code: '5962', name: 'Direct Marketing - Travel' }, - { code: '5310', name: 'Discount Stores' }, - { code: '8011', name: 'Doctors' }, - { code: '5963', name: 'Door-To-Door Sales' }, - { code: '5714', name: 'Drapery, Window Covering, and Upholstery Stores' }, - { code: '5813', name: 'Drinking Places' }, - { code: '5912', name: 'Drug Stores and Pharmacies' }, - { code: '5122', name: 'Drugs, Drug Proprietaries, and Druggist Sundries' }, - { code: '7216', name: 'Dry Cleaners' }, - { code: '5099', name: 'Durable Goods (Not Elsewhere Classified)' }, - { code: '5309', name: 'Duty Free Stores' }, - { code: '5812', name: 'Eating Places, Restaurants' }, - { code: '8299', name: 'Educational Services' }, - { code: '5997', name: 'Electric Razor Stores' }, - { code: '5065', name: 'Electrical Parts and Equipment' }, - { code: '1731', name: 'Electrical Services' }, - { code: '7622', name: 'Electronics Repair Shops' }, - { code: '5732', name: 'Electronics Stores' }, - { code: '8211', name: 'Elementary, Secondary Schools' }, - { code: '7361', name: 'Employment/Temp Agencies' }, - { code: '7394', name: 'Equipment Rental' }, - { code: '7342', name: 'Exterminating Services' }, - { code: '5651', name: 'Family Clothing Stores' }, - { code: '5814', name: 'Fast Food Restaurants' }, - { code: '6012', name: 'Financial Institutions' }, - { code: '9222', name: 'Fines - Government Administrative Entities' }, - { code: '5718', name: 'Fireplace, Fireplace Screens, and Accessories Stores' }, - { code: '5713', name: 'Floor Covering Stores' }, - { code: '5992', name: 'Florists' }, - { code: '5193', name: 'Florists Supplies, Nursery Stock, and Flowers' }, - { code: '5422', name: 'Freezer and Locker Meat Provisioners' }, - { code: '5983', name: 'Fuel Dealers (Non Automotive)' }, - { code: '7261', name: 'Funeral Services, Crematories' }, - { code: '7641', name: 'Furniture Repair, Refinishing' }, - { code: '5712', name: 'Furniture, Home Furnishings, and Equipment Stores, Except Appliances' }, - { code: '5681', name: 'Furriers and Fur Shops' }, - { code: '1520', name: 'General Services' }, - { code: '5947', name: 'Gift, Card, Novelty, and Souvenir Shops' }, - { code: '5231', name: 'Glass, Paint, and Wallpaper Stores' }, - { code: '5950', name: 'Glassware, Crystal Stores' }, - { code: '7992', name: 'Golf Courses - Public' }, - { code: '9399', name: 'Government Services (Not Elsewhere Classified)' }, - { code: '5411', name: 'Grocery Stores, Supermarkets' }, - { code: '5251', name: 'Hardware Stores' }, - { code: '5072', name: 'Hardware, Equipment, and Supplies' }, - { code: '7298', name: 'Health and Beauty Spas' }, - { code: '5975', name: 'Hearing Aids Sales and Supplies' }, - { code: '1711', name: 'Heating, Plumbing, A/C' }, - { code: '5945', name: 'Hobby, Toy, and Game Shops' }, - { code: '5200', name: 'Home Supply Warehouse Stores' }, - { code: '8062', name: 'Hospitals' }, - { code: '7011', name: 'Hotels, Motels, and Resorts' }, - { code: '5722', name: 'Household Appliance Stores' }, - { code: '5085', name: 'Industrial Supplies (Not Elsewhere Classified)' }, - { code: '7375', name: 'Information Retrieval Services' }, - { code: '6399', name: 'Insurance - Default' }, - { code: '6300', name: 'Insurance Underwriting, Premiums' }, - { code: '9950', name: 'Intra-Company Purchases' }, - { code: '5944', name: 'Jewelry Stores, Watches, Clocks, and Silverware Stores' }, - { code: '780', name: 'Landscaping Services' }, - { code: '7211', name: 'Laundries' }, - { code: '7210', name: 'Laundry, Cleaning Services' }, - { code: '8111', name: 'Legal Services, Attorneys' }, - { code: '5948', name: 'Luggage and Leather Goods Stores' }, - { code: '5211', name: 'Lumber, Building Materials Stores' }, - { code: '6010', name: 'Manual Cash Disburse' }, - { code: '4468', name: 'Marinas, Service and Supplies' }, - { code: '1740', name: 'Masonry, Stonework, and Plaster' }, - { code: '7297', name: 'Massage Parlors' }, - { code: '8099', name: 'Medical Services' }, - { code: '8071', name: 'Medical and Dental Labs' }, - { code: '5047', name: 'Medical, Dental, Ophthalmic, and Hospital Equipment and Supplies' }, - { code: '8699', name: 'Membership Organizations' }, - { code: '5611', name: 'Mens and Boys Clothing and Accessories Stores' }, - { code: '5691', name: 'Mens, Womens Clothing Stores' }, - { code: '5051', name: 'Metal Service Centers' }, - { code: '5699', name: 'Miscellaneous Apparel and Accessory Shops' }, - { code: '5599', name: 'Miscellaneous Auto Dealers' }, - { code: '7399', name: 'Miscellaneous Business Services' }, - { code: '5499', name: 'Miscellaneous Food Stores - Convenience Stores and Specialty Markets' }, - { code: '5399', name: 'Miscellaneous General Merchandise' }, - { code: '7299', name: 'Miscellaneous General Services' }, - { code: '5719', name: 'Miscellaneous Home Furnishing Specialty Stores' }, - { code: '2741', name: 'Miscellaneous Publishing and Printing' }, - { code: '7999', name: 'Miscellaneous Recreation Services' }, - { code: '7699', name: 'Miscellaneous Repair Shops' }, - { code: '5999', name: 'Miscellaneous Specialty Retail' }, - { code: '5271', name: 'Mobile Home Dealers' }, - { code: '7832', name: 'Motion Picture Theaters' }, - { code: '4214', name: 'Motor Freight Carriers and Trucking - Local and Long Distance, Moving and Storage Companies, and Local Delivery Services' }, - { code: '5592', name: 'Motor Homes Dealers' }, - { code: '5013', name: 'Motor Vehicle Supplies and New Parts' }, - { code: '5571', name: 'Motorcycle Shops and Dealers' }, - { code: '5561', name: 'Motorcycle Shops, Dealers' }, - { code: '5733', name: 'Music Stores-Musical Instruments, Pianos, and Sheet Music' }, - { code: '5994', name: 'News Dealers and Newsstands' }, - { code: '6051', name: 'Non-FI, Money Orders' }, - { code: '6540', name: 'Non-FI, Stored Value Card Purchase/Load' }, - { code: '5199', name: 'Nondurable Goods (Not Elsewhere Classified)' }, - { code: '5261', name: 'Nurseries, Lawn and Garden Supply Stores' }, - { code: '8050', name: 'Nursing/Personal Care' }, - { code: '5021', name: 'Office and Commercial Furniture' }, - { code: '8043', name: 'Opticians, Eyeglasses' }, - { code: '8042', name: 'Optometrists, Ophthalmologist' }, - { code: '5976', name: 'Orthopedic Goods - Prosthetic Devices' }, - { code: '8031', name: 'Osteopaths' }, - { code: '5921', name: 'Package Stores-Beer, Wine, and Liquor' }, - { code: '5198', name: 'Paints, Varnishes, and Supplies' }, - { code: '7523', name: 'Parking Lots, Garages' }, - { code: '4112', name: 'Passenger Railways' }, - { code: '5933', name: 'Pawn Shops' }, - { code: '5995', name: 'Pet Shops, Pet Food, and Supplies' }, - { code: '5172', name: 'Petroleum and Petroleum Products' }, - { code: '7395', name: 'Photo Developing' }, - { code: '7221', name: 'Photographic Studios' }, - { code: '5044', name: 'Photographic, Photocopy, Microfilm Equipment, and Supplies' }, - { code: '7829', name: 'Picture/Video Production' }, - { code: '5131', name: 'Piece Goods, Notions, and Other Dry Goods' }, - { code: '5074', name: 'Plumbing, Heating Equipment, and Supplies' }, - { code: '8651', name: 'Political Organizations' }, - { code: '9402', name: 'Postal Services - Government Only' }, - { code: '5094', name: 'Precious Stones and Metals, Watches and Jewelry' }, - { code: '8999', name: 'Professional Services' }, - { code: '4225', name: 'Public Warehousing and Storage - Farm Products, Refrigerated Goods, Household Goods, and Storage' }, - { code: '7338', name: 'Quick Copy, Repro, and Blueprint' }, - { code: '4011', name: 'Railroads' }, - { code: '6513', name: 'Real Estate Agents and Managers - Rentals' }, - { code: '5735', name: 'Record Stores' }, - { code: '7519', name: 'Recreational Vehicle Rentals' }, - { code: '5973', name: 'Religious Goods Stores' }, - { code: '8661', name: 'Religious Organizations' }, - { code: '1761', name: 'Roofing/Siding, Sheet Metal' }, - { code: '7339', name: 'Secretarial Support Services' }, - { code: '6211', name: 'Security Brokers/Dealers' }, - { code: '5541', name: 'Service Stations' }, - { code: '5949', name: 'Sewing, Needlework, Fabric, and Piece Goods Stores' }, - { code: '7251', name: 'Shoe Repair/Hat Cleaning' }, - { code: '5661', name: 'Shoe Stores' }, - { code: '7629', name: 'Small Appliance Repair' }, - { code: '5598', name: 'Snowmobile Dealers' }, - { code: '1799', name: 'Special Trade Services' }, - { code: '2842', name: 'Specialty Cleaning' }, - { code: '5941', name: 'Sporting Goods Stores' }, - { code: '7032', name: 'Sporting/Recreation Camps' }, - { code: '7941', name: 'Sports Clubs/Fields' }, - { code: '5655', name: 'Sports and Riding Apparel Stores' }, - { code: '5972', name: 'Stamp and Coin Stores' }, - { code: '5111', name: 'Stationary, Office Supplies, Printing and Writing Paper' }, - { code: '5943', name: 'Stationery Stores, Office, and School Supply Stores' }, - { code: '5996', name: 'Swimming Pools Sales' }, - { code: '4723', name: 'TUI Travel - Germany' }, - { code: '5697', name: 'Tailors, Alterations' }, - { code: '9311', name: 'Tax Payments - Government Agencies' }, - { code: '7276', name: 'Tax Preparation Services' }, - { code: '4121', name: 'Taxicabs/Limousines' }, - { code: '4812', name: 'Telecommunication Equipment and Telephone Sales' }, - { code: '4814', name: 'Telecommunication Services' }, - { code: '4821', name: 'Telegraph Services' }, - { code: '5998', name: 'Tent and Awning Shops' }, - { code: '8734', name: 'Testing Laboratories' }, - { code: '7922', name: 'Theatrical Ticket Agencies' }, - { code: '7012', name: 'Timeshares' }, - { code: '7534', name: 'Tire Retreading and Repair' }, - { code: '4784', name: 'Tolls/Bridge Fees' }, - { code: '7991', name: 'Tourist Attractions and Exhibits' }, - { code: '7549', name: 'Towing Services' }, - { code: '7033', name: 'Trailer Parks, Campgrounds' }, - { code: '4789', name: 'Transportation Services (Not Elsewhere Classified)' }, - { code: '4722', name: 'Travel Agencies, Tour Operators' }, - { code: '7511', name: 'Truck StopIteration' }, - { code: '7513', name: 'Truck/Utility Trailer Rentals' }, - { code: '2791', name: 'Typesetting, Plate Making, and Related Services' }, - { code: '5978', name: 'Typewriter Stores' }, - { code: '9405', name: 'U.S. Federal Government Agencies or Departments' }, - { code: '5137', name: 'Uniforms, Commercial Clothing' }, - { code: '5931', name: 'Used Merchandise and Secondhand Stores' }, - { code: '4900', name: 'Utilities' }, - { code: '5331', name: 'Variety Stores' }, - { code: '742', name: 'Veterinary Services' }, - { code: '7993', name: 'Video Amusement Game Supplies' }, - { code: '7994', name: 'Video Game Arcades' }, - { code: '7841', name: 'Video Tape Rental Stores' }, - { code: '8249', name: 'Vocational/Trade Schools' }, - { code: '7631', name: 'Watch/Jewelry Repair' }, - { code: '7692', name: 'Welding Repair' }, - { code: '5300', name: 'Wholesale Clubs' }, - { code: '5698', name: 'Wig and Toupee Stores' }, - { code: '4829', name: 'Wires, Money Orders' }, - { code: '5631', name: 'Womens Accessory and Specialty Shops' }, - { code: '5621', name: 'Womens Ready-To-Wear Stores' }, - { code: '5935', name: 'Wrecking and Salvage Yards' } - ]) -} - -const prepareAccounts = () => { - const insertAccount = db.prepare('INSERT INTO accounts (accountId, accountNumber, accountName, referenceName, productName) VALUES (@accountId, @accountNumber, @accountName, @referenceName, @productName)') - - const insertManyAccounts = db.transaction((accounts2) => { - for (const account of accounts2) insertAccount.run(account) - }) - - insertManyAccounts([ - { accountId: '4675778129910189600000003', accountNumber: '10012420003', accountName: 'My Account', referenceName: 'My Account', productName: 'My Account' }, - { accountId: '4675778129910189600000004', accountNumber: '10012420004', accountName: 'My Account', referenceName: 'My Account', productName: 'My Account' }, - { accountId: '4675778129910189600000005', accountNumber: '10012420005', accountName: 'My Account', referenceName: 'My Account', productName: 'My Account' } - ]) -} - -const prepareTransactions = () => { - const insertTransaction = db.prepare('INSERT INTO transactions (accountId, type, transactionType, status, description, cardNumber, postedOrder, postingDate, valueDate, actionDate, transactionDate, amount, runningBalance) VALUES (@accountId, @type, @transactionType, @status, @description, @cardNumber, @postedOrder, @postingDate, @valueDate, @actionDate, @transactionDate, @amount, @runningBalance)') - - const insertManyTransactions = db.transaction((transactions2) => { - for (const transaction of transactions2) insertTransaction.run(transaction) - }) - - const accountId = '4675778129910189600000003' - insertManyTransactions([ - { accountId, type: 'DEBIT', transactionType: 'CardPurchases', status: 'POSTED', description: 'HTTP://WWW.UBEREATS.CO PARKTOWN NOR ZA', cardNumber: '402167xxxxxx9999', postedOrder: 0, postingDate: '2023-01-22', valueDate: '2022-05-15', actionDate: '2022-04-24', transactionDate: '2022-04-21', amount: '40.99', runningBalance: 0 }, - { accountId, type: 'DEBIT', transactionType: 'CardPurchases', status: 'POSTED', description: 'HTTP://WWW.UBEREATS.CO PARKTOWN NOR ZA', cardNumber: '402167xxxxxx9999', postedOrder: 0, postingDate: '2023-01-22', valueDate: '2022-05-15', actionDate: '2022-04-24', transactionDate: '2022-04-21', amount: 406.9, runningBalance: 0 }, - { accountId, type: 'DEBIT', transactionType: 'FeesAndInterest', status: 'POSTED', description: 'MONTHLY SERVICE CHARGE', cardNumber: '', postedOrder: 0, postingDate: '2023-01-16', valueDate: '2023-01-15', actionDate: '2022-04-24', transactionDate: '2022-04-15', amount: 555, runningBalance: 0 }, - { accountId, type: 'DEBIT', transactionType: 'FeesAndInterest', status: 'POSTED', description: 'DEBIT INTEREST', cardNumber: '', postedOrder: 0, postingDate: '2023-01-16', valueDate: '2023-01-15', actionDate: '2022-04-24', transactionDate: '2022-04-15', amount: 0.61, runningBalance: 0 }, - { accountId, type: 'DEBIT', transactionType: 'FasterPay', status: 'POSTED', description: 'FASTER PAYMENT FEE', cardNumber: '', postedOrder: 0, postingDate: '2023-01-07', valueDate: '2023-01-15', actionDate: '2022-04-24', transactionDate: '2022-04-07', amount: 40, runningBalance: 0 }, - { accountId, type: 'DEBIT', transactionType: 'FasterPay', status: 'POSTED', description: 'BIZ', cardNumber: '', postedOrder: 0, postingDate: '2023-01-07', valueDate: '2022-04-07', actionDate: '2022-04-24', transactionDate: '2022-04-07', amount: 5000, runningBalance: 0 }, - { accountId, type: 'DEBIT', transactionType: 'OnlineBankingPayments', status: 'POSTED', description: 'Apple Sauce', cardNumber: '', postedOrder: 0, postingDate: '2023-01-04', valueDate: '2022-04-04', actionDate: '2022-04-24', transactionDate: '2022-04-04', amount: 10000, runningBalance: 0 }, - { accountId, type: 'DEBIT', transactionType: 'DebitOrders', status: 'POSTED', description: 'INVESTECPB 40756003 09375003', cardNumber: '', postedOrder: 0, postingDate: '2023-01-01', valueDate: '2022-04-01', actionDate: '2022-04-24', transactionDate: '2022-04-01', amount: '7338.37', runningBalance: 0 }, - { accountId, type: 'DEBIT', transactionType: 'DebitOrders', status: 'POSTED', description: 'VIRGIN ACT400396003 178003', cardNumber: '', postedOrder: 0, postingDate: '2023-01-01', valueDate: '2022-04-01', actionDate: '2022-04-24', transactionDate: '2022-04-01', amount: '232.5', runningBalance: 0 }, - { accountId, type: 'DEBIT', transactionType: 'FasterPay', status: 'POSTED', description: 'FASTER PAYMENT FEE', cardNumber: '', postedOrder: 0, postingDate: '2022-12-30', valueDate: '2022-04-15', actionDate: '2022-04-24', transactionDate: '2022-03-30', amount: 40, runningBalance: 0 }, - { accountId, type: 'DEBIT', transactionType: 'FasterPay', status: 'POSTED', description: 'BIZ', cardNumber: '', postedOrder: 0, postingDate: '2022-12-30', valueDate: '2022-12-30', actionDate: '2022-04-24', transactionDate: '2022-03-30', amount: '25000', runningBalance: 0 }, - { accountId, type: 'DEBIT', transactionType: 'OnlineBankingPayments', status: 'POSTED', description: 'LEVIES', cardNumber: '', postedOrder: 0, postingDate: '2022-12-30', valueDate: '2022-03-30', actionDate: '2022-04-24', transactionDate: '2022-03-30', amount: '4593.63', runningBalance: 0 }, - { accountId, type: 'CREDIT', transactionType: 'Deposits', status: 'POSTED', description: 'SALARY', cardNumber: '', postedOrder: 0, postingDate: '2022-12-25', valueDate: '2022-03-25', actionDate: '2022-04-24', transactionDate: '2022-03-25', amount: '17551.96', runningBalance: 0 } - ]) -} - -const insertTransaction = (accountId, type, transactionType, status, description, cardNumber, postingDate, valueDate, actionDate, transactionDate, amount) => { - const insertTransaction = db.prepare('INSERT INTO transactions (accountId, type, transactionType, status, description, cardNumber, postedOrder, postingDate, valueDate, actionDate, transactionDate, amount, runningBalance) VALUES (@accountId, @type, @transactionType, @status, @description, @cardNumber, @postedOrder, @postingDate, @valueDate, @actionDate, @transactionDate, @amount, @runningBalance)') - db.transaction(() => { - insertTransaction.run({ accountId, type, transactionType, status, description, cardNumber, postedOrder: 0, postingDate, valueDate, actionDate, transactionDate, amount, runningBalance: 0 }) - }) -} - -const isValidAccount = (accountId) => { - const accountsArr = db.prepare('SELECT * FROM accounts WHERE accountId = ?').get(accountId) - if (accountsArr === undefined) { - return false // no account was found - } - return true -} - -prepareDB() -prepareAccounts() -prepareTransactions() -prepareCountries() -prepareCurrencies() -prepareMerchants() +// database.prepareDB(db) +// database.prepareAccounts(db) +// database.prepareTransactions(db) +// database.prepareCountries(db) +// database.prepareCurrencies(db) +// database.prepareMerchants(db) const app = express() -const port = process.env.PORT || 3000 -// const datafile = process.env.DATAFILE || 'data/accounts.json' - app.use(cors()) - // Configuring body parser middleware app.use(express.urlencoded({ extended: false })) app.use(express.json()) @@ -684,20 +34,20 @@ app.post('/identity/v2/oauth2/token', (req, res) => { const authStr = Buffer.from(req.headers.authorization.split(' ')[1], 'base64').toString() const [clientId, clientSecret] = authStr.split(':') - if (process.env.CLIENT_ID !== '' && process.env.CLIENT_SECRET !== '') { - if (clientId !== process.env.CLIENT_ID || clientSecret !== process.env.CLIENT_SECRET) { + if (envClientId !== '' && envClientSecret !== '') { + if (clientId !== envClientId || clientSecret !== envClientSecret) { return res.status(401).json() } } // Generate a token string const token = Math.random().toString(36).substring(2, 15) + Math.random().toString(36).substring(2, 15) - const expiryDate = dayjs().add(process.env.TOKEN_EXPIRY, 'seconds').format() + const expiryDate = dayjs().add(envTokenExpiry, 'seconds').format() accessTokens[token] = { expires_at: expiryDate, scope: 'accounts' } - return res.json({ access_token: token, token_type: 'Bearer', expires_in: process.env.TOKEN_EXPIRY, scope: 'accounts' }) + return res.json({ access_token: token, token_type: 'Bearer', expires_in: envTokenExpiry, scope: 'accounts' }) }) -const isValidToken = (req) => { - if (process.env.AUTH !== 'true') { +function isValidToken (req) { + if (envAuth !== 'true') { return true } const authorization = req.get('authorization').split(' ')[1] @@ -712,8 +62,8 @@ app.get('/za/pb/v1/accounts', (req, res) => { if (!isValidToken(req)) { return res.status(401).json() } - const accountsArr = db.prepare('SELECT * FROM accounts').all() - const data = { accounts: accountsArr } + const accounts = db.prepare('SELECT * FROM accounts').all() + const data = { accounts } return formatResponse(data, req, res) }) @@ -721,17 +71,19 @@ app.get('/za/pb/v1/accounts/:accountId/balance', (req, res) => { if (!isValidToken(req)) { return res.status(401).json() } - + console.log(faker.finance.transactionDescription()) const accountId = req.params.accountId - if (isValidAccount(accountId)) { + if (!database.isValidAccount(db, accountId)) { return res.status(404).json() // no account was found } + const balance = database.accountBalance(db, accountId) + // overdraft - balance // workout over // fetch the currentBalance and availableBalance from the transactions table const data = { accountId, - currentBalance: 0, + currentBalance: +balance, availableBalance: 0, currency: 'ZAR' } @@ -744,11 +96,11 @@ app.get('/za/pb/v1/accounts/:accountId/transactions', (req, res) => { } const accountId = req.params.accountId // check that the account exists - if (isValidAccount(accountId)) { + if (!database.isValidAccount(db, accountId)) { return res.status(404).json() // no account was found } - const transactionsArr = db.prepare('SELECT * FROM transactions WHERE accountId = ? ORDER BY postingDate ASC').all(accountId) + const transactionsArr = database.transactions(db, accountId) // console.log(transactionsArr) const toDate = req.query.toDate ?? dayjs().format('YYYY-MM-DD') // set to today const fromDate = req.query.fromDate ?? dayjs().subtract(180, 'day').format('YYYY-MM-DD') // set to 180 in the passed @@ -785,23 +137,25 @@ app.get('/za/pb/v1/accounts/:accountId/transactions', (req, res) => { // function to create transactions for an account app.post('/za/pb/v1/accounts/:accountId/transactions', (req, res) => { - const accountId = req.params.accountId - const type = req.body.type || 'DEBIT' - const transactionType = req.body.transactionType || 'CardPurchases' - const status = req.body.status || 'POSTED' - const description = req.body.description || 'HTTP://WWW.UBEREATS.CO PARKTOWN NOR ZA' - const cardNumber = req.body.cardNumber || '402167xxxxxx9999' - const postingDate = req.body.postingDate || dayjs().format('YYYY-MM-DD') - const valueDate = req.body.valueDate || dayjs().format('YYYY-MM-DD') - const actionDate = req.body.actionDate || dayjs().add(180, 'day').format('YYYY-MM-DD') - const transactionDate = req.body.transactionDate || dayjs().subtract(1, 'day').format('YYYY-MM-DD') - const amount = req.body.amount || '40.99' + const transaction = { + accountId: req.params.accountId, + type: req.body.type || faker.helpers.arrayElement(['DEBIT', 'CREDIT']), + transactionType: req.body.transactionType || faker.helpers.arrayElement(['CardPurchases', 'OnlineBankingPayments', 'FasterPay', 'DebitOrders', 'FeesAndInterest']), + status: req.body.status || 'POSTED', + description: req.body.description || faker.helpers.arrayElement(['HTTP://WWW.UBEREATS.CO PARKTOWN NOR ZA', 'MONTHLY SERVICE CHARGE', 'DEBIT INTEREST', 'FASTER PAYMENT FEE', 'INVESTECPB 40756003 09375003', 'VIRGIN ACT400396003 178003']), + cardNumber: req.body.cardNumber || '402167xxxxxx9999', + postingDate: req.body.postingDate || dayjs().format('YYYY-MM-DD'), + valueDate: req.body.valueDate || dayjs().format('YYYY-MM-DD'), + actionDate: req.body.actionDate || dayjs().add(30, 'day').format('YYYY-MM-DD'), + transactionDate: req.body.transactionDate || dayjs().subtract(1, 'day').format('YYYY-MM-DD'), + amount: req.body.amount || faker.finance.amount(5, 1000) + } // check that the account exists - if (isValidAccount(accountId)) { + if (database.isValidAccount(db, transaction.accountId)) { return res.status(404).json() // no account was found } // insert the transaction - insertTransaction(accountId, type, transactionType, status, description, cardNumber, postingDate, valueDate, actionDate, transactionDate, amount) + database.insertTransaction(db, transaction) return res.status(201).json() }) @@ -809,7 +163,7 @@ app.get('/za/v1/cards/countries', (req, res) => { if (!isValidToken(req)) { return res.status(401).json() } - const result = db.prepare('SELECT * FROM countries').all() + const result = database.countries(db) const data = { result } return formatResponse(data, req, res) }) @@ -818,7 +172,7 @@ app.get('/za/v1/cards/currencies', (req, res) => { if (!isValidToken(req)) { return res.status(401).json() } - const result = db.prepare('SELECT * FROM currencies').all() + const result = database.currencies(db) const data = { result } return formatResponse(data, req, res) }) @@ -827,7 +181,7 @@ app.get('/za/v1/cards/merchants', (req, res) => { if (!isValidToken(req)) { return res.status(401).json() } - const result = db.prepare('SELECT * FROM merchants').all() + const result = database.merchants(db) const data = { result } return formatResponse(data, req, res) }) diff --git a/investec.db b/investec.db new file mode 100644 index 0000000000000000000000000000000000000000..ca2e1dcd41b5e054a089494f52adf9e106e36be2 GIT binary patch literal 4096 zcmWFz^vNtqRY=P(%1ta$FlG>7U}9o$P*7lCU|@t|AVoG{WY9}y=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", + "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@eslint/eslintrc": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz", @@ -64,6 +113,16 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "dev": true }, + "node_modules/@faker-js/faker": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-7.6.0.tgz", + "integrity": "sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==", + "dev": true, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.0.0" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -107,25 +166,79 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, "engines": { - "node": ">=6" + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "engines": { + "node": ">=6.0.0" } }, - "node_modules/@szmarczak/http-timer": { + "node_modules/@jridgewell/set-array": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dependencies": { - "defer-to-connect": "^1.0.1" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=6" + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" } }, "node_modules/@types/json5": { @@ -173,6 +286,38 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -189,20 +334,10 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -211,7 +346,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -235,6 +369,47 @@ "node": ">= 8" } }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "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" + } + }, + "node_modules/are-we-there-yet/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -265,6 +440,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "engines": { + "node": ">=8" + } + }, "node_modules/array.prototype.flat": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", @@ -301,6 +484,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "engines": { + "node": ">= 4.0.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -451,28 +642,6 @@ "node": ">= 0.8" } }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -487,7 +656,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -550,48 +718,6 @@ "node": ">= 0.8" } }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -613,23 +739,10 @@ "node": ">=6" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -685,38 +798,28 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "engines": { + "node": ">=0.10.0" } }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -727,8 +830,7 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/concat-map": { "version": "0.0.1", @@ -736,22 +838,10 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, "node_modules/content-disposition": { "version": "0.5.4", @@ -785,6 +875,11 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", @@ -811,15 +906,6 @@ "node": ">= 8" } }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/dayjs": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.1.tgz", @@ -833,18 +919,6 @@ "ms": "2.0.0" } }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -859,12 +933,6 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, "node_modules/define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -881,6 +949,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -902,6 +975,17 @@ "node": ">=8" } }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -914,18 +998,6 @@ "node": ">=6.0.0" } }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dotenv": { "version": "16.0.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", @@ -934,12 +1006,6 @@ "node": ">=12" } }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -948,8 +1014,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -1036,13 +1101,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "engines": { - "node": ">=8" + "node": ">=6" } }, "node_modules/escape-html": { @@ -1613,6 +1677,32 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -1625,6 +1715,14 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dependencies": { + "reusify": "^1.0.4" + } + }, "node_modules/file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -1646,7 +1744,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -1718,11 +1815,61 @@ "node": ">= 0.6" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" - }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "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" + } + }, + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + }, + "node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -1763,6 +1910,72 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -1788,18 +2001,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -1853,21 +2054,6 @@ "node": ">=10.13.0" } }, - "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globals": { "version": "13.13.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", @@ -1883,33 +2069,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, + "node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "node_modules/has": { "version": "1.0.3", @@ -1935,7 +2117,6 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, "engines": { "node": ">=8" } @@ -1978,20 +2159,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, "node_modules/http-errors": { "version": "1.8.1", @@ -2008,6 +2179,39 @@ "node": ">= 0.6" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -2042,7 +2246,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true, "engines": { "node": ">= 4" } @@ -2069,15 +2272,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -2102,15 +2296,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -2125,6 +2310,21 @@ "node": ">= 0.4" } }, + "node_modules/into-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", + "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==", + "dependencies": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -2191,23 +2391,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-core-module": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, "dependencies": { "has": "^1.0.3" }, @@ -2234,7 +2421,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -2243,7 +2429,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -2252,7 +2437,6 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -2260,22 +2444,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", @@ -2288,23 +2456,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, "engines": { "node": ">=0.12.0" } @@ -2324,24 +2479,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -2400,12 +2537,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -2418,11 +2549,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/isexe": { "version": "2.0.0", @@ -2448,11 +2578,16 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } }, "node_modules/json-parse-better-errors": { "version": "1.0.2", @@ -2473,9 +2608,9 @@ "dev": true }, "node_modules/json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "dependencies": { "minimist": "^1.2.0" @@ -2484,6 +2619,17 @@ "json5": "lib/cli.js" } }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, "node_modules/jsx-ast-utils": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.2.tgz", @@ -2497,27 +2643,6 @@ "node": ">=4.0" } }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -2587,15 +2712,6 @@ "loose-envify": "cli.js" } }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -2607,21 +2723,6 @@ "node": ">=10" } }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -2635,6 +2736,14 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", @@ -2643,6 +2752,18 @@ "node": ">= 0.6" } }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, "node_modules/mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -2673,15 +2794,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -2709,6 +2821,29 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "node_modules/multistream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", + "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "once": "^1.4.0", + "readable-stream": "^3.6.0" + } + }, "node_modules/napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", @@ -2753,23 +2888,41 @@ "node": ">=10" } }, + "node_modules/node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, "node_modules/nodemon": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", - "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", + "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", "dev": true, - "hasInstallScript": true, "dependencies": { "chokidar": "^3.5.2", "debug": "^3.2.7", "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.5", - "update-notifier": "^5.1.0" + "undefsafe": "^2.0.5" }, "bin": { "nodemon": "bin/nodemon.js" @@ -2851,13 +3004,23 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/object-assign": { @@ -3000,13 +3163,12 @@ "node": ">= 0.8.0" } }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, + "node_modules/p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/p-limit": { @@ -3042,21 +3204,6 @@ "node": ">=4" } }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -3120,19 +3267,25 @@ "node_modules/path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, "engines": { "node": ">=8.6" }, @@ -3149,6 +3302,38 @@ "node": ">=6" } }, + "node_modules/pkg": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/pkg/-/pkg-5.8.0.tgz", + "integrity": "sha512-8h9PUDYFi+LOMLbIyGRdP21g08mAtHidSpofSrf8LWhxUWGHymaRzcopEGiynB5EhQmZUKM6PQ9kCImV2TpdjQ==", + "dependencies": { + "@babel/generator": "7.18.2", + "@babel/parser": "7.18.4", + "@babel/types": "7.18.4", + "chalk": "^4.1.2", + "fs-extra": "^9.1.0", + "globby": "^11.1.0", + "into-stream": "^6.0.0", + "is-core-module": "2.9.0", + "minimist": "^1.2.6", + "multistream": "^4.1.0", + "pkg-fetch": "3.4.2", + "prebuild-install": "6.1.4", + "resolve": "^1.22.0", + "stream-meter": "^1.0.4" + }, + "bin": { + "pkg": "lib-es5/bin.js" + }, + "peerDependencies": { + "node-notifier": ">=9.0.1" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, "node_modules/pkg-conf": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", @@ -3162,65 +3347,182 @@ "node": ">=6" } }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, + "node_modules/pkg-conf/node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-conf/node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-conf/node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-fetch": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-3.4.2.tgz", + "integrity": "sha512-0+uijmzYcnhC0hStDjm/cl2VYdrmVVBpe7Q8k9YBojxmR5tG8mvR9/nooQq3QSXiQqORDVOTY3XqMEqJVIzkHA==", + "dependencies": { + "chalk": "^4.1.2", + "fs-extra": "^9.1.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.6", + "progress": "^2.0.3", + "semver": "^7.3.5", + "tar-fs": "^2.1.1", + "yargs": "^16.2.0" + }, + "bin": { + "pkg-fetch": "lib-es5/bin.js" + } + }, + "node_modules/pkg-fetch/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pkg/node_modules/decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", "dependencies": { - "locate-path": "^3.0.0" + "mimic-response": "^2.0.0" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" + "node_modules/pkg/node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "bin": { + "detect-libc": "bin/detect-libc.js" }, "engines": { - "node": ">=6" + "node": ">=0.10" } }, - "node_modules/pkg-conf/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, + "node_modules/pkg/node_modules/mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", "engines": { - "node": ">=6" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-conf/node_modules/p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, + "node_modules/pkg/node_modules/node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", "dependencies": { - "p-limit": "^2.0.0" + "semver": "^5.4.1" + } + }, + "node_modules/pkg/node_modules/prebuild-install": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", + "dependencies": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.21.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" }, "engines": { "node": ">=6" } }, - "node_modules/pkg-conf/node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" + "node_modules/pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/pkg/node_modules/simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "dependencies": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" } }, "node_modules/prebuild-install": { @@ -3257,13 +3559,17 @@ "node": ">= 0.8.0" } }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "engines": { - "node": ">=4" + "node": ">=0.4.0" } }, "node_modules/prop-types": { @@ -3313,18 +3619,6 @@ "node": ">=6" } }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", @@ -3336,6 +3630,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, "node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -3476,35 +3789,18 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, "dependencies": { "is-core-module": "^2.8.1", "path-parse": "^1.0.7", @@ -3526,13 +3822,13 @@ "node": ">=4" } }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.0" + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, "node_modules/rimraf": { @@ -3550,6 +3846,28 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -3583,18 +3901,6 @@ "semver": "bin/semver.js" } }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/send": { "version": "0.17.2", "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", @@ -3637,6 +3943,11 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -3679,8 +3990,7 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/simple-concat": { "version": "1.0.1", @@ -3750,6 +4060,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "engines": { + "node": ">=8" + } + }, "node_modules/standard": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/standard/-/standard-17.0.0.tgz", @@ -3823,6 +4162,41 @@ "node": ">= 0.6" } }, + "node_modules/stream-meter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz", + "integrity": "sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==", + "dependencies": { + "readable-stream": "^2.1.4" + } + }, + "node_modules/stream-meter/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "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" + } + }, + "node_modules/stream-meter/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/stream-meter/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -3835,7 +4209,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3894,7 +4267,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -3927,7 +4299,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3939,7 +4310,6 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, "engines": { "node": ">= 0.4" }, @@ -3979,20 +4349,18 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", "engines": { - "node": ">=6" + "node": ">=4" } }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -4020,6 +4388,11 @@ "nodetouch": "bin/nodetouch.js" } }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "node_modules/tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -4079,15 +4452,6 @@ "node": ">= 0.6" } }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -4109,16 +4473,12 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, - "node_modules/unique-string": { + "node_modules/universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "engines": { - "node": ">=8" + "node": ">= 10.0.0" } }, "node_modules/unpipe": { @@ -4129,49 +4489,6 @@ "node": ">= 0.8" } }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -4181,18 +4498,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4220,6 +4525,20 @@ "node": ">= 0.8" } }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -4251,16 +4570,12 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "node_modules/word-wrap": { @@ -4276,7 +4591,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -4294,18 +4608,6 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "node_modules/xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", @@ -4315,13 +4617,75 @@ "node": ">=8" } }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } } }, "dependencies": { + "@babel/generator": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", + "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", + "requires": { + "@babel/types": "^7.18.2", + "@jridgewell/gen-mapping": "^0.3.0", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/parser": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", + "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==" + }, + "@babel/types": { + "version": "7.18.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.4.tgz", + "integrity": "sha512-ThN1mBcMq5pG/Vm2IcBmPPfyPXbd8S02rS+OBIDENdufvqC7Z/jHPCv9IcP01277aKtDI8g/2XysBN4hA8niiw==", + "requires": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + } + }, "@eslint/eslintrc": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.2.2.tgz", @@ -4356,6 +4720,12 @@ } } }, + "@faker-js/faker": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-7.6.0.tgz", + "integrity": "sha512-XK6BTq1NDMo9Xqw/YkYyGjSsg44fbNwYRx7QK2CuoQgyy+f1rrTDHoExVM5PsyXCtfl2vs2vVJ0MN0yN6LppRw==", + "dev": true + }, "@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -4390,19 +4760,61 @@ "integrity": "sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==", "dev": true }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true + "@jridgewell/gen-mapping": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", + "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" }, - "@szmarczak/http-timer": { + "@jridgewell/set-array": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==" + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", + "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==" + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "requires": { - "defer-to-connect": "^1.0.1" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" } }, "@types/json5": { @@ -4439,6 +4851,29 @@ "dev": true, "requires": {} }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -4451,26 +4886,15 @@ "uri-js": "^4.2.2" } }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "requires": { - "string-width": "^4.1.0" - } - }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -4485,6 +4909,49 @@ "picomatch": "^2.0.4" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "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" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -4509,6 +4976,11 @@ "is-string": "^1.0.7" } }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" + }, "array.prototype.flat": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", @@ -4533,6 +5005,11 @@ "es-shim-unscopables": "^1.0.0" } }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==" + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -4641,22 +5118,6 @@ } } }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -4671,7 +5132,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -4710,38 +5170,6 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -4757,17 +5185,10 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4805,32 +5226,25 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "requires": { - "mimic-response": "^1.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==" + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -4838,8 +5252,7 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "concat-map": { "version": "0.0.1", @@ -4847,19 +5260,10 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, "content-disposition": { "version": "0.5.4", @@ -4884,6 +5288,11 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, "cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", @@ -4904,12 +5313,6 @@ "which": "^2.0.1" } }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, "dayjs": { "version": "1.11.1", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.1.tgz", @@ -4923,15 +5326,6 @@ "ms": "2.0.0" } }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", @@ -4943,12 +5337,6 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, "define-properties": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", @@ -4959,6 +5347,11 @@ "object-keys": "^1.1.1" } }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -4974,6 +5367,14 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "requires": { + "path-type": "^4.0.0" + } + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -4983,26 +5384,11 @@ "esutils": "^2.0.2" } }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, "dotenv": { "version": "16.0.0", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==" }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -5011,8 +5397,7 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -5084,11 +5469,10 @@ "is-symbol": "^1.0.2" } }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -5511,6 +5895,28 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + } + } + }, "fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", @@ -5523,6 +5929,14 @@ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", "dev": true }, + "fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "requires": { + "reusify": "^1.0.4" + } + }, "file-entry-cache": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", @@ -5541,7 +5955,6 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -5595,11 +6008,60 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "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" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", @@ -5630,6 +6092,59 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==" + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, "get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -5646,15 +6161,6 @@ "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", "dev": true }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, "get-symbol-description": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", @@ -5693,15 +6199,6 @@ "is-glob": "^4.0.3" } }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "requires": { - "ini": "2.0.0" - } - }, "globals": { "version": "13.13.0", "resolved": "https://registry.npmjs.org/globals/-/globals-13.13.0.tgz", @@ -5711,30 +6208,23 @@ "type-fest": "^0.20.2" } }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, + "globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" } }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "dev": true + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "has": { "version": "1.0.3", @@ -5753,8 +6243,7 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "has-property-descriptors": { "version": "1.0.0", @@ -5779,17 +6268,10 @@ "has-symbols": "^1.0.2" } }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, "http-errors": { "version": "1.8.1", @@ -5803,6 +6285,30 @@ "toidentifier": "1.0.1" } }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -5819,8 +6325,7 @@ "ignore": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", - "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", - "dev": true + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==" }, "ignore-by-default": { "version": "1.0.1", @@ -5838,12 +6343,6 @@ "resolve-from": "^4.0.0" } }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -5865,12 +6364,6 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - }, "internal-slot": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", @@ -5882,6 +6375,15 @@ "side-channel": "^1.0.4" } }, + "into-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", + "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==", + "requires": { + "from2": "^2.3.0", + "p-is-promise": "^3.0.0" + } + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", @@ -5927,20 +6429,10 @@ "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", "dev": true }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, "is-core-module": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, "requires": { "has": "^1.0.3" } @@ -5957,51 +6449,31 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, "requires": { "is-extglob": "^2.1.1" } }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, "is-negative-zero": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", "dev": true }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { "version": "1.0.7", @@ -6012,18 +6484,6 @@ "has-tostringtag": "^1.0.0" } }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, "is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -6061,12 +6521,6 @@ "has-symbols": "^1.0.2" } }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", @@ -6076,11 +6530,10 @@ "call-bind": "^1.0.2" } }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "isexe": { "version": "2.0.0", @@ -6103,11 +6556,10 @@ "argparse": "^2.0.1" } }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" }, "json-parse-better-errors": { "version": "1.0.2", @@ -6128,14 +6580,23 @@ "dev": true }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { "minimist": "^1.2.0" } }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "jsx-ast-utils": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.2.tgz", @@ -6146,24 +6607,6 @@ "object.assign": "^4.1.2" } }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "requires": { - "package-json": "^6.3.0" - } - }, "levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -6220,12 +6663,6 @@ "js-tokens": "^3.0.0 || ^4.0.0" } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", @@ -6234,15 +6671,6 @@ "yallist": "^4.0.0" } }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -6253,11 +6681,25 @@ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" + }, "methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, + "micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "requires": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + } + }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", @@ -6276,12 +6718,6 @@ "mime-db": "1.52.0" } }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -6306,6 +6742,15 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "multistream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", + "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", + "requires": { + "once": "^1.4.0", + "readable-stream": "^3.6.0" + } + }, "napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", @@ -6340,22 +6785,30 @@ } } }, + "node-fetch": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, "nodemon": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", - "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", + "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", "dev": true, "requires": { "chokidar": "^3.5.2", "debug": "^3.2.7", "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.5", - "update-notifier": "^5.1.0" + "undefsafe": "^2.0.5" }, "dependencies": { "debug": { @@ -6411,11 +6864,21 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==" }, "object-assign": { "version": "4.1.1", @@ -6518,11 +6981,10 @@ "word-wrap": "^1.2.3" } }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true + "p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==" }, "p-limit": { "version": "1.3.0", @@ -6548,18 +7010,6 @@ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6605,19 +7055,22 @@ "path-parse": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" }, "pify": { "version": "4.0.1", @@ -6625,6 +7078,90 @@ "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, + "pkg": { + "version": "5.8.0", + "resolved": "https://registry.npmjs.org/pkg/-/pkg-5.8.0.tgz", + "integrity": "sha512-8h9PUDYFi+LOMLbIyGRdP21g08mAtHidSpofSrf8LWhxUWGHymaRzcopEGiynB5EhQmZUKM6PQ9kCImV2TpdjQ==", + "requires": { + "@babel/generator": "7.18.2", + "@babel/parser": "7.18.4", + "@babel/types": "7.18.4", + "chalk": "^4.1.2", + "fs-extra": "^9.1.0", + "globby": "^11.1.0", + "into-stream": "^6.0.0", + "is-core-module": "2.9.0", + "minimist": "^1.2.6", + "multistream": "^4.1.0", + "pkg-fetch": "3.4.2", + "prebuild-install": "6.1.4", + "resolve": "^1.22.0", + "stream-meter": "^1.0.4" + }, + "dependencies": { + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "requires": { + "mimic-response": "^2.0.0" + } + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==" + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" + }, + "node-abi": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", + "requires": { + "semver": "^5.4.1" + } + }, + "prebuild-install": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.21.0", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "simple-get": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz", + "integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==", + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + } + } + }, "pkg-conf": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-3.1.0.tgz", @@ -6680,6 +7217,31 @@ } } }, + "pkg-fetch": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-3.4.2.tgz", + "integrity": "sha512-0+uijmzYcnhC0hStDjm/cl2VYdrmVVBpe7Q8k9YBojxmR5tG8mvR9/nooQq3QSXiQqORDVOTY3XqMEqJVIzkHA==", + "requires": { + "chalk": "^4.1.2", + "fs-extra": "^9.1.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.6", + "progress": "^2.0.3", + "semver": "^7.3.5", + "tar-fs": "^2.1.1", + "yargs": "^16.2.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, "prebuild-install": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", @@ -6705,11 +7267,15 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "prop-types": { "version": "15.8.1", @@ -6752,20 +7318,16 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "requires": { - "escape-goat": "^2.0.0" - } - }, "qs": { "version": "6.9.7", "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==" + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -6871,29 +7433,15 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "resolve": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", - "dev": true, "requires": { "is-core-module": "^2.8.1", "path-parse": "^1.0.7", @@ -6906,14 +7454,10 @@ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==" }, "rimraf": { "version": "3.0.2", @@ -6924,6 +7468,14 @@ "glob": "^7.1.3" } }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "requires": { + "queue-microtask": "^1.2.2" + } + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -6940,15 +7492,6 @@ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "requires": { - "semver": "^6.3.0" - } - }, "send": { "version": "0.17.2", "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", @@ -6987,6 +7530,11 @@ "send": "0.17.2" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -7020,8 +7568,7 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "simple-concat": { "version": "1.0.1", @@ -7053,6 +7600,28 @@ } } }, + "simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" + }, "standard": { "version": "17.0.0", "resolved": "https://registry.npmjs.org/standard/-/standard-17.0.0.tgz", @@ -7086,6 +7655,43 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "stream-meter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz", + "integrity": "sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==", + "requires": { + "readable-stream": "^2.1.4" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "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" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -7098,7 +7704,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7145,7 +7750,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -7166,7 +7770,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -7174,8 +7777,7 @@ "supports-preserve-symlinks-flag": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" }, "tar-fs": { "version": "2.1.1", @@ -7206,17 +7808,15 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==" }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, "requires": { "is-number": "^7.0.0" } @@ -7235,6 +7835,11 @@ "nopt": "~1.0.10" } }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, "tsconfig-paths": { "version": "3.14.1", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", @@ -7279,15 +7884,6 @@ "mime-types": "~2.1.24" } }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, "unbox-primitive": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", @@ -7306,53 +7902,16 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, - "unique-string": { + "universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "dependencies": { - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - } - } - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -7362,15 +7921,6 @@ "punycode": "^2.1.0" } }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -7392,6 +7942,20 @@ "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -7414,13 +7978,12 @@ "is-symbol": "^1.0.3" } }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "requires": { - "string-width": "^4.0.0" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "word-wrap": { @@ -7433,7 +7996,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7445,28 +8007,40 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", "dev": true }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" } } } diff --git a/package.json b/package.json index d481c2a..b977a1b 100644 --- a/package.json +++ b/package.json @@ -5,9 +5,12 @@ "main": "index.js", "scripts": { "start": "npx nodemon index.js", - "build": "pkg index.js --output dist/pbsim --targets node16-linux-x64,node16-macos-x64,node16-win-x64", + "build": "npx pkg . -t macos --out-path dist --build", "test": "npx standard" }, + "bin": { + "pbsim": "index.js" + }, "author": "Devin Pearson", "license": "MIT", "dependencies": { @@ -16,9 +19,11 @@ "cors": "^2.8.5", "dayjs": "^1.11.1", "dotenv": "^16.0.0", - "express": "^4.17.3" + "express": "^4.17.3", + "pkg": "^5.8.0" }, "devDependencies": { + "@faker-js/faker": "^7.6.0", "nodemon": "^2.0.15", "standard": "^17.0.0" } From 18f0cc060e08d1546753319011809641e17e8ef7 Mon Sep 17 00:00:00 2001 From: Devin Date: Mon, 13 Feb 2023 17:03:02 +0200 Subject: [PATCH 4/6] Added generator for transactions --- README.md | 3 ++ generate.js | 120 ++++++++++++++++++++++++++++++++++++++++++++++++++++ index.js | 24 +++-------- 3 files changed, 129 insertions(+), 18 deletions(-) create mode 100644 generate.js diff --git a/README.md b/README.md index 57c0524..27d2ca4 100644 --- a/README.md +++ b/README.md @@ -42,4 +42,7 @@ Cards - /za/v1/cards/currencies - /za/v1/cards/merchants +Mock API only endpoints +- POST /za/pb/v1/accounts/:accountId/transactions - Creates and inserts a transaction into the history + Programmable documentation can be found here: https://developer.investec.com/programmable-banking/ \ No newline at end of file diff --git a/generate.js b/generate.js new file mode 100644 index 0000000..ac4faf2 --- /dev/null +++ b/generate.js @@ -0,0 +1,120 @@ +const { faker } = require('@faker-js/faker') +const dayjs = require('dayjs') + +const companies = [ + 'ENGEN', + 'SASOL', + 'TOTAL', + 'SHELL', + 'BP', + 'ISTORE', + 'POSTNET', + 'ESKORT', + 'NANDOS', + 'BOOST JUICE', + 'BODY FUEL EXPRESS', + 'GAS XPRESS', + 'BWH', + 'MCD', + 'PNP', + 'PNP EXP', + 'BILTON AT ZA', + 'CLICKS', + 'LEROY MERLIN', + 'WEST PACK', + 'TASKO SWEETS', + 'PETZONE', + 'MINTRAMS', + 'DISCHEM', + 'PIZZA PERFECT', + 'CHECKERS', + 'ANDICCIO 24', + 'DECATHLON', + 'PETZONE', + 'WIMPY', + 'SPAR', + 'SUPERSPAR', + 'MRPRICEH', + 'TURN N TENDER', + 'PIZA E VINO', + 'WOOLWORTHS', + 'UBER EATS', + 'UBER SA HELP.UBER.COM', + 'DOPPIO ZERO', + 'KFC', + 'TOYS R US', + 'JJ Cale', + 'GAME' +] + +const areas = [ + 'WESTDENE', + 'ALLENS NEK', + 'FLORIDA', + 'BOSKRUIN', + 'SUNDOWNER', + 'CLEARWATER', + 'BRYANSTON', + 'ROODEPOORT', + 'LITTLE FALLS', + 'WILGERHEUWEL', + 'WATERKLOOF', + 'WATERKLOOF RIDGE', + 'RADIOKOP', + 'EAGLES LANDING', + 'STRUBENSVALLEY', + 'RED VALLEY', + 'BRACKENFELL', + 'KUILSRIVER', + 'SUNNINGHILL', + 'RUIMSIG', + 'SUNNINGDALE', + 'NEWLANDS', + 'BLACKHEATH', + 'SANDTON', + 'RANDBURG' +] + +function randomCompany () { + const company = faker.helpers.arrayElement(companies) + return company +} + +function randomArea () { + const area = faker.helpers.arrayElement(areas) + return area +} + +function randomDescription () { + const description = randomCompany() + ' ' + randomArea() + ' ZA' + return description +} + +function randomType () { + const type = faker.helpers.arrayElement(['DEBIT', 'CREDIT']) + return type +} + +function randomTransactionType () { + const transactionType = faker.helpers.arrayElement(['CardPurchases', 'OnlineBankingPayments', 'FasterPay', 'DebitOrders', 'FeesAndInterest']) + return transactionType +} + +function randomTransaction (accountId) { + const transaction = { + accountId, + type: randomType(), + transactionType: randomTransactionType(), + status: 'POSTED', + description: randomDescription(), + cardNumber: '402167xxxxxx9999', + postingDate: dayjs().format('YYYY-MM-DD'), + valueDate: dayjs().format('YYYY-MM-DD'), + actionDate: dayjs().add(30, 'day').format('YYYY-MM-DD'), + transactionDate: dayjs().subtract(1, 'day').format('YYYY-MM-DD'), + amount: faker.finance.amount(5, 1000) + } + return transaction +} + +module.exports = { randomType, randomCompany, randomArea, randomDescription, randomTransaction, randomTransactionType } diff --git a/index.js b/index.js index e662923..96b7b92 100644 --- a/index.js +++ b/index.js @@ -5,14 +5,14 @@ const envClientSecret = process.env.CLIENT_SECRET const envTokenExpiry = process.env.TOKEN_EXPIRY const envAuth = process.env.AUTH const dbFile = process.env.DB_FILE || 'investec.db' -const overdraft = process.env.OVERDRAFT || 5000 +// const overdraft = process.env.OVERDRAFT || 5000 const express = require('express') const cors = require('cors') const dayjs = require('dayjs') -const { faker } = require('@faker-js/faker') const db = require('better-sqlite3')(dbFile) const database = require('./database') +const generator = require('./generate') db.pragma('journal_mode = WAL') // database.prepareDB(db) @@ -71,7 +71,6 @@ app.get('/za/pb/v1/accounts/:accountId/balance', (req, res) => { if (!isValidToken(req)) { return res.status(401).json() } - console.log(faker.finance.transactionDescription()) const accountId = req.params.accountId if (!database.isValidAccount(db, accountId)) { @@ -137,26 +136,15 @@ app.get('/za/pb/v1/accounts/:accountId/transactions', (req, res) => { // function to create transactions for an account app.post('/za/pb/v1/accounts/:accountId/transactions', (req, res) => { - const transaction = { - accountId: req.params.accountId, - type: req.body.type || faker.helpers.arrayElement(['DEBIT', 'CREDIT']), - transactionType: req.body.transactionType || faker.helpers.arrayElement(['CardPurchases', 'OnlineBankingPayments', 'FasterPay', 'DebitOrders', 'FeesAndInterest']), - status: req.body.status || 'POSTED', - description: req.body.description || faker.helpers.arrayElement(['HTTP://WWW.UBEREATS.CO PARKTOWN NOR ZA', 'MONTHLY SERVICE CHARGE', 'DEBIT INTEREST', 'FASTER PAYMENT FEE', 'INVESTECPB 40756003 09375003', 'VIRGIN ACT400396003 178003']), - cardNumber: req.body.cardNumber || '402167xxxxxx9999', - postingDate: req.body.postingDate || dayjs().format('YYYY-MM-DD'), - valueDate: req.body.valueDate || dayjs().format('YYYY-MM-DD'), - actionDate: req.body.actionDate || dayjs().add(30, 'day').format('YYYY-MM-DD'), - transactionDate: req.body.transactionDate || dayjs().subtract(1, 'day').format('YYYY-MM-DD'), - amount: req.body.amount || faker.finance.amount(5, 1000) - } + let transaction = generator.randomTransaction(req.params.accountId) + transaction = { ...transaction, ...req.body } // check that the account exists - if (database.isValidAccount(db, transaction.accountId)) { + if (!database.isValidAccount(db, transaction.accountId)) { return res.status(404).json() // no account was found } // insert the transaction database.insertTransaction(db, transaction) - return res.status(201).json() + return formatResponse(transaction, req, res) }) app.get('/za/v1/cards/countries', (req, res) => { From 4e1ca8a5eea8baa460cc0ae274211267ba2734a5 Mon Sep 17 00:00:00 2001 From: Devin Date: Fri, 17 Feb 2023 22:51:00 +0200 Subject: [PATCH 5/6] feat: added account control --- README.md | 5 ++++- database.js | 34 ++++++++++++++++++++++++++++------ generate.js | 14 +++++++++++++- index.js | 38 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 83 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 27d2ca4..1a59932 100644 --- a/README.md +++ b/README.md @@ -45,4 +45,7 @@ Cards Mock API only endpoints - POST /za/pb/v1/accounts/:accountId/transactions - Creates and inserts a transaction into the history -Programmable documentation can be found here: https://developer.investec.com/programmable-banking/ \ No newline at end of file +Programmable documentation can be found here: https://developer.investec.com/programmable-banking/ + + +https://sqlitebrowser.org/ \ No newline at end of file diff --git a/database.js b/database.js index 28e9d0c..3415ee4 100644 --- a/database.js +++ b/database.js @@ -615,6 +615,11 @@ function prepareAccounts (db) { ]) } +function insertAccount (db, account) { + const insertAccount = db.prepare('INSERT INTO accounts (accountId, accountNumber, accountName, referenceName, productName) VALUES (@accountId, @accountNumber, @accountName, @referenceName, @productName)') + insertAccount.run(account) +} + function prepareTransactions (db) { const insertTransaction = db.prepare('INSERT INTO transactions (accountId, type, transactionType, status, description, cardNumber, postedOrder, postingDate, valueDate, actionDate, transactionDate, amount, runningBalance) VALUES (@accountId, @type, @transactionType, @status, @description, @cardNumber, @postedOrder, @postingDate, @valueDate, @actionDate, @transactionDate, @amount, @runningBalance)') @@ -642,11 +647,24 @@ function prepareTransactions (db) { function insertTransaction (db, transaction) { const insertTransaction = db.prepare('INSERT INTO transactions (accountId, type, transactionType, status, description, cardNumber, postedOrder, postingDate, valueDate, actionDate, transactionDate, amount, runningBalance) VALUES (@accountId, @type, @transactionType, @status, @description, @cardNumber, @postedOrder, @postingDate, @valueDate, @actionDate, @transactionDate, @amount, @runningBalance)') - db.transaction(() => { - transaction.postedOrder = 0 - transaction.runningBalance = 0 - insertTransaction.run(transaction) - }) + transaction.postedOrder = 0 + transaction.runningBalance = 0 + insertTransaction.run(transaction) +} +// unfinished. transactions will need to be retrieved to find the one that needs to be deleted +function deleteTransaction (db, accountId, postingDate) { + const deleteTransaction = db.prepare('DELETE FROM transactions WHERE postingDate = @postingDate AND accountId = @accountId') + deleteTransaction.run({ postingDate, accountId }) +} + +function removeTransactions (db, accountId) { + const deleteTransaction = db.prepare('DELETE FROM transactions WHERE accountId = @accountId') + deleteTransaction.run({ accountId }) +} + +function removeAccount (db, accountId) { + const removeAccount = db.prepare('DELETE FROM accounts WHERE accountId = @accountId') + removeAccount.run({ accountId }) } function accountBalance (db, accountId) { @@ -659,7 +677,7 @@ function accountBalance (db, accountId) { runningBalance -= transactionsArr[j].amount } } - console.log(runningBalance) + return runningBalance.toFixed(2) } @@ -695,6 +713,10 @@ module.exports = { prepareCurrencies, prepareMerchants, insertTransaction, + deleteTransaction, + removeTransactions, + removeAccount, + insertAccount, transactions, countries, currencies, diff --git a/generate.js b/generate.js index ac4faf2..b0bb99a 100644 --- a/generate.js +++ b/generate.js @@ -117,4 +117,16 @@ function randomTransaction (accountId) { return transaction } -module.exports = { randomType, randomCompany, randomArea, randomDescription, randomTransaction, randomTransactionType } +function randomAccount () { + const randomNumber = faker.datatype.number(99) + const account = { + accountId: '46757781299101896000000' + randomNumber, + accountNumber: '100124200' + randomNumber, + accountName: faker.name.fullName(), + referenceName: faker.name.fullName(), + productName: 'Private Bank Account' + } + return account +} + +module.exports = { randomType, randomCompany, randomArea, randomDescription, randomTransaction, randomTransactionType, randomAccount } diff --git a/index.js b/index.js index 96b7b92..08a84a9 100644 --- a/index.js +++ b/index.js @@ -147,6 +147,44 @@ app.post('/za/pb/v1/accounts/:accountId/transactions', (req, res) => { return formatResponse(transaction, req, res) }) +app.delete('/za/pb/v1/accounts/:accountId/transactions/:postingDate', (req, res) => { + const accountId = req.params.accountId + const postingDate = req.params.postingDate + // check that the account exists + if (!database.isValidAccount(db, accountId)) { + return res.status(404).json() // no account was found + } + // insert the transaction + database.deleteTransaction(db, accountId, postingDate) + return res.status(200).json() +}) + +// function to create an account +app.post('/za/pb/v1/accounts', (req, res) => { + let account = generator.randomAccount() + account = { ...account, ...req.body } + // check that the account exists + if (database.isValidAccount(db, account.accountId)) { + return res.status(404).json() // account already exists + } + // insert the transaction + database.insertAccount(db, account) + return formatResponse(account, req, res) +}) + +// function to delete an account +app.delete('/za/pb/v1/accounts/:accountId', (req, res) => { + const accountId = req.params.accountId + // check that the account exists + if (!database.isValidAccount(db, accountId)) { + return res.status(404).json() // account already exists + } + // remove the transactions + database.removeTransactions(db, accountId) + database.removeAccount(db, accountId) + return res.status(200).json() +}) + app.get('/za/v1/cards/countries', (req, res) => { if (!isValidToken(req)) { return res.status(401).json() From eafbbdcaf57367c1613031b76edb33e0f9e97081 Mon Sep 17 00:00:00 2001 From: Devin Date: Fri, 17 Feb 2023 23:08:39 +0200 Subject: [PATCH 6/6] Update README.md --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 1a59932..bd4381e 100644 --- a/README.md +++ b/README.md @@ -44,6 +44,9 @@ Cards Mock API only endpoints - POST /za/pb/v1/accounts/:accountId/transactions - Creates and inserts a transaction into the history +- DELETE /za/pb/v1/accounts/:accountId/transactions/2023-01-22 - Deletes transactions from account for a particular postingDate +- POST /za/pb/v1/accounts - Create a new account +- DELETE /za/pb/v1/accounts/:accountId - Deletes the account and its transactions Programmable documentation can be found here: https://developer.investec.com/programmable-banking/