From ced8c022032aefb03a8673b7494f3da7babbff33 Mon Sep 17 00:00:00 2001 From: lonetrinity Date: Wed, 12 Sep 2018 15:36:49 +0800 Subject: [PATCH] fixBankInSlip --- .babelrc | 3 + .dockerignore | 9 + .env-example | 75 + .env.prod | 80 + .env.testing | 18 + .eslintrc | 15 + .gitignore | 23 + .gitlab-ci.sh | 35 + .gitlab-ci.yml | 34 + .rnd | Bin 0 -> 1024 bytes .vs/ProjectSettings.json | 3 + .vs/VSWorkspaceState.json | 7 + .vs/exchange/v15/.suo | Bin 0 -> 13824 bytes .vs/slnx.sqlite | Bin 0 -> 73728 bytes CHANGELOG.md | 100 + Dockerfile | 27 + LICENSE | 5 + Procfile | 1 + app/Booking.php | 58 + app/ChinaBankSlip.php | 15 + app/Console/Kernel.php | 42 + app/Events/RateUpdated.php | 47 + app/Exceptions/EmailTakenException.php | 19 + app/Exceptions/Handler.php | 61 + .../Auth/ForgotPasswordController.php | 52 + app/Http/Controllers/Auth/LoginController.php | 72 + app/Http/Controllers/Auth/OAuthController.php | 113 + .../Controllers/Auth/RegisterController.php | 92 + .../Auth/ResetPasswordController.php | 49 + app/Http/Controllers/BookingController.php | 1057 + .../Controllers/BookingSupplierController.php | 180 + .../Controllers/ChinaBankSlipController.php | 87 + app/Http/Controllers/Controller.php | 13 + app/Http/Controllers/HomeController.php | 28 + app/Http/Controllers/MarkingController.php | 44 + .../Controllers/NotificationController.php | 66 + app/Http/Controllers/RateController.php | 42 + .../SettingActiveBankController.php | 25 + .../SettingBeneficiaryController.php | 44 + .../SettingBillingChargeController.php | 25 + .../Controllers/SettingCreditController.php | 42 + .../SettingMalaysiaBankController.php | 40 + .../Controllers/SettingSupplierController.php | 46 + .../Controllers/SettingTaxRateController.php | 25 + .../Settings/PasswordController.php | 26 + .../Settings/ProfileController.php | 27 + app/Http/Controllers/UserController.php | 24 + app/Http/Controllers/WelcomeController.php | 21 + app/Http/Kernel.php | 67 + app/Http/Middleware/EncryptCookies.php | 17 + .../Middleware/RedirectIfAuthenticated.php | 26 + app/Http/Middleware/SetLocale.php | 49 + app/Http/Middleware/TokenEntrustAbility.php | 39 + app/Http/Middleware/TrimStrings.php | 18 + app/Http/Middleware/TrustProxies.php | 23 + app/Http/Middleware/VerifyCsrfToken.php | 17 + app/Invoice.php | 14 + app/Marking.php | 15 + app/Notification.php | 77 + app/Notifications/ResetPassword.php | 23 + app/OAuthProvider.php | 39 + app/Observers/RateObserver.php | 21 + app/Permission.php | 7 + app/Providers/AppServiceProvider.php | 41 + app/Providers/AuthServiceProvider.php | 29 + app/Providers/BroadcastServiceProvider.php | 22 + app/Providers/EventServiceProvider.php | 32 + app/Providers/RouteServiceProvider.php | 73 + app/PurchaseOrder.php | 15 + app/Rate.php | 11 + app/Role.php | 7 + app/SettingActiveBank.php | 10 + app/SettingBeneficiary.php | 10 + app/SettingBillingCharge.php | 10 + app/SettingCredit.php | 10 + app/SettingMalaysiaBank.php | 10 + app/SettingSupplier.php | 10 + app/SettingTaxRate.php | 10 + app/SupplierBooking.php | 27 + app/SupplierBookingItem.php | 25 + app/User.php | 109 + app/UserBankSlip.php | 15 + artisan | 53 + bootstrap/app.php | 55 + bootstrap/cache/.gitignore | 2 + build/deploy.sh | 35 + caddy/Caddyfile | 35 + caddy/Dockerfile | 20 + composer.json | 67 + config/app.php | 228 + config/auth.php | 103 + config/broadcasting.php | 59 + config/cache.php | 91 + config/database.php | 135 + config/entrust.php | 92 + config/filesystems.php | 68 + config/hashing.php | 20 + config/jwt.php | 303 + config/logging.php | 70 + config/mail.php | 123 + config/queue.php | 85 + config/services.php | 43 + config/session.php | 197 + config/view.php | 33 + database/factories/BookingFactory.php | 40 + database/factories/ChinaBankSlipFactory.php | 9 + database/factories/MarkingFactory.php | 10 + database/factories/PurchaseOrderFactory.php | 9 + database/factories/RateFactory.php | 14 + .../factories/SettingActiveBankFactory.php | 9 + .../factories/SettingBeneficiaryFactory.php | 9 + database/factories/SettingCreditFactory.php | 11 + .../factories/SettingMalaysiaBankFactory.php | 9 + database/factories/SettingSupplierFactory.php | 13 + .../factories/SupplierBookingItemFactory.php | 9 + database/factories/UserBankSlipFactory.php | 15 + database/factories/UserFactory.php | 26 + .../2014_10_12_000000_create_users_table.php | 35 + ...12_100000_create_password_resets_table.php | 32 + ...07_122845_create_oauth_providers_table.php | 41 + .../2018_04_25_085705_create_rates_table.php | 37 + ...25_090015_create_setting_credits_table.php | 33 + ..._090031_create_setting_suppliers_table.php | 36 + ...057_create_setting_beneficiaries_table.php | 38 + ...2018_05_07_080525_entrust_setup_tables.php | 75 + ...8_032048_create_china_bank_slips_table.php | 44 + ...018_05_15_075453_create_bookings_table.php | 54 + ...90646_change_user_id_in_bookings_table.php | 38 + ...05_18_063200_add_bia_in_bookings_table.php | 30 + .../2018_05_22_032509_add_bookings_table.php | 44 + ...509_make_nullable_field_bookings_table.php | 46 + ...24_082214_create_user_bank_slips_table.php | 43 + ...28_085925_create_purchase_orders_table.php | 40 + ..._030248_update_upload_booking_bankslip.php | 31 + ..._06_16_025657_add_cancel_booking_table.php | 34 + ...104015_add_reject_user_bank_slip_table.php | 36 + ...id_to_booking_id_in_userbankslip_table.php | 31 + ...2018_06_19_144347_create_marking_table.php | 33 + .../2018_06_20_145105_add_rate_to_booking.php | 33 + ..._21_024802_add_status_to_booking_table.php | 33 + ...18_06_21_025734_supplier_booking_table.php | 44 + ..._supplierbooking_customerbooking_table.php | 34 + ...2018_06_21_040652_create_invoice_table.php | 41 + ...rl_to_imagepath_in_userbankslips_table.php | 31 + ...l_to_imagepath_in_purchaseorders_table.php | 31 + ...2354_remove_amountcolumn_from_po_table.php | 34 + ...42127_add_adminstatus_to_booking_table.php | 33 + ...ange_adminstatus_default_booking_table.php | 29 + ...minstatus_default_to1_on_booking_table.php | 30 + ...43_add_time_limit_setting_credit_table.php | 32 + ...31_create_supplier_booking_items_table.php | 37 + ...26_035802_add_eta_user_bank_slip_table.php | 34 + ...abanksli_path_in_china_bank_slip_table.php | 31 + ...hod_nulltable_in_supplierbooking_table.php | 31 + ...ngid_foreignkey_to_chinabankslip_table.php | 36 + ..._rename_booking_foreignkey_in_po_table.php | 34 + ...7_02_022752_remove_user_in_users_table.php | 32 + ..._foreignkey_from_supplierbooking_table.php | 34 + ...billing_field_to_supplierbooking_table.php | 30 + ...alestax_field_to_supplierbooking_table.php | 33 + ...8_07_05_041532_add_name_in_users_table.php | 34 + ...update_name_to_nullable_in_users_table.php | 31 + ...07_05_095441_add_marking_to_user_table.php | 34 + ...323_create_setting_malaysia_bank_table.php | 38 + ...d_nullable_setting_malaysia_bank_table.php | 36 + ...75408_create_setting_active_bank_table.php | 43 + ...ge_foreignkey_type_in_activebank_table.php | 41 + ...t_nullable_setting_malaysia_bank_table.php | 36 + ...ement_start_from_2000_in_booking_table.php | 28 + ...48_create_setting_billing_charge_table.php | 32 + ...o_n_paymentfor_field_to_bookings_table.php | 33 + ...0_183325_create_setting_tax_rate_table.php | 32 + ...07_21_102920_create_notification_table.php | 39 + ...dd_fields_into_supplier_bookings_table.php | 32 + ...62106_change_datatype_in_booking_table.php | 33 + ...ake_nullable_in_china_bank_slips_table.php | 42 + ...103115_make_nullable_in_bookings_table.php | 37 + ...ke_nullable_in_supplier_bookings_table.php | 33 + ...253_drop_eta_in_china_bank_slips_table.php | 29 + ...ve_billing_amount_in_supplier_bookings.php | 30 + ..._bank_branch_in_china_bank_slips_table.php | 32 + ...reight_from_setting_active_banks_table.php | 32 + ..._08_16_101635_drop_notifications_table.php | 28 + ...8_16_101737_create_notifications_table.php | 35 + ...ullable_in_setting_beneficiaries_table.php | 35 + ...llable_in_setting_malaysia_banks_table.php | 35 + database/seeds/BookTableSeeder.php | 45 + database/seeds/DatabaseSeeder.php | 33 + database/seeds/MarkingSeeder.php | 20 + database/seeds/RateTableSeeder.php | 37 + database/seeds/RolesAndPermissionsSeeder.php | 189 + database/seeds/SettingActiveBankSeeder.php | 27 + database/seeds/SettingBeneficiarySeeder.php | 36 + database/seeds/SettingBillingChargeSeeder.php | 18 + database/seeds/SettingCreditSeeder.php | 21 + database/seeds/SettingMalaysiaBankSeeder.php | 35 + database/seeds/SettingTaxRateSeeder.php | 18 + database/seeds/SuppliersTableSeeder.php | 21 + database/seeds/UserRoleSeeder.php | 25 + database/seeds/UsersTableSeeder.php | 30 + docker-compose.yml | 43 + docker-prod.yml | 85 + docker/mysql/Dockerfile | 18 + .../docker-entrypoint-initdb.d/.gitignore | 1 + .../createdb.sql.example | 28 + docker/mysql/my.cnf | 10 + package-lock.json | 18351 ++++++++++++++++ package.json | 57 + phpunit.xml | 41 + public/.htaccess | 21 + public/CIEF-X-Plan-PO-Format-15.0.xlsm | Bin 0 -> 163323 bytes public/bankslip/hello.jpg | Bin 0 -> 79607 bytes public/favicon.ico | 0 .../lib/theme-chalk/element-icons.ttf | Bin 0 -> 11040 bytes .../lib/theme-chalk/element-icons.woff | Bin 0 -> 6164 bytes public/index.php | 58 + public/mix-manifest.json | 7 + public/robots.txt | 2 + public/web.config | 23 + readme.md | 59 + resources/assets/js/app.js | 42 + .../js/components/AdminProgressTrack.vue | 45 + resources/assets/js/components/App.vue | 66 + resources/assets/js/components/Button.vue | 43 + resources/assets/js/components/Card.vue | 21 + resources/assets/js/components/Checkbox.vue | 65 + resources/assets/js/components/Child.vue | 13 + resources/assets/js/components/Loading.vue | 100 + .../assets/js/components/LocaleDropdown.vue | 217 + .../assets/js/components/LoginWithGithub.vue | 84 + resources/assets/js/components/Navbar.vue | 229 + .../assets/js/components/ProgressTrack.vue | 30 + .../js/components/X2AdminProgressTrack.vue | 44 + .../assets/js/components/X2ProgressTrack.vue | 27 + resources/assets/js/components/index.js | 19 + resources/assets/js/lang/en.json | 34 + resources/assets/js/lang/es.json | 34 + resources/assets/js/lang/zh-CN.json | 34 + resources/assets/js/layouts/basic.vue | 30 + resources/assets/js/layouts/default.vue | 21 + resources/assets/js/middleware/admin.js | 9 + resources/assets/js/middleware/auth.js | 11 + resources/assets/js/middleware/check-auth.js | 11 + resources/assets/js/middleware/guest.js | 9 + resources/assets/js/middleware/locale.js | 8 + .../js/pages/admin/booking/bookingDetail.vue | 266 + .../js/pages/admin/booking/completed.vue | 585 + .../pages/admin/booking/supplierBooking.vue | 375 + .../js/pages/admin/booking/supplierReport.vue | 565 + .../admin/booking/uploadChinaBankslip.vue | 621 + .../js/pages/admin/booking/uploadInvoice.vue | 623 + .../js/pages/admin/booking/verification.vue | 385 + .../js/pages/admin/booking/x2Completed.vue | 549 + .../assets/js/pages/admin/complete-orders.vue | 112 + resources/assets/js/pages/admin/home.vue | 294 + resources/assets/js/pages/admin/index.vue | 53 + .../js/pages/admin/transaction-history.vue | 32 + .../pages/admin/upload-supplier-bank-slip.vue | 61 + resources/assets/js/pages/auth/login.vue | 113 + .../assets/js/pages/auth/password/email.vue | 60 + .../assets/js/pages/auth/password/reset.vue | 86 + resources/assets/js/pages/auth/register.vue | 164 + .../assets/js/pages/booking/completed.vue | 214 + .../assets/js/pages/booking/confirmation.vue | 168 + resources/assets/js/pages/booking/po.vue | 210 + .../assets/js/pages/booking/poComplete.vue | 186 + .../assets/js/pages/booking/transfer.vue | 193 + .../assets/js/pages/booking/uploadPo.vue | 294 + .../js/pages/booking/uploadUserBankSlip.vue | 407 + .../assets/js/pages/booking/x2Completed.vue | 196 + resources/assets/js/pages/errors/404.vue | 19 + resources/assets/js/pages/home.vue | 832 + .../js/pages/settings/admin-bank-setting.vue | 161 + .../settings/admin-billing-charge-setting.vue | 65 + .../js/pages/settings/admin-china-bank.vue | 283 + .../pages/settings/admin-credit-setting.vue | 73 + .../js/pages/settings/admin-malaysia-bank.vue | 285 + .../pages/settings/admin-marking-setting.vue | 229 + .../js/pages/settings/admin-supplier.vue | 227 + .../js/pages/settings/admin-tax-setting.vue | 66 + resources/assets/js/pages/settings/index.vue | 107 + .../assets/js/pages/settings/password.vue | 59 + .../assets/js/pages/settings/profile.vue | 73 + resources/assets/js/pages/settings/rate.vue | 0 resources/assets/js/pages/welcome.vue | 52 + resources/assets/js/plugins/axios.js | 55 + resources/assets/js/plugins/fontawesome.js | 19 + resources/assets/js/plugins/i18n.js | 30 + resources/assets/js/plugins/index.js | 3 + resources/assets/js/router/index.js | 199 + resources/assets/js/router/routes.js | 97 + resources/assets/js/store/index.js | 23 + resources/assets/js/store/modules/auth.js | 82 + resources/assets/js/store/modules/booking.js | 38 + resources/assets/js/store/modules/lang.js | 32 + resources/assets/js/store/mutation-types.js | 10 + resources/assets/sass/_variables.scss | 22 + resources/assets/sass/app.scss | 9 + resources/assets/sass/elements/_buttons.scss | 25 + resources/assets/sass/elements/_card.scss | 3 + resources/assets/sass/elements/_navbar.scss | 19 + .../assets/sass/elements/_transitions.scss | 17 + resources/lang/en/auth.php | 19 + resources/lang/en/pagination.php | 19 + resources/lang/en/passwords.php | 22 + resources/lang/en/validation.php | 121 + resources/lang/es/auth.php | 19 + resources/lang/es/pagination.php | 19 + resources/lang/es/passwords.php | 22 + resources/lang/es/validation.php | 155 + resources/lang/zh-CN/auth.php | 16 + resources/lang/zh-CN/pagination.php | 16 + resources/lang/zh-CN/passwords.php | 19 + resources/lang/zh-CN/validation.php | 97 + resources/views/auth/login.blade.php | 0 .../views/auth/passwords/email.blade.php | 47 + .../views/auth/passwords/reset.blade.php | 65 + resources/views/auth/register.blade.php | 77 + resources/views/booking/index.blade.php | 95 + resources/views/errors/layout.blade.php | 58 + resources/views/home.blade.php | 23 + resources/views/index.blade.php | 53 + resources/views/layouts/app.blade.php | 75 + resources/views/oauth/callback.blade.php | 12 + resources/views/oauth/emailTaken.blade.php | 5 + routes/api.php | 136 + routes/channels.php | 16 + routes/console.php | 18 + routes/web.php | 20 + server.php | 21 + storage/app/.gitignore | 3 + storage/app/public/.gitignore | 2 + storage/framework/.gitignore | 8 + storage/framework/cache/.gitignore | 2 + storage/framework/sessions/.gitignore | 2 + storage/framework/testing/.gitignore | 2 + storage/framework/views/.gitignore | 2 + storage/logs/.gitignore | 2 + tests/Browser/LoginTest.php | 54 + tests/Browser/Pages/Home.php | 28 + tests/Browser/Pages/Login.php | 32 + tests/Browser/Pages/Page.php | 32 + tests/Browser/Pages/Register.php | 33 + tests/Browser/RegisterTest.php | 50 + tests/Browser/WelcomeTest.php | 17 + tests/Browser/console/.gitignore | 2 + tests/Browser/screenshots/.gitignore | 2 + tests/CreatesApplication.php | 25 + tests/DuskTestCase.php | 55 + tests/Feature/BookingTest.php | 173 + tests/Feature/ChinaBankSlipTest.php | 66 + tests/Feature/LocaleTest.php | 26 + tests/Feature/LoginTest.php | 57 + tests/Feature/MarkingTest.php | 37 + tests/Feature/RateTest.php | 68 + tests/Feature/RegisterTest.php | 31 + tests/Feature/SettingCreditTest.php | 37 + tests/Feature/SettingSupplierTest.php | 68 + tests/Feature/SettingsTest.php | 54 + tests/TestCase.php | 13 + wait.sh | 16 + webpack.mix.js | 50 + yarn.lock | 306 + 363 files changed, 41654 insertions(+) create mode 100644 .babelrc create mode 100644 .dockerignore create mode 100644 .env-example create mode 100644 .env.prod create mode 100644 .env.testing create mode 100644 .eslintrc create mode 100644 .gitignore create mode 100644 .gitlab-ci.sh create mode 100644 .gitlab-ci.yml create mode 100644 .rnd create mode 100644 .vs/ProjectSettings.json create mode 100644 .vs/VSWorkspaceState.json create mode 100644 .vs/exchange/v15/.suo create mode 100644 .vs/slnx.sqlite create mode 100644 CHANGELOG.md create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 Procfile create mode 100644 app/Booking.php create mode 100644 app/ChinaBankSlip.php create mode 100644 app/Console/Kernel.php create mode 100644 app/Events/RateUpdated.php create mode 100644 app/Exceptions/EmailTakenException.php create mode 100644 app/Exceptions/Handler.php create mode 100644 app/Http/Controllers/Auth/ForgotPasswordController.php create mode 100644 app/Http/Controllers/Auth/LoginController.php create mode 100644 app/Http/Controllers/Auth/OAuthController.php create mode 100644 app/Http/Controllers/Auth/RegisterController.php create mode 100644 app/Http/Controllers/Auth/ResetPasswordController.php create mode 100644 app/Http/Controllers/BookingController.php create mode 100644 app/Http/Controllers/BookingSupplierController.php create mode 100644 app/Http/Controllers/ChinaBankSlipController.php create mode 100644 app/Http/Controllers/Controller.php create mode 100644 app/Http/Controllers/HomeController.php create mode 100644 app/Http/Controllers/MarkingController.php create mode 100644 app/Http/Controllers/NotificationController.php create mode 100644 app/Http/Controllers/RateController.php create mode 100644 app/Http/Controllers/SettingActiveBankController.php create mode 100644 app/Http/Controllers/SettingBeneficiaryController.php create mode 100644 app/Http/Controllers/SettingBillingChargeController.php create mode 100644 app/Http/Controllers/SettingCreditController.php create mode 100644 app/Http/Controllers/SettingMalaysiaBankController.php create mode 100644 app/Http/Controllers/SettingSupplierController.php create mode 100644 app/Http/Controllers/SettingTaxRateController.php create mode 100644 app/Http/Controllers/Settings/PasswordController.php create mode 100644 app/Http/Controllers/Settings/ProfileController.php create mode 100644 app/Http/Controllers/UserController.php create mode 100644 app/Http/Controllers/WelcomeController.php create mode 100644 app/Http/Kernel.php create mode 100644 app/Http/Middleware/EncryptCookies.php create mode 100644 app/Http/Middleware/RedirectIfAuthenticated.php create mode 100644 app/Http/Middleware/SetLocale.php create mode 100644 app/Http/Middleware/TokenEntrustAbility.php create mode 100644 app/Http/Middleware/TrimStrings.php create mode 100644 app/Http/Middleware/TrustProxies.php create mode 100644 app/Http/Middleware/VerifyCsrfToken.php create mode 100644 app/Invoice.php create mode 100644 app/Marking.php create mode 100644 app/Notification.php create mode 100644 app/Notifications/ResetPassword.php create mode 100644 app/OAuthProvider.php create mode 100644 app/Observers/RateObserver.php create mode 100644 app/Permission.php create mode 100644 app/Providers/AppServiceProvider.php create mode 100644 app/Providers/AuthServiceProvider.php create mode 100644 app/Providers/BroadcastServiceProvider.php create mode 100644 app/Providers/EventServiceProvider.php create mode 100644 app/Providers/RouteServiceProvider.php create mode 100644 app/PurchaseOrder.php create mode 100644 app/Rate.php create mode 100644 app/Role.php create mode 100644 app/SettingActiveBank.php create mode 100644 app/SettingBeneficiary.php create mode 100644 app/SettingBillingCharge.php create mode 100644 app/SettingCredit.php create mode 100644 app/SettingMalaysiaBank.php create mode 100644 app/SettingSupplier.php create mode 100644 app/SettingTaxRate.php create mode 100644 app/SupplierBooking.php create mode 100644 app/SupplierBookingItem.php create mode 100644 app/User.php create mode 100644 app/UserBankSlip.php create mode 100644 artisan create mode 100644 bootstrap/app.php create mode 100644 bootstrap/cache/.gitignore create mode 100644 build/deploy.sh create mode 100644 caddy/Caddyfile create mode 100644 caddy/Dockerfile create mode 100644 composer.json create mode 100644 config/app.php create mode 100644 config/auth.php create mode 100644 config/broadcasting.php create mode 100644 config/cache.php create mode 100644 config/database.php create mode 100644 config/entrust.php create mode 100644 config/filesystems.php create mode 100644 config/hashing.php create mode 100644 config/jwt.php create mode 100644 config/logging.php create mode 100644 config/mail.php create mode 100644 config/queue.php create mode 100644 config/services.php create mode 100644 config/session.php create mode 100644 config/view.php create mode 100644 database/factories/BookingFactory.php create mode 100644 database/factories/ChinaBankSlipFactory.php create mode 100644 database/factories/MarkingFactory.php create mode 100644 database/factories/PurchaseOrderFactory.php create mode 100644 database/factories/RateFactory.php create mode 100644 database/factories/SettingActiveBankFactory.php create mode 100644 database/factories/SettingBeneficiaryFactory.php create mode 100644 database/factories/SettingCreditFactory.php create mode 100644 database/factories/SettingMalaysiaBankFactory.php create mode 100644 database/factories/SettingSupplierFactory.php create mode 100644 database/factories/SupplierBookingItemFactory.php create mode 100644 database/factories/UserBankSlipFactory.php create mode 100644 database/factories/UserFactory.php create mode 100644 database/migrations/2014_10_12_000000_create_users_table.php create mode 100644 database/migrations/2014_10_12_100000_create_password_resets_table.php create mode 100644 database/migrations/2017_12_07_122845_create_oauth_providers_table.php create mode 100644 database/migrations/2018_04_25_085705_create_rates_table.php create mode 100644 database/migrations/2018_04_25_090015_create_setting_credits_table.php create mode 100644 database/migrations/2018_04_25_090031_create_setting_suppliers_table.php create mode 100644 database/migrations/2018_04_25_090057_create_setting_beneficiaries_table.php create mode 100644 database/migrations/2018_05_07_080525_entrust_setup_tables.php create mode 100644 database/migrations/2018_05_08_032048_create_china_bank_slips_table.php create mode 100644 database/migrations/2018_05_15_075453_create_bookings_table.php create mode 100644 database/migrations/2018_05_15_090646_change_user_id_in_bookings_table.php create mode 100644 database/migrations/2018_05_18_063200_add_bia_in_bookings_table.php create mode 100644 database/migrations/2018_05_22_032509_add_bookings_table.php create mode 100644 database/migrations/2018_05_22_032509_make_nullable_field_bookings_table.php create mode 100644 database/migrations/2018_05_24_082214_create_user_bank_slips_table.php create mode 100644 database/migrations/2018_05_28_085925_create_purchase_orders_table.php create mode 100644 database/migrations/2018_05_30_030248_update_upload_booking_bankslip.php create mode 100644 database/migrations/2018_06_16_025657_add_cancel_booking_table.php create mode 100644 database/migrations/2018_06_18_104015_add_reject_user_bank_slip_table.php create mode 100644 database/migrations/2018_06_18_141410_rename_book_id_to_booking_id_in_userbankslip_table.php create mode 100644 database/migrations/2018_06_19_144347_create_marking_table.php create mode 100644 database/migrations/2018_06_20_145105_add_rate_to_booking.php create mode 100644 database/migrations/2018_06_21_024802_add_status_to_booking_table.php create mode 100644 database/migrations/2018_06_21_025734_supplier_booking_table.php create mode 100644 database/migrations/2018_06_21_034658_supplierbooking_customerbooking_table.php create mode 100644 database/migrations/2018_06_21_040652_create_invoice_table.php create mode 100644 database/migrations/2018_06_21_062637_rename_imageurl_to_imagepath_in_userbankslips_table.php create mode 100644 database/migrations/2018_06_21_062700_rename_imageurl_to_imagepath_in_purchaseorders_table.php create mode 100644 database/migrations/2018_06_21_072354_remove_amountcolumn_from_po_table.php create mode 100644 database/migrations/2018_06_22_042127_add_adminstatus_to_booking_table.php create mode 100644 database/migrations/2018_06_22_042911_change_adminstatus_default_booking_table.php create mode 100644 database/migrations/2018_06_25_075341_change_adminstatus_default_to1_on_booking_table.php create mode 100644 database/migrations/2018_06_25_101043_add_time_limit_setting_credit_table.php create mode 100644 database/migrations/2018_06_25_120731_create_supplier_booking_items_table.php create mode 100644 database/migrations/2018_06_26_035802_add_eta_user_bank_slip_table.php create mode 100644 database/migrations/2018_06_26_141337_rename_bankslip_url_to_chinabanksli_path_in_china_bank_slip_table.php create mode 100644 database/migrations/2018_06_27_035705_make_paymentmethod_nulltable_in_supplierbooking_table.php create mode 100644 database/migrations/2018_06_27_081455_add_bookingid_foreignkey_to_chinabankslip_table.php create mode 100644 database/migrations/2018_06_28_011717_rename_booking_foreignkey_in_po_table.php create mode 100644 database/migrations/2018_07_02_022752_remove_user_in_users_table.php create mode 100644 database/migrations/2018_07_02_104306_rename_booking_foreignkey_from_supplierbooking_table.php create mode 100644 database/migrations/2018_07_03_014020_add_billing_field_to_supplierbooking_table.php create mode 100644 database/migrations/2018_07_03_014343_add_salestax_field_to_supplierbooking_table.php create mode 100644 database/migrations/2018_07_05_041532_add_name_in_users_table.php create mode 100644 database/migrations/2018_07_05_053554_update_name_to_nullable_in_users_table.php create mode 100644 database/migrations/2018_07_05_095441_add_marking_to_user_table.php create mode 100644 database/migrations/2018_07_05_102323_create_setting_malaysia_bank_table.php create mode 100644 database/migrations/2018_07_06_035110_add_nullable_setting_malaysia_bank_table.php create mode 100644 database/migrations/2018_07_06_075408_create_setting_active_bank_table.php create mode 100644 database/migrations/2018_07_08_033026_change_foreignkey_type_in_activebank_table.php create mode 100644 database/migrations/2018_07_10_173148_add_not_nullable_setting_malaysia_bank_table.php create mode 100644 database/migrations/2018_07_18_174712_update_autoincrement_start_from_2000_in_booking_table.php create mode 100644 database/migrations/2018_07_20_172148_create_setting_billing_charge_table.php create mode 100644 database/migrations/2018_07_20_175339_add_orderno_n_paymentfor_field_to_bookings_table.php create mode 100644 database/migrations/2018_07_20_183325_create_setting_tax_rate_table.php create mode 100644 database/migrations/2018_07_21_102920_create_notification_table.php create mode 100644 database/migrations/2018_07_26_094305_add_fields_into_supplier_bookings_table.php create mode 100644 database/migrations/2018_07_30_162106_change_datatype_in_booking_table.php create mode 100644 database/migrations/2018_08_02_141753_make_nullable_in_china_bank_slips_table.php create mode 100644 database/migrations/2018_08_08_103115_make_nullable_in_bookings_table.php create mode 100644 database/migrations/2018_08_08_104726_make_nullable_in_supplier_bookings_table.php create mode 100644 database/migrations/2018_08_13_121253_drop_eta_in_china_bank_slips_table.php create mode 100644 database/migrations/2018_08_13_161906_remove_billing_amount_in_supplier_bookings.php create mode 100644 database/migrations/2018_08_13_162910_dropcolumn_bank_branch_in_china_bank_slips_table.php create mode 100644 database/migrations/2018_08_15_154652_remove_foreight_from_setting_active_banks_table.php create mode 100644 database/migrations/2018_08_16_101635_drop_notifications_table.php create mode 100644 database/migrations/2018_08_16_101737_create_notifications_table.php create mode 100644 database/migrations/2018_08_20_172746_make_nullable_in_setting_beneficiaries_table.php create mode 100644 database/migrations/2018_08_20_172851_make_nullable_in_setting_malaysia_banks_table.php create mode 100644 database/seeds/BookTableSeeder.php create mode 100644 database/seeds/DatabaseSeeder.php create mode 100644 database/seeds/MarkingSeeder.php create mode 100644 database/seeds/RateTableSeeder.php create mode 100644 database/seeds/RolesAndPermissionsSeeder.php create mode 100644 database/seeds/SettingActiveBankSeeder.php create mode 100644 database/seeds/SettingBeneficiarySeeder.php create mode 100644 database/seeds/SettingBillingChargeSeeder.php create mode 100644 database/seeds/SettingCreditSeeder.php create mode 100644 database/seeds/SettingMalaysiaBankSeeder.php create mode 100644 database/seeds/SettingTaxRateSeeder.php create mode 100644 database/seeds/SuppliersTableSeeder.php create mode 100644 database/seeds/UserRoleSeeder.php create mode 100644 database/seeds/UsersTableSeeder.php create mode 100644 docker-compose.yml create mode 100644 docker-prod.yml create mode 100644 docker/mysql/Dockerfile create mode 100644 docker/mysql/docker-entrypoint-initdb.d/.gitignore create mode 100644 docker/mysql/docker-entrypoint-initdb.d/createdb.sql.example create mode 100644 docker/mysql/my.cnf create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 phpunit.xml create mode 100644 public/.htaccess create mode 100644 public/CIEF-X-Plan-PO-Format-15.0.xlsm create mode 100644 public/bankslip/hello.jpg create mode 100644 public/favicon.ico create mode 100644 public/fonts/vendor/element-ui/lib/theme-chalk/element-icons.ttf create mode 100644 public/fonts/vendor/element-ui/lib/theme-chalk/element-icons.woff create mode 100644 public/index.php create mode 100644 public/mix-manifest.json create mode 100644 public/robots.txt create mode 100644 public/web.config create mode 100644 readme.md create mode 100644 resources/assets/js/app.js create mode 100644 resources/assets/js/components/AdminProgressTrack.vue create mode 100644 resources/assets/js/components/App.vue create mode 100644 resources/assets/js/components/Button.vue create mode 100644 resources/assets/js/components/Card.vue create mode 100644 resources/assets/js/components/Checkbox.vue create mode 100644 resources/assets/js/components/Child.vue create mode 100644 resources/assets/js/components/Loading.vue create mode 100644 resources/assets/js/components/LocaleDropdown.vue create mode 100644 resources/assets/js/components/LoginWithGithub.vue create mode 100644 resources/assets/js/components/Navbar.vue create mode 100644 resources/assets/js/components/ProgressTrack.vue create mode 100644 resources/assets/js/components/X2AdminProgressTrack.vue create mode 100644 resources/assets/js/components/X2ProgressTrack.vue create mode 100644 resources/assets/js/components/index.js create mode 100644 resources/assets/js/lang/en.json create mode 100644 resources/assets/js/lang/es.json create mode 100644 resources/assets/js/lang/zh-CN.json create mode 100644 resources/assets/js/layouts/basic.vue create mode 100644 resources/assets/js/layouts/default.vue create mode 100644 resources/assets/js/middleware/admin.js create mode 100644 resources/assets/js/middleware/auth.js create mode 100644 resources/assets/js/middleware/check-auth.js create mode 100644 resources/assets/js/middleware/guest.js create mode 100644 resources/assets/js/middleware/locale.js create mode 100644 resources/assets/js/pages/admin/booking/bookingDetail.vue create mode 100644 resources/assets/js/pages/admin/booking/completed.vue create mode 100644 resources/assets/js/pages/admin/booking/supplierBooking.vue create mode 100644 resources/assets/js/pages/admin/booking/supplierReport.vue create mode 100644 resources/assets/js/pages/admin/booking/uploadChinaBankslip.vue create mode 100644 resources/assets/js/pages/admin/booking/uploadInvoice.vue create mode 100644 resources/assets/js/pages/admin/booking/verification.vue create mode 100644 resources/assets/js/pages/admin/booking/x2Completed.vue create mode 100644 resources/assets/js/pages/admin/complete-orders.vue create mode 100644 resources/assets/js/pages/admin/home.vue create mode 100644 resources/assets/js/pages/admin/index.vue create mode 100644 resources/assets/js/pages/admin/transaction-history.vue create mode 100644 resources/assets/js/pages/admin/upload-supplier-bank-slip.vue create mode 100644 resources/assets/js/pages/auth/login.vue create mode 100644 resources/assets/js/pages/auth/password/email.vue create mode 100644 resources/assets/js/pages/auth/password/reset.vue create mode 100644 resources/assets/js/pages/auth/register.vue create mode 100644 resources/assets/js/pages/booking/completed.vue create mode 100644 resources/assets/js/pages/booking/confirmation.vue create mode 100644 resources/assets/js/pages/booking/po.vue create mode 100644 resources/assets/js/pages/booking/poComplete.vue create mode 100644 resources/assets/js/pages/booking/transfer.vue create mode 100644 resources/assets/js/pages/booking/uploadPo.vue create mode 100644 resources/assets/js/pages/booking/uploadUserBankSlip.vue create mode 100644 resources/assets/js/pages/booking/x2Completed.vue create mode 100644 resources/assets/js/pages/errors/404.vue create mode 100644 resources/assets/js/pages/home.vue create mode 100644 resources/assets/js/pages/settings/admin-bank-setting.vue create mode 100644 resources/assets/js/pages/settings/admin-billing-charge-setting.vue create mode 100644 resources/assets/js/pages/settings/admin-china-bank.vue create mode 100644 resources/assets/js/pages/settings/admin-credit-setting.vue create mode 100644 resources/assets/js/pages/settings/admin-malaysia-bank.vue create mode 100644 resources/assets/js/pages/settings/admin-marking-setting.vue create mode 100644 resources/assets/js/pages/settings/admin-supplier.vue create mode 100644 resources/assets/js/pages/settings/admin-tax-setting.vue create mode 100644 resources/assets/js/pages/settings/index.vue create mode 100644 resources/assets/js/pages/settings/password.vue create mode 100644 resources/assets/js/pages/settings/profile.vue create mode 100644 resources/assets/js/pages/settings/rate.vue create mode 100644 resources/assets/js/pages/welcome.vue create mode 100644 resources/assets/js/plugins/axios.js create mode 100644 resources/assets/js/plugins/fontawesome.js create mode 100644 resources/assets/js/plugins/i18n.js create mode 100644 resources/assets/js/plugins/index.js create mode 100644 resources/assets/js/router/index.js create mode 100644 resources/assets/js/router/routes.js create mode 100644 resources/assets/js/store/index.js create mode 100644 resources/assets/js/store/modules/auth.js create mode 100644 resources/assets/js/store/modules/booking.js create mode 100644 resources/assets/js/store/modules/lang.js create mode 100644 resources/assets/js/store/mutation-types.js create mode 100644 resources/assets/sass/_variables.scss create mode 100644 resources/assets/sass/app.scss create mode 100644 resources/assets/sass/elements/_buttons.scss create mode 100644 resources/assets/sass/elements/_card.scss create mode 100644 resources/assets/sass/elements/_navbar.scss create mode 100644 resources/assets/sass/elements/_transitions.scss create mode 100644 resources/lang/en/auth.php create mode 100644 resources/lang/en/pagination.php create mode 100644 resources/lang/en/passwords.php create mode 100644 resources/lang/en/validation.php create mode 100644 resources/lang/es/auth.php create mode 100644 resources/lang/es/pagination.php create mode 100644 resources/lang/es/passwords.php create mode 100644 resources/lang/es/validation.php create mode 100644 resources/lang/zh-CN/auth.php create mode 100644 resources/lang/zh-CN/pagination.php create mode 100644 resources/lang/zh-CN/passwords.php create mode 100644 resources/lang/zh-CN/validation.php create mode 100644 resources/views/auth/login.blade.php create mode 100644 resources/views/auth/passwords/email.blade.php create mode 100644 resources/views/auth/passwords/reset.blade.php create mode 100644 resources/views/auth/register.blade.php create mode 100644 resources/views/booking/index.blade.php create mode 100644 resources/views/errors/layout.blade.php create mode 100644 resources/views/home.blade.php create mode 100644 resources/views/index.blade.php create mode 100644 resources/views/layouts/app.blade.php create mode 100644 resources/views/oauth/callback.blade.php create mode 100644 resources/views/oauth/emailTaken.blade.php create mode 100644 routes/api.php create mode 100644 routes/channels.php create mode 100644 routes/console.php create mode 100644 routes/web.php create mode 100644 server.php create mode 100755 storage/app/.gitignore create mode 100755 storage/app/public/.gitignore create mode 100755 storage/framework/.gitignore create mode 100755 storage/framework/cache/.gitignore create mode 100755 storage/framework/sessions/.gitignore create mode 100755 storage/framework/testing/.gitignore create mode 100755 storage/framework/views/.gitignore create mode 100755 storage/logs/.gitignore create mode 100644 tests/Browser/LoginTest.php create mode 100644 tests/Browser/Pages/Home.php create mode 100644 tests/Browser/Pages/Login.php create mode 100644 tests/Browser/Pages/Page.php create mode 100644 tests/Browser/Pages/Register.php create mode 100644 tests/Browser/RegisterTest.php create mode 100644 tests/Browser/WelcomeTest.php create mode 100644 tests/Browser/console/.gitignore create mode 100644 tests/Browser/screenshots/.gitignore create mode 100644 tests/CreatesApplication.php create mode 100644 tests/DuskTestCase.php create mode 100644 tests/Feature/BookingTest.php create mode 100644 tests/Feature/ChinaBankSlipTest.php create mode 100644 tests/Feature/LocaleTest.php create mode 100644 tests/Feature/LoginTest.php create mode 100644 tests/Feature/MarkingTest.php create mode 100644 tests/Feature/RateTest.php create mode 100644 tests/Feature/RegisterTest.php create mode 100644 tests/Feature/SettingCreditTest.php create mode 100644 tests/Feature/SettingSupplierTest.php create mode 100644 tests/Feature/SettingsTest.php create mode 100644 tests/TestCase.php create mode 100644 wait.sh create mode 100644 webpack.mix.js create mode 100644 yarn.lock diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000..57ed033c --- /dev/null +++ b/.babelrc @@ -0,0 +1,3 @@ +{ + "plugins": ["syntax-dynamic-import"] + } \ No newline at end of file diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..5bd7df2e --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +vendor +node_modules + +.git +.idea +.env +storage/framework/cache/** +storage/framework/sessions/** +storage/framework/views/** \ No newline at end of file diff --git a/.env-example b/.env-example new file mode 100644 index 00000000..5c17b459 --- /dev/null +++ b/.env-example @@ -0,0 +1,75 @@ +APP_NAME=IZYIM +APP_ENV=local +APP_KEY=base64:Fu2YulXExzm9HJ5LgVmZUmcbRkchHkc82q02MorN5GQ= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack + +DB_CONNECTION=mysql +DB_HOST=mysql +DB_PORT=3306 +DB_DATABASE=default +DB_USERNAME=default +DB_PASSWORD=secret + + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_DRIVER=smtp +MAIL_HOST=smtp.mailtrap.io +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" +APP_NAME=exchange +APP_ENV=local +APP_KEY=base64:Fu2YulXExzm9HJ5LgVmZUmcbRkchHkc82q02MorN5GQ= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack + +DB_CONNECTION=mysql +DB_HOST=mysql +DB_PORT=3306 +DB_DATABASE=default +DB_USERNAME=default +DB_PASSWORD=secret + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +SESSION_DRIVER=file +SESSION_LIFETIME=120 +QUEUE_DRIVER=sync + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_DRIVER=smtp +MAIL_HOST=smtp.mailtrap.io +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + +JWT_SECRET=FwYZ3SPFgjpEDqAwcaSIV6eEmQiMtGWt \ No newline at end of file diff --git a/.env.prod b/.env.prod new file mode 100644 index 00000000..4b60c95c --- /dev/null +++ b/.env.prod @@ -0,0 +1,80 @@ +APP_NAME=IZYIM +APP_ENV=production +APP_KEY=base64:Fu2YulXExzm9HJ5LgVmZUmcbRkchHkc82q02MorN5GQ= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack + +DB_CONNECTION=mysql +DB_HOST=mysql +DB_PORT=3306 +DB_DATABASE=default +DB_USERNAME=default +DB_PASSWORD=secret + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +SESSION_DRIVER=file +SESSION_LIFETIME=120 +QUEUE_DRIVER=sync + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_DRIVER=smtp +MAIL_HOST=smtp.mailtrap.io +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" +APP_NAME=exchange +APP_ENV=local +APP_KEY=base64:Fu2YulXExzm9HJ5LgVmZUmcbRkchHkc82q02MorN5GQ= +APP_DEBUG=true +APP_URL=http://localhost + +LOG_CHANNEL=stack + +DB_CONNECTION=mysql +DB_HOST=mysql +DB_PORT=3306 +DB_DATABASE=default +DB_USERNAME=default +DB_PASSWORD=secret + +BROADCAST_DRIVER=log +CACHE_DRIVER=file +SESSION_DRIVER=file +SESSION_LIFETIME=120 +QUEUE_DRIVER=sync + +REDIS_HOST=127.0.0.1 +REDIS_PASSWORD=null +REDIS_PORT=6379 + +MAIL_DRIVER=smtp +MAIL_HOST=smtp.mailtrap.io +MAIL_PORT=2525 +MAIL_USERNAME=null +MAIL_PASSWORD=null +MAIL_ENCRYPTION=null + +PUSHER_APP_ID= +PUSHER_APP_KEY= +PUSHER_APP_SECRET= +PUSHER_APP_CLUSTER=mt1 + +MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" +MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" + +JWT_SECRET=FwYZ3SPFgjpEDqAwcaSIV6eEmQiMtGWt \ No newline at end of file diff --git a/.env.testing b/.env.testing new file mode 100644 index 00000000..6d5009b2 --- /dev/null +++ b/.env.testing @@ -0,0 +1,18 @@ +APP_ENV=phpunit +APP_DEBUG=true +APP_KEY=w7VQXeA7U31DCdh1U39lpRz0iD7i0oCI +APP_URL=http://localhost + +DB_CONNECTION=mysql +DB_HOST=mysql +DB_PORT=3306 +DB_DATABASE=default +DB_USERNAME=default +DB_PASSWORD=secret + +CACHE_DRIVER=array +SESSION_DRIVER=array +QUEUE_DRIVER=sync +MAIL_DRIVER=log + +JWT_SECRET=FwYx3SPFxjpEDxAwcaSIV6eExQiMtGWx \ No newline at end of file diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 00000000..695b75d3 --- /dev/null +++ b/.eslintrc @@ -0,0 +1,15 @@ +{ + "root": true, + "parserOptions": { + "parser": "babel-eslint", + "ecmaVersion": 2017, + "sourceType": "module" + }, + "extends": [ + "plugin:vue/recommended", + "@vue/standard" + ], + "rules": { + "vue/max-attributes-per-line": "off" + } + } \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..adb09eb6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,23 @@ +node_modules +public/hot +public/storage +public/js +public/css +public/mix-manifest.json +storage/*.key +vendor/** +.idea +.vscode +.vagrant +/data +vendor/composer +Homestead.json +Homestead.yaml +npm-debug.log +yarn-error.log +.env +.env.prod +vendor/composer/autoload_static.php +vendor/composer/autoload_classmap.php +package-lock.json +composer.lock \ No newline at end of file diff --git a/.gitlab-ci.sh b/.gitlab-ci.sh new file mode 100644 index 00000000..d907b6d8 --- /dev/null +++ b/.gitlab-ci.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +# Install dependencies only for Docker. +[[ ! -e /.dockerenv ]] && exit 0 +set -xe + +# Update packages and install composer and PHP dependencies. +apt-get update -yqq +apt-get install git libgd-dev libcurl4-gnutls-dev libicu-dev libmcrypt-dev libvpx-dev libjpeg-dev libpng-dev libxpm-dev zlib1g-dev libfreetype6-dev libxml2-dev libexpat1-dev libbz2-dev libgmp3-dev libldap2-dev unixodbc-dev libpq-dev libsqlite3-dev libaspell-dev libsnmp-dev libpcre3-dev libtidy-dev -yqq + +# Compile PHP, include these extensions. +docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ +docker-php-ext-install mbstring pdo_mysql curl json intl gd xml zip bz2 opcache + +# Install Composer and project dependencies. +curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer +composer install + +# Copy over testing configuration. +cp .env.testing .env + +# Install xdebug +#pecl install xdebug && docker-php-ext-enable xdebug + +# Generate an application key. Re-cache. +php artisan key:generate +php artisan jwt:secret +php artisan config:cache +php artisan config:clear +# php artisan optimize // remove after laravel 5.6 + +# Run database migrations with seeder +php artisan migrate:refresh --seed + + diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 00000000..568692f7 --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,34 @@ +before_script: + - bash .gitlab-ci.sh + +stages: + - testing + - staging + +variables: + MYSQL_DATABASE: default + MYSQL_USER: default + MYSQL_PASSWORD: secret + MYSQL_ROOT_PASSWORD: root + +unitTesting: + stage: testing + image: php:7.2.6 + services: + - mysql:5.7 + script: + - vendor/bin/phpunit --coverage-text --colors=never + +staging: + stage: staging + before_script: + - mkdir -p ~/.ssh + - echo -e "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa + - chmod 400 ~/.ssh/id_rsa + - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' + script: + - ssh admin@exchange-staging.izyim.com "cd exchange && git pull origin master && sudo docker-compose -f docker-prod.yml up -d" + environment: + name: staging + url: https://exchange-staging.izyim.com/ + when: manual diff --git a/.rnd b/.rnd new file mode 100644 index 0000000000000000000000000000000000000000..e42370c8f43600b4fed077a63736333bf0fc1f8d GIT binary patch literal 1024 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 literal 0 HcmV?d00001 diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..52c00e2f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,100 @@ +# Changelog +### 1.0.5-alpha 2018-09-03 +- Fixed 404 error on downloading PO format +- Fixed admin step 2 404 error +- Fixed all files 404 error +- Updated sorting feature +- Added marking column to admin completed table + +### 1.0.4-alpha 2018-08-27 +- Updated bank setting dropdown list to [Beneficiary Name : bank name : bank account no] +- Fixed some booking view status 404 error +- Fixed admin completed table view status not clickable +- Migrated to Google Cloud + +## 1.0.3-alpha - 2018-08-20 +- Added new feature - Rate is realtime now +- Updated active bank setting now with bank account with bank name +- Updated required field on bank setting (acc no, bank name, comp name) +- Removed "Please key in the data in Chinese" note at bank setting +- Fixed completed booking showing in normal booking table +- Fixed booking page not found +- Fixed refresh button for both normal and completed booking +- Temporary removed notification +- Working Progress Feature: Realtime notification, Cancel booking, Sort booking + +## 1.0.2-alpha - 2018-08-13 +- Added completed booking tab feature +- Removed login remember me checkbox +- Updated blue report with bank name and bank branch +- Fixed marking bug on mobile version +- Fixed step 2 bug + +## 1.0.1-alpha - 2018-08-09 +- Fixed X2 milestone, now completed at step 5 +- Fixed X2 no billing charge +- Fixed forgot password bug +- Updated customer registration marking with auto capital feature +- Updated admin marking setting with auto capital feature +- Added green report info for every page after supplier booking page + +## 1.0.0-alpha - 2018-08-02 +- Release 1.0.0 + +## 4.1.0-dev - 2018-03-14 + +- Upgrade to Laravel 5.6 +- Update npm dependencies +- Enabled Mix [esModule](https://github.com/JeffreyWay/laravel-mix/pull/1526#issuecomment-373044182) by default +- Lint with eslint-plugin-vue and eslint-config-standard + +## 4.0.0-dev - 2018-01-23 + +- Brought back the `layout` property in pages that was removed in 3.0. By default it's set to `default` (`~/layouts/default.vue`). + +## 3.0.1-dev - 2018-01-22 + +- Removed middleware from routes, since they don't work when you press the back button. Now you have to use the `middleware` property in pages. + +## 3.0.0-dev - 2018-01-22 + +- Removed `layout` property from pages in favor of explicit layout components +- Improved middleware system, you can either define it on a route or directly on a component +- Reorganized components +- Change jwt token ttl to one day +- Fixed hot module replacement + +## 2.2.1-dev - 2018-01-19 + +- Upgrade to Bootstrap 4 + +## 2.2.0-dev - 2018-01-16 + +- Added dynamic import for pages +- Added locale with dynamic import +- Import shakable fontawesome module + +## 2.1.0-dev - 2018-01-10 + +- Simplifyd password reset +- Upgrade to Bootstrap 4 beta3 +- Added oauth with popup window + +## 2.0.0-dev - 2017-12-19 + +- Added support for Socialite +- Added dropdown to select the locale +- Added route middleware +- Added Font Awesome 5 icons +- Added user profile photo in navbar +- Added Chinese and Spanish translations +- Upgrade to Bootstrap 4 beta2 +- Fixed router scroll behaviour +- Namespaced store modules +- Published project to Packagist + +## 1.0.0-dev - 2017-09-02 + +- Upgrade to Laravel 5.5. +- Upgrade to Bootstrap 4 beta1. +- Rework routing and guards. diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..b04c39b3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,27 @@ +# Build frontend assets +# FROM node as frontend +# WORKDIR /app +# ADD . /app +# RUN npm install +# RUN npm run production + +# Build backend +FROM php:7.1.3 +RUN apt-get update -y && apt-get install -y openssl zip unzip git zlib1g-dev netcat mysql-client libgd-dev libfreetype6-dev libjpeg62-turbo-dev libpng12-dev +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer +RUN docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ +RUN docker-php-ext-install pdo pdo_mysql zip gd +WORKDIR /app +ADD . /app +RUN chmod 755 /app/storage +RUN chmod 777 -R /app/bootstrap/cache + +RUN composer install +RUN php artisan clear-compiled + +COPY wait.sh /usr/local/bin/wait.sh +RUN chmod +x /usr/local/bin/wait.sh + +RUN chown -R www-data:www-data /app +CMD /usr/local/bin/wait.sh && composer update --no-scripts && composer dumpautoload && php artisan migrate && php artisan serve --host=0.0.0.0 --port=8000 +EXPOSE 8000 diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..97be378f --- /dev/null +++ b/LICENSE @@ -0,0 +1,5 @@ +Copyright (C) CIEF Sdn Bhd - All Rights Reserved + +Unauthorized copying of this file, via any medium is strictly prohibited +Proprietary and confidential +Written by Elmer Fudd , August 2018 \ No newline at end of file diff --git a/Procfile b/Procfile new file mode 100644 index 00000000..b9373c7a --- /dev/null +++ b/Procfile @@ -0,0 +1 @@ +web: vendor/bin/heroku-php-apache2 public/ && npm run production \ No newline at end of file diff --git a/app/Booking.php b/app/Booking.php new file mode 100644 index 00000000..24990028 --- /dev/null +++ b/app/Booking.php @@ -0,0 +1,58 @@ +belongsTo(User::class); + } + + public function supplierBooking(){ + return $this->hasOne(SupplierBooking::class); + } + + public function chinaBankSlip(){ + return $this->hasMany(ChinaBankSlip::class); + } + + public function userBankSlip(){ + return $this->hasOne(UserBankSlip::class); + } + + public function purchaseOrder(){ + return $this->hasOne(PurchaseOrder::class); + } + + public function invoice(){ + return $this->hasOne(Invoice::class); + } + + +} + diff --git a/app/ChinaBankSlip.php b/app/ChinaBankSlip.php new file mode 100644 index 00000000..47e2fe4d --- /dev/null +++ b/app/ChinaBankSlip.php @@ -0,0 +1,15 @@ +belongsTo(Booking::class); + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php new file mode 100644 index 00000000..a8c51585 --- /dev/null +++ b/app/Console/Kernel.php @@ -0,0 +1,42 @@ +command('inspire') + // ->hourly(); + } + + /** + * Register the commands for the application. + * + * @return void + */ + protected function commands() + { + $this->load(__DIR__.'/Commands'); + + require base_path('routes/console.php'); + } +} diff --git a/app/Events/RateUpdated.php b/app/Events/RateUpdated.php new file mode 100644 index 00000000..58f49817 --- /dev/null +++ b/app/Events/RateUpdated.php @@ -0,0 +1,47 @@ +rate = $rate; + } + + /** + * Get the channels the event should broadcast on. + * + * @return \Illuminate\Broadcasting\Channel|array + */ + public function broadcastOn() + { + return new Channel('rate-updated'); + //return new PrivateChannel('rate-updated'); + } + + public function broadcastWith() { + return [ + 'rate' => $this->rate, + ]; + } + +} diff --git a/app/Exceptions/EmailTakenException.php b/app/Exceptions/EmailTakenException.php new file mode 100644 index 00000000..8047511c --- /dev/null +++ b/app/Exceptions/EmailTakenException.php @@ -0,0 +1,19 @@ +view('oauth.emailTaken', [], 400); + } +} diff --git a/app/Exceptions/Handler.php b/app/Exceptions/Handler.php new file mode 100644 index 00000000..ae2f68fb --- /dev/null +++ b/app/Exceptions/Handler.php @@ -0,0 +1,61 @@ +json([ + 'error' => 'Resource not found' + ], 404); + } + + return parent::render($request, $exception); + } +} diff --git a/app/Http/Controllers/Auth/ForgotPasswordController.php b/app/Http/Controllers/Auth/ForgotPasswordController.php new file mode 100644 index 00000000..7cf81310 --- /dev/null +++ b/app/Http/Controllers/Auth/ForgotPasswordController.php @@ -0,0 +1,52 @@ +middleware('guest'); + } + + /** + * Get the response for a successful password reset link. + * + * @param string $response + * @return \Illuminate\Http\RedirectResponse + */ + protected function sendResetLink(Request $request) + { + if($request->input('email')) { + $this->sendResetLinkEmail($request); + } + + return response()->json([ + 'error' => false, + 'status' => 'We have sent reset password link to '. $request->input('email') + ]); + } + + /** + * Get the response for a failed password reset link. + * + * @param \Illuminate\Http\Request $request + * @param string $response + * @return \Illuminate\Http\RedirectResponse + */ + protected function sendResetLinkFailedResponse(Request $request, $response) + { + return response()->json(['email' => trans($response)], 400); + } +} diff --git a/app/Http/Controllers/Auth/LoginController.php b/app/Http/Controllers/Auth/LoginController.php new file mode 100644 index 00000000..dda593be --- /dev/null +++ b/app/Http/Controllers/Auth/LoginController.php @@ -0,0 +1,72 @@ +middleware('guest')->except('logout'); + } + + /** + * Attempt to log the user into the application. + * + * @param \Illuminate\Http\Request $request + * @return bool + */ + protected function attemptLogin(Request $request) + { + $token = $this->guard()->attempt($this->credentials($request)); + + if ($token) { + $this->guard()->setToken($token); + + return true; + } + + return false; + } + + /** + * Send the response after the user was authenticated. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + protected function sendLoginResponse(Request $request) + { + $this->clearLoginAttempts($request); + + $token = (string) $this->guard()->getToken(); + $expiration = $this->guard()->getPayload()->get('exp'); + + return [ + 'token' => $token, + 'token_type' => 'bearer', + 'expires_in' => $expiration - time(), + ]; + } + + /** + * Log the user out of the application. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function logout(Request $request) + { + $this->guard()->logout(); + } +} diff --git a/app/Http/Controllers/Auth/OAuthController.php b/app/Http/Controllers/Auth/OAuthController.php new file mode 100644 index 00000000..b5d2c8c6 --- /dev/null +++ b/app/Http/Controllers/Auth/OAuthController.php @@ -0,0 +1,113 @@ + route('oauth.callback', 'github'), + ]); + } + + /** + * Redirect the user to the provider authentication page. + * + * @param string $provider + * @return \Illuminate\Http\RedirectResponse + */ + public function redirectToProvider($provider) + { + return [ + 'url' => Socialite::driver($provider)->stateless()->redirect()->getTargetUrl(), + ]; + } + + /** + * Obtain the user information from the provider. + * + * @param string $driver + * @return \Illuminate\Http\Response + */ + public function handleProviderCallback($provider) + { + $user = Socialite::driver($provider)->stateless()->user(); + $user = $this->findOrCreateUser($provider, $user); + + $this->guard()->setToken( + $token = $this->guard()->login($user) + ); + + return view('oauth/callback', [ + 'token' => $token, + 'token_type' => 'bearer', + 'expires_in' => $this->guard()->getPayload()->get('exp') - time(), + ]); + } + + /** + * @param string $provider + * @param \Laravel\Socialite\Contracts\User $sUser + * @return \App\User|false + */ + protected function findOrCreateUser($provider, $user) + { + $oauthProvider = OAuthProvider::where('provider', $provider) + ->where('provider_user_id', $user->getId()) + ->first(); + + if ($oauthProvider) { + $oauthProvider->update([ + 'access_token' => $user->token, + 'refresh_token' => $user->refreshToken, + ]); + + return $oauthProvider->user; + } + + if (User::where('email', $user->getEmail())->exists()) { + throw new EmailTakenException; + } + + return $this->createUser($provider, $user); + } + + /** + * @param string $provider + * @param \Laravel\Socialite\Contracts\User $sUser + * @return \App\User + */ + protected function createUser($provider, $sUser) + { + $user = User::create([ + 'name' => $sUser->getName(), + 'email' => $sUser->getEmail(), + ]); + + $user->oauthProviders()->create([ + 'provider' => $provider, + 'provider_user_id' => $sUser->getId(), + 'access_token' => $sUser->token, + 'refresh_token' => $sUser->refreshToken, + ]); + + return $user; + } +} diff --git a/app/Http/Controllers/Auth/RegisterController.php b/app/Http/Controllers/Auth/RegisterController.php new file mode 100644 index 00000000..ac102fc2 --- /dev/null +++ b/app/Http/Controllers/Auth/RegisterController.php @@ -0,0 +1,92 @@ +middleware('guest'); + } + + /** + * The user has been registered. + * + * @param \Illuminate\Http\Request $request + * @param mixed $user + * @return mixed + */ + protected function registered(Request $request, $user) + { + return $user; + } + + /** + * Get a validator for an incoming registration request. + * + * @param array $data + * @return \Illuminate\Contracts\Validation\Validator + */ + protected function validator(array $data) + { + return Validator::make($data, [ + 'marking' => 'required|max:255|unique:markings', + 'email' => 'required|email|max:255|unique:users', + 'password' => 'required|min:6|confirmed', + ]); + } + + /** + * Create a new user instance after a valid registration. + * + * @param array $data + * @return User + */ + protected function create(Request $data) + { + $this->validate($data, [ + 'email' => 'required|email|max:255|unique:users', + 'password' => 'required|min:6|confirmed', + ]); + + $marking = Marking::Where('email',$data['email'])->first(); + + if(!$marking){ + return response()->json(["message"=>"Marking does not exist, please contact sales team to get one"], 400); + } + if($marking->marking != strtoupper($data['marking'])){ + return response()->json(["message"=>"Incorrect marking"], 400); + } + + if(User::Where('email',$data['email'])->first()){ + return response()->json(["message"=>"Email already exist in the system"], 400); + } + + $role = Role::where('name','=','member')->first(); + $user = new User(); + $user->name = $data['name']; + $user->email = $data['email']; + $user->marking = $marking->marking; + $user->password = bcrypt($data['password']); + + $user->save(); + $user->attachRole($role); + return response()->json($user, 201); + } +} diff --git a/app/Http/Controllers/Auth/ResetPasswordController.php b/app/Http/Controllers/Auth/ResetPasswordController.php new file mode 100644 index 00000000..e3c55ca7 --- /dev/null +++ b/app/Http/Controllers/Auth/ResetPasswordController.php @@ -0,0 +1,49 @@ +middleware('guest'); + } + + /** + * Get the response for a successful password reset. + * + * @param string $response + * @return \Illuminate\Http\RedirectResponse + */ + protected function sendResetResponse($response) + { + return ['status' => trans($response)]; + } + + /** + * Get the response for a failed password reset. + * + * @param \Illuminate\Http\Request $request + * @param string $response + * @return \Illuminate\Http\RedirectResponse + */ + protected function sendResetFailedResponse(Request $request, $response) + { + return response()->json(['email' => trans($response)], 400); + } + + protected function showResetForm(){ + return view('index'); + } +} diff --git a/app/Http/Controllers/BookingController.php b/app/Http/Controllers/BookingController.php new file mode 100644 index 00000000..e4aa1d15 --- /dev/null +++ b/app/Http/Controllers/BookingController.php @@ -0,0 +1,1057 @@ +where('user_id', Auth::user()->id) + ->where('is_cancel', 0) + ->where(function ($query) { + $query->where(function($query){ + $query->where('status', '<', '5') + ->where(function ($query) { + $query->where('term', '=', 'x2_cheque') + ->orwhere('term', '=', 'x2_ba') + ->orwhere('term', '=', 'x2_cash'); + }); + }) + ->orwhere(function ($query) { + $query->where('status', '<', '7') + ->where(function ($query) { + $query->where('term', '=', 'x1_cheque') + ->orwhere('term', '=', 'x1_ba') + ->orwhere('term', '=', 'x1_cash'); + }); + }); + }) + ->orderby('updated_at','desc') + ->paginate(10); + + + // reformat to fit frontend structure + foreach ($bookings as $booking) { + // set timeout + $date1 = new DateTime($booking->created_at); + $date2 = new DateTime(); + $time_in_seconds = SettingCredit::orderby('updated_at','desc')->first()->time_limit; + $difference_in_seconds = ($date1->format('U') + $time_in_seconds) - ($date2->format('U')); + $booking->timeout = $difference_in_seconds; + + // TODO : you can make it better + if($difference_in_seconds < 0 ){ + $booking->timeout = 0; + } + + // TODO : transfer_amount change name to bia + $booking->transfer_amount = $booking->bia; + + $booking->track_status = "(". $booking->status ."/7)"; + + if ($booking->term == "x2_cash" || $booking->term == "x2_cheque" || $booking->term == "x2_ba"){ + $booking->track_status = "(". $booking->status ."/5)"; + } + + switch ($booking->status) { + case 1: + $status_desc = "Order in progress"; + break; + case 2: + $status_desc = "Waiting for payment"; + break; + case 3: + $status_desc = "Waiting verification"; + break; + case 4: + $status_desc = "Processing transfer"; + break; + case 5: + $status_desc = "Transfer Complete, please upload your PO"; + break; + case 6: + $status_desc = "Processing invoice"; + break; + case 7: + $status_desc = "Order Completed"; + break; + default: + $status_desc = ""; + } + $booking->status_desc = $status_desc; + $booking->marking = $booking->user->marking; + } + + return $bookings; + } + + public function userComplete(){ + $user = Auth::user(); + $bookings = Booking::select('user_id', 'id', 'created_at', 'status', 'rate', 'term', 'amount', 'bia', 'verification_status') + ->where('user_id', Auth::user()->id) + ->where('status', '=', '5') + ->where(function ($query) { + $query->where('term', '=', 'x2_cash') + ->orwhere('term', '=', 'x2_cheque') + ->orwhere('term', '=', 'x2_ba'); + }) + ->orwhere('status', '=', '7') + ->where(function ($query) { + $query->where('term', '=', 'x1_cash') + ->orwhere('term', '=', 'x1_cheque') + ->orwhere('term', '=', 'x1_ba'); + }) + ->orderby('updated_at','desc') + ->paginate(10); + + // reformat to fit frontend structure + foreach ($bookings as $booking) { + // set timeout + $date1 = new DateTime($booking->created_at); + $date2 = new DateTime(); + $time_in_seconds = SettingCredit::orderby('updated_at','desc')->first()->time_limit; + $difference_in_seconds = ($date1->format('U') + $time_in_seconds) - ($date2->format('U')); + $booking->timeout = $difference_in_seconds; + + // TODO : you can make it better + if($difference_in_seconds < 0 ){ + $booking->timeout = 0; + } + + // TODO : transfer_amount change name to bia + $booking->transfer_amount = $booking->bia; + + $booking->track_status = "(". $booking->status ."/7)"; + + // all x2 until step 5 only + if ($booking->term == "x2_cash" || $booking->term == "x2_cheque" || $booking->term == "x2_ba") { + $booking->track_status = "(". $booking->status ."/5)"; + } + + switch ($booking->status) { + case 1: + $status_desc = "Order in progress"; + break; + case 2: + $status_desc = "Waiting for payment"; + break; + case 3: + $status_desc = "Waiting verification"; + break; + case 4: + $status_desc = "Processing transfer"; + break; + case 5: + $status_desc = "Transfer Complete, please upload your PO"; + if ($booking->term == "x2_cash" || $booking->term == "x2_cheque" || $booking->term == "x2_ba"){ + $status_desc = "Order Completed"; + } + break; + case 6: + $status_desc = "Processing invoice"; + break; + case 7: + $status_desc = "Order Completed"; + break; + default: + $status_desc = ""; + } + $booking->status_desc = $status_desc; + $booking->marking = $booking->user->marking; + } + + return $bookings; + } + + public function adminIndex(){ + $user = Auth::user(); + $bookings = Booking::select('user_id', 'id', 'created_at', 'admin_status', 'rate', 'term', 'amount', 'bia', 'verification_status') + ->where('admin_status', '<', '6') + ->orwhere(function ($query) { + $query->where('admin_status', '=', '6') + ->where('term', '!=', 'x2_cheque') + ->where('term', '!=', 'x2_ba') + ->where('term', '!=', 'x2_cash'); + }) + + ->orderby('updated_at','desc') + ->paginate(10); + + // reformat to fit frontend structure + foreach ($bookings as $booking) { + // set timeout + $date1 = new DateTime($booking->created_at); + $date2 = new DateTime(); + $time_in_seconds = SettingCredit::orderby('updated_at','desc')->first()->time_limit; + $difference_in_seconds = ($date1->format('U') + $time_in_seconds) - ($date2->format('U')); + $booking->timeout = $difference_in_seconds; + + // TODO : you can make it better + if($difference_in_seconds < 0 ){ + $booking->timeout = 0; + } + + // TODO : transfer_amount change name to bia + $booking->transfer_amount = $booking->bia; + + $term = $booking->term; + if ($booking->term == "x2_cash" || $booking->term == "x2_cheque" || $booking->term == "x2_ba"){ + $booking->track_status = "(". $booking->admin_status ."/6)"; + } + else{ + $booking->track_status = "(". $booking->admin_status ."/7)"; + } + + switch ($booking->admin_status) { + case 1: + $status_desc = "Waiting customer upload bank slip"; + break; + case 2: + $status_desc = "Verify user bank slip"; + break; + case 3: + $status_desc = "Generate supplier booking report"; + break; + case 4: + $status_desc = "Supplier booking report. Please confirm with your booking."; + break; + case 5: + $status_desc = "Please, upload China Bankslip"; + break; + case 6: + $status_desc = "Waiting customer to upload purchase order"; + if ($booking->term == "x2_cash" || $booking->term == "x2_cheque" || $booking->term == "x2_ba"){ + $status_desc = "Order Completed"; + } + break; + case 7: + $status_desc = "Customer has uploaded purchase order, please upload invoice"; + break; + case 8: + $status_desc = "Booking Completed"; + break; + default: + $status_desc = ""; + } + $booking->marking = $booking->user->marking; + $booking->status_desc = $status_desc; + } + return $bookings; + } + + public function adminBookComplete(){ + $user = Auth::user(); + $bookings = Booking::select('user_id', 'id', 'created_at', 'admin_status', 'rate', 'term', 'amount', 'bia', 'verification_status') + ->where('admin_status', '=', '6') + ->where(function ($query) { + $query->where('term', '=', 'x2_cash') + ->orwhere('term', '=', 'x2_cheque') + ->orwhere('term', '=', 'x2_ba'); + }) + ->orwhere('admin_status', '=', '7') + ->where(function ($query) { + $query->where('term', '=', 'x1_cash') + ->orwhere('term', '=', 'x1_cheque') + ->orwhere('term', '=', 'x1_ba'); + }) + ->orderby('updated_at','desc') + ->paginate(10); + // reformat to fit frontend structure + foreach ($bookings as $booking) { + // set timeout + $date1 = new DateTime($booking->created_at); + $date2 = new DateTime(); + $time_in_seconds = SettingCredit::orderby('updated_at','desc')->first()->time_limit; + $difference_in_seconds = ($date1->format('U') + $time_in_seconds) - ($date2->format('U')); + $booking->timeout = $difference_in_seconds; + + // TODO : you can make it better + if($difference_in_seconds < 0 ){ + $booking->timeout = 0; + } + + // TODO : transfer_amount change name to bia + $booking->transfer_amount = $booking->bia; + + $term = $booking->term; + if ($booking->term == "x2_cash" || $booking->term == "x2_cheque" || $booking->term == "x2_ba"){ + $booking->track_status = "(". $booking->admin_status ."/6)"; + } + else{ + $booking->track_status = "(". $booking->admin_status ."/7)"; + } + + switch ($booking->admin_status) { + case 1: + $status_desc = "Waiting customer upload bank slip"; + break; + case 2: + $status_desc = "Verify user bank slip"; + break; + case 3: + $status_desc = "Generate supplier booking report"; + break; + case 4: + $status_desc = "Supplier booking report. Please confirm with your booking."; + break; + case 5: + $status_desc = "Please, upload China Bankslip"; + break; + case 6: + $status_desc = "Waiting customer to upload purchase order"; + if ($booking->term == "x2_cash" || $booking->term == "x2_cheque" || $booking->term == "x2_ba"){ + $status_desc = "Order Completed"; + } + break; + case 7: + $status_desc = "Customer has uploaded purchase order, please upload invoice"; + break; + case 8: + $status_desc = "Booking Completed"; + break; + default: + $status_desc = ""; + } + $booking->marking = $booking->user->marking; + $booking->status_desc = $status_desc; + } + return $bookings; + } + public function show($id) + { + $booking = Booking::where('user_id',Auth::user()->id)->where('id', $id)->first(); + + + if($booking){ + + $date1 = new DateTime($booking->created_at); + + $user_bankslip = $booking->userBankSlip()->first(); + $china_bankslip = $booking->chinaBankSlip()->get(); + $po = $booking->purchaseOrder()->first(); + $invoice = $booking->invoice()->first(); + + if ($user_bankslip){ + $booking->user_bankslip_path = Storage::url($user_bankslip->bankslip_path); + $booking->reject_reason = $user_bankslip->reject_reason; + $date1 = new DateTime($user_bankslip->updated_at); + } + + if($china_bankslip){ + for($index = 0;$index < $booking->chinaBankSlip()->count();$index++){ + $china_bankslip[$index] = Storage::url($china_bankslip[$index]->china_bank_slip_path); + } + $booking->china_bankslip_path = $china_bankslip; + } + + if($po){ + $booking->user_po_path = Storage::url($po->image_path); + } + + if($invoice){ + $booking->invoice_path = Storage::url($invoice->invoice_path); + } + + // set timeout + $date1 = new DateTime($booking->created_at); + $date2 = new DateTime(); + $time_in_seconds = SettingCredit::orderby('updated_at','desc')->first()->time_limit; + $difference_in_seconds = ($date1->format('U') + $time_in_seconds) - ($date2->format('U')); + $booking->timeout = $difference_in_seconds; + $booking->marking = $booking->user->marking; + + if (!$booking){ + return response()->json(['success'=>false, 'message'=>'not found'], 404); + } + + return $booking; + } + else{ + return response()->json(['success'=>false, 'message'=>'Booking not found'], 404); + } + } + + public function adminShow($id) + { + $booking = Booking::where('id', $id)->firstOrFail(); + + + $user_bankslip = $booking->userBankSlip()->first(); + $china_bankslip = $booking->chinaBankSlip()->get(); + $po = $booking->purchaseOrder()->first(); + $invoice = $booking->invoice()->first(); + + if($booking){ + if ($user_bankslip){ + $booking->user_bankslip_path = Storage::url($user_bankslip->bankslip_path); + $booking->reject_reason = $user_bankslip->reject_reason; + $date1 = new DateTime($user_bankslip->updated_at); + } + + if($china_bankslip){ + for($index = 0;$index < $booking->chinaBankSlip()->count();$index++){ + $china_bankslip[$index] = Storage::url($china_bankslip[$index]->china_bank_slip_path); + } + $booking->china_bankslip_path = $china_bankslip; + } + + if($po){ + $booking->user_po_path = Storage::url($po->image_path); + } + + if($invoice){ + $booking->invoice_path = Storage::url($invoice->invoice_path); + } + + // set timeout + $date1 = new DateTime($booking->created_at); + $date2 = new DateTime(); + $time_in_seconds = SettingCredit::orderby('updated_at','desc')->first()->time_limit; + $difference_in_seconds = ($date1->format('U') + $time_in_seconds) - ($date2->format('U')); + $booking->timeout = $difference_in_seconds; + $booking->marking = $booking->user->marking; + + if (!$booking){ + return response()->json(['success'=>false, 'message'=>'not found'], 404); + } + return $booking; + } + } + + public function store(Request $request) + { + $term = $request->input('term'); + $amount = $request->input("amount"); // in RMB + $rates = Rate::orderby('updated_at','desc')->first(); + $creditLimit = SettingCredit::orderby('updated_at','desc')->first(); + $taxrate = SettingTaxRate::latest()->first()->tax_rate; + $billingChargeRate = SettingBillingCharge::latest()->first()->billing_charge_rate; + + if (!$creditLimit){ + return response()->json("Credit limit not set, please contact admin", 405); + } + + if($amount > $creditLimit->rmb_credit_limit){ + return response()->json("Exceed credit limit, need approved from admin", 401); + } + + $user = Auth::user(); + $rate = 1; // default rate to 1 + + + switch ($term) { + case "x1_cash": + $rate = $rates->x1_cash; + break; + case "x1_cheque": + $rate = $rates->x1_cheque; + break; + case "x1_ba": + $rate = $rates->x1_ba; + break; + case "x2_cash": + $rate = $rates->x2_cash; + break; + case "x2_cheque": + $rate = $rates->x2_cheque; + break; + case "x2_ba": + $rate = $rates->x2_ba; + break; + default: + return response()->json([ + 'success' => false, + 'message' => 'Invalid input', + ], 422); + break; + } + + // Service charge (RMB) : if amount higher than 10,000 or term x2 no service charge. + if ($amount >= 10000 && ($term == 'x2_cash' || $term == 'x2_cheque' || $term == 'x2_ba')) { + $svcharge = 0; + } else { + $svcharge = 20.00; + //$svcharge = 0; // UPDATE ON : 15-8-2018 from PM + } + + $subtotal = round(($amount + $svcharge) / $rate, 2); + + // TODO : refactor + if ($taxrate !=0){ + $taxAmount = round($subtotal * $taxrate - $subtotal, 2); + } + else{ + $taxAmount = 0; + } + + if ($term == 'x2_cash' || $term == 'x2_cheque' || $term == 'x2_ba'){ + $billingChargeAmount = 0; + } + else{ + // TODO : billing charge rate to percentage so we do not need to minus amount + svcharge + $billingChargeAmount = round((($amount / $rate) * $billingChargeRate) - ($amount / $rate), 2); + } + + + + $bankin_amount = round($subtotal + $taxAmount + $billingChargeAmount , 2); + $booking = new Booking(); + $booking->account_name = $request->input('account_name'); + $booking->account_num = $request->input('account_num'); + $booking->bank_name = $request->input('bank_name'); + $booking->bank_branch = $request->input('bank_branch'); + $booking->amount = $request->input('amount'); + $booking->order_no = $request->input('order_no'); + $booking->payment_for = $request->input('payment_for'); + $booking->term = $term; + $booking->rate_id = $rates->id; + $booking->rate = $rate; + $booking->rmb_book_amount = $request->input('amount'); // BIG TODO : amount change variable name to rmb_book_amount + $booking->status = 2; + $booking->bia = $bankin_amount; // BID TODO : change bia viariable name + // $booking->user_id = $user->id; + $booking->user()->associate($user); + + + // The test failed due to ->save() before filling up the information at below + + // TODO : handle RMB, MYR and USD (we can use exchange type: USDtoMYR, RMBtoMYR vise versa to switch case) + // $booking->rmb_book_pay_method = $request->input('payment_method'); + // $booking->rmb_book_account_name = $request->input('rmb_book_account_name'); + // $booking->rmb_book_acc_no = $request->input('rmb_book_acc_no'); + // $booking->rmb_book_bank_branch = $request->input('rmb_book_bank_branch'); + // $booking->company_name = $request->input('company_name'); + // $booking->company_address = $request->input('company_address'); + // $booking->bank_address = $request->input('bank_address'); + // $booking->swift_code = $request->input('swift_code'); + // $booking->cnap = $request->input('cnap'); + // $booking->term = $request->input('term'); + + // $booking->usd_book_amount = $request->input('usd_book_amount'); + // $booking->usd_book_pay_method = $request->input('usd_book_pay_method'); + // $booking->usd_book_company_name = $request->input('usd_book_company_name'); + // $booking->usd_book_company_address = $request->input('usd_book_company_address'); + // $booking->usd_book_swift_code = $request->input('usd_book_swift_code'); + // $booking->usd_book_cnap = $request->input('usd_book_cnap'); + // $booking->usd_book_bank_branch = $request->input('usd_book_bank_branch'); + // $booking->verification_status = $request->input('verification_status'); + // return response()->json($booking, 201); + $booking->save(); + // return response()->json('error', 400); + return response()->json($booking, 201); + } + + public function update(Request $request, $book_id) + { + $book_id = Booking::find($book_id); + $book_id->account_name = $request->input('account_name'); + $book_id->account_num = $request->input('account_num'); + $book_id->bank_name = $request->input('bank_name'); + $book_id->bank_branch = $request->input('bank_branch'); + $book_id->company_name = $request->input('company_name'); + $book_id->company_address = $request->input('company_address'); + $book_id->bank_address = $request->input('bank_address'); + $book_id->swift_code = $request->input('swift_code'); + $book_id->cnap = $request->input('cnap'); + $book_id->save(); + + return response()->json(['book_id'=>$book_id],200); + } + + public function uploadbankslip(Request $request, $id) + { + $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); + + /* Validation*/ + if (!$booking) + { + return response()->json(['message'=>'Access denied'], 403); + } + + $validator = Validator::make($request->all(), [ + 'file' => 'mimes:jpg,jpeg,bmp,png,xls,xlsx,doc,docx,pdf' + ]); + + if($validator->fails()) + { + return response()->json(['message'=>'Incorrect format'],400); + } + + $validator = Validator::make($request->all(), [ + 'file' => 'max:10000' // image size + ]); + + if($validator->fails()) + { + return response()->json(['message'=>'Image too large, upload files up to 3 MB'], 400); + } + + + if($bankslip_file = $request->file('file')) + { + /* End Validation */ + $filename = $bankslip_file->getClientOriginalName(); + $ext = $bankslip_file->getClientOriginalExtension(); + + + $unique_name = 'bank_slip_' . md5($filename. time()); // probably not a good idea + $unique_image_path = $unique_name. '.' .$ext; + + $upload_path = Storage::disk('public')->putFileAs( + 'user_bankslip', $bankslip_file, $unique_image_path + ); + + if($upload_path){ + + $user_bankslip = $booking->userBankSlip()->first(); + + // if user bankslip not exist, create new one + if(!$user_bankslip){ + $user_bankslip = new UserBankSlip; + } + $user_bankslip->booking_id = $booking->id; + $user_bankslip->bankslip_path = $upload_path; + $user_bankslip->transfer_amount = $request->input('transfer_amount'); + $user_bankslip->save(); + + + return response()->json(['message'=>"Success"],200); + } + else{ + return response()->json(['message' => 'File not uploaded. Please contact support'], 400); + } + + + } + else { + return response()->json(['message' => 'No file detected'], 400); + } + } + + public function updateBankSlipAmount(Request $request, $id){ + $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); + $user_bankslip = $booking->userBankSlip()->first(); + + if(!$user_bankslip){ + return response()->json(["message"=> "not found"],400); + } + + // validate transfer amount exist + if(!$request->input('transfer_amount')){ + return response()->json(['message' => 'Please input amount'], 400); + } + + // update booking status + $booking->status = 3; + $booking->admin_status = 2; + $booking->save(); + + $user_bankslip->transfer_amount = $request->input('transfer_amount'); + $user_bankslip->save(); + return response()->json(["success"=>true],200); + } + + public function uploadPurchaseOrder(Request $request, $id) + { + $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); + + /* Validation */ + if (!$booking) + { + return response()->json(['message'=>'Access denied'], 403); + } + + $validator = Validator::make($request->all(), [ + 'file' => 'mimes:jpg,jpeg,bmp,png,xls,xlsx,doc,docx,pdf' + ]); + + if($validator->fails()) + { + return response()->json(['message'=>'Incorrect format'],400); + } + + $validator = Validator::make($request->all(), [ + 'file' => 'max:10000' + ]); + + if($validator->fails()) + { + return response()->json(['message'=>'File too large, upload files up to 3 MB'], 400); + } + + if(!$user_input_file = $request->file('file')) + { + return response()->json(['message' => 'No file detected'], 404); + } + /* End Validation */ + + $filename = $user_input_file->getClientOriginalName(); + $ext = $user_input_file->getClientOriginalExtension(); + + $input['file'] = $filename; + $unique_name = 'purchase_order_' . md5($filename. time()); + $unique_image_path = $unique_name. '.' .$ext; + $upload_path = Storage::disk('public')->putFileAs( + 'purchase_order',/*folder name*/ $user_input_file, $unique_image_path, 'public' + ); + + $user_po = new PurchaseOrder; + $user_po->image_path = $upload_path; + $user_po->booking_id = $booking->id; + $user_po->save(); + + $booking->status = 6; + // $booking->admin_status = 7; + $booking->admin_status = 6; + $booking->save(); + + return response()->json(['message'=>'Success'],200); + } + + public function showPurchaseOrder($id){ + $booking = Booking::where('id',$id)->first(); + $user_po = $booking->purchaseOrder()->first(); + + if($user_po){ + return response()->json(['user_po_path'=> $user_po->image_path ],200); + } + + return response()->json(['message'=> 'waiting customer to upload their po'], 200); + } + + public function delete(Booking $book_id) + { + $booking = Booking::where('user_id', Auth::user())->where('id', $book_id)->firstOrFail(); + $booking->delete($book_id); + return response()->json($book_id, 204); + } + + public function cancel(Request $request, $book_id) + { + if (!$booking = Booking::where('user_id',Auth::user()->id)->where('id',$book_id)->first()) + { + return response()->json(['message'=>'Access denied'],403); + } + + $booking->is_cancel = true; + $booking->save(); + + return response()->json(['message'=>'Success'],200); + } + + public function calculation(Request $request) + { + $amount = $request->input('amount'); + $term = $request->input('term'); + $china_beneficiary = $request->input('china_beneficiary'); + $order_no = $request->input('order_no'); + $payment_for = $request->input('payment_for'); + $rates = Rate::orderby('updated_at','desc')->first(); + $marking = $user = Auth::user()->marking; + $taxrate = SettingTaxRate::latest()->first()->tax_rate; + $billingChargeRate = SettingBillingCharge::latest()->first()->billing_charge_rate; + + $creditLimit = SettingCredit::orderby('updated_at','desc')->first(); + + if (!$creditLimit){ + return response()->json("Credit limit not set, please contact admin", 405); + } + + if($amount > $creditLimit->rmb_credit_limit){ + return response()->json(["message" => "Exceed credit limit, please contact our sales team for larger quantitiy"], 400); + } + + switch ($term) { + case "x1_cash": + $rate = $rates->x1_cash; + $payment_method = "CASH"; + break; + case "x1_cheque": + $rate = $rates->x1_cheque; + $payment_method = "CHEQUE"; + break; + case "x1_ba": + $rate = $rates->x1_ba; + $payment_method = "BA"; + break; + case "x2_cash": + $rate = $rates->x2_cash; + $payment_method = "CASH"; + break; + case "x2_cheque": + $rate = $rates->x2_cheque; + $payment_method = "CHEQUE"; + break; + case "x2_ba": + $rate = $rates->x2_ba; + $payment_method = "BA"; + break; + default: + return response()->json([ + 'success' => false, + 'message' => 'Invalid input', + ], 422); + break; + } + + if ($amount >= 10000 && ($term == 'x2_cash' || $term == 'x2_cheque' || $term == 'x2_ba')) { + $svcharge = 0; + } else { + $svcharge = 20.00; + //$svcharge = 0; // UPDATE ON : 15-8-2018 from PM + } + + $subtotal = round(($amount + $svcharge) / $rate,2); + + // TODO : refactor + if ($taxrate !=0){ + $taxAmount = round($subtotal * $taxrate - $subtotal,2); + } + else{ + $taxAmount = 0; + } + + if ($term == 'x2_cash' || $term == 'x2_cheque' || $term == 'x2_ba'){ + $billingChargeAmount = 0; + } + else{ + // TODO : billing charge rate to percentage so we do not need to minus amount + svcharge + $billingChargeAmount = round((($amount / $rate) * $billingChargeRate) - ($amount / $rate), 2); + } + + $bankin_amount = round($subtotal + $taxAmount + $billingChargeAmount , 2); + + return response()->json([ + 'date' => date('Y-m-d'), + 'order_no' => $order_no, + 'payment_for' => $payment_for, + 'marking' => $marking, + 'payment_method' => $payment_method, + 'china_beneficary' => $china_beneficiary, + 'amount' => $amount, + 'service_charge' => $svcharge, + 'rate' => $rate, + 'subtotal' => $subtotal, + 'taxAmount' => $taxAmount, + 'billingChargeAmount' => $billingChargeAmount, + 'bankin_amount' => $bankin_amount, + 'bank_name'=> $request->input('bank_name'), + 'bank_branch'=> $request->input('bank_branch'), + 'acc_name' => $request->input('acc_name'), + 'acc_no' => $request->input('acc_no') + ], 200); + } + + public function approveBankSlip(Request $request, $book_id) + { + $booking = Booking::where('id',$book_id)->first(); + + if (!$booking) + { + return response()->json(['message'=>'Booking not found'], 400); + } + + if(!$userBankSlip = UserBankSlip::where('booking_id',$booking->id)->first()) + { + return response()->json(['message'=>'User bankslip not found'], 400); + } + + // Rejected bankslip cannot be approve again + // if($userBankSlip->is_reject == 1) + // { + // return response()->json(['message'=>'Bankslip already rejected'],200); + // } + + $userBankSlip->is_approve = 1; + $userBankSlip->is_reject = 0; + $userBankSlip->save(); + + // update booking status + $booking->status = 4; + if($booking->term !== "x1_ba" || $booking->term !== "x2_cheque"){ + $booking->admin_status = 3; + // TODO : Add notification message to user + + } + else{ + $booking->admin_status = 5; + // TODO : Add notification message to user + + } + $booking->save(); + + + return response()->json(['message'=>'Success'],200); + } + + public function rejectBankSlip(Request $request, $book_id) + { + $booking = Booking::where('id',$book_id)->first(); + if (!$booking) + { + return response()->json(['message'=>'Access denied'], 403); + } + + if(!$userBankSlip = UserBankSlip::where('booking_id',$booking->id)->first()) + { + return response()->json(['message'=>'Access denied'], 403); + } + + // approved bankslip cannot be reject again + if($userBankSlip->is_approve == 1) + { + return response()->json(['message'=>'Bankslip already approved'],200); + } + + $userBankSlip->is_reject = 1; + $userBankSlip->reject_reason = $request->input('reject_reason'); + $userBankSlip->save(); + + // update booking status + $booking->status = 2; // upload user bankslip + $booking->admin_status = 1; // user booking + $booking->save(); + + return response()->json(['message'=>'Success'],200); + } + + public function uploadInvoice(Request $request, $id) + { + $booking = Booking::where('id',$id)->first(); + + /* Validation */ + if (!$booking) + { + return response()->json(['message'=>'Access denied'], 403); + } + + $validator = Validator::make($request->all(), [ + 'invoice_path' => 'mimes:jpg,jpeg,bmp,png,xls,xlsx,doc,docx,pdf' + ]); + + if($validator->fails()) + { + return response()->json(['message'=>'Incorrect format'],400); + } + + $validator = Validator::make($request->all(), [ + 'invoice_path' => 'max:10000' + ]); + + if($validator->fails()) + { + return response()->json(['message'=>'Image too large, upload files up to 3 MB'], 400); + } + + if(!$input_file = $request->file('file')) + { + return response()->json(['message'=>'No file detected'], 400); + } + /* End Validation */ + + $filename = $input_file->getClientOriginalName(); + $ext = $input_file->getClientOriginalExtension(); + + $unique_name = 'invoice' . md5($filename. time()); + $unique_file_url = $unique_name. '.' .$ext; + $upload_path = Storage::disk('public')->putFileAs( + 'invoice', $input_file, $unique_file_url, 'public' + ); + + $invoice = new Invoice; + $invoice->invoice_path = $upload_path; + // TODO : amount + $invoice->amount = 0; + $invoice->booking_id = $booking->id; + $invoice->save(); + + return response()->json(['message'=>"Success"],200); + } + + public function confirmSupplier(Request $request, $id) + { + $booking = Booking::where('id', $id)->firstOrFail(); + $booking->status = 4; // processing transfer + $booking->admin_status = 5; // upload china bankslip + + if($booking->save()){ + // $userNotification = new Notification; + // $userNotification->detail = "Supplier booking report for booking " . $booking->id . " is completed."; + // $userNotification->link = "/booking/" . $booking->id . "/transfer"; + // $userNotification->user_id = $booking->user_id; + // $userNotification->save(); + return response()->json(['message'=>"Success"],200); + } + } + + public function confirmPurchaseOrder($id){ + $booking = Booking::where('user_id',Auth::user()->id)->where('id',$id)->first(); + + $purchase_order = $booking->purchaseOrder()->first(); + + if(!$purchase_order){ + return response()->json(["message"=> "Please upload your purchase order"],400); + } + $booking->status = 6; // wait invoice + $booking->admin_status = 6; // upload invoice + $booking->save(); + + return response()->json($purchase_order,200); + } + + public function confirmInvoice(Request $request, $id) + { + $booking = Booking::where('id', $id)->firstOrFail(); + + $invoice = $booking->invoice()->first(); + + if(!$invoice){ + return response()->json(["message"=> "Please upload your invoice"],400); + } + + $booking->status = 7; // completed + $booking->admin_status = 7; // completed + + if($booking->save()){ + return response()->json(['message'=>"Success"],200); + } + } + + public function adminShowCompletedOrders() + { + $bookings = Booking::select('id','created_at','user_id','rate','amount', 'bia', 'admin_status') + ->where('admin_status', 7) + ->orderBy('id', 'desc') + ->get(); + + foreach ($bookings as $booking) { + $booking->id; + $booking->created_at; + $booking->marking = $booking->user->marking; + $booking->rate; + $booking->amount; + $booking->bia; + $booking->admin_status = "(". $booking->admin_status ."/7)";; + } + return $bookings; + } + +} diff --git a/app/Http/Controllers/BookingSupplierController.php b/app/Http/Controllers/BookingSupplierController.php new file mode 100644 index 00000000..0c7fb17e --- /dev/null +++ b/app/Http/Controllers/BookingSupplierController.php @@ -0,0 +1,180 @@ + $bookingsupplier + ]; + + return response()->json($response, 200); + } + + public function show($id) + { + $booking = Booking::where('id', $id)->first(); + $bankin_amount = round($booking->amount / $booking->rate, 2); + + if (!$booking){ + return response()->json(['message' => 'Booking not found'], 404); + } + + switch ($booking->term) { + case "x1_cash": + $payment_method = "CASH"; + break; + case "x1_cheque": + + $payment_method = "CHEQUE"; + break; + case "x1_ba": + + $payment_method = "BA"; + break; + case "x2_cash": + + $payment_method = "CASH"; + break; + case "x2_cheque": + $payment_method = "CHEQUE"; + break; + case "x2_ba": + $payment_method = "BA"; + break; + default: + return response()->json([ + 'success' => false, + 'message' => 'Invalid input', + ], 422); + break; + } + + + $supplier_booking = $booking->supplierBooking()->first(); + $dt = new \DateTime($supplier_booking->created_at); + $supplier_booking->date = $dt->format('j F Y'); + $supplier_booking->marking = $booking->user->marking; + $supplier_booking->payment_for = $booking->payment_for; + $supplier_booking->order_no = $booking->order_no; + $supplier_booking->payment_method = $payment_method; + + $active_bank = SettingActiveBank::first(); + + // if setting is set to use customer's beneficiary + if ($active_bank->beneficiary_id == 0){ + $supplier_booking->acc_name = $booking->account_name; + $supplier_booking->acc_no = $booking->account_num; // TODO : standardize acc_no + $supplier_booking->bank_name = $booking->bank_name; + $supplier_booking->bank_branch = $booking->bank_branch; + } + + else{ + $beneficiary = SettingBeneficiary::find($active_bank->beneficiary_id); + $supplier_booking->acc_name = $beneficiary->company_name; + $supplier_booking->acc_no = $beneficiary->acc_no; + $supplier_booking->bank_name = $beneficiary->bank_name; + $supplier_booking->bank_branch = $beneficiary->bank_branch; + } + + return response()->json($supplier_booking ,200); + } + + // Only for single booking + // TODO : Multiple booking + public function store(Request $request) + { + //$transfer_amount = $request->input("transfer_amount"); + $supplier_id = $request->input("supplier_id"); + $booking_id = $request->input("booking_id"); + $rate = $request->input('rate'); // costing rate + $rebate = $request->input('rebate'); + $supplier = SettingSupplier::find($supplier_id); + $booking = Booking::find($booking_id); + + + + // Calculation (backup) + // $amountInRMB = $transfer_amount * $rate; + // $billing = 0.015 * $transfer_amount; + // $sales_tax = 0.0 * $transfer_amount; + // $gst = 0 * $transfer_amount; // do we still need this ? + // $customerBankInAmount = round($transfer_amount + $gst + $sales_tax + $billing,2); + // $rmbBankAmount = round($customerBankInAmount + $rebate, 2); + + // Update: changes in 1.1 according to new supplier booking report + $transfer_amount = $booking->amount; + + $amount_in_myr = round($transfer_amount / $rate, 2); + $amountInRMB = $transfer_amount; + $tax_rate = SettingTaxRate::latest()->first()->tax_rate; + $sales_tax = round($tax_rate * $amount_in_myr - $amount_in_myr, 2); + $amount_after_tax = round($amount_in_myr * $tax_rate,2); + //$billing = 0.015 * $transfer_amount; + // + //$gst = 0 * $transfer_amount; // do we still need this ? + //$customerBankInAmount = round($transfer_amount + $gst + $sales_tax + $billing,2); + //$rmbBankAmount = round($customerBankInAmount + $rebate, 2); + + // update existing booking supplier if exist + $bookingsupplier = SupplierBooking::where('booking_id', $booking_id)->first(); + + if (!$bookingsupplier){ + $bookingsupplier = new SupplierBooking(); + } + + $bookingsupplier->supplier_id = $supplier->id; + $bookingsupplier->amountInRMB = $amountInRMB; // TODO : rename to underscore + $bookingsupplier->amount_in_myr = $amount_in_myr; + $bookingsupplier->tax_rate = $tax_rate; + $bookingsupplier->amount_after_tax = $amount_after_tax; + $bookingsupplier->rate = $rate; + $bookingsupplier->rebate = $rebate; + $bookingsupplier->salestax_amount = $sales_tax; + //$bookingsupplier->payment_method = $request->input('payment_method'); // TODO : remove from db + //$bookingsupplier->transfer_amount = $transfer_amount; // TODO : remove from db + //$bookingsupplier->billing_amount = $billing; // TODO : remove from db + + //$bookingsupplier->rmbBankAmount = $rmbBankAmount; // TODO : remove from db + $bookingsupplier->booking_id = $booking->id; + $bookingsupplier->save(); + + // update booking status + $booking->status = 4; + $booking->admin_status = 4; + $booking->save(); + + + + return response()->json($bookingsupplier, 201); + } + + public function report(Request $request, $id) + { + $supplier_booking = Booking::firstOrFail($id)->supplierBooking()->firstOrFail(); + + return response()->json($supplier_booking ,200); + } + + + + +} diff --git a/app/Http/Controllers/ChinaBankSlipController.php b/app/Http/Controllers/ChinaBankSlipController.php new file mode 100644 index 00000000..e4cc5742 --- /dev/null +++ b/app/Http/Controllers/ChinaBankSlipController.php @@ -0,0 +1,87 @@ +firstOrFail(); + + if (!$booking) { + return response()->json(['message'=>'Access denied'], 403); + } + + // TODO : put this after check file exist + // validate file format + $validator = Validator::make($request->all(), [ + 'file' => 'mimes:jpg,jpeg,bmp,png,xls,xlsx,doc,docx,pdf' + ]); + + if($validator->fails()){ + return response()->json(['message'=>'Incorrect format'],400); + } + + $validator = Validator::make($request->all(), [ + 'china_bank_slips' => 'max:10000' + ]); + + if($validator->fails()){ + return response()->json(['message'=>'Image too large, upload files up to 3 MB'], 400); + } + + if($bankslip_file = $request->file('file')){ + $filename = $bankslip_file->getClientOriginalName(); + $ext = $bankslip_file->getClientOriginalExtension(); + $unique_name = 'cnbank_slip_' . md5($filename. time()); // probably not a good idea + $unique_image_path = $unique_name. '.' .$ext; + + // Upload Image + $upload_path = Storage::disk('public')->putFileAs( + 'china_bank_slip', $bankslip_file, $unique_image_path + ); + + + } else { + return response()->json(['message'=>'file not found'],200); + } + + $china_bankslip = new ChinaBankSlip; + $china_bankslip->booking_id = $booking->id; + $china_bankslip->china_bank_slip_path = $upload_path; + $china_bankslip->save(); + + return response()->json(['message'=>'success'], 201); + } + + public function update(Request $request, $id){ + $booking = Booking::where('id',$id)->first(); + $china_bankslip = $booking->chinaBankSlip()->first(); + + // TODO: first or fail + if(!$china_bankslip){ + return response()->json(["message"=> "China bankslip not found. Please upload first."],400); + } + + $china_bankslip->actual_transfer_amount = $request->input('actual_transfer_amount'); + $china_bankslip->date = $request->input('date'); + $china_bankslip->details = $request->input('details'); + $china_bankslip->save(); + + // update booking status + $booking->status = 5; + $booking->admin_status = 6; + $booking->save(); + + return response()->json(["message"=> "Success"],200); + } + +} diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php new file mode 100644 index 00000000..03e02a23 --- /dev/null +++ b/app/Http/Controllers/Controller.php @@ -0,0 +1,13 @@ +middleware('auth'); + } + + /** + * Show the application dashboard. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + return view('home'); + } +} diff --git a/app/Http/Controllers/MarkingController.php b/app/Http/Controllers/MarkingController.php new file mode 100644 index 00000000..1ab3aee1 --- /dev/null +++ b/app/Http/Controllers/MarkingController.php @@ -0,0 +1,44 @@ +marking = strtoupper($request->input('marking')); + $marking->email = $request->input('email'); + $marking->save(); + + return response()->json($marking, 201); + } + + public function update(Request $request, Marking $marking) + { + // TODO : update to upper case + $marking->update($request->all()); + + return response()->json($marking, 200); + } + + public function delete(Marking $marking) + { + $marking->delete(); + + return response()->json(null, 204); + } +} diff --git a/app/Http/Controllers/NotificationController.php b/app/Http/Controllers/NotificationController.php new file mode 100644 index 00000000..7c8aa8a7 --- /dev/null +++ b/app/Http/Controllers/NotificationController.php @@ -0,0 +1,66 @@ +orderby('updated_at','desc'); + } + + public function show(Notification $notification) + { + return $notification; + } + + public function store(Request $request) + { + $notification = Notification::create($request->all()); + + return response()->json($notification, 201); + } + + public function update(Request $request, Notification $notification) + { + $notification->update($request->all()); + + return response()->json($notification, 200); + } + + public function delete(Notification $notification) + { + $notification->delete(); + + return response()->json(null, 204); + } + + public function getUserMessage() + { + $user_all_notification = Notification::Where("user_id",Auth::user()->id) + ->orderby('updated_at','desc') + ->paginate(5); + $user_unread_notification = Notification::Where([["user_id",Auth::user()->id],["is_read",0]]) + ->orderby('updated_at','desc') + ->get(); + + return response()->json([ + "message" =>$user_all_notification, + "unread_message" =>$user_unread_notification + ],200); + } + + public function readNotification($notification_id){ + $affected = DB::table('notifications') + ->Where('id', $notification_id) + ->update(array('is_read' => 1)); + return response()->json("Read message", 200); + } + + +} \ No newline at end of file diff --git a/app/Http/Controllers/RateController.php b/app/Http/Controllers/RateController.php new file mode 100644 index 00000000..9197ef4d --- /dev/null +++ b/app/Http/Controllers/RateController.php @@ -0,0 +1,42 @@ +all()); + + return response()->json($rate, 201); + } + + public function update(Request $request, Rate $rate) + { + $rate->update($request->all()); + + return response()->json($rate, 200); + } + + public function delete(Rate $rate) + { + $rate->delete(); + + return response()->json(null, 204); + } + + public function show() + { + $rate = Rate::latest()->first(); + + return response()->json($rate, 200); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/SettingActiveBankController.php b/app/Http/Controllers/SettingActiveBankController.php new file mode 100644 index 00000000..0995e3f2 --- /dev/null +++ b/app/Http/Controllers/SettingActiveBankController.php @@ -0,0 +1,25 @@ +first(); + return response()->json($active_bank_setting, 200); + } + + public function update(Request $request) + { + if($active_bank_setting = SettingActiveBank::latest()->first()) + $active_bank_setting->update($request->all()); + else + $active_bank_setting = SettingActiveBank::create($request->all()); + + return response()->json($active_bank_setting, 200); + } +} diff --git a/app/Http/Controllers/SettingBeneficiaryController.php b/app/Http/Controllers/SettingBeneficiaryController.php new file mode 100644 index 00000000..eef947b1 --- /dev/null +++ b/app/Http/Controllers/SettingBeneficiaryController.php @@ -0,0 +1,44 @@ +json(["company_name"=>"123", "account_number"=>"123"] , 201); + } + $beneficiary = SettingBeneficiary::find($beneficiary); + return $beneficiary; + } + + public function store(Request $request) + { + $beneficiary = SettingBeneficiary::create($request->all()); + + return response()->json($beneficiary, 201); + } + + public function update(Request $request, SettingBeneficiary $beneficiary) + { + $beneficiary->update($request->all()); + + return response()->json($beneficiary, 200); + } + + public function delete(SettingBeneficiary $beneficiary) + { + $beneficiary->delete(); + + return response()->json(null, 204); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/SettingBillingChargeController.php b/app/Http/Controllers/SettingBillingChargeController.php new file mode 100644 index 00000000..85dd119e --- /dev/null +++ b/app/Http/Controllers/SettingBillingChargeController.php @@ -0,0 +1,25 @@ +first(); + return response()->json($billing_charge_setting, 201); + } + + public function update(Request $request) + { + if($billing_charge_setting = SettingBillingCharge::latest()->first()) + $billing_charge_setting->update($request->all()); + else + $billing_charge_setting = SettingBillingCharge::create($request->all()); + + return response()->json($billing_charge_setting, 200); + } +} diff --git a/app/Http/Controllers/SettingCreditController.php b/app/Http/Controllers/SettingCreditController.php new file mode 100644 index 00000000..c57764d7 --- /dev/null +++ b/app/Http/Controllers/SettingCreditController.php @@ -0,0 +1,42 @@ +first(); + return response()->json($credit_setting, 201); + } + + public function show(SettingCredit $credit) + { + return $credit; + } + + public function store(Request $request) + { + $credit = SettingCredit::create($request->all()); + + return response()->json($credit, 201); + } + + public function update(Request $request) + { + $credit_setting = SettingCredit::latest()->first(); + $credit_setting->update($request->all()); + + return response()->json($credit_setting, 200); + } + + public function delete(SettingCredit $credit) + { + $credit->delete(); + + return response()->json(null, 204); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/SettingMalaysiaBankController.php b/app/Http/Controllers/SettingMalaysiaBankController.php new file mode 100644 index 00000000..4bfbbb47 --- /dev/null +++ b/app/Http/Controllers/SettingMalaysiaBankController.php @@ -0,0 +1,40 @@ +all()); + + return response()->json($malaysiaBank, 201); + } + + public function update(Request $request, SettingMalaysiaBank $malaysiaBank) + { + $malaysiaBank->update($request->all()); + + return response()->json($malaysiaBank, 200); + } + + public function delete(SettingMalaysiaBank $malaysiaBank) + { + $malaysiaBank->delete(); + + return response()->json(null, 204); + } +} diff --git a/app/Http/Controllers/SettingSupplierController.php b/app/Http/Controllers/SettingSupplierController.php new file mode 100644 index 00000000..d6bf1eda --- /dev/null +++ b/app/Http/Controllers/SettingSupplierController.php @@ -0,0 +1,46 @@ +value = $supplier->id; + $supplier->label = $supplier->company_name; + } + return $suppliers; + } + + public function show(SettingSupplier $supplier) + { + return $supplier; + } + + public function store(Request $request) + { + $supplier = SettingSupplier::create($request->all()); + + return response()->json($supplier, 201); + } + + public function update(Request $request, SettingSupplier $supplier) + { + $supplier->update($request->all()); + + return response()->json($supplier, 200); + } + + public function delete(SettingSupplier $supplier) + { + $supplier->delete(); + + return response()->json(null, 204); + } +} \ No newline at end of file diff --git a/app/Http/Controllers/SettingTaxRateController.php b/app/Http/Controllers/SettingTaxRateController.php new file mode 100644 index 00000000..354e7689 --- /dev/null +++ b/app/Http/Controllers/SettingTaxRateController.php @@ -0,0 +1,25 @@ +first(); + return response()->json($setting_tax, 201); + } + + public function update(Request $request) + { + if($setting_tax = SettingTaxRate::latest()->first()) + $setting_tax->update($request->all()); + else + $setting_tax = SettingTaxRate::create($request->all()); + + return response()->json($setting_tax, 200); + } +} diff --git a/app/Http/Controllers/Settings/PasswordController.php b/app/Http/Controllers/Settings/PasswordController.php new file mode 100644 index 00000000..39ab4bf8 --- /dev/null +++ b/app/Http/Controllers/Settings/PasswordController.php @@ -0,0 +1,26 @@ +validate($request, [ + 'password' => 'required|confirmed|min:6', + ]); + + $request->user()->update([ + 'password' => bcrypt($request->password), + ]); + } +} diff --git a/app/Http/Controllers/Settings/ProfileController.php b/app/Http/Controllers/Settings/ProfileController.php new file mode 100644 index 00000000..73c9d3f7 --- /dev/null +++ b/app/Http/Controllers/Settings/ProfileController.php @@ -0,0 +1,27 @@ +user(); + + $this->validate($request, [ + 'name' => 'required', + 'email' => 'required|email|unique:users,email,'.$user->id, + ]); + + return tap($user)->update($request->only('name', 'email')); + } +} diff --git a/app/Http/Controllers/UserController.php b/app/Http/Controllers/UserController.php new file mode 100644 index 00000000..392564cc --- /dev/null +++ b/app/Http/Controllers/UserController.php @@ -0,0 +1,24 @@ + [ + // \App\Http\Middleware\EncryptCookies::class, + // \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class, + // \Illuminate\Session\Middleware\StartSession::class, + // \Illuminate\Session\Middleware\AuthenticateSession::class, + // \Illuminate\View\Middleware\ShareErrorsFromSession::class, + // \App\Http\Middleware\VerifyCsrfToken::class, + \Illuminate\Routing\Middleware\SubstituteBindings::class, + ], + + 'api' => [ + // 'throttle:60,1', + 'bindings', + ], + ]; + + /** + * The application's route middleware. + * + * These middleware may be assigned to groups or used individually. + * + * @var array + */ + protected $routeMiddleware = [ + 'auth' => \Illuminate\Auth\Middleware\Authenticate::class, + 'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, + 'bindings' => \Illuminate\Routing\Middleware\SubstituteBindings::class, + 'can' => \Illuminate\Auth\Middleware\Authorize::class, + 'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, + 'throttle' => \Illuminate\Routing\Middleware\ThrottleRequests::class, + 'ability' => 'App\Http\Middleware\TokenEntrustAbility', + 'role' => \Zizaco\Entrust\Middleware\EntrustRole::class, + 'permission' => \Zizaco\Entrust\Middleware\EntrustPermission::class, + 'jwt' => \App\Http\Middleware\RefreshToken::class, + 'ability' => 'App\Http\Middleware\TokenEntrustAbility' + ]; +} diff --git a/app/Http/Middleware/EncryptCookies.php b/app/Http/Middleware/EncryptCookies.php new file mode 100644 index 00000000..033136ad --- /dev/null +++ b/app/Http/Middleware/EncryptCookies.php @@ -0,0 +1,17 @@ +check()) { + return response()->json(['error' => 'Already authenticated.'], 400); + } + + return $next($request); + } +} diff --git a/app/Http/Middleware/SetLocale.php b/app/Http/Middleware/SetLocale.php new file mode 100644 index 00000000..7ca03a22 --- /dev/null +++ b/app/Http/Middleware/SetLocale.php @@ -0,0 +1,49 @@ +parseLocale($request)) { + app()->setLocale($locale); + } + + return $next($request); + } + + /** + * @param \Illuminate\Http\Request $request + * @return string|null + */ + protected function parseLocale($request) + { + $locales = config('app.locales'); + + $locale = $request->server('HTTP_ACCEPT_LANGUAGE'); + $locale = substr($locale, 0, strpos($locale, ',') ?: strlen($locale)); + + if (array_key_exists($locale, $locales)) { + return $locale; + } + + if (array_key_exists($locale, $locales)) { + return $locale; + } + + $locale = substr($locale, 0, 2); + if (array_key_exists($locale, $locales)) { + return $locale; + } + } +} diff --git a/app/Http/Middleware/TokenEntrustAbility.php b/app/Http/Middleware/TokenEntrustAbility.php new file mode 100644 index 00000000..3463bfcf --- /dev/null +++ b/app/Http/Middleware/TokenEntrustAbility.php @@ -0,0 +1,39 @@ +auth->setRequest($request)->getToken()) { + return $this->respond('tymon.jwt.absent', 'token_not_provided', 400); + } + + try { + $user = $this->auth->authenticate($token); + } catch (TokenExpiredException $e) { + return $this->respond('tymon.jwt.expired', 'token_expired', $e->getStatusCode(), [$e]); + } catch (JWTException $e) { + return $this->respond('tymon.jwt.invalid', 'token_invalid', $e->getStatusCode(), [$e]); + } + + if (! $user) { + return $this->respond('tymon.jwt.user_not_found', 'user_not_found', 404); + } + + if (!$request->user()->ability(explode('|', $roles), explode('|', $permissions), array('validate_all' => $validateAll))) { + return $this->respond('tymon.jwt.invalid', 'token_invalid', 401, 'Unauthorized'); + } + + $this->events->fire('tymon.jwt.valid', $user); + + return $next($request); + } +} \ No newline at end of file diff --git a/app/Http/Middleware/TrimStrings.php b/app/Http/Middleware/TrimStrings.php new file mode 100644 index 00000000..5a50e7b5 --- /dev/null +++ b/app/Http/Middleware/TrimStrings.php @@ -0,0 +1,18 @@ +hasOne('App\Booking'); + } +} diff --git a/app/Marking.php b/app/Marking.php new file mode 100644 index 00000000..0984ba5c --- /dev/null +++ b/app/Marking.php @@ -0,0 +1,15 @@ +belongsTo('app\User'); + } +} diff --git a/app/Notification.php b/app/Notification.php new file mode 100644 index 00000000..0ac7488f --- /dev/null +++ b/app/Notification.php @@ -0,0 +1,77 @@ +created_at; + + date_default_timezone_set('Asia/Kuala_Lumpur'); //Change as per your default time + $str = strtotime($created_time); + $today = strtotime(date('Y-m-d H:i:s')); + + // It returns the time difference in Seconds... + $time_differnce = $today-$str; + + // To Calculate the time difference in Years... + $years = 60*60*24*365; + + // To Calculate the time difference in Months... + $months = 60*60*24*30; + + // To Calculate the time difference in Days... + $days = 60*60*24; + + // To Calculate the time difference in Hours... + $hours = 60*60; + + // To Calculate the time difference in Minutes... + $minutes = 60; + + if(intval($time_differnce/$years) > 1) + { + return intval($time_differnce/$years)." years ago"; + }else if(intval($time_differnce/$years) > 0) + { + return intval($time_differnce/$years)." year ago"; + }else if(intval($time_differnce/$months) > 1) + { + return intval($time_differnce/$months)." months ago"; + }else if(intval(($time_differnce/$months)) > 0) + { + return intval(($time_differnce/$months))." month ago"; + }else if(intval(($time_differnce/$days)) > 1) + { + return intval(($time_differnce/$days))." days ago"; + }else if (intval(($time_differnce/$days)) > 0) + { + return intval(($time_differnce/$days))." day ago"; + }else if (intval(($time_differnce/$hours)) > 1) + { + return intval(($time_differnce/$hours))." hours ago"; + }else if (intval(($time_differnce/$hours)) > 0) + { + return intval(($time_differnce/$hours))." hour ago"; + }else if (intval(($time_differnce/$minutes)) > 1) + { + return intval(($time_differnce/$minutes))." minutes ago"; + }else if (intval(($time_differnce/$minutes)) > 0) + { + return intval(($time_differnce/$minutes))." minute ago"; + }else if (intval(($time_differnce)) > 1) + { + return intval(($time_differnce))." seconds ago"; + }else + { + return "few seconds ago"; + } + } + +} diff --git a/app/Notifications/ResetPassword.php b/app/Notifications/ResetPassword.php new file mode 100644 index 00000000..92148e20 --- /dev/null +++ b/app/Notifications/ResetPassword.php @@ -0,0 +1,23 @@ +line('You are receiving this email because we received a password reset request for your account.') + ->action('Reset Password', url(config('app.url').'/password/reset/'.$this->token).'?email='.urlencode($notifiable->email)) + ->line('If you did not request a password reset, no further action is required.'); + } +} diff --git a/app/OAuthProvider.php b/app/OAuthProvider.php new file mode 100644 index 00000000..cccd2830 --- /dev/null +++ b/app/OAuthProvider.php @@ -0,0 +1,39 @@ +belongsTo(User::class); + } +} diff --git a/app/Observers/RateObserver.php b/app/Observers/RateObserver.php new file mode 100644 index 00000000..14e55867 --- /dev/null +++ b/app/Observers/RateObserver.php @@ -0,0 +1,21 @@ +app->runningUnitTests()) { + Schema::defaultStringLength(191); + } + */ + Rate::observe(RateObserver::class); + Schema::defaultStringLength(191); + } + + /** + * Register any application services. + * + * @return void + */ + public function register() + { + if ($this->app->environment('local', 'testing')) { + $this->app->register(DuskServiceProvider::class); + } + } +} diff --git a/app/Providers/AuthServiceProvider.php b/app/Providers/AuthServiceProvider.php new file mode 100644 index 00000000..9e68caa6 --- /dev/null +++ b/app/Providers/AuthServiceProvider.php @@ -0,0 +1,29 @@ + 'App\Policies\ModelPolicy', + ]; + + /** + * Register any authentication / authorization services. + * + * @return void + */ + public function boot() + { + $this->registerPolicies(); + + // + } +} diff --git a/app/Providers/BroadcastServiceProvider.php b/app/Providers/BroadcastServiceProvider.php new file mode 100644 index 00000000..7852f779 --- /dev/null +++ b/app/Providers/BroadcastServiceProvider.php @@ -0,0 +1,22 @@ + ["auth:api"]]); + + require base_path('routes/channels.php'); + } +} diff --git a/app/Providers/EventServiceProvider.php b/app/Providers/EventServiceProvider.php new file mode 100644 index 00000000..fca6152c --- /dev/null +++ b/app/Providers/EventServiceProvider.php @@ -0,0 +1,32 @@ + [ + 'App\Listeners\EventListener', + ], + ]; + + /** + * Register any events for your application. + * + * @return void + */ + public function boot() + { + parent::boot(); + + // + } +} diff --git a/app/Providers/RouteServiceProvider.php b/app/Providers/RouteServiceProvider.php new file mode 100644 index 00000000..5ea48d39 --- /dev/null +++ b/app/Providers/RouteServiceProvider.php @@ -0,0 +1,73 @@ +mapApiRoutes(); + + $this->mapWebRoutes(); + + // + } + + /** + * Define the "web" routes for the application. + * + * These routes all receive session state, CSRF protection, etc. + * + * @return void + */ + protected function mapWebRoutes() + { + Route::middleware('web') + ->namespace($this->namespace) + ->group(base_path('routes/web.php')); + } + + /** + * Define the "api" routes for the application. + * + * These routes are typically stateless. + * + * @return void + */ + protected function mapApiRoutes() + { + Route::prefix('api') + ->middleware('api') + ->namespace($this->namespace) + ->group(base_path('routes/api.php')); + } +} diff --git a/app/PurchaseOrder.php b/app/PurchaseOrder.php new file mode 100644 index 00000000..71227d02 --- /dev/null +++ b/app/PurchaseOrder.php @@ -0,0 +1,15 @@ +belongsTo(Booking::class); + } +} diff --git a/app/Rate.php b/app/Rate.php new file mode 100644 index 00000000..340ef897 --- /dev/null +++ b/app/Rate.php @@ -0,0 +1,11 @@ +belongsTo('app\User'); + } + + public function booking(){ + return $this->belongTo('App\Booking'); + } + + public function supplierBookingTtem() + { + return $this->hasMany('App\SupplierBookingItem'); + } + +} diff --git a/app/SupplierBookingItem.php b/app/SupplierBookingItem.php new file mode 100644 index 00000000..c0073d18 --- /dev/null +++ b/app/SupplierBookingItem.php @@ -0,0 +1,25 @@ +belongsTo('App\BookingSupplier'); + } + + +} diff --git a/app/User.php b/app/User.php new file mode 100644 index 00000000..210388c5 --- /dev/null +++ b/app/User.php @@ -0,0 +1,109 @@ +email)).'.jpg?s=200&d=mm'; + } + + /** + * Get the role attribute. + * + * @return string + */ + public function getRoleAttribute() + { + return $this->roles->first()->name; + } + + /** + * Get the oauth providers. + * + * @return \Illuminate\Database\Eloquent\Relations\HasMany + */ + public function oauthProviders() + { + return $this->hasMany(OAuthProvider::class); + } + + /** + * Send the password reset notification. + * + * @param string $token + * @return void + */ + public function sendPasswordResetNotification($token) + { + $this->notify(new ResetPasswordNotification($token)); + } + + /** + * @return int + */ + public function getJWTIdentifier() + { + return $this->getKey(); + } + + /** + * @return array + */ + public function getJWTCustomClaims() + { + return []; + } + + public function bookings(){ + return $this->hasMany(Booking::class); + } + + public function marking(){ + return $this->hasOne(Booking::class); + } + +} diff --git a/app/UserBankSlip.php b/app/UserBankSlip.php new file mode 100644 index 00000000..3e3e6678 --- /dev/null +++ b/app/UserBankSlip.php @@ -0,0 +1,15 @@ +belongsTo(Booking::class); + } +} diff --git a/artisan b/artisan new file mode 100644 index 00000000..5c23e2e2 --- /dev/null +++ b/artisan @@ -0,0 +1,53 @@ +#!/usr/bin/env php +make(Illuminate\Contracts\Console\Kernel::class); + +$status = $kernel->handle( + $input = new Symfony\Component\Console\Input\ArgvInput, + new Symfony\Component\Console\Output\ConsoleOutput +); + +/* +|-------------------------------------------------------------------------- +| Shutdown The Application +|-------------------------------------------------------------------------- +| +| Once Artisan has finished running, we will fire off the shutdown events +| so that any final work may be done by the application before we shut +| down the process. This is the last thing to happen to the request. +| +*/ + +$kernel->terminate($input, $status); + +exit($status); diff --git a/bootstrap/app.php b/bootstrap/app.php new file mode 100644 index 00000000..f2801adf --- /dev/null +++ b/bootstrap/app.php @@ -0,0 +1,55 @@ +singleton( + Illuminate\Contracts\Http\Kernel::class, + App\Http\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Console\Kernel::class, + App\Console\Kernel::class +); + +$app->singleton( + Illuminate\Contracts\Debug\ExceptionHandler::class, + App\Exceptions\Handler::class +); + +/* +|-------------------------------------------------------------------------- +| Return The Application +|-------------------------------------------------------------------------- +| +| This script returns the application instance. The instance is given to +| the calling script so we can separate the building of the instances +| from the actual running of the application and sending responses. +| +*/ + +return $app; diff --git a/bootstrap/cache/.gitignore b/bootstrap/cache/.gitignore new file mode 100644 index 00000000..d6b7ef32 --- /dev/null +++ b/bootstrap/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/build/deploy.sh b/build/deploy.sh new file mode 100644 index 00000000..75056c67 --- /dev/null +++ b/build/deploy.sh @@ -0,0 +1,35 @@ +# Save latest Git commit message +MESSAGE=$(git log -1 --pretty=%B) + +# Add it as a secret variable on CI environment +git remote set-url origin $REMOTE_REPOSITORY +git config user.email $DEPLOY_GIT_EMAIL +git config user.name $DEPLOY_GIT_USERNAME + +if git ls-remote $REMOTE_REPOSITORY | grep -sw "deploy" 2>&1>/dev/null; then + git checkout . && git checkout deploy; +else + git checkout --orphan deploy; +fi + +# Remove all files except .git, node_modules and vendor folder +find . -path ./.git -prune -o \( \! -path ./dist \) -prune -o \( \! -path ./vendor \) -exec rm -rf {} \; 2> /dev/null +# Add master branch files +git archive master | tar x -C . + +# Generate i18n string for the front-end +composer install -n --prefer-dist +php artisan vue-i18n:generate + +# Compile front-end stuff +yarn --pure-lockfile +yarn production + +# Those files are ignored on master branch, force add it +git add -f public/css +git add -f public/js + +# Push to the deploy branch +git add . +git commit -am "[${CI_COMMIT_SHA:0:8}]: $MESSAGE" +git push -u origin deploy \ No newline at end of file diff --git a/caddy/Caddyfile b/caddy/Caddyfile new file mode 100644 index 00000000..e4f1b0d1 --- /dev/null +++ b/caddy/Caddyfile @@ -0,0 +1,35 @@ +https://exchange-staging.izyim.com { + root /var/www/public + + fastcgi / 127.0.0.1:9000 php { + index index.php + } + + header / { + Cache-Control no-cache + } + + # To handle .html extensions with laravel change ext to + # ext / .html + + rewrite { + r .* + ext / + to /index.php?{query} + } + + gzip + # browse + log stdout + errors stdout + on startup php-fpm --nodaemonize + # Uncomment to enable TLS (HTTPS) + # Change the first list to listen on port 443 when enabling TLS + tls admin@izyim.com + + # To use Lets encrpt tls with a DNS provider uncomment these + # lines and change the provider as required + #tls { + # dns cloudflare + #} +} diff --git a/caddy/Dockerfile b/caddy/Dockerfile new file mode 100644 index 00000000..b3bb7a34 --- /dev/null +++ b/caddy/Dockerfile @@ -0,0 +1,20 @@ +FROM php:7.1-fpm +LABEL maintainer="Paul Redmond " + +# Install application dependencies +RUN curl --silent --show-error --fail --location \ + --header "Accept: application/tar+gzip, application/x-gzip, application/octet-stream" -o - \ + "https://caddyserver.com/download/linux/amd64?plugins=http.expires,http.realip&license=personal" \ + | tar --no-same-owner -C /usr/bin/ -xz caddy \ + && chmod 0755 /usr/bin/caddy \ + && /usr/bin/caddy -version \ + && docker-php-ext-install mbstring pdo pdo_mysql + +COPY Caddyfile /etc/Caddyfile + +WORKDIR /var/www +RUN mkdir -p /var/www/public/storage +RUN ln -sf /var/www/storage/app/public /var/www/public/storage +RUN chmod -R 777 storage/ + +CMD ["/usr/bin/caddy", "--conf", "/etc/Caddyfile", "--log", "stdout"] \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 00000000..97b020e5 --- /dev/null +++ b/composer.json @@ -0,0 +1,67 @@ +{ + "name": "IZYIM Exchange", + "description": "A currency exchange system.", + "keywords": ["exchange", "izyim", "vue"], + "license": "MIT", + "type": "project", + "require": { + "php": "^7.1.3", + "doctrine/dbal": "^2.7", + "fideloper/proxy": "^4.0", + "intervention/image": "^2.4", + "laravel/framework": "5.6.*", + "laravel/socialite": "^3.0", + "laravel/tinker": "~1.0", + "laravelcollective/html": "^5.6", + "pusher/pusher-php-server": "~3.0", + "tymon/jwt-auth": "^1.0.0-rc.2", + "zizaco/entrust": "dev-master" + }, + "require-dev": { + "filp/whoops": "^2.0", + "fzaninotto/faker": "^1.4", + "laravel/dusk": "^3.0", + "mockery/mockery": "^1.0", + "nunomaduro/collision": "^2.0", + "phpunit/phpunit": "^7.0" + }, + "autoload": { + "classmap": [ + "database/seeds", + "database/factories" + ], + "psr-4": { + "App\\": "app/" + } + }, + "autoload-dev": { + "psr-4": { + "Tests\\": "tests/" + } + }, + "extra": { + "laravel": { + "dont-discover": [ + "laravel/dusk" + ] + } + }, + "scripts": { + "post-root-package-install": [ + "@php -r \"file_exists('.env') || copy('.env.example', '.env');\"" + ], + "post-autoload-dump": [ + "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump", + "@php artisan package:discover" + ], + "post-create-project-cmd": [ + "@php artisan key:generate", + "@php artisan jwt:secret --force" + ] + }, + "config": { + "preferred-install": "dist", + "sort-packages": true, + "optimize-autoloader": true + } +} diff --git a/config/app.php b/config/app.php new file mode 100644 index 00000000..1c1d20d4 --- /dev/null +++ b/config/app.php @@ -0,0 +1,228 @@ + env('APP_NAME', 'Exchange'), + + /* + |-------------------------------------------------------------------------- + | Application Environment + |-------------------------------------------------------------------------- + | + | This value determines the "environment" your application is currently + | running in. This may determine how you prefer to configure various + | services your application utilizes. Set this in your ".env" file. + | + */ + + 'env' => env('APP_ENV', 'production'), + + /* + |-------------------------------------------------------------------------- + | Application Debug Mode + |-------------------------------------------------------------------------- + | + | When your application is in debug mode, detailed error messages with + | stack traces will be shown on every error that occurs within your + | application. If disabled, a simple generic error page is shown. + | + */ + + 'debug' => env('APP_DEBUG', false), + + /* + |-------------------------------------------------------------------------- + | Application URL + |-------------------------------------------------------------------------- + | + | This URL is used by the console to properly generate URLs when using + | the Artisan command line tool. You should set this to the root of + | your application so that it is used when running Artisan tasks. + | + */ + + 'url' => env('APP_URL', 'http://localhost'), + + /* + |-------------------------------------------------------------------------- + | Application Timezone + |-------------------------------------------------------------------------- + | + | Here you may specify the default timezone for your application, which + | will be used by the PHP date and date-time functions. We have gone + | ahead and set this to a sensible default for you out of the box. + | + */ + + 'timezone' => 'Asia/Kuala_Lumpur', + + /* + |-------------------------------------------------------------------------- + | Application Locale Configuration + |-------------------------------------------------------------------------- + | + | The application locale determines the default locale that will be used + | by the translation service provider. You are free to set this value + | to any of the locales which will be supported by the application. + | + */ + + 'locale' => 'en', + + 'locales' => [ + 'en' => 'EN', + 'zh-CN' => '中文', + 'es' => 'ES', + ], + + /* + |-------------------------------------------------------------------------- + | Application Fallback Locale + |-------------------------------------------------------------------------- + | + | The fallback locale determines the locale to use when the current one + | is not available. You may change the value to correspond to any of + | the language folders that are provided through your application. + | + */ + + 'fallback_locale' => 'en', + + /* + |-------------------------------------------------------------------------- + | Encryption Key + |-------------------------------------------------------------------------- + | + | This key is used by the Illuminate encrypter service and should be set + | to a random, 32 character string, otherwise these encrypted strings + | will not be safe. Please do this before deploying an application! + | + */ + + 'key' => env('APP_KEY'), + + 'cipher' => 'AES-256-CBC', + + /* + |-------------------------------------------------------------------------- + | Autoloaded Service Providers + |-------------------------------------------------------------------------- + | + | The service providers listed here will be automatically loaded on the + | request to your application. Feel free to add your own services to + | this array to grant expanded functionality to your applications. + | + */ + + 'providers' => [ + + /* + * Laravel Framework Service Providers... + */ + Illuminate\Auth\AuthServiceProvider::class, + Illuminate\Broadcasting\BroadcastServiceProvider::class, + Illuminate\Bus\BusServiceProvider::class, + Illuminate\Cache\CacheServiceProvider::class, + Illuminate\Foundation\Providers\ConsoleSupportServiceProvider::class, + Illuminate\Cookie\CookieServiceProvider::class, + Illuminate\Database\DatabaseServiceProvider::class, + Illuminate\Encryption\EncryptionServiceProvider::class, + Illuminate\Filesystem\FilesystemServiceProvider::class, + Illuminate\Foundation\Providers\FoundationServiceProvider::class, + Illuminate\Hashing\HashServiceProvider::class, + Illuminate\Mail\MailServiceProvider::class, + Illuminate\Notifications\NotificationServiceProvider::class, + Illuminate\Pagination\PaginationServiceProvider::class, + Illuminate\Pipeline\PipelineServiceProvider::class, + Illuminate\Queue\QueueServiceProvider::class, + Illuminate\Redis\RedisServiceProvider::class, + Illuminate\Auth\Passwords\PasswordResetServiceProvider::class, + Illuminate\Session\SessionServiceProvider::class, + Illuminate\Translation\TranslationServiceProvider::class, + Illuminate\Validation\ValidationServiceProvider::class, + Illuminate\View\ViewServiceProvider::class, + Collective\Html\HtmlServiceProvider::class, + + /* + * Package Service Providers... + */ + + Zizaco\Entrust\EntrustServiceProvider::class, + + /* + * Application Service Providers... + */ + App\Providers\AppServiceProvider::class, + App\Providers\AuthServiceProvider::class, + App\Providers\BroadcastServiceProvider::class, + App\Providers\EventServiceProvider::class, + App\Providers\RouteServiceProvider::class, + + Tymon\JWTAuth\Providers\LaravelServiceProvider::class + ], + + /* + |-------------------------------------------------------------------------- + | Class Aliases + |-------------------------------------------------------------------------- + | + | This array of class aliases will be registered when this application + | is started. However, feel free to register as many as you wish as + | the aliases are "lazy" loaded so they don't hinder performance. + | + */ + + 'aliases' => [ + + 'App' => Illuminate\Support\Facades\App::class, + 'Artisan' => Illuminate\Support\Facades\Artisan::class, + 'Auth' => Illuminate\Support\Facades\Auth::class, + 'Blade' => Illuminate\Support\Facades\Blade::class, + 'Broadcast' => Illuminate\Support\Facades\Broadcast::class, + 'Bus' => Illuminate\Support\Facades\Bus::class, + 'Cache' => Illuminate\Support\Facades\Cache::class, + 'Config' => Illuminate\Support\Facades\Config::class, + 'Cookie' => Illuminate\Support\Facades\Cookie::class, + 'Crypt' => Illuminate\Support\Facades\Crypt::class, + 'DB' => Illuminate\Support\Facades\DB::class, + 'Eloquent' => Illuminate\Database\Eloquent\Model::class, + 'Event' => Illuminate\Support\Facades\Event::class, + 'File' => Illuminate\Support\Facades\File::class, + 'Gate' => Illuminate\Support\Facades\Gate::class, + 'Hash' => Illuminate\Support\Facades\Hash::class, + 'Lang' => Illuminate\Support\Facades\Lang::class, + 'Log' => Illuminate\Support\Facades\Log::class, + 'Mail' => Illuminate\Support\Facades\Mail::class, + 'Notification' => Illuminate\Support\Facades\Notification::class, + 'Password' => Illuminate\Support\Facades\Password::class, + 'Queue' => Illuminate\Support\Facades\Queue::class, + 'Redirect' => Illuminate\Support\Facades\Redirect::class, + 'Redis' => Illuminate\Support\Facades\Redis::class, + 'Request' => Illuminate\Support\Facades\Request::class, + 'Response' => Illuminate\Support\Facades\Response::class, + 'Route' => Illuminate\Support\Facades\Route::class, + 'Schema' => Illuminate\Support\Facades\Schema::class, + 'Session' => Illuminate\Support\Facades\Session::class, + 'Storage' => Illuminate\Support\Facades\Storage::class, + 'URL' => Illuminate\Support\Facades\URL::class, + 'Validator' => Illuminate\Support\Facades\Validator::class, + 'View' => Illuminate\Support\Facades\View::class, + 'Html' => Collective\Html\HtmlFacade::class, + 'Entrust' => Zizaco\Entrust\EntrustFacade::class, + 'JWTAuth' => Tymon\JWTAuth\Facades\JWTAuth::class, + 'JWTFactory' => Tymon\JWTAuth\Facades\JWTFactory::class, + + ], + +]; diff --git a/config/auth.php b/config/auth.php new file mode 100644 index 00000000..6ecdf96c --- /dev/null +++ b/config/auth.php @@ -0,0 +1,103 @@ + [ + 'guard' => 'api', + 'passwords' => 'users', + ], + + /* + |-------------------------------------------------------------------------- + | Authentication Guards + |-------------------------------------------------------------------------- + | + | Next, you may define every authentication guard for your application. + | Of course, a great default configuration has been defined for you + | here which uses session storage and the Eloquent user provider. + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | Supported: "session", "token" + | + */ + + 'guards' => [ + 'web' => [ + 'driver' => 'session', + 'provider' => 'users', + ], + + 'api' => [ + 'driver' => 'jwt', + 'provider' => 'users', + ], + ], + + /* + |-------------------------------------------------------------------------- + | User Providers + |-------------------------------------------------------------------------- + | + | All authentication drivers have a user provider. This defines how the + | users are actually retrieved out of your database or other storage + | mechanisms used by this application to persist your user's data. + | + | If you have multiple user tables or models you may configure multiple + | sources which represent each model / table. These sources may then + | be assigned to any extra authentication guards you have defined. + | + | Supported: "database", "eloquent" + | + */ + + 'providers' => [ + 'users' => [ + 'driver' => 'eloquent', + 'model' => App\User::class, + 'table' => 'users', + ], + + // 'users' => [ + // 'driver' => 'database', + // 'table' => 'users', + // ], + ], + + /* + |-------------------------------------------------------------------------- + | Resetting Passwords + |-------------------------------------------------------------------------- + | + | You may specify multiple password reset configurations if you have more + | than one user table or model in the application and you want to have + | separate password reset settings based on the specific user types. + | + | The expire time is the number of minutes that the reset token should be + | considered valid. This security feature keeps tokens short-lived so + | they have less time to be guessed. You may change this as needed. + | + */ + + 'passwords' => [ + 'users' => [ + 'provider' => 'users', + 'table' => 'password_resets', + 'expire' => 3000, + ], + ], + +]; diff --git a/config/broadcasting.php b/config/broadcasting.php new file mode 100644 index 00000000..3ca45eaa --- /dev/null +++ b/config/broadcasting.php @@ -0,0 +1,59 @@ + env('BROADCAST_DRIVER', 'null'), + + /* + |-------------------------------------------------------------------------- + | Broadcast Connections + |-------------------------------------------------------------------------- + | + | Here you may define all of the broadcast connections that will be used + | to broadcast events to other systems or over websockets. Samples of + | each available type of connection are provided inside this array. + | + */ + + 'connections' => [ + + 'pusher' => [ + 'driver' => 'pusher', + 'key' => env('PUSHER_APP_KEY'), + 'secret' => env('PUSHER_APP_SECRET'), + 'app_id' => env('PUSHER_APP_ID'), + 'options' => [ + 'cluster' => env('PUSHER_APP_CLUSTER'), + 'encrypted' => true, + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + 'log' => [ + 'driver' => 'log', + ], + + 'null' => [ + 'driver' => 'null', + ], + + ], + +]; diff --git a/config/cache.php b/config/cache.php new file mode 100644 index 00000000..e87f0320 --- /dev/null +++ b/config/cache.php @@ -0,0 +1,91 @@ + env('CACHE_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Cache Stores + |-------------------------------------------------------------------------- + | + | Here you may define all of the cache "stores" for your application as + | well as their drivers. You may even define multiple stores for the + | same cache driver to group types of items stored in your caches. + | + */ + + 'stores' => [ + + 'apc' => [ + 'driver' => 'apc', + ], + + 'array' => [ + 'driver' => 'array', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'cache', + 'connection' => null, + ], + + 'file' => [ + 'driver' => 'file', + 'path' => storage_path('framework/cache/data'), + ], + + 'memcached' => [ + 'driver' => 'memcached', + 'persistent_id' => env('MEMCACHED_PERSISTENT_ID'), + 'sasl' => [ + env('MEMCACHED_USERNAME'), + env('MEMCACHED_PASSWORD'), + ], + 'options' => [ + // Memcached::OPT_CONNECT_TIMEOUT => 2000, + ], + 'servers' => [ + [ + 'host' => env('MEMCACHED_HOST', '127.0.0.1'), + 'port' => env('MEMCACHED_PORT', 11211), + 'weight' => 100, + ], + ], + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Cache Key Prefix + |-------------------------------------------------------------------------- + | + | When utilizing a RAM based store such as APC or Memcached, there might + | be other applications utilizing the same cache. So, we'll specify a + | value to get prefixed to all our keys so we can avoid collisions. + | + */ + + 'prefix' => 'laravel', + +]; diff --git a/config/database.php b/config/database.php new file mode 100644 index 00000000..5633d24f --- /dev/null +++ b/config/database.php @@ -0,0 +1,135 @@ + env('DB_CONNECTION', 'mysql'), + + /* + |-------------------------------------------------------------------------- + | Database Connections + |-------------------------------------------------------------------------- + | + | Here are each of the database connections setup for your application. + | Of course, examples of configuring each database platform that is + | supported by Laravel is shown below to make development simple. + | + | + | All database work in Laravel is done through the PHP PDO facilities + | so make sure you have the driver for your particular database of + | choice installed on your machine before you begin development. + | + */ + + 'connections' => [ + + 'sqlite' => [ + 'driver' => 'sqlite', + 'database' => env('DB_DATABASE', database_path('database.sqlite')), + 'prefix' => '', + ], + + 'mysql' => [ + 'driver' => 'mysql', + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '3306'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'strict' => true, + 'engine' => null, + ], + + 'testing' => [ + 'driver' => 'mysql', + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '3306'), + 'database' => 'phpunit', + 'username' => 'default', + 'password' => 'secret', + 'unix_socket' => env('DB_SOCKET', ''), + 'charset' => 'utf8mb4', + 'collation' => 'utf8mb4_unicode_ci', + 'prefix' => '', + 'strict' => false, + 'engine' => null, + ], + + 'pgsql' => [ + 'driver' => 'pgsql', + 'host' => env('DB_HOST', '127.0.0.1'), + 'port' => env('DB_PORT', '5432'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + 'schema' => 'public', + 'sslmode' => 'prefer', + ], + + 'sqlsrv' => [ + 'driver' => 'sqlsrv', + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', '1433'), + 'database' => env('DB_DATABASE', 'forge'), + 'username' => env('DB_USERNAME', 'forge'), + 'password' => env('DB_PASSWORD', ''), + 'charset' => 'utf8', + 'prefix' => '', + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Migration Repository Table + |-------------------------------------------------------------------------- + | + | This table keeps track of all the migrations that have already run for + | your application. Using this information, we can determine which of + | the migrations on disk haven't actually been run in the database. + | + */ + + 'migrations' => 'migrations', + + /* + |-------------------------------------------------------------------------- + | Redis Databases + |-------------------------------------------------------------------------- + | + | Redis is an open source, fast, and advanced key-value store that also + | provides a richer set of commands than a typical key-value systems + | such as APC or Memcached. Laravel makes it easy to dig right in. + | + */ + + 'redis' => [ + + 'client' => 'predis', + + 'default' => [ + 'host' => env('REDIS_HOST', '127.0.0.1'), + 'password' => env('REDIS_PASSWORD', null), + 'port' => env('REDIS_PORT', 6379), + 'database' => 0, + ], + + ], + +]; diff --git a/config/entrust.php b/config/entrust.php new file mode 100644 index 00000000..2a995b62 --- /dev/null +++ b/config/entrust.php @@ -0,0 +1,92 @@ + 'App\Role', + + /* + |-------------------------------------------------------------------------- + | Entrust Roles Table + |-------------------------------------------------------------------------- + | + | This is the roles table used by Entrust to save roles to the database. + | + */ + 'roles_table' => 'roles', + + /* + |-------------------------------------------------------------------------- + | Entrust Permission Model + |-------------------------------------------------------------------------- + | + | This is the Permission model used by Entrust to create correct relations. + | Update the permission if it is in a different namespace. + | + */ + 'permission' => 'App\Permission', + + /* + |-------------------------------------------------------------------------- + | Entrust Permissions Table + |-------------------------------------------------------------------------- + | + | This is the permissions table used by Entrust to save permissions to the + | database. + | + */ + 'permissions_table' => 'permissions', + + /* + |-------------------------------------------------------------------------- + | Entrust permission_role Table + |-------------------------------------------------------------------------- + | + | This is the permission_role table used by Entrust to save relationship + | between permissions and roles to the database. + | + */ + 'permission_role_table' => 'permission_role', + + /* + |-------------------------------------------------------------------------- + | Entrust role_user Table + |-------------------------------------------------------------------------- + | + | This is the role_user table used by Entrust to save assigned roles to the + | database. + | + */ + 'role_user_table' => 'role_user', + + /* + |-------------------------------------------------------------------------- + | User Foreign key on Entrust's role_user Table (Pivot) + |-------------------------------------------------------------------------- + */ + 'user_foreign_key' => 'user_id', + + /* + |-------------------------------------------------------------------------- + | Role Foreign key on Entrust's role_user Table (Pivot) + |-------------------------------------------------------------------------- + */ + 'role_foreign_key' => 'role_id', + +]; diff --git a/config/filesystems.php b/config/filesystems.php new file mode 100644 index 00000000..4544f60c --- /dev/null +++ b/config/filesystems.php @@ -0,0 +1,68 @@ + env('FILESYSTEM_DRIVER', 'local'), + + /* + |-------------------------------------------------------------------------- + | Default Cloud Filesystem Disk + |-------------------------------------------------------------------------- + | + | Many applications store files both locally and in the cloud. For this + | reason, you may specify a default "cloud" driver here. This driver + | will be bound as the Cloud disk implementation in the container. + | + */ + + 'cloud' => env('FILESYSTEM_CLOUD', 's3'), + + /* + |-------------------------------------------------------------------------- + | Filesystem Disks + |-------------------------------------------------------------------------- + | + | Here you may configure as many filesystem "disks" as you wish, and you + | may even configure multiple disks of the same driver. Defaults have + | been setup for each driver as an example of the required options. + | + | Supported Drivers: "local", "ftp", "s3", "rackspace" + | + */ + + 'disks' => [ + + 'local' => [ + 'driver' => 'local', + 'root' => storage_path('app'), + ], + + 'public' => [ + 'driver' => 'local', + 'root' => storage_path('app/public'), + 'url' => env('APP_URL').'/storage', + 'visibility' => 'public', + ], + + 's3' => [ + 'driver' => 's3', + 'key' => env('AWS_KEY'), + 'secret' => env('AWS_SECRET'), + 'region' => env('AWS_REGION'), + 'bucket' => env('AWS_BUCKET'), + ], + + ], + +]; diff --git a/config/hashing.php b/config/hashing.php new file mode 100644 index 00000000..f929cf0c --- /dev/null +++ b/config/hashing.php @@ -0,0 +1,20 @@ + 'bcrypt', + +]; diff --git a/config/jwt.php b/config/jwt.php new file mode 100644 index 00000000..b9fffd28 --- /dev/null +++ b/config/jwt.php @@ -0,0 +1,303 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +return [ + + /* + |-------------------------------------------------------------------------- + | JWT Authentication Secret + |-------------------------------------------------------------------------- + | + | Don't forget to set this in your .env file, as it will be used to sign + | your tokens. A helper command is provided for this: + | `php artisan jwt:secret` + | + | Note: This will be used for Symmetric algorithms only (HMAC), + | since RSA and ECDSA use a private/public key combo (See below). + | + */ + + 'secret' => env('JWT_SECRET'), + + /* + |-------------------------------------------------------------------------- + | JWT Authentication Keys + |-------------------------------------------------------------------------- + | + | The algorithm you are using, will determine whether your tokens are + | signed with a random string (defined in `JWT_SECRET`) or using the + | following public & private keys. + | + | Symmetric Algorithms: + | HS256, HS384 & HS512 will use `JWT_SECRET`. + | + | Asymmetric Algorithms: + | RS256, RS384 & RS512 / ES256, ES384 & ES512 will use the keys below. + | + */ + + 'keys' => [ + + /* + |-------------------------------------------------------------------------- + | Public Key + |-------------------------------------------------------------------------- + | + | A path or resource to your public key. + | + | E.g. 'file://path/to/public/key' + | + */ + + 'public' => env('JWT_PUBLIC_KEY'), + + /* + |-------------------------------------------------------------------------- + | Private Key + |-------------------------------------------------------------------------- + | + | A path or resource to your private key. + | + | E.g. 'file://path/to/private/key' + | + */ + + 'private' => env('JWT_PRIVATE_KEY'), + + /* + |-------------------------------------------------------------------------- + | Passphrase + |-------------------------------------------------------------------------- + | + | The passphrase for your private key. Can be null if none set. + | + */ + + 'passphrase' => env('JWT_PASSPHRASE'), + + ], + + /* + |-------------------------------------------------------------------------- + | JWT time to live + |-------------------------------------------------------------------------- + | + | Specify the length of time (in minutes) that the token will be valid for. + | Defaults to 1 hour. + | + | You can also set this to null, to yield a never expiring token. + | Some people may want this behaviour for e.g. a mobile app. + | This is not particularly recommended, so make sure you have appropriate + | systems in place to revoke the token if necessary. + | + */ + + 'ttl' => env('JWT_TTL', 60 * 12), + + /* + |-------------------------------------------------------------------------- + | Refresh time to live + |-------------------------------------------------------------------------- + | + | Specify the length of time (in minutes) that the token can be refreshed + | within. I.E. The user can refresh their token within a 2 week window of + | the original token being created until they must re-authenticate. + | Defaults to 2 weeks. + | + | You can also set this to null, to yield an infinite refresh time. + | Some may want this instead of never expiring tokens for e.g. a mobile app. + | This is not particularly recommended, so make sure you have appropriate + | systems in place to revoke the token if necessary. + | + */ + + 'refresh_ttl' => env('JWT_REFRESH_TTL', 20160), + + /* + |-------------------------------------------------------------------------- + | JWT hashing algorithm + |-------------------------------------------------------------------------- + | + | Specify the hashing algorithm that will be used to sign the token. + | + | See here: https://github.com/namshi/jose/tree/master/src/Namshi/JOSE/Signer/OpenSSL + | for possible values. + | + */ + + 'algo' => env('JWT_ALGO', 'HS256'), + + /* + |-------------------------------------------------------------------------- + | Required Claims + |-------------------------------------------------------------------------- + | + | Specify the required claims that must exist in any token. + | A TokenInvalidException will be thrown if any of these claims are not + | present in the payload. + | + */ + + 'required_claims' => [ + 'iss', + 'iat', + 'exp', + 'nbf', + 'sub', + 'jti', + ], + + /* + |-------------------------------------------------------------------------- + | Persistent Claims + |-------------------------------------------------------------------------- + | + | Specify the claim keys to be persisted when refreshing a token. + | `sub` and `iat` will automatically be persisted, in + | addition to the these claims. + | + | Note: If a claim does not exist then it will be ignored. + | + */ + + 'persistent_claims' => [ + // 'foo', + // 'bar', + ], + + /* + |-------------------------------------------------------------------------- + | Lock Subject + |-------------------------------------------------------------------------- + | + | This will determine whether a `prv` claim is automatically added to + | the token. The purpose of this is to ensure that if you have multiple + | authentication models e.g. `App\User` & `App\OtherPerson`, then we + | should prevent one authentication request from impersonating another, + | if 2 tokens happen to have the same id across the 2 different models. + | + | Under specific circumstances, you may want to disable this behaviour + | e.g. if you only have one authentication model, then you would save + | a little on token size. + | + */ + + 'lock_subject' => true, + + /* + |-------------------------------------------------------------------------- + | Leeway + |-------------------------------------------------------------------------- + | + | This property gives the jwt timestamp claims some "leeway". + | Meaning that if you have any unavoidable slight clock skew on + | any of your servers then this will afford you some level of cushioning. + | + | This applies to the claims `iat`, `nbf` and `exp`. + | + | Specify in seconds - only if you know you need it. + | + */ + + 'leeway' => env('JWT_LEEWAY', 0), + + /* + |-------------------------------------------------------------------------- + | Blacklist Enabled + |-------------------------------------------------------------------------- + | + | In order to invalidate tokens, you must have the blacklist enabled. + | If you do not want or need this functionality, then set this to false. + | + */ + + 'blacklist_enabled' => env('JWT_BLACKLIST_ENABLED', true), + + /* + | ------------------------------------------------------------------------- + | Blacklist Grace Period + | ------------------------------------------------------------------------- + | + | When multiple concurrent requests are made with the same JWT, + | it is possible that some of them fail, due to token regeneration + | on every request. + | + | Set grace period in seconds to prevent parallel request failure. + | + */ + + 'blacklist_grace_period' => env('JWT_BLACKLIST_GRACE_PERIOD', 0), + + /* + |-------------------------------------------------------------------------- + | Cookies encryption + |-------------------------------------------------------------------------- + | + | By default Laravel encrypt cookies for security reason. + | If you decide to not decrypt cookies, you will have to configure Laravel + | to not encrypt your cookie token by adding its name into the $except + | array available in the middleware "EncryptCookies" provided by Laravel. + | see https://laravel.com/docs/master/responses#cookies-and-encryption + | for details. + | + | Set it to true if you want to decrypt cookies. + | + */ + + 'decrypt_cookies' => false, + + /* + |-------------------------------------------------------------------------- + | Providers + |-------------------------------------------------------------------------- + | + | Specify the various providers used throughout the package. + | + */ + + 'providers' => [ + + /* + |-------------------------------------------------------------------------- + | JWT Provider + |-------------------------------------------------------------------------- + | + | Specify the provider that is used to create and decode the tokens. + | + */ + + 'jwt' => Tymon\JWTAuth\Providers\JWT\Lcobucci::class, + + /* + |-------------------------------------------------------------------------- + | Authentication Provider + |-------------------------------------------------------------------------- + | + | Specify the provider that is used to authenticate users. + | + */ + + 'auth' => Tymon\JWTAuth\Providers\Auth\Illuminate::class, + + /* + |-------------------------------------------------------------------------- + | Storage Provider + |-------------------------------------------------------------------------- + | + | Specify the provider that is used to store tokens in the blacklist. + | + */ + + 'storage' => Tymon\JWTAuth\Providers\Storage\Illuminate::class, + + ], + +]; diff --git a/config/logging.php b/config/logging.php new file mode 100644 index 00000000..902efafb --- /dev/null +++ b/config/logging.php @@ -0,0 +1,70 @@ + env('LOG_CHANNEL', 'stack'), + + /* + |-------------------------------------------------------------------------- + | Log Channels + |-------------------------------------------------------------------------- + | + | Here you may configure the log channels for your application. Out of + | the box, Laravel uses the Monolog PHP logging library. This gives + | you a variety of powerful log handlers / formatters to utilize. + | + | Available Drivers: "single", "daily", "slack", "syslog", + | "errorlog", "custom", "stack" + | + */ + + 'channels' => [ + 'stack' => [ + 'driver' => 'stack', + 'channels' => ['single'], + ], + + 'single' => [ + 'driver' => 'single', + 'path' => storage_path('logs/laravel.log'), + 'level' => 'debug', + ], + + 'daily' => [ + 'driver' => 'daily', + 'path' => storage_path('logs/laravel.log'), + 'level' => 'debug', + 'days' => 7, + ], + + 'slack' => [ + 'driver' => 'slack', + 'url' => env('LOG_SLACK_WEBHOOK_URL'), + 'username' => 'Laravel Log', + 'emoji' => ':boom:', + 'level' => 'critical', + ], + + 'syslog' => [ + 'driver' => 'syslog', + 'level' => 'debug', + ], + + 'errorlog' => [ + 'driver' => 'errorlog', + 'level' => 'debug', + ], + ], + +]; diff --git a/config/mail.php b/config/mail.php new file mode 100644 index 00000000..bb92224c --- /dev/null +++ b/config/mail.php @@ -0,0 +1,123 @@ + env('MAIL_DRIVER', 'smtp'), + + /* + |-------------------------------------------------------------------------- + | SMTP Host Address + |-------------------------------------------------------------------------- + | + | Here you may provide the host address of the SMTP server used by your + | applications. A default option is provided that is compatible with + | the Mailgun mail service which will provide reliable deliveries. + | + */ + + 'host' => env('MAIL_HOST', 'smtp.mailgun.org'), + + /* + |-------------------------------------------------------------------------- + | SMTP Host Port + |-------------------------------------------------------------------------- + | + | This is the SMTP port used by your application to deliver e-mails to + | users of the application. Like the host we have set this value to + | stay compatible with the Mailgun e-mail application by default. + | + */ + + 'port' => env('MAIL_PORT', 587), + + /* + |-------------------------------------------------------------------------- + | Global "From" Address + |-------------------------------------------------------------------------- + | + | You may wish for all e-mails sent by your application to be sent from + | the same address. Here, you may specify a name and address that is + | used globally for all e-mails that are sent by your application. + | + */ + + 'from' => [ + 'address' => env('MAIL_FROM_ADDRESS', 'hello@example.com'), + 'name' => env('MAIL_FROM_NAME', 'Example'), + ], + + /* + |-------------------------------------------------------------------------- + | E-Mail Encryption Protocol + |-------------------------------------------------------------------------- + | + | Here you may specify the encryption protocol that should be used when + | the application send e-mail messages. A sensible default using the + | transport layer security protocol should provide great security. + | + */ + + 'encryption' => env('MAIL_ENCRYPTION', 'tls'), + + /* + |-------------------------------------------------------------------------- + | SMTP Server Username + |-------------------------------------------------------------------------- + | + | If your SMTP server requires a username for authentication, you should + | set it here. This will get used to authenticate with your server on + | connection. You may also set the "password" value below this one. + | + */ + + 'username' => env('MAIL_USERNAME'), + + 'password' => env('MAIL_PASSWORD'), + + /* + |-------------------------------------------------------------------------- + | Sendmail System Path + |-------------------------------------------------------------------------- + | + | When using the "sendmail" driver to send e-mails, we will need to know + | the path to where Sendmail lives on this server. A default path has + | been provided here, which will work well on most of your systems. + | + */ + + 'sendmail' => '/usr/sbin/sendmail -bs', + + /* + |-------------------------------------------------------------------------- + | Markdown Mail Settings + |-------------------------------------------------------------------------- + | + | If you are using Markdown based email rendering, you may configure your + | theme and component paths here, allowing you to customize the design + | of the emails. Or, you may simply stick with the Laravel defaults! + | + */ + + 'markdown' => [ + 'theme' => 'default', + + 'paths' => [ + resource_path('views/vendor/mail'), + ], + ], + +]; diff --git a/config/queue.php b/config/queue.php new file mode 100644 index 00000000..4d83ebd0 --- /dev/null +++ b/config/queue.php @@ -0,0 +1,85 @@ + env('QUEUE_DRIVER', 'sync'), + + /* + |-------------------------------------------------------------------------- + | Queue Connections + |-------------------------------------------------------------------------- + | + | Here you may configure the connection information for each server that + | is used by your application. A default configuration has been added + | for each back-end shipped with Laravel. You are free to add more. + | + */ + + 'connections' => [ + + 'sync' => [ + 'driver' => 'sync', + ], + + 'database' => [ + 'driver' => 'database', + 'table' => 'jobs', + 'queue' => 'default', + 'retry_after' => 90, + ], + + 'beanstalkd' => [ + 'driver' => 'beanstalkd', + 'host' => 'localhost', + 'queue' => 'default', + 'retry_after' => 90, + ], + + 'sqs' => [ + 'driver' => 'sqs', + 'key' => 'your-public-key', + 'secret' => 'your-secret-key', + 'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id', + 'queue' => 'your-queue-name', + 'region' => 'us-east-1', + ], + + 'redis' => [ + 'driver' => 'redis', + 'connection' => 'default', + 'queue' => 'default', + 'retry_after' => 90, + ], + + ], + + /* + |-------------------------------------------------------------------------- + | Failed Queue Jobs + |-------------------------------------------------------------------------- + | + | These options configure the behavior of failed queue job logging so you + | can control which database and table are used to store the jobs that + | have failed. You may change them to any database / table you wish. + | + */ + + 'failed' => [ + 'database' => env('DB_CONNECTION', 'mysql'), + 'table' => 'failed_jobs', + ], + +]; diff --git a/config/services.php b/config/services.php new file mode 100644 index 00000000..07c8a125 --- /dev/null +++ b/config/services.php @@ -0,0 +1,43 @@ + [ + 'domain' => env('MAILGUN_DOMAIN'), + 'secret' => env('MAILGUN_SECRET'), + ], + + 'ses' => [ + 'key' => env('SES_KEY'), + 'secret' => env('SES_SECRET'), + 'region' => 'us-east-1', + ], + + 'sparkpost' => [ + 'secret' => env('SPARKPOST_SECRET'), + ], + + 'stripe' => [ + 'model' => App\User::class, + 'key' => env('STRIPE_KEY'), + 'secret' => env('STRIPE_SECRET'), + ], + + 'github' => [ + 'client_id' => env('GITHUB_CLIENT_ID'), + 'client_secret' => env('GITHUB_CLIENT_SECRET'), + ], + +]; diff --git a/config/session.php b/config/session.php new file mode 100644 index 00000000..71ad0ed1 --- /dev/null +++ b/config/session.php @@ -0,0 +1,197 @@ + env('SESSION_DRIVER', 'file'), + + /* + |-------------------------------------------------------------------------- + | Session Lifetime + |-------------------------------------------------------------------------- + | + | Here you may specify the number of minutes that you wish the session + | to be allowed to remain idle before it expires. If you want them + | to immediately expire on the browser closing, set that option. + | + */ + + 'lifetime' => 120, + + 'expire_on_close' => false, + + /* + |-------------------------------------------------------------------------- + | Session Encryption + |-------------------------------------------------------------------------- + | + | This option allows you to easily specify that all of your session data + | should be encrypted before it is stored. All encryption will be run + | automatically by Laravel and you can use the Session like normal. + | + */ + + 'encrypt' => false, + + /* + |-------------------------------------------------------------------------- + | Session File Location + |-------------------------------------------------------------------------- + | + | When using the native session driver, we need a location where session + | files may be stored. A default has been set for you but a different + | location may be specified. This is only needed for file sessions. + | + */ + + 'files' => storage_path('framework/sessions'), + + /* + |-------------------------------------------------------------------------- + | Session Database Connection + |-------------------------------------------------------------------------- + | + | When using the "database" or "redis" session drivers, you may specify a + | connection that should be used to manage these sessions. This should + | correspond to a connection in your database configuration options. + | + */ + + 'connection' => null, + + /* + |-------------------------------------------------------------------------- + | Session Database Table + |-------------------------------------------------------------------------- + | + | When using the "database" session driver, you may specify the table we + | should use to manage the sessions. Of course, a sensible default is + | provided for you; however, you are free to change this as needed. + | + */ + + 'table' => 'sessions', + + /* + |-------------------------------------------------------------------------- + | Session Cache Store + |-------------------------------------------------------------------------- + | + | When using the "apc" or "memcached" session drivers, you may specify a + | cache store that should be used for these sessions. This value must + | correspond with one of the application's configured cache stores. + | + */ + + 'store' => null, + + /* + |-------------------------------------------------------------------------- + | Session Sweeping Lottery + |-------------------------------------------------------------------------- + | + | Some session drivers must manually sweep their storage location to get + | rid of old sessions from storage. Here are the chances that it will + | happen on a given request. By default, the odds are 2 out of 100. + | + */ + + 'lottery' => [2, 100], + + /* + |-------------------------------------------------------------------------- + | Session Cookie Name + |-------------------------------------------------------------------------- + | + | Here you may change the name of the cookie used to identify a session + | instance by ID. The name specified here will get used every time a + | new session cookie is created by the framework for every driver. + | + */ + + 'cookie' => env( + 'SESSION_COOKIE', + str_slug(env('APP_NAME', 'laravel'), '_').'_session' + ), + + /* + |-------------------------------------------------------------------------- + | Session Cookie Path + |-------------------------------------------------------------------------- + | + | The session cookie path determines the path for which the cookie will + | be regarded as available. Typically, this will be the root path of + | your application but you are free to change this when necessary. + | + */ + + 'path' => '/', + + /* + |-------------------------------------------------------------------------- + | Session Cookie Domain + |-------------------------------------------------------------------------- + | + | Here you may change the domain of the cookie used to identify a session + | in your application. This will determine which domains the cookie is + | available to in your application. A sensible default has been set. + | + */ + + 'domain' => env('SESSION_DOMAIN', null), + + /* + |-------------------------------------------------------------------------- + | HTTPS Only Cookies + |-------------------------------------------------------------------------- + | + | By setting this option to true, session cookies will only be sent back + | to the server if the browser has a HTTPS connection. This will keep + | the cookie from being sent to you if it can not be done securely. + | + */ + + 'secure' => env('SESSION_SECURE_COOKIE', false), + + /* + |-------------------------------------------------------------------------- + | HTTP Access Only + |-------------------------------------------------------------------------- + | + | Setting this value to true will prevent JavaScript from accessing the + | value of the cookie and the cookie will only be accessible through + | the HTTP protocol. You are free to modify this option if needed. + | + */ + + 'http_only' => true, + + /* + |-------------------------------------------------------------------------- + | Same-Site Cookies + |-------------------------------------------------------------------------- + | + | This option determines how your cookies behave when cross-site requests + | take place, and can be used to mitigate CSRF attacks. By default, we + | do not enable this as other CSRF protection services are in place. + | + | Supported: "lax", "strict" + | + */ + + 'same_site' => null, + +]; diff --git a/config/view.php b/config/view.php new file mode 100644 index 00000000..2acfd9cc --- /dev/null +++ b/config/view.php @@ -0,0 +1,33 @@ + [ + resource_path('views'), + ], + + /* + |-------------------------------------------------------------------------- + | Compiled View Path + |-------------------------------------------------------------------------- + | + | This option determines where all the compiled Blade templates will be + | stored for your application. Typically, this is within the storage + | directory. However, as usual, you are free to change this value. + | + */ + + 'compiled' => realpath(storage_path('framework/views')), + +]; diff --git a/database/factories/BookingFactory.php b/database/factories/BookingFactory.php new file mode 100644 index 00000000..f20d48ef --- /dev/null +++ b/database/factories/BookingFactory.php @@ -0,0 +1,40 @@ +define(App\Booking::class, function (Faker $faker) { + $rate_id = App\Rate::pluck('id')->toArray(); + $user_id = App\User::pluck('id')->toArray(); + + return [ + 'account_name' => $faker->name, + 'account_num' => $faker->unique()->randomDigit, + 'bank_name' => $faker->name, + 'bank_branch' => $faker->unique()->address, + 'company_name' => $faker->name, + 'company_address' => $faker->unique()->address, + 'bank_address' => $faker->unique()->address, + 'swift_code' => $faker->unique()->randomDigit, + 'cnap' => $faker->randomDigit, + 'term' => str_random(10), + 'amount'=> $faker->randomDigit, + + 'rate_id' => $faker->randomElement($rate_id), + 'user_id' => $faker->randomElement($user_id), + + 'rmb_book_amount' => $faker->randomDigit, + 'rmb_book_pay_method' => str_random(10), + 'rmb_book_account_name' => $faker->name, + 'rmb_book_acc_no' => $faker->randomDigit, + 'rmb_book_bank_branch' => $faker->unique()->address, + + 'usd_book_amount' => $faker->randomDigit, + 'usd_book_pay_method'=> str_random(10), + 'usd_book_company_name'=> $faker->name, + 'usd_book_company_address' => $faker->unique()->address, + 'usd_book_swift_code'=> $faker->unique()->randomDigit, + 'usd_book_cnap' => $faker->randomDigit, + 'usd_book_bank_branch' => $faker->unique()->address, + + ]; +}); diff --git a/database/factories/ChinaBankSlipFactory.php b/database/factories/ChinaBankSlipFactory.php new file mode 100644 index 00000000..24af1b26 --- /dev/null +++ b/database/factories/ChinaBankSlipFactory.php @@ -0,0 +1,9 @@ +define(App\ChinaBankSlip::class, function (Faker $faker) { + return [ + // + ]; +}); diff --git a/database/factories/MarkingFactory.php b/database/factories/MarkingFactory.php new file mode 100644 index 00000000..9b67e6ee --- /dev/null +++ b/database/factories/MarkingFactory.php @@ -0,0 +1,10 @@ +define(App\Marking::class, function (Faker $faker) { + return [ + 'email' => $faker->unique()->safeEmail, + 'marking' => strtoupper(str_random(5)) + ]; +}); diff --git a/database/factories/PurchaseOrderFactory.php b/database/factories/PurchaseOrderFactory.php new file mode 100644 index 00000000..0f14e1a3 --- /dev/null +++ b/database/factories/PurchaseOrderFactory.php @@ -0,0 +1,9 @@ +define(App\PurchaseOrder::class, function (Faker $faker) { + return [ + // + ]; +}); diff --git a/database/factories/RateFactory.php b/database/factories/RateFactory.php new file mode 100644 index 00000000..37dc5c62 --- /dev/null +++ b/database/factories/RateFactory.php @@ -0,0 +1,14 @@ +define(App\Rate::class, function (Faker $faker) { + return [ + 'x1_cash' => $faker->randomDigit, + 'x1_cheque' => $faker->randomDigit, + 'x1_ba' => $faker->randomDigit, + 'x2_cash' => $faker->randomDigit, + 'x2_cheque' => $faker->randomDigit, + 'x2_ba' => $faker->randomDigit + ]; +}); diff --git a/database/factories/SettingActiveBankFactory.php b/database/factories/SettingActiveBankFactory.php new file mode 100644 index 00000000..65e42214 --- /dev/null +++ b/database/factories/SettingActiveBankFactory.php @@ -0,0 +1,9 @@ +define(Model::class, function (Faker $faker) { + return [ + // + ]; +}); diff --git a/database/factories/SettingBeneficiaryFactory.php b/database/factories/SettingBeneficiaryFactory.php new file mode 100644 index 00000000..79204254 --- /dev/null +++ b/database/factories/SettingBeneficiaryFactory.php @@ -0,0 +1,9 @@ +define(App\SettingBeneficiary::class, function (Faker $faker) { + return [ + // + ]; +}); diff --git a/database/factories/SettingCreditFactory.php b/database/factories/SettingCreditFactory.php new file mode 100644 index 00000000..f1d4eeba --- /dev/null +++ b/database/factories/SettingCreditFactory.php @@ -0,0 +1,11 @@ +define(App\SettingCredit::class, function (Faker $faker) { + return [ + 'rmb_credit_limit' => $faker->randomDigit, + 'usd_credit_limit' => $faker->randomDigit, + 'time_limit' => $faker->randomDigit + ]; +}); diff --git a/database/factories/SettingMalaysiaBankFactory.php b/database/factories/SettingMalaysiaBankFactory.php new file mode 100644 index 00000000..65e42214 --- /dev/null +++ b/database/factories/SettingMalaysiaBankFactory.php @@ -0,0 +1,9 @@ +define(Model::class, function (Faker $faker) { + return [ + // + ]; +}); diff --git a/database/factories/SettingSupplierFactory.php b/database/factories/SettingSupplierFactory.php new file mode 100644 index 00000000..2829368c --- /dev/null +++ b/database/factories/SettingSupplierFactory.php @@ -0,0 +1,13 @@ +define(App\SettingSupplier::class, function (Faker $faker) { + return [ + 'company_name' => $faker->name, + 'gst_no' => $faker->unique()->randomDigit, + 'supplier_reg_no' => $faker->unique()->randomDigit, + 'bank_name' => $faker->name, + 'acc_no' => $faker->unique()->randomDigit + ]; +}); diff --git a/database/factories/SupplierBookingItemFactory.php b/database/factories/SupplierBookingItemFactory.php new file mode 100644 index 00000000..514eae24 --- /dev/null +++ b/database/factories/SupplierBookingItemFactory.php @@ -0,0 +1,9 @@ +define(App\SupplierBookingItem::class, function (Faker $faker) { + return [ + // + ]; +}); diff --git a/database/factories/UserBankSlipFactory.php b/database/factories/UserBankSlipFactory.php new file mode 100644 index 00000000..9ac7db69 --- /dev/null +++ b/database/factories/UserBankSlipFactory.php @@ -0,0 +1,15 @@ +define(App\UserBankSlip::class, function (Faker $faker) { + $book_id = App\Booking::pluck('id')->toArray(); + + return [ + 'bank_slip_type' => str_random(10), + 'bankslip_path' => str_random(10), + 'transfer_amount' => $faker->randomDigit, + 'cust_marking' => str_random(10), + 'booking_id' => $faker->randomElement($book_id), + ]; +}); diff --git a/database/factories/UserFactory.php b/database/factories/UserFactory.php new file mode 100644 index 00000000..276efb9e --- /dev/null +++ b/database/factories/UserFactory.php @@ -0,0 +1,26 @@ +define(App\User::class, function (Faker $faker) { + static $password; + + return [ + 'name' => $faker->name, + 'email' => $faker->unique()->safeEmail, + 'password' => $password ?: $password = bcrypt('secret'), + 'remember_token' => str_random(10), + 'marking' => $faker->name, + ]; +}); \ No newline at end of file diff --git a/database/migrations/2014_10_12_000000_create_users_table.php b/database/migrations/2014_10_12_000000_create_users_table.php new file mode 100644 index 00000000..851428ef --- /dev/null +++ b/database/migrations/2014_10_12_000000_create_users_table.php @@ -0,0 +1,35 @@ +increments('id'); + $table->string('name'); + $table->string('email')->unique(); + $table->string('password'); + $table->rememberToken(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('users'); + } +} diff --git a/database/migrations/2014_10_12_100000_create_password_resets_table.php b/database/migrations/2014_10_12_100000_create_password_resets_table.php new file mode 100644 index 00000000..0d5cb845 --- /dev/null +++ b/database/migrations/2014_10_12_100000_create_password_resets_table.php @@ -0,0 +1,32 @@ +string('email')->index(); + $table->string('token'); + $table->timestamp('created_at')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('password_resets'); + } +} diff --git a/database/migrations/2017_12_07_122845_create_oauth_providers_table.php b/database/migrations/2017_12_07_122845_create_oauth_providers_table.php new file mode 100644 index 00000000..c9421f3e --- /dev/null +++ b/database/migrations/2017_12_07_122845_create_oauth_providers_table.php @@ -0,0 +1,41 @@ +increments('id'); + $table->integer('user_id')->unsigned(); + $table->string('provider'); + $table->string('provider_user_id')->index(); + $table->string('access_token')->nullable(); + $table->string('refresh_token')->nullable(); + $table->timestamps(); + + $table->foreign('user_id') + ->references('id') + ->on('users') + ->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('oauth_providers'); + } +} diff --git a/database/migrations/2018_04_25_085705_create_rates_table.php b/database/migrations/2018_04_25_085705_create_rates_table.php new file mode 100644 index 00000000..c671b6e7 --- /dev/null +++ b/database/migrations/2018_04_25_085705_create_rates_table.php @@ -0,0 +1,37 @@ +increments('id'); + $table->double('x1_cash'); + $table->double('x1_cheque'); + $table->double('x1_ba'); + $table->double('x2_cash'); + $table->double('x2_cheque'); + $table->double('x2_ba'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('rates'); + } +} diff --git a/database/migrations/2018_04_25_090015_create_setting_credits_table.php b/database/migrations/2018_04_25_090015_create_setting_credits_table.php new file mode 100644 index 00000000..26568b9f --- /dev/null +++ b/database/migrations/2018_04_25_090015_create_setting_credits_table.php @@ -0,0 +1,33 @@ +increments('id'); + $table->decimal('rmb_credit_limit'); + $table->decimal('usd_credit_limit'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('setting_credits'); + } +} diff --git a/database/migrations/2018_04_25_090031_create_setting_suppliers_table.php b/database/migrations/2018_04_25_090031_create_setting_suppliers_table.php new file mode 100644 index 00000000..1f3d6df1 --- /dev/null +++ b/database/migrations/2018_04_25_090031_create_setting_suppliers_table.php @@ -0,0 +1,36 @@ +increments('id'); + $table->string('company_name'); + $table->string('gst_no'); + $table->string('supplier_reg_no')->nullable(); + $table->string('bank_name'); + $table->string('acc_no'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('setting_suppliers'); + } +} diff --git a/database/migrations/2018_04_25_090057_create_setting_beneficiaries_table.php b/database/migrations/2018_04_25_090057_create_setting_beneficiaries_table.php new file mode 100644 index 00000000..8ec40c3e --- /dev/null +++ b/database/migrations/2018_04_25_090057_create_setting_beneficiaries_table.php @@ -0,0 +1,38 @@ +increments('id'); + $table->string('company_name'); + $table->string('bank_name'); + $table->string('acc_no')->unique(); + $table->string('bank_address'); + $table->string('swift'); + $table->string('cnap'); + $table->string('bank_branch'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('setting_beneficiaries'); + } +} diff --git a/database/migrations/2018_05_07_080525_entrust_setup_tables.php b/database/migrations/2018_05_07_080525_entrust_setup_tables.php new file mode 100644 index 00000000..6b910bb1 --- /dev/null +++ b/database/migrations/2018_05_07_080525_entrust_setup_tables.php @@ -0,0 +1,75 @@ +increments('id'); + $table->string('name')->unique(); + $table->string('display_name')->nullable(); + $table->string('description')->nullable(); + $table->timestamps(); + }); + + // Create table for associating roles to users (Many-to-Many) + Schema::create('role_user', function (Blueprint $table) { + $table->integer('user_id')->unsigned(); + $table->integer('role_id')->unsigned(); + + $table->foreign('user_id')->references('id')->on('users') + ->onUpdate('cascade')->onDelete('cascade'); + $table->foreign('role_id')->references('id')->on('roles') + ->onUpdate('cascade')->onDelete('cascade'); + + $table->primary(['user_id', 'role_id']); + }); + + // Create table for storing permissions + Schema::create('permissions', function (Blueprint $table) { + $table->increments('id'); + $table->string('name')->unique(); + $table->string('display_name')->nullable(); + $table->string('description')->nullable(); + $table->timestamps(); + }); + + // Create table for associating permissions to roles (Many-to-Many) + Schema::create('permission_role', function (Blueprint $table) { + $table->integer('permission_id')->unsigned(); + $table->integer('role_id')->unsigned(); + + $table->foreign('permission_id')->references('id')->on('permissions') + ->onUpdate('cascade')->onDelete('cascade'); + $table->foreign('role_id')->references('id')->on('roles') + ->onUpdate('cascade')->onDelete('cascade'); + + $table->primary(['permission_id', 'role_id']); + }); + + DB::commit(); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::drop('permission_role'); + Schema::drop('permissions'); + Schema::drop('role_user'); + Schema::drop('roles'); + } +} diff --git a/database/migrations/2018_05_08_032048_create_china_bank_slips_table.php b/database/migrations/2018_05_08_032048_create_china_bank_slips_table.php new file mode 100644 index 00000000..3368053a --- /dev/null +++ b/database/migrations/2018_05_08_032048_create_china_bank_slips_table.php @@ -0,0 +1,44 @@ +increments('id'); + $table->string('company_name'); + $table->string('bank_name'); + $table->string('acc_no'); + $table->string('bank_address'); + $table->string('swift'); + $table->string('cnap'); + $table->string('bank_branch'); + $table->string('order_id'); + $table->double('transfer_amount_needed'); + $table->double('actual_transfer_amount'); + $table->string('date'); + $table->string('details'); + $table->string('bankslip_url'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('china_bank_slips'); + } +} diff --git a/database/migrations/2018_05_15_075453_create_bookings_table.php b/database/migrations/2018_05_15_075453_create_bookings_table.php new file mode 100644 index 00000000..53b4988f --- /dev/null +++ b/database/migrations/2018_05_15_075453_create_bookings_table.php @@ -0,0 +1,54 @@ +increments('id'); + $table->string('account_name'); + $table->integer('account_num'); + $table->string('bank_name'); + $table->string('bank_branch'); + $table->string('company_name'); + $table->string('company_address'); + $table->string('bank_address'); + $table->string('swift_code'); + $table->string('cnap'); + $table->string('term'); + $table->double('amount'); + $table->unsignedInteger('rate_id'); + $table->foreign('rate_id') + ->references('id')->on('rates') + ->onDelete('cascade'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('bookings', function(Blueprint $table) + { + $table->dropForeign('bookings_rate_id_foreign'); + $table->dropColumn('rate_id'); + }); + + Schema::dropIfExists('bookings'); + + } +} diff --git a/database/migrations/2018_05_15_090646_change_user_id_in_bookings_table.php b/database/migrations/2018_05_15_090646_change_user_id_in_bookings_table.php new file mode 100644 index 00000000..af1c5a67 --- /dev/null +++ b/database/migrations/2018_05_15_090646_change_user_id_in_bookings_table.php @@ -0,0 +1,38 @@ +unsignedInteger('user_id')->default('0'); + $table->foreign('user_id') + ->references('id')->on('users') + ->onDelete('cascade'); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('bookings', function(Blueprint $table) + { + $table->dropForeign('bookings_user_id_foreign'); + $table->dropColumn('user_id'); + }); + } +} diff --git a/database/migrations/2018_05_18_063200_add_bia_in_bookings_table.php b/database/migrations/2018_05_18_063200_add_bia_in_bookings_table.php new file mode 100644 index 00000000..bafbbc67 --- /dev/null +++ b/database/migrations/2018_05_18_063200_add_bia_in_bookings_table.php @@ -0,0 +1,30 @@ +double('bia')->default('0'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_05_22_032509_add_bookings_table.php b/database/migrations/2018_05_22_032509_add_bookings_table.php new file mode 100644 index 00000000..824991f8 --- /dev/null +++ b/database/migrations/2018_05_22_032509_add_bookings_table.php @@ -0,0 +1,44 @@ +double('rmb_book_amount')->default('0'); + $table->string('rmb_book_pay_method')->default(' '); + $table->string('rmb_book_account_name')->default(' '); + $table->string('rmb_book_bank_name')->default(' '); + $table->string('rmb_book_acc_no')->default(' '); + $table->string('rmb_book_bank_branch')->default(' '); + + $table->double('usd_book_amount')->default('0'); + $table->string('usd_book_pay_method')->default(' '); + $table->string('usd_book_company_name')->default(' '); + $table->string('usd_book_company_address')->default(' '); + $table->string('usd_book_swift_code')->default(' '); + $table->string('usd_book_cnap')->default(' '); + $table->string('usd_book_bank_branch')->default(' '); + $table->boolean('verification_status')->default('1'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + + } +} diff --git a/database/migrations/2018_05_22_032509_make_nullable_field_bookings_table.php b/database/migrations/2018_05_22_032509_make_nullable_field_bookings_table.php new file mode 100644 index 00000000..4afb7784 --- /dev/null +++ b/database/migrations/2018_05_22_032509_make_nullable_field_bookings_table.php @@ -0,0 +1,46 @@ +decimal('rmb_book_amount',9,3)->nullable()->change(); + $table->string('rmb_book_pay_method')->nullable()->change(); + $table->string('rmb_book_account_name')->nullable()->change(); + $table->string('rmb_book_bank_name')->nullable()->change(); + $table->string('rmb_book_acc_no')->nullable()->change(); + $table->string('rmb_book_bank_branch')->nullable()->change(); + + $table->decimal('usd_book_amount', 9,3)->nullable()->change(); + $table->string('usd_book_pay_method')->nullable()->change(); + $table->string('usd_book_company_name')->nullable()->change(); + $table->string('usd_book_company_address')->nullable()->change(); + $table->string('usd_book_swift_code')->nullable()->change(); + $table->string('usd_book_cnap')->nullable()->change(); + $table->string('usd_book_bank_branch')->nullable()->change(); + $table->boolean('verification_status')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('bookings', function (Blueprint $table) { + // + }); + } +} diff --git a/database/migrations/2018_05_24_082214_create_user_bank_slips_table.php b/database/migrations/2018_05_24_082214_create_user_bank_slips_table.php new file mode 100644 index 00000000..ed5bb3a5 --- /dev/null +++ b/database/migrations/2018_05_24_082214_create_user_bank_slips_table.php @@ -0,0 +1,43 @@ +increments('id'); + $table->string('bank_slip_type')->nullable(); + $table->string('bankslip_url')->nullable(); + $table->double('transfer_amount')->nullable(); + $table->string('cust_marking')->nullable(); + $table->integer('book_id')->unsigned(); + $table->foreign('book_id')->references('id')->on('bookings'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('user_bank_slips', function(Blueprint $table) + { + $table->dropForeign('user_bank_slips_book_id_foreign'); + }); + + Schema::dropIfExists('user_bank_slips'); + } +} diff --git a/database/migrations/2018_05_28_085925_create_purchase_orders_table.php b/database/migrations/2018_05_28_085925_create_purchase_orders_table.php new file mode 100644 index 00000000..0ab7bbe2 --- /dev/null +++ b/database/migrations/2018_05_28_085925_create_purchase_orders_table.php @@ -0,0 +1,40 @@ +increments('id'); + $table->string('image_url'); + $table->double('amount'); + $table->integer('book_id')->unsigned()->nullable; + $table->foreign('book_id')->references('id')->on('bookings'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('purchase_orders', function(Blueprint $table) + { + $table->dropForeign('purchase_orders_booking_id_foreign'); + $table->dropColumn('booking_id'); + }); + Schema::dropIfExists('purchase_orders'); + } +} diff --git a/database/migrations/2018_05_30_030248_update_upload_booking_bankslip.php b/database/migrations/2018_05_30_030248_update_upload_booking_bankslip.php new file mode 100644 index 00000000..70a052ca --- /dev/null +++ b/database/migrations/2018_05_30_030248_update_upload_booking_bankslip.php @@ -0,0 +1,31 @@ +boolean('is_approve')->default('0'); + }); + } + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('user_bank_slips', function (Blueprint $table) { + // + }); + } +} diff --git a/database/migrations/2018_06_16_025657_add_cancel_booking_table.php b/database/migrations/2018_06_16_025657_add_cancel_booking_table.php new file mode 100644 index 00000000..b8abe8bb --- /dev/null +++ b/database/migrations/2018_06_16_025657_add_cancel_booking_table.php @@ -0,0 +1,34 @@ +boolean('is_cancel')->default('0'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + if (Schema::hasColumn('bookings', 'is_cancel')) { + Schema::table('bookings', function (Blueprint $table) { + // $table->dropColumn('is_cancel'); + }); + } + } +} diff --git a/database/migrations/2018_06_18_104015_add_reject_user_bank_slip_table.php b/database/migrations/2018_06_18_104015_add_reject_user_bank_slip_table.php new file mode 100644 index 00000000..f4d35ea3 --- /dev/null +++ b/database/migrations/2018_06_18_104015_add_reject_user_bank_slip_table.php @@ -0,0 +1,36 @@ +boolean('is_reject')->default('0'); + $table->string('reject_reason')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + if (Schema::hasColumn('user_bank_slips', 'is_reject')) { + Schema::table('user_bank_slips', function (Blueprint $table) { + // $table->dropColumn('is_reject'); + // $table->dropColumn('reject_reason'); + }); + } + } +} diff --git a/database/migrations/2018_06_18_141410_rename_book_id_to_booking_id_in_userbankslip_table.php b/database/migrations/2018_06_18_141410_rename_book_id_to_booking_id_in_userbankslip_table.php new file mode 100644 index 00000000..9113a2dd --- /dev/null +++ b/database/migrations/2018_06_18_141410_rename_book_id_to_booking_id_in_userbankslip_table.php @@ -0,0 +1,31 @@ +renameColumn('book_id', 'booking_id'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_06_19_144347_create_marking_table.php b/database/migrations/2018_06_19_144347_create_marking_table.php new file mode 100644 index 00000000..361d8466 --- /dev/null +++ b/database/migrations/2018_06_19_144347_create_marking_table.php @@ -0,0 +1,33 @@ +increments('id'); + $table->string('email')->unique(); + $table->string('marking')->unique(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('markings'); + } +} diff --git a/database/migrations/2018_06_20_145105_add_rate_to_booking.php b/database/migrations/2018_06_20_145105_add_rate_to_booking.php new file mode 100644 index 00000000..f74e2fb8 --- /dev/null +++ b/database/migrations/2018_06_20_145105_add_rate_to_booking.php @@ -0,0 +1,33 @@ +double('rate')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('bookings', function (Blueprint $table) { + $table->dropColumn('rate'); + // $table->dropColumn('reject_reason'); + }); + } +} \ No newline at end of file diff --git a/database/migrations/2018_06_21_024802_add_status_to_booking_table.php b/database/migrations/2018_06_21_024802_add_status_to_booking_table.php new file mode 100644 index 00000000..3c7daec7 --- /dev/null +++ b/database/migrations/2018_06_21_024802_add_status_to_booking_table.php @@ -0,0 +1,33 @@ +integer('status')->default(1); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('bookings', function (Blueprint $table) { + $table->dropColumn('status'); + // $table->dropColumn('reject_reason'); + }); + } +} diff --git a/database/migrations/2018_06_21_025734_supplier_booking_table.php b/database/migrations/2018_06_21_025734_supplier_booking_table.php new file mode 100644 index 00000000..2369cf24 --- /dev/null +++ b/database/migrations/2018_06_21_025734_supplier_booking_table.php @@ -0,0 +1,44 @@ +increments('id'); + $table->string('payment_method'); + $table->double('transfer_amount'); + $table->double('rate'); + $table->double('rebate'); + $table->double('amountInRMB'); + $table->double('rmbBankAmount'); + + $table->integer('book_id')->unsigned(); + $table->foreign('book_id')->references('id')->on('bookings'); + + $table->integer('supplier_id')->unsigned(); + $table->foreign('supplier_id')->references('id')->on('setting_suppliers'); + + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('supplier_bookings'); + } +} diff --git a/database/migrations/2018_06_21_034658_supplierbooking_customerbooking_table.php b/database/migrations/2018_06_21_034658_supplierbooking_customerbooking_table.php new file mode 100644 index 00000000..bf18bb6a --- /dev/null +++ b/database/migrations/2018_06_21_034658_supplierbooking_customerbooking_table.php @@ -0,0 +1,34 @@ +integer('supplierbooking_id')->unsigned(); + $table->integer('booking_id')->unsigned(); + + $table->foreign('supplierbooking_id')->references('id')->on('supplier_bookings'); + $table->foreign('booking_id')->references('id')->on('bookings'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('supplierbooking_customerbooking'); + } +} diff --git a/database/migrations/2018_06_21_040652_create_invoice_table.php b/database/migrations/2018_06_21_040652_create_invoice_table.php new file mode 100644 index 00000000..86b7002f --- /dev/null +++ b/database/migrations/2018_06_21_040652_create_invoice_table.php @@ -0,0 +1,41 @@ +increments('id'); + $table->string('invoice_path'); + $table->double('amount'); + $table->integer('booking_id')->unsigned(); + $table->foreign('booking_id')->references('id')->on('bookings'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('invoices', function(Blueprint $table) + { + $table->dropForeign('invoices_booking_id_foreign'); + $table->dropColumn('booking_id'); + }); + + Schema::dropIfExists('invoices'); + } +} diff --git a/database/migrations/2018_06_21_062637_rename_imageurl_to_imagepath_in_userbankslips_table.php b/database/migrations/2018_06_21_062637_rename_imageurl_to_imagepath_in_userbankslips_table.php new file mode 100644 index 00000000..e29ffc4d --- /dev/null +++ b/database/migrations/2018_06_21_062637_rename_imageurl_to_imagepath_in_userbankslips_table.php @@ -0,0 +1,31 @@ +renameColumn('bankslip_url', 'bankslip_path'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_06_21_062700_rename_imageurl_to_imagepath_in_purchaseorders_table.php b/database/migrations/2018_06_21_062700_rename_imageurl_to_imagepath_in_purchaseorders_table.php new file mode 100644 index 00000000..cc1ea4df --- /dev/null +++ b/database/migrations/2018_06_21_062700_rename_imageurl_to_imagepath_in_purchaseorders_table.php @@ -0,0 +1,31 @@ +renameColumn('image_url', 'image_path'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_06_21_072354_remove_amountcolumn_from_po_table.php b/database/migrations/2018_06_21_072354_remove_amountcolumn_from_po_table.php new file mode 100644 index 00000000..d350c3c1 --- /dev/null +++ b/database/migrations/2018_06_21_072354_remove_amountcolumn_from_po_table.php @@ -0,0 +1,34 @@ +dropColumn('amount'); + // $table->dropColumn('reject_reason'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('purchase_orders', function (Blueprint $table) { + $table->double('amount'); + // $table->dropColumn('reject_reason'); + }); + } +} diff --git a/database/migrations/2018_06_22_042127_add_adminstatus_to_booking_table.php b/database/migrations/2018_06_22_042127_add_adminstatus_to_booking_table.php new file mode 100644 index 00000000..4e7e93a9 --- /dev/null +++ b/database/migrations/2018_06_22_042127_add_adminstatus_to_booking_table.php @@ -0,0 +1,33 @@ +integer('admin_status')->default(1); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('bookings', function (Blueprint $table) { + $table->dropColumn('admin_status'); + // $table->dropColumn('reject_reason'); + }); + } +} diff --git a/database/migrations/2018_06_22_042911_change_adminstatus_default_booking_table.php b/database/migrations/2018_06_22_042911_change_adminstatus_default_booking_table.php new file mode 100644 index 00000000..5047f990 --- /dev/null +++ b/database/migrations/2018_06_22_042911_change_adminstatus_default_booking_table.php @@ -0,0 +1,29 @@ +integer('admin_status')->default(0)->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + } +} diff --git a/database/migrations/2018_06_25_075341_change_adminstatus_default_to1_on_booking_table.php b/database/migrations/2018_06_25_075341_change_adminstatus_default_to1_on_booking_table.php new file mode 100644 index 00000000..ef50d656 --- /dev/null +++ b/database/migrations/2018_06_25_075341_change_adminstatus_default_to1_on_booking_table.php @@ -0,0 +1,30 @@ +integer('admin_status')->default(1)->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_06_25_101043_add_time_limit_setting_credit_table.php b/database/migrations/2018_06_25_101043_add_time_limit_setting_credit_table.php new file mode 100644 index 00000000..7b6b8e41 --- /dev/null +++ b/database/migrations/2018_06_25_101043_add_time_limit_setting_credit_table.php @@ -0,0 +1,32 @@ +integer('time_limit')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('setting_credits', function (Blueprint $table) { + $table->dropColumn('time_limit'); + }); + } +} \ No newline at end of file diff --git a/database/migrations/2018_06_25_120731_create_supplier_booking_items_table.php b/database/migrations/2018_06_25_120731_create_supplier_booking_items_table.php new file mode 100644 index 00000000..fad1a1c3 --- /dev/null +++ b/database/migrations/2018_06_25_120731_create_supplier_booking_items_table.php @@ -0,0 +1,37 @@ +increments('id'); + $table->string('china_bankslip_url'); + $table->integer('book_id')->unsigned(); + $table->foreign('book_id')->references('id')->on('bookings'); + $table->double('bank_in_amount'); + $table->integer('supplierbooking_id')->unsigned(); + $table->foreign('supplierbooking_id')->references('id')->on('supplier_bookings'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('supplier_booking_items'); + } +} diff --git a/database/migrations/2018_06_26_035802_add_eta_user_bank_slip_table.php b/database/migrations/2018_06_26_035802_add_eta_user_bank_slip_table.php new file mode 100644 index 00000000..ff5cc1f7 --- /dev/null +++ b/database/migrations/2018_06_26_035802_add_eta_user_bank_slip_table.php @@ -0,0 +1,34 @@ +integer('estimated_arrival_time')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + if (Schema::hasColumn('user_bank_slips', 'estimated_arrival_time')) { + Schema::table('user_bank_slips', function (Blueprint $table) { + $table->dropColumn('estimated_arrival_time'); + }); + } + } +} diff --git a/database/migrations/2018_06_26_141337_rename_bankslip_url_to_chinabanksli_path_in_china_bank_slip_table.php b/database/migrations/2018_06_26_141337_rename_bankslip_url_to_chinabanksli_path_in_china_bank_slip_table.php new file mode 100644 index 00000000..9c23bfc8 --- /dev/null +++ b/database/migrations/2018_06_26_141337_rename_bankslip_url_to_chinabanksli_path_in_china_bank_slip_table.php @@ -0,0 +1,31 @@ +renameColumn('bankslip_url', 'china_bank_slip_path'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_06_27_035705_make_paymentmethod_nulltable_in_supplierbooking_table.php b/database/migrations/2018_06_27_035705_make_paymentmethod_nulltable_in_supplierbooking_table.php new file mode 100644 index 00000000..8baebdac --- /dev/null +++ b/database/migrations/2018_06_27_035705_make_paymentmethod_nulltable_in_supplierbooking_table.php @@ -0,0 +1,31 @@ +string('payment_method')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_06_27_081455_add_bookingid_foreignkey_to_chinabankslip_table.php b/database/migrations/2018_06_27_081455_add_bookingid_foreignkey_to_chinabankslip_table.php new file mode 100644 index 00000000..f83dbe57 --- /dev/null +++ b/database/migrations/2018_06_27_081455_add_bookingid_foreignkey_to_chinabankslip_table.php @@ -0,0 +1,36 @@ +integer('booking_id')->unsigned()->nullable(); + $table->foreign('booking_id')->references('id')->on('bookings'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('china_bank_slips', function(Blueprint $table) + { + $table->dropForeign('china_bank_slips_booking_id_foreign'); + $table->dropColumn('booking_id'); + }); + } +} diff --git a/database/migrations/2018_06_28_011717_rename_booking_foreignkey_in_po_table.php b/database/migrations/2018_06_28_011717_rename_booking_foreignkey_in_po_table.php new file mode 100644 index 00000000..aa36fdd9 --- /dev/null +++ b/database/migrations/2018_06_28_011717_rename_booking_foreignkey_in_po_table.php @@ -0,0 +1,34 @@ +dropForeign(['book_id']); + $table->dropColumn('book_id'); + $table->integer('booking_id')->unsigned()->nullable(); + $table->foreign('booking_id')->references('id')->on('bookings'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_07_02_022752_remove_user_in_users_table.php b/database/migrations/2018_07_02_022752_remove_user_in_users_table.php new file mode 100644 index 00000000..bd0deddd --- /dev/null +++ b/database/migrations/2018_07_02_022752_remove_user_in_users_table.php @@ -0,0 +1,32 @@ +dropColumn('name'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->string('name'); + }); + } +} diff --git a/database/migrations/2018_07_02_104306_rename_booking_foreignkey_from_supplierbooking_table.php b/database/migrations/2018_07_02_104306_rename_booking_foreignkey_from_supplierbooking_table.php new file mode 100644 index 00000000..66df713b --- /dev/null +++ b/database/migrations/2018_07_02_104306_rename_booking_foreignkey_from_supplierbooking_table.php @@ -0,0 +1,34 @@ +dropForeign(['book_id']); + $table->dropColumn('book_id'); + $table->integer('booking_id')->unsigned()->nullable(); + $table->foreign('booking_id')->references('id')->on('bookings'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_07_03_014020_add_billing_field_to_supplierbooking_table.php b/database/migrations/2018_07_03_014020_add_billing_field_to_supplierbooking_table.php new file mode 100644 index 00000000..f61fc60f --- /dev/null +++ b/database/migrations/2018_07_03_014020_add_billing_field_to_supplierbooking_table.php @@ -0,0 +1,30 @@ +double('billing_amount')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + } +} diff --git a/database/migrations/2018_07_03_014343_add_salestax_field_to_supplierbooking_table.php b/database/migrations/2018_07_03_014343_add_salestax_field_to_supplierbooking_table.php new file mode 100644 index 00000000..cdb3a24c --- /dev/null +++ b/database/migrations/2018_07_03_014343_add_salestax_field_to_supplierbooking_table.php @@ -0,0 +1,33 @@ +double('salestax_amount')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('supplier_bookings', function (Blueprint $table) { + $table->dropColumn('salestax_amount'); + }); + } +} diff --git a/database/migrations/2018_07_05_041532_add_name_in_users_table.php b/database/migrations/2018_07_05_041532_add_name_in_users_table.php new file mode 100644 index 00000000..6aa3e718 --- /dev/null +++ b/database/migrations/2018_07_05_041532_add_name_in_users_table.php @@ -0,0 +1,34 @@ +string('name')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('name'); + }); + + } +} diff --git a/database/migrations/2018_07_05_053554_update_name_to_nullable_in_users_table.php b/database/migrations/2018_07_05_053554_update_name_to_nullable_in_users_table.php new file mode 100644 index 00000000..a699dbc4 --- /dev/null +++ b/database/migrations/2018_07_05_053554_update_name_to_nullable_in_users_table.php @@ -0,0 +1,31 @@ +string('name')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_07_05_095441_add_marking_to_user_table.php b/database/migrations/2018_07_05_095441_add_marking_to_user_table.php new file mode 100644 index 00000000..20861381 --- /dev/null +++ b/database/migrations/2018_07_05_095441_add_marking_to_user_table.php @@ -0,0 +1,34 @@ +string('marking')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('marking'); + }); + + } +} diff --git a/database/migrations/2018_07_05_102323_create_setting_malaysia_bank_table.php b/database/migrations/2018_07_05_102323_create_setting_malaysia_bank_table.php new file mode 100644 index 00000000..d70fc691 --- /dev/null +++ b/database/migrations/2018_07_05_102323_create_setting_malaysia_bank_table.php @@ -0,0 +1,38 @@ +increments('id'); + $table->string('company_name'); + $table->string('bank_name'); + $table->string('acc_no')->unique(); + $table->string('bank_address'); + $table->string('swift'); + $table->string('cnap'); + $table->string('bank_branch'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('setting_malaysia_banks'); + } +} diff --git a/database/migrations/2018_07_06_035110_add_nullable_setting_malaysia_bank_table.php b/database/migrations/2018_07_06_035110_add_nullable_setting_malaysia_bank_table.php new file mode 100644 index 00000000..66de8f4d --- /dev/null +++ b/database/migrations/2018_07_06_035110_add_nullable_setting_malaysia_bank_table.php @@ -0,0 +1,36 @@ +string('company_name')->nullable()->change(); + $table->string('bank_name')->nullable()->change(); + $table->string('acc_no')->nullable()->change(); + $table->string('bank_address')->nullable()->change(); + $table->string('swift')->nullable()->change(); + $table->string('cnap')->nullable()->change(); + $table->string('bank_branch')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_07_06_075408_create_setting_active_bank_table.php b/database/migrations/2018_07_06_075408_create_setting_active_bank_table.php new file mode 100644 index 00000000..dc783c2d --- /dev/null +++ b/database/migrations/2018_07_06_075408_create_setting_active_bank_table.php @@ -0,0 +1,43 @@ +increments('id'); + $table->string('x1_bank_id')->unique(); + $table->string('x2_bank_id')->unique(); + $table->string('beneficiary_id')->nullable(); + $table->foreign('x1_bank_id') + ->references('acc_no')->on('setting_malaysia_banks') + ->onDelete('cascade'); + $table->foreign('x2_bank_id') + ->references('acc_no')->on('setting_malaysia_banks') + ->onDelete('cascade'); + $table->foreign('beneficiary_id') + ->references('acc_no')->on('setting_beneficiaries') + ->onDelete('cascade'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('setting_active_banks'); + } +} diff --git a/database/migrations/2018_07_08_033026_change_foreignkey_type_in_activebank_table.php b/database/migrations/2018_07_08_033026_change_foreignkey_type_in_activebank_table.php new file mode 100644 index 00000000..ad518a6c --- /dev/null +++ b/database/migrations/2018_07_08_033026_change_foreignkey_type_in_activebank_table.php @@ -0,0 +1,41 @@ +dropForeign('setting_active_banks_x1_bank_id_foreign'); + $table->foreign('x1_bank_id') + ->references('acc_no')->on('setting_malaysia_banks'); + + $table->dropForeign('setting_active_banks_x2_bank_id_foreign'); + $table->foreign('x2_bank_id') + ->references('acc_no')->on('setting_malaysia_banks'); + + $table->dropForeign('setting_active_banks_beneficiary_id_foreign'); + $table->foreign('beneficiary_id') + ->references('acc_no')->on('setting_beneficiaries'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_07_10_173148_add_not_nullable_setting_malaysia_bank_table.php b/database/migrations/2018_07_10_173148_add_not_nullable_setting_malaysia_bank_table.php new file mode 100644 index 00000000..1deef39e --- /dev/null +++ b/database/migrations/2018_07_10_173148_add_not_nullable_setting_malaysia_bank_table.php @@ -0,0 +1,36 @@ +string('company_name')->nullable(false)->change(); + $table->string('bank_name')->nullable(false)->change(); + $table->string('acc_no')->nullable()->change(); // reference key at select active bank + $table->string('bank_address')->nullable(false)->change(); + $table->string('swift')->nullable(false)->change(); + $table->string('cnap')->nullable(false)->change(); + $table->string('bank_branch')->nullable(false)->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_07_18_174712_update_autoincrement_start_from_2000_in_booking_table.php b/database/migrations/2018_07_18_174712_update_autoincrement_start_from_2000_in_booking_table.php new file mode 100644 index 00000000..1d310042 --- /dev/null +++ b/database/migrations/2018_07_18_174712_update_autoincrement_start_from_2000_in_booking_table.php @@ -0,0 +1,28 @@ +increments('id'); + $table->double('billing_charge_rate'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('setting_billing_charges'); + } +} diff --git a/database/migrations/2018_07_20_175339_add_orderno_n_paymentfor_field_to_bookings_table.php b/database/migrations/2018_07_20_175339_add_orderno_n_paymentfor_field_to_bookings_table.php new file mode 100644 index 00000000..b9aed4d2 --- /dev/null +++ b/database/migrations/2018_07_20_175339_add_orderno_n_paymentfor_field_to_bookings_table.php @@ -0,0 +1,33 @@ +string('order_no')->nullable(); + $table->string('payment_for')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('bookings', function (Blueprint $table) { + // + }); + } +} diff --git a/database/migrations/2018_07_20_183325_create_setting_tax_rate_table.php b/database/migrations/2018_07_20_183325_create_setting_tax_rate_table.php new file mode 100644 index 00000000..0743eb7b --- /dev/null +++ b/database/migrations/2018_07_20_183325_create_setting_tax_rate_table.php @@ -0,0 +1,32 @@ +increments('id'); + $table->double('tax_rate'); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('setting_tax_rates'); + } +} diff --git a/database/migrations/2018_07_21_102920_create_notification_table.php b/database/migrations/2018_07_21_102920_create_notification_table.php new file mode 100644 index 00000000..7e3be228 --- /dev/null +++ b/database/migrations/2018_07_21_102920_create_notification_table.php @@ -0,0 +1,39 @@ +increments('id'); + $table->string('detail'); + $table->string('link'); + $table->unsignedInteger('user_id'); + $table->boolean('is_read')->default(0); + $table->timestamps(); + + $table->foreign('user_id') + ->references('id')->on('users') + ->onDelete('cascade'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('notifications'); + } +} diff --git a/database/migrations/2018_07_26_094305_add_fields_into_supplier_bookings_table.php b/database/migrations/2018_07_26_094305_add_fields_into_supplier_bookings_table.php new file mode 100644 index 00000000..c7320caa --- /dev/null +++ b/database/migrations/2018_07_26_094305_add_fields_into_supplier_bookings_table.php @@ -0,0 +1,32 @@ +string('amount_in_myr')->nullable(); + $table->string('tax_rate')->nullable(); + $table->string('amount_after_tax')->nullable(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_07_30_162106_change_datatype_in_booking_table.php b/database/migrations/2018_07_30_162106_change_datatype_in_booking_table.php new file mode 100644 index 00000000..fa2cb486 --- /dev/null +++ b/database/migrations/2018_07_30_162106_change_datatype_in_booking_table.php @@ -0,0 +1,33 @@ +string('account_num')->nullable()->change(); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('bookings', function (Blueprint $table) { + // + }); + } +} diff --git a/database/migrations/2018_08_02_141753_make_nullable_in_china_bank_slips_table.php b/database/migrations/2018_08_02_141753_make_nullable_in_china_bank_slips_table.php new file mode 100644 index 00000000..3a73ae18 --- /dev/null +++ b/database/migrations/2018_08_02_141753_make_nullable_in_china_bank_slips_table.php @@ -0,0 +1,42 @@ +string('company_name')->nullable()->change(); + $table->string('bank_name')->nullable()->change(); + $table->string('acc_no')->nullable()->change(); + $table->string('bank_address')->nullable()->change(); + $table->string('swift')->nullable()->change(); + $table->string('cnap')->nullable()->change(); + $table->string('order_id')->nullable()->change(); + $table->decimal('transfer_amount_needed')->nullable()->change(); + $table->decimal('actual_transfer_amount')->nullable()->change(); + $table->string('date')->nullable()->change(); + $table->string('details')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('china_bank_slips', function (Blueprint $table) { + // + }); + } +} diff --git a/database/migrations/2018_08_08_103115_make_nullable_in_bookings_table.php b/database/migrations/2018_08_08_103115_make_nullable_in_bookings_table.php new file mode 100644 index 00000000..d8524e66 --- /dev/null +++ b/database/migrations/2018_08_08_103115_make_nullable_in_bookings_table.php @@ -0,0 +1,37 @@ +string('company_name')->nullable()->change(); + $table->string('company_address')->nullable()->change(); + $table->string('bank_address')->nullable()->change(); + $table->string('swift_code')->nullable()->change(); + $table->string('cnap')->nullable()->change(); + $table->string('term')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('bookings', function (Blueprint $table) { + // + }); + } +} diff --git a/database/migrations/2018_08_08_104726_make_nullable_in_supplier_bookings_table.php b/database/migrations/2018_08_08_104726_make_nullable_in_supplier_bookings_table.php new file mode 100644 index 00000000..6c91e5f7 --- /dev/null +++ b/database/migrations/2018_08_08_104726_make_nullable_in_supplier_bookings_table.php @@ -0,0 +1,33 @@ +decimal('transfer_amount')->nullable()->change(); + $table->decimal('rmbBankAmount')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('supplier_bookings', function (Blueprint $table) { + // + }); + } +} diff --git a/database/migrations/2018_08_13_121253_drop_eta_in_china_bank_slips_table.php b/database/migrations/2018_08_13_121253_drop_eta_in_china_bank_slips_table.php new file mode 100644 index 00000000..61814d4e --- /dev/null +++ b/database/migrations/2018_08_13_121253_drop_eta_in_china_bank_slips_table.php @@ -0,0 +1,29 @@ +dropColumn('estimated_arrival_time'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + } +} diff --git a/database/migrations/2018_08_13_161906_remove_billing_amount_in_supplier_bookings.php b/database/migrations/2018_08_13_161906_remove_billing_amount_in_supplier_bookings.php new file mode 100644 index 00000000..55f0b542 --- /dev/null +++ b/database/migrations/2018_08_13_161906_remove_billing_amount_in_supplier_bookings.php @@ -0,0 +1,30 @@ +dropColumn('billing_amount'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + // + } +} diff --git a/database/migrations/2018_08_13_162910_dropcolumn_bank_branch_in_china_bank_slips_table.php b/database/migrations/2018_08_13_162910_dropcolumn_bank_branch_in_china_bank_slips_table.php new file mode 100644 index 00000000..c93b456d --- /dev/null +++ b/database/migrations/2018_08_13_162910_dropcolumn_bank_branch_in_china_bank_slips_table.php @@ -0,0 +1,32 @@ +dropColumn('bank_branch'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('china_bank_slips', function (Blueprint $table) { + // + }); + } +} diff --git a/database/migrations/2018_08_15_154652_remove_foreight_from_setting_active_banks_table.php b/database/migrations/2018_08_15_154652_remove_foreight_from_setting_active_banks_table.php new file mode 100644 index 00000000..d6ffe132 --- /dev/null +++ b/database/migrations/2018_08_15_154652_remove_foreight_from_setting_active_banks_table.php @@ -0,0 +1,32 @@ +dropForeign('setting_active_banks_beneficiary_id_foreign'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('setting_active_banks', function (Blueprint $table) { + // + }); + } +} diff --git a/database/migrations/2018_08_16_101635_drop_notifications_table.php b/database/migrations/2018_08_16_101635_drop_notifications_table.php new file mode 100644 index 00000000..d0b458c2 --- /dev/null +++ b/database/migrations/2018_08_16_101635_drop_notifications_table.php @@ -0,0 +1,28 @@ +uuid('id')->primary(); + $table->string('type'); + $table->morphs('notifiable'); + $table->text('data'); + $table->timestamp('read_at')->nullable(); + $table->timestamps(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('notifications'); + } +} diff --git a/database/migrations/2018_08_20_172746_make_nullable_in_setting_beneficiaries_table.php b/database/migrations/2018_08_20_172746_make_nullable_in_setting_beneficiaries_table.php new file mode 100644 index 00000000..3f842af4 --- /dev/null +++ b/database/migrations/2018_08_20_172746_make_nullable_in_setting_beneficiaries_table.php @@ -0,0 +1,35 @@ +string('bank_address')->nullable()->change(); + $table->string('swift')->nullable()->change(); + $table->string('cnap')->nullable()->change(); + $table->string('bank_branch')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('setting_beneficiaries', function (Blueprint $table) { + // + }); + } +} diff --git a/database/migrations/2018_08_20_172851_make_nullable_in_setting_malaysia_banks_table.php b/database/migrations/2018_08_20_172851_make_nullable_in_setting_malaysia_banks_table.php new file mode 100644 index 00000000..a96df1b4 --- /dev/null +++ b/database/migrations/2018_08_20_172851_make_nullable_in_setting_malaysia_banks_table.php @@ -0,0 +1,35 @@ +string('bank_address')->nullable()->change(); + $table->string('swift')->nullable()->change(); + $table->string('cnap')->nullable()->change(); + $table->string('bank_branch')->nullable()->change(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('setting_malaysia_banks', function (Blueprint $table) { + // + }); + } +} diff --git a/database/seeds/BookTableSeeder.php b/database/seeds/BookTableSeeder.php new file mode 100644 index 00000000..e27ff224 --- /dev/null +++ b/database/seeds/BookTableSeeder.php @@ -0,0 +1,45 @@ +first(); + $rate = Rate::all()->last(); + + DB::table('bookings')->insert([ + 'account_name' => 'EXCHANGE SDN BHD', + 'account_num' => '99898239298123', + 'bank_name' => 'maybank', + 'bank_branch' => 'rembau', + 'company_name' => 'ICEF', + 'company_address' => 'selangor', + 'bank_address' => 'cyber', + 'swift_code' => 'qwe123', + 'cnap' => '123asd', + 'term' => 'x1_cash', + 'amount' => 200, + 'rmb_book_amount' => 200, + 'bia' => 189, + 'rate' => 1.2, + 'rate_id' => $rate->id, + 'user_id' => $user->id, + 'status' => 2, + 'admin_status' => 1, + 'order_no' => '001', + 'payment_for' => 'FULL PAYMENT', + 'created_at' => Carbon::now()->format('Y-m-d H:i:s'), + 'updated_at' => Carbon::now()->format('Y-m-d H:i:s'), + ]); + } +} diff --git a/database/seeds/DatabaseSeeder.php b/database/seeds/DatabaseSeeder.php new file mode 100644 index 00000000..ebc04e05 --- /dev/null +++ b/database/seeds/DatabaseSeeder.php @@ -0,0 +1,33 @@ +call(UsersTableSeeder::class); + $this->call(RolesAndPermissionsSeeder::class); + $this->call(UserRoleSeeder::class); + $this->call(RateTableSeeder::class); + $this->call(BookTableSeeder::class); + $this->call(SettingCreditSeeder::class); + $this->call(SuppliersTableSeeder::class); + $this->call(MarkingSeeder::class); + DB::statement('SET FOREIGN_KEY_CHECKS=0;'); + $this->call(SettingMalaysiaBankSeeder::class); + $this->call(SettingBeneficiarySeeder::class); + $this->call(SettingActiveBankSeeder::class); + $this->call(SettingTaxRateSeeder::class); + $this->call(SettingBillingChargeSeeder::class); + DB::statement('SET FOREIGN_KEY_CHECKS=1;'); + } +} diff --git a/database/seeds/MarkingSeeder.php b/database/seeds/MarkingSeeder.php new file mode 100644 index 00000000..6686060a --- /dev/null +++ b/database/seeds/MarkingSeeder.php @@ -0,0 +1,20 @@ +truncate(); + DB::table('markings')->insert([ + 'marking' => 'hehe', + 'email' => 'hehe@gmail.com' + ]); + } +} diff --git a/database/seeds/RateTableSeeder.php b/database/seeds/RateTableSeeder.php new file mode 100644 index 00000000..5a3bd8e0 --- /dev/null +++ b/database/seeds/RateTableSeeder.php @@ -0,0 +1,37 @@ +insert([ + 'x1_cash' => 1.2, + 'x1_cheque' => 1.2, + 'x1_ba' => 1.2, + 'x2_cash' => 1.2, + 'x2_cheque' => 1.2, + 'x2_ba' => 1.2, + 'created_at' => Carbon::now()->format('Y-m-d H:i:s'), + 'updated_at' => Carbon::now()->format('Y-m-d H:i:s'), + ]); + + DB::table('rates')->insert([ + 'x1_cash' => 1.3, + 'x1_cheque' => 1.3, + 'x1_ba' => 1.3, + 'x2_cash' => 1.3, + 'x2_cheque' => 1.3, + 'x2_ba' => 1.3, + 'created_at' => Carbon::now()->format('Y-m-d H:i:s'), + 'updated_at' => Carbon::now()->format('Y-m-d H:i:s'), + ]); + } +} diff --git a/database/seeds/RolesAndPermissionsSeeder.php b/database/seeds/RolesAndPermissionsSeeder.php new file mode 100644 index 00000000..3274bd14 --- /dev/null +++ b/database/seeds/RolesAndPermissionsSeeder.php @@ -0,0 +1,189 @@ + php artisan db:seed --class=RolesAndPermissionsSeeder +| +| https://github.com/thomasfw/RolesAndPermissionsSeeder +| +|-------------------------------------------------------------------------- +| Make sure you update the namespaces for your User & Entrust models +|-------------------------------------------------------------------------- +*/ +use App\User as User; +use App\Role as Role; +use App\Permission as Permission; +use Illuminate\Database\Seeder; +use Illuminate\Database\Eloquent\Model; +class RolesAndPermissionsSeeder extends Seeder { + protected $roles = [ + + 'admin' => [ + ], + + 'member' => [ + ], + + + + ]; + + + protected $permissions = [ + + // Add your Permissions here + + ]; + + + /** + * Roles + * + * @return array() + */ + public function roles() + { + return $this->roles; + } + + /** + * Permissions + * + * @param $name + * @return array() + */ + public function permissions($name = '') + { + $single = (array_key_exists($name,$this->permissions) ? array($name =>$this->permissions[$name]) : false ); + return ($name ? $single : $this->permissions); + } + + + /** + * Run the Seeder + * + * @return void + */ + public function run() + { + DB::table(Config::get('entrust.permissions_table'))->delete(); + + foreach ($this->roles() as $key => $val) { + $this->command->info(" "); + $this->command->info('Creating/updating the \''.$key.'\' role'); + $this->command->info('-----------------------------------------'); + $val['name'] = $key; + $this->reset($val); + } + $this->cleanup(); + } + + + /** + * Reset Role, Permissions & Users + * + * @param $role + * @return void + */ + public function reset($role) + { + $commandBullet = ' -> '; + + // The Old Role + $originalRole = Role::where('name',$role['name'])->first(); + if($originalRole) Role::where('id',$originalRole->id)->update(['name' => $role['name'].'__remove']); + + // The New Role + $newRole = new Role(); + $newRole->name = $role['name']; + if(isset($role['display_name'])) $newRole->display_name = $role['display_name']; // optional + if(isset($role['description'])) $newRole->description = $role['description']; // optional + $newRole->save(); + $this->command->info($commandBullet."Created $role[name] role"); + + // Set the Permissions (if they exist) + $pcount = 0; + if(!empty($role['permissions'])) + { + foreach ($role['permissions'] as $permission_name) { + + $permission = $this->permissions($permission_name); + if($permission === false || (!$permission_name)) { + $this->command->error($commandBullet."Failed to attach permission '$permission_name'. It does not exist"); + continue; + } + + $newPermission = \Permission::where('name',$permission_name)->first(); + if (!$newPermission) { + $newPermission = new Permission(); + $newPermission->name = key($permission); + if(isset($permission['display_name'])) $newPermission->display_name = $permission['display_name']; // optional + if(isset($permission['description'])) $newPermission->description = $permission['description']; // optional + $newPermission->save(); + } + $newRole->attachPermission($newPermission); + $pcount++; + } + } + $this->command->info($commandBullet."Attached $pcount permissions to $role[name] role"); + + // Update old records : Temporary disabled + // if ($originalRole) + // { + // $userCount = 0; + // $RoleUsers = DB::table(Config::get('entrust.role_user_table'))->where('role_id',$originalRole->id)->get(); + // foreach ($RoleUsers as $user) { + // $u = User::where('id',$user->user_id)->first(); + // $u->attachRole($newRole); + // $userCount++; + // } + // $this->command->info($commandBullet."Updated role attachment for $userCount users"); + + // Role::where('id',$originalRole->id)->delete(); // will also remove old role_user records + // $this->command->info($commandBullet."Removed the original $role[name] role"); + // } + } + + + /** + * Cleanup() + * Remove any roles & permissions that have been removed + * @return void + */ + public function cleanup() + { + $commandBullet = ' -> '; + $this->command->info(" "); + $this->command->info('Cleaning up roles & permissions:'); + $this->command->info('--------------------------------'); + + $storedRoles = Role::all(); + if(!empty($storedRoles)) { + $definedRoles = $this->roles(); + foreach ($storedRoles as $role) { + if ( !array_key_exists($role->name,$definedRoles) ) { + Role::where('name',$role->name)->delete(); + $this->command->info($commandBullet.'The \''.$role->name.'\' role was removed'); + } + } + } + $storedPerms = DB::table(Config::get('entrust.permissions_table'))->get(); + if(!empty($storedPerms)) { + $definedPerms = $this->permissions(); + foreach ($storedPerms as $perm) { + if ( !array_key_exists($perm->name,$definedPerms) ) { + DB::table(Config::get('entrust.permissions_table'))->where('name',$perm->name)->delete(); + $this->command->info($commandBullet.'The \''.$perm->name.'\' permission was removed'); + } + } + } + $this->command->info($commandBullet.'Done'); + $this->command->info(" "); + } + +} \ No newline at end of file diff --git a/database/seeds/SettingActiveBankSeeder.php b/database/seeds/SettingActiveBankSeeder.php new file mode 100644 index 00000000..2dc4831e --- /dev/null +++ b/database/seeds/SettingActiveBankSeeder.php @@ -0,0 +1,27 @@ +truncate(); + DB::table('setting_active_banks')->insert([ + 'x1_bank_id' => $bankx1->id, + 'x2_bank_id' => $bankx2->id, + 'beneficiary_id' => $beneficiary->id + ]); + } +} diff --git a/database/seeds/SettingBeneficiarySeeder.php b/database/seeds/SettingBeneficiarySeeder.php new file mode 100644 index 00000000..a78a899d --- /dev/null +++ b/database/seeds/SettingBeneficiarySeeder.php @@ -0,0 +1,36 @@ +truncate(); + DB::table('setting_beneficiaries')->insert([ + 'company_name' => 'CIEF2', + 'bank_name' => 'Mayban222k', + 'acc_no' => '5555555', + 'bank_address' => 'Jalan putrajaya', + 'swift' => 'ABC122223', + 'cnap' => 'CED232224', + 'bank_branch' => 'Putra' + ]); + DB::table('setting_beneficiaries')->insert([ + 'company_name' => 'CIEF1', + 'bank_name' => 'CIMB', + 'acc_no' => '123456789', + 'bank_address' => 'Jalan cyberjaya', + 'swift' => 'AB3333', + 'cnap' => 'CADSeed', + 'bank_branch' => 'cyberjaa + ' + ]); + } +} diff --git a/database/seeds/SettingBillingChargeSeeder.php b/database/seeds/SettingBillingChargeSeeder.php new file mode 100644 index 00000000..5b53433f --- /dev/null +++ b/database/seeds/SettingBillingChargeSeeder.php @@ -0,0 +1,18 @@ +insert([ + 'billing_charge_rate' => '1.2', + ]); + } +} diff --git a/database/seeds/SettingCreditSeeder.php b/database/seeds/SettingCreditSeeder.php new file mode 100644 index 00000000..8b8c8f76 --- /dev/null +++ b/database/seeds/SettingCreditSeeder.php @@ -0,0 +1,21 @@ +insert([ + 'rmb_credit_limit' => '100000', + 'usd_credit_limit' => '100000', + 'time_limit' => '60000' + ]); + } +} diff --git a/database/seeds/SettingMalaysiaBankSeeder.php b/database/seeds/SettingMalaysiaBankSeeder.php new file mode 100644 index 00000000..7fed97fe --- /dev/null +++ b/database/seeds/SettingMalaysiaBankSeeder.php @@ -0,0 +1,35 @@ +truncate(); + DB::table('setting_malaysia_banks')->truncate(); + DB::table('setting_malaysia_banks')->insert([ + 'company_name' => 'CIEF', + 'bank_name' => 'MAYBANK', + 'acc_no' => '75930284783', + 'bank_address' => 'Jalan putrajaya', + 'swift' => 'ABC123', + 'cnap' => 'CED234', + 'bank_branch' => 'Putra' + ]); + DB::table('setting_malaysia_banks')->insert([ + 'company_name' => 'CIEF', + 'bank_name' => 'MAYBANK', + 'acc_no' => '85839298348', + 'bank_address' => 'Jalan putrajaya', + 'swift' => 'ABC123', + 'cnap' => 'CED234', + 'bank_branch' => 'Putra' + ]); + } +} diff --git a/database/seeds/SettingTaxRateSeeder.php b/database/seeds/SettingTaxRateSeeder.php new file mode 100644 index 00000000..f2b4aa01 --- /dev/null +++ b/database/seeds/SettingTaxRateSeeder.php @@ -0,0 +1,18 @@ +insert([ + 'tax_rate' => '1.0', + ]); + } +} diff --git a/database/seeds/SuppliersTableSeeder.php b/database/seeds/SuppliersTableSeeder.php new file mode 100644 index 00000000..cbfa477e --- /dev/null +++ b/database/seeds/SuppliersTableSeeder.php @@ -0,0 +1,21 @@ +insert([ + 'company_name' => 'WongKok PLT', + 'gst_no' => 'GTS12232123', + 'bank_name' => 'HSBC', + 'acc_no' => '86774723848593' + ]); + } +} diff --git a/database/seeds/UserRoleSeeder.php b/database/seeds/UserRoleSeeder.php new file mode 100644 index 00000000..b55e7019 --- /dev/null +++ b/database/seeds/UserRoleSeeder.php @@ -0,0 +1,25 @@ +first(); + $admin = User::where("email", "=", "admin@example.com")->first(); + + $role_user = Role::where('name','=','member')->first(); + $role_admin = Role::where('name','=','admin')->first(); + + $user->attachRole($role_user); + $admin->attachRole($role_admin); + } +} diff --git a/database/seeds/UsersTableSeeder.php b/database/seeds/UsersTableSeeder.php new file mode 100644 index 00000000..51ea3589 --- /dev/null +++ b/database/seeds/UsersTableSeeder.php @@ -0,0 +1,30 @@ +delete(); + + $users = array( + ['name' => 'User', 'marking'=> 'X9', 'email' => 'user@example.com', 'password' => Hash::make('secret')], + ['name' => 'Admin', 'marking'=> 'X10', 'email' => 'admin@example.com', 'password' => Hash::make('secret')], + ); + + foreach ($users as $user) + { + $newUser = User::create($user); + } + + + } +} diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..48d64a54 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,43 @@ +version: '3' +services: + mysql: + build: + context: ./docker/mysql + args: + - MYSQL_VERSION=5.6 + environment: + - MYSQL_DATABASE=default + - MYSQL_USER=default + - MYSQL_PASSWORD=secret + - MYSQL_ROOT_PASSWORD=root + - TZ=UTC + volumes: + - ./data/mysql:/var/lib/mysql + - ./docker/mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d + ports: + - "3306:3306" + + app: + build: . + ports: + - "8000:8000" + volumes: + - .:/app + env_file: .env + working_dir: /app + depends_on: + - mysql + links: + - mysql + + + phpmyadmin: + depends_on: + - mysql + image: phpmyadmin/phpmyadmin + restart: always + ports: + - 8090:80 + environment: + PMA_HOST: mysql + MYSQL_ROOT_PASSWORD: root \ No newline at end of file diff --git a/docker-prod.yml b/docker-prod.yml new file mode 100644 index 00000000..7295a0f6 --- /dev/null +++ b/docker-prod.yml @@ -0,0 +1,85 @@ +version: '2' + +networks: + frontend: + driver: bridge + backend: + driver: bridge + +services: + # api + app: + build: . + ports: + - "8000:8000" + volumes: + - .:/app + env_file: .env + working_dir: /app + depends_on: + - mysql + links: + - mysql + networks: + - frontend + - backend + + + # caddy Server + caddy: + build: ./caddy + volumes: + - .:/var/www + - ./caddy/Caddyfile:/etc/Caddyfile + - ./logs/caddy:/var/log/caddy + - ./data:/root/.caddy + ports: + - "80:80" + - "443:443" + networks: + - frontend + - backend + depends_on: + - app + + + # database + mysql: + build: + context: ./docker/mysql + args: + - MYSQL_VERSION=5.6 + environment: + - MYSQL_DATABASE=default + - MYSQL_USER=default + - MYSQL_PASSWORD=secret + - MYSQL_ROOT_PASSWORD=root + - TZ=UTC + volumes: + - ./data/mysql:/var/lib/mysql + - ./docker/mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d + networks: + - frontend + - backend + ports: + - "3306:3306" + # redis + cache: + image: redis:3.0-alpine + + phpmyadmin: + depends_on: + - mysql + image: phpmyadmin/phpmyadmin + restart: always + ports: + - 8090:80 + environment: + PMA_HOST: mysql + MYSQL_ROOT_PASSWORD: root + networks: + - frontend + - backend + +volumes: + dbdata: \ No newline at end of file diff --git a/docker/mysql/Dockerfile b/docker/mysql/Dockerfile new file mode 100644 index 00000000..f8cba3da --- /dev/null +++ b/docker/mysql/Dockerfile @@ -0,0 +1,18 @@ +ARG MYSQL_VERSION=latest +FROM mysql:${MYSQL_VERSION} + +LABEL maintainer="Mahmoud Zalt " + +##################################### +# Set Timezone +##################################### + +ARG TZ=UTC +ENV TZ ${TZ} +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN chown -R mysql:root /var/lib/mysql/ + +COPY my.cnf /etc/mysql/conf.d/my.cnf + +EXPOSE 3306 diff --git a/docker/mysql/docker-entrypoint-initdb.d/.gitignore b/docker/mysql/docker-entrypoint-initdb.d/.gitignore new file mode 100644 index 00000000..d1b811b7 --- /dev/null +++ b/docker/mysql/docker-entrypoint-initdb.d/.gitignore @@ -0,0 +1 @@ +*.sql diff --git a/docker/mysql/docker-entrypoint-initdb.d/createdb.sql.example b/docker/mysql/docker-entrypoint-initdb.d/createdb.sql.example new file mode 100644 index 00000000..6420afb8 --- /dev/null +++ b/docker/mysql/docker-entrypoint-initdb.d/createdb.sql.example @@ -0,0 +1,28 @@ +# +# Copy createdb.sql.example to createdb.sql +# then uncomment then set database name and username to create you need databases +# +# example: .env MYSQL_USER=appuser and need db name is myshop_db +# +# CREATE DATABASE IF NOT EXISTS `myshop_db` ; +# GRANT ALL ON `myshop_db`.* TO 'appuser'@'%' ; +# +# +# this sql script will auto run when the mysql container starts and the $DATA_PATH_HOST/mysql not found. +# +# if your $DATA_PATH_HOST/mysql exists and you do not want to delete it, you can run by manual execution: +# +# docker-compose exec mysql bash +# mysql -u root -p < /docker-entrypoint-initdb.d/createdb.sql +# + +#CREATE DATABASE IF NOT EXISTS `dev_db_1` COLLATE 'utf8_general_ci' ; +#GRANT ALL ON `dev_db_1`.* TO 'default'@'%' ; + +#CREATE DATABASE IF NOT EXISTS `dev_db_2` COLLATE 'utf8_general_ci' ; +#GRANT ALL ON `dev_db_2`.* TO 'default'@'%' ; + +#CREATE DATABASE IF NOT EXISTS `dev_db_3` COLLATE 'utf8_general_ci' ; +#GRANT ALL ON `dev_db_3`.* TO 'default'@'%' ; + +FLUSH PRIVILEGES ; diff --git a/docker/mysql/my.cnf b/docker/mysql/my.cnf new file mode 100644 index 00000000..bee678ab --- /dev/null +++ b/docker/mysql/my.cnf @@ -0,0 +1,10 @@ +# The MySQL Client configuration file. +# +# For explanations see +# http://dev.mysql.com/doc/mysql/en/server-system-variables.html + +[mysql] + +[mysqld] +sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" +character-set-server=utf8 diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..545cf6af --- /dev/null +++ b/package-lock.json @@ -0,0 +1,18351 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "@babel/code-frame": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.44.tgz", + "integrity": "sha512-cuAuTTIQ9RqcFRJ/Y8PvTh+paepNcaGxwQwjIDRWPXmzzyAeCO4KqS9ikMvq0MCbRk6GlYKwfzStrcP3/jSL8g==", + "dev": true, + "requires": { + "@babel/highlight": "7.0.0-beta.44" + } + }, + "@babel/generator": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.44.tgz", + "integrity": "sha512-5xVb7hlhjGcdkKpMXgicAVgx8syK5VJz193k0i/0sLP6DzE6lRrU1K3B/rFefgdo9LPGMAOOOAWW4jycj07ShQ==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44", + "jsesc": "^2.5.1", + "lodash": "^4.2.0", + "source-map": "^0.5.0", + "trim-right": "^1.0.1" + }, + "dependencies": { + "jsesc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz", + "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@babel/helper-function-name": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.44.tgz", + "integrity": "sha512-MHRG2qZMKMFaBavX0LWpfZ2e+hLloT++N7rfM3DYOMUOGCD8cVjqZpwiL8a0bOX3IYcQev1ruciT0gdFFRTxzg==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "7.0.0-beta.44", + "@babel/template": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.44.tgz", + "integrity": "sha512-w0YjWVwrM2HwP6/H3sEgrSQdkCaxppqFeJtAnB23pRiJB5E/O9Yp7JAAeWBl+gGEgmBFinnTyOv2RN7rcSmMiw==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.44.tgz", + "integrity": "sha512-aQ7QowtkgKKzPGf0j6u77kBMdUFVBKNHw2p/3HX/POt5/oz8ec5cs0GwlgM8Hz7ui5EwJnzyfRmkNF1Nx1N7aA==", + "dev": true, + "requires": { + "@babel/types": "7.0.0-beta.44" + } + }, + "@babel/highlight": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.44.tgz", + "integrity": "sha512-Il19yJvy7vMFm8AVAh6OZzaFoAd0hbkeMZiX3P5HGD+z7dyI7RzndHB0dg6Urh/VAFfHtpOIzDUSxmY6coyZWQ==", + "dev": true, + "requires": { + "chalk": "^2.0.0", + "esutils": "^2.0.2", + "js-tokens": "^3.0.0" + } + }, + "@babel/template": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.44.tgz", + "integrity": "sha512-w750Sloq0UNifLx1rUqwfbnC6uSUk0mfwwgGRfdLiaUzfAOiH0tHJE6ILQIUi3KYkjiCDTskoIsnfqZvWLBDng==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "lodash": "^4.2.0" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + } + } + }, + "@babel/traverse": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.44.tgz", + "integrity": "sha512-UHuDz8ukQkJCDASKHf+oDt3FVUzFd+QYfuBIsiNu/4+/ix6pP/C+uQZJ6K1oEfbCMv/IKWbgDEh7fcsnIE5AtA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/generator": "7.0.0-beta.44", + "@babel/helper-function-name": "7.0.0-beta.44", + "@babel/helper-split-export-declaration": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "debug": "^3.1.0", + "globals": "^11.1.0", + "invariant": "^2.2.0", + "lodash": "^4.2.0" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "globals": { + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", + "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==", + "dev": true + } + } + }, + "@babel/types": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.44.tgz", + "integrity": "sha512-5eTV4WRmqbaFM3v9gHAIljEQJU4Ssc6fxL61JN+Oe2ga/BwyjzjamwkCVVAQjHGuAX8i0BWo42dshL8eO5KfLQ==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.2.0", + "to-fast-properties": "^2.0.0" + }, + "dependencies": { + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + } + } + }, + "@dmaksimovic/vue-countdown": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@dmaksimovic/vue-countdown/-/vue-countdown-1.0.0.tgz", + "integrity": "sha1-Gd/QxyKTh0nKh1e19ZhpsRqDmi0=", + "requires": { + "easytimer": "^1.1.1" + } + }, + "@fortawesome/fontawesome": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome/-/fontawesome-1.1.8.tgz", + "integrity": "sha512-c0/MtkPVT0fmiFcCyYoPjkG9PkMOvfrZw2+0BaJ+Rh6UEcK1AR/LaRgrHHjUkbAbs9LXxQJhFS8CJ4uSnK2+JA==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.1.7" + } + }, + "@fortawesome/fontawesome-common-types": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.1.7.tgz", + "integrity": "sha512-ego8jRVSHfq/iq4KRZJKQeUAdi3ZjGNrqw4oPN3fNdvTBnLCSntwVCnc37bsAJP9UB8MhrTfPnZYxkv2vpS4pg==" + }, + "@fortawesome/fontawesome-free-brands": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free-brands/-/fontawesome-free-brands-5.0.13.tgz", + "integrity": "sha512-xC/sEPpfcJPvUbud2GyscLCLQlE2DVBYaTHVwuyVGliYBdYejSEYMINU8FN5A0xhO68yCbpCfMlBv6Gqby+jww==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.1.7" + } + }, + "@fortawesome/fontawesome-free-regular": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free-regular/-/fontawesome-free-regular-5.0.13.tgz", + "integrity": "sha512-36lz9Idww1L4QaaTcv7GZiOeIP9emJFDUsedvRovI10kmwyd6rN0PKkIjnq0FB4foLhX4Rou8vnbCCmjtqiLug==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.1.7" + } + }, + "@fortawesome/fontawesome-free-solid": { + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free-solid/-/fontawesome-free-solid-5.0.13.tgz", + "integrity": "sha512-b+krVnqkdDt52Yfev0x0ZZgtxBQsLw00Zfa3uaVWIDzpNZVtrEXuxldUSUaN/ihgGhSNi8VpvDAdNPVgCKOSxw==", + "requires": { + "@fortawesome/fontawesome-common-types": "^0.1.7" + } + }, + "@fortawesome/vue-fontawesome": { + "version": "0.0.22", + "resolved": "https://registry.npmjs.org/@fortawesome/vue-fontawesome/-/vue-fontawesome-0.0.22.tgz", + "integrity": "sha512-KKQ1hVTWkXRaSGVMNI/dZsznVJIZ8dqLA2J6X8nZAIg7F2Gs1zIzBC9qxOKm+gktFAJU2aCCR7BTCoZIdjvGNw==" + }, + "@intervolga/optimize-cssnano-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz", + "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==", + "dev": true, + "requires": { + "cssnano": "^4.0.0", + "cssnano-preset-default": "^4.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz", + "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0" + } + }, + "cssnano": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.0.tgz", + "integrity": "sha512-7x24b/ghbrQv2QRgqMR12H3ZZ38xYCKJSXfg21YCtnIE177/NyvMkeiuQdWauIgMjySaTZ+cd5PN2qvfbsGeSw==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.0", + "is-resolvable": "^1.0.0", + "postcss": "^6.0.0" + }, + "dependencies": { + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "postcss": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.2.tgz", + "integrity": "sha512-fmaUY5370keLUTx+CnwRxtGiuFTcNBLQBqr1oE3WZ/euIYmGAo0OAgOhVJ3ByDnVmOR3PK+0V9VebzfjRIUcqw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + } + } + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.stat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz", + "integrity": "sha512-yprFYuno9FtNsSHVlSWd+nRlmGoAbqbeCwOryP6sC/zoCjhpArcRMYp19EvpSUSizJAlsXEwJv+wcWS9XaXdMw==", + "dev": true + }, + "@vue/cli-overlay": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.0.1.tgz", + "integrity": "sha512-2ziQZ/mjFAf9IO+xdHRTjRzWCOiuojVAzp4TPqH34fTAsgf0qHTG9/wLVEKHVZ3Pcrl0nMIeYUseGKJEB9S9pw==", + "dev": true + }, + "@vue/cli-plugin-eslint": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.0.1.tgz", + "integrity": "sha512-I1N8iHKI1wlU1769mS8X7CbWJi8G3aecmTrIgSn0Mco00ANxyU63aWFY08+NTMwwt/C4dZqpfoSu9H/piqHLBQ==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^3.0.1", + "babel-eslint": "^8.2.5", + "eslint": "^4.19.1", + "eslint-loader": "^2.0.0", + "eslint-plugin-vue": "^4.5.0" + } + }, + "@vue/cli-service": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.0.1.tgz", + "integrity": "sha512-eRwjGHolm6FcLNibcepKL+CvsqkU3Nv/9wOzOzJT4u+kw620IoP9FXev58h6FD4dAEtatoCiKqHLVqFoCYUUBw==", + "dev": true, + "requires": { + "@intervolga/optimize-cssnano-plugin": "^1.0.5", + "@vue/cli-overlay": "^3.0.0", + "@vue/cli-shared-utils": "^3.0.1", + "@vue/preload-webpack-plugin": "^1.1.0", + "@vue/web-component-wrapper": "^1.2.0", + "acorn": "^5.7.1", + "address": "^1.0.3", + "autoprefixer": "^8.6.5", + "cache-loader": "^1.2.2", + "case-sensitive-paths-webpack-plugin": "^2.1.2", + "chalk": "^2.4.1", + "clipboardy": "^1.2.3", + "cliui": "^4.1.0", + "copy-webpack-plugin": "^4.5.2", + "css-loader": "^1.0.0", + "cssnano": "^4.0.0", + "debug": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "file-loader": "^1.1.11", + "friendly-errors-webpack-plugin": "^1.7.0", + "fs-extra": "^6.0.1", + "globby": "^8.0.1", + "hash-sum": "^1.0.2", + "html-webpack-plugin": "^3.2.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.0", + "lodash.mapvalues": "^4.6.0", + "lodash.transform": "^4.6.0", + "mini-css-extract-plugin": "^0.4.1", + "minimist": "^1.2.0", + "ora": "^2.1.0", + "portfinder": "^1.0.13", + "postcss-loader": "^2.1.6", + "read-pkg": "^4.0.1", + "semver": "^5.5.0", + "slash": "^2.0.0", + "source-map-url": "^0.4.0", + "ssri": "^6.0.0", + "string.prototype.padend": "^3.0.0", + "thread-loader": "^1.1.5", + "uglifyjs-webpack-plugin": "^1.2.7", + "url-loader": "^1.1.0", + "vue-loader": "^15.3.0", + "webpack": "^4.15.1", + "webpack-bundle-analyzer": "^2.13.1", + "webpack-chain": "^4.8.0", + "webpack-dev-server": "^3.1.4", + "webpack-merge": "^4.1.3", + "yorkie": "^2.0.0" + }, + "dependencies": { + "acorn-dynamic-import": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", + "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", + "dev": true, + "requires": { + "acorn": "^5.0.0" + } + }, + "ajv": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", + "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "autoprefixer": { + "version": "8.6.5", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.6.5.tgz", + "integrity": "sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig==", + "dev": true, + "requires": { + "browserslist": "^3.2.8", + "caniuse-lite": "^1.0.30000864", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^6.0.23", + "postcss-value-parser": "^3.2.3" + } + }, + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "cosmiconfig": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.0.6.tgz", + "integrity": "sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "css-loader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-1.0.0.tgz", + "integrity": "sha512-tMXlTYf3mIMt3b0dDCOQFJiVvxbocJ5Ho577WiGPYPZcqVEO218L2iU22pDXzkTZCLDE+9AmGSUkWxeh/nZReA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "postcss": "^6.0.23", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" + } + }, + "cssnano": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.0.tgz", + "integrity": "sha512-7x24b/ghbrQv2QRgqMR12H3ZZ38xYCKJSXfg21YCtnIE177/NyvMkeiuQdWauIgMjySaTZ+cd5PN2qvfbsGeSw==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.0", + "is-resolvable": "^1.0.0", + "postcss": "^6.0.0" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "eslint-scope": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.0.tgz", + "integrity": "sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "file-loader": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.11.tgz", + "integrity": "sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^0.4.5" + } + }, + "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, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fs-extra": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-6.0.1.tgz", + "integrity": "sha512-GnyIkKhhzXZUWFCaJzvyDLEEgDkPfb4/TPvJCJVuS8MWZgoSsErf++QpiAlDnKFcqhRlm+tIOcencCjyJE6ZCA==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "globby": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.1.tgz", + "integrity": "sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw==", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "fast-glob": "^2.0.2", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "dependencies": { + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + } + } + }, + "http-proxy-middleware": { + "version": "0.18.0", + "resolved": "http://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz", + "integrity": "sha512-Fs25KVMPAIIcgjMZkVHJoKg9VcXcC1C8yb9JUgeDvVXY0S/zgVIhMb+qVswDIgtJe2DfckMSY2d6TuTEutlk6Q==", + "dev": true, + "requires": { + "http-proxy": "^1.16.2", + "is-glob": "^4.0.0", + "lodash": "^4.17.5", + "micromatch": "^3.1.9" + } + }, + "import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "requires": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "internal-ip": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-3.0.1.tgz", + "integrity": "sha512-NXXgESC2nNVtU+pqmC9e6R8B1GpKxzsAQhffvh5AL79qKnodd+L7tnEQmTiUAVngqLalPbSqRA7XGIEL5nCd0Q==", + "dev": true, + "requires": { + "default-gateway": "^2.6.0", + "ipaddr.js": "^1.5.2" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "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, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", + "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" + } + }, + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "dev": true + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "os-locale": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", + "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", + "dev": true, + "requires": { + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "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, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + } + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "tapable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", + "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", + "dev": true + }, + "vue-loader": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-15.4.1.tgz", + "integrity": "sha512-+9EgqF7YHcZG0wosbXij9qSzz7Ep1QNOk4a3asTyf5XC9kDud2R4aNAwQP65bELyKwWjcGm8sv7ChYndodxijw==", + "dev": true, + "requires": { + "@vue/component-compiler-utils": "^2.0.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + } + }, + "webpack": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.17.2.tgz", + "integrity": "sha512-hCK8FPco2Paz9FVMlo3ZdVd7Jsr7qxoiEwhd7f4dMaWBLZtc7E+/9QNee4CYHlVSvpmspWBnhFpx4MiWSl3nNg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-module-context": "1.5.13", + "@webassemblyjs/wasm-edit": "1.5.13", + "@webassemblyjs/wasm-opt": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "acorn": "^5.6.2", + "acorn-dynamic-import": "^3.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "chrome-trace-event": "^1.0.0", + "enhanced-resolve": "^4.1.0", + "eslint-scope": "^4.0.0", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "micromatch": "^3.1.8", + "mkdirp": "~0.5.0", + "neo-async": "^2.5.0", + "node-libs-browser": "^2.0.0", + "schema-utils": "^0.4.4", + "tapable": "^1.0.0", + "uglifyjs-webpack-plugin": "^1.2.4", + "watchpack": "^1.5.0", + "webpack-sources": "^1.2.0" + } + }, + "webpack-dev-middleware": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.2.0.tgz", + "integrity": "sha512-YJLMF/96TpKXaEQwaLEo+Z4NDK8aV133ROF6xp9pe3gQoS7sxfpXh4Rv9eC+8vCvWfmDjRQaMSlRPbO+9G6jgA==", + "dev": true, + "requires": { + "loud-rejection": "^1.6.0", + "memory-fs": "~0.4.1", + "mime": "^2.3.1", + "path-is-absolute": "^1.0.0", + "range-parser": "^1.0.3", + "url-join": "^4.0.0", + "webpack-log": "^2.0.0" + } + }, + "webpack-dev-server": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.1.8.tgz", + "integrity": "sha512-c+tcJtDqnPdxCAzEEZKdIPmg3i5i7cAHe+B+0xFNK0BlCc2HF/unYccbU7xTgfGc5xxhCztCQzFmsqim+KhI+A==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "~0.18.0", + "import-local": "^2.0.0", + "internal-ip": "^3.0.1", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "schema-utils": "^1.0.0", + "selfsigned": "^1.9.1", + "serve-index": "^1.7.2", + "sockjs": "0.3.19", + "sockjs-client": "1.1.5", + "spdy": "^3.4.1", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", + "webpack-dev-middleware": "3.2.0", + "webpack-log": "^2.0.0", + "yargs": "12.0.2" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "@vue/cli-shared-utils": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.0.1.tgz", + "integrity": "sha512-bdFxerHn/Tz/yIsZH9d1QkegdJR2KzkVHcn1ejDM/QV1RM3OteFbDcTBEIaAOd3OcAtyikzkRrsr1o9iBsBqVg==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "execa": "^0.10.0", + "joi": "^13.0.0", + "launch-editor": "^2.2.1", + "node-ipc": "^9.1.1", + "opn": "^5.3.0", + "ora": "^2.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "semver": "^5.5.0", + "string.prototype.padstart": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } + } + }, + "@vue/component-compiler-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-2.2.0.tgz", + "integrity": "sha512-pS4zlcdD7BvedyB+IfiTfrbi6C977UMIfulSk8r6uL0BU46ZE2+fUj/zbSNSfVxeaj9ElmnSni5OMwF9np+b+w==", + "dev": true, + "requires": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^6.0.20", + "postcss-selector-parser": "^3.1.1", + "prettier": "1.13.7", + "source-map": "^0.5.6", + "vue-template-es2015-compiler": "^1.6.0" + }, + "dependencies": { + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "prettier": { + "version": "1.13.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.13.7.tgz", + "integrity": "sha512-KIU72UmYPGk4MujZGYMFwinB7lOf2LsDNGSOC8ufevsrPLISrZbNJlWstRi3m0AMuszbH+EFSQ/r6w56RSPK6w==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "@vue/eslint-config-standard": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@vue/eslint-config-standard/-/eslint-config-standard-3.0.1.tgz", + "integrity": "sha512-KhoXGwU77kupjK3sq33Pi5KFrqQXVyLjRNQ+snQlunCHWoTfkhSZ2hSIn9rFggq1Owp6qOPICUTEwvw9VfmDNw==", + "dev": true, + "requires": { + "eslint-config-standard": "^12.0.0-alpha.0", + "eslint-plugin-import": "^2.11.0", + "eslint-plugin-node": "^6.0.1", + "eslint-plugin-promise": "^3.7.0", + "eslint-plugin-standard": "^3.1.0" + } + }, + "@vue/preload-webpack-plugin": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.0.tgz", + "integrity": "sha512-rcn2KhSHESBFMPj5vc5X2pI9bcBNQQixvJXhD5gZ4rN2iym/uH2qfDSQfUS5+qwiz0a85TCkeUs6w6jxFDudbw==", + "dev": true + }, + "@vue/web-component-wrapper": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@vue/web-component-wrapper/-/web-component-wrapper-1.2.0.tgz", + "integrity": "sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw==", + "dev": true + }, + "@webassemblyjs/ast": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.5.13.tgz", + "integrity": "sha512-49nwvW/Hx9i+OYHg+mRhKZfAlqThr11Dqz8TsrvqGKMhdI2ijy3KBJOun2Z4770TPjrIJhR6KxChQIDaz8clDA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/wast-parser": "1.5.13", + "debug": "^3.1.0", + "mamacro": "^0.0.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz", + "integrity": "sha512-vrvvB18Kh4uyghSKb0NTv+2WZx871WL2NzwMj61jcq2bXkyhRC+8Q0oD7JGVf0+5i/fKQYQSBCNMMsDMRVAMqA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz", + "integrity": "sha512-dBh2CWYqjaDlvMmRP/kudxpdh30uXjIbpkLj9HQe+qtYlwvYjPRjdQXrq1cTAAOUSMTtzqbXIxEdEZmyKfcwsg==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz", + "integrity": "sha512-v7igWf1mHcpJNbn4m7e77XOAWXCDT76Xe7Is1VQFXc4K5jRcFrl9D0NrqM4XifQ0bXiuTSkTKMYqDxu5MhNljA==", + "dev": true, + "requires": { + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz", + "integrity": "sha512-yN6ScQQDFCiAXnVctdVO/J5NQRbwyTbQzsGzEgXsAnrxhjp0xihh+nNHQTMrq5UhOqTb5LykpJAvEv9AT0jnAQ==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.5.13" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz", + "integrity": "sha512-hSIKzbXjVMRvy3Jzhgu+vDd/aswJ+UMEnLRCkZDdknZO3Z9e6rp1DAs0tdLItjCFqkz9+0BeOPK/mk3eYvVzZg==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz", + "integrity": "sha512-zxJXULGPLB7r+k+wIlvGlXpT4CYppRz8fLUM/xobGHc9Z3T6qlmJD9ySJ2jknuktuuiR9AjnNpKYDECyaiX+QQ==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "mamacro": "^0.0.3" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz", + "integrity": "sha512-0n3SoNGLvbJIZPhtMFq0XmmnA/YmQBXaZKQZcW8maGKwLpVcgjNrxpFZHEOLKjXJYVN5Il8vSfG7nRX50Zn+aw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz", + "integrity": "sha512-IJ/goicOZ5TT1axZFSnlAtz4m8KEjYr12BNOANAwGFPKXM4byEDaMNXYowHMG0yKV9a397eU/NlibFaLwr1fbw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/ieee754": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz", + "integrity": "sha512-TseswvXEPpG5TCBKoLx9tT7+/GMACjC1ruo09j46ULRZWYm8XHpDWaosOjTnI7kr4SRJFzA6MWoUkAB+YCGKKg==", + "dev": true, + "requires": { + "ieee754": "^1.1.11" + } + }, + "@webassemblyjs/leb128": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.5.13.tgz", + "integrity": "sha512-0NRMxrL+GG3eISGZBmLBLAVjphbN8Si15s7jzThaw1UE9e5BY1oH49/+MA1xBzxpf1OW5sf9OrPDOclk9wj2yg==", + "dev": true, + "requires": { + "long": "4.0.0" + }, + "dependencies": { + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "dev": true + } + } + }, + "@webassemblyjs/utf8": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.5.13.tgz", + "integrity": "sha512-Ve1ilU2N48Ew0lVGB8FqY7V7hXjaC4+PeZM+vDYxEd+R2iQ0q+Wb3Rw8v0Ri0+rxhoz6gVGsnQNb4FjRiEH/Ng==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz", + "integrity": "sha512-X7ZNW4+Hga4f2NmqENnHke2V/mGYK/xnybJSIXImt1ulxbCOEs/A+ZK/Km2jgihjyVxp/0z0hwIcxC6PrkWtgw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/helper-wasm-section": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "@webassemblyjs/wasm-opt": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "@webassemblyjs/wast-printer": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz", + "integrity": "sha512-yfv94Se8R73zmr8GAYzezFHc3lDwE/lBXQddSiIZEKZFuqy7yWtm3KMwA1uGbv5G1WphimJxboXHR80IgX1hQA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/ieee754": "1.5.13", + "@webassemblyjs/leb128": "1.5.13", + "@webassemblyjs/utf8": "1.5.13" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz", + "integrity": "sha512-IkXSkgzVhQ0QYAdIayuCWMmXSYx0dHGU8Ah/AxJf1gBvstMWVnzJnBwLsXLyD87VSBIcsqkmZ28dVb0mOC3oBg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-buffer": "1.5.13", + "@webassemblyjs/wasm-gen": "1.5.13", + "@webassemblyjs/wasm-parser": "1.5.13", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz", + "integrity": "sha512-XnYoIcu2iqq8/LrtmdnN3T+bRjqYFjRHqWbqK3osD/0r/Fcv4d9ecRzjVtC29ENEuNTK4mQ9yyxCBCbK8S/cpg==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/helper-api-error": "1.5.13", + "@webassemblyjs/helper-wasm-bytecode": "1.5.13", + "@webassemblyjs/ieee754": "1.5.13", + "@webassemblyjs/leb128": "1.5.13", + "@webassemblyjs/utf8": "1.5.13" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz", + "integrity": "sha512-Lbz65T0LQ1LgzKiUytl34CwuhMNhaCLgrh0JW4rJBN6INnBB8NMwUfQM+FxTnLY9qJ+lHJL/gCM5xYhB9oWi4A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/floating-point-hex-parser": "1.5.13", + "@webassemblyjs/helper-api-error": "1.5.13", + "@webassemblyjs/helper-code-frame": "1.5.13", + "@webassemblyjs/helper-fsm": "1.5.13", + "long": "^3.2.0", + "mamacro": "^0.0.3" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.5.13", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz", + "integrity": "sha512-QcwogrdqcBh8Z+eUF8SG+ag5iwQSXxQJELBEHmLkk790wgQgnIMmntT2sMAMw53GiFNckArf5X0bsCA44j3lWQ==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.5.13", + "@webassemblyjs/wast-parser": "1.5.13", + "long": "^3.2.0" + } + }, + "@xkeshi/vue-countdown": { + "version": "0.6.0", + "resolved": "http://registry.npmjs.org/@xkeshi/vue-countdown/-/vue-countdown-0.6.0.tgz", + "integrity": "sha512-cxOL/kb9/X6SKiaUAroDdiys6QWa9bjANIo2emEDObLN6gFflxrCRPp6iQHJK9gYJfq6R2l9Je5DeV+TH4Oyaw==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", + "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", + "dev": true, + "requires": { + "mime-types": "~2.1.18", + "negotiator": "0.6.1" + } + }, + "acorn": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.2.tgz", + "integrity": "sha512-cJrKCNcr2kv8dlDnbw+JPUGjHZzo4myaxOLmpOX8a+rgX94YeTcTMv/LFJUSByRpc+i4GgVnnhLxvMu/2Y+rqw==", + "dev": true + }, + "acorn-dynamic-import": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz", + "integrity": "sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ=", + "dev": true, + "requires": { + "acorn": "^4.0.3" + }, + "dependencies": { + "acorn": { + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", + "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s=", + "dev": true, + "requires": { + "acorn": "^3.0.4" + }, + "dependencies": { + "acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=", + "dev": true + } + } + }, + "address": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/address/-/address-1.0.3.tgz", + "integrity": "sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg==", + "dev": true + }, + "adjust-sourcemap-loader": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-1.2.0.tgz", + "integrity": "sha512-958oaHHVEXMvsY7v7cC5gEkNIcoaAVIhZ4mBReYVZJOTP9IgKmzLjIOhTtzpLMu+qriXvLsVjJ155EeInp45IQ==", + "dev": true, + "requires": { + "assert": "^1.3.0", + "camelcase": "^1.2.1", + "loader-utils": "^1.1.0", + "lodash.assign": "^4.0.1", + "lodash.defaults": "^3.1.2", + "object-path": "^0.9.2", + "regex-parser": "^2.2.9" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "lodash.defaults": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", + "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", + "dev": true, + "requires": { + "lodash.assign": "^3.0.0", + "lodash.restparam": "^3.0.0" + }, + "dependencies": { + "lodash.assign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", + "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", + "dev": true, + "requires": { + "lodash._baseassign": "^3.0.0", + "lodash._createassigner": "^3.0.0", + "lodash.keys": "^3.0.0" + } + } + } + } + } + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ajv-errors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.0.tgz", + "integrity": "sha1-7PAh+hCP0X37Xms4Py3SM+Mf/Fk=", + "dev": true + }, + "ajv-keywords": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.2.0.tgz", + "integrity": "sha1-6GuBnGAs+IIa1jdBNpjx3sAhhHo=", + "dev": true + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", + "dev": true, + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" + }, + "ansi-colors": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-3.0.5.tgz", + "integrity": "sha512-VVjWpkfaphxUBFarydrQ3n26zX5nIK7hcbT3/ielrvwDDyBBjuh2vuSw1P9zkPq0cfqvdw7lkYHnu+OLSfIBsg==", + "dev": true + }, + "ansi-escapes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", + "integrity": "sha512-UgAb8H9D41AQnu/PbWlCofQVcnV4Gs2bBJi9eZPxfU/hgglFh3SMDMENRIqdr7H6XFnXdoknctFByVsCOotTVw==", + "dev": true + }, + "ansi-html": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", + "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "dev": true + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "arch": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", + "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-filter": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", + "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-includes": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", + "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.7.0" + } + }, + "array-map": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", + "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", + "dev": true + }, + "array-reduce": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", + "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", + "dev": true + }, + "array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", + "dev": true, + "requires": { + "array-uniq": "^1.0.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "asn1.js": { + "version": "4.10.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", + "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "assert": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.4.1.tgz", + "integrity": "sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE=", + "dev": true, + "requires": { + "util": "0.10.3" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "ast-types": { + "version": "0.9.6", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.9.6.tgz", + "integrity": "sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=", + "dev": true + }, + "async": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.1.tgz", + "integrity": "sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ==", + "dev": true, + "requires": { + "lodash": "^4.17.10" + } + }, + "async-each": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", + "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", + "dev": true + }, + "async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=" + }, + "async-limiter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.0.tgz", + "integrity": "sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg==", + "dev": true + }, + "async-validator": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/async-validator/-/async-validator-1.8.5.tgz", + "integrity": "sha512-tXBM+1m056MAX0E8TL2iCjg8WvSyXu0Zc8LNtYqrVeyoL3+esHRZ4SieE9fKQyyU09uONjnMEjrNBMqT0mbvmA==", + "requires": { + "babel-runtime": "6.x" + } + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "autoprefixer": { + "version": "7.2.6", + "resolved": "http://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz", + "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==", + "dev": true, + "requires": { + "browserslist": "^2.11.3", + "caniuse-lite": "^1.0.30000805", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^6.0.17", + "postcss-value-parser": "^3.2.3" + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" + }, + "aws4": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", + "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==" + }, + "axios": { + "version": "0.18.0", + "resolved": "http://registry.npmjs.org/axios/-/axios-0.18.0.tgz", + "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=", + "requires": { + "follow-redirects": "^1.3.0", + "is-buffer": "^1.1.5" + } + }, + "babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "babel-core": { + "version": "6.26.3", + "resolved": "https://registry.npmjs.org/babel-core/-/babel-core-6.26.3.tgz", + "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-eslint": { + "version": "8.2.6", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.6.tgz", + "integrity": "sha512-aCdHjhzcILdP8c9lej7hvXKvQieyRt20SF102SIGyY4cUIiw6UaAtK4j2o3dXX74jEmy0TJ0CEhv4fTIM3SzcA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.0.0-beta.44", + "@babel/traverse": "7.0.0-beta.44", + "@babel/types": "7.0.0-beta.44", + "babylon": "7.0.0-beta.44", + "eslint-scope": "3.7.1", + "eslint-visitor-keys": "^1.0.0" + }, + "dependencies": { + "babylon": { + "version": "7.0.0-beta.44", + "resolved": "http://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.44.tgz", + "integrity": "sha512-5Hlm13BJVAioCHpImtFqNOF2H3ieTOHd0fmFGMxOJ9jgeFqeAwsv3u5P5cR7CSeFrkgHsT19DgFJkHV0/Mcd8g==", + "dev": true + } + } + }, + "babel-generator": { + "version": "6.26.1", + "resolved": "https://registry.npmjs.org/babel-generator/-/babel-generator-6.26.1.tgz", + "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", + "dev": true, + "requires": { + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "babel-helper-builder-binary-assignment-operator-visitor": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz", + "integrity": "sha1-zORReto1b0IgvK6KAsKzRvmlZmQ=", + "dev": true, + "requires": { + "babel-helper-explode-assignable-expression": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-call-delegate": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz", + "integrity": "sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-define-map": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz", + "integrity": "sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-explode-assignable-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz", + "integrity": "sha1-8luCz33BBDPFX3BZLVdGQArCLKo=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz", + "integrity": "sha1-00dbjAPtmCQqJbSDUasYOZ01gKk=", + "dev": true, + "requires": { + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-get-function-arity": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz", + "integrity": "sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-hoist-variables": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz", + "integrity": "sha1-HssnaJydJVE+rbyZFKc/VAi+enY=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-optimise-call-expression": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz", + "integrity": "sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-helper-regex": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz", + "integrity": "sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-helper-remap-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz", + "integrity": "sha1-XsWBgnrXI/7N04HxySg5BnbkVRs=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-replace-supers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz", + "integrity": "sha1-v22/5Dk40XNpohPKiov3S2qQqxo=", + "dev": true, + "requires": { + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, + "babel-helpers": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-helpers/-/babel-helpers-6.24.1.tgz", + "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-loader": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.5.tgz", + "integrity": "sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw==", + "dev": true, + "requires": { + "find-cache-dir": "^1.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1" + } + }, + "babel-messages": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-messages/-/babel-messages-6.23.0.tgz", + "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-check-es2015-constants": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz", + "integrity": "sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-syntax-async-functions": { + "version": "6.13.0", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz", + "integrity": "sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU=", + "dev": true + }, + "babel-plugin-syntax-dynamic-import": { + "version": "6.18.0", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz", + "integrity": "sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo=", + "dev": true + }, + "babel-plugin-syntax-exponentiation-operator": { + "version": "6.13.0", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz", + "integrity": "sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4=", + "dev": true + }, + "babel-plugin-syntax-object-rest-spread": { + "version": "6.13.0", + "resolved": "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", + "integrity": "sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=", + "dev": true + }, + "babel-plugin-syntax-trailing-function-commas": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz", + "integrity": "sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM=", + "dev": true + }, + "babel-plugin-transform-async-to-generator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz", + "integrity": "sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E=", + "dev": true, + "requires": { + "babel-helper-remap-async-to-generator": "^6.24.1", + "babel-plugin-syntax-async-functions": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-arrow-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz", + "integrity": "sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoped-functions": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz", + "integrity": "sha1-u8UbSflk1wy42OC5ToICRs46YUE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-block-scoping": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz", + "integrity": "sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "lodash": "^4.17.4" + } + }, + "babel-plugin-transform-es2015-classes": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz", + "integrity": "sha1-WkxYpQyclGHlZLSyo7+ryXolhNs=", + "dev": true, + "requires": { + "babel-helper-define-map": "^6.24.1", + "babel-helper-function-name": "^6.24.1", + "babel-helper-optimise-call-expression": "^6.24.1", + "babel-helper-replace-supers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-computed-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz", + "integrity": "sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-destructuring": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz", + "integrity": "sha1-mXux8auWf2gtKwh2/jWNYOdlxW0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-duplicate-keys": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz", + "integrity": "sha1-c+s9MQypaePvnskcU3QabxV2Qj4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-for-of": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz", + "integrity": "sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-function-name": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz", + "integrity": "sha1-g0yJhTvDaxrw86TF26qU/Y6sqos=", + "dev": true, + "requires": { + "babel-helper-function-name": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz", + "integrity": "sha1-T1SgLWzWbPkVKAAZox0xklN3yi4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-modules-amd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz", + "integrity": "sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-commonjs": { + "version": "6.26.2", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz", + "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", + "dev": true, + "requires": { + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" + } + }, + "babel-plugin-transform-es2015-modules-systemjs": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz", + "integrity": "sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM=", + "dev": true, + "requires": { + "babel-helper-hoist-variables": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-modules-umd": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz", + "integrity": "sha1-rJl+YoXNGO1hdq22B9YCNErThGg=", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-amd": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-object-super": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz", + "integrity": "sha1-JM72muIcuDp/hgPa0CH1cusnj40=", + "dev": true, + "requires": { + "babel-helper-replace-supers": "^6.24.1", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-parameters": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz", + "integrity": "sha1-V6w1GrScrxSpfNE7CfZv3wpiXys=", + "dev": true, + "requires": { + "babel-helper-call-delegate": "^6.24.1", + "babel-helper-get-function-arity": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1", + "babel-traverse": "^6.24.1", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-shorthand-properties": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz", + "integrity": "sha1-JPh11nIch2YbvZmkYi5R8U3jiqA=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-spread": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz", + "integrity": "sha1-1taKmfia7cRTbIGlQujdnxdG+NE=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-sticky-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz", + "integrity": "sha1-AMHNsaynERLN8M9hJsLta0V8zbw=", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-plugin-transform-es2015-template-literals": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz", + "integrity": "sha1-qEs0UPfp+PH2g51taH2oS7EjbY0=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-typeof-symbol": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz", + "integrity": "sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-es2015-unicode-regex": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz", + "integrity": "sha1-04sS9C6nMj9yk4fxinxa4frrNek=", + "dev": true, + "requires": { + "babel-helper-regex": "^6.24.1", + "babel-runtime": "^6.22.0", + "regexpu-core": "^2.0.0" + } + }, + "babel-plugin-transform-exponentiation-operator": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz", + "integrity": "sha1-KrDJx/MJj6SJB3cruBP+QejeOg4=", + "dev": true, + "requires": { + "babel-helper-builder-binary-assignment-operator-visitor": "^6.24.1", + "babel-plugin-syntax-exponentiation-operator": "^6.8.0", + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-object-rest-spread": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz", + "integrity": "sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY=", + "dev": true, + "requires": { + "babel-plugin-syntax-object-rest-spread": "^6.8.0", + "babel-runtime": "^6.26.0" + } + }, + "babel-plugin-transform-regenerator": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz", + "integrity": "sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8=", + "dev": true, + "requires": { + "regenerator-transform": "^0.10.0" + } + }, + "babel-plugin-transform-runtime": { + "version": "6.23.0", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz", + "integrity": "sha1-iEkNRGUC6puOfvsP4J7E2ZR5se4=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0" + } + }, + "babel-plugin-transform-strict-mode": { + "version": "6.24.1", + "resolved": "https://registry.npmjs.org/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz", + "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", + "dev": true, + "requires": { + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" + } + }, + "babel-preset-env": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/babel-preset-env/-/babel-preset-env-1.7.0.tgz", + "integrity": "sha512-9OR2afuKDneX2/q2EurSftUYM0xGu4O2D9adAhVfADDhrYDaxXV0rBbevVYoY9n6nyX1PmQW/0jtpJvUNr9CHg==", + "dev": true, + "requires": { + "babel-plugin-check-es2015-constants": "^6.22.0", + "babel-plugin-syntax-trailing-function-commas": "^6.22.0", + "babel-plugin-transform-async-to-generator": "^6.22.0", + "babel-plugin-transform-es2015-arrow-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoped-functions": "^6.22.0", + "babel-plugin-transform-es2015-block-scoping": "^6.23.0", + "babel-plugin-transform-es2015-classes": "^6.23.0", + "babel-plugin-transform-es2015-computed-properties": "^6.22.0", + "babel-plugin-transform-es2015-destructuring": "^6.23.0", + "babel-plugin-transform-es2015-duplicate-keys": "^6.22.0", + "babel-plugin-transform-es2015-for-of": "^6.23.0", + "babel-plugin-transform-es2015-function-name": "^6.22.0", + "babel-plugin-transform-es2015-literals": "^6.22.0", + "babel-plugin-transform-es2015-modules-amd": "^6.22.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-systemjs": "^6.23.0", + "babel-plugin-transform-es2015-modules-umd": "^6.23.0", + "babel-plugin-transform-es2015-object-super": "^6.22.0", + "babel-plugin-transform-es2015-parameters": "^6.23.0", + "babel-plugin-transform-es2015-shorthand-properties": "^6.22.0", + "babel-plugin-transform-es2015-spread": "^6.22.0", + "babel-plugin-transform-es2015-sticky-regex": "^6.22.0", + "babel-plugin-transform-es2015-template-literals": "^6.22.0", + "babel-plugin-transform-es2015-typeof-symbol": "^6.23.0", + "babel-plugin-transform-es2015-unicode-regex": "^6.22.0", + "babel-plugin-transform-exponentiation-operator": "^6.22.0", + "babel-plugin-transform-regenerator": "^6.22.0", + "browserslist": "^3.2.6", + "invariant": "^2.2.2", + "semver": "^5.3.0" + }, + "dependencies": { + "browserslist": { + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.2.8.tgz", + "integrity": "sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000844", + "electron-to-chromium": "^1.3.47" + } + } + } + }, + "babel-register": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-register/-/babel-register-6.26.0.tgz", + "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", + "dev": true, + "requires": { + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" + } + }, + "babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", + "requires": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "babel-template": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-template/-/babel-template-6.26.0.tgz", + "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" + } + }, + "babel-traverse": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-traverse/-/babel-traverse-6.26.0.tgz", + "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" + } + }, + "babel-types": { + "version": "6.26.0", + "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", + "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", + "dev": true, + "requires": { + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" + } + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-js": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.3.0.tgz", + "integrity": "sha512-ccav/yGvoa80BQDljCxsmmQ3Xvx60/UpBIij5QN21W3wBi/hhIC9OoO+KLpu9IJTS9j4DRVJ3aDDF9cMSoa2lw==", + "dev": true + }, + "batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bfj-node4": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/bfj-node4/-/bfj-node4-5.3.1.tgz", + "integrity": "sha512-SOmOsowQWfXc7ybFARsK3C4MCOWzERaOMV/Fl3Tgjs+5dJWyzo3oa127jL44eMbQiAN17J7SvAs2TRxEScTUmg==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "check-types": "^7.3.0", + "tryer": "^1.0.0" + } + }, + "big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==" + }, + "binary-extensions": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.11.0.tgz", + "integrity": "sha1-RqoXUftqL5PuXmibsQh9SxTGwgU=", + "dev": true + }, + "block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.2.tgz", + "integrity": "sha512-dhHTWMI7kMx5whMQntl7Vr9C6BvV10lFXDAasnqnrMYhXVCzzk6IO9Fo2L75jXHT07WrOngL1WDXOp+yYS91Yg==" + }, + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "dev": true + }, + "body-parser": { + "version": "1.18.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", + "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.1", + "http-errors": "~1.6.2", + "iconv-lite": "0.4.19", + "on-finished": "~2.3.0", + "qs": "6.5.1", + "raw-body": "2.3.2", + "type-is": "~1.6.15" + } + }, + "bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", + "dev": true, + "requires": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + }, + "dependencies": { + "array-flatten": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.1.tgz", + "integrity": "sha1-Qmu52oQJDBg42BLIFQryCoMx4pY=", + "dev": true + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "bootstrap": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.1.3.tgz", + "integrity": "sha512-rDFIzgXcof0jDyjNosjv4Sno77X4KuPeFxG2XZZv1/Kc8DRVGVADdoQyyOVDwPqL36DDmtCQbrpMCqvpPLJQ0w==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "browserify-rsa": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.0.1.tgz", + "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" + } + }, + "browserify-sign": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", + "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "dev": true, + "requires": { + "bn.js": "^4.1.1", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.2", + "elliptic": "^6.0.0", + "inherits": "^2.0.1", + "parse-asn1": "^5.0.0" + } + }, + "browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz", + "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000792", + "electron-to-chromium": "^1.3.30" + } + }, + "buffer": { + "version": "4.9.1", + "resolved": "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz", + "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + }, + "dependencies": { + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + } + } + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cache-loader": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cache-loader/-/cache-loader-1.2.2.tgz", + "integrity": "sha512-rsGh4SIYyB9glU+d0OcHwiXHXBoUgDhHZaQ1KAbiXqfz1CDPxtTboh1gPbJ0q2qdO8a9lfcjgC5CJ2Ms32y5bw==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "mkdirp": "^0.5.1", + "neo-async": "^2.5.0", + "schema-utils": "^0.4.2" + }, + "dependencies": { + "ajv": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", + "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8=", + "dev": true, + "requires": { + "callsites": "^0.2.0" + } + }, + "callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", + "dev": true + }, + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "dev": true, + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=" + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, + "caniuse-api": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", + "integrity": "sha1-tTTnxzTE+B7F++isoq0kNUuWLGw=", + "dev": true, + "requires": { + "browserslist": "^1.3.6", + "caniuse-db": "^1.0.30000529", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + }, + "dependencies": { + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + } + } + }, + "caniuse-db": { + "version": "1.0.30000885", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000885.tgz", + "integrity": "sha512-Hy1a+UIXooG+tRlt3WnT9avMf+l999bR9J1MqlQdYKgbsYjKxV4a4rgcmiyMmdCLPBFsiRoDxdl9tnNyaq2RXw==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30000885", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000885.tgz", + "integrity": "sha512-cXKbYwpxBLd7qHyej16JazPoUacqoVuDhvR61U7Fr5vSxMUiodzcYa1rQYRYfZ5GexV03vGZHd722vNPLjPJGQ==", + "dev": true + }, + "canvas2image": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/canvas2image/-/canvas2image-1.0.5.tgz", + "integrity": "sha1-Z2oJS0NjiIordmLli5zl07+8nRQ=" + }, + "case-sensitive-paths-webpack-plugin": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.1.2.tgz", + "integrity": "sha512-oEZgAFfEvKtjSRCu6VgYkuGxwrWXMnQzyBmlLPP7r6PWQVtHxP5Z5N6XsuJvtoVax78am/r7lr46bwo3IVEBOg==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", + "dev": true, + "requires": { + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I=", + "dev": true + }, + "charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=", + "dev": true + }, + "check-types": { + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz", + "integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg==", + "dev": true + }, + "chokidar": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz", + "integrity": "sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.0", + "braces": "^2.3.0", + "fsevents": "^1.2.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "lodash.debounce": "^4.0.8", + "normalize-path": "^2.1.1", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0", + "upath": "^1.0.5" + } + }, + "chownr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz", + "integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=", + "dev": true + }, + "chrome-trace-event": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz", + "integrity": "sha512-xDbVgyfDTT2piup/h8dK/y4QZfJRSa73bw1WZ8b4XM1o7fsFubUVGYcE+1ANtOzJJELGpYoG2961z0Z6OAld9A==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "ci-info": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.4.0.tgz", + "integrity": "sha512-Oqmw2pVfCl8sCL+1QgMywPfdxPJPkC51y4usw0iiE2S9qnEOAqXy8bwl1CpMpnoU39g4iKJTz6QZj+28FvOnjQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "dev": true + }, + "clap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clap/-/clap-1.2.3.tgz", + "integrity": "sha512-4CoL/A3hf90V3VIEjeuhSvlGFEHKzOz+Wfc2IVZc+FaUgU0ZQafJTP49fvnULipOPcAfqhyI2duwQyns6xqjYA==", + "dev": true, + "requires": { + "chalk": "^1.1.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-css": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", + "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "dev": true, + "requires": { + "source-map": "~0.6.0" + } + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "dev": true, + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-spinners": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-1.3.1.tgz", + "integrity": "sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg==", + "dev": true + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", + "dev": true + }, + "clipboardy": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-1.2.3.tgz", + "integrity": "sha512-2WNImOvCRe6r63Gk9pShfkwXsVtKCroMAevIbiae021mS850UkWPbevxsBz3tnvjZIEGvlwaqCPsw+4ulzNgJA==", + "dev": true, + "requires": { + "arch": "^2.1.0", + "execa": "^0.8.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } + } + }, + "cliui": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", + "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "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": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "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": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-deep": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", + "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "requires": { + "for-own": "^1.0.0", + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.0", + "shallow-clone": "^1.0.0" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" + }, + "coa": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/coa/-/coa-1.0.4.tgz", + "integrity": "sha1-qe8VNmDWqGqL3sAomlxoTSF0Mv0=", + "dev": true, + "requires": { + "q": "^1.1.2" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/color/-/color-0.11.4.tgz", + "integrity": "sha1-bXtcdPtl6EHNSHkq0e1eB7kE12Q=", + "dev": true, + "requires": { + "clone": "^1.0.2", + "color-convert": "^1.3.0", + "color-string": "^0.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "color-string": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-0.3.0.tgz", + "integrity": "sha1-J9RvtnAlxcL6JZk7+/V55HhBuZE=", + "dev": true, + "requires": { + "color-name": "^1.0.0" + } + }, + "colormin": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colormin/-/colormin-1.1.2.tgz", + "integrity": "sha1-6i90IKcrlogaOKrlnsEkpvcpgTM=", + "dev": true, + "requires": { + "color": "^0.11.0", + "css-color-names": "0.0.4", + "has": "^1.0.1" + } + }, + "colors": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", + "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "dev": true + }, + "combined-stream": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", + "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", + "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", + "dev": true + }, + "compressible": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.14.tgz", + "integrity": "sha1-MmxfUH+7BV9UEWeCuWmoG2einac=", + "dev": true, + "requires": { + "mime-db": ">= 1.34.0 < 2" + } + }, + "compression": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.3.tgz", + "integrity": "sha512-HSjyBG5N1Nnz7tF2+O7A9XUhyjru71/fwgNb7oIsEVHR0WShfs2tIS/EySLgiTe98aOK18YDlMXpzjCXY/n9mg==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.14", + "debug": "2.6.9", + "on-headers": "~1.0.1", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "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==", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "concatenate": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/concatenate/-/concatenate-0.0.2.tgz", + "integrity": "sha1-C0nW6MQQR9dyjNyNYqCGYjOXtJ8=", + "dev": true, + "requires": { + "globs": "^0.1.2" + } + }, + "connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha1-sGhzk0vF40T+9hGhlqb6rgruAVo=", + "dev": true + }, + "console-browserify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", + "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", + "dev": true, + "requires": { + "date-now": "^0.1.4" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + }, + "consolidate": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.14.5.tgz", + "integrity": "sha1-WiUEe8dvcwcmZ8jLUsmJiI9JTGM=", + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "contains-path": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz", + "integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=", + "dev": true + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=", + "dev": true + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", + "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "copy-webpack-plugin": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.5.2.tgz", + "integrity": "sha512-zmC33E8FFSq3AbflTvqvPvBo621H36Afsxlui91d+QyZxPIuXghfnTsa1CuqiAaCPgJoSUWfTFbKJnadZpKEbQ==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "globby": "^7.1.1", + "is-glob": "^4.0.0", + "loader-utils": "^1.1.0", + "minimatch": "^3.0.4", + "p-limit": "^1.0.0", + "serialize-javascript": "^1.4.0" + }, + "dependencies": { + "globby": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz", + "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + } + } + } + }, + "core-js": { + "version": "2.5.7", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz", + "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw==" + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + }, + "cosmiconfig": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-4.0.0.tgz", + "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0", + "require-from-string": "^2.0.1" + }, + "dependencies": { + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + } + } + }, + "create-ecdh": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz", + "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "cross-env": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-5.2.0.tgz", + "integrity": "sha512-jtdNFfFW1hB7sMhr/H6rW1Z45LFqyI431m3qU6bFXcQ3Eh7LtBuG3h74o7ohHZ3crrRkkqHlo4jYHFPcjroANg==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.5", + "is-windows": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=", + "dev": true + }, + "crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + } + }, + "css": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", + "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" + } + }, + "css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-3.0.1.tgz", + "integrity": "sha512-jH4024SHZ3e0M7ann9VxpFpH3moplRXNz9ZBqvFMZqi09Yo5ARbs2wdPH8GqN9iRTlQynrbGbraNbBxBLei85Q==", + "dev": true, + "requires": { + "postcss": "^6.0.0", + "timsort": "^0.3.0" + } + }, + "css-loader": { + "version": "0.28.11", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-0.28.11.tgz", + "integrity": "sha512-wovHgjAx8ZIMGSL8pTys7edA1ClmzxHeY6n/d97gg5odgsxEgKjULPR0viqyC+FWMCL9sfqoC/QCUBo62tLvPg==", + "dev": true, + "requires": { + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "cssnano": "^3.10.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash.camelcase": "^4.3.0", + "object-assign": "^4.1.1", + "postcss": "^5.0.6", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "css-select": { + "version": "1.3.0-rc0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.3.0-rc0.tgz", + "integrity": "sha1-b5MZaqrnN2ZuoQNqjLFKj8t6kjE=", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "^1.0.1" + } + }, + "css-select-base-adapter": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.0.tgz", + "integrity": "sha1-AQKz0UYw34bD65+p9UVicBBs+ZA=", + "dev": true + }, + "css-selector-tokenizer": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz", + "integrity": "sha1-5piEdK6MlTR3v15+/s/OzNnPTIY=", + "dev": true, + "requires": { + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" + }, + "dependencies": { + "regexpu-core": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-1.0.0.tgz", + "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + } + } + }, + "css-tree": { + "version": "1.0.0-alpha25", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha25.tgz", + "integrity": "sha512-XC6xLW/JqIGirnZuUWHXCHRaAjje2b3OIB0Vj5RIJo6mIi/AdJo30quQl5LxUl0gkXDIrTrFGbMlcZjyFplz1A==", + "dev": true, + "requires": { + "mdn-data": "^1.0.0", + "source-map": "^0.5.3" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "css-unit-converter": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.1.tgz", + "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", + "dev": true + }, + "css-url-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", + "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", + "dev": true + }, + "css-what": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.0.tgz", + "integrity": "sha1-lGfQMsOM+u+58teVASUwYvh/ob0=", + "dev": true + }, + "cssesc": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", + "integrity": "sha1-yBSQPkViM3GgR3tAEJqq++6t27Q=", + "dev": true + }, + "cssnano": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-3.10.0.tgz", + "integrity": "sha1-Tzj2zqK5sX+gFJDyPx3GjqZcHDg=", + "dev": true, + "requires": { + "autoprefixer": "^6.3.1", + "decamelize": "^1.1.2", + "defined": "^1.0.0", + "has": "^1.0.1", + "object-assign": "^4.0.1", + "postcss": "^5.0.14", + "postcss-calc": "^5.2.0", + "postcss-colormin": "^2.1.8", + "postcss-convert-values": "^2.3.4", + "postcss-discard-comments": "^2.0.4", + "postcss-discard-duplicates": "^2.0.1", + "postcss-discard-empty": "^2.0.1", + "postcss-discard-overridden": "^0.1.1", + "postcss-discard-unused": "^2.2.1", + "postcss-filter-plugins": "^2.0.0", + "postcss-merge-idents": "^2.1.5", + "postcss-merge-longhand": "^2.0.1", + "postcss-merge-rules": "^2.0.3", + "postcss-minify-font-values": "^1.0.2", + "postcss-minify-gradients": "^1.0.1", + "postcss-minify-params": "^1.0.4", + "postcss-minify-selectors": "^2.0.4", + "postcss-normalize-charset": "^1.1.0", + "postcss-normalize-url": "^3.0.7", + "postcss-ordered-values": "^2.1.0", + "postcss-reduce-idents": "^2.2.2", + "postcss-reduce-initial": "^1.0.0", + "postcss-reduce-transforms": "^1.0.3", + "postcss-svgo": "^2.1.1", + "postcss-unique-selectors": "^2.0.2", + "postcss-value-parser": "^3.2.3", + "postcss-zindex": "^2.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "autoprefixer": { + "version": "6.7.7", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz", + "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=", + "dev": true, + "requires": { + "browserslist": "^1.7.6", + "caniuse-db": "^1.0.30000634", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^5.2.16", + "postcss-value-parser": "^3.2.3" + } + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "cssnano-preset-default": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.0.tgz", + "integrity": "sha1-wzQoe099SfstFwqS+SFGVXiOO2s=", + "dev": true, + "requires": { + "css-declaration-sorter": "^3.0.0", + "cssnano-util-raw-cache": "^4.0.0", + "postcss": "^6.0.0", + "postcss-calc": "^6.0.0", + "postcss-colormin": "^4.0.0", + "postcss-convert-values": "^4.0.0", + "postcss-discard-comments": "^4.0.0", + "postcss-discard-duplicates": "^4.0.0", + "postcss-discard-empty": "^4.0.0", + "postcss-discard-overridden": "^4.0.0", + "postcss-merge-longhand": "^4.0.0", + "postcss-merge-rules": "^4.0.0", + "postcss-minify-font-values": "^4.0.0", + "postcss-minify-gradients": "^4.0.0", + "postcss-minify-params": "^4.0.0", + "postcss-minify-selectors": "^4.0.0", + "postcss-normalize-charset": "^4.0.0", + "postcss-normalize-display-values": "^4.0.0", + "postcss-normalize-positions": "^4.0.0", + "postcss-normalize-repeat-style": "^4.0.0", + "postcss-normalize-string": "^4.0.0", + "postcss-normalize-timing-functions": "^4.0.0", + "postcss-normalize-unicode": "^4.0.0", + "postcss-normalize-url": "^4.0.0", + "postcss-normalize-whitespace": "^4.0.0", + "postcss-ordered-values": "^4.0.0", + "postcss-reduce-initial": "^4.0.0", + "postcss-reduce-transforms": "^4.0.0", + "postcss-svgo": "^4.0.0", + "postcss-unique-selectors": "^4.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.1.1.tgz", + "integrity": "sha512-VBorw+tgpOtZ1BYhrVSVTzTt/3+vSE3eFUh0N2GCFK1HffceOaf32YS/bs6WiFhjDAblAFrx85jMy3BG9fBK2Q==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000884", + "electron-to-chromium": "^1.3.62", + "node-releases": "^1.0.0-alpha.11" + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "coa": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.1.tgz", + "integrity": "sha512-5wfTTO8E2/ja4jFSxePXlG5nRu5bBtL/r1HCIpJW/lzT6yDtKl0u0Z4o/Vpz32IpKmBn7HerheEZQgA9N2DarQ==", + "dev": true, + "requires": { + "q": "^1.1.2" + } + }, + "color": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.0.0.tgz", + "integrity": "sha512-jCpd5+s0s0t7p3pHQKpnJ0TpQKKdleP71LWcA0aqiljpiuAkOSUFN/dyH8ZwF0hRmFlrIuRhufds1QyEP9EB+w==", + "dev": true, + "requires": { + "color-convert": "^1.9.1", + "color-string": "^1.5.2" + } + }, + "color-string": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", + "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "csso": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "dev": true, + "requires": { + "css-tree": "1.0.0-alpha.29" + }, + "dependencies": { + "css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "dev": true, + "requires": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + } + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "is-svg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", + "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "js-yaml": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz", + "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "postcss-calc": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-6.0.1.tgz", + "integrity": "sha1-PSQXG79udinUIqQ26/5t2VEfQzA=", + "dev": true, + "requires": { + "css-unit-converter": "^1.1.1", + "postcss": "^6.0.0", + "postcss-selector-parser": "^2.2.2", + "reduce-css-calc": "^2.0.0" + } + }, + "postcss-colormin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.1.tgz", + "integrity": "sha1-bxwYoBVbxpYT8v8ThD4uSuj/C74=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-convert-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.0.tgz", + "integrity": "sha1-d9d9mu0dxOaVbmUcw0nVMwWHb2I=", + "dev": true, + "requires": { + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-discard-comments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.0.tgz", + "integrity": "sha1-loSimedrPpMmPvj9KtvxocCP2I0=", + "dev": true, + "requires": { + "postcss": "^6.0.0" + } + }, + "postcss-discard-duplicates": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.0.tgz", + "integrity": "sha1-QvPCZ/hfqQngQsNXZ+z9Zcsr1yw=", + "dev": true, + "requires": { + "postcss": "^6.0.0" + } + }, + "postcss-discard-empty": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.0.tgz", + "integrity": "sha1-VeGKWcdBKOOMfSgEvPpAVmEfuX8=", + "dev": true, + "requires": { + "postcss": "^6.0.0" + } + }, + "postcss-discard-overridden": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.0.tgz", + "integrity": "sha1-Sgv4WXh4TPH4HtLBwf2dlkodofo=", + "dev": true, + "requires": { + "postcss": "^6.0.0" + } + }, + "postcss-merge-longhand": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.5.tgz", + "integrity": "sha512-tw2obF6I2VhXhPMObQc1QpQO850m3arhqP3PcBAU7Tx70v73QF6brs9uK0XKMNuC7BPo6DW+fh07cGhrLL57HA==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + } + }, + "postcss-merge-rules": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.1.tgz", + "integrity": "sha1-Qw/Vmz8u0uivzQsxJ47aOYVKuxA=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^6.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.0.tgz", + "integrity": "sha1-TMM9KD1qgXWQNudX75gdksvYW+0=", + "dev": true, + "requires": { + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-gradients": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.0.tgz", + "integrity": "sha1-P8ORZDnSepu4Bm23za2AFlDrCQ4=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-minify-params": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.0.tgz", + "integrity": "sha1-BekWbuSMBa9lGYnOhNOcG015BnQ=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + } + }, + "postcss-minify-selectors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.0.tgz", + "integrity": "sha1-sen2xGNBbT/Nyybnt4XZX2FXiq0=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^6.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.0.tgz", + "integrity": "sha1-JFJyknAtXoEp6vo9HeSe1RpqtzA=", + "dev": true, + "requires": { + "postcss": "^6.0.0" + } + }, + "postcss-normalize-url": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.0.tgz", + "integrity": "sha1-t6nIrSbPJmlMFG6y1ovQz0mVbw0=", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-ordered-values": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.0.tgz", + "integrity": "sha512-gbqbEiONKKJgoOKhtzBjFqmHSzviPL4rv0ACVcFS7wxWXBY07agFXRQ7Y3eMGV0ZORzQXp2NGnj0c+imJG0NcA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-reduce-initial": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.1.tgz", + "integrity": "sha1-8tWPUM6isMXcEnjW6l7Q/1gpwpM=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^6.0.0" + } + }, + "postcss-reduce-transforms": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.0.tgz", + "integrity": "sha1-9kX8dEDDUnT0DegQThStcWPt8Yg=", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-svgo": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.0.tgz", + "integrity": "sha1-wLutAlIPxjbJ14sOhAPi5RXDIoU=", + "dev": true, + "requires": { + "is-svg": "^3.0.0", + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + } + }, + "postcss-unique-selectors": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.0.tgz", + "integrity": "sha1-BMHpdkx1h0JhMDQCxB8Ol2n8VQE=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^6.0.0", + "uniqs": "^2.0.0" + } + }, + "reduce-css-calc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.4.tgz", + "integrity": "sha512-i/vWQbyd3aJRmip9OVSN9V6nIjLf/gg/ctxb0CpvHWtcRysFl/ngDBQD+rqavxdw/doScA3GMBXhzkHQ4GCzFQ==", + "dev": true, + "requires": { + "css-unit-converter": "^1.1.1", + "postcss-value-parser": "^3.3.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "svgo": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.0.5.tgz", + "integrity": "sha512-nYrifviB77aNKDNKKyuay3M9aYiK6Hv5gJVDdjj2ZXTQmI8WZc8+UPLR5IpVlktJfSu3co/4XcWgrgI6seGBPg==", + "dev": true, + "requires": { + "coa": "~2.0.1", + "colors": "~1.1.2", + "css-select": "~1.3.0-rc0", + "css-select-base-adapter": "~0.1.0", + "css-tree": "1.0.0-alpha25", + "css-url-regex": "^1.1.0", + "csso": "^3.5.0", + "js-yaml": "~3.10.0", + "mkdirp": "~0.5.1", + "object.values": "^1.0.4", + "sax": "~1.2.4", + "stable": "~0.1.6", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + } + } + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.0.tgz", + "integrity": "sha1-vgooVuJfGF9feivMBiTii38Xmp8=", + "dev": true, + "requires": { + "postcss": "^6.0.0" + } + }, + "cssnano-util-same-parent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.0.tgz", + "integrity": "sha1-0qPeEDmqmLxOwlAB+gUDMMKhbaw=", + "dev": true + }, + "csso": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/csso/-/csso-2.3.2.tgz", + "integrity": "sha1-3dUsWHAz9J6Utx/FVWnyUuj/X4U=", + "dev": true, + "requires": { + "clap": "^1.0.9", + "source-map": "^0.5.3" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "requires": { + "array-find-index": "^1.0.1" + } + }, + "cyclist": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", + "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "dev": true + }, + "d": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", + "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", + "dev": true, + "requires": { + "es5-ext": "^0.10.9" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "date-now": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/date-now/-/date-now-0.1.4.tgz", + "integrity": "sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=", + "dev": true + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "deep-equal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.0.1.tgz", + "integrity": "sha1-9dJgKStmDghO/0zbyfCK0yR0SLU=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==" + }, + "default-gateway": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-2.7.2.tgz", + "integrity": "sha512-lAc4i9QJR0YHSDFdzeBQKfZ1SRDG3hsJNEkrpcZa8QhBfidLAilT60BDEIVUUGqosFp425KOgB3uYqcnQrWafQ==", + "dev": true, + "requires": { + "execa": "^0.10.0", + "ip-regex": "^2.1.0" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + } + } + }, + "defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "dev": true, + "requires": { + "clone": "^1.0.2" + } + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "dev": true + }, + "del": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", + "dev": true, + "requires": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + } + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "des.js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", + "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "dev": true, + "requires": { + "repeating": "^2.0.0" + } + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "dir-glob": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", + "integrity": "sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "path-type": "^3.0.0" + }, + "dependencies": { + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + } + } + }, + "dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha1-s55/HabrCnW6nBcySzR1PEfgZU0=", + "dev": true + }, + "dns-packet": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", + "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "dev": true, + "requires": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", + "dev": true, + "requires": { + "buffer-indexof": "^1.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dom-converter": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.1.4.tgz", + "integrity": "sha1-pF71cnuJDJv/5tfIduexnLDhfzs=", + "dev": true, + "requires": { + "utila": "~0.3" + }, + "dependencies": { + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "dom-serializer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz", + "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", + "dev": true, + "requires": { + "domelementtype": "~1.1.1", + "entities": "~1.1.1" + }, + "dependencies": { + "domelementtype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.1.3.tgz", + "integrity": "sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs=", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.0.tgz", + "integrity": "sha1-sXrtguirWeUt2cGbF1bg/BhyBMI=", + "dev": true + }, + "domhandler": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.1.0.tgz", + "integrity": "sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ=", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", + "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "dev": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-4.0.0.tgz", + "integrity": "sha1-hk7xN5rO1Vzm+V3r7NzhefegzR0=", + "dev": true + }, + "dotenv-expand": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-4.2.0.tgz", + "integrity": "sha1-3vHxyl1gWdJKdm5YeULCEQbOEnU=", + "dev": true + }, + "duplexer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", + "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", + "dev": true + }, + "duplexify": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "easy-stack": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz", + "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=", + "dev": true + }, + "easytimer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/easytimer/-/easytimer-1.1.1.tgz", + "integrity": "sha1-Gt3eclZG3iWSQw0DBIp0jWM1TpQ=" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", + "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.63", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.63.tgz", + "integrity": "sha512-Ec35NNY040HKuSxMAzBMgz/uUI78amSWpBUD9x2gN7R7gkb/wgAcClngWklcLP0/lm/g0UUYHnC/tUIlZj8UvQ==", + "dev": true + }, + "element-ui": { + "version": "2.4.6", + "resolved": "https://registry.npmjs.org/element-ui/-/element-ui-2.4.6.tgz", + "integrity": "sha512-VYqKckWIyshGun707WedZeqHoRQkadR0QSuJjEwCzWQC/ofued4wCOoSXWdBwWAUPcdhaPJWMVZfwPuE29zB+w==", + "requires": { + "async-validator": "~1.8.1", + "babel-helper-vue-jsx-merge-props": "^2.0.0", + "deepmerge": "^1.2.0", + "normalize-wheel": "^1.0.1", + "resize-observer-polyfill": "^1.5.0", + "throttle-debounce": "^1.0.1" + } + }, + "elliptic": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", + "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", + "dev": true, + "requires": { + "bn.js": "^4.4.0", + "brorand": "^1.0.1", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.0" + } + }, + "emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", + "integrity": "sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "object-assign": "^4.0.1", + "tapable": "^0.2.7" + } + }, + "entities": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.1.tgz", + "integrity": "sha1-blwtClYhtdra7O+AuQ7ftc13cvA=", + "dev": true + }, + "errno": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz", + "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", + "dev": true, + "requires": { + "prr": "~1.0.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "error-stack-parser": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.0.2.tgz", + "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==", + "dev": true, + "requires": { + "stackframe": "^1.0.4" + } + }, + "es-abstract": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.12.0.tgz", + "integrity": "sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA==", + "dev": true, + "requires": { + "es-to-primitive": "^1.1.1", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" + } + }, + "es-to-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.1.1.tgz", + "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", + "dev": true, + "requires": { + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" + } + }, + "es5-ext": { + "version": "0.10.46", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.46.tgz", + "integrity": "sha512-24XxRvJXNFwEMpJb3nOkiRJKRoupmjYmOPVlI65Qy2SrtxwOTB+g6ODjBKOtwEHbYrhWRty9xxOWLNdClT2djw==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.1", + "next-tick": "1" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "es6-templates": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", + "integrity": "sha1-XLmsn7He1usSOTQrgdeSu7QHjuQ=", + "dev": true, + "requires": { + "recast": "~0.11.12", + "through": "~2.3.6" + } + }, + "es6-weak-map": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", + "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.14", + "es6-iterator": "^2.0.1", + "es6-symbol": "^3.1.1" + } + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint": { + "version": "4.19.1", + "resolved": "http://registry.npmjs.org/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "requires": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "globals": { + "version": "11.7.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.7.0.tgz", + "integrity": "sha512-K8BNSPySfeShBQXsahYB/AbbWruVOTyVpgoIDnl8odPpeSfP2J5QO2oLFFdl2j7GfDCtZj2bMKar2T49itTPCg==", + "dev": true + }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "eslint-config-standard": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", + "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz", + "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", + "dev": true, + "requires": { + "debug": "^2.6.9", + "resolve": "^1.5.0" + } + }, + "eslint-loader": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-loader/-/eslint-loader-2.1.0.tgz", + "integrity": "sha512-f4A/Yk7qF+HcFSz5Tck2QoKIwJVHlX0soJk5MkROYahb5uvspad5Ba60rrz4u/V2/MEj1dtp/uBi6LlLWVaY7Q==", + "dev": true, + "requires": { + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" + } + }, + "eslint-module-utils": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz", + "integrity": "sha1-snA2LNiLGkitMIl2zn+lTphBF0Y=", + "dev": true, + "requires": { + "debug": "^2.6.8", + "pkg-dir": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz", + "integrity": "sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g==", + "dev": true, + "requires": { + "contains-path": "^0.1.0", + "debug": "^2.6.8", + "doctrine": "1.5.0", + "eslint-import-resolver-node": "^0.3.1", + "eslint-module-utils": "^2.2.0", + "has": "^1.0.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.3", + "read-pkg-up": "^2.0.0", + "resolve": "^1.6.0" + }, + "dependencies": { + "doctrine": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz", + "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "isarray": "^1.0.0" + } + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + } + } + }, + "eslint-plugin-node": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-6.0.1.tgz", + "integrity": "sha512-Q/Cc2sW1OAISDS+Ji6lZS2KV4b7ueA/WydVWd1BECTQwVvfQy5JAi3glhINoKzoMnfnuRgNP+ZWKrGAbp3QDxw==", + "dev": true, + "requires": { + "ignore": "^3.3.6", + "minimatch": "^3.0.4", + "resolve": "^1.3.3", + "semver": "^5.4.1" + } + }, + "eslint-plugin-promise": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-3.8.0.tgz", + "integrity": "sha512-JiFL9UFR15NKpHyGii1ZcvmtIqa3UTwiDAGb8atSffe43qJ3+1czVGN6UtkklpcJ2DVnqvTMzEKRaJdBkAL2aQ==", + "dev": true + }, + "eslint-plugin-standard": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-3.1.0.tgz", + "integrity": "sha512-fVcdyuKRr0EZ4fjWl3c+gp1BANFJD1+RaWa2UPYfMZ6jCtp5RG00kSaXnK/dE5sYzt4kaWJ9qdxqUfc0d9kX0w==", + "dev": true + }, + "eslint-plugin-vue": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz", + "integrity": "sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA==", + "dev": true, + "requires": { + "vue-eslint-parser": "^2.0.3" + } + }, + "eslint-scope": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz", + "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "dev": true + }, + "espree": { + "version": "3.5.4", + "resolved": "https://registry.npmjs.org/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "requires": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + } + }, + "esprima": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", + "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=" + }, + "esquery": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz", + "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", + "dev": true, + "requires": { + "estraverse": "^4.0.0" + } + }, + "esrecurse": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz", + "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", + "dev": true, + "requires": { + "estraverse": "^4.1.0" + } + }, + "estraverse": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", + "dev": true + }, + "esutils": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true + }, + "eventemitter3": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.0.tgz", + "integrity": "sha512-ivIvhpq/Y0uSjcHDcOIccjmYjGLcP09MFGE7ysAwkAvkXfpZlC985pH2/ui64DKazbTW/4kN3yqozUxlXzI6cA==", + "dev": true + }, + "events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ=", + "dev": true + }, + "eventsource": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-0.1.6.tgz", + "integrity": "sha1-Cs7ehJ7X3RzMMsgRuxG5RNTykjI=", + "dev": true, + "requires": { + "original": ">=0.0.5" + } + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + }, + "dependencies": { + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "express": { + "version": "4.16.3", + "resolved": "http://registry.npmjs.org/express/-/express-4.16.3.tgz", + "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "array-flatten": "1.1.1", + "body-parser": "1.18.2", + "content-disposition": "0.5.2", + "content-type": "~1.0.4", + "cookie": "0.3.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.1.1", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.3", + "qs": "6.5.1", + "range-parser": "~1.2.0", + "safe-buffer": "5.1.1", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "external-editor": { + "version": "2.2.0", + "resolved": "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "requires": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extract-text-webpack-plugin": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz", + "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==", + "dev": true, + "requires": { + "async": "^2.4.1", + "loader-utils": "^1.1.0", + "schema-utils": "^0.3.0", + "webpack-sources": "^1.0.1" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "fast-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.2.tgz", + "integrity": "sha512-TR6zxCKftDQnUAPvkrCWdBgDq/gbqx8A3ApnBrR5rMvpp6+KMJI0Igw7fkWPgeVK0uhRXTXdvO3O+YP0CaUX2g==", + "dev": true, + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.0.1", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.1", + "micromatch": "^3.1.10" + } + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastparse": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.1.tgz", + "integrity": "sha1-0eJkOzipTXWDtHkGDmxK/8lAcfg=", + "dev": true + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "figgy-pudding": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", + "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==", + "dev": true + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E=", + "dev": true, + "requires": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + } + }, + "file-loader": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-0.11.2.tgz", + "integrity": "sha512-N+uhF3mswIFeziHQjGScJ/yHXYt3DiLBeC+9vWW+WjUBiClMSOlV1YrXQi+7KM2aA3Rn4Bybgv+uXFQbfkzpvg==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "finalhandler": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" + } + }, + "find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + } + }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flat-cache": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.0.tgz", + "integrity": "sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE=", + "dev": true, + "requires": { + "circular-json": "^0.3.1", + "del": "^2.0.2", + "graceful-fs": "^4.1.2", + "write": "^0.2.1" + }, + "dependencies": { + "del": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", + "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "dev": true, + "requires": { + "globby": "^5.0.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "rimraf": "^2.2.8" + } + }, + "globby": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", + "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "flatten": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.2.tgz", + "integrity": "sha1-2uRqnXj74lKSJYzB54CkHZXAN4I=" + }, + "flush-write-stream": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.3.tgz", + "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, + "follow-redirects": { + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.7.tgz", + "integrity": "sha512-NONJVIFiX7Z8k2WxfqBjtwqMifx7X42ORLFrOZ2LTKGj71G3C0kfdyTqGqr8fx5zSX6Foo/D95dgGWbPUiwnew==", + "requires": { + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "requires": { + "ms": "2.0.0" + } + } + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=" + }, + "for-own": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", + "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", + "requires": { + "for-in": "^1.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" + }, + "form-data": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.2.tgz", + "integrity": "sha1-SXBJi+YEwgwAXU9cI67NIda0kJk=", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "friendly-errors-webpack-plugin": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.7.0.tgz", + "integrity": "sha512-K27M3VK30wVoOarP651zDmb93R9zF28usW4ocaK3mfQeIEI5BPht/EzZs5E8QLLwbLRJQMwscAjDxYPb1FuNiw==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "error-stack-parser": "^2.0.0", + "string-width": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-extra": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz", + "integrity": "sha1-N5TzeMWLNC6n27sjCVEJxLO2IpE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + }, + "fsevents": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", + "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "dev": true, + "optional": true, + "requires": { + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" + }, + "dependencies": { + "abbrev": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "debug": { + "version": "2.6.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ms": "2.0.0" + } + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "optional": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "detect-libc": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "dev": true, + "optional": true, + "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" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "iconv-lite": { + "version": "0.4.21", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safer-buffer": "^2.1.0" + } + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "ini": { + "version": "1.3.5", + "bundled": true, + "dev": true, + "optional": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "isarray": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "minipass": { + "version": "2.2.4", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + } + }, + "ms": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "needle": { + "version": "2.2.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, + "node-pre-gyp": { + "version": "0.10.0", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.0.3", + "bundled": true, + "dev": true, + "optional": true + }, + "npm-packlist": { + "version": "1.1.10", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "dev": true, + "optional": true, + "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", + "bundled": true, + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "optional": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "dev": true, + "optional": true, + "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" + } + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "glob": "^7.0.5" + } + }, + "safe-buffer": { + "version": "5.1.1", + "bundled": true, + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true, + "dev": true, + "optional": true + }, + "sax": { + "version": "1.2.4", + "bundled": true, + "dev": true, + "optional": true + }, + "semver": { + "version": "5.5.0", + "bundled": true, + "dev": true, + "optional": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "optional": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true, + "dev": true, + "optional": true + }, + "tar": { + "version": "4.4.1", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "optional": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "string-width": "^1.0.2" + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "3.0.2", + "bundled": true, + "dev": true + } + } + }, + "fstream": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", + "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "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": { + "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": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "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": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "requires": { + "globule": "^1.0.0" + } + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=" + }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global-modules-path": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/global-modules-path/-/global-modules-path-2.3.0.tgz", + "integrity": "sha512-HchvMJNYh9dGSCy8pOQ2O8u/hoXaL+0XhnrwH0RyLiSXMMTl9W3N6KUU73+JFOg5PGjtzl6VZzUQsnrpm7Szag==", + "dev": true + }, + "globals": { + "version": "9.18.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-9.18.0.tgz", + "integrity": "sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ==", + "dev": true + }, + "globby": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", + "dev": true, + "requires": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "globs": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globs/-/globs-0.1.4.tgz", + "integrity": "sha512-D23dWbOq48vlOraoSigbcQV4tWrnhwk+E/Um2cMuDS3/5dwGmdFeA7L/vAvDhLFlQOTDqHcXh35m/71g2A2WzQ==", + "dev": true, + "requires": { + "glob": "^7.1.1" + } + }, + "globule": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", + "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "requires": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "gzip-size": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-4.1.0.tgz", + "integrity": "sha1-iuCWJX6r59acRb4rZ8RIEk/7UXw=", + "dev": true, + "requires": { + "duplexer": "^0.1.1", + "pify": "^3.0.0" + } + }, + "handle-thing": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-1.2.5.tgz", + "integrity": "sha1-/Xqtcmvxpf0W38KbL3pmAdJxOcQ=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "requires": { + "ajv": "^5.1.0", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", + "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=" + }, + "hash.js": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.5.tgz", + "integrity": "sha512-eWI5HG9Np+eHV1KQhisXWwM+4EPPYe5dFX1UZZH7k/E3JzDEazVH+VGlZi6R94ZqImq+A3D1mCEtrFIfg/E7sA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "he": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", + "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", + "dev": true, + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "hoek": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-5.0.4.tgz", + "integrity": "sha512-Alr4ZQgoMlnere5FZJsIyfIjORBqZll5POhDsF4q64dPuJR6rNxXdDxtHSQq8OXRurhmx+PWYEE8bXRROY8h0w==", + "dev": true + }, + "home-or-tmp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", + "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", + "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "dev": true + }, + "html-comment-regex": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.1.tgz", + "integrity": "sha1-ZouTd26q5V696POtRkswekljYl4=", + "dev": true + }, + "html-entities": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", + "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "dev": true + }, + "html-loader": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/html-loader/-/html-loader-0.4.5.tgz", + "integrity": "sha1-X7zYfNY6XEmn/OL+VvQl4Fcpxow=", + "dev": true, + "requires": { + "es6-templates": "^0.2.2", + "fastparse": "^1.1.1", + "html-minifier": "^3.0.1", + "loader-utils": "^1.0.2", + "object-assign": "^4.1.0" + } + }, + "html-minifier": { + "version": "3.5.20", + "resolved": "https://registry.npmjs.org/html-minifier/-/html-minifier-3.5.20.tgz", + "integrity": "sha512-ZmgNLaTp54+HFKkONyLFEfs5dd/ZOtlquKaTnqIWFmx3Av5zG6ZPcV2d0o9XM2fXOTxxIf6eDcwzFFotke/5zA==", + "dev": true, + "requires": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.1.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "dependencies": { + "uglify-js": { + "version": "3.4.9", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.9.tgz", + "integrity": "sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q==", + "dev": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1" + } + } + } + }, + "html-webpack-plugin": { + "version": "3.2.0", + "resolved": "http://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", + "dev": true, + "requires": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "dependencies": { + "loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", + "dev": true, + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "tapable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", + "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", + "dev": true + } + } + }, + "htmlparser2": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.3.0.tgz", + "integrity": "sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4=", + "dev": true, + "requires": { + "domelementtype": "1", + "domhandler": "2.1", + "domutils": "1.1", + "readable-stream": "1.0" + }, + "dependencies": { + "domutils": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.1.6.tgz", + "integrity": "sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU=", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + } + }, + "http-parser-js": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.13.tgz", + "integrity": "sha1-O9bW/ebjFyyTNMOzO2wZPYD+ETc=" + }, + "http-proxy": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", + "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "dev": true, + "requires": { + "eventemitter3": "^3.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-middleware": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz", + "integrity": "sha1-ZC6ISIUdZvCdTxJJEoRtuutBuDM=", + "dev": true, + "requires": { + "http-proxy": "^1.16.2", + "is-glob": "^3.1.0", + "lodash": "^4.17.2", + "micromatch": "^2.3.11" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + } + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "iconv-lite": { + "version": "0.4.19", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", + "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==", + "dev": true + }, + "icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=", + "dev": true + }, + "icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", + "dev": true, + "requires": { + "postcss": "^6.0.1" + } + }, + "ieee754": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.12.tgz", + "integrity": "sha512-GguP+DRY+pJ3soyIiGPTvdiVXjZ+DbXOxGpXn3eMvNW4x4irjqXm4wHKscC+TfxSJ0yw/S1F24tqdMNsMZTiLA==", + "dev": true + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "img-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/img-loader/-/img-loader-3.0.0.tgz", + "integrity": "sha512-2TuWF+qS5zcXPbE+w1Yoquizy4slmEKmAlAuNlRAvzZ1F9JK2wkbtx8FfkIxBqEr56cbLiT2Xg2HgPt03SgrjQ==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0" + } + }, + "import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", + "dev": true, + "requires": { + "import-from": "^2.1.0" + } + }, + "import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "import-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-1.0.0.tgz", + "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", + "dev": true, + "requires": { + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "in-publish": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", + "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=" + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "requires": { + "repeating": "^2.0.0" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=" + }, + "indexof": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", + "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + }, + "inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "internal-ip": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/internal-ip/-/internal-ip-1.2.0.tgz", + "integrity": "sha1-rp+/k7mEh4eF1QqN4bNWlWBYz1w=", + "dev": true, + "requires": { + "meow": "^3.3.0" + } + }, + "interpret": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", + "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", + "dev": true + }, + "invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "requires": { + "loose-envify": "^1.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", + "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk=", + "dev": true + }, + "ipaddr.js": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.8.0.tgz", + "integrity": "sha1-6qM9bd16zo9/b+DJygRA5wZzix4=", + "dev": true + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-callable": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", + "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "dev": true + }, + "is-ci": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.0.tgz", + "integrity": "sha512-plgvKjQtalH2P3Gytb7L61Lmz95g2DlpzFiQyRSFew8WoJKxtKRzrZMeyRN2supblm3Psc8OQGy7Xjb6XG11jw==", + "dev": true, + "requires": { + "ci-info": "^1.3.0" + } + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", + "dev": true, + "requires": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", + "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=" + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + }, + "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 + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-glob": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz", + "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=", + "dev": true + }, + "is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "requires": { + "is-path-inside": "^1.0.0" + } + }, + "is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", + "dev": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "requires": { + "isobject": "^3.0.1" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=", + "dev": true + }, + "is-regex": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", + "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "dev": true, + "requires": { + "has": "^1.0.1" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-svg": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-2.1.0.tgz", + "integrity": "sha1-z2EJDaDZ77yrhyLeum8DIgjbsOk=", + "dev": true, + "requires": { + "html-comment-regex": "^1.1.0" + } + }, + "is-symbol": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.1.tgz", + "integrity": "sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI=", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=" + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "isemail": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/isemail/-/isemail-3.1.3.tgz", + "integrity": "sha512-5xbsG5wYADIcB+mfLsd+nst1V/D+I7EU7LEZPo2GOIMu4JzfcRs5yQoypP4avA7QtUqgxYLKBYNv4IdzBmbhdw==", + "dev": true, + "requires": { + "punycode": "2.x.x" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=" + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" + }, + "javascript-stringify": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/javascript-stringify/-/javascript-stringify-1.6.0.tgz", + "integrity": "sha1-FC0RHzpuPa6PSpr9d9RYVbWpzOM=", + "dev": true + }, + "joi": { + "version": "13.6.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-13.6.0.tgz", + "integrity": "sha512-E4QB0yRgEa6ZZKcSHJuBC+QeAwy+akCG0Bsa9edLqljyhlr+GuGDSmXYW1q7sj/FuAPy+ECUI3evVtK52tVfwg==", + "dev": true, + "requires": { + "hoek": "5.x.x", + "isemail": "3.x.x", + "topo": "3.x.x" + } + }, + "jquery": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.3.1.tgz", + "integrity": "sha512-Ubldcmxp5np52/ENotGxlLe6aGMvmF4R8S6tZjsP6Knsaxd/xp3Zrh50cG93lR6nPXyUFwzN3ZSOQI0wRJNdGg==" + }, + "js-base64": { + "version": "2.4.9", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.4.9.tgz", + "integrity": "sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==" + }, + "js-cookie": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-2.2.0.tgz", + "integrity": "sha1-Gywnmm7s44ChIWi5JIUmWzWx7/s=" + }, + "js-message": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz", + "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=", + "dev": true + }, + "js-queue": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.0.tgz", + "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=", + "dev": true, + "requires": { + "easy-stack": "^1.0.0" + } + }, + "js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=", + "dev": true + }, + "js-yaml": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.7.0.tgz", + "integrity": "sha1-XJZ93YN6m/3KXy3oQlOr6KHAO4A=", + "requires": { + "argparse": "^1.0.7", + "esprima": "^2.6.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "optional": true + }, + "jsesc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz", + "integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s=", + "dev": true + }, + "json-loader": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/json-loader/-/json-loader-0.5.7.tgz", + "integrity": "sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" + }, + "json3": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", + "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", + "dev": true + }, + "json5": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", + "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=" + }, + "jsonfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-3.0.1.tgz", + "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "killable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + }, + "laravel-echo": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/laravel-echo/-/laravel-echo-1.4.0.tgz", + "integrity": "sha512-O0vkToCCpxuH9dYAlugTLQzG0BmxvGrjXim0LHZ0VPsFu/Y+sXnV9GvYbmcBq1rcJymQc/6GHMUCDY01lN26lQ==" + }, + "laravel-mix": { + "version": "2.1.14", + "resolved": "https://registry.npmjs.org/laravel-mix/-/laravel-mix-2.1.14.tgz", + "integrity": "sha512-M/Vzgr6+QQGukciAQ91SZvOhUyrPm41bq/nRyF2j2HR8/g3vzvTQbRkdTGOpq9Z+y3REEj8qR2A3ScnEG37Dgw==", + "dev": true, + "requires": { + "autoprefixer": "^7.2.6", + "babel-core": "^6.24.1", + "babel-loader": "^7.1.1", + "babel-plugin-transform-object-rest-spread": "^6.26.0", + "babel-plugin-transform-runtime": "^6.23.0", + "babel-preset-env": "^1.5.1", + "chokidar": "^2.0.3", + "clean-css": "^4.1.3", + "concatenate": "0.0.2", + "css-loader": "^0.28.9", + "dotenv": "^4.0.0", + "dotenv-expand": "^4.2.0", + "extract-text-webpack-plugin": "^3.0.2", + "file-loader": "^0.11.2", + "friendly-errors-webpack-plugin": "^1.6.1", + "fs-extra": "^3.0.1", + "glob": "^7.1.2", + "html-loader": "^0.4.5", + "img-loader": "^3.0.0", + "lodash": "^4.17.5", + "md5": "^2.2.1", + "node-sass": "^4.9.0", + "postcss-loader": "^2.1.0", + "resolve-url-loader": "^2.2.1", + "sass-loader": "^6.0.5", + "style-loader": "^0.18.2", + "uglify-js": "^2.8.29", + "uglifyjs-webpack-plugin": "^1.1.8", + "vue-loader": "^13.7.1", + "vue-template-compiler": "^2.5.13", + "webpack": "^3.11.0", + "webpack-chunk-hash": "^0.4.0", + "webpack-dev-server": "^2.11.1", + "webpack-merge": "^4.1.0", + "webpack-notifier": "^1.5.1", + "yargs": "^8.0.2" + }, + "dependencies": { + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "dev": true, + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.4.3", + "minimist": "^1.2.0", + "object-assign": "^4.1.0", + "os-homedir": "^1.0.1", + "parse-json": "^2.2.0", + "require-from-string": "^1.1.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "postcss-load-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "dev": true, + "requires": { + "cosmiconfig": "^2.1.0", + "object-assign": "^4.1.0", + "postcss-load-options": "^1.2.0", + "postcss-load-plugins": "^2.3.0" + } + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "dev": true + }, + "vue-loader": { + "version": "13.7.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-13.7.3.tgz", + "integrity": "sha512-ACCwbfeC6HjY2pnDii+Zer+MZ6sdOtwvLmDXRK/BoD3WNR551V22R6KEagwHoTRJ0ZlIhpCBkptpCU6+Ri/05w==", + "dev": true, + "requires": { + "consolidate": "^0.14.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "lru-cache": "^4.1.1", + "postcss": "^6.0.8", + "postcss-load-config": "^1.1.0", + "postcss-selector-parser": "^2.0.0", + "prettier": "^1.7.0", + "resolve": "^1.4.0", + "source-map": "^0.6.1", + "vue-hot-reload-api": "^2.2.0", + "vue-style-loader": "^3.0.0", + "vue-template-es2015-compiler": "^1.6.0" + } + }, + "vue-style-loader": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.1.2.tgz", + "integrity": "sha512-ICtVdK/p+qXWpdSs2alWtsXt9YnDoYjQe0w5616j9+/EhjoxZkbun34uWgsMFnC1MhrMMwaWiImz3K2jK1Yp2Q==", + "dev": true, + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + } + } + }, + "launch-editor": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.2.1.tgz", + "integrity": "sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "shell-quote": "^1.6.1" + } + }, + "launch-editor-middleware": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/launch-editor-middleware/-/launch-editor-middleware-2.2.1.tgz", + "integrity": "sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==", + "dev": true, + "requires": { + "launch-editor": "^2.2.1" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=", + "dev": true + }, + "lcid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", + "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", + "requires": { + "invert-kv": "^1.0.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "loader-fs-cache": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz", + "integrity": "sha1-VuC/CL2XCLJqdltoUJhAyN7J/bw=", + "dev": true, + "requires": { + "find-cache-dir": "^0.1.1", + "mkdirp": "0.5.1" + }, + "dependencies": { + "find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", + "dev": true, + "requires": { + "find-up": "^1.0.0" + } + } + } + }, + "loader-runner": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.3.0.tgz", + "integrity": "sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI=", + "dev": true + }, + "loader-utils": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz", + "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=", + "requires": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg==" + }, + "lodash._baseassign": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", + "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", + "dev": true, + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash.keys": "^3.0.0" + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._bindcallback": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", + "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", + "dev": true + }, + "lodash._createassigner": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", + "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", + "dev": true, + "requires": { + "lodash._bindcallback": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash.restparam": "^3.0.0" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha1-soqmKIorn8ZRA1x3EfZathkDMaY=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.defaultsdeep": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.0.tgz", + "integrity": "sha1-vsECT4WxvZbL6kBbI8FK1kQ6b4E=", + "dev": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha1-G6+lAF3p3W9PJmaMMMo3IwzJaJw=", + "dev": true + }, + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + }, + "lodash.mergewith": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz", + "integrity": "sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==" + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.tail": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", + "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=" + }, + "lodash.transform": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", + "integrity": "sha1-EjBkIvYzJK7YSD0/ODMrX2cFR6A=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + } + }, + "loglevel": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", + "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "dev": true + }, + "long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=", + "dev": true + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "js-tokens": "^3.0.0 || ^4.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=", + "dev": true + }, + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "mamacro": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", + "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz", + "integrity": "sha512-UN1dNocxQq44IhJyMI4TU8phc2m9BddacHRPRjKGLYaF0jqd3xLz0jS0skpAU9WgYyoR4gHtUpzytNBS385FWQ==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=" + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "math-expression-evaluator": { + "version": "1.2.17", + "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz", + "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw=", + "dev": true + }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, + "md5": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/md5/-/md5-2.2.1.tgz", + "integrity": "sha1-U6s41f48iJG6RlMp6iP6wFQBJvk=", + "dev": true, + "requires": { + "charenc": "~0.0.1", + "crypt": "~0.0.1", + "is-buffer": "~1.1.1" + } + }, + "md5.js": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.4.tgz", + "integrity": "sha1-6b296UogpawYsENA/Fdk1bCdkB0=", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "mdn-data": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.2.0.tgz", + "integrity": "sha512-esDqNvsJB2q5V28+u7NdtdMg6Rmg4khQmAVSjUiX7BY/7haIv0K2yWM43hYp0or+3nvG7+UaTF1JHz31hgU1TA==", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "requires": { + "source-map": "^0.6.1" + } + }, + "merge2": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.2.2.tgz", + "integrity": "sha512-bgM8twH86rWni21thii6WCMQMRMmwqqdW3sGWi9IipnVAszdLXRjwDwAnyrVXo6DuP3AjRMMttZKUB48QWIFGg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + } + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + }, + "mime-db": { + "version": "1.36.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.36.0.tgz", + "integrity": "sha512-L+xvyD9MkoYMXb1jAmzI/lWYAxAMCPvIBSWur0PZ5nOf5euahRLVqH//FKW9mWp2lkqUgYiXPgkzfMUFi4zVDw==" + }, + "mime-types": { + "version": "2.1.20", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.20.tgz", + "integrity": "sha512-HrkrPaP9vGuWbLK1B1FfgAkbqNjIuy4eHlIYnFi7kamZyLLrGlo2mpcx0bBmNpKqBtYtAfGbodDddIgddSJC2A==", + "requires": { + "mime-db": "~1.36.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, + "mini-css-extract-plugin": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.4.2.tgz", + "integrity": "sha512-ots7URQH4wccfJq9Ssrzu2+qupbncAce4TmTzunI9CIwlQMp2XI+WNUw6xWF6MMAGAm1cbUVINrSjATaVMyKXg==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "dependencies": { + "ajv": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", + "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mixin-deep": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz", + "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "mixin-object": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", + "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", + "requires": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-in": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", + "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=" + } + } + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "requires": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + } + }, + "multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=", + "dev": true + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "dev": true + }, + "nan": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.0.tgz", + "integrity": "sha512-F4miItu2rGnV2ySkXOQoA8FKz/SR2Q2sWP0sbTxNxz/tuokeC8WxOhPMcwi0qIyGtVn/rrSeLbvVkznqCdwYnw==" + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", + "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=", + "dev": true + }, + "neo-async": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.5.2.tgz", + "integrity": "sha512-vdqTKI9GBIYcAEbFAcpKPErKINfPF5zIuz3/niBfq8WUZjpT2tytLlFVrBgWdOtqI4uaA/Rb6No0hux39XXDuw==" + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "requires": { + "lower-case": "^1.1.1" + } + }, + "node-forge": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", + "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "dev": true + }, + "node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + } + } + }, + "node-ipc": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.1.tgz", + "integrity": "sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w==", + "dev": true, + "requires": { + "event-pubsub": "4.3.0", + "js-message": "1.0.5", + "js-queue": "2.0.0" + } + }, + "node-libs-browser": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.1.0.tgz", + "integrity": "sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg==", + "dev": true, + "requires": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^1.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.0", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.10.3", + "vm-browserify": "0.0.4" + } + }, + "node-notifier": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.2.1.tgz", + "integrity": "sha512-MIBs+AAd6dJ2SklbbE8RUDRlIVhU8MaNLh1A9SUZDUHPiZkWLFde6UNwG41yQHZEToHgJMXqyVZ9UcS/ReOVTg==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "semver": "^5.4.1", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node-releases": { + "version": "1.0.0-alpha.11", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.0.0-alpha.11.tgz", + "integrity": "sha512-CaViu+2FqTNYOYNihXa5uPS/zry92I3vPU4nCB6JB3OeZ2UGtOpF5gRwuN4+m3hbEcL47bOXyun1jX2iC+3uEQ==", + "dev": true, + "requires": { + "semver": "^5.3.0" + } + }, + "node-sass": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.9.3.tgz", + "integrity": "sha512-XzXyGjO+84wxyH7fV6IwBOTrEBe2f0a6SBze9QWWYR/cL74AcQUks2AsqcCZenl/Fp/JVbuEaLpgrLtocwBUww==", + "requires": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash.assign": "^4.2.0", + "lodash.clonedeep": "^4.3.2", + "lodash.mergewith": "^4.6.0", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.10.0", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "2.87.0", + "sass-graph": "^2.2.4", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" + } + } + }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + } + }, + "normalize-wheel": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/normalize-wheel/-/normalize-wheel-1.0.1.tgz", + "integrity": "sha1-rsiGr/2wRQcNhWRH32Ls+GFG7EU=" + }, + "npm": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.4.1.tgz", + "integrity": "sha512-mXJL1NTVU136PtuopXCUQaNWuHlXCTp4McwlSW8S9/Aj8OEPAlSBgo8og7kJ01MjCDrkmqFQTvN5tTEhBMhXQg==", + "requires": { + "JSONStream": "^1.3.4", + "abbrev": "~1.1.1", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "~1.2.0", + "archy": "~1.0.0", + "bin-links": "^1.1.2", + "bluebird": "~3.5.1", + "byte-size": "^4.0.3", + "cacache": "^11.2.0", + "call-limit": "~1.1.0", + "chownr": "~1.0.1", + "ci-info": "^1.4.0", + "cli-columns": "^3.1.2", + "cli-table3": "^0.5.0", + "cmd-shim": "~2.0.2", + "columnify": "~1.5.4", + "config-chain": "~1.1.11", + "debuglog": "*", + "detect-indent": "~5.0.0", + "detect-newline": "^2.1.0", + "dezalgo": "~1.0.3", + "editor": "~1.0.0", + "figgy-pudding": "^3.4.1", + "find-npm-prefix": "^1.0.2", + "fs-vacuum": "~1.2.10", + "fs-write-stream-atomic": "~1.0.10", + "gentle-fs": "^2.0.1", + "glob": "~7.1.2", + "graceful-fs": "~4.1.11", + "has-unicode": "~2.0.1", + "hosted-git-info": "^2.7.1", + "iferr": "^1.0.2", + "imurmurhash": "*", + "inflight": "~1.0.6", + "inherits": "~2.0.3", + "ini": "^1.3.5", + "init-package-json": "^1.10.3", + "is-cidr": "^2.0.6", + "json-parse-better-errors": "^1.0.2", + "lazy-property": "~1.0.0", + "libcipm": "^2.0.2", + "libnpmhook": "^4.0.1", + "libnpx": "^10.2.0", + "lock-verify": "^2.0.2", + "lockfile": "^1.0.4", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "lru-cache": "^4.1.3", + "meant": "~1.0.1", + "mississippi": "^3.0.0", + "mkdirp": "~0.5.1", + "move-concurrently": "^1.0.1", + "node-gyp": "^3.8.0", + "nopt": "~4.0.1", + "normalize-package-data": "~2.4.0", + "npm-audit-report": "^1.3.1", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "~3.0.0", + "npm-lifecycle": "^2.1.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.11", + "npm-pick-manifest": "^2.1.0", + "npm-profile": "^3.0.2", + "npm-registry-client": "^8.6.0", + "npm-registry-fetch": "^1.1.0", + "npm-user-validate": "~1.0.0", + "npmlog": "~4.1.2", + "once": "~1.4.0", + "opener": "^1.5.0", + "osenv": "^0.1.5", + "pacote": "^8.1.6", + "path-is-inside": "~1.0.2", + "promise-inflight": "~1.0.1", + "qrcode-terminal": "^0.12.0", + "query-string": "^6.1.0", + "qw": "~1.0.1", + "read": "~1.0.7", + "read-cmd-shim": "~1.0.1", + "read-installed": "~4.0.3", + "read-package-json": "^2.0.13", + "read-package-tree": "^5.2.1", + "readable-stream": "^2.3.6", + "readdir-scoped-modules": "*", + "request": "^2.88.0", + "retry": "^0.12.0", + "rimraf": "~2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.5.0", + "sha": "~2.0.1", + "slide": "~1.1.6", + "sorted-object": "~2.0.1", + "sorted-union-stream": "~2.1.3", + "ssri": "^6.0.0", + "stringify-package": "^1.0.0", + "tar": "^4.4.6", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "uid-number": "0.0.6", + "umask": "~1.1.0", + "unique-filename": "~1.1.0", + "unpipe": "~1.0.0", + "update-notifier": "^2.5.0", + "uuid": "^3.3.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "~3.0.0", + "which": "^1.3.1", + "worker-farm": "^1.6.0", + "write-file-atomic": "^2.3.0" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.4", + "bundled": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.4.1", + "bundled": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "ajv": { + "version": "5.5.2", + "bundled": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-align": { + "version": "2.0.0", + "bundled": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "ansi-styles": { + "version": "3.2.1", + "bundled": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true + }, + "ansistyles": { + "version": "0.1.3", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "archy": { + "version": "1.0.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "asap": { + "version": "2.0.6", + "bundled": true + }, + "asn1": { + "version": "0.2.4", + "bundled": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "bundled": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true + }, + "aws-sign2": { + "version": "0.7.0", + "bundled": true + }, + "aws4": { + "version": "1.8.0", + "bundled": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bin-links": { + "version": "1.1.2", + "bundled": true, + "requires": { + "bluebird": "^3.5.0", + "cmd-shim": "^2.0.2", + "gentle-fs": "^2.0.0", + "graceful-fs": "^4.1.11", + "write-file-atomic": "^2.3.0" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.5.1", + "bundled": true + }, + "boxen": { + "version": "1.3.0", + "bundled": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.0.0", + "bundled": true + }, + "builtin-modules": { + "version": "1.1.1", + "bundled": true + }, + "builtins": { + "version": "1.0.3", + "bundled": true + }, + "byline": { + "version": "5.0.0", + "bundled": true + }, + "byte-size": { + "version": "4.0.3", + "bundled": true + }, + "cacache": { + "version": "11.2.0", + "bundled": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "figgy-pudding": "^3.1.0", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.3", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.0", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + } + }, + "call-limit": { + "version": "1.1.0", + "bundled": true + }, + "camelcase": { + "version": "4.1.0", + "bundled": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true + }, + "chalk": { + "version": "2.4.1", + "bundled": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true + }, + "ci-info": { + "version": "1.4.0", + "bundled": true + }, + "cidr-regex": { + "version": "2.0.9", + "bundled": true, + "requires": { + "ip-regex": "^2.1.0" + } + }, + "cli-boxes": { + "version": "1.0.0", + "bundled": true + }, + "cli-columns": { + "version": "3.1.2", + "bundled": true, + "requires": { + "string-width": "^2.0.0", + "strip-ansi": "^3.0.1" + } + }, + "cli-table3": { + "version": "0.5.0", + "bundled": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + } + }, + "cliui": { + "version": "4.1.0", + "bundled": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "bundled": true + }, + "cmd-shim": { + "version": "2.0.2", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" + } + }, + "co": { + "version": "4.6.0", + "bundled": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "color-convert": { + "version": "1.9.1", + "bundled": true, + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.3", + "bundled": true + }, + "colors": { + "version": "1.1.2", + "bundled": true, + "optional": true + }, + "columnify": { + "version": "1.5.4", + "bundled": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.6", + "bundled": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "concat-stream": { + "version": "1.6.2", + "bundled": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.11", + "bundled": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "configstore": { + "version": "3.1.2", + "bundled": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "copy-concurrently": { + "version": "1.0.5", + "bundled": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "create-error-class": { + "version": "3.0.2", + "bundled": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "bundled": true + }, + "cyclist": { + "version": "0.2.2", + "bundled": true + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.1.0", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true + }, + "decamelize": { + "version": "1.2.0", + "bundled": true + }, + "decode-uri-component": { + "version": "0.2.0", + "bundled": true + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true + }, + "defaults": { + "version": "1.0.3", + "bundled": true, + "requires": { + "clone": "^1.0.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "detect-indent": { + "version": "5.0.0", + "bundled": true + }, + "detect-newline": { + "version": "2.1.0", + "bundled": true + }, + "dezalgo": { + "version": "1.0.3", + "bundled": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "bundled": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "5.0.1", + "bundled": true + }, + "duplexer3": { + "version": "0.1.4", + "bundled": true + }, + "duplexify": { + "version": "3.6.0", + "bundled": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editor": { + "version": "1.0.0", + "bundled": true + }, + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "^1.4.0" + } + }, + "err-code": { + "version": "1.1.2", + "bundled": true + }, + "errno": { + "version": "0.1.7", + "bundled": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es6-promise": { + "version": "4.2.4", + "bundled": true + }, + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true + }, + "execa": { + "version": "0.7.0", + "bundled": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "extend": { + "version": "3.0.2", + "bundled": true + }, + "extsprintf": { + "version": "1.3.0", + "bundled": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "bundled": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "bundled": true + }, + "figgy-pudding": { + "version": "3.4.1", + "bundled": true + }, + "find-npm-prefix": { + "version": "1.0.2", + "bundled": true + }, + "find-up": { + "version": "2.1.0", + "bundled": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flush-write-stream": { + "version": "1.0.3", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.3.2", + "bundled": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs-vacuum": { + "version": "1.2.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "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": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "genfun": { + "version": "4.0.1", + "bundled": true + }, + "gentle-fs": { + "version": "2.0.1", + "bundled": true, + "requires": { + "aproba": "^1.1.2", + "fs-vacuum": "^1.2.10", + "graceful-fs": "^4.1.11", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "path-is-inside": "^1.0.2", + "read-cmd-shim": "^1.0.1", + "slide": "^1.1.6" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "get-caller-file": { + "version": "1.0.2", + "bundled": true + }, + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "bundled": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "global-dirs": { + "version": "0.1.1", + "bundled": true, + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "bundled": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "2.0.0", + "bundled": true + }, + "har-validator": { + "version": "5.1.0", + "bundled": true, + "requires": { + "ajv": "^5.3.0", + "har-schema": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "bundled": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "hosted-git-info": { + "version": "2.7.1", + "bundled": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "bundled": true + }, + "http-proxy-agent": { + "version": "2.1.0", + "bundled": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "http-signature": { + "version": "1.2.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "2.2.1", + "bundled": true, + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "iferr": { + "version": "1.0.2", + "bundled": true + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-lazy": { + "version": "2.1.0", + "bundled": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true + }, + "init-package-json": { + "version": "1.10.3", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "bundled": true + }, + "ip": { + "version": "1.1.5", + "bundled": true + }, + "ip-regex": { + "version": "2.1.0", + "bundled": true + }, + "is-builtin-module": { + "version": "1.0.0", + "bundled": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-ci": { + "version": "1.1.0", + "bundled": true, + "requires": { + "ci-info": "^1.0.0" + } + }, + "is-cidr": { + "version": "2.0.6", + "bundled": true, + "requires": { + "cidr-regex": "^2.0.8" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "bundled": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "bundled": true + }, + "is-obj": { + "version": "1.0.1", + "bundled": true + }, + "is-path-inside": { + "version": "1.0.1", + "bundled": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-redirect": { + "version": "1.0.0", + "bundled": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "bundled": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "bundled": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "jsonparse": { + "version": "1.3.1", + "bundled": true + }, + "jsprim": { + "version": "1.4.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "latest-version": { + "version": "3.1.0", + "bundled": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lazy-property": { + "version": "1.0.0", + "bundled": true + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "libcipm": { + "version": "2.0.2", + "bundled": true, + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "graceful-fs": "^4.1.11", + "lock-verify": "^2.0.2", + "mkdirp": "^0.5.1", + "npm-lifecycle": "^2.0.3", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "pacote": "^8.1.6", + "protoduck": "^5.0.0", + "read-package-json": "^2.0.13", + "rimraf": "^2.6.2", + "worker-farm": "^1.6.0" + } + }, + "libnpmhook": { + "version": "4.0.1", + "bundled": true, + "requires": { + "figgy-pudding": "^3.1.0", + "npm-registry-fetch": "^3.0.0" + }, + "dependencies": { + "npm-registry-fetch": { + "version": "3.1.1", + "bundled": true, + "requires": { + "bluebird": "^3.5.1", + "figgy-pudding": "^3.1.0", + "lru-cache": "^4.1.2", + "make-fetch-happen": "^4.0.0", + "npm-package-arg": "^6.0.0" + } + } + } + }, + "libnpx": { + "version": "10.2.0", + "bundled": true, + "requires": { + "dotenv": "^5.0.1", + "npm-package-arg": "^6.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.0", + "update-notifier": "^2.3.0", + "which": "^1.3.0", + "y18n": "^4.0.0", + "yargs": "^11.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lock-verify": { + "version": "2.0.2", + "bundled": true, + "requires": { + "npm-package-arg": "^5.1.2 || 6", + "semver": "^5.4.1" + } + }, + "lockfile": { + "version": "1.0.4", + "bundled": true, + "requires": { + "signal-exit": "^3.0.2" + } + }, + "lodash._baseindexof": { + "version": "3.1.0", + "bundled": true + }, + "lodash._baseuniq": { + "version": "4.6.0", + "bundled": true, + "requires": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "bundled": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "bundled": true + }, + "lodash._createcache": { + "version": "3.1.2", + "bundled": true, + "requires": { + "lodash._getnative": "^3.0.0" + } + }, + "lodash._createset": { + "version": "4.0.3", + "bundled": true + }, + "lodash._getnative": { + "version": "3.9.1", + "bundled": true + }, + "lodash._root": { + "version": "3.0.1", + "bundled": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "bundled": true + }, + "lodash.restparam": { + "version": "3.6.1", + "bundled": true + }, + "lodash.union": { + "version": "4.6.0", + "bundled": true + }, + "lodash.uniq": { + "version": "4.5.0", + "bundled": true + }, + "lodash.without": { + "version": "4.4.0", + "bundled": true + }, + "lowercase-keys": { + "version": "1.0.1", + "bundled": true + }, + "lru-cache": { + "version": "4.1.3", + "bundled": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "bundled": true, + "requires": { + "pify": "^3.0.0" + } + }, + "make-fetch-happen": { + "version": "4.0.1", + "bundled": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^11.0.1", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^4.1.2", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, + "meant": { + "version": "1.0.1", + "bundled": true + }, + "mem": { + "version": "1.1.0", + "bundled": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "mime-db": { + "version": "1.35.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.19", + "bundled": true, + "requires": { + "mime-db": "~1.35.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "bundled": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "minipass": { + "version": "2.3.3", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mississippi": { + "version": "3.0.0", + "bundled": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "bundled": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true + }, + "mute-stream": { + "version": "0.0.7", + "bundled": true + }, + "node-fetch-npm": { + "version": "2.0.2", + "bundled": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-gyp": { + "version": "3.8.0", + "bundled": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "nopt": { + "version": "3.0.6", + "bundled": true, + "requires": { + "abbrev": "1" + } + }, + "semver": { + "version": "5.3.0", + "bundled": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } + } + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "bundled": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-audit-report": { + "version": "1.3.1", + "bundled": true, + "requires": { + "cli-table3": "^0.5.0", + "console-control-strings": "^1.1.0" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true + }, + "npm-cache-filename": { + "version": "1.0.2", + "bundled": true + }, + "npm-install-checks": { + "version": "3.0.0", + "bundled": true, + "requires": { + "semver": "^2.3.0 || 3.x || 4 || 5" + } + }, + "npm-lifecycle": { + "version": "2.1.0", + "bundled": true, + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.11", + "node-gyp": "^3.8.0", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + } + }, + "npm-logical-tree": { + "version": "1.2.1", + "bundled": true + }, + "npm-package-arg": { + "version": "6.1.0", + "bundled": true, + "requires": { + "hosted-git-info": "^2.6.0", + "osenv": "^0.1.5", + "semver": "^5.5.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.1.11", + "bundled": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "2.1.0", + "bundled": true, + "requires": { + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "npm-profile": { + "version": "3.0.2", + "bundled": true, + "requires": { + "aproba": "^1.1.2 || 2", + "make-fetch-happen": "^2.5.0 || 3 || 4" + } + }, + "npm-registry-client": { + "version": "8.6.0", + "bundled": true, + "requires": { + "concat-stream": "^1.5.2", + "graceful-fs": "^4.1.6", + "normalize-package-data": "~1.0.1 || ^2.0.0", + "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "npmlog": "2 || ^3.1.0 || ^4.0.0", + "once": "^1.3.3", + "request": "^2.74.0", + "retry": "^0.10.0", + "safe-buffer": "^5.1.1", + "semver": "2 >=2.2.1 || 3.x || 4 || 5", + "slide": "^1.1.3", + "ssri": "^5.2.4" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "bundled": true + }, + "ssri": { + "version": "5.3.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.1" + } + } + } + }, + "npm-registry-fetch": { + "version": "1.1.0", + "bundled": true, + "requires": { + "bluebird": "^3.5.1", + "figgy-pudding": "^2.0.1", + "lru-cache": "^4.1.2", + "make-fetch-happen": "^3.0.0", + "npm-package-arg": "^6.0.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "cacache": { + "version": "10.0.4", + "bundled": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + }, + "dependencies": { + "mississippi": { + "version": "2.0.0", + "bundled": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + } + } + }, + "figgy-pudding": { + "version": "2.0.1", + "bundled": true + }, + "make-fetch-happen": { + "version": "3.0.0", + "bundled": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^10.0.4", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.0", + "lru-cache": "^4.1.2", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^3.0.1", + "ssri": "^5.2.4" + } + }, + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "smart-buffer": { + "version": "1.1.15", + "bundled": true + }, + "socks": { + "version": "1.1.10", + "bundled": true, + "requires": { + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" + } + }, + "socks-proxy-agent": { + "version": "3.0.1", + "bundled": true, + "requires": { + "agent-base": "^4.1.0", + "socks": "^1.1.10" + } + }, + "ssri": { + "version": "5.3.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.1" + } + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npm-user-validate": { + "version": "1.0.0", + "bundled": true + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "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", + "bundled": true + }, + "oauth-sign": { + "version": "0.9.0", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.0", + "bundled": true + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-locale": { + "version": "2.1.0", + "bundled": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true + }, + "p-limit": { + "version": "1.2.0", + "bundled": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "bundled": true + }, + "package-json": { + "version": "4.0.1", + "bundled": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "pacote": { + "version": "8.1.6", + "bundled": true, + "requires": { + "bluebird": "^3.5.1", + "cacache": "^11.0.2", + "get-stream": "^3.0.0", + "glob": "^7.1.2", + "lru-cache": "^4.1.3", + "make-fetch-happen": "^4.0.1", + "minimatch": "^3.0.4", + "minipass": "^2.3.3", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.10", + "npm-pick-manifest": "^2.1.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.5.0", + "ssri": "^6.0.0", + "tar": "^4.4.3", + "unique-filename": "^1.1.0", + "which": "^1.3.0" + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "path-exists": { + "version": "3.0.0", + "bundled": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "path-is-inside": { + "version": "1.0.2", + "bundled": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true + }, + "performance-now": { + "version": "2.1.0", + "bundled": true + }, + "pify": { + "version": "3.0.0", + "bundled": true + }, + "prepend-http": { + "version": "1.0.4", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true + }, + "promise-retry": { + "version": "1.1.1", + "bundled": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "bundled": true + } + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "requires": { + "read": "1" + } + }, + "proto-list": { + "version": "1.2.4", + "bundled": true + }, + "protoduck": { + "version": "5.0.0", + "bundled": true, + "requires": { + "genfun": "^4.0.1" + } + }, + "prr": { + "version": "1.0.1", + "bundled": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true + }, + "psl": { + "version": "1.1.29", + "bundled": true + }, + "pump": { + "version": "3.0.0", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "bundled": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "bundled": true + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true + }, + "qs": { + "version": "6.5.2", + "bundled": true + }, + "query-string": { + "version": "6.1.0", + "bundled": true, + "requires": { + "decode-uri-component": "^0.2.0", + "strict-uri-encode": "^2.0.0" + } + }, + "qw": { + "version": "1.0.1", + "bundled": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true + } + } + }, + "read": { + "version": "1.0.7", + "bundled": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "1.0.1", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-installed": { + "version": "4.0.3", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + } + }, + "read-package-json": { + "version": "2.0.13", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "slash": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.2.1", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "once": "^1.3.0", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "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" + } + }, + "readdir-scoped-modules": { + "version": "1.0.2", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "bundled": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "bundled": true, + "requires": { + "rc": "^1.0.1" + } + }, + "request": { + "version": "2.88.0", + "bundled": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true + }, + "resolve-from": { + "version": "4.0.0", + "bundled": true + }, + "retry": { + "version": "0.12.0", + "bundled": true + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "requires": { + "glob": "^7.0.5" + } + }, + "run-queue": { + "version": "1.0.3", + "bundled": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "semver": { + "version": "5.5.0", + "bundled": true + }, + "semver-diff": { + "version": "2.1.0", + "bundled": true, + "requires": { + "semver": "^5.0.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "sha": { + "version": "2.0.1", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "readable-stream": "^2.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "slash": { + "version": "1.0.0", + "bundled": true + }, + "slide": { + "version": "1.1.6", + "bundled": true + }, + "smart-buffer": { + "version": "4.0.1", + "bundled": true + }, + "socks": { + "version": "2.2.0", + "bundled": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.0.1" + } + }, + "socks-proxy-agent": { + "version": "4.0.1", + "bundled": true, + "requires": { + "agent-base": "~4.2.0", + "socks": "~2.2.0" + } + }, + "sorted-object": { + "version": "2.0.1", + "bundled": true + }, + "sorted-union-stream": { + "version": "2.1.3", + "bundled": true, + "requires": { + "from2": "^1.3.0", + "stream-iterate": "^1.1.0" + }, + "dependencies": { + "from2": { + "version": "1.3.0", + "bundled": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.10" + } + }, + "isarray": { + "version": "0.0.1", + "bundled": true + }, + "readable-stream": { + "version": "1.1.14", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + } + } + }, + "spdx-correct": { + "version": "3.0.0", + "bundled": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "bundled": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "bundled": true + }, + "sshpk": { + "version": "1.14.2", + "bundled": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.0", + "bundled": true + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-iterate": { + "version": "1.2.0", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "stream-shift": "^1.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "bundled": true + }, + "strict-uri-encode": { + "version": "2.0.0", + "bundled": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-package": { + "version": "1.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + }, + "supports-color": { + "version": "5.4.0", + "bundled": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "4.4.6", + "bundled": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.3", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + }, + "dependencies": { + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, + "term-size": { + "version": "1.2.0", + "bundled": true, + "requires": { + "execa": "^0.7.0" + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "through": { + "version": "2.3.8", + "bundled": true + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + } + }, + "timed-out": { + "version": "4.0.1", + "bundled": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true + }, + "tough-cookie": { + "version": "2.4.3", + "bundled": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "bundled": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true + }, + "umask": { + "version": "1.1.0", + "bundled": true + }, + "unique-filename": { + "version": "1.1.0", + "bundled": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "1.0.0", + "bundled": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "bundled": true + }, + "unzip-response": { + "version": "2.0.1", + "bundled": true + }, + "update-notifier": { + "version": "2.5.0", + "bundled": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "bundled": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "util-extend": { + "version": "1.0.3", + "bundled": true + }, + "uuid": { + "version": "3.3.2", + "bundled": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "bundled": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "verror": { + "version": "1.10.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "1.3.1", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "requires": { + "string-width": "^1.0.2" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "widest-line": { + "version": "2.0.0", + "bundled": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "worker-farm": { + "version": "1.6.0", + "bundled": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "write-file-atomic": { + "version": "2.3.0", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "bundled": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true + }, + "y18n": { + "version": "4.0.0", + "bundled": true + }, + "yallist": { + "version": "2.1.2", + "bundled": true + }, + "yargs": { + "version": "11.0.0", + "bundled": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + }, + "dependencies": { + "y18n": { + "version": "3.2.1", + "bundled": true + } + } + }, + "yargs-parser": { + "version": "9.0.2", + "bundled": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "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" + } + }, + "nth-check": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz", + "integrity": "sha1-mSms32KPwsQQmN6rgqxYDPFJquQ=", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-hash": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.0.tgz", + "integrity": "sha512-05KzQ70lSeGSrZJQXE5wNDiTkBJDlUT/myi6RX9dVIvz7a7Qh4oH93BQdiPMn27nldYvVQCKMUaM83AfizZlsQ==", + "dev": true + }, + "object-keys": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz", + "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag==", + "dev": true + }, + "object-path": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/object-path/-/object-path-0.9.2.tgz", + "integrity": "sha1-D9mnT8X60a45aLWGvaXGMr1sBaU=", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.getownpropertydescriptors": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", + "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" + } + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + }, + "dependencies": { + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + } + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz", + "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.6.1", + "function-bind": "^1.1.0", + "has": "^1.0.1" + } + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", + "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "dev": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "opener": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.1.tgz", + "integrity": "sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA==", + "dev": true + }, + "opn": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", + "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", + "dev": true, + "requires": { + "is-wsl": "^1.1.0" + } + }, + "optionator": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", + "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" + }, + "dependencies": { + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", + "dev": true + } + } + }, + "ora": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-2.1.0.tgz", + "integrity": "sha512-hNNlAd3gfv/iPmsNxYoAPLvxg7HuPozww7fFonMZvL84tP6Ox5igfk5j/+a9rtJJwqMgKK+JgWsAQik5o0HTLA==", + "dev": true, + "requires": { + "chalk": "^2.3.1", + "cli-cursor": "^2.1.0", + "cli-spinners": "^1.1.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^4.0.0", + "wcwidth": "^1.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "original": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "requires": { + "url-parse": "^1.4.3" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" + }, + "os-locale": { + "version": "1.4.0", + "resolved": "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", + "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "requires": { + "lcid": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", + "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "pako": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.6.tgz", + "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", + "dev": true + }, + "parallel-transform": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", + "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "dev": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "dev": true, + "requires": { + "no-case": "^2.2.0" + } + }, + "parse-asn1": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.1.tgz", + "integrity": "sha512-KPx7flKXg775zZpnp9SxJlz00gTd4BmJ2yJufSc44gMCRrRQ7NSzAcSJQfifuOLgW6bEi+ftrALtsgALeB2Adw==", + "dev": true, + "requires": { + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3" + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "requires": { + "error-ex": "^1.2.0" + } + }, + "parseurl": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", + "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", + "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + }, + "path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + }, + "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=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" + } + } + }, + "pbkdf2": { + "version": "3.0.16", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.16.tgz", + "integrity": "sha512-y4CXP3thSxqf7c0qmOF+9UeOTrifiVTIM+u7NWlq+PRsHbr7r7dpCmvzrZxa96JJUNi0Y5w9VqG5ZNeCVMoDcA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=" + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "requires": { + "pinkie": "^2.0.0" + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + } + }, + "pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true + }, + "popper.js": { + "version": "1.14.4", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.14.4.tgz", + "integrity": "sha1-juwdj/AqWjoVLdQ0FKFce3n9abY=" + }, + "portfinder": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.17.tgz", + "integrity": "sha512-syFcRIRzVI1BoEFOCaAiizwDolh1S1YXSodsVhncbhjzjZQulhczNRbqnUl9N31Q4dKGOXsNDqxC2BWBgSMqeQ==", + "dev": true, + "requires": { + "async": "^1.5.2", + "debug": "^2.2.0", + "mkdirp": "0.5.x" + }, + "dependencies": { + "async": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", + "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", + "dev": true + } + } + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, + "postcss-calc": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-5.3.1.tgz", + "integrity": "sha1-d7rnypKK2FcW4v2kLyYb98HWW14=", + "dev": true, + "requires": { + "postcss": "^5.0.2", + "postcss-message-helpers": "^2.0.0", + "reduce-css-calc": "^1.2.6" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-colormin": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-2.2.2.tgz", + "integrity": "sha1-ZjFBfV8OkJo9fsJrJMio0eT5bks=", + "dev": true, + "requires": { + "colormin": "^1.0.5", + "postcss": "^5.0.13", + "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-convert-values": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz", + "integrity": "sha1-u9hZPFwf0uPRwyK7kl3K6Nrk1i0=", + "dev": true, + "requires": { + "postcss": "^5.0.11", + "postcss-value-parser": "^3.1.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-comments": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz", + "integrity": "sha1-vv6J+v1bPazlzM5Rt2uBUUvgDj0=", + "dev": true, + "requires": { + "postcss": "^5.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz", + "integrity": "sha1-uavye4isGIFYpesSq8riAmO5GTI=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-empty": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz", + "integrity": "sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU=", + "dev": true, + "requires": { + "postcss": "^5.0.14" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-overridden": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz", + "integrity": "sha1-ix6vVU9ob7KIzYdMVWZ7CqNmjVg=", + "dev": true, + "requires": { + "postcss": "^5.0.16" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-discard-unused": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz", + "integrity": "sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM=", + "dev": true, + "requires": { + "postcss": "^5.0.14", + "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-filter-plugins": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz", + "integrity": "sha512-T53GVFsdinJhgwm7rg1BzbeBRomOg9y5MBVhGcsV0CxurUdVj1UlPdKtn7aqYA/c/QVkzKMjq2bSV5dKG5+AwQ==", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-load-config": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-2.0.0.tgz", + "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", + "dev": true, + "requires": { + "cosmiconfig": "^4.0.0", + "import-cwd": "^2.0.0" + } + }, + "postcss-load-options": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-options/-/postcss-load-options-1.2.0.tgz", + "integrity": "sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw=", + "requires": { + "cosmiconfig": "^2.1.0", + "object-assign": "^4.1.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.4.3", + "minimist": "^1.2.0", + "object-assign": "^4.1.0", + "os-homedir": "^1.0.1", + "parse-json": "^2.2.0", + "require-from-string": "^1.1.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=" + } + } + }, + "postcss-load-plugins": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz", + "integrity": "sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI=", + "requires": { + "cosmiconfig": "^2.1.1", + "object-assign": "^4.1.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.4.3", + "minimist": "^1.2.0", + "object-assign": "^4.1.0", + "os-homedir": "^1.0.1", + "parse-json": "^2.2.0", + "require-from-string": "^1.1.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=" + } + } + }, + "postcss-loader": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-2.1.6.tgz", + "integrity": "sha512-hgiWSc13xVQAq25cVw80CH0l49ZKlAnU1hKPOdRrNj89bokRr/bZF2nT+hebPPF9c9xs8c3gw3Fr2nxtmXYnNg==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "postcss": "^6.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^0.4.0" + }, + "dependencies": { + "ajv": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", + "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "postcss-merge-idents": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz", + "integrity": "sha1-TFUwMTwI4dWzu/PSu8dH4njuonA=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.10", + "postcss-value-parser": "^3.1.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-merge-longhand": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz", + "integrity": "sha1-I9kM0Sewp3mUkVMyc5A0oaTz1lg=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-merge-rules": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz", + "integrity": "sha1-0d9d+qexrMO+VT8OnhDofGG19yE=", + "dev": true, + "requires": { + "browserslist": "^1.5.2", + "caniuse-api": "^1.5.2", + "postcss": "^5.0.4", + "postcss-selector-parser": "^2.2.2", + "vendors": "^1.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "browserslist": { + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz", + "integrity": "sha1-C9dnBCWL6CmyOYu1Dkti0aFmsLk=", + "dev": true, + "requires": { + "caniuse-db": "^1.0.30000639", + "electron-to-chromium": "^1.2.7" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-message-helpers": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz", + "integrity": "sha1-pPL0+rbk/gAvCu0ABHjN9S+bpg4=", + "dev": true + }, + "postcss-minify-font-values": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz", + "integrity": "sha1-S1jttWZB66fIR0qzUmyv17vey2k=", + "dev": true, + "requires": { + "object-assign": "^4.0.1", + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-minify-gradients": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz", + "integrity": "sha1-Xb2hE3NwP4PPtKPqOIHY11/15uE=", + "dev": true, + "requires": { + "postcss": "^5.0.12", + "postcss-value-parser": "^3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-minify-params": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz", + "integrity": "sha1-rSzgcTc7lDs9kwo/pZo1jCjW8fM=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.2", + "postcss-value-parser": "^3.0.2", + "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-minify-selectors": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz", + "integrity": "sha1-ssapjAByz5G5MtGkllCBFDEXNb8=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.2", + "has": "^1.0.1", + "postcss": "^5.0.14", + "postcss-selector-parser": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-modules-extract-imports": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz", + "integrity": "sha1-ZhQOzs447wa/DT41XWm/WdFB6oU=", + "dev": true, + "requires": { + "postcss": "^6.0.1" + } + }, + "postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } + }, + "postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", + "dev": true, + "requires": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } + }, + "postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", + "dev": true, + "requires": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + } + }, + "postcss-normalize-charset": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz", + "integrity": "sha1-757nEhLX/nWceO0WL2HtYrXLk/E=", + "dev": true, + "requires": { + "postcss": "^5.0.5" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-normalize-display-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.0.tgz", + "integrity": "sha1-lQ4Me+NEV3ChYP/9a2ZEw8DNj4k=", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-positions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.0.tgz", + "integrity": "sha1-7pNDq5gbgixjq3JhXszNCFZERaM=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.0.tgz", + "integrity": "sha1-txHFks8W+vn/V15C+hALZ5kIPv8=", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.0.tgz", + "integrity": "sha1-cYy20wpvrGrGqDDjLAbAfbxm/l0=", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.0.tgz", + "integrity": "sha1-A1HymIaqmB1D2RssK9GuptCvbSM=", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-unicode": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.0.tgz", + "integrity": "sha1-Ws1dR7rqXRdnSyzMSuUWb6iM35c=", + "dev": true, + "requires": { + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-normalize-url": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz", + "integrity": "sha1-EI90s/L82viRov+j6kWSJ5/HgiI=", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^1.4.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.0.tgz", + "integrity": "sha1-HafnaxCuY8EYJ/oE/Du0oe/pnMA=", + "dev": true, + "requires": { + "postcss": "^6.0.0", + "postcss-value-parser": "^3.0.0" + } + }, + "postcss-ordered-values": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz", + "integrity": "sha1-7sbCpntsQSqNsgQud/6NpD+VwR0=", + "dev": true, + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-reduce-idents": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz", + "integrity": "sha1-wsbSDMlYKE9qv75j92Cb9AkFmtM=", + "dev": true, + "requires": { + "postcss": "^5.0.4", + "postcss-value-parser": "^3.0.2" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-reduce-initial": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz", + "integrity": "sha1-aPgGlfBF0IJjqHmtJA343WT2ROo=", + "dev": true, + "requires": { + "postcss": "^5.0.4" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz", + "integrity": "sha1-/3b02CEkN7McKYpC0uFEQCV3GuE=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.8", + "postcss-value-parser": "^3.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-selector-parser": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz", + "integrity": "sha1-+UN3iGBsPJrO4W/+jYsWKX8nu5A=", + "requires": { + "flatten": "^1.0.2", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-svgo": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-2.1.6.tgz", + "integrity": "sha1-tt8YqmE7Zm4TPwittSGcJoSsEI0=", + "dev": true, + "requires": { + "is-svg": "^2.0.0", + "postcss": "^5.0.14", + "postcss-value-parser": "^3.2.3", + "svgo": "^0.7.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-unique-selectors": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz", + "integrity": "sha1-mB1X0p3csz57Hf4f1DuGSfkzyh0=", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "postcss-value-parser": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz", + "integrity": "sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU=", + "dev": true + }, + "postcss-zindex": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-zindex/-/postcss-zindex-2.2.0.tgz", + "integrity": "sha1-0hCd3AVbka9n/EyzsCWUZjnSryI=", + "dev": true, + "requires": { + "has": "^1.0.1", + "postcss": "^5.0.4", + "uniqs": "^2.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "chalk": { + "version": "1.1.3", + "resolved": "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "dependencies": { + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + } + } + }, + "has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", + "dev": true + }, + "postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "requires": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", + "dev": true, + "requires": { + "has-flag": "^1.0.0" + } + } + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "prettier": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.14.2.tgz", + "integrity": "sha512-McHPg0n1pIke+A/4VcaS2en+pTNjy4xF+Uuq86u/5dyDO59/TtFZtQ708QIRkEZ3qwKz3GVkVa6mpxK/CpB8Rg==" + }, + "pretty-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-2.1.1.tgz", + "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", + "dev": true, + "requires": { + "renderkid": "^2.0.1", + "utila": "~0.4" + } + }, + "private": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz", + "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + }, + "progress": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz", + "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "proxy-addr": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.4.tgz", + "integrity": "sha512-5erio2h9jp5CHGwcybmxmVqHmnCBZeewlfJ0pex+UW7Qny7OOZXTtH56TGNyBizkgiOwhJtMKrVzDTeKcySZwA==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.8.0" + } + }, + "prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "public-encrypt": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.2.tgz", + "integrity": "sha512-4kJ5Esocg8X3h8YgJsKAuoesBgB7mqH3eowiDzMUPKiRDDE7E/BqqZD1hnTByIaAFiwAw246YEltSq7tdrOH0Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" + }, + "pusher-js": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/pusher-js/-/pusher-js-4.3.1.tgz", + "integrity": "sha512-qs2SNG7eFyALKDCsHqeKh/i8B9uW7QoaSR3CeUJE2xjYjg5saUCgvYx3cHwXaVTSAP43nVNb0InDiX49wp42Qg==", + "requires": { + "faye-websocket": "0.9.4", + "tweetnacl": "^1.0.0", + "tweetnacl-util": "^0.15.0", + "xmlhttprequest": "^1.8.0" + }, + "dependencies": { + "faye-websocket": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.9.4.tgz", + "integrity": "sha1-iFk0x57/sECVSeDAo4Ae0XpAza0=", + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "tweetnacl": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.0.tgz", + "integrity": "sha1-cT2LgY2kIGh0C/aDhtBHnmb8ins=" + } + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" + }, + "query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=", + "dev": true, + "requires": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "querystringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.0.0.tgz", + "integrity": "sha512-eTPo5t/4bgaMNZxyjWx6N2a6AuE0mq51KWvpc7nU/MAqixcI6v6KrGUKES0HaomdnolQBBXU/++X6/QQ9KL4tw==", + "dev": true + }, + "randomatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.0.tgz", + "integrity": "sha512-KnGPVE0lo2WoXxIZ7cPR8YBpiol4gsSuOwDSg410oHh80ZMp5EiypNqL2K4Z77vJn6lB5rap7IkAmcUlalcnBQ==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + } + } + }, + "randombytes": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.0.6.tgz", + "integrity": "sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", + "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=", + "dev": true + }, + "raw-body": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", + "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", + "dev": true, + "requires": { + "bytes": "3.0.0", + "http-errors": "1.6.2", + "iconv-lite": "0.4.19", + "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", + "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=", + "dev": true + }, + "http-errors": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", + "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", + "dev": true, + "requires": { + "depd": "1.1.1", + "inherits": "2.0.3", + "setprototypeof": "1.0.3", + "statuses": ">= 1.3.1 < 2" + } + }, + "setprototypeof": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", + "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=", + "dev": true + } + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "requires": { + "pinkie-promise": "^2.0.0" + } + } + } + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "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" + } + }, + "readdirp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", + "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" + } + }, + "recast": { + "version": "0.11.23", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.11.23.tgz", + "integrity": "sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM=", + "dev": true, + "requires": { + "ast-types": "0.9.6", + "esprima": "~3.1.0", + "private": "~0.1.5", + "source-map": "~0.5.0" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "reduce-css-calc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz", + "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=", + "dev": true, + "requires": { + "balanced-match": "^0.4.2", + "math-expression-evaluator": "^1.2.14", + "reduce-function-call": "^1.0.1" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "reduce-function-call": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz", + "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=", + "dev": true, + "requires": { + "balanced-match": "^0.4.2" + }, + "dependencies": { + "balanced-match": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", + "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg=", + "dev": true + } + } + }, + "regenerate": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", + "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "dev": true + }, + "regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "regenerator-transform": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.10.1.tgz", + "integrity": "sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q==", + "dev": true, + "requires": { + "babel-runtime": "^6.18.0", + "babel-types": "^6.19.0", + "private": "^0.1.6" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regex-parser": { + "version": "2.2.9", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.9.tgz", + "integrity": "sha512-VncXxOF6uFlYog5prG2j+e2UGJeam5MfNiJnB/qEgo4KTnMm2XrELCg4rNZ6IlaEUZnGlb8aB6lXowCRQtTkkA==", + "dev": true + }, + "regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true + }, + "regexpu-core": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-2.0.0.tgz", + "integrity": "sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA=", + "dev": true, + "requires": { + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" + } + }, + "regjsgen": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.2.0.tgz", + "integrity": "sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc=", + "dev": true + }, + "regjsparser": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.1.5.tgz", + "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=", + "dev": true + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "renderkid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.1.tgz", + "integrity": "sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk=", + "dev": true, + "requires": { + "css-select": "^1.1.0", + "dom-converter": "~0.1", + "htmlparser2": "~3.3.0", + "strip-ansi": "^3.0.0", + "utila": "~0.3" + }, + "dependencies": { + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "utila": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.3.3.tgz", + "integrity": "sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY=", + "dev": true + } + } + }, + "repeat-element": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", + "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "requires": { + "is-finite": "^1.0.0" + } + }, + "request": { + "version": "2.87.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.87.0.tgz", + "integrity": "sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw==", + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.6.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.1", + "forever-agent": "~0.6.1", + "form-data": "~2.3.1", + "har-validator": "~5.0.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.17", + "oauth-sign": "~0.8.2", + "performance-now": "^2.1.0", + "qs": "~6.5.1", + "safe-buffer": "^5.1.1", + "tough-cookie": "~2.3.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.1.0" + } + }, + "request-promise-core": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.1.tgz", + "integrity": "sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY=", + "dev": true, + "requires": { + "lodash": "^4.13.1" + } + }, + "request-promise-native": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.5.tgz", + "integrity": "sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU=", + "dev": true, + "requires": { + "request-promise-core": "1.1.1", + "stealthy-require": "^1.1.0", + "tough-cookie": ">=2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" + }, + "require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM=", + "dev": true, + "requires": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY=", + "dev": true + } + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resize-observer-polyfill": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.0.tgz", + "integrity": "sha512-M2AelyJDVR/oLnToJLtuDJRBBWUGUvvGigj1411hXhAdyFWqMaqHp7TixW3FpiLuVaikIcR1QL+zqoJoZlOgpg==" + }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "requires": { + "path-parse": "^1.0.5" + } + }, + "resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", + "dev": true, + "requires": { + "resolve-from": "^3.0.0" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resolve-url-loader": { + "version": "2.3.0", + "resolved": "http://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-2.3.0.tgz", + "integrity": "sha512-RaEUWgF/B6aTg9VKaOv2o6dfm5f75/lGh8S+SQwoMcBm48WkA2nhLR+V7KEawkxXjU4lLB16IVeHCe7F69nyVw==", + "dev": true, + "requires": { + "adjust-sourcemap-loader": "^1.1.0", + "camelcase": "^4.1.0", + "convert-source-map": "^1.5.1", + "loader-utils": "^1.1.0", + "lodash.defaults": "^4.0.0", + "rework": "^1.0.1", + "rework-visit": "^1.0.0", + "source-map": "^0.5.7", + "urix": "^0.1.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "dev": true, + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "rework": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rework/-/rework-1.0.1.tgz", + "integrity": "sha1-MIBqhBNCtUUQqkEQhQzUhTQUSqc=", + "dev": true, + "requires": { + "convert-source-map": "^0.3.3", + "css": "^2.0.0" + }, + "dependencies": { + "convert-source-map": { + "version": "0.3.5", + "resolved": "http://registry.npmjs.org/convert-source-map/-/convert-source-map-0.3.5.tgz", + "integrity": "sha1-8dgClQr33SYxof6+BZZVDIarMZA=", + "dev": true + } + } + }, + "rework-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rework-visit/-/rework-visit-1.0.0.tgz", + "integrity": "sha1-mUWygD8hni96ygCtuLyfZA+ELJo=", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", + "dev": true, + "requires": { + "align-text": "^0.1.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "requires": { + "glob": "^7.0.5" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "dev": true, + "requires": { + "is-promise": "^2.1.0" + } + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", + "dev": true + }, + "rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74=", + "dev": true, + "requires": { + "rx-lite": "*" + } + }, + "rxjs": { + "version": "6.3.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.3.2.tgz", + "integrity": "sha512-hV7criqbR0pe7EeL3O66UYVg92IR0XsA97+9y+BWTePK9SKmEI5Qd3Zj6uPnGkNzXsBywBQWTvujPl+1Kn9Zjw==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "sass-graph": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", + "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "requires": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + }, + "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": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "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": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "yargs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", + "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^5.0.0" + } + } + } + }, + "sass-loader": { + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-6.0.7.tgz", + "integrity": "sha512-JoiyD00Yo1o61OJsoP2s2kb19L1/Y2p3QFcCdWdF6oomBGKVYuZyqHWemRBfQ2uGYsk+CH3eCguXNfpjzlcpaA==", + "requires": { + "clone-deep": "^2.0.1", + "loader-utils": "^1.0.1", + "lodash.tail": "^4.1.1", + "neo-async": "^2.5.0", + "pify": "^3.0.0" + } + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "schema-utils": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.3.0.tgz", + "integrity": "sha1-9YdyIs4+kx7a4DnxfrNxbnE3+M8=", + "dev": true, + "requires": { + "ajv": "^5.0.0" + } + }, + "scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "requires": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + }, + "dependencies": { + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "selfsigned": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.3.tgz", + "integrity": "sha512-vmZenZ+8Al3NLHkWnhBQ0x6BkML1eCP2xEi3JE+f3D9wW9fipD9NNJHYtE9XJM4TsPaHGZJIamrSI6MTg1dU2Q==", + "dev": true, + "requires": { + "node-forge": "0.7.5" + } + }, + "semver": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz", + "integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw==" + }, + "send": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" + } + }, + "serialize-javascript": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.5.0.tgz", + "integrity": "sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ==", + "dev": true + }, + "serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + } + }, + "serve-static": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", + "send": "0.16.2" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz", + "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=", + "dev": true + }, + "setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shallow-clone": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", + "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "requires": { + "is-extendable": "^0.1.1", + "kind-of": "^5.0.0", + "mixin-object": "^2.0.1" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" + } + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", + "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", + "dev": true, + "requires": { + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" + } + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "slash": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", + "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "dev": true + }, + "slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "sockjs": { + "version": "0.3.19", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", + "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "dev": true, + "requires": { + "faye-websocket": "^0.10.0", + "uuid": "^3.0.1" + } + }, + "sockjs-client": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.1.5.tgz", + "integrity": "sha1-G7fA9yIsQPQq3xT0RCy9Eml3GoM=", + "dev": true, + "requires": { + "debug": "^2.6.6", + "eventsource": "0.1.6", + "faye-websocket": "~0.11.0", + "inherits": "^2.0.1", + "json3": "^3.3.2", + "url-parse": "^1.1.8" + }, + "dependencies": { + "faye-websocket": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", + "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + } + } + }, + "sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=", + "dev": true, + "requires": { + "is-plain-obj": "^1.0.0" + } + }, + "source-list-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.0.tgz", + "integrity": "sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-resolve": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", + "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "dev": true, + "requires": { + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", + "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", + "dev": true + }, + "spdx-correct": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", + "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", + "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" + }, + "spdx-expression-parse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", + "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz", + "integrity": "sha512-TfOfPcYGBB5sDuPn3deByxPhmfegAhpDYKSOXZQN81Oyrrif8ZCodOLzK3AesELnCx03kikhyDwh0pfvvQvF8w==" + }, + "spdy": { + "version": "3.4.7", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-3.4.7.tgz", + "integrity": "sha1-Qv9B7OXMD5mjpsKKq7c/XDsDrLw=", + "dev": true, + "requires": { + "debug": "^2.6.8", + "handle-thing": "^1.2.5", + "http-deceiver": "^1.2.7", + "safe-buffer": "^5.0.1", + "select-hose": "^2.0.0", + "spdy-transport": "^2.0.18" + } + }, + "spdy-transport": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-2.1.0.tgz", + "integrity": "sha512-bpUeGpZcmZ692rrTiqf9/2EUakI6/kXX1Rpe0ib/DyOzbiexVfXkw6GnvI9hVGvIwVaUhkaBojjCZwLNRGQg1g==", + "dev": true, + "requires": { + "debug": "^2.6.8", + "detect-node": "^2.0.3", + "hpack.js": "^2.1.6", + "obuf": "^1.1.1", + "readable-stream": "^2.2.9", + "safe-buffer": "^5.0.1", + "wbuf": "^1.7.2" + } + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + }, + "sshpk": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.14.2.tgz", + "integrity": "sha1-xvxhZIo9nE52T9P8306hBeSSupg=", + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stackframe": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.0.4.tgz", + "integrity": "sha512-to7oADIniaYwS3MhtCa/sQhrxidCCQiF/qp4/m5iN3ipf0Y7Xlri0f6eG29r08aL7JYl8n32AF3Q5GYBZ7K8vw==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "dev": true + }, + "stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "requires": { + "readable-stream": "^2.0.1" + } + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-browserify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.1.tgz", + "integrity": "sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds=", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.padend": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz", + "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.4.3", + "function-bind": "^1.0.2" + } + }, + "string.prototype.padstart": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz", + "integrity": "sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI=", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "es-abstract": "^1.4.3", + "function-bind": "^1.0.2" + } + }, + "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" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "requires": { + "get-stdin": "^4.0.1" + } + }, + "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 + }, + "style-loader": { + "version": "0.18.2", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.18.2.tgz", + "integrity": "sha512-WPpJPZGUxWYHWIUMNNOYqql7zh85zGmr84FdTVWq52WTIkqlW9xSxD3QYWi/T31cqn9UNSsietVEgGn2aaSCzw==", + "dev": true, + "requires": { + "loader-utils": "^1.0.2", + "schema-utils": "^0.3.0" + } + }, + "stylehacks": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.0.tgz", + "integrity": "sha1-ZLMjlRxKJOX8ey7AbBN78y0VXoo=", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^6.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "browserslist": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.1.1.tgz", + "integrity": "sha512-VBorw+tgpOtZ1BYhrVSVTzTt/3+vSE3eFUh0N2GCFK1HffceOaf32YS/bs6WiFhjDAblAFrx85jMy3BG9fBK2Q==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30000884", + "electron-to-chromium": "^1.3.62", + "node-releases": "^1.0.0-alpha.11" + } + }, + "postcss-selector-parser": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz", + "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", + "dev": true, + "requires": { + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "svgo": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz", + "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=", + "dev": true, + "requires": { + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" + } + }, + "sweetalert2": { + "version": "7.26.28", + "resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-7.26.28.tgz", + "integrity": "sha512-UVeTTixsniQVoXUYRFx4KO2c4kE7J86EIR+XewM4hgXdnBaHFuiO9z0cn8rMG7yVzprzAJc/poeC1lWh702cew==" + }, + "table": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "requires": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + }, + "dependencies": { + "ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=", + "dev": true + } + } + }, + "tapable": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-0.2.8.tgz", + "integrity": "sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI=", + "dev": true + }, + "tar": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", + "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "thread-loader": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/thread-loader/-/thread-loader-1.2.0.tgz", + "integrity": "sha512-acJ0rvUk53+ly9cqYWNOpPqOgCkNpmHLPDGduNm4hDQWF7EDKEJXAopG9iEWsPPcml09wePkq3NF+ZUqnO6tbg==", + "dev": true, + "requires": { + "async": "^2.3.0", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0" + } + }, + "throttle-debounce": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-1.1.0.tgz", + "integrity": "sha512-XH8UiPCQcWNuk2LYePibW/4qL97+ZQ1AN3FNXwZRBNPPowo/NRU5fAlDCSNBJIYCKbioZfuYtMhG4quqoJhVzg==" + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + } + }, + "thunky": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.0.2.tgz", + "integrity": "sha1-qGLgGOP7HqLsP85dVWBc9X8kc3E=", + "dev": true + }, + "time-stamp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.1.0.tgz", + "integrity": "sha512-lJbq6KsFhZJtN3fPUVje1tq/hHsJOKUUcUj/MGCiQR6qWBDcyi5kxL9J7/RnaEChCn0+L/DUN2WvemDrkk4i3Q==", + "dev": true + }, + "timers-browserify": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", + "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", + "dev": true, + "requires": { + "setimmediate": "^1.0.4" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=", + "dev": true + }, + "to-fast-properties": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", + "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "topo": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/topo/-/topo-3.0.0.tgz", + "integrity": "sha512-Tlu1fGlR90iCdIPURqPiufqAlCZYzLjHYVVbcFWDMcX7+tK8hdZWAfsMrD/pBul9jqHHwFjNdf1WaxA9vTRRhw==", + "dev": true, + "requires": { + "hoek": "5.x.x" + } + }, + "toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha1-LmhELZ9k7HILjMieZEOsbKqVACk=", + "dev": true + }, + "tough-cookie": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", + "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", + "requires": { + "punycode": "^1.4.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=" + }, + "trim-right": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", + "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=", + "dev": true + }, + "true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "requires": { + "glob": "^7.1.2" + } + }, + "tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "dev": true + }, + "tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "optional": true + }, + "tweetnacl-util": { + "version": "0.15.0", + "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.0.tgz", + "integrity": "sha1-RXbBzuXi1j0gf+5S8boCgZSAvHU=" + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-is": { + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", + "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.18" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", + "dev": true, + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=", + "dev": true + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", + "dev": true, + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "yargs": { + "version": "3.10.0", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", + "dev": true, + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", + "dev": true, + "optional": true + }, + "uglifyjs-webpack-plugin": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz", + "integrity": "sha512-ovHIch0AMlxjD/97j9AYovZxG5wnHOPkL7T1GKochBADp/Zwc44pEWNqpKl1Loupp1WhFg7SlYmHZRUfdAacgw==", + "dev": true, + "requires": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "schema-utils": "^0.4.5", + "serialize-javascript": "^1.4.0", + "source-map": "^0.6.1", + "uglify-es": "^3.3.4", + "webpack-sources": "^1.1.0", + "worker-farm": "^1.5.2" + }, + "dependencies": { + "ajv": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", + "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "commander": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", + "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", + "dev": true + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + } + }, + "uglify-es": { + "version": "3.3.9", + "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", + "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", + "dev": true, + "requires": { + "commander": "~2.13.0", + "source-map": "~0.6.1" + } + } + } + }, + "union-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", + "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "set-value": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", + "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" + } + } + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=" + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-filename": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz", + "integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz", + "integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "upath": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.1.0.tgz", + "integrity": "sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw==", + "dev": true + }, + "upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg=", + "dev": true + }, + "uri-js": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", + "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-join": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.0.tgz", + "integrity": "sha1-TTNA6AfTdzvamZH4MFrNzCpmXSo=", + "dev": true + }, + "url-loader": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-1.1.1.tgz", + "integrity": "sha512-vugEeXjyYFBCUOpX+ZuaunbK3QXMKaQ3zUnRfIpRBlGkY7QizCnzyyn2ASfcxsvyU3ef+CJppVywnl3Kgf13Gg==", + "dev": true, + "requires": { + "loader-utils": "^1.1.0", + "mime": "^2.0.3", + "schema-utils": "^1.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", + "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "mime": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.3.1.tgz", + "integrity": "sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } + } + }, + "url-parse": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.3.tgz", + "integrity": "sha512-rh+KuAW36YKo0vClhQzLLveoj8FwPJNu65xLb7Mrt+eZht0IPT0IXgSv8gcMegZ6NvjJUALf6Mf25POlMwD1Fw==", + "dev": true, + "requires": { + "querystringify": "^2.0.0", + "requires-port": "^1.0.0" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "requires": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "utila": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", + "integrity": "sha1-ihagXURWV6Oupe7MWxKk+lN5dyw=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", + "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==" + }, + "v8-compile-cache": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz", + "integrity": "sha512-1wFuMUIM16MDJRCrpbpuEPTUGmM5QMUg0cr3KFwra2XgOgFcPGDQHDh3CszSCD2Zewc/dh/pamNEW8CbfDebUw==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.2.tgz", + "integrity": "sha512-w/hry/368nO21AN9QljsaIhb9ZiZtZARoVH5f3CsFbawdLdayCgKRPup7CggujvySMxx0I91NOyxdVENohprLQ==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vform": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vform/-/vform-1.0.0.tgz", + "integrity": "sha512-9X17bCzeWW6quND76TxouUgV221gFXqBllLTQjvj8MZgqAmi3bsY578f7EeYI9nvuv2LdyLTW4YcuPlIqqLdDw==" + }, + "vm-browserify": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", + "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", + "dev": true, + "requires": { + "indexof": "0.0.1" + } + }, + "vue": { + "version": "2.5.17", + "resolved": "https://registry.npmjs.org/vue/-/vue-2.5.17.tgz", + "integrity": "sha512-mFbcWoDIJi0w0Za4emyLiW72Jae0yjANHbCVquMKijcavBGypqlF7zHRgMa5k4sesdv7hv2rB4JPdZfR+TPfhQ==" + }, + "vue-axios": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/vue-axios/-/vue-axios-2.1.3.tgz", + "integrity": "sha512-F4njDY6yqETynPh4iA/x3ohHuL6eNp4Jnn30VU//L7mrq3x7PwaHAoKrT++XjbKLjjNOZevTAGNyYXrdYEC90A==" + }, + "vue-button-spinner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/vue-button-spinner/-/vue-button-spinner-2.2.0.tgz", + "integrity": "sha512-jYKJMda6GJLOevyPoLfFVSmtpqNqm7hXSGeBBDMzChvQZ5tA/oi970euwtnhKWq6mxFWKrJd+Xj6ddHMhro4NQ==", + "requires": { + "vue": "^2.5.2" + } + }, + "vue-eslint-parser": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", + "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", + "dev": true, + "requires": { + "debug": "^3.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.2", + "esquery": "^1.0.0", + "lodash": "^4.17.4" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "vue-hot-reload-api": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vue-hot-reload-api/-/vue-hot-reload-api-2.3.0.tgz", + "integrity": "sha512-2j/t+wIbyVMP5NvctQoSUvLkYKoWAAk2QlQiilrM2a6/ulzFgdcLUJfTvs4XQ/3eZhHiBmmEojbjmM4AzZj8JA==" + }, + "vue-i18n": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-7.8.1.tgz", + "integrity": "sha512-BzB+EAPo/iFyFn/GXd/qVdDe67jfk+gmQaWUKD5BANhUclGrFxzRExzW2pYEAbhNm2pg0F12Oo+gL2IMLDcTAw==" + }, + "vue-loader": { + "version": "14.2.3", + "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-14.2.3.tgz", + "integrity": "sha512-mEd2/14gNCVVpKU/44lVDoMDoAteM8PkvaVjzZ4KHyRKtry3pifSh9UMFsjoPBMeVYs9jTEDyT8UKmgPpnP8Yw==", + "requires": { + "consolidate": "^0.14.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "lru-cache": "^4.1.1", + "postcss": "^6.0.8", + "postcss-load-config": "^1.1.0", + "postcss-selector-parser": "^2.0.0", + "prettier": "^1.7.0", + "resolve": "^1.4.0", + "source-map": "^0.6.1", + "vue-hot-reload-api": "^2.2.0", + "vue-style-loader": "^4.0.1", + "vue-template-es2015-compiler": "^1.6.0" + }, + "dependencies": { + "cosmiconfig": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-2.2.2.tgz", + "integrity": "sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A==", + "requires": { + "is-directory": "^0.3.1", + "js-yaml": "^3.4.3", + "minimist": "^1.2.0", + "object-assign": "^4.1.0", + "os-homedir": "^1.0.1", + "parse-json": "^2.2.0", + "require-from-string": "^1.1.0" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + }, + "postcss-load-config": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-1.2.0.tgz", + "integrity": "sha1-U56a/J3chiASHr+djDZz4M5Q0oo=", + "requires": { + "cosmiconfig": "^2.1.0", + "object-assign": "^4.1.0", + "postcss-load-options": "^1.2.0", + "postcss-load-plugins": "^2.3.0" + } + }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=" + } + } + }, + "vue-loading-spinner": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/vue-loading-spinner/-/vue-loading-spinner-1.0.11.tgz", + "integrity": "sha512-qWBK7hzA0IbfyjgOmEm/8Ov4NFRdsAjoGt3JQmId76xWzua9tOjgqUwyiONWUCkkyi26NLJR9ZpiK5m8nsB1IA==", + "requires": { + "node-sass": "^4.5.3", + "sass-loader": "^6.0.6", + "vue": "^2.3.3" + } + }, + "vue-meta": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/vue-meta/-/vue-meta-1.5.3.tgz", + "integrity": "sha512-Bi8cGale8p7GstctM7r+Ef4iTTI3H7XgJCMtu3iEhfjngV89RTaz21DV9QfEDnkk/g6W6wwbZm2ESqTGHcXyxA==", + "requires": { + "deepmerge": "^2.0.0", + "lodash.isplainobject": "^4.0.6", + "object-assign": "^4.1.1" + }, + "dependencies": { + "deepmerge": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-2.1.1.tgz", + "integrity": "sha512-urQxA1smbLZ2cBbXbaYObM1dJ82aJ2H57A1C/Kklfh/ZN1bgH4G/n5KWhdNfOK11W98gqZfyYj7W4frJJRwA2w==" + } + } + }, + "vue-router": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vue-router/-/vue-router-3.0.1.tgz", + "integrity": "sha512-vLLoY452L+JBpALMP5UHum9+7nzR9PeIBCghU9ZtJ1eWm6ieUI8Zb/DI3MYxH32bxkjzYV1LRjNv4qr8d+uX/w==" + }, + "vue-style-loader": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.1.2.tgz", + "integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==", + "requires": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "vue-template-compiler": { + "version": "2.5.17", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.5.17.tgz", + "integrity": "sha512-63uI4syCwtGR5IJvZM0LN5tVsahrelomHtCxvRkZPJ/Tf3ADm1U1wG6KWycK3qCfqR+ygM5vewUvmJ0REAYksg==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "vue-template-es2015-compiler": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.6.0.tgz", + "integrity": "sha512-x3LV3wdmmERhVCYy3quqA57NJW7F3i6faas++pJQWtknWT+n7k30F4TVdHvCLn48peTJFRvCpxs3UuFPqgeELg==" + }, + "vuex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vuex/-/vuex-3.0.1.tgz", + "integrity": "sha512-wLoqz0B7DSZtgbWL1ShIBBCjv22GV5U+vcBFox658g6V0s4wZV9P4YjCNyoHSyIBpj1f29JBoNQIqD82cR4O3w==" + }, + "vuex-router-sync": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/vuex-router-sync/-/vuex-router-sync-5.0.0.tgz", + "integrity": "sha512-Mry2sO4kiAG64714X1CFpTA/shUH1DmkZ26DFDtwoM/yyx6OtMrc+MxrU+7vvbNLO9LSpgwkiJ8W+rlmRtsM+w==" + }, + "watchpack": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", + "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "dev": true, + "requires": { + "chokidar": "^2.0.2", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webpack": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.12.0.tgz", + "integrity": "sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ==", + "dev": true, + "requires": { + "acorn": "^5.0.0", + "acorn-dynamic-import": "^2.0.0", + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0", + "async": "^2.1.2", + "enhanced-resolve": "^3.4.0", + "escope": "^3.6.0", + "interpret": "^1.0.0", + "json-loader": "^0.5.4", + "json5": "^0.5.1", + "loader-runner": "^2.3.0", + "loader-utils": "^1.1.0", + "memory-fs": "~0.4.1", + "mkdirp": "~0.5.0", + "node-libs-browser": "^2.0.0", + "source-map": "^0.5.3", + "supports-color": "^4.2.1", + "tapable": "^0.2.7", + "uglifyjs-webpack-plugin": "^0.4.6", + "watchpack": "^1.4.0", + "webpack-sources": "^1.0.1", + "yargs": "^8.0.2" + }, + "dependencies": { + "ajv": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.5.3.tgz", + "integrity": "sha512-LqZ9wY+fx3UMiiPd741yB2pj3hhil+hQc8taf4o2QGRFpWgZ2V5C8HA165DY9sS3fJwsk7uT7ZlFEyC3Ig3lLg==", + "dev": true, + "requires": { + "fast-deep-equal": "^2.0.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "dev": true + }, + "has-flag": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", + "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "supports-color": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz", + "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", + "dev": true, + "requires": { + "has-flag": "^2.0.0" + } + }, + "uglifyjs-webpack-plugin": { + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz", + "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=", + "dev": true, + "requires": { + "source-map": "^0.5.6", + "uglify-js": "^2.8.29", + "webpack-sources": "^1.0.1" + } + } + } + }, + "webpack-bundle-analyzer": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-2.13.1.tgz", + "integrity": "sha512-rwxyfecTAxoarCC9VlHlIpfQCmmJ/qWD5bpbjkof+7HrNhTNZIwZITxN6CdlYL2axGmwNUQ+tFgcSOiNXMf/sQ==", + "dev": true, + "requires": { + "acorn": "^5.3.0", + "bfj-node4": "^5.2.0", + "chalk": "^2.3.0", + "commander": "^2.13.0", + "ejs": "^2.5.7", + "express": "^4.16.2", + "filesize": "^3.5.11", + "gzip-size": "^4.1.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "opener": "^1.4.3", + "ws": "^4.0.0" + } + }, + "webpack-chain": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/webpack-chain/-/webpack-chain-4.10.0.tgz", + "integrity": "sha512-Cdfkmah2gmE4jlBZWL733hkVcDyBRGCI+nnCP1Cl8NMHvBFpj1v1Voku7gs9Cf+I08BOqq0vtacsCBCyNxQ7Jw==", + "dev": true, + "requires": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^1.6.0" + } + }, + "webpack-chunk-hash": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/webpack-chunk-hash/-/webpack-chunk-hash-0.4.0.tgz", + "integrity": "sha1-a0DDBw+8n/DP4P54HHF0r2x8FqQ=", + "dev": true + }, + "webpack-cli": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.1.0.tgz", + "integrity": "sha512-p5NeKDtYwjZozUWq6kGNs9w+Gtw/CPvyuXjXn2HMdz8Tie+krjEg8oAtonvIyITZdvpF7XG9xDHwscLr2c+ugQ==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "enhanced-resolve": "^4.0.0", + "global-modules-path": "^2.1.0", + "import-local": "^1.0.0", + "inquirer": "^6.0.0", + "interpret": "^1.1.0", + "loader-utils": "^1.1.0", + "supports-color": "^5.4.0", + "v8-compile-cache": "^2.0.0", + "yargs": "^12.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "decamelize": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-2.0.0.tgz", + "integrity": "sha512-Ikpp5scV3MSYxY39ymh45ZLEecsTdv/Xj2CaQfI8RLMuwi7XvjX9H/fhraiSuU+C5w5NTDu4ZU72xNiZnurBPg==", + "dev": true, + "requires": { + "xregexp": "4.0.0" + } + }, + "enhanced-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", + "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.4.0", + "tapable": "^1.0.0" + } + }, + "execa": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.10.0.tgz", + "integrity": "sha512-7XOMnz8Ynx1gGo/3hyV9loYNPWM94jG3+3T3Y8tsfSstFmETmENCMU/A/zj8Lyaj1lkgEepKepvd6240tBRvlw==", + "dev": true, + "requires": { + "cross-spawn": "^6.0.0", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "dev": true, + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "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, + "requires": { + "locate-path": "^3.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inquirer": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.0.tgz", + "integrity": "sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.0", + "figures": "^2.0.0", + "lodash": "^4.17.10", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.1.0", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "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, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "mem": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.0.0.tgz", + "integrity": "sha512-WQxG/5xYc3tMbYLXoXPm81ET2WDULiU5FxbuIoNbJqLOOI8zehXFdZuiUEgfdrU2mVB1pxBZUGlYORSrpuJreA==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^1.1.0" + } + }, + "os-locale": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.0.1.tgz", + "integrity": "sha512-7g5e7dmXPtzcP4bgsZ8ixDVqA7oWYuEz4lOSujeWyliPai4gfVDiFIcwBg3aGCPnmSGfzOKTK3ccPn0CKv3DBw==", + "dev": true, + "requires": { + "execa": "^0.10.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "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, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "tapable": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-1.0.0.tgz", + "integrity": "sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg==", + "dev": true + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.2.tgz", + "integrity": "sha512-e7SkEx6N6SIZ5c5H22RTZae61qtn3PYUE8JYbBFlK9sYmh3DMQ6E5ygtaG/2BW0JZi4WGgTR2IV5ChqlqrDGVQ==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^2.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1 || ^4.0.0", + "yargs-parser": "^10.1.0" + } + }, + "yargs-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", + "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "webpack-dev-middleware": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz", + "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==", + "dev": true, + "requires": { + "memory-fs": "~0.4.1", + "mime": "^1.5.0", + "path-is-absolute": "^1.0.0", + "range-parser": "^1.0.3", + "time-stamp": "^2.0.0" + }, + "dependencies": { + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + } + } + }, + "webpack-dev-server": { + "version": "2.11.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-2.11.3.tgz", + "integrity": "sha512-Qz22YEFhWx+M2vvJ+rQppRv39JA0h5NNbOOdODApdX6iZ52Diz7vTPXjF7kJlfn+Uc24Qr48I3SZ9yncQwRycg==", + "dev": true, + "requires": { + "ansi-html": "0.0.7", + "array-includes": "^3.0.3", + "bonjour": "^3.5.0", + "chokidar": "^2.0.0", + "compression": "^1.5.2", + "connect-history-api-fallback": "^1.3.0", + "debug": "^3.1.0", + "del": "^3.0.0", + "express": "^4.16.2", + "html-entities": "^1.2.0", + "http-proxy-middleware": "~0.17.4", + "import-local": "^1.0.0", + "internal-ip": "1.2.0", + "ip": "^1.1.5", + "killable": "^1.0.0", + "loglevel": "^1.4.1", + "opn": "^5.1.0", + "portfinder": "^1.0.9", + "selfsigned": "^1.9.1", + "serve-index": "^1.7.2", + "sockjs": "0.3.19", + "sockjs-client": "1.1.5", + "spdy": "^3.4.1", + "strip-ansi": "^3.0.0", + "supports-color": "^5.1.0", + "webpack-dev-middleware": "1.12.2", + "yargs": "6.6.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "dev": true + }, + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "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": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "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": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "yargs": { + "version": "6.6.0", + "resolved": "http://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", + "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "dev": true, + "requires": { + "camelcase": "^3.0.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^1.4.0", + "read-pkg-up": "^1.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^1.0.2", + "which-module": "^1.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^4.2.0" + } + }, + "yargs-parser": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", + "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "dev": true, + "requires": { + "camelcase": "^3.0.0" + } + } + } + }, + "webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "requires": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + } + }, + "webpack-merge": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.4.tgz", + "integrity": "sha512-TmSe1HZKeOPey3oy1Ov2iS3guIZjWvMT2BBJDzzT5jScHTjVC3mpjJofgueEzaEd6ibhxRDD6MIblDr8tzh8iQ==", + "dev": true, + "requires": { + "lodash": "^4.17.5" + } + }, + "webpack-notifier": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/webpack-notifier/-/webpack-notifier-1.6.0.tgz", + "integrity": "sha1-/6yOVf+MRpdSuMG7sBGhbxCYbgI=", + "dev": true, + "requires": { + "node-notifier": "^5.1.2", + "object-assign": "^4.1.0", + "strip-ansi": "^3.0.1" + } + }, + "webpack-sources": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.2.0.tgz", + "integrity": "sha512-9BZwxR85dNsjWz3blyxdOhTgtnQvv3OEs5xofI0wPYTwu5kaWxS08UuD1oI7WLBLpRO+ylf0ofnXLXWmGb2WMw==", + "dev": true, + "requires": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "websocket-driver": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", + "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "requires": { + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", + "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==" + }, + "whet.extend": { + "version": "0.9.9", + "resolved": "https://registry.npmjs.org/whet.extend/-/whet.extend-0.9.9.tgz", + "integrity": "sha1-+HfVv2SMl+WqVC+twW1qJZucEaE=", + "dev": true + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", + "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=" + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=", + "dev": true + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=", + "dev": true + }, + "worker-farm": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", + "dev": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "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": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "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": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/write/-/write-0.2.1.tgz", + "integrity": "sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c=", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + } + }, + "ws": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-4.1.0.tgz", + "integrity": "sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0", + "safe-buffer": "~5.1.0" + } + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=" + }, + "xregexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.0.0.tgz", + "integrity": "sha512-PHyM+sQouu7xspQQwELlGwwd05mXUFqwFYfqPO0cC7x4fxyHnnuetmQr6CjJiafIDoH4MogHb9dOoJzR/Y4rFg==", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + }, + "y18n": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", + "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "yargs": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", + "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "cliui": "^3.2.0", + "decamelize": "^1.1.1", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "read-pkg-up": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^7.0.0" + }, + "dependencies": { + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "load-json-file": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" + } + }, + "os-locale": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "path-type": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "dev": true, + "requires": { + "pify": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "dev": true, + "requires": { + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" + } + }, + "read-pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "yargs-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", + "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "yargs-parser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", + "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "requires": { + "camelcase": "^3.0.0" + }, + "dependencies": { + "camelcase": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", + "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + } + } + }, + "yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yorkie/-/yorkie-2.0.0.tgz", + "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", + "dev": true, + "requires": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "execa": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz", + "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", + "dev": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k=", + "dev": true + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..84905d0b --- /dev/null +++ b/package.json @@ -0,0 +1,57 @@ +{ + "private": true, + "scripts": { + "dev": "npm run development", + "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "watch": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "watch-poll": "npm run watch -- --watch-poll", + "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js", + "prod": "npm run production", + "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js", + "lint": "vue-cli-service lint resources/assets/js" + }, + "dependencies": { + "@dmaksimovic/vue-countdown": "^1.0.0", + "@fortawesome/fontawesome": "^1.1.4", + "@fortawesome/fontawesome-free-brands": "^5.0.8", + "@fortawesome/fontawesome-free-regular": "^5.0.8", + "@fortawesome/fontawesome-free-solid": "^5.0.8", + "@fortawesome/vue-fontawesome": "0.0.22", + "@xkeshi/vue-countdown": "^0.6.0", + "axios": "^0.18.0", + "bootstrap": "^4.0.0", + "canvas2image": "^1.0.5", + "element-ui": "^2.4.4", + "jquery": "^3.3.1", + "js-cookie": "^2.2.0", + "laravel-echo": "^1.4.0", + "npm": "^6.4.0", + "popper.js": "^1.14.1", + "pusher-js": "^4.3.0", + "sweetalert2": "^7.15.1", + "vform": "^1.0.0", + "vue": "^2.5.16", + "vue-axios": "^2.1.1", + "vue-button-spinner": "^2.2.0", + "vue-i18n": "^7.6.0", + "vue-loader": "^14.2.2", + "vue-loading-spinner": "^1.0.11", + "vue-meta": "^1.4.4", + "vue-router": "^3.0.1", + "vuex": "^3.0.1", + "vuex-router-sync": "^5.0.0" + }, + "devDependencies": { + "@vue/cli-plugin-eslint": "^3.0.0-beta.6", + "@vue/cli-service": "^3.0.0-beta.6", + "@vue/eslint-config-standard": "^3.0.0-beta.6", + "babel-plugin-syntax-dynamic-import": "^6.18.0", + "cross-env": "^5.1.4", + "eslint": "^4.19.1", + "laravel-mix": "^2.1.1", + "vue-template-compiler": "^2.5.16", + "webpack": "^3.11.0", + "webpack-bundle-analyzer": "^2.13.1", + "webpack-cli": "^3.0.8" + } +} diff --git a/phpunit.xml b/phpunit.xml new file mode 100644 index 00000000..3166e109 --- /dev/null +++ b/phpunit.xml @@ -0,0 +1,41 @@ + + + + + ./tests/Feature + + + + ./tests/Unit + + + + + ./app + + ./app/Http/routes.php + + + + + + + + + + + + + + + + diff --git a/public/.htaccess b/public/.htaccess new file mode 100644 index 00000000..09683488 --- /dev/null +++ b/public/.htaccess @@ -0,0 +1,21 @@ + + + Options -MultiViews + + + RewriteEngine On + + # Redirect Trailing Slashes If Not A Folder... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_URI} (.+)/$ + RewriteRule ^ %1 [L,R=301] + + # Handle Front Controller... + RewriteCond %{REQUEST_FILENAME} !-d + RewriteCond %{REQUEST_FILENAME} !-f + RewriteRule ^ index.php [L] + + # Handle Authorization Header + RewriteCond %{HTTP:Authorization} . + RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] + diff --git a/public/CIEF-X-Plan-PO-Format-15.0.xlsm b/public/CIEF-X-Plan-PO-Format-15.0.xlsm new file mode 100644 index 0000000000000000000000000000000000000000..207fdb891b9eebcfbc3999e76efebc53ce5591a8 GIT binary patch literal 163323 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�>h{l&Bh?7`(~-& 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 literal 0 HcmV?d00001 diff --git a/public/bankslip/hello.jpg b/public/bankslip/hello.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd80f272766d5fe8e668aefdb3442b1b50117dc6 GIT binary patch literal 79607 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 W9~{iWpsZsTxEBs&%UNLlxAcDoz<5{y literal 0 HcmV?d00001 diff --git a/public/favicon.ico b/public/favicon.ico new file mode 100644 index 00000000..e69de29b diff --git a/public/fonts/vendor/element-ui/lib/theme-chalk/element-icons.ttf b/public/fonts/vendor/element-ui/lib/theme-chalk/element-icons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..73bc90f4ab73801335269ea9f75cbd79aa388864 GIT binary patch literal 11040 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 literal 0 HcmV?d00001 diff --git a/public/fonts/vendor/element-ui/lib/theme-chalk/element-icons.woff b/public/fonts/vendor/element-ui/lib/theme-chalk/element-icons.woff new file mode 100644 index 0000000000000000000000000000000000000000..28da65d498a0cc6cfa587a02640a6e7ca85ad6d6 GIT binary patch literal 6164 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 M^niCa<;cVTKU1h^ApigX literal 0 HcmV?d00001 diff --git a/public/index.php b/public/index.php new file mode 100644 index 00000000..2b5641b4 --- /dev/null +++ b/public/index.php @@ -0,0 +1,58 @@ + + */ +define('LARAVEL_START', microtime(true)); + +/* +|-------------------------------------------------------------------------- +| Register The Auto Loader +|-------------------------------------------------------------------------- +| +| Composer provides a convenient, automatically generated class loader for +| our application. We just need to utilize it! We'll simply require it +| into the script here so that we don't have to worry about manual +| loading any of our classes later on. It feels great to relax. +| +*/ + +require __DIR__.'/../vendor/autoload.php'; + +/* +|-------------------------------------------------------------------------- +| Turn On The Lights +|-------------------------------------------------------------------------- +| +| We need to illuminate PHP development, so let us turn on the lights. +| This bootstraps the framework and gets it ready for use, then it +| will load up this application so that we can run it and send +| the responses back to the browser and delight our users. +| +*/ + +$app = require_once __DIR__.'/../bootstrap/app.php'; + +/* +|-------------------------------------------------------------------------- +| Run The Application +|-------------------------------------------------------------------------- +| +| Once we have the application, we can handle the incoming request +| through the kernel, and send the associated response back to +| the client's browser allowing them to enjoy the creative +| and wonderful application we have prepared for them. +| +*/ + +$kernel = $app->make(Illuminate\Contracts\Http\Kernel::class); + +$response = $kernel->handle( + $request = Illuminate\Http\Request::capture() +); + +$response->send(); + +$kernel->terminate($request, $response); diff --git a/public/mix-manifest.json b/public/mix-manifest.json new file mode 100644 index 00000000..b0502809 --- /dev/null +++ b/public/mix-manifest.json @@ -0,0 +1,7 @@ +{ + "/js/lang-zh-CN.c0da3973e52421a8cfe5.js": "/js/lang-zh-CN.c0da3973e52421a8cfe5.js", + "/js/lang-es.f4a1a5b4a30e92527b46.js": "/js/lang-es.f4a1a5b4a30e92527b46.js", + "/js/lang-en.0f790217417404ecc662.js": "/js/lang-en.0f790217417404ecc662.js", + "/js/app.js": "/js/app.js", + "/css/app.css": "/css/app.css" +} diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 00000000..eb053628 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,2 @@ +User-agent: * +Disallow: diff --git a/public/web.config b/public/web.config new file mode 100644 index 00000000..624c1760 --- /dev/null +++ b/public/web.config @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/readme.md b/readme.md new file mode 100644 index 00000000..38e97b74 --- /dev/null +++ b/readme.md @@ -0,0 +1,59 @@ +# Currency Exchange (MYR, RMB, USD) + +> A currency exchange system that user able to book their rate and upload their backin slip. For admin backend, they can perform booking with supplier, update booking status, etc. Using a Laravel-Vue SPA starter project template. + +

+ +

+ +## TechStack + +- Laravel 5.6 +- Vue + VueRouter + Vuex + VueI18n + ESlint +- Pages with dynamic import and custom layouts +- Login, register and password reset +- Authentication with JWT +- Socialite integration +- Bootstrap 4 + Font Awesome 5 + Element UI + +## Installation +- Install [Git](https://git-scm.com) , [Docker CE](https://docs.docker.com/) and [Docker compose](https://docs.docker.com/compose/install/), [Node](https://nodejs.org/en/download/) +- Clone the repo into working folder `git clone git@gitlab.com:CIEFWorldwideSdnBhd/exchange.git` +- `cd` in your working folder +- Copy env file `cp .env-example .env` +- Run `docker-compose up` +- Open another git bash run `npm install` +- Run `npm run watch` + +## Usage + +#### Test Credentials +`user@example.com:secret` +`admin@example.com:secret` + +#### Development + +```bash +# build and watch +npm run watch + +# serve with hot reloading +npm run hot +``` + +#### Production + +```bash +npm run production +``` + +#### Todo +- [ ] Unit test on supplier booking +- [ ] Continous delivery with npm build +- [ ] Add comments in controller functions +- [ ] Store files to AWS S3 +- [ ] Real time rate update + +## Changelog + +Please see [CHANGELOG](CHANGELOG.md) for more information what has changed recently. diff --git a/resources/assets/js/app.js b/resources/assets/js/app.js new file mode 100644 index 00000000..9509ac12 --- /dev/null +++ b/resources/assets/js/app.js @@ -0,0 +1,42 @@ +import Vue from 'vue' +import store from '~/store' +import router from '~/router' +import i18n from '~/plugins/i18n' +import App from '~/components/App' +import ElementUI from 'element-ui' +import 'element-ui/lib/theme-chalk/index.css' +import locale from 'element-ui/lib/locale/lang/en' + +import '~/plugins' +import '~/components' + +const config = { + errorBagName: 'errors', // change if property conflicts. + fieldsBagName: 'fields', + delay: 0, + // locale: 'zh_CN', + strict: true, + enableAutoClasses: false, + classNames: { + touched: 'touched', // the control has been blurred + untouched: 'untouched', // the control hasn't been blurred + valid: 'valid', // model is valid + invalid: 'invalid', // model is invalid + pristine: 'pristine', // control has not been interacted with + dirty: 'dirty' // control has been interacted with + }, + events: 'blur', + inject: true +} + +Vue.config.productionTip = false + +Vue.use(ElementUI, { locale }) +/* eslint-disable no-new */ +new Vue({ + i18n, + store, + router, + el: '#app', + ...App +}) diff --git a/resources/assets/js/components/AdminProgressTrack.vue b/resources/assets/js/components/AdminProgressTrack.vue new file mode 100644 index 00000000..499f307b --- /dev/null +++ b/resources/assets/js/components/AdminProgressTrack.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/resources/assets/js/components/App.vue b/resources/assets/js/components/App.vue new file mode 100644 index 00000000..4d6ab118 --- /dev/null +++ b/resources/assets/js/components/App.vue @@ -0,0 +1,66 @@ + + + diff --git a/resources/assets/js/components/Button.vue b/resources/assets/js/components/Button.vue new file mode 100644 index 00000000..9c206bb5 --- /dev/null +++ b/resources/assets/js/components/Button.vue @@ -0,0 +1,43 @@ + + + diff --git a/resources/assets/js/components/Card.vue b/resources/assets/js/components/Card.vue new file mode 100644 index 00000000..bbf9ab74 --- /dev/null +++ b/resources/assets/js/components/Card.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/assets/js/components/Checkbox.vue b/resources/assets/js/components/Checkbox.vue new file mode 100644 index 00000000..49b8a34d --- /dev/null +++ b/resources/assets/js/components/Checkbox.vue @@ -0,0 +1,65 @@ + + + diff --git a/resources/assets/js/components/Child.vue b/resources/assets/js/components/Child.vue new file mode 100644 index 00000000..e0051914 --- /dev/null +++ b/resources/assets/js/components/Child.vue @@ -0,0 +1,13 @@ + + + diff --git a/resources/assets/js/components/Loading.vue b/resources/assets/js/components/Loading.vue new file mode 100644 index 00000000..97b29f80 --- /dev/null +++ b/resources/assets/js/components/Loading.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/resources/assets/js/components/LocaleDropdown.vue b/resources/assets/js/components/LocaleDropdown.vue new file mode 100644 index 00000000..0e411ddf --- /dev/null +++ b/resources/assets/js/components/LocaleDropdown.vue @@ -0,0 +1,217 @@ + + + diff --git a/resources/assets/js/components/LoginWithGithub.vue b/resources/assets/js/components/LoginWithGithub.vue new file mode 100644 index 00000000..fec06246 --- /dev/null +++ b/resources/assets/js/components/LoginWithGithub.vue @@ -0,0 +1,84 @@ + + + diff --git a/resources/assets/js/components/Navbar.vue b/resources/assets/js/components/Navbar.vue new file mode 100644 index 00000000..46544951 --- /dev/null +++ b/resources/assets/js/components/Navbar.vue @@ -0,0 +1,229 @@ + + + + + diff --git a/resources/assets/js/components/ProgressTrack.vue b/resources/assets/js/components/ProgressTrack.vue new file mode 100644 index 00000000..170a26ea --- /dev/null +++ b/resources/assets/js/components/ProgressTrack.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/resources/assets/js/components/X2AdminProgressTrack.vue b/resources/assets/js/components/X2AdminProgressTrack.vue new file mode 100644 index 00000000..dd83ca75 --- /dev/null +++ b/resources/assets/js/components/X2AdminProgressTrack.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/resources/assets/js/components/X2ProgressTrack.vue b/resources/assets/js/components/X2ProgressTrack.vue new file mode 100644 index 00000000..8ee73a4a --- /dev/null +++ b/resources/assets/js/components/X2ProgressTrack.vue @@ -0,0 +1,27 @@ + + + + + diff --git a/resources/assets/js/components/index.js b/resources/assets/js/components/index.js new file mode 100644 index 00000000..1ff57a5d --- /dev/null +++ b/resources/assets/js/components/index.js @@ -0,0 +1,19 @@ +import Vue from 'vue' +import Card from './Card' +import Child from './Child' +import Button from './Button' +import Checkbox from './Checkbox' +import { HasError, AlertError, AlertSuccess } from 'vform' + +// Components that are registered globaly. +[ + Card, + Child, + Button, + Checkbox, + HasError, + AlertError, + AlertSuccess +].forEach(Component => { + Vue.component(Component.name, Component) +}) diff --git a/resources/assets/js/lang/en.json b/resources/assets/js/lang/en.json new file mode 100644 index 00000000..075e5968 --- /dev/null +++ b/resources/assets/js/lang/en.json @@ -0,0 +1,34 @@ +{ + "ok": "Ok", + "cancel": "Cancel", + "error_alert_title": "Oops...", + "error_alert_text": "Something went wrong! Please try again.", + "token_expired_alert_title": "Session Expired!", + "token_expired_alert_text": "Please log in again to continue.", + "login": "Log In", + "register": "Register", + "page_not_found": "Page Not Found", + "go_home": "Go Home", + "logout": "Logout", + "email": "Email", + "remember_me": "Remember Me", + "password": "Password", + "forgot_password": "Forgot Your Password?", + "confirm_password": "Confirm Password", + "name": "Name", + "toggle_navigation": "Toggle navigation", + "home": "Home", + "you_are_logged_in": "You are logged in!", + "reset_password": "Reset Password", + "send_password_reset_link": "Send Password Reset Link", + "settings": "Settings", + "profile": "Profile", + "your_info": "Your Info", + "info_updated": "Your info has been updated!", + "update": "Update", + "your_password": "Your Password", + "password_updated": "Your password has been updated!", + "new_password": "New Password", + "login_with": "Login with", + "register_with": "Register with" +} diff --git a/resources/assets/js/lang/es.json b/resources/assets/js/lang/es.json new file mode 100644 index 00000000..2e375c36 --- /dev/null +++ b/resources/assets/js/lang/es.json @@ -0,0 +1,34 @@ +{ + "ok": "De Acuerdo", + "cancel": "Cancelar", + "error_alert_title": "Ha ocurrido un problema", + "error_alert_text": "¡Algo salió mal! Inténtalo de nuevo.", + "token_expired_alert_title": "!Sesión Expirada!", + "token_expired_alert_text": "Por favor inicie sesión de nuevo para continuar.", + "login": "Iniciar Sesión", + "register": "Registro", + "page_not_found": "Página No Encontrada", + "go_home": "Ir a Inicio", + "logout": "Cerrar Sesión", + "email": "Correo Electrónico", + "remember_me": "Recuérdame", + "password": "Contraseña", + "forgot_password": "¿Olvidaste tu contraseña?", + "confirm_password": "Confirmar Contraseña", + "name": "Nombre", + "toggle_navigation": "Cambiar Navegación", + "home": "Inicio", + "you_are_logged_in": "¡Has iniciado sesión!", + "reset_password": "Restablecer la contraseña", + "send_password_reset_link": "Enviar Enlace de Restablecimiento de Contraseña", + "settings": "Configuraciones", + "profile": "Perfil", + "your_info": "Tu Información", + "info_updated": "¡Tu información ha sido actualizada!", + "update": "Actualizar", + "your_password": "Tu Contraseña", + "password_updated": "¡Tu contraseña ha sido actualizada!", + "new_password": "Nueva Contraseña", + "login_with": "Iniciar Sesión con", + "register_with": "Registro con" +} diff --git a/resources/assets/js/lang/zh-CN.json b/resources/assets/js/lang/zh-CN.json new file mode 100644 index 00000000..c9f37d2a --- /dev/null +++ b/resources/assets/js/lang/zh-CN.json @@ -0,0 +1,34 @@ +{ + "ok": "确定", + "cancel": "取消", + "error_alert_title": "错误...", + "error_alert_text": "遇到一些错误,请稍后重试~", + "token_expired_alert_title": "验证过期!", + "token_expired_alert_text": "请稍后重新登录系统", + "login": "登录", + "register": "注册", + "page_not_found": "页面不存在", + "go_home": "返回首页", + "logout": "退出", + "email": "邮箱", + "remember_me": "记住我", + "password": "密码", + "forgot_password": "忘记密码?", + "confirm_password": "重复密码", + "name": "用户名", + "toggle_navigation": "切换导航", + "home": "首页", + "you_are_logged_in": "您已经登录!", + "reset_password": "重置密码", + "send_password_reset_link": "发送重置链接", + "settings": "设置", + "profile": "个人设置", + "your_info": "您的个人信息", + "info_updated": "您的个人信息已经更改!", + "update": "更新", + "your_password": "您的密码", + "password_updated": "您的密码已经更新!", + "new_password": "新密码", + "login_with": "登录", + "register_with": "注册" +} diff --git a/resources/assets/js/layouts/basic.vue b/resources/assets/js/layouts/basic.vue new file mode 100644 index 00000000..b308e352 --- /dev/null +++ b/resources/assets/js/layouts/basic.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/resources/assets/js/layouts/default.vue b/resources/assets/js/layouts/default.vue new file mode 100644 index 00000000..04b58a2c --- /dev/null +++ b/resources/assets/js/layouts/default.vue @@ -0,0 +1,21 @@ + + + diff --git a/resources/assets/js/middleware/admin.js b/resources/assets/js/middleware/admin.js new file mode 100644 index 00000000..3a0c97b3 --- /dev/null +++ b/resources/assets/js/middleware/admin.js @@ -0,0 +1,9 @@ +import store from '~/store' + +export default (to, from, next) => { + if (store.getters['auth/role'] !== 'admin') { + next({ name: 'home' }) + } else { + next() + } +} diff --git a/resources/assets/js/middleware/auth.js b/resources/assets/js/middleware/auth.js new file mode 100644 index 00000000..00805252 --- /dev/null +++ b/resources/assets/js/middleware/auth.js @@ -0,0 +1,11 @@ +import store from '~/store' + +export default async (to, from, next) => { + if (!store.getters['auth/check']) { + next({ name: 'login' }) + } else if (store.getters['auth/role'] === 'admin') { + next({ name: 'admin.home' }) + } else { + next() + } +} diff --git a/resources/assets/js/middleware/check-auth.js b/resources/assets/js/middleware/check-auth.js new file mode 100644 index 00000000..66a07983 --- /dev/null +++ b/resources/assets/js/middleware/check-auth.js @@ -0,0 +1,11 @@ +import store from '~/store' + +export default async (to, from, next) => { + if (!store.getters['auth/check'] && store.getters['auth/token']) { + try { + await store.dispatch('auth/fetchUser') + } catch (e) { } + } + + next() +} diff --git a/resources/assets/js/middleware/guest.js b/resources/assets/js/middleware/guest.js new file mode 100644 index 00000000..dc45d688 --- /dev/null +++ b/resources/assets/js/middleware/guest.js @@ -0,0 +1,9 @@ +import store from '~/store' + +export default (to, from, next) => { + if (store.getters['auth/check']) { + next({ name: 'home' }) + } else { + next() + } +} diff --git a/resources/assets/js/middleware/locale.js b/resources/assets/js/middleware/locale.js new file mode 100644 index 00000000..e844914c --- /dev/null +++ b/resources/assets/js/middleware/locale.js @@ -0,0 +1,8 @@ +import store from '~/store' +import { loadMessages } from '~/plugins/i18n' + +export default async (to, from, next) => { + await loadMessages(store.getters['lang/locale']) + + next() +} diff --git a/resources/assets/js/pages/admin/booking/bookingDetail.vue b/resources/assets/js/pages/admin/booking/bookingDetail.vue new file mode 100644 index 00000000..8bbf33aa --- /dev/null +++ b/resources/assets/js/pages/admin/booking/bookingDetail.vue @@ -0,0 +1,266 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/admin/booking/completed.vue b/resources/assets/js/pages/admin/booking/completed.vue new file mode 100644 index 00000000..2b2ab439 --- /dev/null +++ b/resources/assets/js/pages/admin/booking/completed.vue @@ -0,0 +1,585 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/admin/booking/supplierBooking.vue b/resources/assets/js/pages/admin/booking/supplierBooking.vue new file mode 100644 index 00000000..8808f67f --- /dev/null +++ b/resources/assets/js/pages/admin/booking/supplierBooking.vue @@ -0,0 +1,375 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/admin/booking/supplierReport.vue b/resources/assets/js/pages/admin/booking/supplierReport.vue new file mode 100644 index 00000000..af44ac0c --- /dev/null +++ b/resources/assets/js/pages/admin/booking/supplierReport.vue @@ -0,0 +1,565 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/admin/booking/uploadChinaBankslip.vue b/resources/assets/js/pages/admin/booking/uploadChinaBankslip.vue new file mode 100644 index 00000000..20754df2 --- /dev/null +++ b/resources/assets/js/pages/admin/booking/uploadChinaBankslip.vue @@ -0,0 +1,621 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/admin/booking/uploadInvoice.vue b/resources/assets/js/pages/admin/booking/uploadInvoice.vue new file mode 100644 index 00000000..6d69b7e1 --- /dev/null +++ b/resources/assets/js/pages/admin/booking/uploadInvoice.vue @@ -0,0 +1,623 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/admin/booking/verification.vue b/resources/assets/js/pages/admin/booking/verification.vue new file mode 100644 index 00000000..b9679652 --- /dev/null +++ b/resources/assets/js/pages/admin/booking/verification.vue @@ -0,0 +1,385 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/admin/booking/x2Completed.vue b/resources/assets/js/pages/admin/booking/x2Completed.vue new file mode 100644 index 00000000..556765e9 --- /dev/null +++ b/resources/assets/js/pages/admin/booking/x2Completed.vue @@ -0,0 +1,549 @@ + + + diff --git a/resources/assets/js/pages/admin/complete-orders.vue b/resources/assets/js/pages/admin/complete-orders.vue new file mode 100644 index 00000000..9ed8dac5 --- /dev/null +++ b/resources/assets/js/pages/admin/complete-orders.vue @@ -0,0 +1,112 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/admin/home.vue b/resources/assets/js/pages/admin/home.vue new file mode 100644 index 00000000..9c86eb94 --- /dev/null +++ b/resources/assets/js/pages/admin/home.vue @@ -0,0 +1,294 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/admin/index.vue b/resources/assets/js/pages/admin/index.vue new file mode 100644 index 00000000..67871a7c --- /dev/null +++ b/resources/assets/js/pages/admin/index.vue @@ -0,0 +1,53 @@ + + + + + diff --git a/resources/assets/js/pages/admin/upload-supplier-bank-slip.vue b/resources/assets/js/pages/admin/upload-supplier-bank-slip.vue new file mode 100644 index 00000000..7dcbc597 --- /dev/null +++ b/resources/assets/js/pages/admin/upload-supplier-bank-slip.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/resources/assets/js/pages/auth/login.vue b/resources/assets/js/pages/auth/login.vue new file mode 100644 index 00000000..2d260330 --- /dev/null +++ b/resources/assets/js/pages/auth/login.vue @@ -0,0 +1,113 @@ + + + diff --git a/resources/assets/js/pages/auth/password/email.vue b/resources/assets/js/pages/auth/password/email.vue new file mode 100644 index 00000000..0240f2cd --- /dev/null +++ b/resources/assets/js/pages/auth/password/email.vue @@ -0,0 +1,60 @@ + + + diff --git a/resources/assets/js/pages/auth/password/reset.vue b/resources/assets/js/pages/auth/password/reset.vue new file mode 100644 index 00000000..107fce5c --- /dev/null +++ b/resources/assets/js/pages/auth/password/reset.vue @@ -0,0 +1,86 @@ + + + diff --git a/resources/assets/js/pages/auth/register.vue b/resources/assets/js/pages/auth/register.vue new file mode 100644 index 00000000..c6609c44 --- /dev/null +++ b/resources/assets/js/pages/auth/register.vue @@ -0,0 +1,164 @@ + + + diff --git a/resources/assets/js/pages/booking/completed.vue b/resources/assets/js/pages/booking/completed.vue new file mode 100644 index 00000000..8111b069 --- /dev/null +++ b/resources/assets/js/pages/booking/completed.vue @@ -0,0 +1,214 @@ + + + diff --git a/resources/assets/js/pages/booking/confirmation.vue b/resources/assets/js/pages/booking/confirmation.vue new file mode 100644 index 00000000..5f304b96 --- /dev/null +++ b/resources/assets/js/pages/booking/confirmation.vue @@ -0,0 +1,168 @@ + + + diff --git a/resources/assets/js/pages/booking/po.vue b/resources/assets/js/pages/booking/po.vue new file mode 100644 index 00000000..bc264ba5 --- /dev/null +++ b/resources/assets/js/pages/booking/po.vue @@ -0,0 +1,210 @@ + + + diff --git a/resources/assets/js/pages/booking/poComplete.vue b/resources/assets/js/pages/booking/poComplete.vue new file mode 100644 index 00000000..230604b0 --- /dev/null +++ b/resources/assets/js/pages/booking/poComplete.vue @@ -0,0 +1,186 @@ + + + diff --git a/resources/assets/js/pages/booking/transfer.vue b/resources/assets/js/pages/booking/transfer.vue new file mode 100644 index 00000000..abb37860 --- /dev/null +++ b/resources/assets/js/pages/booking/transfer.vue @@ -0,0 +1,193 @@ + + + diff --git a/resources/assets/js/pages/booking/uploadPo.vue b/resources/assets/js/pages/booking/uploadPo.vue new file mode 100644 index 00000000..b703cd8e --- /dev/null +++ b/resources/assets/js/pages/booking/uploadPo.vue @@ -0,0 +1,294 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/booking/uploadUserBankSlip.vue b/resources/assets/js/pages/booking/uploadUserBankSlip.vue new file mode 100644 index 00000000..477d78f7 --- /dev/null +++ b/resources/assets/js/pages/booking/uploadUserBankSlip.vue @@ -0,0 +1,407 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/booking/x2Completed.vue b/resources/assets/js/pages/booking/x2Completed.vue new file mode 100644 index 00000000..6bf26565 --- /dev/null +++ b/resources/assets/js/pages/booking/x2Completed.vue @@ -0,0 +1,196 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/errors/404.vue b/resources/assets/js/pages/errors/404.vue new file mode 100644 index 00000000..f826100d --- /dev/null +++ b/resources/assets/js/pages/errors/404.vue @@ -0,0 +1,19 @@ + + + diff --git a/resources/assets/js/pages/home.vue b/resources/assets/js/pages/home.vue new file mode 100644 index 00000000..32e7623c --- /dev/null +++ b/resources/assets/js/pages/home.vue @@ -0,0 +1,832 @@ + + + diff --git a/resources/assets/js/pages/settings/admin-bank-setting.vue b/resources/assets/js/pages/settings/admin-bank-setting.vue new file mode 100644 index 00000000..e6de00e6 --- /dev/null +++ b/resources/assets/js/pages/settings/admin-bank-setting.vue @@ -0,0 +1,161 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/settings/admin-billing-charge-setting.vue b/resources/assets/js/pages/settings/admin-billing-charge-setting.vue new file mode 100644 index 00000000..1a3c2ecd --- /dev/null +++ b/resources/assets/js/pages/settings/admin-billing-charge-setting.vue @@ -0,0 +1,65 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/settings/admin-china-bank.vue b/resources/assets/js/pages/settings/admin-china-bank.vue new file mode 100644 index 00000000..1c960e49 --- /dev/null +++ b/resources/assets/js/pages/settings/admin-china-bank.vue @@ -0,0 +1,283 @@ + + + + + diff --git a/resources/assets/js/pages/settings/admin-credit-setting.vue b/resources/assets/js/pages/settings/admin-credit-setting.vue new file mode 100644 index 00000000..d5273fd0 --- /dev/null +++ b/resources/assets/js/pages/settings/admin-credit-setting.vue @@ -0,0 +1,73 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/settings/admin-malaysia-bank.vue b/resources/assets/js/pages/settings/admin-malaysia-bank.vue new file mode 100644 index 00000000..adf91f02 --- /dev/null +++ b/resources/assets/js/pages/settings/admin-malaysia-bank.vue @@ -0,0 +1,285 @@ + + + + + diff --git a/resources/assets/js/pages/settings/admin-marking-setting.vue b/resources/assets/js/pages/settings/admin-marking-setting.vue new file mode 100644 index 00000000..8197516b --- /dev/null +++ b/resources/assets/js/pages/settings/admin-marking-setting.vue @@ -0,0 +1,229 @@ + + + + + + diff --git a/resources/assets/js/pages/settings/admin-supplier.vue b/resources/assets/js/pages/settings/admin-supplier.vue new file mode 100644 index 00000000..eb151563 --- /dev/null +++ b/resources/assets/js/pages/settings/admin-supplier.vue @@ -0,0 +1,227 @@ + + + + diff --git a/resources/assets/js/pages/settings/admin-tax-setting.vue b/resources/assets/js/pages/settings/admin-tax-setting.vue new file mode 100644 index 00000000..4809493f --- /dev/null +++ b/resources/assets/js/pages/settings/admin-tax-setting.vue @@ -0,0 +1,66 @@ + + + \ No newline at end of file diff --git a/resources/assets/js/pages/settings/index.vue b/resources/assets/js/pages/settings/index.vue new file mode 100644 index 00000000..782a8077 --- /dev/null +++ b/resources/assets/js/pages/settings/index.vue @@ -0,0 +1,107 @@ + + + + + \ No newline at end of file diff --git a/resources/assets/js/pages/settings/password.vue b/resources/assets/js/pages/settings/password.vue new file mode 100644 index 00000000..0f90fc21 --- /dev/null +++ b/resources/assets/js/pages/settings/password.vue @@ -0,0 +1,59 @@ + + + diff --git a/resources/assets/js/pages/settings/profile.vue b/resources/assets/js/pages/settings/profile.vue new file mode 100644 index 00000000..6f115872 --- /dev/null +++ b/resources/assets/js/pages/settings/profile.vue @@ -0,0 +1,73 @@ + + + diff --git a/resources/assets/js/pages/settings/rate.vue b/resources/assets/js/pages/settings/rate.vue new file mode 100644 index 00000000..e69de29b diff --git a/resources/assets/js/pages/welcome.vue b/resources/assets/js/pages/welcome.vue new file mode 100644 index 00000000..d626947f --- /dev/null +++ b/resources/assets/js/pages/welcome.vue @@ -0,0 +1,52 @@ + + + + + diff --git a/resources/assets/js/plugins/axios.js b/resources/assets/js/plugins/axios.js new file mode 100644 index 00000000..f782d592 --- /dev/null +++ b/resources/assets/js/plugins/axios.js @@ -0,0 +1,55 @@ +import axios from 'axios' +import store from '~/store' +import router from '~/router' +import swal from 'sweetalert2' +import i18n from '~/plugins/i18n' + +// Request interceptor +axios.interceptors.request.use(request => { + const token = store.getters['auth/token'] + if (token) { + request.headers.common['Authorization'] = `Bearer ${token}` + } + + const locale = store.getters['lang/locale'] + if (locale) { + request.headers.common['Accept-Language'] = locale + } + + // request.headers['X-Socket-Id'] = Echo.socketId() + + return request +}) + +// Response interceptor +axios.interceptors.response.use(response => response, error => { + const { status } = error.response + + if (status >= 500) { + swal({ + type: 'error', + title: i18n.t('error_alert_title'), + text: i18n.t('error_alert_text'), + reverseButtons: true, + confirmButtonText: i18n.t('ok'), + cancelButtonText: i18n.t('cancel') + }) + } + + if (status === 401 && store.getters['auth/check']) { + swal({ + type: 'warning', + title: i18n.t('token_expired_alert_title'), + text: i18n.t('token_expired_alert_text'), + reverseButtons: true, + confirmButtonText: i18n.t('ok'), + cancelButtonText: i18n.t('cancel') + }).then(async () => { + await store.dispatch('auth/logout') + + router.push({ name: 'login' }) + }) + } + + return Promise.reject(error) +}) diff --git a/resources/assets/js/plugins/fontawesome.js b/resources/assets/js/plugins/fontawesome.js new file mode 100644 index 00000000..8fe42e82 --- /dev/null +++ b/resources/assets/js/plugins/fontawesome.js @@ -0,0 +1,19 @@ +import Vue from 'vue' +import fontawesome from '@fortawesome/fontawesome' +import FontAwesomeIcon from '@fortawesome/vue-fontawesome' + +// import { } from '@fortawesome/fontawesome-free-regular/shakable.es' + +import { + faUser, faLock, faSignOutAlt, faCog, faFlag, faBuilding +} from '@fortawesome/fontawesome-free-solid/shakable.es' + +import { + faGithub +} from '@fortawesome/fontawesome-free-brands/shakable.es' + +fontawesome.library.add( + faUser, faLock, faSignOutAlt, faCog, faFlag, faBuilding, faGithub +) + +Vue.component('fa', FontAwesomeIcon) diff --git a/resources/assets/js/plugins/i18n.js b/resources/assets/js/plugins/i18n.js new file mode 100644 index 00000000..7d483432 --- /dev/null +++ b/resources/assets/js/plugins/i18n.js @@ -0,0 +1,30 @@ +import Vue from 'vue' +import store from '~/store' +import VueI18n from 'vue-i18n' + +Vue.use(VueI18n) + +const i18n = new VueI18n({ + locale: 'en', + messages: {} +}) + +/** + * @param {String} locale + */ +export async function loadMessages (locale) { + if (Object.keys(i18n.getLocaleMessage(locale)).length === 0) { + const messages = await import(/* webpackChunkName: "lang-[request]" */ `~/lang/${locale}`) + i18n.setLocaleMessage(locale, messages) + } + + if (i18n.locale !== locale) { + i18n.locale = locale + } +} + +;(async function () { + await loadMessages(store.getters['lang/locale']) +})() + +export default i18n diff --git a/resources/assets/js/plugins/index.js b/resources/assets/js/plugins/index.js new file mode 100644 index 00000000..f92bcb83 --- /dev/null +++ b/resources/assets/js/plugins/index.js @@ -0,0 +1,3 @@ +import './axios' +import './fontawesome' +import 'bootstrap' diff --git a/resources/assets/js/router/index.js b/resources/assets/js/router/index.js new file mode 100644 index 00000000..0216062b --- /dev/null +++ b/resources/assets/js/router/index.js @@ -0,0 +1,199 @@ +import Vue from 'vue' +import store from '~/store' +import Meta from 'vue-meta' +import routes from './routes' +import Router from 'vue-router' +import { sync } from 'vuex-router-sync' + +Vue.use(Meta) +Vue.use(Router) + +// The middleware for every page of the application. +const globalMiddleware = ['locale', 'check-auth'] + +// Load middleware modules dynamically. +const routeMiddleware = resolveMiddleware( + require.context('~/middleware', false, /.*\.js$/) +) + +const router = createRouter() + +sync(store, router) + +export default router + +/** + * Create a new router instance. + * + * @return {Router} + */ +function createRouter () { + const router = new Router({ + scrollBehavior, + mode: 'history', + routes + }) + + router.beforeEach(beforeEach) + router.afterEach(afterEach) + + return router +} + +/** + * Global router guard. + * + * @param {Route} to + * @param {Route} from + * @param {Function} next + */ +async function beforeEach (to, from, next) { + // Get the matched components and resolve them. + const components = await resolveComponents( + router.getMatchedComponents({ ...to }) + ) + + if (components.length === 0) { + return next() + } + + // Start the loading bar. + if (components[components.length - 1].loading !== false) { + router.app.$nextTick(() => router.app.$loading.start()) + } + + // Get the middleware for all the matched components. + const middleware = getMiddleware(components) + + // Call each middleware. + callMiddleware(middleware, to, from, (...args) => { + // Set the application layout only if "next()" was called with no args. + if (args.length === 0) { + router.app.setLayout(components[0].layout || '') + } + + next(...args) + }) +} + +/** + * Global after hook. + * + * @param {Route} to + * @param {Route} from + * @param {Function} next + */ +async function afterEach (to, from, next) { + await router.app.$nextTick() + + router.app.$loading.finish() +} + +/** + * Call each middleware. + * + * @param {Array} middleware + * @param {Route} to + * @param {Route} from + * @param {Function} next + */ +function callMiddleware (middleware, to, from, next) { + const stack = middleware.reverse() + + const _next = (...args) => { + // Stop if "_next" was called with an argument or the stack is empty. + if (args.length > 0 || stack.length === 0) { + if (args.length > 0) { + router.app.$loading.finish() + } + + return next(...args) + } + + const middleware = stack.pop() + + if (typeof middleware === 'function') { + middleware(to, from, _next) + } else if (routeMiddleware[middleware]) { + routeMiddleware[middleware](to, from, _next) + } else { + throw Error(`Undefined middleware [${middleware}]`) + } + } + + _next() +} + +/** + * Resolve async components. + * + * @param {Array} components + * @return {Array} + */ +function resolveComponents (components) { + return Promise.all(components.map(component => { + return typeof component === 'function' ? component() : component + })) +} + +/** + * Merge the the global middleware with the components middleware. + * + * @param {Array} components + * @return {Array} + */ +function getMiddleware (components) { + const middleware = [...globalMiddleware] + + components.filter(c => c.middleware).forEach(component => { + if (Array.isArray(component.middleware)) { + middleware.push(...component.middleware) + } else { + middleware.push(component.middleware) + } + }) + + return middleware +} + +/** + * Scroll Behavior + * + * @link https://router.vuejs.org/en/advanced/scroll-behavior.html + * + * @param {Route} to + * @param {Route} from + * @param {Object|undefined} savedPosition + * @return {Object} + */ +function scrollBehavior (to, from, savedPosition) { + if (savedPosition) { + return savedPosition + } + + if (to.hash) { + return { selector: to.hash } + } + + const [component] = router.getMatchedComponents({ ...to }).slice(-1) + + if (component && component.scrollToTop === false) { + return {} + } + + return { x: 0, y: 0 } +} + +/** + * @param {Object} requireContext + * @return {Object} + */ +function resolveMiddleware (requireContext) { + return requireContext.keys() + .map(file => + [file.replace(/(^.\/)|(\.js$)/g, ''), requireContext(file)] + ) + .reduce((guards, [name, guard]) => ( + { ...guards, [name]: guard.default } + ), {}) +} diff --git a/resources/assets/js/router/routes.js b/resources/assets/js/router/routes.js new file mode 100644 index 00000000..a6450404 --- /dev/null +++ b/resources/assets/js/router/routes.js @@ -0,0 +1,97 @@ +const Welcome = () => import('~/pages/welcome').then(m => m.default || m) +const Login = () => import('~/pages/auth/login').then(m => m.default || m) +const Register = () => import('~/pages/auth/register').then(m => m.default || m) +const PasswordEmail = () => import('~/pages/auth/password/email').then(m => m.default || m) +const PasswordReset = () => import('~/pages/auth/password/reset').then(m => m.default || m) +const NotFound = () => import('~/pages/errors/404').then(m => m.default || m) + +const Home = () => import('~/pages/home').then(m => m.default || m) +const Settings = () => import('~/pages/settings/index').then(m => m.default || m) +const SettingsProfile = () => import('~/pages/settings/profile').then(m => m.default || m) +const SettingsPassword = () => import('~/pages/settings/password').then(m => m.default || m) +const SettingsAdminSupplier = () => import('~/pages/settings/admin-supplier').then(m => m.default || m) +const SettingsAdminCreditSetting = () => import('~/pages/settings/admin-credit-setting').then(m => m.default || m) +const SettingsAdminChinaBank = () => import('~/pages/settings/admin-china-bank').then(m => m.default || m) +const SettingsAdminMalaysiaBank = () => import('~/pages/settings/admin-malaysia-bank').then(m => m.default || m) +const SettingsAdminBankSetting = () => import('~/pages/settings/admin-bank-setting').then(m => m.default || m) +const SettingsAdminMarkingSetting = () => import('~/pages/settings/admin-marking-setting').then(m => m.default || m) +const SettingsAdminTaxSetting = () => import('~/pages/settings/admin-tax-setting').then(m => m.default || m) +const SettingsAdminBillingChargeSetting = () => import('~/pages/settings/admin-billing-charge-setting').then(m => m.default || m) + +// Booking +const Upload = () => import('~/pages/booking/uploadUserBankSlip').then(m => m.default || m) +const Confirmation = () => import('~/pages/booking/confirmation').then(m => m.default || m) +const Transfer = () => import('~/pages/booking/transfer').then(m => m.default || m) +const UploadPo = () => import('~/pages/booking/uploadPo').then(m => m.default || m) +const PoComplete = () => import('~/pages/booking/poComplete').then(m => m.default || m) +const X2Completed = () => import('~/pages/booking/x2Completed').then(m => m.default || m) +const Completed = () => import('~/pages/booking/completed').then(m => m.default || m) +const PurchaseOrder = () => import('~/pages/booking/po').then(m => m.default || m) + +// Admin booking +const BookingDetail = () => import('~/pages/admin/booking/bookingDetail').then(m => m.default || m) +const Verification = () => import('~/pages/admin/booking/verification').then(m => m.default || m) +const Supplier = () => import('~/pages/admin/booking/supplierBooking').then(m => m.default || m) +const SupplierReport = () => import('~/pages/admin/booking/supplierReport').then(m => m.default || m) +const UploadCNSlip = () => import('~/pages/admin/booking/uploadChinaBankslip').then(m => m.default || m) +const UploadInvoice = () => import('~/pages/admin/booking/uploadInvoice').then(m => m.default || m) +const adminCompleted = () => import('~/pages/admin/booking/completed').then(m => m.default || m) +const adminX2Completed = () => import('~/pages/admin/booking/x2Completed').then(m => m.default || m) + +// Admin pages +const AdminHome = () => import('~/pages/admin/home').then(m => m.default || m) +const AdminCompleteOrder = () => import('~/pages/admin/complete-orders').then(m => m.default || m) +const TransactionHistory = () => import('~/pages/admin/transaction-history').then(m => m.default || m) +const UploadSupplierBankSlip = () => import('~/pages/admin/upload-supplier-bank-slip').then(m => m.default || m) + +export default [ + { path: '/', name: 'welcome', component: Login }, + { path: '/login', name: 'login', component: Login }, + { path: '/register', name: 'register', component: Register }, + { path: '/password/reset', name: 'password.request', component: PasswordEmail }, + { path: '/password/reset/:token', name: 'password.reset', component: PasswordReset }, + + { path: '/home', name: 'home', component: Home }, + { path: '/settings', + component: Settings, + children: [ + { path: '', redirect: { name: 'settings.profile' } }, + { path: 'profile', name: 'settings.profile', component: SettingsProfile }, + { path: 'password', name: 'settings.password', component: SettingsPassword }, + { path: 'admin-supplier', name: 'settings.admin-supplier', component: SettingsAdminSupplier }, + { path: 'admin-credit-setting', name: 'settings.admin-credit-setting', component: SettingsAdminCreditSetting }, + { path: 'admin-china-bank', name: 'settings.admin-china-bank', component: SettingsAdminChinaBank }, + { path: 'admin-malaysia-bank', name: 'settings.admin-malaysia-bank', component: SettingsAdminMalaysiaBank }, + { path: 'admin-bank-setting', name: 'settings.admin-bank-setting', component: SettingsAdminBankSetting }, + { path: 'admin-marking-setting', name: 'settings.admin-marking-setting', component: SettingsAdminMarkingSetting }, + { path: 'admin-tax-setting', name: 'settings.admin-tax-setting', component: SettingsAdminTaxSetting }, + { path: 'admin-billing-charge-setting', name: 'settings.admin-billing-charge-setting', component: SettingsAdminBillingChargeSetting }, + ] }, + + // Booking + { path: '/booking/:id/upload-user-bankslip', name: 'booking.user.upload', component: Upload }, + { path: '/booking/:id/confirmation', name: 'booking.user.confirmation', component: Confirmation }, + { path: '/booking/:id/transfer', name: 'booking.user.transfer', component: Transfer }, + { path: '/booking/:id/upload-po', name: 'booking.user.uploadpo', component: UploadPo }, + { path: '/booking/:id/po-complete', name: 'booking.user.pocomplete', component: PoComplete }, + { path: '/booking/:id/po', name: 'booking.user.po', component: PurchaseOrder }, + { path: '/booking/:id/complete', name: 'booking.user.complete', component: Completed }, + { path: '/booking/:id/x2-complete', name: 'booking.user.x2complete', component: X2Completed }, + + // Admin booking + { path: '/booking/:id/booking-detail', name: 'booking.admin.booking.detail', component: BookingDetail }, + { path: '/booking/:id/verification', name: 'booking.admin.verification', component: Verification }, + { path: '/booking/:id/supplier', name: 'booking.admin.supplier', component: Supplier }, + { path: '/booking/:id/supplier-report', name: 'booking.admin.supplier.report', component: SupplierReport }, + { path: '/booking/:id/upload-cn-bankslip', name: 'booking.admin.cnslip', component: UploadCNSlip }, + { path: '/booking/:id/upload-invoice', name: 'booking.admin.invoice', component: UploadInvoice }, + { path: '/booking/:id/admin/complete', name: 'booking.admin.complete', component: adminCompleted }, + { path: '/booking/:id/admin/x2-complete', name: 'booking.admin.x2complete', component: adminX2Completed }, + + // Admin pages + { path: '/admin', name: 'admin.home', component: AdminHome }, + { path: '/admin/complete-orders', name: 'admin.complete', component: AdminCompleteOrder }, + { path: '/admin/transaction-history', name: 'admin.transaction-history', component: TransactionHistory }, + { path: '/admin/upload-supplier-bank-slip', name: 'admin.upload-supplier-bank-slip', component: UploadSupplierBankSlip }, + { path: '*', name: 'notfound', component: NotFound } +] diff --git a/resources/assets/js/store/index.js b/resources/assets/js/store/index.js new file mode 100644 index 00000000..a4ebbd27 --- /dev/null +++ b/resources/assets/js/store/index.js @@ -0,0 +1,23 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +Vue.use(Vuex) + +// Load store modules dynamically. +const requireContext = require.context('./modules', false, /.*\.js$/) + +const modules = requireContext.keys() + .map(file => + [file.replace(/(^.\/)|(\.js$)/g, ''), requireContext(file)] + ) + .reduce((modules, [name, module]) => { + if (module.namespaced === undefined) { + module.namespaced = true + } + + return { ...modules, [name]: module } + }, {}) + +export default new Vuex.Store({ + modules +}) diff --git a/resources/assets/js/store/modules/auth.js b/resources/assets/js/store/modules/auth.js new file mode 100644 index 00000000..6f2d0dc6 --- /dev/null +++ b/resources/assets/js/store/modules/auth.js @@ -0,0 +1,82 @@ +import axios from 'axios' +import Cookies from 'js-cookie' +import * as types from '../mutation-types' + +// state +export const state = { + user: null, + token: Cookies.get('token'), + role: null +} + +// getters +export const getters = { + user: state => state.user, + token: state => state.token, + role: state => state.role, + check: state => state.user !== null +} + +// mutations +export const mutations = { + [types.SAVE_TOKEN] (state, { token, remember }) { + state.token = token + Cookies.set('token', token, { expires: remember ? 365 : null }) + }, + + [types.FETCH_USER_SUCCESS] (state, { user }) { + state.user = user + state.role = user.role + }, + + [types.FETCH_USER_FAILURE] (state) { + state.token = null + Cookies.remove('token') + }, + + [types.LOGOUT] (state) { + state.user = null + state.role = null + state.token = null + + Cookies.remove('token') + }, + + [types.UPDATE_USER] (state, { user }) { + state.user = user + } +} + +// actions +export const actions = { + saveToken ({ commit, dispatch }, payload) { + commit(types.SAVE_TOKEN, payload) + }, + + async fetchUser ({ commit }) { + try { + const { data } = await axios.get('/api/user') + commit(types.FETCH_USER_SUCCESS, { user: data }) + } catch (e) { + commit(types.FETCH_USER_FAILURE) + } + }, + + updateUser ({ commit }, payload) { + commit(types.UPDATE_USER, payload) + }, + + async logout ({ commit }) { + try { + await axios.post('/api/logout') + } catch (e) { } + + commit(types.LOGOUT) + }, + + async fetchOauthUrl (ctx, { provider }) { + const { data } = await axios.post(`/api/oauth/${provider}`) + + return data.url + } +} diff --git a/resources/assets/js/store/modules/booking.js b/resources/assets/js/store/modules/booking.js new file mode 100644 index 00000000..879d74f1 --- /dev/null +++ b/resources/assets/js/store/modules/booking.js @@ -0,0 +1,38 @@ +// import axios from 'axios' +// import Cookies from 'js-cookie' +// import * as types from '../mutation-types' + +// // state +// export const state = { +// booking: null +// } + +// // getters +// export const getters = { +// booking: state => state.booking, +// } + +// // mutations +// export const mutations = { +// [types.FETCH_BOOKING_SUCCESS] (state, { booking }) { +// state.booking = booking +// }, + +// [types.FETCH_BOOKING_FAILURE] (state) { +// state.booking = null +// }, + +// } + +// // actions +// export const actions = { +// async fetchBooking ({ commit }) { +// try { +// const { data } = await axios.get('/api/user') + +// commit(types.FETCH_BOOKING_SUCCESS, { booking: data }) +// } catch (e) { +// commit(types.FETCH_BOOKING_FAILURE) +// } +// } +// } diff --git a/resources/assets/js/store/modules/lang.js b/resources/assets/js/store/modules/lang.js new file mode 100644 index 00000000..7ac18231 --- /dev/null +++ b/resources/assets/js/store/modules/lang.js @@ -0,0 +1,32 @@ +import Cookies from 'js-cookie' +import * as types from '../mutation-types' + +const { locale, locales } = window.config + +// state +export const state = { + locale: Cookies.get('locale') || locale, + locales: locales +} + +// getters +export const getters = { + locale: state => state.locale, + locales: state => state.locales +} + +// mutations +export const mutations = { + [types.SET_LOCALE] (state, { locale }) { + state.locale = locale + } +} + +// actions +export const actions = { + setLocale ({ commit }, { locale }) { + commit(types.SET_LOCALE, { locale }) + + Cookies.set('locale', locale, { expires: 365 }) + } +} diff --git a/resources/assets/js/store/mutation-types.js b/resources/assets/js/store/mutation-types.js new file mode 100644 index 00000000..23ccf7b8 --- /dev/null +++ b/resources/assets/js/store/mutation-types.js @@ -0,0 +1,10 @@ +// auth.js +export const LOGOUT = 'LOGOUT' +export const SAVE_TOKEN = 'SAVE_TOKEN' +export const FETCH_USER = 'FETCH_USER' +export const FETCH_USER_SUCCESS = 'FETCH_USER_SUCCESS' +export const FETCH_USER_FAILURE = 'FETCH_USER_FAILURE' +export const UPDATE_USER = 'UPDATE_USER' + +// lang.js +export const SET_LOCALE = 'SET_LOCALE' diff --git a/resources/assets/sass/_variables.scss b/resources/assets/sass/_variables.scss new file mode 100644 index 00000000..84d6530d --- /dev/null +++ b/resources/assets/sass/_variables.scss @@ -0,0 +1,22 @@ +// // Body +$body-bg: #f7f9fb; + +// Cards +$card-spacer-x: 0.9375rem; +$card-spacer-y: 0.625rem; +$card-cap-bg: #fbfbfb; +$card-border-color: #e8eced; + +// Borders +$border-radius: .125rem; +$border-radius-lg: .2rem; +$border-radius-sm: .15rem; + +// Nav Pills +$nav-pills-border-radius: 0; + + +$primary-color: #FD7014; +$secondary-color: #393E46; +$background-color: #222831; +$text-color: #EEEEEE; diff --git a/resources/assets/sass/app.scss b/resources/assets/sass/app.scss new file mode 100644 index 00000000..2230b0f0 --- /dev/null +++ b/resources/assets/sass/app.scss @@ -0,0 +1,9 @@ +@import 'variables'; +@import '~bootstrap/scss/bootstrap'; +@import '~sweetalert2/src/sweetalert2'; + +@import 'elements/card'; +@import 'elements/navbar'; +@import 'elements/buttons'; +@import 'elements/transitions'; + diff --git a/resources/assets/sass/elements/_buttons.scss b/resources/assets/sass/elements/_buttons.scss new file mode 100644 index 00000000..1e35cd0d --- /dev/null +++ b/resources/assets/sass/elements/_buttons.scss @@ -0,0 +1,25 @@ +.btn-loading { + position: relative; + pointer-events: none; + color: transparent !important; + + &:after { + animation: spinAround 500ms infinite linear; + border: 2px solid #dbdbdb; + border-radius: 50%; + border-right-color: transparent; + border-top-color: transparent; + content: ""; + display: block; + height: 1em; + width: 1em; + position: absolute; + left: calc(50% - (1em / 2)); + top: calc(50% - (1em / 2)); + } +} + +@keyframes spinAround { + from { transform: rotate(0deg); } + to { transform: rotate(359deg); } +} diff --git a/resources/assets/sass/elements/_card.scss b/resources/assets/sass/elements/_card.scss new file mode 100644 index 00000000..ed1522b3 --- /dev/null +++ b/resources/assets/sass/elements/_card.scss @@ -0,0 +1,3 @@ +.card { + box-shadow: 0 1px 1px rgba(0, 0, 0, 0.05); +} diff --git a/resources/assets/sass/elements/_navbar.scss b/resources/assets/sass/elements/_navbar.scss new file mode 100644 index 00000000..e5dbeba5 --- /dev/null +++ b/resources/assets/sass/elements/_navbar.scss @@ -0,0 +1,19 @@ +.navbar { + font-weight: 600; + box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.1); +} + +.nav-item { + .dropdown-menu { + border: none; + margin-top: .5rem; + border-top: 1px solid #f2f2f2 !important; + box-shadow: 0 4px 8px 0 rgba(0,0,0,0.12), 0 2px 4px 0 rgba(0,0,0,0.08); + } +} + +.nav-link { + .svg-inline--fa { + font-size: 1.4rem; + } +} diff --git a/resources/assets/sass/elements/_transitions.scss b/resources/assets/sass/elements/_transitions.scss new file mode 100644 index 00000000..aebe03a1 --- /dev/null +++ b/resources/assets/sass/elements/_transitions.scss @@ -0,0 +1,17 @@ +.page-enter-active, +.page-leave-active { + transition: opacity .2s; +} +.page-enter, +.page-leave-to { + opacity: 0; +} + +.fade-enter-active, +.fade-leave-active { + transition: opacity .15s +} +.fade-enter, +.fade-leave-to { + opacity: 0 +} diff --git a/resources/lang/en/auth.php b/resources/lang/en/auth.php new file mode 100644 index 00000000..e5506df2 --- /dev/null +++ b/resources/lang/en/auth.php @@ -0,0 +1,19 @@ + 'These credentials do not match our records.', + 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.', + +]; diff --git a/resources/lang/en/pagination.php b/resources/lang/en/pagination.php new file mode 100644 index 00000000..d4814118 --- /dev/null +++ b/resources/lang/en/pagination.php @@ -0,0 +1,19 @@ + '« Previous', + 'next' => 'Next »', + +]; diff --git a/resources/lang/en/passwords.php b/resources/lang/en/passwords.php new file mode 100644 index 00000000..e5544d20 --- /dev/null +++ b/resources/lang/en/passwords.php @@ -0,0 +1,22 @@ + 'Passwords must be at least six characters and match the confirmation.', + 'reset' => 'Your password has been reset!', + 'sent' => 'We have e-mailed your password reset link!', + 'token' => 'This password reset token is invalid.', + 'user' => "We can't find a user with that e-mail address.", + +]; diff --git a/resources/lang/en/validation.php b/resources/lang/en/validation.php new file mode 100644 index 00000000..edc036dd --- /dev/null +++ b/resources/lang/en/validation.php @@ -0,0 +1,121 @@ + 'The :attribute must be accepted.', + 'active_url' => 'The :attribute is not a valid URL.', + 'after' => 'The :attribute must be a date after :date.', + 'after_or_equal' => 'The :attribute must be a date after or equal to :date.', + 'alpha' => 'The :attribute may only contain letters.', + 'alpha_dash' => 'The :attribute may only contain letters, numbers, and dashes.', + 'alpha_num' => 'The :attribute may only contain letters and numbers.', + 'array' => 'The :attribute must be an array.', + 'before' => 'The :attribute must be a date before :date.', + 'before_or_equal' => 'The :attribute must be a date before or equal to :date.', + 'between' => [ + 'numeric' => 'The :attribute must be between :min and :max.', + 'file' => 'The :attribute must be between :min and :max kilobytes.', + 'string' => 'The :attribute must be between :min and :max characters.', + 'array' => 'The :attribute must have between :min and :max items.', + ], + 'boolean' => 'The :attribute field must be true or false.', + 'confirmed' => 'The :attribute confirmation does not match.', + 'date' => 'The :attribute is not a valid date.', + 'date_format' => 'The :attribute does not match the format :format.', + 'different' => 'The :attribute and :other must be different.', + 'digits' => 'The :attribute must be :digits digits.', + 'digits_between' => 'The :attribute must be between :min and :max digits.', + 'dimensions' => 'The :attribute has invalid image dimensions.', + 'distinct' => 'The :attribute field has a duplicate value.', + 'email' => 'The :attribute must be a valid email address.', + 'exists' => 'The selected :attribute is invalid.', + 'file' => 'The :attribute must be a file.', + 'filled' => 'The :attribute field must have a value.', + 'image' => 'The :attribute must be an image.', + 'in' => 'The selected :attribute is invalid.', + 'in_array' => 'The :attribute field does not exist in :other.', + 'integer' => 'The :attribute must be an integer.', + 'ip' => 'The :attribute must be a valid IP address.', + 'ipv4' => 'The :attribute must be a valid IPv4 address.', + 'ipv6' => 'The :attribute must be a valid IPv6 address.', + 'json' => 'The :attribute must be a valid JSON string.', + 'max' => [ + 'numeric' => 'The :attribute may not be greater than :max.', + 'file' => 'The :attribute may not be greater than :max kilobytes.', + 'string' => 'The :attribute may not be greater than :max characters.', + 'array' => 'The :attribute may not have more than :max items.', + ], + 'mimes' => 'The :attribute must be a file of type: :values.', + 'mimetypes' => 'The :attribute must be a file of type: :values.', + 'min' => [ + 'numeric' => 'The :attribute must be at least :min.', + 'file' => 'The :attribute must be at least :min kilobytes.', + 'string' => 'The :attribute must be at least :min characters.', + 'array' => 'The :attribute must have at least :min items.', + ], + 'not_in' => 'The selected :attribute is invalid.', + 'numeric' => 'The :attribute must be a number.', + 'present' => 'The :attribute field must be present.', + 'regex' => 'The :attribute format is invalid.', + 'required' => 'The :attribute field is required.', + 'required_if' => 'The :attribute field is required when :other is :value.', + 'required_unless' => 'The :attribute field is required unless :other is in :values.', + 'required_with' => 'The :attribute field is required when :values is present.', + 'required_with_all' => 'The :attribute field is required when :values is present.', + 'required_without' => 'The :attribute field is required when :values is not present.', + 'required_without_all' => 'The :attribute field is required when none of :values are present.', + 'same' => 'The :attribute and :other must match.', + 'size' => [ + 'numeric' => 'The :attribute must be :size.', + 'file' => 'The :attribute must be :size kilobytes.', + 'string' => 'The :attribute must be :size characters.', + 'array' => 'The :attribute must contain :size items.', + ], + 'string' => 'The :attribute must be a string.', + 'timezone' => 'The :attribute must be a valid zone.', + 'unique' => 'The :attribute has already been taken.', + 'uploaded' => 'The :attribute failed to upload.', + 'url' => 'The :attribute format is invalid.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'attribute-name' => [ + 'rule-name' => 'custom-message', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [], + +]; diff --git a/resources/lang/es/auth.php b/resources/lang/es/auth.php new file mode 100644 index 00000000..6d03049b --- /dev/null +++ b/resources/lang/es/auth.php @@ -0,0 +1,19 @@ + 'Estas credenciales no coinciden con nuestros registros.', + 'throttle' => 'Demasiados intentos de acceso. Por favor intente nuevamente en :seconds segundos.', + +]; diff --git a/resources/lang/es/pagination.php b/resources/lang/es/pagination.php new file mode 100644 index 00000000..325916dc --- /dev/null +++ b/resources/lang/es/pagination.php @@ -0,0 +1,19 @@ + '« Anterior', + 'next' => 'Siguiente »', + +]; diff --git a/resources/lang/es/passwords.php b/resources/lang/es/passwords.php new file mode 100644 index 00000000..f4639e3d --- /dev/null +++ b/resources/lang/es/passwords.php @@ -0,0 +1,22 @@ + 'Las contraseñas deben coincidir y contener al menos 6 caracteres', + 'reset' => '¡Tu contraseña ha sido restablecida!', + 'sent' => '¡Te hemos enviado por correo el enlace para restablecer tu contraseña!', + 'token' => 'El token de recuperación de contraseña es inválido.', + 'user' => 'No podemos encontrar ningún usuario con ese correo electrónico.', + +]; diff --git a/resources/lang/es/validation.php b/resources/lang/es/validation.php new file mode 100644 index 00000000..43aae7a0 --- /dev/null +++ b/resources/lang/es/validation.php @@ -0,0 +1,155 @@ + ':attribute debe ser aceptado.', + 'active_url' => ':attribute no es una URL válida.', + 'after' => ':attribute debe ser una fecha posterior a :date.', + 'after_or_equal' => ':attribute debe ser una fecha posterior o igual a :date.', + 'alpha' => ':attribute sólo debe contener letras.', + 'alpha_dash' => ':attribute sólo debe contener letras, números y guiones.', + 'alpha_num' => ':attribute sólo debe contener letras y números.', + 'array' => ':attribute debe ser un conjunto.', + 'before' => ':attribute debe ser una fecha anterior a :date.', + 'before_or_equal' => ':attribute debe ser una fecha anterior o igual a :date.', + 'between' => [ + 'numeric' => ':attribute tiene que estar entre :min - :max.', + 'file' => ':attribute debe pesar entre :min - :max kilobytes.', + 'string' => ':attribute tiene que tener entre :min - :max caracteres.', + 'array' => ':attribute tiene que tener entre :min - :max ítems.', + ], + 'boolean' => 'El campo :attribute debe tener un valor verdadero o falso.', + 'confirmed' => 'La confirmación de :attribute no coincide.', + 'date' => ':attribute no es una fecha válida.', + 'date_format' => ':attribute no corresponde al formato :format.', + 'different' => ':attribute y :other deben ser diferentes.', + 'digits' => ':attribute debe tener :digits dígitos.', + 'digits_between' => ':attribute debe tener entre :min y :max dígitos.', + 'dimensions' => 'Las dimensiones de la imagen :attribute no son válidas.', + 'distinct' => 'El campo :attribute contiene un valor duplicado.', + 'email' => ':attribute no es un correo válido', + 'exists' => ':attribute es inválido.', + 'file' => 'El campo :attribute debe ser un archivo.', + 'filled' => 'El campo :attribute es obligatorio.', + 'image' => ':attribute debe ser una imagen.', + 'in' => ':attribute es inválido.', + 'in_array' => 'El campo :attribute no existe en :other.', + 'integer' => ':attribute debe ser un número entero.', + 'ip' => ':attribute debe ser una dirección IP válida.', + 'ipv4' => ':attribute debe ser un dirección IPv4 válida', + 'ipv6' => ':attribute debe ser un dirección IPv6 válida.', + 'json' => 'El campo :attribute debe tener una cadena JSON válida.', + 'max' => [ + 'numeric' => ':attribute no debe ser mayor a :max.', + 'file' => ':attribute no debe ser mayor que :max kilobytes.', + 'string' => ':attribute no debe ser mayor que :max caracteres.', + 'array' => ':attribute no debe tener más de :max elementos.', + ], + 'mimes' => ':attribute debe ser un archivo con formato: :values.', + 'mimetypes' => ':attribute debe ser un archivo con formato: :values.', + 'min' => [ + 'numeric' => 'El tamaño de :attribute debe ser de al menos :min.', + 'file' => 'El tamaño de :attribute debe ser de al menos :min kilobytes.', + 'string' => ':attribute debe contener al menos :min caracteres.', + 'array' => ':attribute debe tener al menos :min elementos.', + ], + 'not_in' => ':attribute es inválido.', + 'numeric' => ':attribute debe ser numérico.', + 'present' => 'El campo :attribute debe estar presente.', + 'regex' => 'El formato de :attribute es inválido.', + 'required' => 'El campo :attribute es obligatorio.', + 'required_if' => 'El campo :attribute es obligatorio cuando :other es :value.', + 'required_unless' => 'El campo :attribute es obligatorio a menos que :other esté en :values.', + 'required_with' => 'El campo :attribute es obligatorio cuando :values está presente.', + 'required_with_all' => 'El campo :attribute es obligatorio cuando :values está presente.', + 'required_without' => 'El campo :attribute es obligatorio cuando :values no está presente.', + 'required_without_all' => 'El campo :attribute es obligatorio cuando ninguno de :values estén presentes.', + 'same' => ':attribute y :other deben coincidir.', + 'size' => [ + 'numeric' => 'El tamaño de :attribute debe ser :size.', + 'file' => 'El tamaño de :attribute debe ser :size kilobytes.', + 'string' => ':attribute debe contener :size caracteres.', + 'array' => ':attribute debe contener :size elementos.', + ], + 'string' => 'El campo :attribute debe ser una cadena de caracteres.', + 'timezone' => 'El :attribute debe ser una zona válida.', + 'unique' => ':attribute ya ha sido registrado.', + 'uploaded' => 'Subir :attribute ha fallado.', + 'url' => 'El formato :attribute es inválido.', + + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + + 'custom' => [ + 'password' => [ + 'min' => 'La :attribute debe contener más de :min caracteres', + ], + 'email' => [ + 'unique' => 'El :attribute ya ha sido registrado.', + ], + ], + + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + + 'attributes' => [ + 'name' => 'nombre', + 'username' => 'usuario', + 'email' => 'correo electrónico', + 'first_name' => 'nombre', + 'last_name' => 'apellido', + 'password' => 'contraseña', + 'password_confirmation' => 'confirmación de la contraseña', + 'city' => 'ciudad', + 'country' => 'país', + 'address' => 'dirección', + 'phone' => 'teléfono', + 'mobile' => 'móvil', + 'age' => 'edad', + 'sex' => 'sexo', + 'gender' => 'género', + 'year' => 'año', + 'month' => 'mes', + 'day' => 'día', + 'hour' => 'hora', + 'minute' => 'minuto', + 'second' => 'segundo', + 'title' => 'título', + 'content' => 'contenido', + 'body' => 'contenido', + 'description' => 'descripción', + 'excerpt' => 'extracto', + 'date' => 'fecha', + 'time' => 'hora', + 'subject' => 'asunto', + 'message' => 'mensaje', + ], + +]; diff --git a/resources/lang/zh-CN/auth.php b/resources/lang/zh-CN/auth.php new file mode 100644 index 00000000..e4a11509 --- /dev/null +++ b/resources/lang/zh-CN/auth.php @@ -0,0 +1,16 @@ + '用户名或手机号与密码不匹配或用户被禁用', + 'throttle' => '失败次数太多,请在:seconds秒后再尝试', +]; diff --git a/resources/lang/zh-CN/pagination.php b/resources/lang/zh-CN/pagination.php new file mode 100644 index 00000000..58038476 --- /dev/null +++ b/resources/lang/zh-CN/pagination.php @@ -0,0 +1,16 @@ + '« 上一页', + 'next' => '下一页 »', +]; diff --git a/resources/lang/zh-CN/passwords.php b/resources/lang/zh-CN/passwords.php new file mode 100644 index 00000000..f8c21b78 --- /dev/null +++ b/resources/lang/zh-CN/passwords.php @@ -0,0 +1,19 @@ + '密码长度至少包含6个字符并且两次输入密码要一致', + 'reset' => '密码已经被重置!', + 'sent' => '我们已经发送密码重置链接到您的邮箱', + 'token' => '密码重置令牌无效', + 'user' => '抱歉,该邮箱对应的用户不存在!', +]; diff --git a/resources/lang/zh-CN/validation.php b/resources/lang/zh-CN/validation.php new file mode 100644 index 00000000..be3ac42c --- /dev/null +++ b/resources/lang/zh-CN/validation.php @@ -0,0 +1,97 @@ + ':attribute 已存在', + 'accepted' => ':attribute 是被接受的', + 'active_url' => ':attribute 必须是一个合法的 URL', + 'after' => ':attribute 必须是 :date 之后的一个日期', + 'alpha' => ':attribute 必须全部由字母字符构成。', + 'alpha_dash' => ':attribute 必须全部由字母、数字、中划线或下划线字符构成', + 'alpha_num' => ':attribute 必须全部由字母和数字构成', + 'array' => ':attribute 必须是个数组', + 'before' => ':attribute 必须是 :date 之前的一个日期', + 'between' => [ + 'numeric' => ':attribute 必须在 :min 到 :max 之间', + 'file' => ':attribute 必须在 :min 到 :max KB之间', + 'string' => ':attribute 必须在 :min 到 :max 个字符之间', + 'array' => ':attribute 必须在 :min 到 :max 项之间', + ], + 'boolean' => ':attribute 字符必须是 true 或 false', + 'confirmed' => ':attribute 两次确认不匹配', + 'date' => ':attribute 必须是一个合法的日期', + 'date_format' => ':attribute 与给定的格式 :format 不符合', + 'different' => ':attribute 必须不同于:other', + 'digits' => ':attribute 必须是 :digits 位', + 'digits_between' => ':attribute 必须在 :min and :max 位之间', + 'email' => ':attribute 必须是一个合法的电子邮件地址。', + 'filled' => ':attribute 的字段是必填的', + 'exists' => '选定的 :attribute 是无效的', + 'image' => ':attribute 必须是一个图片 (jpeg, png, bmp 或者 gif)', + 'in' => '选定的 :attribute 是无效的', + 'integer' => ':attribute 必须是个整数', + 'ip' => ':attribute 必须是一个合法的 IP 地址。', + 'max' => [ + 'numeric' => ':attribute 的最大长度为 :max 位', + 'file' => ':attribute 的最大为 :max', + 'string' => ':attribute 的最大长度为 :max 字符', + 'array' => ':attribute 的最大个数为 :max 个', + ], + 'mimes' => ':attribute 的文件类型必须是:values', + 'mimetypes' => ':attribute 的文件类型必须是: :values.', + 'min' => [ + 'numeric' => ':attribute 的最小长度为 :min 位', + 'string' => ':attribute 的最小长度为 :min 字符', + 'file' => ':attribute 大小至少为:min KB', + 'array' => ':attribute 至少有 :min 项', + ], + 'not_in' => '选定的 :attribute 是无效的', + 'numeric' => ':attribute 必须是数字', + 'regex' => ':attribute 格式是无效的', + 'required' => ':attribute 字段必须填写', + 'required_if' => ':attribute 字段是必须的当 :other 是 :value', + 'required_with' => ':attribute 字段是必须的当 :values 是存在的', + 'required_with_all' => ':attribute 字段是必须的当 :values 是存在的', + 'required_without' => ':attribute 字段是必须的当 :values 是不存在的', + 'required_without_all' => ':attribute 字段是必须的当 没有一个 :values 是存在的', + 'same' => ':attribute 和 :other 必须匹配', + 'size' => [ + 'numeric' => ':attribute 必须是 :size 位', + 'file' => ':attribute 必须是 :size KB', + 'string' => ':attribute 必须是 :size 个字符', + 'array' => ':attribute 必须包括 :size 项', + ], + 'url' => ':attribute 无效的格式', + 'timezone' => ':attribute 必须个有效的时区', + /* + |-------------------------------------------------------------------------- + | Custom Validation Language Lines + |-------------------------------------------------------------------------- + | + | Here you may specify custom validation messages for attributes using the + | convention "attribute.rule" to name the lines. This makes it quick to + | specify a specific custom language line for a given attribute rule. + | + */ + 'custom' => [], + /* + |-------------------------------------------------------------------------- + | Custom Validation Attributes + |-------------------------------------------------------------------------- + | + | The following language lines are used to swap attribute place-holders + | with something more reader friendly such as E-Mail Address instead + | of "email". This simply helps us make messages a little cleaner. + | + */ + 'attributes' => [], +]; diff --git a/resources/views/auth/login.blade.php b/resources/views/auth/login.blade.php new file mode 100644 index 00000000..e69de29b diff --git a/resources/views/auth/passwords/email.blade.php b/resources/views/auth/passwords/email.blade.php new file mode 100644 index 00000000..4d469007 --- /dev/null +++ b/resources/views/auth/passwords/email.blade.php @@ -0,0 +1,47 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Reset Password') }}
+ +
+ @if (session('status')) +
+ {{ session('status') }} +
+ @endif + +
+ @csrf + +
+ + +
+ + + @if ($errors->has('email')) + + {{ $errors->first('email') }} + + @endif +
+
+ +
+
+ +
+
+
+
+
+
+
+
+@endsection diff --git a/resources/views/auth/passwords/reset.blade.php b/resources/views/auth/passwords/reset.blade.php new file mode 100644 index 00000000..52ef4266 --- /dev/null +++ b/resources/views/auth/passwords/reset.blade.php @@ -0,0 +1,65 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Reset Password') }}
+ +
+
+ @csrf + + + +
+ + +
+ + + @if ($errors->has('email')) + + {{ $errors->first('email') }} + + @endif +
+
+ +
+ + +
+ + + @if ($errors->has('password')) + + {{ $errors->first('password') }} + + @endif +
+
+ +
+ + +
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+
+@endsection diff --git a/resources/views/auth/register.blade.php b/resources/views/auth/register.blade.php new file mode 100644 index 00000000..60bdf664 --- /dev/null +++ b/resources/views/auth/register.blade.php @@ -0,0 +1,77 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
{{ __('Register') }}
+ +
+
+ @csrf + +
+ + +
+ + + @if ($errors->has('name')) + + {{ $errors->first('name') }} + + @endif +
+
+ +
+ + +
+ + + @if ($errors->has('email')) + + {{ $errors->first('email') }} + + @endif +
+
+ +
+ + +
+ + + @if ($errors->has('password')) + + {{ $errors->first('password') }} + + @endif +
+
+ +
+ + +
+ +
+
+ +
+
+ +
+
+
+
+
+
+
+
+@endsection diff --git a/resources/views/booking/index.blade.php b/resources/views/booking/index.blade.php new file mode 100644 index 00000000..84583a52 --- /dev/null +++ b/resources/views/booking/index.blade.php @@ -0,0 +1,95 @@ + + + + + + + + Laravel + + + + + + + + +
+ @if (Route::has('login')) + + @endif + +
+
+ Laravelllll +
+ + +
+
+ + diff --git a/resources/views/errors/layout.blade.php b/resources/views/errors/layout.blade.php new file mode 100644 index 00000000..22d38236 --- /dev/null +++ b/resources/views/errors/layout.blade.php @@ -0,0 +1,58 @@ +{{-- Illuminate/Foundation/Exceptions/views --}} + + + + + + + + @yield('title') + + + + + + + + +
+
+
+ @yield('message') +
+
+
+ + diff --git a/resources/views/home.blade.php b/resources/views/home.blade.php new file mode 100644 index 00000000..223d77ec --- /dev/null +++ b/resources/views/home.blade.php @@ -0,0 +1,23 @@ +@extends('layouts.app') + +@section('content') +
+
+
+
+
Dashboard
+ +
+ @if (session('status')) +
+ {{ session('status') }} +
+ @endif + + You are logged in! +
+
+
+
+
+@endsection diff --git a/resources/views/index.blade.php b/resources/views/index.blade.php new file mode 100644 index 00000000..ee47d647 --- /dev/null +++ b/resources/views/index.blade.php @@ -0,0 +1,53 @@ +@php +$config = [ + 'appName' => config('app.name'), + 'locale' => $locale = app()->getLocale(), + 'locales' => config('app.locales'), + 'githubAuth' => config('services.github.client_id'), + 'pusherUrl' => env('PUSHER_APP_KEY'), +]; + +$polyfills = [ + 'Promise', + 'Object.assign', + 'Object.values', + 'Array.prototype.find', + 'Array.prototype.findIndex', + 'Array.prototype.includes', + 'String.prototype.includes', + 'String.prototype.startsWith', + 'String.prototype.endsWith', +]; +@endphp + + + + + + + {{ config('app.name') }} + + + + + + + +
+ + {{-- Global configuration object --}} + + {{-- Polyfill JS features via polyfill.io --}} + + + {{-- Load the application scripts --}} + @if (env('APP_ENV') == 'production' || env('APP_ENV') == 'staging') + + + + + @else + + @endif + + diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php new file mode 100644 index 00000000..efe06e45 --- /dev/null +++ b/resources/views/layouts/app.blade.php @@ -0,0 +1,75 @@ + + + + + + + + + + + {{ config('app.name', 'Laravel') }} + + + + + + + + + + + + +
+ + +
+ @yield('content') +
+
+ + diff --git a/resources/views/oauth/callback.blade.php b/resources/views/oauth/callback.blade.php new file mode 100644 index 00000000..45a30b58 --- /dev/null +++ b/resources/views/oauth/callback.blade.php @@ -0,0 +1,12 @@ + + + + {{ config('app.name') }} + + + + + diff --git a/resources/views/oauth/emailTaken.blade.php b/resources/views/oauth/emailTaken.blade.php new file mode 100644 index 00000000..af899b29 --- /dev/null +++ b/resources/views/oauth/emailTaken.blade.php @@ -0,0 +1,5 @@ +@extends('errors.layout') + +@section('title', 'Login Error') + +@section('message', 'Email already taken.') diff --git a/routes/api.php b/routes/api.php new file mode 100644 index 00000000..cb0e904d --- /dev/null +++ b/routes/api.php @@ -0,0 +1,136 @@ +get('/user', function (Request $request) { + return $request->user(); +}); + +Route::get('rate', 'RateController@show'); +//Route::middleware('auth:api')->get('/user', function (Request $request) { +// return $request->user(); +//}); +Route::group(['middleware' => 'auth:api'], function () { + Route::post('logout', 'Auth\LoginController@logout'); + + /*Route for the booking */ + Route::get('booking/{book_id}', 'BookingController@show'); + Route::put('booking/{book_id}', 'BookingController@update'); + Route::delete('booking/{book_id}', 'BookingController@delete'); + Route::post('booking/', 'BookingController@store'); + Route::post('booking/calculation', 'BookingController@calculation'); + Route::post('booking/{id}/cancel', 'BookingController@cancel'); + Route::post('booking/{id}/upload-user-bankslip', 'BookingController@uploadbankslip'); + Route::post('booking/{id}/upload-po', 'BookingController@uploadPurchaseOrder'); + Route::post('booking/{id}/confirm-po', 'BookingController@confirmPurchaseOrder'); + Route::patch('booking/{id}/bankslip-amount', 'BookingController@updateBankSlipAmount'); + Route::post('booking/{book_id}/reject-bank-slip','BookingController@rejectBankSlip'); + Route::post('booking/{book_id}/approve-bank-slip','BookingController@approveBankSlip'); + Route::get('booking/', 'BookingController@index'); + Route::get('user-complete-booking', 'BookingController@userComplete'); + + Route::get('user', 'UserController@show'); + Route::patch('settings/profile', 'Settings\ProfileController@update'); + Route::patch('settings/password', 'Settings\PasswordController@update'); + + //Route::get('notification/user', 'NotificationController@getUserMessage'); + //Route::post('notification/read-notification/{notification_id}', 'NotificationController@readNotification'); + + // for both user and admin + Route::get('active-bank', 'SettingActiveBankController@index'); + Route::put('setting-tax', 'SettingActiveBankController@index'); + Route::put('setting-billing-charge', 'SettingBillingChargeController@index'); + Route::get('malaysia-bank/{malaysiaBank}', 'SettingMalaysiaBankController@show'); +}); + +Route::group(['middleware' => 'guest:api'], function () { + Route::post('login', 'Auth\LoginController@login')->name('login'); + Route::post('register', 'Auth\RegisterController@create'); + Route::post('password/email', 'Auth\ForgotPasswordController@sendResetLink'); + Route::post('password/reset', 'Auth\ResetPasswordController@reset'); + Route::post('oauth/{driver}', 'Auth\OAuthController@redirectToProvider'); + Route::get('oauth/{driver}/callback', 'Auth\OAuthController@handleProviderCallback')->name('oauth.callback'); +}); + +Route::group(['middleware' => ['role:admin']], function() { + Route::get('admin/booking/', 'BookingController@adminIndex'); + Route::get('admin-complete-booking', 'BookingController@adminBookComplete'); + Route::get('admin/booking/{id}', 'BookingController@adminShow'); + Route::post('update-rate', 'RateController@store'); + Route::put('update-rate/{rate}', 'RateController@update'); + Route::delete('update-rate/{rate}', 'RateController@delete'); + Route::get('update-rate', 'RateController@index'); + + Route::get('setting-credit', 'SettingCreditController@index'); + Route::put('setting-credit', 'SettingCreditController@update'); + + Route::put('setting-active-bank', 'SettingActiveBankController@update'); + + Route::put('setting-tax', 'SettingTaxRateController@update'); + + Route::put('setting-billing-charge', 'SettingBillingChargeController@update'); + + Route::get('setting-supplier', 'SettingSupplierController@index'); + Route::get('setting-supplier/{supplier}', 'SettingSupplierController@show'); + Route::post('setting-supplier', 'SettingSupplierController@store'); + Route::put('setting-supplier/{supplier}', 'SettingSupplierController@update'); + Route::delete('setting-supplier/{supplier}', 'SettingSupplierController@delete'); + + Route::get('setting-beneficiary', 'SettingBeneficiaryController@index'); + Route::get('setting-beneficiary/{beneficiary}', 'SettingBeneficiaryController@show'); + Route::post('setting-beneficiary', 'SettingBeneficiaryController@store'); + Route::put('setting-beneficiary/{beneficiary}', 'SettingBeneficiaryController@update'); + Route::delete('setting-beneficiary/{beneficiary}', 'SettingBeneficiaryController@delete'); + + Route::get('setting-malaysia-bank', 'SettingMalaysiaBankController@index'); + Route::post('setting-malaysia-bank', 'SettingMalaysiaBankController@store'); + Route::put('setting-malaysia-bank/{malaysiaBank}', 'SettingMalaysiaBankController@update'); + Route::delete('setting-malaysia-bank/{malaysiaBank}', 'SettingMalaysiaBankController@delete'); + + Route::get('setting-marking', 'MarkingController@index'); + Route::post('setting-marking', 'MarkingController@store'); + Route::get('setting-marking/{marking}', 'MarkingController@show'); + Route::put('setting-marking/{marking}', 'MarkingController@update'); + Route::delete('setting-marking/{marking}', 'MarkingController@delete'); + + Route::get('supplier-booking', 'BookingSupplierController@index'); + Route::get('supplier-booking/{id}', 'BookingSupplierController@show'); + Route::post('supplier-booking', 'BookingSupplierController@store'); + Route::put('supplier-booking/{id}', 'BookingSupplierController@update'); + Route::post('booking/{id}/confirm-supplier', 'BookingController@confirmSupplier'); + + // Route::get('notification', 'NotificationController@index'); + // Route::get('notification/{notification}', 'NotificationController@show'); + // Route::post('notification', 'NotificationController@store'); + // Route::put('notification/{notification}', 'NotificationController@update'); + // Route::delete('notification/{notification}', 'NotificationController@delete'); + + Route::post('booking/{id}/upload-china-bankslip','ChinaBankSlipController@store'); + Route::patch('booking/{id}/update-china-bankslip','ChinaBankSlipController@update'); + Route::get('booking/{id}/po', 'BookingController@showPurchaseOrder'); + Route::post('booking/{id}/upload-invoice', 'BookingController@uploadInvoice'); + Route::post('booking/{id}/confirm-invoice', 'BookingController@confirmInvoice'); + + Route::get('admin/complete-orders', 'BookingController@adminShowCompletedOrders'); + // for both user and admin + Route::get('setting-active-bank', 'SettingActiveBankController@index'); + Route::get('setting-tax', 'SettingTaxRateController@index'); + Route::get('setting-billing-charge', 'SettingBillingChargeController@index'); + Route::get('setting-malaysia-bank/{malaysiaBank}', 'SettingMalaysiaBankController@show'); + +}); \ No newline at end of file diff --git a/routes/channels.php b/routes/channels.php new file mode 100644 index 00000000..6babdff1 --- /dev/null +++ b/routes/channels.php @@ -0,0 +1,16 @@ +comment(Inspiring::quote()); +})->describe('Display an inspiring quote'); diff --git a/routes/web.php b/routes/web.php new file mode 100644 index 00000000..7dc992f7 --- /dev/null +++ b/routes/web.php @@ -0,0 +1,20 @@ +name('password.request'); +Route::post('password/reset', 'Auth\ResetPasswordController@postReset')->name('password.reset'); +Route::get('{path}', 'WelcomeController@index')->where('path', '(.*)'); + +Auth::routes(); + +//Route::get('/home', 'WelcomeController@index')->name('home'); diff --git a/server.php b/server.php new file mode 100644 index 00000000..5fb6379e --- /dev/null +++ b/server.php @@ -0,0 +1,21 @@ + + */ + +$uri = urldecode( + parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH) +); + +// This file allows us to emulate Apache's "mod_rewrite" functionality from the +// built-in PHP web server. This provides a convenient way to test a Laravel +// application without having installed a "real" web server software here. +if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) { + return false; +} + +require_once __DIR__.'/public/index.php'; diff --git a/storage/app/.gitignore b/storage/app/.gitignore new file mode 100755 index 00000000..8f4803c0 --- /dev/null +++ b/storage/app/.gitignore @@ -0,0 +1,3 @@ +* +!public/ +!.gitignore diff --git a/storage/app/public/.gitignore b/storage/app/public/.gitignore new file mode 100755 index 00000000..d6b7ef32 --- /dev/null +++ b/storage/app/public/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/.gitignore b/storage/framework/.gitignore new file mode 100755 index 00000000..b02b700f --- /dev/null +++ b/storage/framework/.gitignore @@ -0,0 +1,8 @@ +config.php +routes.php +schedule-* +compiled.php +services.json +events.scanned.php +routes.scanned.php +down diff --git a/storage/framework/cache/.gitignore b/storage/framework/cache/.gitignore new file mode 100755 index 00000000..d6b7ef32 --- /dev/null +++ b/storage/framework/cache/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/sessions/.gitignore b/storage/framework/sessions/.gitignore new file mode 100755 index 00000000..d6b7ef32 --- /dev/null +++ b/storage/framework/sessions/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/testing/.gitignore b/storage/framework/testing/.gitignore new file mode 100755 index 00000000..d6b7ef32 --- /dev/null +++ b/storage/framework/testing/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/framework/views/.gitignore b/storage/framework/views/.gitignore new file mode 100755 index 00000000..d6b7ef32 --- /dev/null +++ b/storage/framework/views/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/storage/logs/.gitignore b/storage/logs/.gitignore new file mode 100755 index 00000000..d6b7ef32 --- /dev/null +++ b/storage/logs/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tests/Browser/LoginTest.php b/tests/Browser/LoginTest.php new file mode 100644 index 00000000..0445c2a2 --- /dev/null +++ b/tests/Browser/LoginTest.php @@ -0,0 +1,54 @@ +create(); + + $this->browse(function ($browser) use ($user) { + $browser->visit(new Login) + ->submit($user->email, 'secret') + ->assertPageIs(Home::class); + }); + } + + /** @test */ + public function login_with_invalid_credentials() + { + $this->browse(function ($browser) { + $browser->visit(new Login) + ->submit('test@test.app', 'secret') + ->assertSee('These credentials do not match our records.'); + }); + } + + /** @test */ + public function log_out_the_user() + { + $user = factory(User::class)->create(); + + $this->browse(function ($browser) use ($user) { + $browser->visit(new Login) + ->submit($user->email, 'secret') + ->on(new Home) + ->clickLogout() + ->assertPageIs(Login::class); + }); + } +} diff --git a/tests/Browser/Pages/Home.php b/tests/Browser/Pages/Home.php new file mode 100644 index 00000000..2695d65c --- /dev/null +++ b/tests/Browser/Pages/Home.php @@ -0,0 +1,28 @@ +clickLink('Logout') + ->pause(300); + } +} diff --git a/tests/Browser/Pages/Login.php b/tests/Browser/Pages/Login.php new file mode 100644 index 00000000..269e6a86 --- /dev/null +++ b/tests/Browser/Pages/Login.php @@ -0,0 +1,32 @@ +type('email', $email) + ->type('password', $password) + ->press('Log In') + ->pause(350); + } +} diff --git a/tests/Browser/Pages/Page.php b/tests/Browser/Pages/Page.php new file mode 100644 index 00000000..0ddfb34e --- /dev/null +++ b/tests/Browser/Pages/Page.php @@ -0,0 +1,32 @@ +assertPathIs($this->url()); + } + + /** + * Get the global element shortcuts for the site. + * + * @return array + */ + public static function siteElements() + { + return [ + '@element' => '#selector', + ]; + } +} diff --git a/tests/Browser/Pages/Register.php b/tests/Browser/Pages/Register.php new file mode 100644 index 00000000..268d46a2 --- /dev/null +++ b/tests/Browser/Pages/Register.php @@ -0,0 +1,33 @@ + $value) { + $browser->type($key, $value); + } + + $browser->press('Register') + ->pause(500); + } +} diff --git a/tests/Browser/RegisterTest.php b/tests/Browser/RegisterTest.php new file mode 100644 index 00000000..da41136b --- /dev/null +++ b/tests/Browser/RegisterTest.php @@ -0,0 +1,50 @@ +browse(function ($browser) { + $browser->visit(new Register) + ->submit([ + 'name' => 'Test User', + 'email' => 'test@test.app', + 'password' => 'secret', + 'password_confirmation' => 'secret', + ]) + ->assertPageIs(Home::class); + }); + } + + /** @test */ + public function can_not_register_with_the_same_twice() + { + $user = factory(User::class)->create(); + + $this->browse(function ($browser) use ($user) { + $browser->visit(new Register) + ->submit([ + 'name' => 'Test User', + 'email' => $user->email, + 'password' => 'secret', + 'password_confirmation' => 'secret', + ]) + ->assertSee('The email has already been taken.'); + }); + } +} diff --git a/tests/Browser/WelcomeTest.php b/tests/Browser/WelcomeTest.php new file mode 100644 index 00000000..b9fa99b1 --- /dev/null +++ b/tests/Browser/WelcomeTest.php @@ -0,0 +1,17 @@ +browse(function ($browser) { + $browser->visit('/') + ->assertSee('Laravel'); + }); + } +} diff --git a/tests/Browser/console/.gitignore b/tests/Browser/console/.gitignore new file mode 100644 index 00000000..d6b7ef32 --- /dev/null +++ b/tests/Browser/console/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tests/Browser/screenshots/.gitignore b/tests/Browser/screenshots/.gitignore new file mode 100644 index 00000000..d6b7ef32 --- /dev/null +++ b/tests/Browser/screenshots/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/tests/CreatesApplication.php b/tests/CreatesApplication.php new file mode 100644 index 00000000..df7814bb --- /dev/null +++ b/tests/CreatesApplication.php @@ -0,0 +1,25 @@ +make(Kernel::class)->bootstrap(); + + Hash::setRounds(4); + + return $app; + } +} diff --git a/tests/DuskTestCase.php b/tests/DuskTestCase.php new file mode 100644 index 00000000..9357ab9e --- /dev/null +++ b/tests/DuskTestCase.php @@ -0,0 +1,55 @@ +assertPathIs($page->url()); +}); + +abstract class DuskTestCase extends BaseTestCase +{ + use DatabaseMigrations; + use CreatesApplication; + + /** + * Prepare for Dusk test execution. + * + * @beforeClass + * @return void + */ + public static function prepare() + { + static::startChromeDriver(); + } + + /** + * Create the RemoteWebDriver instance. + * + * @return \Facebook\WebDriver\Remote\RemoteWebDriver + */ + protected function driver() + { + $options = (new ChromeOptions)->addArguments([ + '--disable-gpu', + '--headless', + ]); + + return RemoteWebDriver::create( + 'http://localhost:9515', DesiredCapabilities::chrome()->setCapability( + ChromeOptions::CAPABILITY, $options + ) + ); + } +} diff --git a/tests/Feature/BookingTest.php b/tests/Feature/BookingTest.php new file mode 100644 index 00000000..bb43f344 --- /dev/null +++ b/tests/Feature/BookingTest.php @@ -0,0 +1,173 @@ +user = factory(User::class)->create(); + $this->setting_credit = factory(SettingCredit::class)->create(); + $this->booking = factory(Booking::class)->create([ + 'user_id' => $this->user->id + ]); + $this->userBankSlip = factory(UserBankSlip::class)->create([ + 'booking_id' => $this->booking->id + ]); + } + + public function testCreate() + { + $response = + $this->actingAs($this->user) + ->postJson('/api/booking/', [ + 'account_name' => 'johnny', + 'account_num' => '1234567', + 'bank_name' => 'myabnak', + 'bank_branch' => 'banking', + 'company_name' => 'besaras', + 'company_address' => 'californina', + 'bank_address' => 'cyber', + 'term' => 'x2_cash', + 'amount' => '30000', + 'rmb_book_amount' => '2131', + 'rmb_book_pay_method' => '2131rea', + 'rmb_book_account_name' => '2131rew', + 'rmb_book_acc_no' => '2131', + 'rmb_book_bank_branch' => '2131rew' + ]); + + if(14000 > $this->setting_credit->rmb_credit_limit){ + $response->assertStatus(401); + } + else{ + $response->assertStatus(201); + } + } + + public function testUploadUserSlip() + { + Storage::fake('file'); + $size_in_kb = 3072; // 3072KB = 3MB + $bankslip_path = UploadedFile::fake()->image('comp.jpg')->size($size_in_kb); + + $response = + $this->actingAs($this->user) + ->json('POST', '/api/booking/' . $this->booking->id . '/upload-user-bankslip', [ + 'file' => $bankslip_path + ]); + + if(!file_exists($bankslip_path) || $size_in_kb > 3072){ + $response->assertStatus(400); + } + else{ + $response->assertSuccessful(); + } + } + + public function testUpdateBankslipAmount() + { + $this->actingAs($this->user) + ->json('PATCH', '/api/booking/' . $this->booking->id . '/bankslip-amount', [ + 'transfer_amount' => '9000' + ]) + ->assertSuccessful(); + } + + public function testuploadPO() + { + Storage::fake('file'); + $size_in_kb = 3072; // 3072KB = 3MB + $image_path = UploadedFile::fake()->image('comp.jpg')->size($size_in_kb); + + $response = + $this->actingAs($this->user) + ->json('POST', '/api/booking/' . $this->booking->id . '/upload-po', [ + 'file' => $image_path, + 'amount' => '12345' + ]); + + if(!file_exists($image_path) || $size_in_kb > 3072){ + $response->assertStatus(400); + } + else{ + $response->assertSuccessful(); + } + } + + public function testCancel() + { + $this->actingAs($this->user) + ->json('POST','/api/booking/' . $this->booking->id . '/cancel', []) + ->assertSuccessful(); + } + + public function testApproveBankSlip() + { + $this->actingAs($this->user) + ->json('POST','/api/booking/' . $this->booking->id . '/approve-bank-slip', [ + ]) + ->assertSuccessful(); + } + + public function testRejectBankSlip() + { + $this->actingAs($this->user) + ->json('POST','/api/booking/' . $this->booking->id . '/reject-bank-slip', [ + 'reject_reason' => 'Amount no enough' + ]) + ->assertSuccessful(); + } + + // Only this is Admin permision required + // public function testUploadInvoice(){ + // $this->user->roles()->sync([]); + // $this->user->attachRole(Role::Where('name','admin')->first()); + + // $size_in_kb = 3072; + // Storage::fake('invoice_path'); + // $invoice_path = UploadedFile::fake()->create('invoice.pdf',$size_in_kb); + + // $response = + // $this->actingAs($this->user) + // ->json('POST', '/api/booking/' . $this->booking->id . '/upload-invoice', [ + // 'invoice_path' => $invoice_path, + // 'amount' => '12345' + // ]); + + // if(!file_exists($invoice_path) || $size_in_kb > 3072){ + // $response->assertStatus(400); + // } + // else{ + // $response->assertSuccessful(); + // } + // } +} diff --git a/tests/Feature/ChinaBankSlipTest.php b/tests/Feature/ChinaBankSlipTest.php new file mode 100644 index 00000000..c720adbf --- /dev/null +++ b/tests/Feature/ChinaBankSlipTest.php @@ -0,0 +1,66 @@ +user = factory(User::class)->create(); + $this->setting_credit = factory(SettingCredit::class)->create(); + $this->booking = factory(Booking::class)->create([ + 'user_id' => $this->user->id + ]); + $this->userBankSlip = factory(UserBankSlip::class)->create([ + 'booking_id' => $this->booking->id + ]); + } + /** + * A basic test example. + * + * @return void + */ + public function testCreate(){ + $this->user->attachRole(Role::Where('name','admin')->first()); + Storage::fake('file'); + $size_in_kb = 3072; // 3072KB = 3MB + $china_bank_slips_path = UploadedFile::fake()->image('comp.jpg')->size($size_in_kb); + $response = + $this->actingAs($this->user)-> + postJson('/api/booking/'. $this->booking->id .'/upload-china-bankslip',[ + 'file' => $china_bank_slips_path, + 'actual_transfer_amount' => '12', + 'details' => "123123", + 'date' => "123123" + ]); + if(!file_exists($china_bank_slips_path) || $size_in_kb > 3072){ + $response->assertStatus(400); + } + else{ + $response->assertSuccessful(); + } + } +} diff --git a/tests/Feature/LocaleTest.php b/tests/Feature/LocaleTest.php new file mode 100644 index 00000000..54996f70 --- /dev/null +++ b/tests/Feature/LocaleTest.php @@ -0,0 +1,26 @@ +withHeaders(['Accept-Language' => 'zh-CN']) + ->postJson('/api/login'); + + $this->assertEquals('zh-CN', $this->app->getLocale()); + } + + /** @test */ + public function set_locale_from_header_short() + { + $this->withHeaders(['Accept-Language' => 'en-US']) + ->postJson('/api/login'); + + $this->assertEquals('en', $this->app->getLocale()); + } +} diff --git a/tests/Feature/LoginTest.php b/tests/Feature/LoginTest.php new file mode 100644 index 00000000..ceb21457 --- /dev/null +++ b/tests/Feature/LoginTest.php @@ -0,0 +1,57 @@ +user = factory(User::class)->create(); + $this->withoutExceptionHandling(); + } + + /** @test */ + // public function authenticate() + // { + // $this->postJson('/api/login', [ + // 'email' => $this->user->email, + // 'password' => 'secret', + // ]) + // ->assertSuccessful() + // ->assertJsonStructure(['token', 'expires_in']) + // ->assertJson(['token_type' => 'bearer']); + // } + + /** @test */ + public function fetch_the_current_user() + { + $this->user->attachRole(Role::Where('name','member')->first()); + $response = $this->actingAs($this->user) + ->getJson('/api/user') + ->assertSuccessful() + ->assertJsonStructure(['id', 'name', 'email', 'marking']); + } + + /** @test */ + // public function log_out() + // { + // $token = $this->postJson('/api/login', [ + // 'email' => $this->user->email, + // 'password' => 'secret', + // ])->json()['token']; + + // $this->postJson("/api/logout?token=$token") + // ->assertSuccessful(); + + // $this->getJson("/api/user?token=$token") + // ->assertStatus(401); + // } +} diff --git a/tests/Feature/MarkingTest.php b/tests/Feature/MarkingTest.php new file mode 100644 index 00000000..13b662cc --- /dev/null +++ b/tests/Feature/MarkingTest.php @@ -0,0 +1,37 @@ +user = factory(User::class)->create(); + $this->user->attachRole(Role::Where('name','admin')->first()); + } + + public function testCreate(){ + $response = + $this->actingAs($this->user) + ->postJson('/api/setting-marking/',[ + 'email' => 'user@example.com', + 'marking' => 'markingcode123' + ]) + ->assertStatus(201); + } +} diff --git a/tests/Feature/RateTest.php b/tests/Feature/RateTest.php new file mode 100644 index 00000000..8cc829de --- /dev/null +++ b/tests/Feature/RateTest.php @@ -0,0 +1,68 @@ +user = factory(User::class)->create(); + $this->rate = factory(Rate::class)->create(); + $this->user->attachRole(Role::Where('name','admin')->first()); + } + + public function testStore(){ + $response = + $this->actingAs($this->user) + ->postJson('/api/update-rate/',[ + 'x1_cash' => '1.2', + 'x1_cheque' => '1.2', + 'x1_ba' => '1.2', + 'x2_cash' => '1.2', + 'x2_cheque' => '1.2', + 'x2_ba' => '1.2' + ]) + ->assertStatus(201); + } + + public function testUpdate(){ + $response = + $this->actingAs($this->user) + ->json('PUT','/api/update-rate/' . $this->rate->id,[ + 'x1_cash' => '1.2', + 'x1_cheque' => '1.2', + 'x1_ba' => '1.2', + 'x2_cash' => '1.2', + 'x2_cheque' => '1.2', + 'x2_ba' => '1.2' + ]) + ->assertStatus(200); + } + + public function testShowRate(){ + $response = $this->json('GET', '/api/rate'); + $response + ->assertStatus(200); + } + +} diff --git a/tests/Feature/RegisterTest.php b/tests/Feature/RegisterTest.php new file mode 100644 index 00000000..7d662898 --- /dev/null +++ b/tests/Feature/RegisterTest.php @@ -0,0 +1,31 @@ +marking = factory(Marking::class)->create(); + } + + + /** @test */ + public function can_register() + { + $response = $this->postJson('/api/register', [ + 'email' => $this->marking->email, + 'password' => 'secret', + 'password_confirmation' => 'secret', + 'marking' => $this->marking->marking + ]) + ->assertSuccessful(); + } +} diff --git a/tests/Feature/SettingCreditTest.php b/tests/Feature/SettingCreditTest.php new file mode 100644 index 00000000..6f529db1 --- /dev/null +++ b/tests/Feature/SettingCreditTest.php @@ -0,0 +1,37 @@ +user = factory(User::class)->create(); + $this->user->attachRole(Role::Where('name','admin')->first()); + } + + public function testStore(){ + + $this->actingAs($this->user) + ->putJson('/api/setting-credit/', [ + 'rmb_credit_limit' => '5000', + 'usd_credit_limit' => '2000', + 'time_limit' => '500' + ]) + ->assertStatus(200); + } + +} diff --git a/tests/Feature/SettingSupplierTest.php b/tests/Feature/SettingSupplierTest.php new file mode 100644 index 00000000..2375dc16 --- /dev/null +++ b/tests/Feature/SettingSupplierTest.php @@ -0,0 +1,68 @@ +user = factory(User::class)->create(); + $this->settingSupplier = factory(SettingSupplier::class)->create(); + $this->user->attachRole(Role::Where('name','admin')->first()); + } + + public function testStore(){ + $this->actingAs($this->user) + ->postJson('api/setting-supplier',[ + 'company_name' => "CompanyABC", + 'gst_no' => "123321", + 'supplier_reg_no' => "12332123", + 'bank_name' => "maybank", + 'acc_no' => "1231522334" + ]) + ->assertStatus(201); + + $this->assertDatabaseHas('setting_suppliers', [ + 'acc_no' => '1231522334' + ]); + } + + public function testUpdate(){ + $this->actingAs($this->user) + ->json('PUT','api/setting-supplier/' . $this->settingSupplier->id,[ + 'company_name' => "CompanyDDEDED", + 'gst_no' => "gstgstgstgst", + 'supplier_reg_no' => "ABC12332123", + 'bank_name' => "Cimb bank", + 'acc_no' => "7030303030" + ]) + ->assertStatus(200); + } + + public function testDelete(){ + $id = $this->settingSupplier->id; + $this->actingAs($this->user) + ->json('DELETE','api/setting-supplier/' . $this->settingSupplier->id,[ + 'id' => $this->settingSupplier->id + ]) + ->assertStatus(204); + + $this->assertDatabaseMissing('setting_suppliers',[ + 'id' => $id + ]); + } + +} diff --git a/tests/Feature/SettingsTest.php b/tests/Feature/SettingsTest.php new file mode 100644 index 00000000..d73e7449 --- /dev/null +++ b/tests/Feature/SettingsTest.php @@ -0,0 +1,54 @@ +user = factory(User::class)->create(); + $this->user->attachRole(Role::Where('name','member')->first()); + } + + /** @test */ + public function update_profile_info() + { + $response = $this->actingAs($this->user) + ->patchJson('/api/settings/profile', [ + 'name' => 'Test User', + 'email' => 'test@test.app', + ]) + ->assertSuccessful() + ->assertJsonStructure(['id', 'name', 'email']); + + $this->assertDatabaseHas('users', [ + 'id' => $this->user->id, + 'name' => 'Test User', + 'email' => 'test@test.app', + ]); + } + + /** @test */ + public function update_password() + { + $this->actingAs($this->user) + ->patchJson('/api/settings/password', [ + 'password' => 'updated', + 'password_confirmation' => 'updated', + ]) + ->assertSuccessful(); + + $this->assertTrue(Hash::check('updated', $this->user->password)); + } + +} diff --git a/tests/TestCase.php b/tests/TestCase.php new file mode 100644 index 00000000..86a8b144 --- /dev/null +++ b/tests/TestCase.php @@ -0,0 +1,13 @@ + /dev/null +do + printf "." + sleep 1 +done + +echo -e "\nmysql ready" diff --git a/webpack.mix.js b/webpack.mix.js new file mode 100644 index 00000000..7c62ee39 --- /dev/null +++ b/webpack.mix.js @@ -0,0 +1,50 @@ +const path = require('path') +const mix = require('laravel-mix') +// const { BundleAnalyzerPlugin } = require('webpack-bundle-analyzer') + +mix.config.vue.esModule = true + +mix + .js('resources/assets/js/app.js', 'public/js') + .sass('resources/assets/sass/app.scss', 'public/css') + + .sourceMaps() + .disableNotifications() + +if (mix.inProduction()) { + mix.version() + + mix.extract([ + 'vue', + 'vform', + 'axios', + 'vuex', + 'jquery', + 'popper.js', + 'vue-i18n', + 'vue-meta', + 'js-cookie', + 'bootstrap', + 'vue-router', + 'sweetalert2', + 'vuex-router-sync', + '@fortawesome/fontawesome', + '@fortawesome/vue-fontawesome' + ]) +} + +mix.webpackConfig({ + plugins: [ + // new BundleAnalyzerPlugin() + ], + resolve: { + extensions: ['.js', '.json', '.vue'], + alias: { + '~': path.join(__dirname, './resources/assets/js') + } + }, + output: { + chunkFilename: 'js/[name].[chunkhash].js', + publicPath: mix.config.hmr ? '//localhost:8080' : '/' + } +}) diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..ab37afdf --- /dev/null +++ b/yarn.lock @@ -0,0 +1,306 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +body-parser@1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.1" + http-errors "~1.6.2" + iconv-lite "0.4.19" + on-finished "~2.3.0" + qs "6.5.1" + raw-body "2.3.2" + type-is "~1.6.15" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +depd@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +depd@~1.1.1, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +express@^4.16.3: + version "4.16.3" + resolved "http://registry.npmjs.org/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.2" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.1" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.3" + qs "6.5.1" + range-parser "~1.2.0" + safe-buffer "5.1.1" + send "0.16.2" + serve-static "1.13.2" + setprototypeof "1.1.0" + statuses "~1.4.0" + type-is "~1.6.16" + utils-merge "1.0.1" + vary "~1.1.2" + +finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.4.0" + unpipe "~1.0.0" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +http-errors@1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +iconv-lite@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +mime-db@~1.36.0: + version "1.36.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397" + +mime-types@~2.1.18: + version "2.1.20" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19" + dependencies: + mime-db "~1.36.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +proxy-addr@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.8.0" + +qs@6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + dependencies: + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" + unpipe "1.0.0" + +safe-buffer@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +type-is@~1.6.15, type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc"