From fa0a4e0efa0e72cd1e3cc0cc2b13f141e548428a Mon Sep 17 00:00:00 2001 From: ancient-spirit Date: Fri, 17 Sep 2021 19:56:59 +0700 Subject: [PATCH] v4.1.0 --- .distignore | 13 + .github/workflows/release.yml | 72 + .gitignore | 27 + .npmrc | 1 + app/Admin.php | 91 + app/Ajax.php | 30 + app/Ajax/Admin.php | 1600 +++++ app/Ajax/Frontend.php | 278 + app/Connector.php | 108 + app/Frontend.php | 55 + app/Lib/Asura.php | 254 + app/Models/License.php | 7 + app/Models/Provider.php | 7 + app/Utils/DB.php | 107 + app/Utils/EDD_SL_Plugin_Updater.php | 620 ++ app/Utils/Http.php | 51 + app/Utils/Migration.php | 41 + app/Utils/Notice.php | 74 + app/Utils/OxygenBuilder.php | 166 + app/Utils/Template.php | 76 + app/Utils/Transient.php | 115 + app/Utils/Utils.php | 134 + asura-connector.php | 31 + composer.json | 18 + composer.lock | 535 ++ ...7_10_000000_001_create_providers_table.php | 28 + ...07_10_000001_001_create_licenses_table.php | 27 + package.json | 36 + pnpm-lock.yaml | 6189 +++++++++++++++++ public/.gitignore | 2 + readme.txt | 127 + resources/img/icon.svg | 1 + resources/img/loading/wave.svg | 7 + resources/js/admin/App.vue | 5 + resources/js/admin/UI/LoadingSvg.vue | 42 + resources/js/admin/bootstrap.js | 15 + .../components/licenses/LicensesItem.vue | 39 + .../components/licenses/LicensesList.vue | 371 + .../components/providers/ProvidersItem.vue | 145 + .../providers/ProvidersItemEdit.vue | 268 + .../components/providers/ProvidersList.vue | 243 + .../providers/ProvidersRegister.vue | 203 + .../js/admin/components/wizard/WizardItem.vue | 39 + .../js/admin/components/wizard/WizardList.vue | 677 ++ resources/js/admin/main.js | 30 + resources/js/admin/router.js | 65 + resources/sass/admin/app.scss | 5 + storage/framework/cache/data/.gitignore | 2 + tailwind.config.js | 32 + webpack.mix.js | 27 + 50 files changed, 13136 insertions(+) create mode 100644 .distignore create mode 100644 .github/workflows/release.yml create mode 100644 .gitignore create mode 100644 .npmrc create mode 100644 app/Admin.php create mode 100644 app/Ajax.php create mode 100644 app/Ajax/Admin.php create mode 100644 app/Ajax/Frontend.php create mode 100644 app/Connector.php create mode 100644 app/Frontend.php create mode 100644 app/Lib/Asura.php create mode 100644 app/Models/License.php create mode 100644 app/Models/Provider.php create mode 100644 app/Utils/DB.php create mode 100644 app/Utils/EDD_SL_Plugin_Updater.php create mode 100644 app/Utils/Http.php create mode 100644 app/Utils/Migration.php create mode 100644 app/Utils/Notice.php create mode 100644 app/Utils/OxygenBuilder.php create mode 100644 app/Utils/Template.php create mode 100644 app/Utils/Transient.php create mode 100644 app/Utils/Utils.php create mode 100644 asura-connector.php create mode 100644 composer.json create mode 100644 composer.lock create mode 100644 database/migrations/2021_07_10_000000_001_create_providers_table.php create mode 100644 database/migrations/2021_07_10_000001_001_create_licenses_table.php create mode 100644 package.json create mode 100644 pnpm-lock.yaml create mode 100644 public/.gitignore create mode 100644 readme.txt create mode 100644 resources/img/icon.svg create mode 100644 resources/img/loading/wave.svg create mode 100644 resources/js/admin/App.vue create mode 100644 resources/js/admin/UI/LoadingSvg.vue create mode 100644 resources/js/admin/bootstrap.js create mode 100644 resources/js/admin/components/licenses/LicensesItem.vue create mode 100644 resources/js/admin/components/licenses/LicensesList.vue create mode 100644 resources/js/admin/components/providers/ProvidersItem.vue create mode 100644 resources/js/admin/components/providers/ProvidersItemEdit.vue create mode 100644 resources/js/admin/components/providers/ProvidersList.vue create mode 100644 resources/js/admin/components/providers/ProvidersRegister.vue create mode 100644 resources/js/admin/components/wizard/WizardItem.vue create mode 100644 resources/js/admin/components/wizard/WizardList.vue create mode 100644 resources/js/admin/main.js create mode 100644 resources/js/admin/router.js create mode 100644 resources/sass/admin/app.scss create mode 100644 storage/framework/cache/data/.gitignore create mode 100644 tailwind.config.js create mode 100644 webpack.mix.js diff --git a/.distignore b/.distignore new file mode 100644 index 0000000..0b47465 --- /dev/null +++ b/.distignore @@ -0,0 +1,13 @@ +/.wordpress-org +/.git +/.github +/node_modules +/resources +.distignore +.gitignore +.npmrc +composer.json +composer.lock +package.json +pnpm-lock.yaml +webpack.mix.js \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..5bddf37 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,72 @@ +name: Create Release + +on: + push: + tags: + - 'v*' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Get the version + id: get_version + run: echo ::set-output name=VERSION::${GITHUB_REF/refs\/tags\//} + + - name: Install dependencies + run: composer install --prefer-dist --no-interaction --no-dev --no-suggest --optimize-autoloader + + - name: Cache pnpm modules + uses: actions/cache@v2 + env: + cache-name: cache-pnpm-modules + with: + path: ~/.pnpm-store + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ matrix.node-version }}-${{ hashFiles('**/package.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}-${{ matrix.node-version }}- + + - uses: pnpm/action-setup@v1.2.1 + with: + version: 5.17.2 + run_install: true + + - name: Compile assets + run: pnpm run production + + - name: Clean node modules + run: rm -rf node_modules + + - name: WordPress Plugin SVN Deploy + uses: nk-o/action-wordpress-plugin-deploy@master + env: + SVN_USERNAME: ${{ secrets.WORDPRESS_SVN_USERNAME }} + SVN_PASSWORD: ${{ secrets.WORDPRESS_SVN_PASSWORD }} + SLUG: asura-connector + + - name: Create zip + uses: montudor/action-zip@v0.1.1 + with: + args: zip -qq -r "connector-${{ steps.get_version.outputs.VERSION }}.zip" . -x *.git* node_modules/\* pnpm-lock.yaml composer.lock + + - name: Create release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: ${{ github.ref }} + + - name: Upload zip to release + uses: actions/upload-release-asset@v1.0.1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./connector-${{ steps.get_version.outputs.VERSION }}.zip + asset_name: connector-${{ steps.get_version.outputs.VERSION }}.zip + asset_content_type: application/zip \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7235afb --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +/dist +/languages +/node_modules +/storage/*.key +/vendor + +# misc files +mix-manifest.json + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000..bf2e764 --- /dev/null +++ b/.npmrc @@ -0,0 +1 @@ +shamefully-hoist=true diff --git a/app/Admin.php b/app/Admin.php new file mode 100644 index 0000000..717e97e --- /dev/null +++ b/app/Admin.php @@ -0,0 +1,91 @@ + admin_url('admin-ajax.php'), + 'nonce' => wp_create_nonce(Connector::$module_id . "-admin"), + 'module_id' => Connector::$module_id, + 'web_history' => add_query_arg([ + 'page' => Connector::$module_id, + 'tab' => 'dashboard', + ], admin_url('admin.php')) + ] + ); + } + } + + public function plugin_page(): void + { + $active_tab = isset($_GET['tab']) ? sanitize_text_field($_GET['tab']) : 'dashboard'; +?> +
+ +dashboard_tab(); + break; + } + } + + public function dashboard_tab(): void + { + echo '
'; + } +} diff --git a/app/Ajax.php b/app/Ajax.php new file mode 100644 index 0000000..e1f7e66 --- /dev/null +++ b/app/Ajax.php @@ -0,0 +1,30 @@ +register(); + } + + public function register() + { + $this->register_ajaxs($this->get_ajaxs()); + } + + private function register_ajaxs(array $ajaxs) + { + foreach ($ajaxs as $tag => $ajax) { + $priority = $ajax['priority'] ?? 10; + $args = $ajax['args'] ?? 1; + + add_action("wp_ajax_" . Connector::$module_id . "_{$tag}", $ajax['handler'], $priority, $args); + } + } + + private function get_ajaxs(): array + { + $ajaxs = [ + 'clean_cache' => [ + 'handler' => [$this, 'clean_cache'] + ], + 'add_provider' => [ + 'handler' => [$this, 'add_provider'] + ], + 'delete_provider' => [ + 'handler' => [$this, 'delete_provider'] + ], + 'list_providers' => [ + 'handler' => [$this, 'list_providers'] + ], + 'list_terms' => [ + 'handler' => [$this, 'list_terms'] + ], + 'get_provider' => [ + 'handler' => [$this, 'get_provider'] + ], + 'edit_provider' => [ + 'handler' => [$this, 'edit_provider'] + ], + 'list_licenses' => [ + 'handler' => [$this, 'list_licenses'] + ], + 'add_license' => [ + 'handler' => [$this, 'add_license'] + ], + 'delete_license' => [ + 'handler' => [$this, 'delete_license'] + ], + 'wizard_colors' => [ + 'handler' => [$this, 'wizard_colors'] + ], + 'wizard_stylesheets' => [ + 'handler' => [$this, 'wizard_stylesheets'] + ], + 'wizard_settings' => [ + 'handler' => [$this, 'wizard_settings'] + ], + 'wizard_stylesets' => [ + 'handler' => [$this, 'wizard_stylesets'] + ], + 'wizard_selectors' => [ + 'handler' => [$this, 'wizard_selectors'] + ], + 'wizard_templates' => [ + 'handler' => [$this, 'wizard_templates'] + ], + 'wizard_pages' => [ + 'handler' => [$this, 'wizard_pages'] + ], + 'wizard_classes' => [ + 'handler' => [$this, 'wizard_classes'] + ], + ]; + + return $ajaxs; + } + + public function list_terms() + { + check_ajax_referer(Connector::$module_id . "-admin"); + + $provider_id = $_REQUEST['provider_id']; + + $this->validateProviderId(); + + $provider = self::getProviderFromDB($provider_id); + + self::validateProviderExist($provider); + + $licenses = (object) DB::db()->select( + License::TABLE_NAME, + [ + 'id [Int]', + 'provider_id [Int]', + 'hash', + ], + [ + 'provider_id' => $provider_id, + ] + ); + + $terms = []; + + foreach ($licenses as $license) { + $licenseObj = (object) $license; + $termsCache = Transient::remember(Connector::$module_id . "_terms_{$licenseObj->provider_id}_{$licenseObj->id}", 0, function () use ($provider, $licenseObj) { + $response = AsuraSDK::license_terms_index($provider, $licenseObj->hash); + + if ($response->getStatusCode() !== 200) { + error_log("asura-connector [error]: couldn't retrieve terms for license id {$licenseObj->id}. http error code: {$response->getStatusCode()}"); + + return []; + } + + return json_decode($response->getBody()->getContents(), true)['data']; + }); + + foreach ($termsCache as $term) { + $term['license_id'] = $licenseObj->id; + $term['provider_id'] = $provider->id; + array_push($terms, $term); + } + } + + wp_send_json_success($terms); + } + + private function wizardValidation() + { + $provider_id = $_REQUEST['provider_id']; + $license_id = $_REQUEST['license_id']; + $term_slug = sanitize_text_field($_REQUEST['term_slug']); + $overwrite = $_REQUEST['overwrite'] === 'true'; + + check_ajax_referer(Connector::$module_id . "-admin"); + + $this->validateProviderId(); + $this->validateLicenseId(); + $this->validateTermSlug(); + + return [$provider_id, $license_id, $term_slug, $overwrite]; + } + + /** + * @see ct_setup_default_colors + * + * @version Oxygen Builder 3.8.1.rc.1 + */ + public function wizard_colors() + { + [$provider_id, $license_id, $term_slug, $overwrite] = $this->wizardValidation(); + + $provider = self::getProviderFromDB($provider_id); + + self::validateProviderExist($provider); + + $license = self::getLicenseFromDB($provider_id, $license_id); + + self::validateLicenseExist($license); + + $result = Transient::remember(Connector::$module_id . "_colors_{$license->provider_id}_{$license->id}_{$term_slug}", HOUR_IN_SECONDS, function () use ($provider, $license, $term_slug) { + $response = AsuraSDK::oxygenbuilder_colors($provider, $license->hash, $term_slug); + + if ($response->getStatusCode() !== 200) { + error_log("asura-connector [error]: couldn't retrieve colors for license id {$license->id} and term slug {$term_slug}. http error code: {$response->getStatusCode()}"); + + return null; + } + + return json_decode($response->getBody()->getContents(), true); + }); + + if ($result === null) { + Ajax::send_json_error('asura_connection_error', "Couldn't retrieve colors, please contact design set provider or plugin developer", 500); + } + + $colors = isset($result['colors']) ? $result['colors'] : false; + $lookupTable = isset($result['lookuptable']) ? $result['lookuptable'] : false; + + // if a lookup table is provided (by a classic design set, store it as transient data to be used in other steps) + if (is_array($lookupTable)) { + // convert keys to lower case + $smLookupTable = []; + + foreach ($lookupTable as $key => $item) { + $smLookupTable[strToLower($key)] = $item; + } + + set_transient('oxygen_vsb_source_color_lookup_table', $smLookupTable); + } else { + delete_transient('oxygen_vsb_source_color_lookup_table'); + } + + if (is_array($colors)) { + + $sourceColorMap = []; + + // set Name for the incoming colors + $setName = sanitize_text_field($term_slug); + + if ($overwrite) { // replace all old data + + $existing = [ + 'colorsIncrement' => 0, + 'setsIncrement' => 1, + 'colors' => [], + 'sets' => [ + [ + 'id' => 1, + 'name' => $setName, + ] + ], + ]; + + foreach ($colors as $key => $color) { + + $sourceColorMap[$color['id']] = ++$existing['colorsIncrement']; + + $color['id'] = $existing['colorsIncrement']; + + // assign the new Parent + $color['set'] = 1; + + $existing['colors'][] = $color; + } + + update_option('oxygen_vsb_global_colors', $existing); + } else { // add to the existing data + + // colors are an array of arrays with each having a name and a value + // get existing colors + + $existing = get_option('oxygen_vsb_global_colors', []); + + $existing['colors']; + + $existing['sets']; + + // find a set with that name + $existingSetId = false; + + foreach ($existing['sets'] as $key => $set) { + + if ($set['name'] == $setName) { + $existingSetId = $set['id']; + } + + //remove hashkey attribute from the existing sets + if (isset($existing['sets'][$key]['$$hashKey'])) { + unset($existing['sets'][$key]['$$hashKey']); + } + } + + // if this set does not already exist, create it + if ($existingSetId === false) { + + $existingSetId = ++$existing['setsIncrement']; + + $existing['sets'][] = [ + 'id' => $existingSetId, // and increment + 'name' => $setName + ]; + } + + // remove hash keys from all existing colors + foreach ($existing['colors'] as $key => $color) { + if (isset($existing['colors'][$key]['$$hashKey'])) { + unset($existing['colors'][$key]['$$hashKey']); + } + } + + // for each of the incoming colors + foreach ($colors as $key => $color) { + + // if a color with the same name already exists in the same set, then over write it + $existingColorUpdated = false; + + foreach ($existing['colors'] as $eKey => $eColor) { + + if ($eColor['name'] == $color['name'] && $eColor['set'] === $existingSetId) { + + $existing['colors'][$eKey]['value'] = strtolower($color['value']); + + $sourceColorMap[$color['id']] = $eColor['id']; + + $existingColorUpdated = true; + break; + } + } + + //updating an existing color, so no need to add it as a new one, so skip the rest + if ($existingColorUpdated) { + continue; + } + + $sourceColorMap[$color['id']] = ++$existing['colorsIncrement']; + + // add a new ID for adjusting it into the existing colors array + $color['id'] = $existing['colorsIncrement']; + + // assign the new Parent + $color['set'] = $existingSetId; + + $color['value'] = strtolower($color['value']); + + // add the color to the existing colors; + + $existing['colors'][] = $color; + } + + update_option('oxygen_vsb_global_colors', $existing); + } + + set_transient('oxygen_vsb_source_color_map', $sourceColorMap); + } + + wp_send_json_success(null); + } + + /** + * @see ct_setup_default_stylesheets + * + * @version Oxygen Builder 3.8.1.rc.1 + */ + public function wizard_stylesheets() + { + [$provider_id, $license_id, $term_slug, $overwrite] = $this->wizardValidation(); + + $provider = self::getProviderFromDB($provider_id); + + self::validateProviderExist($provider); + + $license = self::getLicenseFromDB($provider_id, $license_id); + + self::validateLicenseExist($license); + + $result = Transient::remember(Connector::$module_id . "_stylesheets_{$license->provider_id}_{$license->id}_{$term_slug}", HOUR_IN_SECONDS, function () use ($provider, $license, $term_slug) { + $response = AsuraSDK::oxygenbuilder_stylesheets($provider, $license->hash, $term_slug); + + if ($response->getStatusCode() !== 200) { + error_log("asura-connector [error]: couldn't retrieve stylesheets for license id {$license->id} and term slug {$term_slug}. http error code: {$response->getStatusCode()}"); + + return null; + } + + return json_decode($response->getBody()->getContents(), true); + }); + + if ($result === null) { + Ajax::send_json_error('asura_connection_error', "Couldn't retrieve stylesheets, please contact design set provider or plugin developer", 500); + } + + $folderName = sanitize_text_field($term_slug); + $stylesheets = $result; + + if (!is_array($stylesheets)) { + Ajax::send_json_error('invalid_data_type', "Couldn't retrieve stylesheets, please contact design set provider or plugin developer", 500); + } + + // all the incoming stylesheets should go under a folder with the name of the source site + + // append to existing style sheets + $existing = get_option('ct_style_sheets', []); + + // find the topmost ID value in the existing stylesheets. + $id = 0; + $folder_id = false; + // lets assume that this is not the old data, for now + foreach ($existing as $key => $value) { + if (is_array($value) && isset($value['id']) && intval($value['id']) > $id) { + $id = intval($value['id']); + } + + // in the process also look for a folder that has the name same as $folderName + // if such a folder already exist, grab its ID. + if (isset($value['folder']) && intval($value['folder']) === 1 && $value['name'] === $folderName) { + $folder_id = $value['id']; + } + } + + + $processedStylesheets = []; + + // if a folder with the name of the $folderName does not exist + // create a new folder in the incoming data, with the name of the source site. + + if ($folder_id === false) { + $folder_id = ++$id; + $processedStylesheets[] = ['id' => $folder_id, 'name' => $folderName, 'folder' => 1, 'status' => 1]; + } + + //convert old style data and assign the new ID's + foreach ($stylesheets as $key => $value) { + if (!is_array($value)) { // if it is the old style sheets data + + $processedStylesheets[] = [ + 'id' => ++$id, + 'name' => $key, + 'css' => $value, + 'parent' => $folder_id, + 'status' => 1 + ]; + } else { + + // if it is not a folder + if (!isset($value['folder']) || intval($value['folder']) !== 1) { + $value['id'] = ++$id; // replace the id in the new style data as well + $value['parent'] = $folder_id; // make it the child of the new parent + + $processedStylesheets[] = $value; + } + } + } + + // now if we are keeping the existing data + if (is_array($existing) && !$overwrite) { + // disable all existing folders + foreach ($existing as $key => $item) { + if (isset($item['folder']) && intval($item['folder']) === 1) { + // unless the folder has the same name as that of $folderName + if ($item['name'] !== $folderName) { + $existing[$key]['status'] = 0; + } + } else { // if it is a stylesheet + + // if an incoming stylsheet has the same name as this one? delete this + $remove = false; + + foreach ($processedStylesheets as $incoming) { + + if (!$remove && (!isset($incoming['folder']) || intval($incoming['folder']) === 0) && $incoming['name'] === $item['name']) { + + $remove = true; + } + } + + if ($remove) { + unset($existing[$key]); + } // else if it does not belong to a folder + elseif (!isset($item['parent']) || intval($item['parent']) === 0) { + + $existing[$key]['parent'] = -1; // disable it + + } + } + } + + $processedStylesheets = array_merge($existing, $processedStylesheets); + } + + update_option('ct_style_sheets', $processedStylesheets, get_option("oxygen_options_autoload")); + + wp_send_json_success(null); + } + + /** + * @see ct_setup_default_settings + * + * @version Oxygen Builder 3.8.1.rc.1 + */ + public function wizard_settings() + { + [$provider_id, $license_id, $term_slug, $overwrite] = $this->wizardValidation(); + + $provider = self::getProviderFromDB($provider_id); + + self::validateProviderExist($provider); + + $license = self::getLicenseFromDB($provider_id, $license_id); + + self::validateLicenseExist($license); + + $result = Transient::remember(Connector::$module_id . "_settings_{$license->provider_id}_{$license->id}_{$term_slug}", HOUR_IN_SECONDS, function () use ($provider, $license, $term_slug) { + $response = AsuraSDK::oxygenbuilder_settings($provider, $license->hash, $term_slug); + + if ($response->getStatusCode() !== 200) { + error_log("asura-connector [error]: couldn't retrieve settings for license id {$license->id} and term slug {$term_slug}. http error code: {$response->getStatusCode()}"); + + return null; + } + + return json_decode($response->getBody()->getContents(), true); + }); + + if ($result === null) { + Ajax::send_json_error('invalid_data_type', "Couldn't retrieve settings, please contact design set provider or plugin developer", 500); + } + + $siteName = sanitize_text_field($term_slug); + $settings = $result; + + if (!is_array($settings)) { + Ajax::send_json_error('invalid_data_type', "Couldn't retrieve settings, please contact design set provider or plugin developer", 500); + } + + // map colors + global $ct_source_color_map; + global $oxygen_vsb_classic_designsets; + + $ct_source_color_map = get_transient('oxygen_vsb_source_color_map', []); + + if (sizeof($ct_source_color_map) > 0) { + // replace all global color values to match with the imported ones + $settings = ct_map_source_colors($settings); + } + + if (in_array($siteName, $oxygen_vsb_classic_designsets)) { // if it is an old design set + // generate new variable colors + global $oxygen_vsb_global_colors; + + // if a lookup table is avaibale? + $lookupTable = get_transient('oxygen_vsb_source_color_lookup_table', []); + + $settings = ct_create_variable_colors($settings, $siteName, $lookupTable); + update_option('oxygen_vsb_global_colors', $oxygen_vsb_global_colors); + } + + // append to existing style sheets + $existing = get_option('ct_global_settings', []); + + if (is_array($existing) && !$overwrite) { + $settings = array_merge($existing, $settings); + } + + update_option('ct_global_settings', $settings); + + wp_send_json_success(null); + } + + /** + * @see ct_setup_default_stylesets + * + * @version Oxygen Builder 3.8.1.rc.1 + */ + public function wizard_stylesets() + { + [$provider_id, $license_id, $term_slug, $overwrite] = $this->wizardValidation(); + + $provider = self::getProviderFromDB($provider_id); + + self::validateProviderExist($provider); + + $license = self::getLicenseFromDB($provider_id, $license_id); + + self::validateLicenseExist($license); + + $result = Transient::remember(Connector::$module_id . "_stylesets_{$license->provider_id}_{$license->id}_{$term_slug}", HOUR_IN_SECONDS, function () use ($provider, $license, $term_slug) { + $response = AsuraSDK::oxygenbuilder_stylesets($provider, $license->hash, $term_slug); + + if ($response->getStatusCode() !== 200) { + error_log("asura-connector [error]: couldn't retrieve stylesets for license id {$license->id} and term slug {$term_slug}. http error code: {$response->getStatusCode()}"); + + return null; + } + + return json_decode($response->getBody()->getContents(), true); + }); + + if ($result === null) { + Ajax::send_json_error('asura_connection_error', "Couldn't retrieve stylesets, please contact design set provider or plugin developer", 500); + } + + // given that the classes were processed earlier, the folder structure should already be in place + // process the incoming sets and re-assign parent + + $folderName = sanitize_text_field($term_slug); + $stylesets = $result; + + if (!is_array($stylesets)) { + Ajax::send_json_error('invalid_data_type', "Couldn't retrieve stylesets, please contact design set provider or plugin developer", 500); + } + + foreach ($stylesets as $key => $set) { + $stylesets[$key]['parent'] = $folderName; + } + + // append to existing style sheets + $existing = get_option('ct_style_sets', []); + + // if there is an incoming 'uncategorized style set', remove it + + if (isset($stylesets['Uncategorized Custom Selectors'])) { + unset($stylesets['Uncategorized Custom Selectors']); + } + + // have all the custom selectors + + if (is_array($existing) && !$overwrite) { + + // the existing folders are already deleted while processing the classes + + foreach ($existing as $key => $set) { + + if (!isset($set['parent']) || empty($set['parent'])) { + $existing[$key]['parent'] = -1; + } + } + + $stylesets = array_merge($existing, $stylesets); + } + + update_option('ct_style_sets', $stylesets); + + wp_send_json_success(null); + } + + /** + * @see ct_setup_default_selectors + * + * @version Oxygen Builder 3.8.1.rc.1 + */ + public function wizard_selectors() + { + [$provider_id, $license_id, $term_slug, $overwrite] = $this->wizardValidation(); + + $provider = self::getProviderFromDB($provider_id); + + self::validateProviderExist($provider); + + $license = self::getLicenseFromDB($provider_id, $license_id); + + self::validateLicenseExist($license); + + $result = Transient::remember(Connector::$module_id . "_selectors_{$license->provider_id}_{$license->id}_{$term_slug}", HOUR_IN_SECONDS, function () use ($provider, $license, $term_slug) { + $response = AsuraSDK::oxygenbuilder_selectors($provider, $license->hash, $term_slug); + + if ($response->getStatusCode() !== 200) { + error_log("asura-connector [error]: couldn't retrieve selectors for license id {$license->id} and term slug {$term_slug}. http error code: {$response->getStatusCode()}"); + + return null; + } + + return json_decode($response->getBody()->getContents(), true); + }); + + if ($result === null) { + Ajax::send_json_error('asura_connection_error', "Couldn't retrieve selectors, please contact design set provider or plugin developer", 500); + } + + $site_name = sanitize_text_field($term_slug); + $selectors = $result; + + if (!is_array($selectors)) { + Ajax::send_json_error('invalid_data_type', "Couldn't retrieve selectors, please contact design set provider or plugin developer", 500); + } + + // map colors + global $ct_source_color_map; + global $oxygen_vsb_classic_designsets; + + $ct_source_color_map = get_transient('oxygen_vsb_source_color_map', []); + + if (sizeof($ct_source_color_map) > 0) { + // replace all global color values to match with the imported ones + $selectors = ct_map_source_colors($selectors); + } + + // if selectors have their parent as a 'Uncategorized Custom Selectors', rename their parent to + + if (in_array($site_name, $oxygen_vsb_classic_designsets)) { // if it is an old design set + // generate new variable colors + global $oxygen_vsb_global_colors; + // if a lookup table is avaibale? + $lookupTable = get_transient('oxygen_vsb_source_color_lookup_table', []); + $selectors = ct_create_variable_colors($selectors, $site_name, $lookupTable); + update_option('oxygen_vsb_global_colors', $oxygen_vsb_global_colors); + } + + $create_default_styleset = false; + + foreach ($selectors as $key => $item) { + if ($item['set_name'] === 'Uncategorized Custom Selectors') { + $create_default_styleset = true; + $selectors[$key]['set_name'] = $site_name . ' style set'; + } + } + + if ($create_default_styleset) { + $existing = get_option('ct_style_sets', []); + $existing[$site_name . ' style set'] = ['key' => $site_name . ' style set', 'parent' => $site_name]; + update_option('ct_style_sets', $existing); + } + + // append to existing style sheets + $existing = get_option('ct_custom_selectors', []); + + if (is_array($existing) && !$overwrite) { + $selectors = array_merge($existing, $selectors); + } + + update_option('ct_custom_selectors', $selectors, get_option("oxygen_options_autoload")); + + wp_send_json_success(null); + } + + /** + * @see ct_setup_default_templates + * + * @version Oxygen Builder 3.8.1.rc.1 + */ + public function wizard_templates() + { + [$provider_id, $license_id, $term_slug, $overwrite] = $this->wizardValidation(); + + $provider = self::getProviderFromDB($provider_id); + + self::validateProviderExist($provider); + + $license = self::getLicenseFromDB($provider_id, $license_id); + + self::validateLicenseExist($license); + + $result = Transient::remember(Connector::$module_id . "_templates_{$license->provider_id}_{$license->id}_{$term_slug}", HOUR_IN_SECONDS, function () use ($provider, $license, $term_slug) { + $response = AsuraSDK::oxygenbuilder_templates($provider, $license->hash, $term_slug); + + if ($response->getStatusCode() !== 200) { + error_log("asura-connector [error]: couldn't retrieve templates for license id {$license->id} and term slug {$term_slug}. http error code: {$response->getStatusCode()}"); + + return null; + } + + return json_decode($response->getBody()->getContents(), true); + }); + + if ($result === null) { + Ajax::send_json_error('asura_connection_error', "Couldn't retrieve templates, please contact design set provider or plugin developer", 500); + } + + $siteName = sanitize_text_field($term_slug); + $templates = $result; + + if (!is_array($templates)) { + Ajax::send_json_error('invalid_data_type', "Couldn't retrieve templates, please contact design set provider or plugin developer", 500); + } + + global $wpdb; + + // take care of the existing templates + $existing = $wpdb->get_results( + "SELECT id, post_title + FROM $wpdb->posts as post + WHERE post_type = 'ct_template' + AND post.post_status IN ('publish')" + ); + + foreach ($existing as $template) { + if ($overwrite) { + wp_delete_post($template->id); + } else { + // unset the template + delete_post_meta($template->id, 'ct_template_single_all'); + delete_post_meta($template->id, 'ct_template_post_types'); + delete_post_meta($template->id, 'ct_use_template_taxonomies'); + delete_post_meta($template->id, 'ct_template_apply_if_post_of_parents'); + + delete_post_meta($template->id, 'ct_template_all_archives'); + delete_post_meta($template->id, 'ct_template_apply_if_archive_among_taxonomies'); + delete_post_meta($template->id, 'ct_template_apply_if_archive_among_cpt'); + delete_post_meta($template->id, 'ct_template_apply_if_archive_among_authors'); + delete_post_meta($template->id, 'ct_template_date_archive'); + + delete_post_meta($template->id, 'ct_template_front_page'); + delete_post_meta($template->id, 'ct_template_blog_posts'); + delete_post_meta($template->id, 'ct_template_search_page'); + delete_post_meta($template->id, 'ct_template_404_page'); + delete_post_meta($template->id, 'ct_template_index'); + + // and rename + if (strpos($template->post_title, 'inactive - ') === false) { + wp_update_post([ + 'ID' => $template->id, + 'post_title' => 'inactive - ' . $template->post_title + ]); + } + } + } + + $new_id_map = []; + + // save all class names to the transient. These will be used in the last step to download selective classes + $selectiveClasses = []; + + $current_user = wp_get_current_user(); + + // insert posts + foreach ($templates as $template) { + + $post_data = [ + 'ID' => 0, + 'post_title' => $template['post_title'], + 'post_type' => 'ct_template', + 'post_status' => 'publish' + ]; + + if ($current_user && isset($current_user->ID)) { + $post_data['post_author'] = $current_user->ID; + } + + $new_id_map[$template['ID']] = wp_insert_post($post_data); + + foreach ($template['applied_classes'] as $key => $val) { + $selectiveClasses[$key] = $val; + } + } + + set_transient('oxygen-vsb-default-setup-classes', $selectiveClasses); + + set_transient('oxygen-vsb-templates-id-map', $new_id_map); + + global $ct_source_color_map; + global $oxygen_vsb_classic_designsets; + global $oxygen_vsb_global_colors; + + $ct_source_color_map = get_transient('oxygen_vsb_source_color_map', []); + + // update post meta + foreach ($templates as $template) { + + // TODO run through the shortcodes, if some re-usable in place, replace its id from the $new_id_map + $shortcodes = parse_shortcodes($template['builder_shortcodes'], false, false); + + $shortcodes['content'] = ct_swap_reusable_view_ids($shortcodes['content'], $new_id_map); + + // map colors + if (sizeof($ct_source_color_map) > 0) { + // replace all global color values to match with the imported ones + $shortcodes['content'] = ct_map_source_colors($shortcodes['content']); + } + + if (in_array($siteName, $oxygen_vsb_classic_designsets)) { // if it is an old design set + // generate new variable colors + // if a lookup table is avaibale? + $lookupTable = get_transient('oxygen_vsb_source_color_lookup_table', []); + $shortcodes['content'] = ct_create_variable_colors($shortcodes['content'], $siteName, $lookupTable); + } + + $wrap_shortcodes = []; + + $wrap_shortcodes['children'] = $shortcodes['content']; + // code tree back to JSON to pass into old function + $components_tree_json = json_encode($wrap_shortcodes); + + ob_start(); + + // transform JSON to shortcodes + $shortcodes = components_json_to_shortcodes($components_tree_json); + + // we don't need anything to be output by custom shortcodes + ob_clean(); + + update_post_meta($new_id_map[$template['ID']], 'ct_builder_shortcodes', $shortcodes); + update_post_meta($new_id_map[$template['ID']], 'ct_template_type', $template['template_type']); + + // cache styles + oxygen_vsb_cache_page_css($new_id_map[$template['ID']], $shortcodes); + + if (isset($template['template_type']) && $template['template_type'] == 'reusable_part') { // store the source parameters to check for redundancy while importing re-usables again + update_post_meta($new_id_map[$template['ID']], 'ct_source_site', $siteName); + update_post_meta($new_id_map[$template['ID']], 'ct_source_post', $template['ID']); + } + + update_post_meta($new_id_map[$template['ID']], 'ct_template_order', $template['template_order']); + update_post_meta($new_id_map[$template['ID']], 'ct_parent_template', $new_id_map[$template['parent_template']]); + + update_post_meta($new_id_map[$template['ID']], 'ct_template_single_all', $template['template_single_all']); + update_post_meta($new_id_map[$template['ID']], 'ct_template_post_types', $template['template_post_types']); + update_post_meta($new_id_map[$template['ID']], 'ct_use_template_taxonomies', $template['use_template_taxonomies']); + + // match id to slug for each taxonomy + if (is_array($template['template_taxonomies'])) { + foreach ($template['template_taxonomies']['values'] as $key => $val) { + // get id for the slug + $term = get_term_by('slug', $val, $template['template_taxonomies']['names'][$key]); + + if ($term) { + $template['template_taxonomies']['values'][$key] = $term->term_id; + } else { + if (isset($template['template_taxonomies'])) { + unset($template['template_taxonomies']['names'][$key]); + unset($template['template_taxonomies']['values'][$key]); + } + } + } + } + + update_post_meta($new_id_map[$template['ID']], 'ct_template_taxonomies', $template['template_taxonomies']); + update_post_meta($new_id_map[$template['ID']], 'ct_template_apply_if_post_of_parents', $template['template_apply_if_post_of_parents']); + update_post_meta($new_id_map[$template['ID']], 'ct_template_post_of_parents', $template['template_post_of_parents']); + update_post_meta($new_id_map[$template['ID']], 'ct_template_all_archives', $template['template_all_archives']); + update_post_meta($new_id_map[$template['ID']], 'ct_template_apply_if_archive_among_taxonomies', $template['template_apply_if_archive_among_taxonomies']); + + // match id to slug for each taxonomy + if (isset($template['template_archive_among_taxonomies']) && is_array($template['template_archive_among_taxonomies'])) { + foreach ($template['template_archive_among_taxonomies'] as $key => $val) { + // get id for the slug + if (is_array($val)) { + $term = get_term_by('slug', $val['slug'], $val['taxonomy']); + if ($term) { + $template['template_archive_among_taxonomies'][$key] = $term->term_id; + } else { + unset($template['template_archive_among_taxonomies'][$key]); + } + } + } + } + + update_post_meta($new_id_map[$template['ID']], 'ct_template_archive_among_taxonomies', $template['template_archive_among_taxonomies']); + update_post_meta($new_id_map[$template['ID']], 'ct_template_apply_if_archive_among_cpt', $template['template_apply_if_archive_among_cpt']); + update_post_meta($new_id_map[$template['ID']], 'ct_template_archive_post_types', $template['template_archive_post_types']); + // update_post_meta($new_id_map[$template['ID']], 'ct_template_apply_if_archive_among_authors', $template['template_apply_if_archive_among_authors']); + // update_post_meta($new_id_map[$template['ID']], 'ct_template_authors_archives', $template['template_authors_archives']); + update_post_meta($new_id_map[$template['ID']], 'ct_template_date_archive', $template['template_date_archive']); + update_post_meta($new_id_map[$template['ID']], 'ct_template_front_page', $template['template_front_page']); + update_post_meta($new_id_map[$template['ID']], 'ct_template_blog_posts', $template['template_blog_posts']); + update_post_meta($new_id_map[$template['ID']], 'ct_template_search_page', $template['template_search_page']); + update_post_meta($new_id_map[$template['ID']], 'ct_template_404_page', $template['template_404_page']); + update_post_meta($new_id_map[$template['ID']], 'ct_template_index', $template['template_index']); + + update_post_meta($new_id_map[$template['ID']], 'ct_template_inner_content', $template['ct_template_inner_content']); + } + + if (in_array($siteName, $oxygen_vsb_classic_designsets)) { // then new color variables must have been created + update_option('oxygen_vsb_global_colors', $oxygen_vsb_global_colors); + } + + wp_send_json_success(null); + } + + /** + * @see ct_setup_default_pages + * + * @version Oxygen Builder 3.8.1.rc.1 + */ + public function wizard_pages() + { + [$provider_id, $license_id, $term_slug, $overwrite] = $this->wizardValidation(); + + $provider = self::getProviderFromDB($provider_id); + + self::validateProviderExist($provider); + + $license = self::getLicenseFromDB($provider_id, $license_id); + + self::validateLicenseExist($license); + + $result = Transient::remember(Connector::$module_id . "_pages_{$license->provider_id}_{$license->id}_{$term_slug}", HOUR_IN_SECONDS, function () use ($provider, $license, $term_slug) { + $response = AsuraSDK::oxygenbuilder_pages($provider, $license->hash, $term_slug); + + if ($response->getStatusCode() !== 200) { + error_log("asura-connector [error]: couldn't retrieve pages for license id {$license->id} and term slug {$term_slug}. http error code: {$response->getStatusCode()}"); + + return null; + } + + return json_decode($response->getBody()->getContents(), true); + }); + + if ($result === null) { + Ajax::send_json_error('asura_connection_error', "Couldn't retrieve pages, please contact design set provider or plugin developer", 500); + } + + $siteName = sanitize_text_field($term_slug); + $pages = $result; + + if (!is_array($pages)) { + Ajax::send_json_error('invalid_data_type', "Couldn't retrieve pages, please contact design set provider or plugin developer", 500); + } + + $templates_id_map = get_transient('oxygen-vsb-templates-id-map'); + + delete_transient('oxygen-vsb-templates-id-map'); + + global $ct_source_color_map; + + $ct_source_color_map = get_transient('oxygen_vsb_source_color_map', []); + + $new_id_map = []; + + $selectiveClasses = get_transient('oxygen-vsb-default-setup-classes', []); + + $current_user = wp_get_current_user(); + + // insert posts + foreach ($pages as $page) { + + $post_data = $page; + + unset($post_data['ID']); + + $post_data['post_type'] = 'page'; + $post_data['post_status'] = 'publish'; + + if ($current_user && isset($current_user->ID)) { + $post_data['post_author'] = $current_user->ID; + } + + $new_id_map[$page['ID']] = wp_insert_post($post_data); + foreach ($page['applied_classes'] as $key => $val) { + $selectiveClasses[$key] = $val; + } + } + + set_transient('oxygen-vsb-default-setup-classes', $selectiveClasses); + + global $oxygen_vsb_classic_designsets, $oxygen_vsb_global_colors; + + foreach ($pages as $page) { + + // update parent status + $post_data = [ + 'ID' => $new_id_map[$page['ID']], + 'post_parent' => $new_id_map[$page['post_parent']], + ]; + + wp_update_post($post_data); + + // TODO run through the shortcodes, if some re-usable in place, replace its id from the $new_id_map + $shortcodes = parse_shortcodes($page['builder_shortcodes'], false, false); + + //$shortcodes['content'] = ct_swap_reusable_view_ids( $shortcodes['content'], $templates_id_map ); + + // map colors + if (sizeof($ct_source_color_map) > 0) { + // replace all global color values to match with the imported ones + $shortcodes['content'] = ct_map_source_colors($shortcodes['content']); + } + + if (in_array($siteName, $oxygen_vsb_classic_designsets)) { // if it is an old design set + // generate new variable colors + // if a lookup table is avaibale? + $lookupTable = get_transient('oxygen_vsb_source_color_lookup_table', []); + $shortcodes['content'] = ct_create_variable_colors($shortcodes['content'], $siteName, $lookupTable); + } + + $wrap_shortcodes = []; + + $wrap_shortcodes['children'] = $shortcodes['content']; + // code tree back to JSON to pass into old function + $components_tree_json = json_encode($wrap_shortcodes); + + ob_start(); + + // transform JSON to shortcodes + $shortcodes = components_json_to_shortcodes($components_tree_json); + + // we don't need anything to be output by custom shortcodes + ob_clean(); + + update_post_meta($new_id_map[$page['ID']], 'ct_builder_shortcodes', $shortcodes); + update_post_meta($new_id_map[$page['ID']], 'ct_other_template', (isset($templates_id_map[$page['other_template']]) ? $templates_id_map[$page['other_template']] : $page['other_template'])); + + // cache styles + oxygen_vsb_cache_page_css($new_id_map[$page['ID']], $shortcodes); + } + + update_option('oxygen_vsb_global_colors', $oxygen_vsb_global_colors); + + wp_send_json_success(null); + } + + /** + * @see ct_setup_default_classes + * + * @version Oxygen Builder 3.8.1.rc.1 + */ + public function wizard_classes() + { + [$provider_id, $license_id, $term_slug, $overwrite] = $this->wizardValidation(); + + $provider = self::getProviderFromDB($provider_id); + + self::validateProviderExist($provider); + + $license = self::getLicenseFromDB($provider_id, $license_id); + + self::validateLicenseExist($license); + + $result = Transient::remember(Connector::$module_id . "_classes_{$license->provider_id}_{$license->id}_{$term_slug}", HOUR_IN_SECONDS, function () use ($provider, $license, $term_slug) { + $response = AsuraSDK::oxygenbuilder_classes($provider, $license->hash, $term_slug); + + if ($response->getStatusCode() !== 200) { + error_log("asura-connector [error]: couldn't retrieve classes for license id {$license->id} and term slug {$term_slug}. http error code: {$response->getStatusCode()}"); + + return null; + } + + return json_decode($response->getBody()->getContents(), true); + }); + + if ($result === null) { + Ajax::send_json_error('asura_connection_error', "Couldn't retrieve classes, please contact design set provider or plugin developer", 500); + } + + $folderName = sanitize_text_field($term_slug); + $classes = $result; + + if (!is_array($classes)) { + Ajax::send_json_error('invalid_data_type', "Couldn't retrieve classes, please contact design set provider or plugin developer", 500); + } + + // if there are selective classes to be downloaded + $selectiveClasses = get_transient('oxygen-vsb-default-setup-classes', array()); + + delete_transient('oxygen-vsb-default-setup-classes'); + + if (sizeof($selectiveClasses) > 0) { + + foreach ($selectiveClasses as $key => $classItem) { + if (isset($classes[$key])) { + $selectiveClasses[$key] = $classes[$key]; + } + } + + $classes = $selectiveClasses; + } + + // map colors + global $ct_source_color_map; + global $oxygen_vsb_classic_designsets; + + $ct_source_color_map = get_transient('oxygen_vsb_source_color_map', array()); + + delete_transient('oxygen_vsb_source_color_map'); + + if (sizeof($ct_source_color_map) > 0) { + // replace all global color values to match with the imported ones + $classes = ct_map_source_colors($classes); + } + // if a folder from the incoming does not already exist, create one + + if (in_array($folderName, $oxygen_vsb_classic_designsets)) { // if it is an old design set + // generate new variable colors + global $oxygen_vsb_global_colors; + // if a lookup table is avaibale? + $lookupTable = get_transient('oxygen_vsb_source_color_lookup_table', array()); + $classes = ct_create_variable_colors($classes, $folderName, $lookupTable); + update_option('oxygen_vsb_global_colors', $oxygen_vsb_global_colors); + } + + // existing classes + $existing = get_option('ct_components_classes', array()); + + $folders = get_option('ct_style_folders', array()); + + // if a folder from the incoming does not already exist, create one + $folderName = isset($_REQUEST['site']) ? sanitize_text_field($_REQUEST['site']) : 'defaultIncoming'; + //$folderName = $site; + + $newFolders = array(); + + if (!isset($folders[$folderName])) { + $newFolders[$folderName] = array( + 'key' => $folderName, + 'status' => 1 + ); + } else { + $newFolders[$folderName] = array( + 'key' => $folderName, + 'status' => $folders[$folderName]['status'] + ); + } + + foreach ($classes as $key => $incoming) { + $classes[$key]['parent'] = $folderName; + } + + if (is_array($existing) && !$overwrite) { + + // disable all folders, now this will also take care of stylesets folders + + foreach ($folders as $key => $folder) { + // unless the folder is that of the incoming site + if ($folder['name'] !== $folderName) { + $folders[$key]['status'] = 0; + } + } + + // and disable the classes that dont belong to folders + foreach ($existing as $key => $class) { + + if (!isset($class['parent']) || empty($class['parent'])) { + $existing[$key]['parent'] = -1; + } + } + + $classes = array_merge($existing, $classes); // this will overwrite existing classes + $newFolders = array_merge($folders, $newFolders); // this will overwrite any exisiting folder with the same name + } + + update_option('ct_components_classes', $classes, get_option("oxygen_options_autoload")); + + global $oxygen_vsb_css_classes; // in order to have the latest classes available for generating cache + $oxygen_vsb_css_classes = $classes; + + update_option('ct_style_folders', $newFolders); + + wp_send_json_success(null); + } + + public function add_provider() + { + check_ajax_referer(Connector::$module_id . "-admin"); + + if (empty($_REQUEST['connector'])) { + Ajax::send_json_error('missing_field', "The connector field is required"); + } + + $connector = stripcslashes(trim($_REQUEST['connector'])); + + $connector = json_decode($connector); + + if (json_last_error() !== JSON_ERROR_NONE) { + Ajax::send_json_error('invalid_field', 'Connector should be a valid json string: ' . json_last_error_msg(), 422); + } + + if ( + !is_object($connector) + || !isset($connector->site_title) + || !isset($connector->endpoint) + || !isset($connector->api_key) + || !isset($connector->api_secret) + ) { + Ajax::send_json_error('invalid_field', 'Connector doesn\'t contain valid API config.', 422); + } + + $insert = DB::db()->insert(Provider::TABLE_NAME, [ + 'api_key' => $connector->api_key, + 'api_secret' => $connector->api_secret, + 'site_title' => $connector->site_title, + 'endpoint' => $connector->endpoint, + ]); + + if (!$insert) { + Ajax::send_json_error('internal_error', 'Failed to add the provider to database', 500); + } + + wp_send_json_success(); + } + + public function list_providers() + { + check_ajax_referer(Connector::$module_id . "-admin"); + + $providers = DB::db()->select( + Provider::TABLE_NAME, + [ + 'id [Int]', + 'site_title', + 'api_key', + 'api_secret', + 'endpoint', + ], + [ + 'ORDER' => ['id' => 'DESC'], + ] + ); + + wp_send_json_success($providers); + } + + public function delete_provider() + { + check_ajax_referer(Connector::$module_id . "-admin"); + + $this->validateProviderId(); + + $id = $_REQUEST['provider_id']; + + $exist = DB::db()->get(Provider::TABLE_NAME, 'id', [ + 'id' => $id, + ]); + + self::validateProviderExist($exist); + + DB::db()->delete(Provider::TABLE_NAME, [ + 'id' => $id, + ]); + + DB::db()->delete(License::TABLE_NAME, [ + 'provider_id' => $id + ]); + + wp_send_json_success(); + } + + public function get_provider() + { + check_ajax_referer(Connector::$module_id . "-admin"); + + $this->validateProviderId(); + + $id = $_REQUEST['provider_id']; + + $exist = DB::db()->get(Provider::TABLE_NAME, [ + 'id [Int]', + 'site_title', + 'api_key', + 'api_secret', + 'endpoint', + ], [ + 'id' => $id, + ]); + + self::validateProviderExist($exist); + + wp_send_json_success($exist); + } + + public function edit_provider() + { + check_ajax_referer(Connector::$module_id . "-admin"); + + $validation = new WP_Error(); + + if (empty($_REQUEST['provider_id'])) { + $validation->add('missing_field', __('The provider id field is required', 'asura-connector')); + } else if (!is_numeric($_REQUEST['provider_id'])) { + $validation->add('missing_field', __('The provider id should numeric', 'asura-connector')); + } + if (empty($_REQUEST['site_title'])) { + $validation->add('missing_field', __('The site title field is required', 'asura-connector')); + } + if (empty($_REQUEST['api_key'])) { + $validation->add('missing_field', __('The api key field is required', 'asura-connector')); + } + if (empty($_REQUEST['api_secret'])) { + $validation->add('missing_field', __('The api secret field is required', 'asura-connector')); + } + if (empty($_REQUEST['endpoint'])) { + $validation->add('missing_field', __('The endpoint field is required', 'asura-connector')); + } + + if ($validation->has_errors()) { + wp_send_json_error( + $validation, + 400 + ); + } + + $id = $_REQUEST['provider_id']; + + $exist = DB::db()->get(Provider::TABLE_NAME, [ + 'id [Int]', + 'site_title', + 'api_key', + 'api_secret', + 'endpoint', + ], [ + 'id' => $id, + ]); + + self::validateProviderExist($exist); + + $exist = (object) $exist; + + $updatedData = []; + + if ($exist->site_title !== $_REQUEST['site_title']) { + $updatedData['site_title'] = $_REQUEST['site_title']; + } + if ($exist->api_key !== $_REQUEST['api_key']) { + $updatedData['api_key'] = $_REQUEST['api_key']; + } + if ($exist->api_secret !== $_REQUEST['api_secret']) { + $updatedData['api_secret'] = $_REQUEST['api_secret']; + } + if ($exist->endpoint !== $_REQUEST['endpoint']) { + $updatedData['endpoint'] = $_REQUEST['endpoint']; + } + + if (!empty($updatedData)) { + $update = DB::db()->update(Provider::TABLE_NAME, $updatedData, ['id' => $id,]); + + if (!$update) { + Ajax::send_json_error('internal_error', 'Failed to add update the provider in database', 500); + } + + wp_send_json_success($update); + } + + wp_send_json_success(null); + } + + public function list_licenses() + { + check_ajax_referer(Connector::$module_id . "-admin"); + + $this->validateProviderId(); + + $id = $_REQUEST['provider_id']; + + $exist = self::getProviderFromDB($id); + + self::validateProviderExist($exist); + + $licenses = DB::db()->select( + License::TABLE_NAME, + [ + 'id [Int]', + 'provider_id [Int]', + 'license', + ], + [ + 'provider_id' => $id, + 'ORDER' => ['id' => 'DESC'], + ] + ); + + wp_send_json_success($licenses); + } + + public function add_license() + { + check_ajax_referer(Connector::$module_id . "-admin"); + + $this->validateProviderId(); + + $id = $_REQUEST['provider_id']; + + $provider = self::getProviderFromDB($id); + + self::validateProviderExist($provider); + + if (empty($_REQUEST['license_key'])) { + Ajax::send_json_error('missing_field', 'The license key field is required'); + } + + $license_key = $_REQUEST['license_key']; + + $response = AsuraSDK::license_domains_register((object) $provider, $license_key); + + $body = json_decode($response->getBody()->getContents(), true); + + if ($response->getStatusCode() !== 200) { + Ajax::send_json_error(key($body), array_values($body)[0], $response->getStatusCode()); + } + + $insert = DB::db()->insert(License::TABLE_NAME, [ + 'provider_id' => $id, + 'license' => $license_key, + 'hash' => $body['data'][0]['hash'], + ]); + + if (!$insert) { + Ajax::send_json_error('internal_error', 'Failed to add the provider to database', 500); + } + + wp_send_json_success($insert); + + wp_die(); + } + + public function delete_license() + { + check_ajax_referer(Connector::$module_id . "-admin"); + + $this->validateProviderId(); + + $id = $_REQUEST['provider_id']; + + $provider = self::getProviderFromDB($id); + + self::validateProviderExist($provider); + + if (empty($_REQUEST['license_id'])) { + Ajax::send_json_error('missing_field', 'The license id is required'); + } + + $license_id = $_REQUEST['license_id']; + + $license = DB::db()->get(License::TABLE_NAME, '*', [ + 'id' => $license_id, + 'provider_id' => $id, + ]); + + if (!$license) { + Ajax::send_json_error('record_not_exist', 'The license id is not exist', 404); + } + + $response = AsuraSDK::license_domains_deregister((object) $provider, $license['license']); + + $body = json_decode($response->getBody()->getContents(), true); + + if ($response->getStatusCode() !== 200) { + Ajax::send_json_error(key($body), array_values($body)[0], $response->getStatusCode()); + } + + $delete = DB::db()->delete(License::TABLE_NAME, [ + 'id' => $license_id, + 'provider_id' => $id + ]); + + wp_send_json_success($delete); + } + + public function clean_cache() + { + check_ajax_referer(Connector::$module_id . "-admin"); + + DB::db()->delete('options', [ + 'option_name[~]' => "_transient_" . Connector::$module_id . "_%" + ]); + + wp_send_json_success(null); + } + + public static function getProviderFromDB($provider_id) + { + return (object) DB::db()->get(Provider::TABLE_NAME, [ + 'id [Int]', + 'site_title', + 'api_key', + 'api_secret', + 'endpoint', + ], [ + 'id' => $provider_id, + ]); + } + + public static function getLicenseFromDB($provider_id, $license_id) + { + return (object) DB::db()->get( + License::TABLE_NAME, + [ + 'id [Int]', + 'provider_id [Int]', + 'hash', + ], + [ + 'provider_id' => $provider_id, + 'id' => $license_id, + ] + ); + } + + private function validateProviderId() + { + if (empty($_REQUEST['provider_id'])) { + Ajax::send_json_error('missing_field', 'The provider id is required'); + } else if (!is_numeric($_REQUEST['provider_id'])) { + Ajax::send_json_error('invalid_field', 'The provider id should numeric'); + } + } + + private function validateLicenseId() + { + if (empty($_REQUEST['license_id'])) { + Ajax::send_json_error('missing_field', 'The license id is required'); + } else if (!is_numeric($_REQUEST['license_id'])) { + Ajax::send_json_error('invalid_field', 'The license id should numeric'); + } + } + + private function validateTermSlug() + { + if (empty($_REQUEST['term_slug'])) { + Ajax::send_json_error('missing_field', 'The term slug is required'); + } else if (!is_string($_REQUEST['term_slug'])) { + Ajax::send_json_error('invalid_field', 'The term slug should string'); + } + } + + public static function validateProviderExist($provider) + { + if (!$provider) { + Ajax::send_json_error('record_not_exist', 'The provider id is not exist', 404); + } + } + + public static function validateLicenseExist($license) + { + if (!$license) { + Ajax::send_json_error('record_not_exist', 'The license id is not exist', 404); + } + } +} diff --git a/app/Ajax/Frontend.php b/app/Ajax/Frontend.php new file mode 100644 index 0000000..3374596 --- /dev/null +++ b/app/Ajax/Frontend.php @@ -0,0 +1,278 @@ +tamper(); + } + + public function tamper() { + add_action( 'wp_loaded', function () { + remove_all_actions( 'wp_ajax_ct_new_style_api_call' ); + add_action( "wp_ajax_ct_new_style_api_call", [ $this, 'ct_new_style_api_call' ], 10, 1 ); + } ); + } + + public function ct_new_style_api_call() { + $call_type = isset( $_REQUEST['call_type'] ) ? sanitize_text_field( $_REQUEST['call_type'] ) : false; + ct_new_style_api_call_security_check( $call_type ); + + switch ( $call_type ) { + case 'setup_default_data': + ct_setup_default_data(); + break; + case 'get_component_from_source': + $filtered = base64_decode( $_REQUEST['source'] ); + + if ( strpos( $filtered, 'asura::' ) === 0 ) { + $embeded_config = json_decode( base64_decode( substr( $filtered, strlen( 'asura::' ) ) ) ); + $this->get_component_from_source( $embeded_config ); + } else { + ct_get_component_from_source(); + } + break; + case 'get_page_from_source': + $filtered = base64_decode( $_REQUEST['source'] ); + + if ( strpos( $filtered, 'asura::' ) === 0 ) { + $embeded_config = json_decode( base64_decode( substr( $filtered, strlen( 'asura::' ) ) ) ); + $this->get_page_from_source( $embeded_config ); + } else { + ct_get_page_from_source(); + } + break; + case 'get_items_from_source': + $terms = ConnectorFrontend::get_terms(); + $filtered = array_filter( $terms, function ( $term ) { + return $term->slug === $_REQUEST['name']; + } ); + + if ( ! empty( $filtered ) ) { + $this->get_items_from_source( array_shift( $filtered ) ); + } else { + ct_get_items_from_source(); + } + break; + case 'get_stuff_from_source': + ct_get_stuff_from_source(); + break; + } + } + + public function get_items_from_source( $filtered ) { + $provider_id = $filtered->provider_id; + $provider = Admin::getProviderFromDB( $provider_id ); + Admin::validateProviderExist( $provider ); + + $license_id = $filtered->license_id; + $license = Admin::getLicenseFromDB( $provider_id, $license_id ); + Admin::validateLicenseExist( $license ); + + $term_slug = $filtered->slug; + + $designSetsCache = Transient::remember( Connector::$module_id."_items_{$license->provider_id}_{$license->id}_{$term_slug}", HOUR_IN_SECONDS, function () use ( $provider, $license, $term_slug ) { + $response = AsuraSDK::oxygenbuilder_items( $provider, $license, $term_slug ); + if ( $response->getStatusCode() !== 200 ) { + error_log( "asura-connector [error]: couldn't retrieve design sets for license id {$license->id} and term slug {$term_slug}. http error code: {$response->getStatusCode()}" ); + + return null; + } + + return json_decode( $response->getBody()->getContents(), true ); + } ); + + if ( ! $designSetsCache ) { + wp_send_json_error( + new WP_Error( + 'asura_connection_error', + __( "Couldn't retrieve design sets, please contact design set provider or plugin developer", 'asura-connector' ) + ), + 500 + ); + } + wp_send_json( $designSetsCache ); + } + + + public function get_page_from_source( $embeded_config ) { + $post_id = $_REQUEST['id']; + $pageCache = Transient::remember( Connector::$module_id."_page_{$embeded_config->provider->id}_{$embeded_config->license->id}_{$embeded_config->term_slug}_{$post_id}", HOUR_IN_SECONDS, function () use ( $embeded_config, $post_id ) { + $response = AsuraSDK::oxygenbuilder_pageclasses( $embeded_config, $post_id ); + + if ( $response->getStatusCode() !== 200 ) { + error_log( "asura-connector [error]: couldn't retrieve design sets page for license id {$embeded_config->license->id} and term slug {$embeded_config->term_slug}. http error code: {$response->getStatusCode()}" ); + + return null; + } + + $components = []; + $classes = []; + $colors = []; + $lookupTable = []; + + $content = json_decode( $response->getBody()->getContents(), true ); + + if ( isset( $content['components'] ) ) { + $components = $content['components']; + } + if ( isset( $content['classes'] ) ) { + $classes = $content['classes']; + } + if ( isset( $content['colors'] ) ) { + $colors = $content['colors']; + } + if ( isset( $content['lookuptable'] ) ) { + $lookupTable = $content['lookuptable']; + } + + foreach ( $components as $key => $component ) { + + if ( $component['name'] === 'ct_reusable' ) { + unset( $components[ $key ] ); + } + + if ( ! isset( $components[ $key ] ) ) { + continue; + } + + $component[ $key ] = ct_base64_encode_decode_tree( [ $component ], true )[0]; + + if ( isset( $component['children'] ) ) { + if ( is_array( $components[ $key ]['children'] ) ) { + $components[ $key ]['children'] = ct_recursively_manage_reusables( $components[ $key ]['children'], null, null ); + } + } + } + + $output = [ + 'components' => $components + ]; + + if ( sizeof( $classes ) > 0 ) { + $output['classes'] = $classes; + } + + if ( sizeof( $colors ) > 0 ) { + $output['colors'] = $colors; + } + + if ( sizeof( $lookupTable ) > 0 ) { + $output['lookuptable'] = $lookupTable; + } + + return $output; + } ); + + + if ( ! $pageCache ) { + wp_send_json_error( + new WP_Error( + 'asura_connection_error', + __( "Couldn't retrieve design sets page, please contact design set provider or plugin developer", 'asura-connector' ) + ), + 500 + ); + } + + wp_send_json( $pageCache ); + } + + public function get_component_from_source( $embeded_config ) { + $component_id = $_REQUEST['id']; + $post_id = $_REQUEST['page']; + + $componentCache = Transient::remember( Connector::$module_id."_component_{$embeded_config->provider->id}_{$embeded_config->license->id}_{$embeded_config->term_slug}_{$post_id}_{$component_id}", HOUR_IN_SECONDS, function () use ( $embeded_config, $post_id, $component_id ) { + + $response = AsuraSDK::oxygenbuilder_componentclasses( $embeded_config, $post_id, $component_id ); + + if ( $response->getStatusCode() !== 200 ) { + error_log( "asura-connector [error]: couldn't retrieve design sets component for license id {$embeded_config->license->id} and term slug {$embeded_config->term_slug}. http error code: {$response->getStatusCode()}" ); + + return null; + } + + $component = []; + $classes = []; + $colors = []; + $lookupTable = []; + + $content = json_decode( $response->getBody()->getContents(), true ); + + if ( isset( $content['component'] ) ) { + $component = $content['component']; + } + if ( isset( $content['classes'] ) ) { + $classes = $content['classes']; + } + if ( isset( $content['colors'] ) ) { + $colors = $content['colors']; + } + if ( isset( $content['lookuptable'] ) ) { + $lookupTable = $content['lookuptable']; + } + + $component = ct_base64_encode_decode_tree( array( $component ), true )[0]; + + if ( isset( $component['children'] ) ) { + // global $wpdb; + // $data = $wpdb->get_results("SELECT * FROM `" . $wpdb->postmeta . "` WHERE meta_key='ct_source_site' AND meta_value='" . $wpdb->prepare(base64_decode($source)) . "'"); + // $source_info = array(); + + // if (is_array($data) && !empty($data)) { + // foreach ($data as $meta) { + // // if post exists and is not in trash + // $post = get_post($meta->post_id); + + // if ($post && $post->post_status != 'trash') { + // $source_info[] = $meta->post_id; + // } + // } + // } + + if ( is_array( $component['children'] ) ) { + $component['children'] = ct_recursively_manage_reusables( $component['children'], null, null ); + } + } + + $output = array( 'component' => $component ); + + if ( sizeof( $classes ) > 0 ) { + $output['classes'] = $classes; + } + + if ( sizeof( $colors ) > 0 ) { + $output['colors'] = $colors; + } + + if ( sizeof( $lookupTable ) > 0 ) { + $output['lookuptable'] = $lookupTable; + } + + return $output; + } ); + + if ( ! $componentCache ) { + wp_send_json_error( + new WP_Error( + 'asura_connection_error', + __( "Couldn't retrieve design sets component, please contact design set provider or plugin developer", 'asura-connector' ) + ), + 500 + ); + } + + wp_send_json( $componentCache ); + } + +} diff --git a/app/Connector.php b/app/Connector.php new file mode 100644 index 0000000..44a1eb0 --- /dev/null +++ b/app/Connector.php @@ -0,0 +1,108 @@ +drop(Provider::TABLE_NAME); + DB::db()->drop(License::TABLE_NAME); + } + + public function plugin_deactivate(): void + { + } +} diff --git a/app/Frontend.php b/app/Frontend.php new file mode 100644 index 0000000..c95efd0 --- /dev/null +++ b/app/Frontend.php @@ -0,0 +1,55 @@ +inject_library_component(); + } + } + + public function inject_library_component() { + global $ct_source_sites; + $injects = []; + + foreach ( self::get_terms() as $term ) { + $injects["{$term->slug}"] = [ + 'label' => "{$term->name}", + 'url' => 'asura-connector', + 'accesskey' => "", + 'system' => true + ]; + } + + $ct_source_sites = array_merge( $injects, $ct_source_sites ); + } + + public static function get_terms() { + $licenses = DB::db()->select( License::TABLE_NAME, [ + 'id [Int]', + 'provider_id [Int]', + 'hash', + ] ); + + $terms = []; + + foreach ( $licenses as $license ) { + $licenseObj = (object) $license; + $termsCache = Transient::get( Connector::$module_id . "_terms_{$licenseObj->provider_id}_{$licenseObj->id}", [] ); + + foreach ( $termsCache as $term ) { + $term['license_id'] = $licenseObj->id; + $term['provider_id'] = $licenseObj->provider_id; + array_push( $terms, (object) $term ); + } + } + + return $terms; + } +} diff --git a/app/Lib/Asura.php b/app/Lib/Asura.php new file mode 100644 index 0000000..23ee7b6 --- /dev/null +++ b/app/Lib/Asura.php @@ -0,0 +1,254 @@ +{$method}( + "{$provider->endpoint}/{$path}", + [ + $query_or_body => array_merge( + $query, + [ + 'api_key' => $provider->api_key, + 'api_secret' => $provider->api_secret, + ] + ) + ] + ); + } catch ( RequestException $e ) { + $response = $e->getResponse(); + } + + return $response; + } + + /** + * + * @param object $provider + * @param string $license_key + * + * @return mixed + */ + public static function license_domains_register( $provider, $license_key ) { + return self::remoteRequest( 'post', [ + 'key' => $license_key, + 'domain' => site_url(), + ], "licenses/domains/register", $provider ); + } + + /** + * + * @param object $provider + * @param string $license_key + * + * @return mixed + */ + public static function license_domains_deregister( $provider, $license_key ) { + return self::remoteRequest( 'post', [ + 'key' => $license_key, + 'domain' => home_url(), + ], "licenses/domains/deregister", $provider ); + } + + /** + * + * @param object $provider + * @param string $hash + * + * @return mixed + */ + public static function license_terms_index( $provider, $hash ) { + return self::remoteRequest( 'get', [ + 'hash' => $hash, + ], "licenses/terms", $provider ); + } + + /** + * + * @param object $provider + * @param string $hash + * @param string $term_slug + * + * @return mixed + */ + public static function oxygenbuilder_items( $provider, $license, $term_slug ) { + return self::remoteRequest( 'get', [ + 'hash' => $license->hash, + 'term_slug' => $term_slug, + 'embeded_source' => 'asura::' . base64_encode( json_encode( [ + 'provider' => $provider, + 'license' => $license, + 'term_slug' => $term_slug, + ] ) ), + ], "oxygenbuilder/items", $provider ); + } + + /** + * + * @param object $provider + * @param string $hash + * @param string $term_slug + * @param string|int $post_id + * + * @return mixed + */ + public static function oxygenbuilder_pageclasses( $embeded_config, $post_id ) { + return self::remoteRequest( 'get', [ + 'hash' => $embeded_config->license->hash, + 'term_slug' => $embeded_config->term_slug, + 'post_id' => $post_id, + ], "oxygenbuilder/pageclasses", $embeded_config->provider ); + } + + /** + * + * @param object $provider + * @param string $hash + * @param string $term_slug + * @param string|int $post_id + * @param string|int $component_id + * + * @return mixed + */ + public static function oxygenbuilder_componentclasses( $embeded_config, $post_id, $component_id ) { + return self::remoteRequest( 'get', [ + 'hash' => $embeded_config->license->hash, + 'term_slug' => $embeded_config->term_slug, + 'post_id' => $post_id, + 'component_id' => $component_id, + ], "oxygenbuilder/componentclasses", $embeded_config->provider ); + } + + /** + * + * @param object $provider + * @param string $hash + * @param string $term_slug + * + * @return mixed + */ + public static function oxygenbuilder_colors( $provider, $hash, $term_slug ) { + return self::remoteRequest( 'get', [ + 'hash' => $hash, + 'term_slug' => $term_slug, + ], "oxygenbuilder/colors", $provider ); + } + + /** + * + * @param object $provider + * @param string $hash + * @param string $term_slug + * + * @return mixed + */ + public static function oxygenbuilder_stylesheets( $provider, $hash, $term_slug ) { + return self::remoteRequest( 'get', [ + 'hash' => $hash, + 'term_slug' => $term_slug, + ], "oxygenbuilder/stylesheets", $provider ); + } + + /** + * + * @param object $provider + * @param string $hash + * @param string $term_slug + * + * @return mixed + */ + public static function oxygenbuilder_settings( $provider, $hash, $term_slug ) { + return self::remoteRequest( 'get', [ + 'hash' => $hash, + 'term_slug' => $term_slug, + ], "oxygenbuilder/settings", $provider ); + } + + /** + * + * @param object $provider + * @param string $hash + * @param string $term_slug + * + * @return mixed + */ + public static function oxygenbuilder_stylesets( $provider, $hash, $term_slug ) { + return self::remoteRequest( 'get', [ + 'hash' => $hash, + 'term_slug' => $term_slug, + ], "oxygenbuilder/stylesets", $provider ); + } + + /** + * + * @param object $provider + * @param string $hash + * @param string $term_slug + * + * @return mixed + */ + public static function oxygenbuilder_selectors( $provider, $hash, $term_slug ) { + return self::remoteRequest( 'get', [ + 'hash' => $hash, + 'term_slug' => $term_slug, + ], "oxygenbuilder/selectors", $provider ); + } + + /** + * + * @param object $provider + * @param string $hash + * @param string $term_slug + * + * @return mixed + */ + public static function oxygenbuilder_templates( $provider, $hash, $term_slug ) { + return self::remoteRequest( 'get', [ + 'hash' => $hash, + 'term_slug' => $term_slug, + ], "oxygenbuilder/templates", $provider ); + } + + /** + * + * @param object $provider + * @param string $hash + * @param string $term_slug + * + * @return mixed + */ + public static function oxygenbuilder_pages( $provider, $hash, $term_slug ) { + return self::remoteRequest( 'get', [ + 'hash' => $hash, + 'term_slug' => $term_slug, + ], "oxygenbuilder/pages", $provider ); + } + + /** + * + * @param object $provider + * @param string $hash + * @param string $term_slug + * + * @return mixed + */ + public static function oxygenbuilder_classes( $provider, $hash, $term_slug ) { + return self::remoteRequest( 'get', [ + 'hash' => $hash, + 'term_slug' => $term_slug, + ], "oxygenbuilder/classes", $provider ); + } + +} \ No newline at end of file diff --git a/app/Models/License.php b/app/Models/License.php new file mode 100644 index 0000000..ba73f8a --- /dev/null +++ b/app/Models/License.php @@ -0,0 +1,7 @@ +select('*', DB::wpdb()->prefix.'users', ['user_email' => 'email@example.com']);` + * - `DB::db()->count('*', DB::wpdb()->prefix.'options', ['optiona_name[~]' => 'mypluginprefix_' ]);` + * + * @see https://medoo.in/doc Please read the Medoo's documentation for all the available methods. + * + * @package Dplugins\Asura\Connector + * @since 1.0.0 + * @author dplugins + * @copyright 2021 dplugins + */ +class DB +{ + private static $instances = []; + + private static $medoo; + + private static $wpdb; + + protected function __construct() + { + self::$wpdb = self::wpdb(); + + $db_host = self::$wpdb->parse_db_host(self::$wpdb->dbhost); + + self::$medoo = new Medoo([ + 'type' => 'mysql', + 'host' => $db_host[0], + 'port' => $db_host[1], + 'socket' => $db_host[2], + 'database' => self::$wpdb->dbname, + 'username' => self::$wpdb->dbuser, + 'password' => self::$wpdb->dbpassword, + 'prefix' => self::$wpdb->prefix, + ]); + } + + public static function getInstance(): DB + { + $cls = static::class; + if (!isset(self::$instances[$cls])) { + self::$instances[$cls] = new static(); + } + + return self::$instances[$cls]; + } + + public static function __callStatic(string $method, array $args) + { + return self::getInstance()::$medoo->{$method}(...$args); + } + + public function __get(string $name) + { + return self::getInstance()::$medoo->{$name}; + } + + public function __wakeup() + { + throw new Exception("Cannot unserialize a singleton."); + } + + protected function __clone() + { + } + + /** + * Get the wpdb object. + * + * @return wpdb + */ + public static function wpdb(): wpdb + { + /** @var wpdb $wpdb */ + global $wpdb; + + return $wpdb; + } + + /** + * Get the medoo object. + * + * example: `DB::db()->select('*', DB::wpdb()->prefix.'table_name', ['id' => 1]);` + * + * @return Medoo + */ + public static function db(): Medoo + { + return self::getInstance()::$medoo; + } +} diff --git a/app/Utils/EDD_SL_Plugin_Updater.php b/app/Utils/EDD_SL_Plugin_Updater.php new file mode 100644 index 0000000..4dc6d3c --- /dev/null +++ b/app/Utils/EDD_SL_Plugin_Updater.php @@ -0,0 +1,620 @@ +api_url = trailingslashit( $_api_url ); + $this->api_data = $_api_data; + $this->name = plugin_basename( $_plugin_file ); + $this->slug = basename( $_plugin_file, '.php' ); + $this->version = $_api_data['version']; + $this->wp_override = isset( $_api_data['wp_override'] ) ? (bool) $_api_data['wp_override'] : false; + $this->beta = ! empty( $this->api_data['beta'] ) ? true : false; + $this->cache_key = 'edd_sl_' . md5( serialize( $this->slug . $this->api_data['license'] . $this->beta ) ); + + $edd_plugin_data[ $this->slug ] = $this->api_data; + + /** + * Fires after the $edd_plugin_data is setup. + * + * @since x.x.x + * + * @param array $edd_plugin_data Array of EDD SL plugin data. + */ + do_action( 'post_edd_sl_plugin_updater_setup', $edd_plugin_data ); + + // Set up hooks. + $this->init(); + + } + + /** + * Set up WordPress filters to hook into WP's update process. + * + * @uses add_filter() + * + * @return void + */ + public function init() { + + add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) ); + add_filter( 'plugins_api', array( $this, 'plugins_api_filter' ), 10, 3 ); + remove_action( 'after_plugin_row_' . $this->name, 'wp_plugin_update_row', 10 ); + add_action( 'after_plugin_row_' . $this->name, array( $this, 'show_update_notification' ), 10, 2 ); + add_action( 'admin_init', array( $this, 'show_changelog' ) ); + + } + + /** + * Check for Updates at the defined API endpoint and modify the update array. + * + * This function dives into the update API just when WordPress creates its update array, + * then adds a custom API call and injects the custom plugin data retrieved from the API. + * It is reassembled from parts of the native WordPress plugin update code. + * See wp-includes/update.php line 121 for the original wp_update_plugins() function. + * + * @uses api_request() + * + * @param array $_transient_data Update array build by WordPress. + * @return array Modified update array with custom plugin data. + */ + public function check_update( $_transient_data ) { + + global $pagenow; + + if ( ! is_object( $_transient_data ) ) { + $_transient_data = new stdClass; + } + + if ( 'plugins.php' == $pagenow && is_multisite() ) { + return $_transient_data; + } + + if ( ! empty( $_transient_data->response ) && ! empty( $_transient_data->response[ $this->name ] ) && false === $this->wp_override ) { + return $_transient_data; + } + + $current = $this->get_repo_api_data(); + if ( false !== $current && is_object( $current ) && isset( $current->new_version ) ) { + if ( version_compare( $this->version, $current->new_version, '<' ) ) { + $_transient_data->response[ $this->name ] = $current; + } else { + // Populating the no_update information is required to support auto-updates in WordPress 5.5. + $_transient_data->no_update[ $this->name ] = $current; + } + } + $_transient_data->last_checked = time(); + $_transient_data->checked[ $this->name ] = $this->version; + + return $_transient_data; + } + + /** + * Get repo API data from store. + * Save to cache. + * + * @return \stdClass + */ + public function get_repo_api_data() { + $version_info = $this->get_cached_version_info(); + + if ( false === $version_info ) { + $version_info = $this->api_request( + 'plugin_latest_version', + array( + 'slug' => $this->slug, + 'beta' => $this->beta, + ) + ); + if ( ! $version_info ) { + return false; + } + + // This is required for your plugin to support auto-updates in WordPress 5.5. + $version_info->plugin = $this->name; + $version_info->id = $this->name; + + $this->set_version_info_cache( $version_info ); + } + + return $version_info; + } + + /** + * show update nofication row -- needed for multisite subsites, because WP won't tell you otherwise! + * + * @param string $file + * @param array $plugin + */ + public function show_update_notification( $file, $plugin ) { + + if ( is_network_admin() ) { + return; + } + + if( ! current_user_can( 'update_plugins' ) ) { + return; + } + + if( ! is_multisite() ) { + return; + } + + if ( $this->name != $file ) { + return; + } + + // Remove our filter on the site transient + remove_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ), 10 ); + + $update_cache = get_site_transient( 'update_plugins' ); + + $update_cache = is_object( $update_cache ) ? $update_cache : new stdClass(); + + if ( empty( $update_cache->response ) || empty( $update_cache->response[ $this->name ] ) ) { + + $version_info = $this->get_repo_api_data(); + + if ( false === $version_info ) { + $version_info = $this->api_request( 'plugin_latest_version', array( 'slug' => $this->slug, 'beta' => $this->beta ) ); + + // Since we disabled our filter for the transient, we aren't running our object conversion on banners, sections, or icons. Do this now: + if ( isset( $version_info->banners ) && ! is_array( $version_info->banners ) ) { + $version_info->banners = $this->convert_object_to_array( $version_info->banners ); + } + + if ( isset( $version_info->sections ) && ! is_array( $version_info->sections ) ) { + $version_info->sections = $this->convert_object_to_array( $version_info->sections ); + } + + if ( isset( $version_info->icons ) && ! is_array( $version_info->icons ) ) { + $version_info->icons = $this->convert_object_to_array( $version_info->icons ); + } + + if ( isset( $version_info->contributors ) && ! is_array( $version_info->contributors ) ) { + $version_info->contributors = $this->convert_object_to_array( $version_info->contributors ); + } + + $this->set_version_info_cache( $version_info ); + } + + if ( ! is_object( $version_info ) ) { + return; + } + + if ( version_compare( $this->version, $version_info->new_version, '<' ) ) { + $update_cache->response[ $this->name ] = $version_info; + } else { + $update_cache->no_update[ $this->name ] = $version_info; + } + + $update_cache->last_checked = time(); + $update_cache->checked[ $this->name ] = $this->version; + + set_site_transient( 'update_plugins', $update_cache ); + + } else { + + $version_info = $update_cache->response[ $this->name ]; + + } + + // Restore our filter + add_filter( 'pre_set_site_transient_update_plugins', array( $this, 'check_update' ) ); + + if ( ! empty( $update_cache->response[ $this->name ] ) && version_compare( $this->version, $version_info->new_version, '<' ) ) { + + // build a plugin list row, with update notification + $wp_list_table = _get_list_table( 'WP_Plugins_List_Table' ); + # + echo ''; + echo ''; + echo '
'; + + $changelog_link = self_admin_url( 'index.php?edd_sl_action=view_plugin_changelog&plugin=' . $this->name . '&slug=' . $this->slug . '&TB_iframe=true&width=772&height=911' ); + + if ( empty( $version_info->download_link ) ) { + printf( + __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s.', 'easy-digital-downloads' ), + esc_html( $version_info->name ), + '', + esc_html( $version_info->new_version ), + '' + ); + } else { + printf( + __( 'There is a new version of %1$s available. %2$sView version %3$s details%4$s or %5$supdate now%6$s.', 'easy-digital-downloads' ), + esc_html( $version_info->name ), + '', + esc_html( $version_info->new_version ), + '', + '', + '' + ); + } + + do_action( "in_plugin_update_message-{$file}", $plugin, $version_info ); + + echo '
'; + } + } + + /** + * Updates information on the "View version x.x details" page with custom data. + * + * @uses api_request() + * + * @param mixed $_data + * @param string $_action + * @param object $_args + * @return object $_data + */ + public function plugins_api_filter( $_data, $_action = '', $_args = null ) { + + if ( $_action != 'plugin_information' ) { + + return $_data; + + } + + if ( ! isset( $_args->slug ) || ( $_args->slug != $this->slug ) ) { + + return $_data; + + } + + $to_send = array( + 'slug' => $this->slug, + 'is_ssl' => is_ssl(), + 'fields' => array( + 'banners' => array(), + 'reviews' => false, + 'icons' => array(), + ) + ); + + // Get the transient where we store the api request for this plugin for 24 hours + $edd_api_request_transient = $this->get_cached_version_info(); + + //If we have no transient-saved value, run the API, set a fresh transient with the API value, and return that value too right now. + if ( empty( $edd_api_request_transient ) ) { + + $api_response = $this->api_request( 'plugin_information', $to_send ); + + // Expires in 3 hours + $this->set_version_info_cache( $api_response ); + + if ( false !== $api_response ) { + $_data = $api_response; + } + + } else { + $_data = $edd_api_request_transient; + } + + // Convert sections into an associative array, since we're getting an object, but Core expects an array. + if ( isset( $_data->sections ) && ! is_array( $_data->sections ) ) { + $_data->sections = $this->convert_object_to_array( $_data->sections ); + } + + // Convert banners into an associative array, since we're getting an object, but Core expects an array. + if ( isset( $_data->banners ) && ! is_array( $_data->banners ) ) { + $_data->banners = $this->convert_object_to_array( $_data->banners ); + } + + // Convert icons into an associative array, since we're getting an object, but Core expects an array. + if ( isset( $_data->icons ) && ! is_array( $_data->icons ) ) { + $_data->icons = $this->convert_object_to_array( $_data->icons ); + } + + // Convert contributors into an associative array, since we're getting an object, but Core expects an array. + if ( isset( $_data->contributors ) && ! is_array( $_data->contributors ) ) { + $_data->contributors = $this->convert_object_to_array( $_data->contributors ); + } + + if( ! isset( $_data->plugin ) ) { + $_data->plugin = $this->name; + } + + return $_data; + } + + /** + * Convert some objects to arrays when injecting data into the update API + * + * Some data like sections, banners, and icons are expected to be an associative array, however due to the JSON + * decoding, they are objects. This method allows us to pass in the object and return an associative array. + * + * @since 3.6.5 + * + * @param stdClass $data + * + * @return array + */ + private function convert_object_to_array( $data ) { + if ( ! is_array( $data ) && ! is_object( $data ) ) { + return array(); + } + $new_data = array(); + foreach ( $data as $key => $value ) { + $new_data[ $key ] = is_object( $value ) ? $this->convert_object_to_array( $value ) : $value; + } + + return $new_data; + } + + /** + * Disable SSL verification in order to prevent download update failures + * + * @param array $args + * @param string $url + * @return object $array + */ + public function http_request_args( $args, $url ) { + + $verify_ssl = $this->verify_ssl(); + if ( strpos( $url, 'https://' ) !== false && strpos( $url, 'edd_action=package_download' ) ) { + $args['sslverify'] = $verify_ssl; + } + return $args; + + } + + /** + * Calls the API and, if successfull, returns the object delivered by the API. + * + * @uses get_bloginfo() + * @uses wp_remote_post() + * @uses is_wp_error() + * + * @param string $_action The requested action. + * @param array $_data Parameters for the API action. + * @return false|object + */ + private function api_request( $_action, $_data ) { + + global $wp_version, $edd_plugin_url_available; + + $verify_ssl = $this->verify_ssl(); + + // Do a quick status check on this domain if we haven't already checked it. + $store_hash = md5( $this->api_url ); + if ( ! is_array( $edd_plugin_url_available ) || ! isset( $edd_plugin_url_available[ $store_hash ] ) ) { + $test_url_parts = parse_url( $this->api_url ); + + $scheme = ! empty( $test_url_parts['scheme'] ) ? $test_url_parts['scheme'] : 'http'; + $host = ! empty( $test_url_parts['host'] ) ? $test_url_parts['host'] : ''; + $port = ! empty( $test_url_parts['port'] ) ? ':' . $test_url_parts['port'] : ''; + + if ( empty( $host ) ) { + $edd_plugin_url_available[ $store_hash ] = false; + } else { + $test_url = $scheme . '://' . $host . $port; + $response = wp_remote_get( $test_url, array( 'timeout' => $this->health_check_timeout, 'sslverify' => $verify_ssl ) ); + $edd_plugin_url_available[ $store_hash ] = is_wp_error( $response ) ? false : true; + } + } + + if ( false === $edd_plugin_url_available[ $store_hash ] ) { + return false; + } + + $data = array_merge( $this->api_data, $_data ); + + if ( $data['slug'] != $this->slug ) { + return false; + } + + if ( $this->api_url == trailingslashit ( home_url() ) ) { + return false; // Don't allow a plugin to ping itself + } + + $api_params = array( + 'edd_action' => 'get_version', + 'license' => ! empty( $data['license'] ) ? $data['license'] : '', + 'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false, + 'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false, + 'version' => isset( $data['version'] ) ? $data['version'] : false, + 'slug' => $data['slug'], + 'author' => $data['author'], + 'url' => home_url(), + 'beta' => ! empty( $data['beta'] ), + ); + + $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $verify_ssl, 'body' => $api_params ) ); + + if ( ! is_wp_error( $request ) ) { + $request = json_decode( wp_remote_retrieve_body( $request ) ); + } + + if ( $request && isset( $request->sections ) ) { + $request->sections = maybe_unserialize( $request->sections ); + } else { + $request = false; + } + + if ( $request && isset( $request->banners ) ) { + $request->banners = maybe_unserialize( $request->banners ); + } + + if ( $request && isset( $request->icons ) ) { + $request->icons = maybe_unserialize( $request->icons ); + } + + if ( ! empty( $request->sections ) ) { + foreach( $request->sections as $key => $section ) { + $request->$key = (array) $section; + } + } + + return $request; + } + + /** + * If available, show the changelog for sites in a multisite install. + */ + public function show_changelog() { + + global $edd_plugin_data; + + if( empty( $_REQUEST['edd_sl_action'] ) || 'view_plugin_changelog' != $_REQUEST['edd_sl_action'] ) { + return; + } + + if( empty( $_REQUEST['plugin'] ) ) { + return; + } + + if( empty( $_REQUEST['slug'] ) ) { + return; + } + + if( ! current_user_can( 'update_plugins' ) ) { + wp_die( __( 'You do not have permission to install plugin updates', 'easy-digital-downloads' ), __( 'Error', 'easy-digital-downloads' ), array( 'response' => 403 ) ); + } + + $data = $edd_plugin_data[ $_REQUEST['slug'] ]; + $version_info = $this->get_cached_version_info(); + + if( false === $version_info ) { + + $api_params = array( + 'edd_action' => 'get_version', + 'item_name' => isset( $data['item_name'] ) ? $data['item_name'] : false, + 'item_id' => isset( $data['item_id'] ) ? $data['item_id'] : false, + 'slug' => $_REQUEST['slug'], + 'author' => $data['author'], + 'url' => home_url(), + 'beta' => ! empty( $data['beta'] ) + ); + + $verify_ssl = $this->verify_ssl(); + $request = wp_remote_post( $this->api_url, array( 'timeout' => 15, 'sslverify' => $verify_ssl, 'body' => $api_params ) ); + + if ( ! is_wp_error( $request ) ) { + $version_info = json_decode( wp_remote_retrieve_body( $request ) ); + } + + if ( ! empty( $version_info ) && isset( $version_info->sections ) ) { + $version_info->sections = maybe_unserialize( $version_info->sections ); + } else { + $version_info = false; + } + + if( ! empty( $version_info ) ) { + foreach( $version_info->sections as $key => $section ) { + $version_info->$key = (array) $section; + } + } + + $this->set_version_info_cache( $version_info ); + + // Delete the unneeded option + delete_option( md5( 'edd_plugin_' . sanitize_key( $_REQUEST['plugin'] ) . '_' . $this->beta . '_version_info' ) ); + } + + if ( isset( $version_info->sections ) ) { + $sections = $this->convert_object_to_array( $version_info->sections ); + if ( ! empty( $sections['changelog'] ) ) { + echo '
' . wp_kses_post( $sections['changelog'] ) . '
'; + } + } + + exit; + } + + /** + * Gets the plugin's cached version information from the database. + * + * @param string $cache_key + * @return boolean|string + */ + public function get_cached_version_info( $cache_key = '' ) { + + if( empty( $cache_key ) ) { + $cache_key = $this->cache_key; + } + + $cache = get_option( $cache_key ); + + if( empty( $cache['timeout'] ) || time() > $cache['timeout'] ) { + return false; // Cache is expired + } + + // We need to turn the icons into an array, thanks to WP Core forcing these into an object at some point. + $cache['value'] = json_decode( $cache['value'] ); + if ( ! empty( $cache['value']->icons ) ) { + $cache['value']->icons = (array) $cache['value']->icons; + } + + return $cache['value']; + + } + + /** + * Adds the plugin version information to the database. + * + * @param string $value + * @param string $cache_key + */ + public function set_version_info_cache( $value = '', $cache_key = '' ) { + + if( empty( $cache_key ) ) { + $cache_key = $this->cache_key; + } + + $data = array( + 'timeout' => strtotime( '+3 hours', time() ), + 'value' => json_encode( $value ) + ); + + update_option( $cache_key, $data, 'no' ); + + // Delete the duplicate option + delete_option( 'edd_api_request_' . md5( serialize( $this->slug . $this->api_data['license'] . $this->beta ) ) ); + } + + /** + * Returns if the SSL of the store should be verified. + * + * @since 1.6.13 + * @return bool + */ + private function verify_ssl() { + return (bool) apply_filters( 'edd_sl_api_request_verify_ssl', true, $this ); + } + +} diff --git a/app/Utils/Http.php b/app/Utils/Http.php new file mode 100644 index 0000000..a9f9448 --- /dev/null +++ b/app/Utils/Http.php @@ -0,0 +1,51 @@ + 60, + 'headers' => [ + 'Accept' => 'application/json', + ] + ] ); + } + + public static function __callStatic( $method, $args ) { + return self::getInstance()::$client->{$method}( ...$args ); + } + + public static function getInstance(): Http { + $cls = static::class; + if ( ! isset( self::$instances[ $cls ] ) ) { + self::$instances[ $cls ] = new static(); + } + + return self::$instances[ $cls ]; + } + + public function __wakeup() { + throw new Exception( "Cannot unserialize a singleton." ); + } + + protected function __clone() { + } + + /** + * Get the Guzzle object. + * + * @return Client + */ + public static function http(): Client + { + return self::getInstance()::$client; + } +} \ No newline at end of file diff --git a/app/Utils/Migration.php b/app/Utils/Migration.php new file mode 100644 index 0000000..fd9efcb --- /dev/null +++ b/app/Utils/Migration.php @@ -0,0 +1,41 @@ + + * @copyright 2021 dplugins + */ +class Migration { + public static function migrate( $migrationPath, $migrationNamespace, $currentDatabaseVersion, $newDatabaseVersion ): void { + $regExFileName = '/(\d{4})_(\d{2})_(\d{2})_(\d{6})_(.*?)_(.*?)\.php/'; + + foreach ( glob( $migrationPath . '*.php' ) as $fileName ) { + if ( preg_match( $regExFileName, basename( $fileName ), $match ) ) { + $fileBasename = $match[0]; + $fileDateYear = $match[1]; + $fileDateMonth = $match[2]; + $fileDateDay = $match[3]; + $fileTimestamp = $match[4]; + $fileVersion = $match[5]; + $fileName = $match[6]; + + if ( intval( $fileVersion ) <= intval( $newDatabaseVersion ) && intval( $fileVersion ) > intval( $currentDatabaseVersion ) ) { + $className = self::camelize( $fileName ); + call_user_func( [ "{$migrationNamespace}\\{$className}", 'up' ] ); + } + } + } + } + + public static function camelize( $input, $separator = '_' ) { + return str_replace( $separator, '', ucwords( $input, $separator ) ); + } + + public static function rollback(): void { + } +} diff --git a/app/Utils/Notice.php b/app/Utils/Notice.php new file mode 100644 index 0000000..c92e1a1 --- /dev/null +++ b/app/Utils/Notice.php @@ -0,0 +1,74 @@ + + * @copyright 2021 dplugins + */ +class Notice +{ + public const ERROR = 'error'; + public const SUCCESS = 'success'; + public const WARNING = 'warning'; + public const INFO = 'info'; + + public static function lists() + { + $notices = Utils::get_option('_notices', []); + + Utils::update_option('_notices', []); + + return $notices; + } + + public static function add($status, $message, $key = false) + { + $notices = Utils::get_option('_notices', []); + + $payload = [ + 'status' => $status, + 'message' => $message, + ]; + + if ($key) { + $notices[$key] = $payload; + } else { + $notices[] = $payload; + } + + Utils::update_option('_notices', $notices); + } + + public static function adds( $status, $messages ) { + if ( ! is_array( $messages ) ) { + $messages = [ $messages ]; + } + + foreach ( $messages as $message ) { + if (!is_array($message)) { + self::add($status, $message); + } else { + self::add($status, $message[0], $message[1], $message[2]); + } + } + } + + public static function success( $message, $key = false ) { + self::add( self::SUCCESS, $message, $key ); + } + + public static function warning( $message, $key = false ) { + self::add( self::WARNING, $message, $key ); + } + + public static function info( $message, $key = false ) { + self::add( self::INFO, $message, $key ); + } + + public static function error( $message, $key = false ) { + self::add( self::ERROR, $message, $key ); + } +} diff --git a/app/Utils/OxygenBuilder.php b/app/Utils/OxygenBuilder.php new file mode 100644 index 0000000..8442def --- /dev/null +++ b/app/Utils/OxygenBuilder.php @@ -0,0 +1,166 @@ + + */ +class OxygenBuilder +{ + public static function is_oxygen_editor(): bool { + return defined( 'SHOW_CT_BUILDER' ) && ! defined( 'OXYGEN_IFRAME' ); + } + + public static function is_oxygen_iframe(): bool { + return defined( 'SHOW_CT_BUILDER' ) && defined( 'OXYGEN_IFRAME' ); + } + + /** + * @see \oxygen_vsb_current_user_can_access + * @see \oxygen_vsb_current_user_can_full_access + */ + public static function can( bool $full = false ): bool { + if ( is_multisite() && is_super_admin() ) { + return true; + } + + $user = wp_get_current_user(); + + if ( ! $user ) { + return false; + } + + $user_edit_mode = self::get_user_edit_mode(); + + if ( $full ) { + if ( $user_edit_mode === "true" ) { + return true; + } else if ( $user_edit_mode === "false" || $user_edit_mode == 'edit_only' ) { + return false; + } + } else { + if ( $user_edit_mode === "true" || $user_edit_mode == 'edit_only' ) { + return true; + } else if ( $user_edit_mode === "false" ) { + return false; + } + } + + if ( $user && isset( $user->roles ) && is_array( $user->roles ) ) { + foreach ( $user->roles as $role ) { + if ( $role === 'administrator' ) { + return true; + } + $option = get_option( "oxygen_vsb_access_role_{$role}", false ); + if ( $option && $option === 'true' ) { + return true; + } + + if ( $full ) { + if ( $option && $option == 'true' ) { + return true; + } + } else { + if ( $option && ( $option == 'true' || $option == 'edit_only' ) ) { + return true; + } + } + } + } + + return false; + } + + /** + * @see \oxygen_vsb_get_user_edit_mode + */ + public static function get_user_edit_mode( bool $skip_role = false ) { + $user_id = get_current_user_id(); + $users_access_list = get_option( "oxygen_vsb_options_users_access_list", [] ); + + if ( isset( $users_access_list[ $user_id ] ) && isset( $users_access_list[ $user_id ][0] ) ) { + return $users_access_list[ $user_id ][0]; + } + + if ( $skip_role ) { + return ""; + } + + $user = wp_get_current_user(); + + if ( ! $user ) { + return ""; + } + + $edit_only = false; + + if ( $user && isset( $user->roles ) && is_array( $user->roles ) ) { + foreach ( $user->roles as $role ) { + if ( $role == 'administrator' ) { + return "true"; + } + $option = get_option( "oxygen_vsb_access_role_$role", false ); + if ( $option && $option == 'true' ) { + return "true"; + } + + if ( $option && $option == 'edit_only' ) { + $edit_only = true; + } + } + } + + if ( $edit_only ) { + return "edit_only"; + } + + return ""; + } + + /** + * @see \oxygen_is_user_access_option_set + */ + public static function is_user_access_option_set( string $option_name ): bool { + $user_id = get_current_user_id(); + + if ( ! $user_id ) { + return false; + } + + $access_option = get_option( $option_name, [] ); + + if ( isset( $access_option[ $user_id ] ) && isset( $access_option[ $user_id ][0] ) && $access_option[ $user_id ][0] === "true" ) { + return true; + } + + return false; + } + + /** + * @see \oxygen_is_role_access_option_set + */ + public static function is_role_access_option_set( string $option_name ): bool { + $user = wp_get_current_user(); + + if ( ! $user ) { + return false; + } + + if ( $user && isset( $user->roles ) && is_array( $user->roles ) ) { + $option = get_option( $option_name, false ); + foreach ( $user->roles as $role ) { + if ( $role == 'administrator' ) { + return true; + } + if ( isset( $option[ $role ] ) && isset( $option[ $role ][0] ) && $option[ $role ][0] === "true" ) { + return true; + } + } + } + + return false; + } +} \ No newline at end of file diff --git a/app/Utils/Template.php b/app/Utils/Template.php new file mode 100644 index 0000000..601659b --- /dev/null +++ b/app/Utils/Template.php @@ -0,0 +1,76 @@ +addFolder('emails', '/path/to/email/templates');` + * - `echo Template::template()->render('partials/header');` + * - `echo Template::template()->render('profile', ['name' => 'Jonathan']);` + * - `

Hello e($name)?>

` + * + * @see http://platesphp.com/ Please read the Plate's documentation for complete usage instruction. + * + * + * @package Dplugins\Asura\Connector + * @since 1.0.0 + * @author dplugins + * @copyright 2021 dplugins + */ +class Template +{ + private static $instances = []; + + public static $templates; + + protected function __construct() + { + self::$templates = new Engine(dirname(SUBNAMESPACENAMES_FILE) . '/templates'); + + self::$templates->registerFunction('asset', fn ($string) => plugins_url("/dist/{$string}", SUBNAMESPACENAMES_FILE)); + } + + public static function getInstance(): Template + { + $cls = static::class; + if (!isset(self::$instances[$cls])) { + self::$instances[$cls] = new static(); + } + + return self::$instances[$cls]; + } + + public static function __callStatic(string $method, array $args) + { + return self::getInstance()::$templates->{$method}(...$args); + } + + public function __get(string $name) + { + return self::getInstance()::$templates->{$name}; + } + + public function __wakeup() + { + throw new Exception("Cannot unserialize a singleton."); + } + + protected function __clone() + { + } + + public static function template(): Engine + { + return self::getInstance()::$templates; + } +} diff --git a/app/Utils/Transient.php b/app/Utils/Transient.php new file mode 100644 index 0000000..80e838d --- /dev/null +++ b/app/Utils/Transient.php @@ -0,0 +1,115 @@ + + * @copyright 2021 dplugins + */ +class Transient +{ + /** + * Check if transient exists. + * + * Example: + * - `Transient::has('myfavoritebook');` + * + * @param mixed $key The transient key to check if exists. + * @return bool + */ + public static function has($key): bool + { + return get_transient($key) !== false ? true : false; + } + + /** + * Get transient value. + * + * Example: + * - `Transient::get('myfavoritebook');` + * - `Transient::get('myfavoritebook', ['title' => 'The Purpose Driven Life', 'author' => 'Rick Warren']);` + * + * @param mixed $key The transient key to get + * @param bool $default The fallback value if the transient does not exist + * @return mixed + */ + public static function get($key, $default = false) + { + return get_transient($key, $default); + } + + /** + * Set transient value with expiration time. + * + * Example: + * - `Transient::set('my_favorite_soccer_player', 'Ronaldinho', 7 * YEAR_IN_SECONDS);` + * - `Transient::set( + * ['myfavoritebook', ['title' => 'The Purpose Driven Life', 'author' => 'Rick Warren']], + * ['my_favorite_anime', 'Fairy Tail'], + * );` + * + * @param string|array $key The transient key or an array of transient to set + * @param mixed|null $value The transient value + * @param int $ttl The duration of the transient in seconds. Default: `0` (no expiration) + * @return void + */ + public static function set($key, $value = null, $ttl = 0) + { + if (is_array($key)) { + foreach ($key as $k => $v) { + if (!is_array($v)) { + self::set($k, $v, $ttl); + } else { + self::set($k, $v[0], $v[1]); + } + } + return; + } + + set_transient($key, $value, $ttl); + } + + /** + * Delete transient. + * + * Example: + * - `Transient::delete('top_computer_brand');` + * + * @param mixed $key The transient key to delete. + * @return bool + */ + public static function delete($key) + { + return delete_transient($key); + } + + /** + * Get the transient or set it if it does not exist using the given callback. + * + * Example: + * - `Transient::remember('my_favorite_soccer_player', 30 * DAY_IN_SECONDS, fn() => 'Christiano Ronaldo');` + * + * @param mixed $key The transient key to get + * @param mixed $ttl The duration of the transient in seconds. Default: `0` (no expiration) + * @param Closure $callback Function to call if the transient does not exist, return the value that will saved. + * @return mixed + */ + public static function remember($key, $ttl, Closure $callback) + { + $item = self::get($key); + + if ($item !== false) { + return $item; + } + + self::set($key, $item = $callback(), $ttl); + + return $item; + } +} diff --git a/app/Utils/Utils.php b/app/Utils/Utils.php new file mode 100644 index 0000000..94bd599 --- /dev/null +++ b/app/Utils/Utils.php @@ -0,0 +1,134 @@ + + * @copyright 2021 dplugins + */ +class Utils +{ + /** + * The proxy of `DB::db()` method. + * + * @return Medoo + */ + public static function db(): Medoo + { + return DB::db(); + } + + /** + * The proxy of `Template::template()` method. + * + * @return Medoo + */ + public static function template(): Engine + { + return Template::template(); + } + + /** + * Prefix the `get_option()` function with `SubNamespaceNames::$slug`. + * + * @see https://developer.wordpress.org/reference/functions/get_option/ + * + * @param mixed $option + * @param bool $default + * @return mixed + */ + public static function get_option($option, $default = false) + { + return \get_option(SubNamespaceNames::$slug . '_' . $option, $default); + } + + /** + * Prefix the `update_option()` function with `SubNamespaceNames::$slug`. + * + * @see https://developer.wordpress.org/reference/functions/update_option/ + * + * @param mixed $option + * @param mixed $value + * @param mixed|null $autoload + * @return bool + */ + public static function update_option($option, $value, $autoload = null) + { + return \update_option(SubNamespaceNames::$slug . '_' . $option, $value); + } + + /** + * Prefix the `delete_option()` function with `SubNamespaceNames::$slug`. + * + * @see https://developer.wordpress.org/reference/functions/delete_option/ + * @param mixed $option + * @return bool + */ + public static function delete_option($option) + { + return \delete_option(SubNamespaceNames::$slug . '_' . $option); + } + + public static function redirect($location) + { + if (headers_sent() === false) { + wp_redirect($location); + } else { + echo ''; + } + exit; + } + + /** + * Check the type of the current request. + * + * @param string $type The type of the request. Available values: `admin`, `ajax`, `frontend`, `rest`, `cron`. + * @return bool + */ + public static function is_request(string $type): bool + { + switch ($type) { + case 'admin': + return is_admin(); + case 'ajax': + return defined('DOING_AJAX'); + case 'rest': + return defined('REST_REQUEST'); + case 'cron': + return defined('DOING_CRON'); + case 'frontend': + return (!is_admin() || defined('DOING_AJAX')) && !defined('DOING_CRON'); + default: + return false; + break; + } + } + + /** + * Add hyperlink on Manage Plugins page. + * @param mixed $links + * @return mixed + */ + public static function plugin_action_links($links, $setting_page_slug) + { + $plugin_shortcuts = [ + 'Settings', + // 'Buy me a coffee ☕' + ]; + + return array_merge( $links, $plugin_shortcuts ); + } + + public static function localization( $domain, $plugin_file ): void { + load_plugin_textdomain( $domain, false, dirname( plugin_basename( $plugin_file ) ) . '/languages/' ); + } + +} diff --git a/asura-connector.php b/asura-connector.php new file mode 100644 index 0000000..32f5c7a --- /dev/null +++ b/asura-connector.php @@ -0,0 +1,31 @@ + + * @link https://dplugins.com + * @since 1.0.0 + * @copyright 2021 dplugins + * @version 4.1.0 + */ + +defined( 'ABSPATH' ) || exit; + +define( 'ASURA_CONNECTOR_FILE', __FILE__ ); + +require_once __DIR__ . '/vendor/autoload.php'; + +\Dplugins\Asura\Connector\Connector::run('aether_m_connector', '4.1.0', '001'); diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..d7f2d1c --- /dev/null +++ b/composer.json @@ -0,0 +1,18 @@ +{ + "name": "dplugins/asura-connector", + "require": { + "php": "^7.4|^8.0", + "guzzlehttp/guzzle": "^7.3", + "catfan/medoo": "^2.1" + }, + "autoload": { + "psr-4": { + "Dplugins\\Asura\\Connector\\": "app/" + }, + "classmap": [ + "database/migrations/" + ] + }, + "minimum-stability": "dev", + "prefer-stable": true +} diff --git a/composer.lock b/composer.lock new file mode 100644 index 0000000..9da4353 --- /dev/null +++ b/composer.lock @@ -0,0 +1,535 @@ +{ + "_readme": [ + "This file locks the dependencies of your project to a known state", + "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", + "This file is @generated automatically" + ], + "content-hash": "0e5eceac54a340f2d436346dffd62bcd", + "packages": [ + { + "name": "catfan/medoo", + "version": "v2.1.2", + "source": { + "type": "git", + "url": "https://github.com/catfan/Medoo.git", + "reference": "96c66aee57c0840b560f5c2546df5a5f25534045" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/catfan/Medoo/zipball/96c66aee57c0840b560f5c2546df5a5f25534045", + "reference": "96c66aee57c0840b560f5c2546df5a5f25534045", + "shasum": "" + }, + "require": { + "ext-pdo": "*", + "php": ">=7.3" + }, + "require-dev": { + "phpunit/phpunit": "^9.0" + }, + "suggest": { + "ext-pdo_dblib": "For MSSQL or Sybase database on Linux/UNIX platform", + "ext-pdo_mysql": "For MySQL or MariaDB database", + "ext-pdo_oci": "For Oracle database", + "ext-pdo_pqsql": "For PostgreSQL database", + "ext-pdo_sqlite": "For SQLite database", + "ext-pdo_sqlsrv": "For MSSQL database on both Window/Liunx platform" + }, + "type": "framework", + "autoload": { + "psr-4": { + "Medoo\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Angel Lai", + "email": "angel@medoo.in" + } + ], + "description": "The lightweight PHP database framework to accelerate development", + "homepage": "https://medoo.in", + "keywords": [ + "database", + "database library", + "lightweight", + "mariadb", + "mssql", + "mysql", + "oracle", + "php framework", + "postgresql", + "sql", + "sqlite" + ], + "support": { + "issues": "https://github.com/catfan/Medoo/issues", + "source": "https://github.com/catfan/Medoo" + }, + "funding": [ + { + "url": "https://opencollective.com/medoo", + "type": "open_collective" + } + ], + "time": "2021-07-27T11:03:44+00:00" + }, + { + "name": "guzzlehttp/guzzle", + "version": "7.3.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/guzzle.git", + "reference": "7008573787b430c1c1f650e3722d9bba59967628" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/guzzle/zipball/7008573787b430c1c1f650e3722d9bba59967628", + "reference": "7008573787b430c1c1f650e3722d9bba59967628", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/promises": "^1.4", + "guzzlehttp/psr7": "^1.7 || ^2.0", + "php": "^7.2.5 || ^8.0", + "psr/http-client": "^1.0" + }, + "provide": { + "psr/http-client-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "ext-curl": "*", + "php-http/client-integration-tests": "^3.0", + "phpunit/phpunit": "^8.5.5 || ^9.3.5", + "psr/log": "^1.1" + }, + "suggest": { + "ext-curl": "Required for CURL handler support", + "ext-intl": "Required for Internationalized Domain Name (IDN) support", + "psr/log": "Required for using the Log middleware" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "7.3-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "Guzzle is a PHP HTTP client library", + "homepage": "http://guzzlephp.org/", + "keywords": [ + "client", + "curl", + "framework", + "http", + "http client", + "psr-18", + "psr-7", + "rest", + "web service" + ], + "support": { + "issues": "https://github.com/guzzle/guzzle/issues", + "source": "https://github.com/guzzle/guzzle/tree/7.3.0" + }, + "funding": [ + { + "url": "https://github.com/GrahamCampbell", + "type": "github" + }, + { + "url": "https://github.com/Nyholm", + "type": "github" + }, + { + "url": "https://github.com/alexeyshockov", + "type": "github" + }, + { + "url": "https://github.com/gmponos", + "type": "github" + } + ], + "time": "2021-03-23T11:33:13+00:00" + }, + { + "name": "guzzlehttp/promises", + "version": "1.4.1", + "source": { + "type": "git", + "url": "https://github.com/guzzle/promises.git", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/promises/zipball/8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "reference": "8e7d04f1f6450fef59366c399cfad4b9383aa30d", + "shasum": "" + }, + "require": { + "php": ">=5.5" + }, + "require-dev": { + "symfony/phpunit-bridge": "^4.4 || ^5.1" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.4-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Promise\\": "src/" + }, + "files": [ + "src/functions_include.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + } + ], + "description": "Guzzle promises library", + "keywords": [ + "promise" + ], + "support": { + "issues": "https://github.com/guzzle/promises/issues", + "source": "https://github.com/guzzle/promises/tree/1.4.1" + }, + "time": "2021-03-07T09:25:29+00:00" + }, + { + "name": "guzzlehttp/psr7", + "version": "2.0.0", + "source": { + "type": "git", + "url": "https://github.com/guzzle/psr7.git", + "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/guzzle/psr7/zipball/1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", + "reference": "1dc8d9cba3897165e16d12bb13d813afb1eb3fe7", + "shasum": "" + }, + "require": { + "php": "^7.2.5 || ^8.0", + "psr/http-factory": "^1.0", + "psr/http-message": "^1.0", + "ralouphie/getallheaders": "^3.0" + }, + "provide": { + "psr/http-factory-implementation": "1.0", + "psr/http-message-implementation": "1.0" + }, + "require-dev": { + "bamarni/composer-bin-plugin": "^1.4.1", + "http-interop/http-factory-tests": "^0.9", + "phpunit/phpunit": "^8.5.8 || ^9.3.10" + }, + "suggest": { + "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.0-dev" + } + }, + "autoload": { + "psr-4": { + "GuzzleHttp\\Psr7\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Michael Dowling", + "email": "mtdowling@gmail.com", + "homepage": "https://github.com/mtdowling" + }, + { + "name": "Tobias Schultze", + "homepage": "https://github.com/Tobion" + }, + { + "name": "Márk Sági-Kazár", + "email": "mark.sagikazar@gmail.com", + "homepage": "https://sagikazarmark.hu" + } + ], + "description": "PSR-7 message implementation that also provides common utility methods", + "keywords": [ + "http", + "message", + "psr-7", + "request", + "response", + "stream", + "uri", + "url" + ], + "support": { + "issues": "https://github.com/guzzle/psr7/issues", + "source": "https://github.com/guzzle/psr7/tree/2.0.0" + }, + "time": "2021-06-30T20:03:07+00:00" + }, + { + "name": "psr/http-client", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-client.git", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-client/zipball/2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "reference": "2dfb5f6c5eff0e91e20e913f8c5452ed95b86621", + "shasum": "" + }, + "require": { + "php": "^7.0 || ^8.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Client\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP clients", + "homepage": "https://github.com/php-fig/http-client", + "keywords": [ + "http", + "http-client", + "psr", + "psr-18" + ], + "support": { + "source": "https://github.com/php-fig/http-client/tree/master" + }, + "time": "2020-06-29T06:28:15+00:00" + }, + { + "name": "psr/http-factory", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-factory.git", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-factory/zipball/12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "reference": "12ac7fcd07e5b077433f5f2bee95b3a771bf61be", + "shasum": "" + }, + "require": { + "php": ">=7.0.0", + "psr/http-message": "^1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interfaces for PSR-7 HTTP message factories", + "keywords": [ + "factory", + "http", + "message", + "psr", + "psr-17", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-factory/tree/master" + }, + "time": "2019-04-30T12:38:16+00:00" + }, + { + "name": "psr/http-message", + "version": "1.0.1", + "source": { + "type": "git", + "url": "https://github.com/php-fig/http-message.git", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", + "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", + "shasum": "" + }, + "require": { + "php": ">=5.3.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0.x-dev" + } + }, + "autoload": { + "psr-4": { + "Psr\\Http\\Message\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "PHP-FIG", + "homepage": "http://www.php-fig.org/" + } + ], + "description": "Common interface for HTTP messages", + "homepage": "https://github.com/php-fig/http-message", + "keywords": [ + "http", + "http-message", + "psr", + "psr-7", + "request", + "response" + ], + "support": { + "source": "https://github.com/php-fig/http-message/tree/master" + }, + "time": "2016-08-06T14:39:51+00:00" + }, + { + "name": "ralouphie/getallheaders", + "version": "3.0.3", + "source": { + "type": "git", + "url": "https://github.com/ralouphie/getallheaders.git", + "reference": "120b605dfeb996808c31b6477290a714d356e822" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822", + "reference": "120b605dfeb996808c31b6477290a714d356e822", + "shasum": "" + }, + "require": { + "php": ">=5.6" + }, + "require-dev": { + "php-coveralls/php-coveralls": "^2.1", + "phpunit/phpunit": "^5 || ^6.5" + }, + "type": "library", + "autoload": { + "files": [ + "src/getallheaders.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ralph Khattar", + "email": "ralph.khattar@gmail.com" + } + ], + "description": "A polyfill for getallheaders.", + "support": { + "issues": "https://github.com/ralouphie/getallheaders/issues", + "source": "https://github.com/ralouphie/getallheaders/tree/develop" + }, + "time": "2019-03-08T08:55:37+00:00" + } + ], + "packages-dev": [], + "aliases": [], + "minimum-stability": "dev", + "stability-flags": [], + "prefer-stable": true, + "prefer-lowest": false, + "platform": { + "php": "^7.4|^8.0" + }, + "platform-dev": [], + "plugin-api-version": "2.1.0" +} diff --git a/database/migrations/2021_07_10_000000_001_create_providers_table.php b/database/migrations/2021_07_10_000000_001_create_providers_table.php new file mode 100644 index 0000000..211fc37 --- /dev/null +++ b/database/migrations/2021_07_10_000000_001_create_providers_table.php @@ -0,0 +1,28 @@ +create( Provider::TABLE_NAME, [ + 'id' => [ 'BIGINT(20)', 'UNSIGNED', 'NOT NULL', 'AUTO_INCREMENT', ], + 'site_title' => [ 'VARCHAR(255)', 'NOT NULL', ], + 'endpoint' => [ 'VARCHAR(255)', 'NOT NULL', ], + 'api_key' => [ 'VARCHAR(255)', 'NOT NULL', ], + 'api_secret' => [ 'VARCHAR(255)', 'NOT NULL', ], + 'PRIMARY KEY ()', + ], [ + 'ENGINE' => 'InnoDB', + 'DEFAULT CHARACTER SET' => DB::wpdb()->charset, + 'COLLATE' => DB::wpdb()->collate, + ] ); + } + + public static function down() { + DB::db()->drop( Provider::TABLE_NAME ); + } +} \ No newline at end of file diff --git a/database/migrations/2021_07_10_000001_001_create_licenses_table.php b/database/migrations/2021_07_10_000001_001_create_licenses_table.php new file mode 100644 index 0000000..fb10397 --- /dev/null +++ b/database/migrations/2021_07_10_000001_001_create_licenses_table.php @@ -0,0 +1,27 @@ +create( License::TABLE_NAME, [ + 'id' => [ 'BIGINT(20)', 'UNSIGNED', 'NOT NULL', 'AUTO_INCREMENT', ], + 'provider_id' => [ 'BIGINT(20)', 'UNSIGNED', 'NOT NULL', ], + 'license' => [ 'VARCHAR(255)', 'NOT NULL', ], + 'hash' => [ 'VARCHAR(255)', 'NOT NULL', ], + 'PRIMARY KEY ()', + ], [ + 'ENGINE' => 'InnoDB', + 'DEFAULT CHARACTER SET' => DB::wpdb()->charset, + 'COLLATE' => DB::wpdb()->collate, + ] ); + } + + public static function down() { + DB::db()->drop( License::TABLE_NAME ); + } +} \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..c9660a7 --- /dev/null +++ b/package.json @@ -0,0 +1,36 @@ +{ + "name": "asura-connector", + "version": "0.1.0", + "private": true, + "scripts": { + "development": "mix", + "watch": "mix watch", + "watch-poll": "mix watch -- --watch-options-poll=1000", + "hot": "mix watch --hot", + "production": "mix --production" + }, + "author": "oxyrealm ", + "license": "ISC", + "devDependencies": { + "@tailwindcss/aspect-ratio": "^0.2.1", + "@tailwindcss/forms": "^0.3.3", + "@tailwindcss/typography": "^0.4.1", + "@vue/compiler-sfc": "^3.2.11", + "autoprefixer": "^10.3.4", + "axios": "^0.21.4", + "cross-env": "^7.0.3", + "laravel-mix": "^6.0.31", + "lodash": "^4.17.21", + "postcss": "^8.3.6", + "resolve-url-loader": "4.0.0", + "sass": "^1.41.1", + "sass-loader": "^12.1.0", + "tailwindcss": "^2.2.15", + "vue": "^3.2.11", + "vue-loader": "^16.5.0", + "vue-router": "^4.0.11" + }, + "dependencies": { + "vue-toastification": "^2.0.0-rc.1" + } +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..7332721 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,6189 @@ +lockfileVersion: 5.3 + +specifiers: + '@tailwindcss/aspect-ratio': ^0.2.1 + '@tailwindcss/forms': ^0.3.3 + '@tailwindcss/typography': ^0.4.1 + '@vue/compiler-sfc': ^3.2.11 + autoprefixer: ^10.3.4 + axios: ^0.21.4 + cross-env: ^7.0.3 + laravel-mix: ^6.0.31 + lodash: ^4.17.21 + postcss: ^8.3.6 + resolve-url-loader: 4.0.0 + sass: ^1.41.1 + sass-loader: ^12.1.0 + tailwindcss: ^2.2.15 + vue: ^3.2.11 + vue-loader: ^16.5.0 + vue-router: ^4.0.11 + vue-toastification: ^2.0.0-rc.1 + +dependencies: + vue-toastification: 2.0.0-rc.1_vue@3.2.11 + +devDependencies: + '@tailwindcss/aspect-ratio': 0.2.1_tailwindcss@2.2.15 + '@tailwindcss/forms': 0.3.3_tailwindcss@2.2.15 + '@tailwindcss/typography': 0.4.1_tailwindcss@2.2.15 + '@vue/compiler-sfc': 3.2.11 + autoprefixer: 10.3.4_postcss@8.3.6 + axios: 0.21.4 + cross-env: 7.0.3 + laravel-mix: 6.0.31_postcss@8.3.6 + lodash: 4.17.21 + postcss: 8.3.6 + resolve-url-loader: 4.0.0 + sass: 1.41.1 + sass-loader: 12.1.0_sass@1.41.1 + tailwindcss: 2.2.15_4dc2d3db2b138fb8fa7d5c7b0c803aba + vue: 3.2.11 + vue-loader: 16.5.0_@vue+compiler-sfc@3.2.11 + vue-router: 4.0.11_vue@3.2.11 + +packages: + + /@babel/code-frame/7.14.5: + resolution: {integrity: sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.14.5 + dev: true + + /@babel/compat-data/7.15.0: + resolution: {integrity: sha512-0NqAC1IJE0S0+lL1SWFMxMkz1pKCNCjI4tr2Zx4LJSXxCLAdr6KyArnY+sno5m3yH9g737ygOyPABDsnXkpxiA==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/core/7.15.5: + resolution: {integrity: sha512-pYgXxiwAgQpgM1bNkZsDEq85f0ggXMA5L7c+o3tskGMh2BunCI9QUwB9Z4jpvXUOuMdyGKiGKQiRe11VS6Jzvg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.14.5 + '@babel/generator': 7.15.4 + '@babel/helper-compilation-targets': 7.15.4_@babel+core@7.15.5 + '@babel/helper-module-transforms': 7.15.4 + '@babel/helpers': 7.15.4 + '@babel/parser': 7.15.6 + '@babel/template': 7.15.4 + '@babel/traverse': 7.15.4 + '@babel/types': 7.15.6 + convert-source-map: 1.8.0 + debug: 4.3.2 + gensync: 1.0.0-beta.2 + json5: 2.2.0 + semver: 6.3.0 + source-map: 0.5.7 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/generator/7.15.4: + resolution: {integrity: sha512-d3itta0tu+UayjEORPNz6e1T3FtvWlP5N4V5M+lhp/CxT4oAA7/NcScnpRyspUMLK6tu9MNHmQHxRykuN2R7hw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.15.6 + jsesc: 2.5.2 + source-map: 0.5.7 + dev: true + + /@babel/helper-annotate-as-pure/7.15.4: + resolution: {integrity: sha512-QwrtdNvUNsPCj2lfNQacsGSQvGX8ee1ttrBrcozUP2Sv/jylewBP/8QFe6ZkBsC8T/GYWonNAWJV4aRR9AL2DA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.15.6 + dev: true + + /@babel/helper-builder-binary-assignment-operator-visitor/7.15.4: + resolution: {integrity: sha512-P8o7JP2Mzi0SdC6eWr1zF+AEYvrsZa7GSY1lTayjF5XJhVH0kjLYUZPvTMflP7tBgZoe9gIhTa60QwFpqh/E0Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-explode-assignable-expression': 7.15.4 + '@babel/types': 7.15.6 + dev: true + + /@babel/helper-compilation-targets/7.15.4_@babel+core@7.15.5: + resolution: {integrity: sha512-rMWPCirulnPSe4d+gwdWXLfAXTTBj8M3guAf5xFQJ0nvFY7tfNAFnWdqaHegHlgDZOCT4qvhF3BYlSJag8yhqQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.15.0 + '@babel/core': 7.15.5 + '@babel/helper-validator-option': 7.14.5 + browserslist: 4.17.0 + semver: 6.3.0 + dev: true + + /@babel/helper-create-class-features-plugin/7.15.4_@babel+core@7.15.5: + resolution: {integrity: sha512-7ZmzFi+DwJx6A7mHRwbuucEYpyBwmh2Ca0RvI6z2+WLZYCqV0JOaLb+u0zbtmDicebgKBZgqbYfLaKNqSgv5Pw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-annotate-as-pure': 7.15.4 + '@babel/helper-function-name': 7.15.4 + '@babel/helper-member-expression-to-functions': 7.15.4 + '@babel/helper-optimise-call-expression': 7.15.4 + '@babel/helper-replace-supers': 7.15.4 + '@babel/helper-split-export-declaration': 7.15.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-create-regexp-features-plugin/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-annotate-as-pure': 7.15.4 + regexpu-core: 4.8.0 + dev: true + + /@babel/helper-define-polyfill-provider/0.2.3_@babel+core@7.15.5: + resolution: {integrity: sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==} + peerDependencies: + '@babel/core': ^7.4.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-compilation-targets': 7.15.4_@babel+core@7.15.5 + '@babel/helper-module-imports': 7.15.4 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/traverse': 7.15.4 + debug: 4.3.2 + lodash.debounce: 4.0.8 + resolve: 1.20.0 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-explode-assignable-expression/7.15.4: + resolution: {integrity: sha512-J14f/vq8+hdC2KoWLIQSsGrC9EFBKE4NFts8pfMpymfApds+fPqR30AOUWc4tyr56h9l/GA1Sxv2q3dLZWbQ/g==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.15.6 + dev: true + + /@babel/helper-function-name/7.15.4: + resolution: {integrity: sha512-Z91cOMM4DseLIGOnog+Z8OI6YseR9bua+HpvLAQ2XayUGU+neTtX+97caALaLdyu53I/fjhbeCnWnRH1O3jFOw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-get-function-arity': 7.15.4 + '@babel/template': 7.15.4 + '@babel/types': 7.15.6 + dev: true + + /@babel/helper-get-function-arity/7.15.4: + resolution: {integrity: sha512-1/AlxSF92CmGZzHnC515hm4SirTxtpDnLEJ0UyEMgTMZN+6bxXKg04dKhiRx5Enel+SUA1G1t5Ed/yQia0efrA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.15.6 + dev: true + + /@babel/helper-hoist-variables/7.15.4: + resolution: {integrity: sha512-VTy085egb3jUGVK9ycIxQiPbquesq0HUQ+tPO0uv5mPEBZipk+5FkRKiWq5apuyTE9FUrjENB0rCf8y+n+UuhA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.15.6 + dev: true + + /@babel/helper-member-expression-to-functions/7.15.4: + resolution: {integrity: sha512-cokOMkxC/BTyNP1AlY25HuBWM32iCEsLPI4BHDpJCHHm1FU2E7dKWWIXJgQgSFiu4lp8q3bL1BIKwqkSUviqtA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.15.6 + dev: true + + /@babel/helper-module-imports/7.15.4: + resolution: {integrity: sha512-jeAHZbzUwdW/xHgHQ3QmWR4Jg6j15q4w/gCfwZvtqOxoo5DKtLHk8Bsf4c5RZRC7NmLEs+ohkdq8jFefuvIxAA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.15.6 + dev: true + + /@babel/helper-module-transforms/7.15.4: + resolution: {integrity: sha512-9fHHSGE9zTC++KuXLZcB5FKgvlV83Ox+NLUmQTawovwlJ85+QMhk1CnVk406CQVj97LaWod6KVjl2Sfgw9Aktw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-module-imports': 7.15.4 + '@babel/helper-replace-supers': 7.15.4 + '@babel/helper-simple-access': 7.15.4 + '@babel/helper-split-export-declaration': 7.15.4 + '@babel/helper-validator-identifier': 7.14.9 + '@babel/template': 7.15.4 + '@babel/traverse': 7.15.4 + '@babel/types': 7.15.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-optimise-call-expression/7.15.4: + resolution: {integrity: sha512-E/z9rfbAOt1vDW1DR7k4SzhzotVV5+qMciWV6LaG1g4jeFrkDlJedjtV4h0i4Q/ITnUu+Pk08M7fczsB9GXBDw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.15.6 + dev: true + + /@babel/helper-plugin-utils/7.14.5: + resolution: {integrity: sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-remap-async-to-generator/7.15.4: + resolution: {integrity: sha512-v53MxgvMK/HCwckJ1bZrq6dNKlmwlyRNYM6ypaRTdXWGOE2c1/SCa6dL/HimhPulGhZKw9W0QhREM583F/t0vQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-annotate-as-pure': 7.15.4 + '@babel/helper-wrap-function': 7.15.4 + '@babel/types': 7.15.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-replace-supers/7.15.4: + resolution: {integrity: sha512-/ztT6khaXF37MS47fufrKvIsiQkx1LBRvSJNzRqmbyeZnTwU9qBxXYLaaT/6KaxfKhjs2Wy8kG8ZdsFUuWBjzw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-member-expression-to-functions': 7.15.4 + '@babel/helper-optimise-call-expression': 7.15.4 + '@babel/traverse': 7.15.4 + '@babel/types': 7.15.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helper-simple-access/7.15.4: + resolution: {integrity: sha512-UzazrDoIVOZZcTeHHEPYrr1MvTR/K+wgLg6MY6e1CJyaRhbibftF6fR2KU2sFRtI/nERUZR9fBd6aKgBlIBaPg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.15.6 + dev: true + + /@babel/helper-skip-transparent-expression-wrappers/7.15.4: + resolution: {integrity: sha512-BMRLsdh+D1/aap19TycS4eD1qELGrCBJwzaY9IE8LrpJtJb+H7rQkPIdsfgnMtLBA6DJls7X9z93Z4U8h7xw0A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.15.6 + dev: true + + /@babel/helper-split-export-declaration/7.15.4: + resolution: {integrity: sha512-HsFqhLDZ08DxCpBdEVtKmywj6PQbwnF6HHybur0MAnkAKnlS6uHkwnmRIkElB2Owpfb4xL4NwDmDLFubueDXsw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.15.6 + dev: true + + /@babel/helper-validator-identifier/7.14.9: + resolution: {integrity: sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-validator-option/7.14.5: + resolution: {integrity: sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==} + engines: {node: '>=6.9.0'} + dev: true + + /@babel/helper-wrap-function/7.15.4: + resolution: {integrity: sha512-Y2o+H/hRV5W8QhIfTpRIBwl57y8PrZt6JM3V8FOo5qarjshHItyH5lXlpMfBfmBefOqSCpKZs/6Dxqp0E/U+uw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.15.4 + '@babel/template': 7.15.4 + '@babel/traverse': 7.15.4 + '@babel/types': 7.15.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/helpers/7.15.4: + resolution: {integrity: sha512-V45u6dqEJ3w2rlryYYXf6i9rQ5YMNu4FLS6ngs8ikblhu2VdR1AqAd6aJjBzmf2Qzh6KOLqKHxEN9+TFbAkAVQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.15.4 + '@babel/traverse': 7.15.4 + '@babel/types': 7.15.6 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/highlight/7.14.5: + resolution: {integrity: sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.14.9 + chalk: 2.4.2 + js-tokens: 4.0.0 + dev: true + + /@babel/parser/7.15.6: + resolution: {integrity: sha512-S/TSCcsRuCkmpUuoWijua0Snt+f3ewU/8spLo+4AXJCZfT0bVCzLD5MuOKdrx0mlAptbKzn5AdgEIIKXxXkz9Q==} + engines: {node: '>=6.0.0'} + hasBin: true + dev: true + + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/7.15.4_@babel+core@7.15.5: + resolution: {integrity: sha512-eBnpsl9tlhPhpI10kU06JHnrYXwg3+V6CaP2idsCXNef0aeslpqyITXQ74Vfk5uHgY7IG7XP0yIH8b42KSzHog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.15.4 + '@babel/plugin-proposal-optional-chaining': 7.14.5_@babel+core@7.15.5 + dev: true + + /@babel/plugin-proposal-async-generator-functions/7.15.4_@babel+core@7.15.5: + resolution: {integrity: sha512-2zt2g5vTXpMC3OmK6uyjvdXptbhBXfA77XGrd3gh93zwG8lZYBLOBImiGBEG0RANu3JqKEACCz5CGk73OJROBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-remap-async-to-generator': 7.15.4 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.15.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-class-properties/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-create-class-features-plugin': 7.15.4_@babel+core@7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-class-static-block/7.15.4_@babel+core@7.15.5: + resolution: {integrity: sha512-M682XWrrLNk3chXCjoPUQWOyYsB93B9z3mRyjtqqYJWDf2mfCdIYgDrA11cgNVhAQieaq6F2fn2f3wI0U4aTjA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-create-class-features-plugin': 7.15.4_@babel+core@7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.15.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-dynamic-import/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.15.5 + dev: true + + /@babel/plugin-proposal-export-namespace-from/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.15.5 + dev: true + + /@babel/plugin-proposal-json-strings/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.15.5 + dev: true + + /@babel/plugin-proposal-logical-assignment-operators/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.15.5 + dev: true + + /@babel/plugin-proposal-nullish-coalescing-operator/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.15.5 + dev: true + + /@babel/plugin-proposal-numeric-separator/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.15.5 + dev: true + + /@babel/plugin-proposal-object-rest-spread/7.15.6_@babel+core@7.15.5: + resolution: {integrity: sha512-qtOHo7A1Vt+O23qEAX+GdBpqaIuD3i9VRrWgCJeq7WO6H2d14EK3q11urj5Te2MAeK97nMiIdRpwd/ST4JFbNg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.15.0 + '@babel/core': 7.15.5 + '@babel/helper-compilation-targets': 7.15.4_@babel+core@7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.15.5 + '@babel/plugin-transform-parameters': 7.15.4_@babel+core@7.15.5 + dev: true + + /@babel/plugin-proposal-optional-catch-binding/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.15.5 + dev: true + + /@babel/plugin-proposal-optional-chaining/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.15.4 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.15.5 + dev: true + + /@babel/plugin-proposal-private-methods/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-create-class-features-plugin': 7.15.4_@babel+core@7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-private-property-in-object/7.15.4_@babel+core@7.15.5: + resolution: {integrity: sha512-X0UTixkLf0PCCffxgu5/1RQyGGbgZuKoI+vXP4iSbJSYwPb7hu06omsFGBvQ9lJEvwgrxHdS8B5nbfcd8GyUNA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-annotate-as-pure': 7.15.4 + '@babel/helper-create-class-features-plugin': 7.15.4_@babel+core@7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.15.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-proposal-unicode-property-regex/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==} + engines: {node: '>=4'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-create-regexp-features-plugin': 7.14.5_@babel+core@7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-async-generators/7.8.4_@babel+core@7.15.5: + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-class-properties/7.12.13_@babel+core@7.15.5: + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-class-static-block/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-dynamic-import/7.8.3_@babel+core@7.15.5: + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-export-namespace-from/7.8.3_@babel+core@7.15.5: + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-json-strings/7.8.3_@babel+core@7.15.5: + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-logical-assignment-operators/7.10.4_@babel+core@7.15.5: + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-nullish-coalescing-operator/7.8.3_@babel+core@7.15.5: + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-numeric-separator/7.10.4_@babel+core@7.15.5: + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-object-rest-spread/7.8.3_@babel+core@7.15.5: + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-optional-catch-binding/7.8.3_@babel+core@7.15.5: + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-optional-chaining/7.8.3_@babel+core@7.15.5: + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-private-property-in-object/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-syntax-top-level-await/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-arrow-functions/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-async-to-generator/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-module-imports': 7.15.4 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-remap-async-to-generator': 7.15.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-block-scoped-functions/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-block-scoping/7.15.3_@babel+core@7.15.5: + resolution: {integrity: sha512-nBAzfZwZb4DkaGtOes1Up1nOAp9TDRRFw4XBzBBSG9QK7KVFmYzgj9o9sbPv7TX5ofL4Auq4wZnxCoPnI/lz2Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-classes/7.15.4_@babel+core@7.15.5: + resolution: {integrity: sha512-Yjvhex8GzBmmPQUvpXRPWQ9WnxXgAFuZSrqOK/eJlOGIXwvv8H3UEdUigl1gb/bnjTrln+e8bkZUYCBt/xYlBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-annotate-as-pure': 7.15.4 + '@babel/helper-function-name': 7.15.4 + '@babel/helper-optimise-call-expression': 7.15.4 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-replace-supers': 7.15.4 + '@babel/helper-split-export-declaration': 7.15.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-computed-properties/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-destructuring/7.14.7_@babel+core@7.15.5: + resolution: {integrity: sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-dotall-regex/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-create-regexp-features-plugin': 7.14.5_@babel+core@7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-duplicate-keys/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-exponentiation-operator/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.15.4 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-for-of/7.15.4_@babel+core@7.15.5: + resolution: {integrity: sha512-DRTY9fA751AFBDh2oxydvVm4SYevs5ILTWLs6xKXps4Re/KG5nfUkr+TdHCrRWB8C69TlzVgA9b3RmGWmgN9LA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-function-name/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-function-name': 7.15.4 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-literals/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-member-expression-literals/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-modules-amd/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-module-transforms': 7.15.4 + '@babel/helper-plugin-utils': 7.14.5 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-commonjs/7.15.4_@babel+core@7.15.5: + resolution: {integrity: sha512-qg4DPhwG8hKp4BbVDvX1s8cohM8a6Bvptu4l6Iingq5rW+yRUAhe/YRup/YcW2zCOlrysEWVhftIcKzrEZv3sA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-module-transforms': 7.15.4 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-simple-access': 7.15.4 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-systemjs/7.15.4_@babel+core@7.15.5: + resolution: {integrity: sha512-fJUnlQrl/mezMneR72CKCgtOoahqGJNVKpompKwzv3BrEXdlPspTcyxrZ1XmDTIr9PpULrgEQo3qNKp6dW7ssw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-hoist-variables': 7.15.4 + '@babel/helper-module-transforms': 7.15.4 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-validator-identifier': 7.14.9 + babel-plugin-dynamic-import-node: 2.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-modules-umd/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-module-transforms': 7.15.4 + '@babel/helper-plugin-utils': 7.14.5 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-named-capturing-groups-regex/7.14.9_@babel+core@7.15.5: + resolution: {integrity: sha512-l666wCVYO75mlAtGFfyFwnWmIXQm3kSH0C3IRnJqWcZbWkoihyAdDhFm2ZWaxWTqvBvhVFfJjMRQ0ez4oN1yYA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-create-regexp-features-plugin': 7.14.5_@babel+core@7.15.5 + dev: true + + /@babel/plugin-transform-new-target/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-object-super/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-replace-supers': 7.15.4 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-parameters/7.15.4_@babel+core@7.15.5: + resolution: {integrity: sha512-9WB/GUTO6lvJU3XQsSr6J/WKvBC2hcs4Pew8YxZagi6GkTdniyqp8On5kqdK8MN0LMeu0mGbhPN+O049NV/9FQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-property-literals/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-regenerator/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + regenerator-transform: 0.14.5 + dev: true + + /@babel/plugin-transform-reserved-words/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-runtime/7.15.0_@babel+core@7.15.5: + resolution: {integrity: sha512-sfHYkLGjhzWTq6xsuQ01oEsUYjkHRux9fW1iUA68dC7Qd8BS1Unq4aZ8itmQp95zUzIcyR2EbNMTzAicFj+guw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-module-imports': 7.15.4 + '@babel/helper-plugin-utils': 7.14.5 + babel-plugin-polyfill-corejs2: 0.2.2_@babel+core@7.15.5 + babel-plugin-polyfill-corejs3: 0.2.4_@babel+core@7.15.5 + babel-plugin-polyfill-regenerator: 0.2.2_@babel+core@7.15.5 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/plugin-transform-shorthand-properties/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-spread/7.14.6_@babel+core@7.15.5: + resolution: {integrity: sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.15.4 + dev: true + + /@babel/plugin-transform-sticky-regex/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-template-literals/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-typeof-symbol/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-unicode-escapes/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/plugin-transform-unicode-regex/7.14.5_@babel+core@7.15.5: + resolution: {integrity: sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-create-regexp-features-plugin': 7.14.5_@babel+core@7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + dev: true + + /@babel/preset-env/7.15.6_@babel+core@7.15.5: + resolution: {integrity: sha512-L+6jcGn7EWu7zqaO2uoTDjjMBW+88FXzV8KvrBl2z6MtRNxlsmUNRlZPaNNPUTgqhyC5DHNFk/2Jmra+ublZWw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.15.0 + '@babel/core': 7.15.5 + '@babel/helper-compilation-targets': 7.15.4_@babel+core@7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/helper-validator-option': 7.14.5 + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.15.4_@babel+core@7.15.5 + '@babel/plugin-proposal-async-generator-functions': 7.15.4_@babel+core@7.15.5 + '@babel/plugin-proposal-class-properties': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-proposal-class-static-block': 7.15.4_@babel+core@7.15.5 + '@babel/plugin-proposal-dynamic-import': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-proposal-export-namespace-from': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-proposal-json-strings': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-proposal-logical-assignment-operators': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-proposal-nullish-coalescing-operator': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-proposal-numeric-separator': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-proposal-object-rest-spread': 7.15.6_@babel+core@7.15.5 + '@babel/plugin-proposal-optional-catch-binding': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-proposal-optional-chaining': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-proposal-private-methods': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-proposal-private-property-in-object': 7.15.4_@babel+core@7.15.5 + '@babel/plugin-proposal-unicode-property-regex': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-syntax-async-generators': 7.8.4_@babel+core@7.15.5 + '@babel/plugin-syntax-class-properties': 7.12.13_@babel+core@7.15.5 + '@babel/plugin-syntax-class-static-block': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.15.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3_@babel+core@7.15.5 + '@babel/plugin-syntax-json-strings': 7.8.3_@babel+core@7.15.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4_@babel+core@7.15.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3_@babel+core@7.15.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4_@babel+core@7.15.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3_@babel+core@7.15.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3_@babel+core@7.15.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3_@babel+core@7.15.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-syntax-top-level-await': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-arrow-functions': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-async-to-generator': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-block-scoped-functions': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-block-scoping': 7.15.3_@babel+core@7.15.5 + '@babel/plugin-transform-classes': 7.15.4_@babel+core@7.15.5 + '@babel/plugin-transform-computed-properties': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-destructuring': 7.14.7_@babel+core@7.15.5 + '@babel/plugin-transform-dotall-regex': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-duplicate-keys': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-exponentiation-operator': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-for-of': 7.15.4_@babel+core@7.15.5 + '@babel/plugin-transform-function-name': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-literals': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-member-expression-literals': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-modules-amd': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-modules-commonjs': 7.15.4_@babel+core@7.15.5 + '@babel/plugin-transform-modules-systemjs': 7.15.4_@babel+core@7.15.5 + '@babel/plugin-transform-modules-umd': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-named-capturing-groups-regex': 7.14.9_@babel+core@7.15.5 + '@babel/plugin-transform-new-target': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-object-super': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-parameters': 7.15.4_@babel+core@7.15.5 + '@babel/plugin-transform-property-literals': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-regenerator': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-reserved-words': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-shorthand-properties': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-spread': 7.14.6_@babel+core@7.15.5 + '@babel/plugin-transform-sticky-regex': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-template-literals': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-typeof-symbol': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-unicode-escapes': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-unicode-regex': 7.14.5_@babel+core@7.15.5 + '@babel/preset-modules': 0.1.4_@babel+core@7.15.5 + '@babel/types': 7.15.6 + babel-plugin-polyfill-corejs2: 0.2.2_@babel+core@7.15.5 + babel-plugin-polyfill-corejs3: 0.2.4_@babel+core@7.15.5 + babel-plugin-polyfill-regenerator: 0.2.2_@babel+core@7.15.5 + core-js-compat: 3.17.3 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/preset-modules/0.1.4_@babel+core@7.15.5: + resolution: {integrity: sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-plugin-utils': 7.14.5 + '@babel/plugin-proposal-unicode-property-regex': 7.14.5_@babel+core@7.15.5 + '@babel/plugin-transform-dotall-regex': 7.14.5_@babel+core@7.15.5 + '@babel/types': 7.15.6 + esutils: 2.0.3 + dev: true + + /@babel/runtime/7.15.4: + resolution: {integrity: sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.13.9 + dev: true + + /@babel/template/7.15.4: + resolution: {integrity: sha512-UgBAfEa1oGuYgDIPM2G+aHa4Nlo9Lh6mGD2bDBGMTbYnc38vulXPuC1MGjYILIEmlwl6Rd+BPR9ee3gm20CBtg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.14.5 + '@babel/parser': 7.15.6 + '@babel/types': 7.15.6 + dev: true + + /@babel/traverse/7.15.4: + resolution: {integrity: sha512-W6lQD8l4rUbQR/vYgSuCAE75ADyyQvOpFVsvPPdkhf6lATXAsQIG9YdtOcu8BB1dZ0LKu+Zo3c1wEcbKeuhdlA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.14.5 + '@babel/generator': 7.15.4 + '@babel/helper-function-name': 7.15.4 + '@babel/helper-hoist-variables': 7.15.4 + '@babel/helper-split-export-declaration': 7.15.4 + '@babel/parser': 7.15.6 + '@babel/types': 7.15.6 + debug: 4.3.2 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + + /@babel/types/7.15.6: + resolution: {integrity: sha512-BPU+7QhqNjmWyDO0/vitH/CuhpV8ZmK1wpKva8nuyNF5MJfuRNWMc+hc14+u9xT93kvykMdncrJT19h74uB1Ig==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.14.9 + to-fast-properties: 2.0.0 + dev: true + + /@discoveryjs/json-ext/0.5.5: + resolution: {integrity: sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==} + engines: {node: '>=10.0.0'} + dev: true + + /@nodelib/fs.scandir/2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + dev: true + + /@nodelib/fs.stat/2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: true + + /@nodelib/fs.walk/1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.13.0 + dev: true + + /@tailwindcss/aspect-ratio/0.2.1_tailwindcss@2.2.15: + resolution: {integrity: sha512-aDFi80aHQ3JM3symJ5iKU70lm151ugIGFCI0yRZGpyjgQSDS+Fbe93QwypC1tCEllQE8p0S7TUu20ih1b9IKLA==} + peerDependencies: + tailwindcss: '>=2.0.0' + dependencies: + tailwindcss: 2.2.15_4dc2d3db2b138fb8fa7d5c7b0c803aba + dev: true + + /@tailwindcss/forms/0.3.3_tailwindcss@2.2.15: + resolution: {integrity: sha512-U8Fi/gq4mSuaLyLtFISwuDYzPB73YzgozjxOIHsK6NXgg/IWD1FLaHbFlWmurAMyy98O+ao74ksdQefsquBV1Q==} + peerDependencies: + tailwindcss: '>=2.0.0' + dependencies: + mini-svg-data-uri: 1.3.3 + tailwindcss: 2.2.15_4dc2d3db2b138fb8fa7d5c7b0c803aba + dev: true + + /@tailwindcss/typography/0.4.1_tailwindcss@2.2.15: + resolution: {integrity: sha512-ovPPLUhs7zAIJfr0y1dbGlyCuPhpuv/jpBoFgqAc658DWGGrOBWBMpAWLw2KlzbNeVk4YBJMzue1ekvIbdw6XA==} + peerDependencies: + tailwindcss: '>=2.0.0' + dependencies: + lodash.castarray: 4.4.0 + lodash.isplainobject: 4.0.6 + lodash.merge: 4.6.2 + lodash.uniq: 4.5.0 + tailwindcss: 2.2.15_4dc2d3db2b138fb8fa7d5c7b0c803aba + dev: true + + /@trysound/sax/0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: true + + /@types/babel__core/7.1.16: + resolution: {integrity: sha512-EAEHtisTMM+KaKwfWdC3oyllIqswlznXCIVCt7/oRNrh+DhgT4UEBNC/jlADNjvw7UnfbcdkGQcPVZ1xYiLcrQ==} + dependencies: + '@babel/parser': 7.15.6 + '@babel/types': 7.15.6 + '@types/babel__generator': 7.6.3 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.14.2 + dev: true + + /@types/babel__generator/7.6.3: + resolution: {integrity: sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==} + dependencies: + '@babel/types': 7.15.6 + dev: true + + /@types/babel__template/7.4.1: + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + dependencies: + '@babel/parser': 7.15.6 + '@babel/types': 7.15.6 + dev: true + + /@types/babel__traverse/7.14.2: + resolution: {integrity: sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==} + dependencies: + '@babel/types': 7.15.6 + dev: true + + /@types/clean-css/4.2.5: + resolution: {integrity: sha512-NEzjkGGpbs9S9fgC4abuBvTpVwE3i+Acu9BBod3PUyjDVZcNsGx61b8r2PphR61QGPnn0JHVs5ey6/I4eTrkxw==} + dependencies: + '@types/node': 16.9.2 + source-map: 0.6.1 + dev: true + + /@types/eslint-scope/3.7.1: + resolution: {integrity: sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==} + dependencies: + '@types/eslint': 7.28.0 + '@types/estree': 0.0.50 + dev: true + + /@types/eslint/7.28.0: + resolution: {integrity: sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==} + dependencies: + '@types/estree': 0.0.50 + '@types/json-schema': 7.0.9 + dev: true + + /@types/estree/0.0.48: + resolution: {integrity: sha512-LfZwXoGUDo0C3me81HXgkBg5CTQYb6xzEl+fNmbO4JdRiSKQ8A0GD1OBBvKAIsbCUgoyAty7m99GqqMQe784ew==} + dev: true + + /@types/estree/0.0.50: + resolution: {integrity: sha512-C6N5s2ZFtuZRj54k2/zyRhNDjJwwcViAM3Nbm8zjBpbqAdZ00mr0CFxvSKeO8Y/e03WVFLpQMdHYVfUd6SB+Hw==} + dev: true + + /@types/glob/7.1.4: + resolution: {integrity: sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==} + dependencies: + '@types/minimatch': 3.0.5 + '@types/node': 16.9.2 + dev: true + + /@types/http-proxy/1.17.7: + resolution: {integrity: sha512-9hdj6iXH64tHSLTY+Vt2eYOGzSogC+JQ2H7bdPWkuh7KXP5qLllWx++t+K9Wk556c3dkDdPws/SpMRi0sdCT1w==} + dependencies: + '@types/node': 16.9.2 + dev: true + + /@types/imagemin-gifsicle/7.0.1: + resolution: {integrity: sha512-kUz6sUh0P95JOS0RGEaaemWUrASuw+dLsWIveK2UZJx74id/B9epgblMkCk/r5MjUWbZ83wFvacG5Rb/f97gyA==} + dependencies: + '@types/imagemin': 7.0.1 + dev: true + + /@types/imagemin-mozjpeg/8.0.1: + resolution: {integrity: sha512-kMQWEoKxxhlnH4POI3qfW9DjXlQfi80ux3l2b3j5R3eudSCoUIzKQLkfMjNJ6eMYnMWBcB+rfQOWqIzdIwFGKw==} + dependencies: + '@types/imagemin': 7.0.1 + dev: true + + /@types/imagemin-optipng/5.2.1: + resolution: {integrity: sha512-XCM/3q+HUL7v4zOqMI+dJ5dTxT+MUukY9KU49DSnYb/4yWtSMHJyADP+WHSMVzTR63J2ZvfUOzSilzBNEQW78g==} + dependencies: + '@types/imagemin': 7.0.1 + dev: true + + /@types/imagemin-svgo/8.0.1: + resolution: {integrity: sha512-YafkdrVAcr38U0Ln1C+L1n4SIZqC47VBHTyxCq7gTUSd1R9MdIvMcrljWlgU1M9O68WZDeQWUrKipKYfEOCOvQ==} + dependencies: + '@types/imagemin': 7.0.1 + '@types/svgo': 1.3.6 + dev: true + + /@types/imagemin/7.0.1: + resolution: {integrity: sha512-xEn5+M3lDBtI3JxLy6eU3ksoVurygnlG7OYhTqJfGGP4PcvYnfn+IABCmMve7ziM/SneHDm5xgJFKC8hCYPicw==} + dependencies: + '@types/node': 16.9.2 + dev: true + + /@types/json-schema/7.0.9: + resolution: {integrity: sha512-qcUXuemtEu+E5wZSJHNxUXeCZhAfXKQ41D+duX+VYPde7xyEVZci+/oXKJL13tnRs9lR2pr4fod59GT6/X1/yQ==} + dev: true + + /@types/minimatch/3.0.5: + resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} + dev: true + + /@types/node/16.9.2: + resolution: {integrity: sha512-ZHty/hKoOLZvSz6BtP1g7tc7nUeJhoCf3flLjh8ZEv1vFKBWHXcnMbJMyN/pftSljNyy0kNW/UqI3DccnBnZ8w==} + dev: true + + /@types/parse-json/4.0.0: + resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + dev: true + + /@types/retry/0.12.1: + resolution: {integrity: sha512-xoDlM2S4ortawSWORYqsdU+2rxdh4LRW9ytc3zmT37RIKQh6IHyKwwtKhKis9ah8ol07DCkZxPt8BBvPjC6v4g==} + dev: true + + /@types/svgo/1.3.6: + resolution: {integrity: sha512-AZU7vQcy/4WFEuwnwsNsJnFwupIpbllH1++LXScN6uxT1Z4zPzdrWG97w4/I7eFKFTvfy/bHFStWjdBAg2Vjug==} + dev: true + + /@vue/compiler-core/3.2.11: + resolution: {integrity: sha512-bcbsLx5XyQg8WDDEGwmpX0BfEfv82wIs9fWFelpyVhNRGMaABvUTalYINyfhVT+jOqNaD4JBhJiVKd/8TmsHWg==} + dependencies: + '@babel/parser': 7.15.6 + '@babel/types': 7.15.6 + '@vue/shared': 3.2.11 + estree-walker: 2.0.2 + source-map: 0.6.1 + dev: true + + /@vue/compiler-dom/3.2.11: + resolution: {integrity: sha512-DNvhUHI/1Hn0/+ZYDYGAuDGasUm+XHKC3FE4GqkNCTO/fcLaJMRg/7eT1m1lkc7jPffUwwfh1rZru5mwzOjrNw==} + dependencies: + '@vue/compiler-core': 3.2.11 + '@vue/shared': 3.2.11 + dev: true + + /@vue/compiler-sfc/3.2.11: + resolution: {integrity: sha512-cUIaS8mgJrQ6yucj2AupWAwBRITK3W/a8wCOn9g5fJGtOl8h4APY8vN3lzP8HIJDyEeRF3I8SfRhL+oX97kSnw==} + dependencies: + '@babel/parser': 7.15.6 + '@babel/types': 7.15.6 + '@types/estree': 0.0.48 + '@vue/compiler-core': 3.2.11 + '@vue/compiler-dom': 3.2.11 + '@vue/compiler-ssr': 3.2.11 + '@vue/ref-transform': 3.2.11 + '@vue/shared': 3.2.11 + consolidate: 0.16.0 + estree-walker: 2.0.2 + hash-sum: 2.0.0 + lru-cache: 5.1.1 + magic-string: 0.25.7 + merge-source-map: 1.1.0 + postcss: 8.3.6 + postcss-modules: 4.2.2_postcss@8.3.6 + postcss-selector-parser: 6.0.6 + source-map: 0.6.1 + dev: true + + /@vue/compiler-ssr/3.2.11: + resolution: {integrity: sha512-+ptAdUlFDij+Z0VGCbRRkxQlNev5LkbZAntvkxrFjc08CTMhZmiV4Js48n2hAmuSXaKNEpmGkDGU26c/vf1+xw==} + dependencies: + '@vue/compiler-dom': 3.2.11 + '@vue/shared': 3.2.11 + dev: true + + /@vue/devtools-api/6.0.0-beta.15: + resolution: {integrity: sha512-quBx4Jjpexo6KDiNUGFr/zF/2A4srKM9S9v2uHgMXSU//hjgq1eGzqkIFql8T9gfX5ZaVOUzYBP3jIdIR3PKIA==} + dev: true + + /@vue/reactivity/3.2.11: + resolution: {integrity: sha512-hEQstxPQbgGZq5qApzrvbDmRdK1KP96O/j4XrwT8fVkT1ytkFs4fH2xNEh9QKwXfybbQkLs77W7OfXCv5o6qbA==} + dependencies: + '@vue/shared': 3.2.11 + dev: true + + /@vue/ref-transform/3.2.11: + resolution: {integrity: sha512-7rX0YsfYb7+1PeKPME1tQyUQcQgt0sIXRRnPD1Vw8Zs2KIo90YLy9CrvwalcRCxGw0ScsjBEhVjJtWIT79TElg==} + dependencies: + '@babel/parser': 7.15.6 + '@vue/compiler-core': 3.2.11 + '@vue/shared': 3.2.11 + estree-walker: 2.0.2 + magic-string: 0.25.7 + dev: true + + /@vue/runtime-core/3.2.11: + resolution: {integrity: sha512-horlxjWwSvModC87WdsWswzzHE5IexmKkQA65S5vFgP5hLUBW+HRyScDeuB/RRcFmqnf+ozacNCfap0kqcpODw==} + dependencies: + '@vue/reactivity': 3.2.11 + '@vue/shared': 3.2.11 + dev: true + + /@vue/runtime-dom/3.2.11: + resolution: {integrity: sha512-cOK1g0INdiCbds2xrrJKrrN+pDHuLz6esUs/crdEiupDuX7IeiMbdqrAQCkYHp5P1KLWcbGlkmwfVD7HQGii0Q==} + dependencies: + '@vue/runtime-core': 3.2.11 + '@vue/shared': 3.2.11 + csstype: 2.6.18 + dev: true + + /@vue/shared/3.2.11: + resolution: {integrity: sha512-ovfXAsSsCvV9JVceWjkqC/7OF5HbgLOtCWjCIosmPGG8lxbPuavhIxRH1dTx4Dg9xLgRTNLvI3pVxG4ItQZekg==} + dev: true + + /@webassemblyjs/ast/1.11.1: + resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} + dependencies: + '@webassemblyjs/helper-numbers': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + dev: true + + /@webassemblyjs/floating-point-hex-parser/1.11.1: + resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} + dev: true + + /@webassemblyjs/helper-api-error/1.11.1: + resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} + dev: true + + /@webassemblyjs/helper-buffer/1.11.1: + resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} + dev: true + + /@webassemblyjs/helper-numbers/1.11.1: + resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} + dependencies: + '@webassemblyjs/floating-point-hex-parser': 1.11.1 + '@webassemblyjs/helper-api-error': 1.11.1 + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/helper-wasm-bytecode/1.11.1: + resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} + dev: true + + /@webassemblyjs/helper-wasm-section/1.11.1: + resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + dev: true + + /@webassemblyjs/ieee754/1.11.1: + resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} + dependencies: + '@xtuc/ieee754': 1.2.0 + dev: true + + /@webassemblyjs/leb128/1.11.1: + resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} + dependencies: + '@xtuc/long': 4.2.2 + dev: true + + /@webassemblyjs/utf8/1.11.1: + resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} + dev: true + + /@webassemblyjs/wasm-edit/1.11.1: + resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/helper-wasm-section': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + '@webassemblyjs/wasm-opt': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + '@webassemblyjs/wast-printer': 1.11.1 + dev: true + + /@webassemblyjs/wasm-gen/1.11.1: + resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/ieee754': 1.11.1 + '@webassemblyjs/leb128': 1.11.1 + '@webassemblyjs/utf8': 1.11.1 + dev: true + + /@webassemblyjs/wasm-opt/1.11.1: + resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-buffer': 1.11.1 + '@webassemblyjs/wasm-gen': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + dev: true + + /@webassemblyjs/wasm-parser/1.11.1: + resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/helper-api-error': 1.11.1 + '@webassemblyjs/helper-wasm-bytecode': 1.11.1 + '@webassemblyjs/ieee754': 1.11.1 + '@webassemblyjs/leb128': 1.11.1 + '@webassemblyjs/utf8': 1.11.1 + dev: true + + /@webassemblyjs/wast-printer/1.11.1: + resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} + dependencies: + '@webassemblyjs/ast': 1.11.1 + '@xtuc/long': 4.2.2 + dev: true + + /@webpack-cli/configtest/1.0.4_webpack-cli@4.8.0+webpack@5.53.0: + resolution: {integrity: sha512-cs3XLy+UcxiP6bj0A6u7MLLuwdXJ1c3Dtc0RkKg+wiI1g/Ti1om8+/2hc2A2B60NbBNAbMgyBMHvyymWm/j4wQ==} + peerDependencies: + webpack: 4.x.x || 5.x.x + webpack-cli: 4.x.x + dependencies: + webpack: 5.53.0_webpack-cli@4.8.0 + webpack-cli: 4.8.0_98674a6cb9be10449d20d833653b2ace + dev: true + + /@webpack-cli/info/1.3.0_webpack-cli@4.8.0: + resolution: {integrity: sha512-ASiVB3t9LOKHs5DyVUcxpraBXDOKubYu/ihHhU+t1UPpxsivg6Od2E2qU4gJCekfEddzRBzHhzA/Acyw/mlK/w==} + peerDependencies: + webpack-cli: 4.x.x + dependencies: + envinfo: 7.8.1 + webpack-cli: 4.8.0_98674a6cb9be10449d20d833653b2ace + dev: true + + /@webpack-cli/serve/1.5.2_ff295ad2f9b07cb15ca327fa043b03b7: + resolution: {integrity: sha512-vgJ5OLWadI8aKjDlOH3rb+dYyPd2GTZuQC/Tihjct6F9GpXGZINo3Y/IVuZVTM1eDQB+/AOsjPUWH/WySDaXvw==} + peerDependencies: + webpack-cli: 4.x.x + webpack-dev-server: '*' + peerDependenciesMeta: + webpack-dev-server: + optional: true + dependencies: + webpack-cli: 4.8.0_98674a6cb9be10449d20d833653b2ace + webpack-dev-server: 4.1.1_webpack-cli@4.8.0+webpack@5.53.0 + dev: true + + /@xtuc/ieee754/1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} + dev: true + + /@xtuc/long/4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + dev: true + + /accepts/1.3.7: + resolution: {integrity: sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==} + engines: {node: '>= 0.6'} + dependencies: + mime-types: 2.1.32 + negotiator: 0.6.2 + dev: true + + /acorn-import-assertions/1.7.6_acorn@8.5.0: + resolution: {integrity: sha512-FlVvVFA1TX6l3lp8VjDnYYq7R1nyW6x3svAt4nDgrWQ9SBaSh9CnbwgSUTasgfNfOG5HlM1ehugCvM+hjo56LA==} + peerDependencies: + acorn: ^8 + dependencies: + acorn: 8.5.0 + dev: true + + /acorn-node/1.8.2: + resolution: {integrity: sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==} + dependencies: + acorn: 7.4.1 + acorn-walk: 7.2.0 + xtend: 4.0.2 + dev: true + + /acorn-walk/7.2.0: + resolution: {integrity: sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==} + engines: {node: '>=0.4.0'} + dev: true + + /acorn/7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /acorn/8.5.0: + resolution: {integrity: sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + /adjust-sourcemap-loader/4.0.0: + resolution: {integrity: sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==} + engines: {node: '>=8.9'} + dependencies: + loader-utils: 2.0.0 + regex-parser: 2.2.11 + dev: true + + /aggregate-error/3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + dev: true + + /ajv-keywords/3.5.2_ajv@6.12.6: + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 + dependencies: + ajv: 6.12.6 + dev: true + + /ajv/6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + dev: true + + /alphanum-sort/1.0.2: + resolution: {integrity: sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=} + dev: true + + /ansi-escapes/4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.21.3 + dev: true + + /ansi-html-community/0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + dev: true + + /ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: true + + /ansi-regex/6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: true + + /ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} + engines: {node: '>=4'} + dependencies: + color-convert: 1.9.3 + dev: true + + /ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + dev: true + + /anymatch/3.1.2: + resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + engines: {node: '>= 8'} + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.0 + dev: true + + /arg/5.0.1: + resolution: {integrity: sha512-e0hDa9H2Z9AwFkk2qDlwhoMYE4eToKarchkQHovNdLTCYMHZHeRjI71crOh+dio4K6u1IcwubQqo79Ga4CyAQA==} + dev: true + + /array-flatten/1.1.1: + resolution: {integrity: sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=} + dev: true + + /array-flatten/2.1.2: + resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==} + dev: true + + /array-union/2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /asn1.js/5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + dependencies: + bn.js: 4.12.0 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + dev: true + + /assert/1.5.0: + resolution: {integrity: sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==} + dependencies: + object-assign: 4.1.1 + util: 0.10.3 + dev: true + + /async/2.6.3: + resolution: {integrity: sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==} + dependencies: + lodash: 4.17.21 + dev: true + + /autoprefixer/10.3.4_postcss@8.3.6: + resolution: {integrity: sha512-EKjKDXOq7ug+jagLzmnoTRpTT0q1KVzEJqrJd0hCBa7FiG0WbFOBCcJCy2QkW1OckpO3qgttA1aWjVbeIPAecw==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.17.0 + caniuse-lite: 1.0.30001258 + colorette: 1.4.0 + fraction.js: 4.1.1 + normalize-range: 0.1.2 + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /axios/0.21.4: + resolution: {integrity: sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==} + dependencies: + follow-redirects: 1.14.4 + transitivePeerDependencies: + - debug + dev: true + + /babel-loader/8.2.2_0e35175a9985e2dbf434a1fb88ccfda5: + resolution: {integrity: sha512-JvTd0/D889PQBtUXJ2PXaKU/pjZDMtHA9V2ecm+eNRmmBCMR09a+fmpGTNwnJtFmFl5Ei7Vy47LjBb+L0wQ99g==} + engines: {node: '>= 8.9'} + peerDependencies: + '@babel/core': ^7.0.0 + webpack: '>=2' + dependencies: + '@babel/core': 7.15.5 + find-cache-dir: 3.3.2 + loader-utils: 1.4.0 + make-dir: 3.1.0 + schema-utils: 2.7.1 + webpack: 5.53.0_webpack-cli@4.8.0 + dev: true + + /babel-plugin-dynamic-import-node/2.3.3: + resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} + dependencies: + object.assign: 4.1.2 + dev: true + + /babel-plugin-polyfill-corejs2/0.2.2_@babel+core@7.15.5: + resolution: {integrity: sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.15.0 + '@babel/core': 7.15.5 + '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.15.5 + semver: 6.3.0 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-corejs3/0.2.4_@babel+core@7.15.5: + resolution: {integrity: sha512-z3HnJE5TY/j4EFEa/qpQMSbcUJZ5JQi+3UFjXzn6pQCmIKc5Ug5j98SuYyH+m4xQnvKlMDIW4plLfgyVnd0IcQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.15.5 + core-js-compat: 3.17.3 + transitivePeerDependencies: + - supports-color + dev: true + + /babel-plugin-polyfill-regenerator/0.2.2_@babel+core@7.15.5: + resolution: {integrity: sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.15.5 + '@babel/helper-define-polyfill-provider': 0.2.3_@babel+core@7.15.5 + transitivePeerDependencies: + - supports-color + dev: true + + /balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: true + + /base64-js/1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /batch/0.6.1: + resolution: {integrity: sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=} + dev: true + + /big.js/5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: true + + /binary-extensions/2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + dev: true + + /bluebird/3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + + /bn.js/4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} + dev: true + + /bn.js/5.2.0: + resolution: {integrity: sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==} + dev: true + + /body-parser/1.19.0: + resolution: {integrity: sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.0 + content-type: 1.0.4 + debug: 2.6.9 + depd: 1.1.2 + http-errors: 1.7.2 + iconv-lite: 0.4.24 + on-finished: 2.3.0 + qs: 6.7.0 + raw-body: 2.4.0 + type-is: 1.6.18 + dev: true + + /bonjour/3.5.0: + resolution: {integrity: sha1-jokKGD2O6aI5OzhExpGkK897yfU=} + dependencies: + array-flatten: 2.1.2 + deep-equal: 1.1.1 + dns-equal: 1.0.0 + dns-txt: 2.0.2 + multicast-dns: 6.2.3 + multicast-dns-service-types: 1.1.0 + dev: true + + /boolbase/1.0.0: + resolution: {integrity: sha1-aN/1++YMUes3cl6p4+0xDcwed24=} + dev: true + + /brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + dev: true + + /braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /brorand/1.1.0: + resolution: {integrity: sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=} + dev: true + + /browserify-aes/1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.4 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /browserify-cipher/1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + dev: true + + /browserify-des/1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + dependencies: + cipher-base: 1.0.4 + des.js: 1.0.1 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /browserify-rsa/4.1.0: + resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} + dependencies: + bn.js: 5.2.0 + randombytes: 2.1.0 + dev: true + + /browserify-sign/4.2.1: + resolution: {integrity: sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==} + dependencies: + bn.js: 5.2.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.5.4 + inherits: 2.0.4 + parse-asn1: 5.1.6 + readable-stream: 3.6.0 + safe-buffer: 5.2.1 + dev: true + + /browserify-zlib/0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + dependencies: + pako: 1.0.11 + dev: true + + /browserslist/4.17.0: + resolution: {integrity: sha512-g2BJ2a0nEYvEFQC208q8mVAhfNwpZ5Mu8BwgtCdZKO3qx98HChmeg448fPdUzld8aFmfLgVh7yymqV+q1lJZ5g==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001258 + colorette: 1.4.0 + electron-to-chromium: 1.3.842 + escalade: 3.1.1 + node-releases: 1.1.75 + dev: true + + /buffer-from/1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + dev: true + + /buffer-indexof/1.1.1: + resolution: {integrity: sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==} + dev: true + + /buffer-xor/1.0.3: + resolution: {integrity: sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=} + dev: true + + /buffer/4.9.2: + resolution: {integrity: sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + isarray: 1.0.0 + dev: true + + /builtin-status-codes/3.0.0: + resolution: {integrity: sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=} + dev: true + + /bytes/3.0.0: + resolution: {integrity: sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=} + engines: {node: '>= 0.8'} + dev: true + + /bytes/3.1.0: + resolution: {integrity: sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==} + engines: {node: '>= 0.8'} + dev: true + + /call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + dependencies: + function-bind: 1.1.1 + get-intrinsic: 1.1.1 + dev: true + + /callsites/3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: true + + /camel-case/4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + dependencies: + pascal-case: 3.1.2 + tslib: 2.3.1 + dev: true + + /camelcase-css/2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: true + + /caniuse-api/3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.17.0 + caniuse-lite: 1.0.30001258 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 + dev: true + + /caniuse-lite/1.0.30001258: + resolution: {integrity: sha512-RBByOG6xWXUp0CR2/WU2amXz3stjKpSl5J1xU49F1n2OxD//uBZO4wCKUiG+QMGf7CHGfDDcqoKriomoGVxTeA==} + dev: true + + /chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + dependencies: + ansi-styles: 3.2.1 + escape-string-regexp: 1.0.5 + supports-color: 5.5.0 + dev: true + + /chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + dev: true + + /charenc/0.0.2: + resolution: {integrity: sha1-wKHS86cJLgN3S/qD8UwPxXkKhmc=} + dev: true + + /chokidar/3.5.2: + resolution: {integrity: sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.2 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.1 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.2 + dev: true + + /chrome-trace-event/1.0.3: + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + engines: {node: '>=6.0'} + dev: true + + /ci-info/3.2.0: + resolution: {integrity: sha512-dVqRX7fLUm8J6FgHJ418XuIgDLZDkYcDFTeL6TA2gt5WlIZUQrrH6EZrNClwT/H0FateUsZkGIOPRrLbP+PR9A==} + dev: true + + /cipher-base/1.0.4: + resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /clean-css/4.2.3: + resolution: {integrity: sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==} + engines: {node: '>= 4.0'} + dependencies: + source-map: 0.6.1 + dev: true + + /clean-css/5.1.5: + resolution: {integrity: sha512-9dr/cU/LjMpU57PXlSvDkVRh0rPxJBXiBtD0+SgYt8ahTCsXtfKjCkNYgIoTC6mBg8CFr5EKhW3DKCaGMUbUfQ==} + engines: {node: '>= 10.0'} + dependencies: + source-map: 0.6.1 + dev: true + + /clean-stack/2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: true + + /cli-table3/0.6.0: + resolution: {integrity: sha512-gnB85c3MGC7Nm9I/FkiasNBOKjOiO1RNuXXarQms37q4QMpWdlbBgD/VnOStA2faG1dpXMv31RFApjX1/QdgWQ==} + engines: {node: 10.* || >= 12.*} + dependencies: + object-assign: 4.1.1 + string-width: 4.2.2 + optionalDependencies: + colors: 1.4.0 + dev: true + + /cliui/7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + dependencies: + string-width: 4.2.2 + strip-ansi: 6.0.0 + wrap-ansi: 7.0.0 + dev: true + + /clone-deep/4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} + dependencies: + is-plain-object: 2.0.4 + kind-of: 6.0.3 + shallow-clone: 3.0.1 + dev: true + + /collect.js/4.29.0: + resolution: {integrity: sha512-yhgGYEsLEcqnLT1NmRlN1+1euoz9SDhxQ4QyDhWYsKoWsg7252PKA5++dWaDs8mdFxbkmXDXQUaHXI9J2eTPkQ==} + dev: true + + /color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + dependencies: + color-name: 1.1.3 + dev: true + + /color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + dev: true + + /color-name/1.1.3: + resolution: {integrity: sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=} + dev: true + + /color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: true + + /color-string/1.6.0: + resolution: {integrity: sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==} + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + dev: true + + /color/4.0.1: + resolution: {integrity: sha512-rpZjOKN5O7naJxkH2Rx1sZzzBgaiWECc6BYXjeCE6kF0kcASJYbUq02u7JqIHwCb/j3NhV+QhRL2683aICeGZA==} + dependencies: + color-convert: 2.0.1 + color-string: 1.6.0 + dev: true + + /colord/2.7.0: + resolution: {integrity: sha512-pZJBqsHz+pYyw3zpX6ZRXWoCHM1/cvFikY9TV8G3zcejCaKE0lhankoj8iScyrrePA8C7yJ5FStfA9zbcOnw7Q==} + dev: true + + /colorette/1.4.0: + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + dev: true + + /colors/1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + requiresBuild: true + dev: true + optional: true + + /commander/2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + dev: true + + /commander/4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: true + + /commander/6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + dev: true + + /commander/7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: true + + /commondir/1.0.1: + resolution: {integrity: sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=} + dev: true + + /compressible/2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.50.0 + dev: true + + /compression/1.7.4: + resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.7 + bytes: 3.0.0 + compressible: 2.0.18 + debug: 2.6.9 + on-headers: 1.0.2 + safe-buffer: 5.1.2 + vary: 1.1.2 + dev: true + + /concat-map/0.0.1: + resolution: {integrity: sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=} + dev: true + + /concat/1.0.3: + resolution: {integrity: sha1-QPM1MInWVGdpXLGIa0Xt1jfYzKg=} + engines: {node: '>=6'} + hasBin: true + dependencies: + commander: 2.20.3 + dev: true + + /connect-history-api-fallback/1.6.0: + resolution: {integrity: sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==} + engines: {node: '>=0.8'} + dev: true + + /consola/2.15.3: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + dev: true + + /console-browserify/1.2.0: + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} + dev: true + + /consolidate/0.16.0: + resolution: {integrity: sha512-Nhl1wzCslqXYTJVDyJCu3ODohy9OfBMB5uD2BiBTzd7w+QY0lBzafkR8y8755yMYHAaMD4NuzbAw03/xzfw+eQ==} + engines: {node: '>= 0.10.0'} + dependencies: + bluebird: 3.7.2 + dev: true + + /constants-browserify/1.0.0: + resolution: {integrity: sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=} + dev: true + + /content-disposition/0.5.3: + resolution: {integrity: sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==} + engines: {node: '>= 0.6'} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /content-type/1.0.4: + resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} + engines: {node: '>= 0.6'} + dev: true + + /convert-source-map/1.8.0: + resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /cookie-signature/1.0.6: + resolution: {integrity: sha1-4wOogrNCzD7oylE6eZmXNNqzriw=} + dev: true + + /cookie/0.4.0: + resolution: {integrity: sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==} + engines: {node: '>= 0.6'} + dev: true + + /core-js-compat/3.17.3: + resolution: {integrity: sha512-+in61CKYs4hQERiADCJsdgewpdl/X0GhEX77pjKgbeibXviIt2oxEjTc8O2fqHX8mDdBrDvX8MYD/RYsBv4OiA==} + dependencies: + browserslist: 4.17.0 + semver: 7.0.0 + dev: true + + /core-util-is/1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + dev: true + + /cosmiconfig/7.0.1: + resolution: {integrity: sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==} + engines: {node: '>=10'} + dependencies: + '@types/parse-json': 4.0.0 + import-fresh: 3.3.0 + parse-json: 5.2.0 + path-type: 4.0.0 + yaml: 1.10.2 + dev: true + + /create-ecdh/4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + dependencies: + bn.js: 4.12.0 + elliptic: 6.5.4 + dev: true + + /create-hash/1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + dependencies: + cipher-base: 1.0.4 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + dev: true + + /create-hmac/1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + dependencies: + cipher-base: 1.0.4 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + + /cross-env/7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + dependencies: + cross-spawn: 7.0.3 + dev: true + + /cross-spawn/7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + dev: true + + /crypt/0.0.2: + resolution: {integrity: sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs=} + dev: true + + /crypto-browserify/3.12.0: + resolution: {integrity: sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==} + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.1 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + inherits: 2.0.4 + pbkdf2: 3.1.2 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + dev: true + + /css-color-names/0.0.4: + resolution: {integrity: sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=} + dev: true + + /css-color-names/1.0.1: + resolution: {integrity: sha512-/loXYOch1qU1biStIFsHH8SxTmOseh1IJqFvy8IujXOm1h+QjUdDhkzOrR5HG8K8mlxREj0yfi8ewCHx0eMxzA==} + dev: true + + /css-declaration-sorter/6.1.3_postcss@8.3.6: + resolution: {integrity: sha512-SvjQjNRZgh4ULK1LDJ2AduPKUKxIqmtU7ZAyi47BTV+M90Qvxr9AB6lKlLbDUfXqI9IQeYA8LbAsCZPpJEV3aA==} + engines: {node: '>= 10'} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.3.6 + timsort: 0.3.0 + dev: true + + /css-loader/5.2.7_webpack@5.53.0: + resolution: {integrity: sha512-Q7mOvpBNBG7YrVGMxRxcBJZFL75o+cH2abNASdibkj/fffYD8qWbInZrD0S9ccI6vZclF3DsHE7njGlLtaHbhg==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.27.0 || ^5.0.0 + dependencies: + icss-utils: 5.1.0_postcss@8.3.6 + loader-utils: 2.0.0 + postcss: 8.3.6 + postcss-modules-extract-imports: 3.0.0_postcss@8.3.6 + postcss-modules-local-by-default: 4.0.0_postcss@8.3.6 + postcss-modules-scope: 3.0.0_postcss@8.3.6 + postcss-modules-values: 4.0.0_postcss@8.3.6 + postcss-value-parser: 4.1.0 + schema-utils: 3.1.1 + semver: 7.3.5 + webpack: 5.53.0_webpack-cli@4.8.0 + dev: true + + /css-select/4.1.3: + resolution: {integrity: sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==} + dependencies: + boolbase: 1.0.0 + css-what: 5.0.1 + domhandler: 4.2.2 + domutils: 2.8.0 + nth-check: 2.0.1 + dev: true + + /css-tree/1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} + dependencies: + mdn-data: 2.0.14 + source-map: 0.6.1 + dev: true + + /css-unit-converter/1.1.2: + resolution: {integrity: sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==} + dev: true + + /css-what/5.0.1: + resolution: {integrity: sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==} + engines: {node: '>= 6'} + dev: true + + /cssesc/3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /cssnano-preset-default/5.1.4_postcss@8.3.6: + resolution: {integrity: sha512-sPpQNDQBI3R/QsYxQvfB4mXeEcWuw0wGtKtmS5eg8wudyStYMgKOQT39G07EbW1LB56AOYrinRS9f0ig4Y3MhQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.1.3_postcss@8.3.6 + cssnano-utils: 2.0.1_postcss@8.3.6 + postcss: 8.3.6 + postcss-calc: 8.0.0_postcss@8.3.6 + postcss-colormin: 5.2.0_postcss@8.3.6 + postcss-convert-values: 5.0.1_postcss@8.3.6 + postcss-discard-comments: 5.0.1_postcss@8.3.6 + postcss-discard-duplicates: 5.0.1_postcss@8.3.6 + postcss-discard-empty: 5.0.1_postcss@8.3.6 + postcss-discard-overridden: 5.0.1_postcss@8.3.6 + postcss-merge-longhand: 5.0.2_postcss@8.3.6 + postcss-merge-rules: 5.0.2_postcss@8.3.6 + postcss-minify-font-values: 5.0.1_postcss@8.3.6 + postcss-minify-gradients: 5.0.2_postcss@8.3.6 + postcss-minify-params: 5.0.1_postcss@8.3.6 + postcss-minify-selectors: 5.1.0_postcss@8.3.6 + postcss-normalize-charset: 5.0.1_postcss@8.3.6 + postcss-normalize-display-values: 5.0.1_postcss@8.3.6 + postcss-normalize-positions: 5.0.1_postcss@8.3.6 + postcss-normalize-repeat-style: 5.0.1_postcss@8.3.6 + postcss-normalize-string: 5.0.1_postcss@8.3.6 + postcss-normalize-timing-functions: 5.0.1_postcss@8.3.6 + postcss-normalize-unicode: 5.0.1_postcss@8.3.6 + postcss-normalize-url: 5.0.2_postcss@8.3.6 + postcss-normalize-whitespace: 5.0.1_postcss@8.3.6 + postcss-ordered-values: 5.0.2_postcss@8.3.6 + postcss-reduce-initial: 5.0.1_postcss@8.3.6 + postcss-reduce-transforms: 5.0.1_postcss@8.3.6 + postcss-svgo: 5.0.2_postcss@8.3.6 + postcss-unique-selectors: 5.0.1_postcss@8.3.6 + dev: true + + /cssnano-utils/2.0.1_postcss@8.3.6: + resolution: {integrity: sha512-i8vLRZTnEH9ubIyfdZCAdIdgnHAUeQeByEeQ2I7oTilvP9oHO6RScpeq3GsFUVqeB8uZgOQ9pw8utofNn32hhQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.3.6 + dev: true + + /cssnano/5.0.8_postcss@8.3.6: + resolution: {integrity: sha512-Lda7geZU0Yu+RZi2SGpjYuQz4HI4/1Y+BhdD0jL7NXAQ5larCzVn+PUGuZbDMYz904AXXCOgO5L1teSvgu7aFg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 5.1.4_postcss@8.3.6 + is-resolvable: 1.1.0 + lilconfig: 2.0.3 + postcss: 8.3.6 + yaml: 1.10.2 + dev: true + + /csso/4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} + dependencies: + css-tree: 1.1.3 + dev: true + + /csstype/2.6.18: + resolution: {integrity: sha512-RSU6Hyeg14am3Ah4VZEmeX8H7kLwEEirXe6aU2IPfKNvhXwTflK5HQRDNI0ypQXoqmm+QPyG2IaPuQE5zMwSIQ==} + dev: true + + /debug/2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + dependencies: + ms: 2.0.0 + dev: true + + /debug/3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + dependencies: + ms: 2.1.3 + dev: true + + /debug/4.3.2: + resolution: {integrity: sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /deep-equal/1.1.1: + resolution: {integrity: sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==} + dependencies: + is-arguments: 1.1.1 + is-date-object: 1.0.5 + is-regex: 1.1.4 + object-is: 1.1.5 + object-keys: 1.1.1 + regexp.prototype.flags: 1.3.1 + dev: true + + /default-gateway/6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} + dependencies: + execa: 5.1.1 + dev: true + + /define-lazy-prop/2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: true + + /define-properties/1.1.3: + resolution: {integrity: sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==} + engines: {node: '>= 0.4'} + dependencies: + object-keys: 1.1.1 + dev: true + + /defined/1.0.0: + resolution: {integrity: sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=} + dev: true + + /del/6.0.0: + resolution: {integrity: sha512-1shh9DQ23L16oXSZKB2JxpL7iMy2E0S9d517ptA1P8iw0alkPtQcrKH7ru31rYtKwF499HkTu+DRzq3TCKDFRQ==} + engines: {node: '>=10'} + dependencies: + globby: 11.0.4 + graceful-fs: 4.2.8 + is-glob: 4.0.1 + is-path-cwd: 2.2.0 + is-path-inside: 3.0.3 + p-map: 4.0.0 + rimraf: 3.0.2 + slash: 3.0.0 + dev: true + + /depd/1.1.2: + resolution: {integrity: sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=} + engines: {node: '>= 0.6'} + dev: true + + /des.js/1.0.1: + resolution: {integrity: sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + + /destroy/1.0.4: + resolution: {integrity: sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=} + dev: true + + /detect-node/2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: true + + /detective/5.2.0: + resolution: {integrity: sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==} + engines: {node: '>=0.8.0'} + hasBin: true + dependencies: + acorn-node: 1.8.2 + defined: 1.0.0 + minimist: 1.2.5 + dev: true + + /didyoumean/1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: true + + /diffie-hellman/5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dependencies: + bn.js: 4.12.0 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dev: true + + /dir-glob/3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /dlv/1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: true + + /dns-equal/1.0.0: + resolution: {integrity: sha1-s55/HabrCnW6nBcySzR1PEfgZU0=} + dev: true + + /dns-packet/1.3.4: + resolution: {integrity: sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==} + dependencies: + ip: 1.1.5 + safe-buffer: 5.2.1 + dev: true + + /dns-txt/2.0.2: + resolution: {integrity: sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=} + dependencies: + buffer-indexof: 1.1.1 + dev: true + + /dom-serializer/1.3.2: + resolution: {integrity: sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==} + dependencies: + domelementtype: 2.2.0 + domhandler: 4.2.2 + entities: 2.2.0 + dev: true + + /domain-browser/1.2.0: + resolution: {integrity: sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==} + engines: {node: '>=0.4', npm: '>=1.2'} + dev: true + + /domelementtype/2.2.0: + resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==} + dev: true + + /domhandler/3.3.0: + resolution: {integrity: sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.2.0 + dev: true + + /domhandler/4.2.2: + resolution: {integrity: sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==} + engines: {node: '>= 4'} + dependencies: + domelementtype: 2.2.0 + dev: true + + /domutils/2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + dependencies: + dom-serializer: 1.3.2 + domelementtype: 2.2.0 + domhandler: 4.2.2 + dev: true + + /dot-case/3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + dependencies: + no-case: 3.0.4 + tslib: 2.3.1 + dev: true + + /dotenv-expand/5.1.0: + resolution: {integrity: sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==} + dev: true + + /dotenv/10.0.0: + resolution: {integrity: sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==} + engines: {node: '>=10'} + dev: true + + /ee-first/1.1.1: + resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} + dev: true + + /electron-to-chromium/1.3.842: + resolution: {integrity: sha512-P/nDMPIYdb2PyqCQwhTXNi5JFjX1AsDVR0y6FrHw752izJIAJ+Pn5lugqyBq4tXeRSZBMBb2ZGvRGB1djtELEQ==} + dev: true + + /elliptic/6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + + /emoji-regex/8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: true + + /emojis-list/3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: true + + /encodeurl/1.0.2: + resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=} + engines: {node: '>= 0.8'} + dev: true + + /enhanced-resolve/5.8.2: + resolution: {integrity: sha512-F27oB3WuHDzvR2DOGNTaYy0D5o0cnrv8TeI482VM4kYgQd/FT9lUQwuNsJ0oOHtBUq7eiW5ytqzp7nBFknL+GA==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.8 + tapable: 2.2.1 + dev: true + + /entities/2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: true + + /envinfo/7.8.1: + resolution: {integrity: sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /error-ex/1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + dependencies: + is-arrayish: 0.2.1 + dev: true + + /es-module-lexer/0.7.1: + resolution: {integrity: sha512-MgtWFl5No+4S3TmhDmCz2ObFGm6lEpTnzbQi+Dd+pw4mlTIZTmM2iAs5gRlmx5zS9luzobCSBSI90JM/1/JgOw==} + dev: true + + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + dev: true + + /escape-html/1.0.3: + resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} + dev: true + + /escape-string-regexp/1.0.5: + resolution: {integrity: sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=} + engines: {node: '>=0.8.0'} + dev: true + + /eslint-scope/5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} + dependencies: + esrecurse: 4.3.0 + estraverse: 4.3.0 + dev: true + + /esrecurse/4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.2.0 + dev: true + + /estraverse/4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + dev: true + + /estraverse/5.2.0: + resolution: {integrity: sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==} + engines: {node: '>=4.0'} + dev: true + + /estree-walker/2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + dev: true + + /esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: true + + /etag/1.8.1: + resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=} + engines: {node: '>= 0.6'} + dev: true + + /eventemitter3/4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: true + + /events/3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + dev: true + + /evp_bytestokey/1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + dev: true + + /execa/5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.4 + strip-final-newline: 2.0.0 + dev: true + + /express/4.17.1: + resolution: {integrity: sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==} + engines: {node: '>= 0.10.0'} + dependencies: + accepts: 1.3.7 + array-flatten: 1.1.1 + body-parser: 1.19.0 + content-disposition: 0.5.3 + content-type: 1.0.4 + cookie: 0.4.0 + 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.2 + fresh: 0.5.2 + merge-descriptors: 1.0.1 + methods: 1.1.2 + on-finished: 2.3.0 + parseurl: 1.3.3 + path-to-regexp: 0.1.7 + proxy-addr: 2.0.7 + qs: 6.7.0 + range-parser: 1.2.1 + safe-buffer: 5.1.2 + send: 0.17.1 + serve-static: 1.14.1 + setprototypeof: 1.1.1 + statuses: 1.5.0 + type-is: 1.6.18 + utils-merge: 1.0.1 + vary: 1.1.2 + dev: true + + /fast-deep-equal/3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + dev: true + + /fast-glob/3.2.7: + resolution: {integrity: sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==} + engines: {node: '>=8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.4 + dev: true + + /fast-json-stable-stringify/2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: true + + /fastest-levenshtein/1.0.12: + resolution: {integrity: sha512-On2N+BpYJ15xIC974QNVuYGMOlEVt4s0EOI3wwMqOmK1fdDY+FN/zltPV8vosq4ad4c/gJ1KHScUn/6AWIgiow==} + dev: true + + /fastq/1.13.0: + resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + dependencies: + reusify: 1.0.4 + dev: true + + /faye-websocket/0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} + dependencies: + websocket-driver: 0.7.4 + dev: true + + /figures/3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + + /file-loader/6.2.0_webpack@5.53.0: + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.0 + schema-utils: 3.1.1 + webpack: 5.53.0_webpack-cli@4.8.0 + dev: true + + /file-type/12.4.2: + resolution: {integrity: sha512-UssQP5ZgIOKelfsaB5CuGAL+Y+q7EmONuiwF3N5HAH0t27rvrttgi6Ra9k/+DVaY9UF6+ybxu5pOXLUdA8N7Vg==} + engines: {node: '>=8'} + dev: true + + /fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /finalhandler/1.1.2: + resolution: {integrity: sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==} + engines: {node: '>= 0.8'} + dependencies: + debug: 2.6.9 + encodeurl: 1.0.2 + escape-html: 1.0.3 + on-finished: 2.3.0 + parseurl: 1.3.3 + statuses: 1.5.0 + unpipe: 1.0.0 + dev: true + + /find-cache-dir/3.3.2: + resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} + engines: {node: '>=8'} + dependencies: + commondir: 1.0.1 + make-dir: 3.1.0 + pkg-dir: 4.2.0 + dev: true + + /find-up/4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + dev: true + + /follow-redirects/1.14.4: + resolution: {integrity: sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: true + + /forwarded/0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: true + + /fraction.js/4.1.1: + resolution: {integrity: sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==} + dev: true + + /fresh/0.5.2: + resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} + engines: {node: '>= 0.6'} + dev: true + + /fs-extra/10.0.0: + resolution: {integrity: sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==} + engines: {node: '>=12'} + dependencies: + graceful-fs: 4.2.8 + jsonfile: 6.1.0 + universalify: 2.0.0 + dev: true + + /fs-monkey/1.0.3: + resolution: {integrity: sha512-cybjIfiiE+pTWicSCLFHSrXZ6EilF30oh91FDP9S2B051prEa7QWfrVTQm10/dDpswBDXZugPa1Ogu8Yh+HV0Q==} + dev: true + + /fs.realpath/1.0.0: + resolution: {integrity: sha1-FQStJSMVjKpA20onh8sBQRmU6k8=} + dev: true + + /fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + dev: true + + /generic-names/2.0.1: + resolution: {integrity: sha512-kPCHWa1m9wGG/OwQpeweTwM/PYiQLrUIxXbt/P4Nic3LbGjCP0YwrALHW1uNLKZ0LIMg+RF+XRlj2ekT9ZlZAQ==} + dependencies: + loader-utils: 1.4.0 + dev: true + + /gensync/1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: true + + /get-caller-file/2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + dev: true + + /get-intrinsic/1.1.1: + resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} + dependencies: + function-bind: 1.1.1 + has: 1.0.3 + has-symbols: 1.0.2 + dev: true + + /get-stream/6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: true + + /glob-parent/5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.1 + dev: true + + /glob-parent/6.0.1: + resolution: {integrity: sha512-kEVjS71mQazDBHKcsq4E9u/vUzaLcw1A8EtUeydawvIWQCJM0qQ08G1H7/XTjFUulla6XQiDOG6MXSaG0HDKog==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.1 + dev: true + + /glob-to-regexp/0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} + dev: true + + /glob/7.1.7: + resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.0.4 + once: 1.4.0 + path-is-absolute: 1.0.1 + dev: true + + /globals/11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: true + + /globby/10.0.2: + resolution: {integrity: sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==} + engines: {node: '>=8'} + dependencies: + '@types/glob': 7.1.4 + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.7 + glob: 7.1.7 + ignore: 5.1.8 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /globby/11.0.4: + resolution: {integrity: sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.2.7 + ignore: 5.1.8 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /graceful-fs/4.2.8: + resolution: {integrity: sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==} + dev: true + + /growly/1.3.0: + resolution: {integrity: sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=} + dev: true + + /handle-thing/2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + dev: true + + /has-flag/3.0.0: + resolution: {integrity: sha1-tdRU3CGZriJWmfNGfloH87lVuv0=} + engines: {node: '>=4'} + dev: true + + /has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + dev: true + + /has-symbols/1.0.2: + resolution: {integrity: sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag/1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.2 + dev: true + + /has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: 1.1.1 + dev: true + + /hash-base/3.1.0: + resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} + engines: {node: '>=4'} + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.0 + safe-buffer: 5.2.1 + dev: true + + /hash-sum/1.0.2: + resolution: {integrity: sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=} + dev: true + + /hash-sum/2.0.0: + resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} + dev: true + + /hash.js/1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + dev: true + + /he/1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: true + + /hex-color-regex/1.1.0: + resolution: {integrity: sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==} + dev: true + + /hmac-drbg/1.0.1: + resolution: {integrity: sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=} + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + dev: true + + /hpack.js/2.1.6: + resolution: {integrity: sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=} + dependencies: + inherits: 2.0.4 + obuf: 1.1.2 + readable-stream: 2.3.7 + wbuf: 1.7.3 + dev: true + + /hsl-regex/1.0.0: + resolution: {integrity: sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=} + dev: true + + /hsla-regex/1.0.0: + resolution: {integrity: sha1-wc56MWjIxmFAM6S194d/OyJfnDg=} + dev: true + + /html-entities/2.3.2: + resolution: {integrity: sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==} + dev: true + + /html-loader/1.3.2_webpack@5.53.0: + resolution: {integrity: sha512-DEkUwSd0sijK5PF3kRWspYi56XP7bTNkyg5YWSzBdjaSDmvCufep5c4Vpb3PBf6lUL0YPtLwBfy9fL0t5hBAGA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + html-minifier-terser: 5.1.1 + htmlparser2: 4.1.0 + loader-utils: 2.0.0 + schema-utils: 3.1.1 + webpack: 5.53.0_webpack-cli@4.8.0 + dev: true + + /html-minifier-terser/5.1.1: + resolution: {integrity: sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==} + engines: {node: '>=6'} + hasBin: true + dependencies: + camel-case: 4.1.2 + clean-css: 4.2.3 + commander: 4.1.1 + he: 1.2.0 + param-case: 3.0.4 + relateurl: 0.2.7 + terser: 4.8.0 + dev: true + + /html-tags/3.1.0: + resolution: {integrity: sha512-1qYz89hW3lFDEazhjW0yVAV87lw8lVkrJocr72XmBkMKsoSVJCQx3W8BXsC7hO2qAt8BoVjYjtAcZ9perqGnNg==} + engines: {node: '>=8'} + dev: true + + /htmlparser2/4.1.0: + resolution: {integrity: sha512-4zDq1a1zhE4gQso/c5LP1OtrhYTncXNSpvJYtWJBtXAETPlMfi3IFNjGuQbYLuVY4ZR0QMqRVvo4Pdy9KLyP8Q==} + dependencies: + domelementtype: 2.2.0 + domhandler: 3.3.0 + domutils: 2.8.0 + entities: 2.2.0 + dev: true + + /http-deceiver/1.2.7: + resolution: {integrity: sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=} + dev: true + + /http-errors/1.6.3: + resolution: {integrity: sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + dev: true + + /http-errors/1.7.2: + resolution: {integrity: sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.1 + statuses: 1.5.0 + toidentifier: 1.0.0 + dev: true + + /http-errors/1.7.3: + resolution: {integrity: sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==} + engines: {node: '>= 0.6'} + dependencies: + depd: 1.1.2 + inherits: 2.0.4 + setprototypeof: 1.1.1 + statuses: 1.5.0 + toidentifier: 1.0.0 + dev: true + + /http-parser-js/0.5.3: + resolution: {integrity: sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==} + dev: true + + /http-proxy-middleware/2.0.1: + resolution: {integrity: sha512-cfaXRVoZxSed/BmkA7SwBVNI9Kj7HFltaE5rqYOub5kWzWZ+gofV2koVN1j2rMW7pEfSSlCHGJ31xmuyFyfLOg==} + engines: {node: '>=12.0.0'} + dependencies: + '@types/http-proxy': 1.17.7 + http-proxy: 1.18.1 + is-glob: 4.0.1 + is-plain-obj: 3.0.0 + micromatch: 4.0.4 + transitivePeerDependencies: + - debug + dev: true + + /http-proxy/1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.14.4 + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + dev: true + + /https-browserify/1.0.0: + resolution: {integrity: sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=} + dev: true + + /human-signals/2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: true + + /iconv-lite/0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /icss-replace-symbols/1.1.0: + resolution: {integrity: sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=} + dev: true + + /icss-utils/5.1.0_postcss@8.3.6: + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.3.6 + dev: true + + /ieee754/1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + + /ignore/5.1.8: + resolution: {integrity: sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==} + engines: {node: '>= 4'} + dev: true + + /imagemin/7.0.1: + resolution: {integrity: sha512-33AmZ+xjZhg2JMCe+vDf6a9mzWukE7l+wAtesjE7KyteqqKjzxv7aVQeWnul1Ve26mWvEQqyPwl0OctNBfSR9w==} + engines: {node: '>=8'} + dependencies: + file-type: 12.4.2 + globby: 10.0.2 + graceful-fs: 4.2.8 + junk: 3.1.0 + make-dir: 3.1.0 + p-pipe: 3.1.0 + replace-ext: 1.0.1 + dev: true + + /img-loader/4.0.0_imagemin@7.0.1: + resolution: {integrity: sha512-UwRcPQdwdOyEHyCxe1V9s9YFwInwEWCpoO+kJGfIqDrBDqA8jZUsEZTxQ0JteNPGw/Gupmwesk2OhLTcnw6tnQ==} + engines: {node: '>=12'} + peerDependencies: + imagemin: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + imagemin: 7.0.1 + loader-utils: 1.4.0 + dev: true + + /import-cwd/3.0.0: + resolution: {integrity: sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==} + engines: {node: '>=8'} + dependencies: + import-from: 3.0.0 + dev: true + + /import-fresh/3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + dev: true + + /import-from/3.0.0: + resolution: {integrity: sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + + /import-local/3.0.2: + resolution: {integrity: sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + dev: true + + /indent-string/4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: true + + /inflight/1.0.6: + resolution: {integrity: sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + dev: true + + /inherits/2.0.1: + resolution: {integrity: sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=} + dev: true + + /inherits/2.0.3: + resolution: {integrity: sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=} + dev: true + + /inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + dev: true + + /internal-ip/6.2.0: + resolution: {integrity: sha512-D8WGsR6yDt8uq7vDMu7mjcR+yRMm3dW8yufyChmszWRjcSHuxLBkR3GdS2HZAjodsaGuCvXeEJpueisXJULghg==} + engines: {node: '>=10'} + dependencies: + default-gateway: 6.0.3 + ipaddr.js: 1.9.1 + is-ip: 3.1.0 + p-event: 4.2.0 + dev: true + + /interpret/2.2.0: + resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==} + engines: {node: '>= 0.10'} + dev: true + + /ip-regex/4.3.0: + resolution: {integrity: sha512-B9ZWJxHHOHUhUjCPrMpLD4xEq35bUTClHM1S6CBU5ixQnkZmwipwgc96vAd7AAGM9TGHvJR+Uss+/Ak6UphK+Q==} + engines: {node: '>=8'} + dev: true + + /ip/1.1.5: + resolution: {integrity: sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=} + dev: true + + /ipaddr.js/1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: true + + /ipaddr.js/2.0.1: + resolution: {integrity: sha512-1qTgH9NG+IIJ4yfKs2e6Pp1bZg8wbDbKHT21HrLIeYBTRLgMYKnMTPAuI3Lcs61nfx5h1xlXnbJtH1kX5/d/ng==} + engines: {node: '>= 10'} + dev: true + + /is-absolute-url/3.0.3: + resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} + engines: {node: '>=8'} + dev: true + + /is-arguments/1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-arrayish/0.2.1: + resolution: {integrity: sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=} + dev: true + + /is-arrayish/0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: true + + /is-binary-path/2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} + dependencies: + binary-extensions: 2.2.0 + dev: true + + /is-buffer/1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + dev: true + + /is-color-stop/1.1.0: + resolution: {integrity: sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=} + dependencies: + 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 + dev: true + + /is-core-module/2.6.0: + resolution: {integrity: sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==} + dependencies: + has: 1.0.3 + dev: true + + /is-date-object/1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.0 + dev: true + + /is-docker/2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: true + + /is-extglob/2.1.1: + resolution: {integrity: sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=} + engines: {node: '>=0.10.0'} + dev: true + + /is-fullwidth-code-point/3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: true + + /is-glob/4.0.1: + resolution: {integrity: sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + dev: true + + /is-ip/3.1.0: + resolution: {integrity: sha512-35vd5necO7IitFPjd/YBeqwWnyDWbuLH9ZXQdMfDA8TEo7pv5X8yfrvVO3xbJbLUlERCMvf6X0hTUamQxCYJ9Q==} + engines: {node: '>=8'} + dependencies: + ip-regex: 4.3.0 + dev: true + + /is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-path-cwd/2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + dev: true + + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + + /is-plain-obj/3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + dev: true + + /is-plain-object/2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /is-regex/1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + has-tostringtag: 1.0.0 + dev: true + + /is-resolvable/1.1.0: + resolution: {integrity: sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==} + dev: true + + /is-stream/2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: true + + /is-wsl/2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + dev: true + + /isarray/1.0.0: + resolution: {integrity: sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=} + dev: true + + /isexe/2.0.0: + resolution: {integrity: sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=} + dev: true + + /isobject/3.0.1: + resolution: {integrity: sha1-TkMekrEalzFjaqH5yNHMvP2reN8=} + engines: {node: '>=0.10.0'} + dev: true + + /jest-worker/27.2.0: + resolution: {integrity: sha512-laB0ZVIBz+voh/QQy9dmUuuDsadixeerrKqyVpgPz+CCWiOYjOBabUXHIXZhsdvkWbLqSHbgkAHWl5cg24Q6RA==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/node': 16.9.2 + merge-stream: 2.0.0 + supports-color: 8.1.1 + dev: true + + /js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + dev: true + + /jsesc/0.5.0: + resolution: {integrity: sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=} + hasBin: true + dev: true + + /jsesc/2.5.2: + resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /json-parse-better-errors/1.0.2: + resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==} + dev: true + + /json-parse-even-better-errors/2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + dev: true + + /json-schema-traverse/0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: true + + /json5/1.0.1: + resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} + hasBin: true + dependencies: + minimist: 1.2.5 + dev: true + + /json5/2.2.0: + resolution: {integrity: sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==} + engines: {node: '>=6'} + hasBin: true + dependencies: + minimist: 1.2.5 + dev: true + + /jsonfile/6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.8 + dev: true + + /junk/3.1.0: + resolution: {integrity: sha512-pBxcB3LFc8QVgdggvZWyeys+hnrNWg4OcZIU/1X59k5jQdLBlCsYGRQaz234SqoRLTCgMH00fY0xRJH+F9METQ==} + engines: {node: '>=8'} + dev: true + + /kind-of/6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /klona/2.0.4: + resolution: {integrity: sha512-ZRbnvdg/NxqzC7L9Uyqzf4psi1OM4Cuc+sJAkQPjO6XkQIJTNbfK2Rsmbw8fx1p2mkZdp2FZYo2+LwXYY/uwIA==} + engines: {node: '>= 8'} + dev: true + + /laravel-mix/6.0.31_postcss@8.3.6: + resolution: {integrity: sha512-T9uFNNARS5hXl5JggCkLKybwAnyYEHBXzPseC0yJ/6EVK7eyvPOq2UAGDVqhfYTZKxrMd5B5ww1kEooDRoH+OA==} + engines: {node: '>=12.14.0'} + hasBin: true + peerDependencies: + postcss: ^8.3.1 + dependencies: + '@babel/core': 7.15.5 + '@babel/plugin-proposal-object-rest-spread': 7.15.6_@babel+core@7.15.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3_@babel+core@7.15.5 + '@babel/plugin-transform-runtime': 7.15.0_@babel+core@7.15.5 + '@babel/preset-env': 7.15.6_@babel+core@7.15.5 + '@babel/runtime': 7.15.4 + '@types/babel__core': 7.1.16 + '@types/clean-css': 4.2.5 + '@types/imagemin-gifsicle': 7.0.1 + '@types/imagemin-mozjpeg': 8.0.1 + '@types/imagemin-optipng': 5.2.1 + '@types/imagemin-svgo': 8.0.1 + autoprefixer: 10.3.4_postcss@8.3.6 + babel-loader: 8.2.2_0e35175a9985e2dbf434a1fb88ccfda5 + chalk: 4.1.2 + chokidar: 3.5.2 + clean-css: 5.1.5 + cli-table3: 0.6.0 + collect.js: 4.29.0 + commander: 7.2.0 + concat: 1.0.3 + css-loader: 5.2.7_webpack@5.53.0 + cssnano: 5.0.8_postcss@8.3.6 + dotenv: 10.0.0 + dotenv-expand: 5.1.0 + file-loader: 6.2.0_webpack@5.53.0 + fs-extra: 10.0.0 + glob: 7.1.7 + html-loader: 1.3.2_webpack@5.53.0 + imagemin: 7.0.1 + img-loader: 4.0.0_imagemin@7.0.1 + lodash: 4.17.21 + md5: 2.3.0 + mini-css-extract-plugin: 1.6.2_webpack@5.53.0 + node-libs-browser: 2.2.1 + postcss: 8.3.6 + postcss-load-config: 3.1.0 + postcss-loader: 6.1.1_postcss@8.3.6+webpack@5.53.0 + semver: 7.3.5 + strip-ansi: 6.0.0 + style-loader: 2.0.0_webpack@5.53.0 + terser: 5.8.0 + terser-webpack-plugin: 5.2.4_webpack@5.53.0 + vue-style-loader: 4.1.3 + webpack: 5.53.0_webpack-cli@4.8.0 + webpack-cli: 4.8.0_98674a6cb9be10449d20d833653b2ace + webpack-dev-server: 4.1.1_webpack-cli@4.8.0+webpack@5.53.0 + webpack-merge: 5.8.0 + webpack-notifier: 1.13.0 + webpackbar: 5.0.0-3_webpack@5.53.0 + yargs: 17.1.1 + transitivePeerDependencies: + - '@swc/core' + - '@webpack-cli/generators' + - '@webpack-cli/migrate' + - bufferutil + - debug + - esbuild + - supports-color + - ts-node + - uglify-js + - utf-8-validate + - webpack-bundle-analyzer + dev: true + + /lilconfig/2.0.3: + resolution: {integrity: sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==} + engines: {node: '>=10'} + dev: true + + /lines-and-columns/1.1.6: + resolution: {integrity: sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=} + dev: true + + /loader-runner/4.2.0: + resolution: {integrity: sha512-92+huvxMvYlMzMt0iIOukcwYBFpkYJdpl2xsZ7LrlayO7E8SOv+JJUEK17B/dJIHAOLMfh2dZZ/Y18WgmGtYNw==} + engines: {node: '>=6.11.5'} + dev: true + + /loader-utils/1.4.0: + resolution: {integrity: sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==} + engines: {node: '>=4.0.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 1.0.1 + dev: true + + /loader-utils/2.0.0: + resolution: {integrity: sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==} + engines: {node: '>=8.9.0'} + dependencies: + big.js: 5.2.2 + emojis-list: 3.0.0 + json5: 2.2.0 + dev: true + + /locate-path/5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + dependencies: + p-locate: 4.1.0 + dev: true + + /lodash.camelcase/4.3.0: + resolution: {integrity: sha1-soqmKIorn8ZRA1x3EfZathkDMaY=} + dev: true + + /lodash.castarray/4.4.0: + resolution: {integrity: sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU=} + dev: true + + /lodash.debounce/4.0.8: + resolution: {integrity: sha1-gteb/zCmfEAF/9XiUVMArZyk168=} + dev: true + + /lodash.isplainobject/4.0.6: + resolution: {integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=} + dev: true + + /lodash.memoize/4.1.2: + resolution: {integrity: sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=} + dev: true + + /lodash.merge/4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + dev: true + + /lodash.topath/4.5.2: + resolution: {integrity: sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak=} + dev: true + + /lodash.uniq/4.5.0: + resolution: {integrity: sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=} + dev: true + + /lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: true + + /lower-case/2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + dependencies: + tslib: 2.3.1 + dev: true + + /lru-cache/5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + + /lru-cache/6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /magic-string/0.25.7: + resolution: {integrity: sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==} + dependencies: + sourcemap-codec: 1.4.8 + dev: true + + /make-dir/3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + dependencies: + semver: 6.3.0 + dev: true + + /md5.js/1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /md5/2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + dev: true + + /mdn-data/2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: true + + /media-typer/0.3.0: + resolution: {integrity: sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=} + engines: {node: '>= 0.6'} + dev: true + + /memfs/3.2.4: + resolution: {integrity: sha512-2mDCPhuduRPOxlfgsXF9V+uqC6Jgz8zt/bNe4d4W7d5f6pCzHrWkxLNr17jKGXd4+j2kQNsAG2HARPnt74sqVQ==} + engines: {node: '>= 4.0.0'} + dependencies: + fs-monkey: 1.0.3 + dev: true + + /merge-descriptors/1.0.1: + resolution: {integrity: sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=} + dev: true + + /merge-source-map/1.1.0: + resolution: {integrity: sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==} + dependencies: + source-map: 0.6.1 + dev: true + + /merge-stream/2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + dev: true + + /merge2/1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /methods/1.1.2: + resolution: {integrity: sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=} + engines: {node: '>= 0.6'} + dev: true + + /micromatch/4.0.4: + resolution: {integrity: sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.0 + dev: true + + /miller-rabin/4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + dependencies: + bn.js: 4.12.0 + brorand: 1.1.0 + dev: true + + /mime-db/1.49.0: + resolution: {integrity: sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==} + engines: {node: '>= 0.6'} + dev: true + + /mime-db/1.50.0: + resolution: {integrity: sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==} + engines: {node: '>= 0.6'} + dev: true + + /mime-types/2.1.32: + resolution: {integrity: sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==} + engines: {node: '>= 0.6'} + dependencies: + mime-db: 1.49.0 + dev: true + + /mime/1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: true + + /mimic-fn/2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: true + + /mini-css-extract-plugin/1.6.2_webpack@5.53.0: + resolution: {integrity: sha512-WhDvO3SjGm40oV5y26GjMJYjd2UMqrLAGKy5YS2/3QKJy2F7jgynuHTir/tgUUOiNQu5saXHdc8reo7YuhhT4Q==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.4.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.0 + schema-utils: 3.1.1 + webpack: 5.53.0_webpack-cli@4.8.0 + webpack-sources: 1.4.3 + dev: true + + /mini-svg-data-uri/1.3.3: + resolution: {integrity: sha512-+fA2oRcR1dJI/7ITmeQJDrYWks0wodlOz0pAEhKYJ2IVc1z0AnwJUsKY2fzFmPAM3Jo9J0rBx8JAA9QQSJ5PuA==} + hasBin: true + dev: true + + /minimalistic-assert/1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: true + + /minimalistic-crypto-utils/1.0.1: + resolution: {integrity: sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=} + dev: true + + /minimatch/3.0.4: + resolution: {integrity: sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==} + dependencies: + brace-expansion: 1.1.11 + dev: true + + /minimist/1.2.5: + resolution: {integrity: sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==} + dev: true + + /mkdirp/0.5.5: + resolution: {integrity: sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==} + hasBin: true + dependencies: + minimist: 1.2.5 + dev: true + + /modern-normalize/1.1.0: + resolution: {integrity: sha512-2lMlY1Yc1+CUy0gw4H95uNN7vjbpoED7NNRSBHE25nWfLBdmMzFCsPshlzbxHz+gYMcBEUN8V4pU16prcdPSgA==} + engines: {node: '>=6'} + dev: true + + /ms/2.0.0: + resolution: {integrity: sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=} + dev: true + + /ms/2.1.1: + resolution: {integrity: sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==} + dev: true + + /ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + dev: true + + /ms/2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + dev: true + + /multicast-dns-service-types/1.1.0: + resolution: {integrity: sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=} + dev: true + + /multicast-dns/6.2.3: + resolution: {integrity: sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==} + hasBin: true + dependencies: + dns-packet: 1.3.4 + thunky: 1.1.0 + dev: true + + /nanoid/3.1.25: + resolution: {integrity: sha512-rdwtIXaXCLFAQbnfqDRnI6jaRHp9fTcYBjtFKE8eezcZ7LuLjhUaQGNeMXf1HmRoCH32CLz6XwX0TtxEOS/A3Q==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: true + + /negotiator/0.6.2: + resolution: {integrity: sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==} + engines: {node: '>= 0.6'} + dev: true + + /neo-async/2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + dev: true + + /no-case/3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + dependencies: + lower-case: 2.0.2 + tslib: 2.3.1 + dev: true + + /node-emoji/1.11.0: + resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==} + dependencies: + lodash: 4.17.21 + dev: true + + /node-forge/0.10.0: + resolution: {integrity: sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==} + engines: {node: '>= 6.0.0'} + dev: true + + /node-libs-browser/2.2.1: + resolution: {integrity: sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==} + dependencies: + assert: 1.5.0 + browserify-zlib: 0.2.0 + buffer: 4.9.2 + console-browserify: 1.2.0 + constants-browserify: 1.0.0 + crypto-browserify: 3.12.0 + domain-browser: 1.2.0 + events: 3.3.0 + https-browserify: 1.0.0 + os-browserify: 0.3.0 + path-browserify: 0.0.1 + process: 0.11.10 + punycode: 1.4.1 + querystring-es3: 0.2.1 + readable-stream: 2.3.7 + stream-browserify: 2.0.2 + stream-http: 2.8.3 + string_decoder: 1.3.0 + timers-browserify: 2.0.12 + tty-browserify: 0.0.0 + url: 0.11.0 + util: 0.11.1 + vm-browserify: 1.1.2 + dev: true + + /node-notifier/9.0.1: + resolution: {integrity: sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==} + dependencies: + growly: 1.3.0 + is-wsl: 2.2.0 + semver: 7.3.5 + shellwords: 0.1.1 + uuid: 8.3.2 + which: 2.0.2 + dev: true + + /node-releases/1.1.75: + resolution: {integrity: sha512-Qe5OUajvqrqDSy6wrWFmMwfJ0jVgwiw4T3KqmbTcZ62qW0gQkheXYhcFM1+lOVcGUoRxcEcfyvFMAnDgaF1VWw==} + dev: true + + /normalize-path/3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-range/0.1.2: + resolution: {integrity: sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=} + engines: {node: '>=0.10.0'} + dev: true + + /normalize-url/6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: true + + /npm-run-path/4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + dependencies: + path-key: 3.1.1 + dev: true + + /nth-check/2.0.1: + resolution: {integrity: sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==} + dependencies: + boolbase: 1.0.0 + dev: true + + /object-assign/4.1.1: + resolution: {integrity: sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=} + engines: {node: '>=0.10.0'} + dev: true + + /object-hash/2.2.0: + resolution: {integrity: sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==} + engines: {node: '>= 6'} + dev: true + + /object-is/1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + + /object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object.assign/4.1.2: + resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + has-symbols: 1.0.2 + object-keys: 1.1.1 + dev: true + + /obuf/1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + dev: true + + /on-finished/2.3.0: + resolution: {integrity: sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=} + engines: {node: '>= 0.8'} + dependencies: + ee-first: 1.1.1 + dev: true + + /on-headers/1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: true + + /once/1.4.0: + resolution: {integrity: sha1-WDsap3WWHUsROsF9nFC6753Xa9E=} + dependencies: + wrappy: 1.0.2 + dev: true + + /onetime/5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + dependencies: + mimic-fn: 2.1.0 + dev: true + + /open/8.2.1: + resolution: {integrity: sha512-rXILpcQlkF/QuFez2BJDf3GsqpjGKbkUUToAIGo9A0Q6ZkoSGogZJulrUdwRkrAsoQvoZsrjCYt8+zblOk7JQQ==} + engines: {node: '>=12'} + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: true + + /os-browserify/0.3.0: + resolution: {integrity: sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=} + dev: true + + /p-event/4.2.0: + resolution: {integrity: sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==} + engines: {node: '>=8'} + dependencies: + p-timeout: 3.2.0 + dev: true + + /p-finally/1.0.0: + resolution: {integrity: sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=} + engines: {node: '>=4'} + dev: true + + /p-limit/2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + dependencies: + p-try: 2.2.0 + dev: true + + /p-limit/3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + dev: true + + /p-locate/4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + dependencies: + p-limit: 2.3.0 + dev: true + + /p-map/4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + dependencies: + aggregate-error: 3.1.0 + dev: true + + /p-pipe/3.1.0: + resolution: {integrity: sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==} + engines: {node: '>=8'} + dev: true + + /p-retry/4.6.1: + resolution: {integrity: sha512-e2xXGNhZOZ0lfgR9kL34iGlU8N/KO0xZnQxVEwdeOvpqNDQfdnxIYizvWtK8RglUa3bGqI8g0R/BdfzLMxRkiA==} + engines: {node: '>=8'} + dependencies: + '@types/retry': 0.12.1 + retry: 0.13.1 + dev: true + + /p-timeout/3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + dependencies: + p-finally: 1.0.0 + dev: true + + /p-try/2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: true + + /pako/1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + dev: true + + /param-case/3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + dependencies: + dot-case: 3.0.4 + tslib: 2.3.1 + dev: true + + /parent-module/1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + dev: true + + /parse-asn1/5.1.6: + resolution: {integrity: sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==} + dependencies: + asn1.js: 5.4.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + pbkdf2: 3.1.2 + safe-buffer: 5.2.1 + dev: true + + /parse-json/5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + dependencies: + '@babel/code-frame': 7.14.5 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.1.6 + dev: true + + /parseurl/1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: true + + /pascal-case/3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + dependencies: + no-case: 3.0.4 + tslib: 2.3.1 + dev: true + + /path-browserify/0.0.1: + resolution: {integrity: sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==} + dev: true + + /path-exists/4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: true + + /path-is-absolute/1.0.1: + resolution: {integrity: sha1-F0uSaHNVNP+8es5r9TpanhtcX18=} + engines: {node: '>=0.10.0'} + dev: true + + /path-key/3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: true + + /path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-to-regexp/0.1.7: + resolution: {integrity: sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=} + dev: true + + /path-type/4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /pbkdf2/3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + dev: true + + /picomatch/2.3.0: + resolution: {integrity: sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==} + engines: {node: '>=8.6'} + dev: true + + /pkg-dir/4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + dependencies: + find-up: 4.1.0 + dev: true + + /portfinder/1.0.28: + resolution: {integrity: sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==} + engines: {node: '>= 0.12.0'} + dependencies: + async: 2.6.3 + debug: 3.2.7 + mkdirp: 0.5.5 + dev: true + + /postcss-calc/8.0.0_postcss@8.3.6: + resolution: {integrity: sha512-5NglwDrcbiy8XXfPM11F3HeC6hoT9W7GUH/Zi5U/p7u3Irv4rHhdDcIZwG0llHXV4ftsBjpfWMXAnXNl4lnt8g==} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.3.6 + postcss-selector-parser: 6.0.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-colormin/5.2.0_postcss@8.3.6: + resolution: {integrity: sha512-+HC6GfWU3upe5/mqmxuqYZ9B2Wl4lcoUUNkoaX59nEWV4EtADCMiBqui111Bu8R8IvaZTmqmxrqOAqjbHIwXPw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.17.0 + caniuse-api: 3.0.0 + colord: 2.7.0 + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-convert-values/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-C3zR1Do2BkKkCgC0g3sF8TS0koF2G+mN8xxayZx3f10cIRmTaAnpgpRQZjNekTZxM2ciSPoh2IWJm0VZx8NoQg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-discard-comments/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-lgZBPTDvWrbAYY1v5GYEv8fEO/WhKOu/hmZqmCYfrpD6eyDWWzAOsl2rF29lpvziKO02Gc5GJQtlpkTmakwOWg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.3.6 + dev: true + + /postcss-discard-duplicates/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-svx747PWHKOGpAXXQkCc4k/DsWo+6bc5LsVrAsw+OU+Ibi7klFZCyX54gjYzX4TH+f2uzXjRviLARxkMurA2bA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.3.6 + dev: true + + /postcss-discard-empty/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-vfU8CxAQ6YpMxV2SvMcMIyF2LX1ZzWpy0lqHDsOdaKKLQVQGVP1pzhrI9JlsO65s66uQTfkQBKBD/A5gp9STFw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.3.6 + dev: true + + /postcss-discard-overridden/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-Y28H7y93L2BpJhrdUR2SR2fnSsT+3TVx1NmVQLbcnZWwIUpJ7mfcTC6Za9M2PG6w8j7UQRfzxqn8jU2VwFxo3Q==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.3.6 + dev: true + + /postcss-js/3.0.3: + resolution: {integrity: sha512-gWnoWQXKFw65Hk/mi2+WTQTHdPD5UJdDXZmX073EY/B3BWnYjO4F4t0VneTCnCGQ5E5GsCdMkzPaTXwl3r5dJw==} + engines: {node: '>=10.0'} + dependencies: + camelcase-css: 2.0.1 + postcss: 8.3.6 + dev: true + + /postcss-load-config/3.1.0: + resolution: {integrity: sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==} + engines: {node: '>= 10'} + peerDependencies: + ts-node: '>=9.0.0' + peerDependenciesMeta: + ts-node: + optional: true + dependencies: + import-cwd: 3.0.0 + lilconfig: 2.0.3 + yaml: 1.10.2 + dev: true + + /postcss-loader/6.1.1_postcss@8.3.6+webpack@5.53.0: + resolution: {integrity: sha512-lBmJMvRh1D40dqpWKr9Rpygwxn8M74U9uaCSeYGNKLGInbk9mXBt1ultHf2dH9Ghk6Ue4UXlXWwGMH9QdUJ5ug==} + engines: {node: '>= 12.13.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: ^5.0.0 + dependencies: + cosmiconfig: 7.0.1 + klona: 2.0.4 + postcss: 8.3.6 + semver: 7.3.5 + webpack: 5.53.0_webpack-cli@4.8.0 + dev: true + + /postcss-merge-longhand/5.0.2_postcss@8.3.6: + resolution: {integrity: sha512-BMlg9AXSI5G9TBT0Lo/H3PfUy63P84rVz3BjCFE9e9Y9RXQZD3+h3YO1kgTNsNJy7bBc1YQp8DmSnwLIW5VPcw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-color-names: 1.0.1 + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + stylehacks: 5.0.1_postcss@8.3.6 + dev: true + + /postcss-merge-rules/5.0.2_postcss@8.3.6: + resolution: {integrity: sha512-5K+Md7S3GwBewfB4rjDeol6V/RZ8S+v4B66Zk2gChRqLTCC8yjnHQ601omj9TKftS19OPGqZ/XzoqpzNQQLwbg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.17.0 + caniuse-api: 3.0.0 + cssnano-utils: 2.0.1_postcss@8.3.6 + postcss: 8.3.6 + postcss-selector-parser: 6.0.6 + vendors: 1.0.4 + dev: true + + /postcss-minify-font-values/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-7JS4qIsnqaxk+FXY1E8dHBDmraYFWmuL6cgt0T1SWGRO5bzJf8sUoelwa4P88LEWJZweHevAiDKxHlofuvtIoA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-minify-gradients/5.0.2_postcss@8.3.6: + resolution: {integrity: sha512-7Do9JP+wqSD6Prittitt2zDLrfzP9pqKs2EcLX7HJYxsxCOwrrcLt4x/ctQTsiOw+/8HYotAoqNkrzItL19SdQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + colord: 2.7.0 + cssnano-utils: 2.0.1_postcss@8.3.6 + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-minify-params/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-4RUC4k2A/Q9mGco1Z8ODc7h+A0z7L7X2ypO1B6V8057eVK6mZ6xwz6QN64nHuHLbqbclkX1wyzRnIrdZehTEHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + alphanum-sort: 1.0.2 + browserslist: 4.17.0 + cssnano-utils: 2.0.1_postcss@8.3.6 + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + uniqs: 2.0.0 + dev: true + + /postcss-minify-selectors/5.1.0_postcss@8.3.6: + resolution: {integrity: sha512-NzGBXDa7aPsAcijXZeagnJBKBPMYLaJJzB8CQh6ncvyl2sIndLVWfbcDi0SBjRWk5VqEjXvf8tYwzoKf4Z07og==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + alphanum-sort: 1.0.2 + postcss: 8.3.6 + postcss-selector-parser: 6.0.6 + dev: true + + /postcss-modules-extract-imports/3.0.0_postcss@8.3.6: + resolution: {integrity: sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.3.6 + dev: true + + /postcss-modules-local-by-default/4.0.0_postcss@8.3.6: + resolution: {integrity: sha512-sT7ihtmGSF9yhm6ggikHdV0hlziDTX7oFoXtuVWeDd3hHObNkcHRo9V3yg7vCAY7cONyxJC/XXCmmiHHcvX7bQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0_postcss@8.3.6 + postcss: 8.3.6 + postcss-selector-parser: 6.0.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-modules-scope/3.0.0_postcss@8.3.6: + resolution: {integrity: sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + postcss: 8.3.6 + postcss-selector-parser: 6.0.6 + dev: true + + /postcss-modules-values/4.0.0_postcss@8.3.6: + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 + dependencies: + icss-utils: 5.1.0_postcss@8.3.6 + postcss: 8.3.6 + dev: true + + /postcss-modules/4.2.2_postcss@8.3.6: + resolution: {integrity: sha512-/H08MGEmaalv/OU8j6bUKi/kZr2kqGF6huAW8m9UAgOLWtpFdhA14+gPBoymtqyv+D4MLsmqaF2zvIegdCxJXg==} + peerDependencies: + postcss: ^8.0.0 + dependencies: + generic-names: 2.0.1 + icss-replace-symbols: 1.1.0 + lodash.camelcase: 4.3.0 + postcss: 8.3.6 + postcss-modules-extract-imports: 3.0.0_postcss@8.3.6 + postcss-modules-local-by-default: 4.0.0_postcss@8.3.6 + postcss-modules-scope: 3.0.0_postcss@8.3.6 + postcss-modules-values: 4.0.0_postcss@8.3.6 + string-hash: 1.1.3 + dev: true + + /postcss-nested/5.0.6_postcss@8.3.6: + resolution: {integrity: sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.3.6 + postcss-selector-parser: 6.0.6 + dev: true + + /postcss-normalize-charset/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-6J40l6LNYnBdPSk+BHZ8SF+HAkS4q2twe5jnocgd+xWpz/mx/5Sa32m3W1AA8uE8XaXN+eg8trIlfu8V9x61eg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.3.6 + dev: true + + /postcss-normalize-display-values/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-uupdvWk88kLDXi5HEyI9IaAJTE3/Djbcrqq8YgjvAVuzgVuqIk3SuJWUisT2gaJbZm1H9g5k2w1xXilM3x8DjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 2.0.1_postcss@8.3.6 + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-normalize-positions/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-rvzWAJai5xej9yWqlCb1OWLd9JjW2Ex2BCPzUJrbaXmtKtgfL8dBMOOMTX6TnvQMtjk3ei1Lswcs78qKO1Skrg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-normalize-repeat-style/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-syZ2itq0HTQjj4QtXZOeefomckiV5TaUO6ReIEabCh3wgDs4Mr01pkif0MeVwKyU/LHEkPJnpwFKRxqWA/7O3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 2.0.1_postcss@8.3.6 + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-normalize-string/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-Ic8GaQ3jPMVl1OEn2U//2pm93AXUcF3wz+OriskdZ1AOuYV25OdgS7w9Xu2LO5cGyhHCgn8dMXh9bO7vi3i9pA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-normalize-timing-functions/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-cPcBdVN5OsWCNEo5hiXfLUnXfTGtSFiBU9SK8k7ii8UD7OLuznzgNRYkLZow11BkQiiqMcgPyh4ZqXEEUrtQ1Q==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 2.0.1_postcss@8.3.6 + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-normalize-unicode/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-kAtYD6V3pK0beqrU90gpCQB7g6AOfP/2KIPCVBKJM2EheVsBQmx/Iof+9zR9NFKLAx4Pr9mDhogB27pmn354nA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.17.0 + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-normalize-url/5.0.2_postcss@8.3.6: + resolution: {integrity: sha512-k4jLTPUxREQ5bpajFQZpx8bCF2UrlqOTzP9kEqcEnOfwsRshWs2+oAFIHfDQB8GO2PaUaSE0NlTAYtbluZTlHQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + is-absolute-url: 3.0.3 + normalize-url: 6.1.0 + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-normalize-whitespace/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-iPklmI5SBnRvwceb/XH568yyzK0qRVuAG+a1HFUsFRf11lEJTiQQa03a4RSCQvLKdcpX7XsI1Gen9LuLoqwiqA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-ordered-values/5.0.2_postcss@8.3.6: + resolution: {integrity: sha512-8AFYDSOYWebJYLyJi3fyjl6CqMEG/UVworjiyK1r573I56kb3e879sCJLGvR3merj+fAdPpVplXKQZv+ey6CgQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 2.0.1_postcss@8.3.6 + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-reduce-initial/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-zlCZPKLLTMAqA3ZWH57HlbCjkD55LX9dsRyxlls+wfuRfqCi5mSlZVan0heX5cHr154Dq9AfbH70LyhrSAezJw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.17.0 + caniuse-api: 3.0.0 + postcss: 8.3.6 + dev: true + + /postcss-reduce-transforms/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-a//FjoPeFkRuAguPscTVmRQUODP+f3ke2HqFNgGPwdYnpeC29RZdCBvGRGTsKpMURb/I3p6jdKoBQ2zI+9Q7kA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-utils: 2.0.1_postcss@8.3.6 + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + dev: true + + /postcss-selector-parser/6.0.6: + resolution: {integrity: sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-svgo/5.0.2_postcss@8.3.6: + resolution: {integrity: sha512-YzQuFLZu3U3aheizD+B1joQ94vzPfE6BNUcSYuceNxlVnKKsOtdo6hL9/zyC168Q8EwfLSgaDSalsUGa9f2C0A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.3.6 + postcss-value-parser: 4.1.0 + svgo: 2.6.1 + dev: true + + /postcss-unique-selectors/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-gwi1NhHV4FMmPn+qwBNuot1sG1t2OmacLQ/AX29lzyggnjd+MnVD5uqQmpXO3J17KGL2WAxQruj1qTd3H0gG/w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + alphanum-sort: 1.0.2 + postcss: 8.3.6 + postcss-selector-parser: 6.0.6 + uniqs: 2.0.0 + dev: true + + /postcss-value-parser/3.3.1: + resolution: {integrity: sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==} + dev: true + + /postcss-value-parser/4.1.0: + resolution: {integrity: sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==} + dev: true + + /postcss/7.0.36: + resolution: {integrity: sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==} + engines: {node: '>=6.0.0'} + dependencies: + chalk: 2.4.2 + source-map: 0.6.1 + supports-color: 6.1.0 + dev: true + + /postcss/8.3.6: + resolution: {integrity: sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==} + engines: {node: ^10 || ^12 || >=14} + dependencies: + colorette: 1.4.0 + nanoid: 3.1.25 + source-map-js: 0.6.2 + dev: true + + /pretty-hrtime/1.0.3: + resolution: {integrity: sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=} + engines: {node: '>= 0.8'} + dev: true + + /pretty-time/1.1.0: + resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==} + engines: {node: '>=4'} + dev: true + + /process-nextick-args/2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + dev: true + + /process/0.11.10: + resolution: {integrity: sha1-czIwDoQBYb2j5podHZGn1LwW8YI=} + engines: {node: '>= 0.6.0'} + dev: true + + /proxy-addr/2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + dev: true + + /public-encrypt/4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + dependencies: + bn.js: 4.12.0 + browserify-rsa: 4.1.0 + create-hash: 1.2.0 + parse-asn1: 5.1.6 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + + /punycode/1.3.2: + resolution: {integrity: sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=} + dev: true + + /punycode/1.4.1: + resolution: {integrity: sha1-wNWmOycYgArY4esPpSachN1BhF4=} + dev: true + + /punycode/2.1.1: + resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + engines: {node: '>=6'} + dev: true + + /purgecss/4.0.3: + resolution: {integrity: sha512-PYOIn5ibRIP34PBU9zohUcCI09c7drPJJtTDAc0Q6QlRz2/CHQ8ywGLdE7ZhxU2VTqB7p5wkvj5Qcm05Rz3Jmw==} + hasBin: true + dependencies: + commander: 6.2.1 + glob: 7.1.7 + postcss: 8.3.6 + postcss-selector-parser: 6.0.6 + dev: true + + /qs/6.7.0: + resolution: {integrity: sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==} + engines: {node: '>=0.6'} + dev: true + + /querystring-es3/0.2.1: + resolution: {integrity: sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=} + engines: {node: '>=0.4.x'} + dev: true + + /querystring/0.2.0: + resolution: {integrity: sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=} + engines: {node: '>=0.4.x'} + deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead. + dev: true + + /queue-microtask/1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: true + + /quick-lru/5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: true + + /randombytes/2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /randomfill/1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + dev: true + + /range-parser/1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: true + + /raw-body/2.4.0: + resolution: {integrity: sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==} + engines: {node: '>= 0.8'} + dependencies: + bytes: 3.1.0 + http-errors: 1.7.2 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + dev: true + + /readable-stream/2.3.7: + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + dev: true + + /readable-stream/3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: true + + /readdirp/3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} + dependencies: + picomatch: 2.3.0 + dev: true + + /rechoir/0.7.1: + resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==} + engines: {node: '>= 0.10'} + dependencies: + resolve: 1.20.0 + dev: true + + /reduce-css-calc/2.1.8: + resolution: {integrity: sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==} + dependencies: + css-unit-converter: 1.1.2 + postcss-value-parser: 3.3.1 + dev: true + + /regenerate-unicode-properties/9.0.0: + resolution: {integrity: sha512-3E12UeNSPfjrgwjkR81m5J7Aw/T55Tu7nUyZVQYCKEOs+2dkxEY+DpPtZzO4YruuiPb7NkYLVcyJC4+zCbk5pA==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + dev: true + + /regenerate/1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: true + + /regenerator-runtime/0.13.9: + resolution: {integrity: sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==} + dev: true + + /regenerator-transform/0.14.5: + resolution: {integrity: sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==} + dependencies: + '@babel/runtime': 7.15.4 + dev: true + + /regex-parser/2.2.11: + resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} + dev: true + + /regexp.prototype.flags/1.3.1: + resolution: {integrity: sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.3 + dev: true + + /regexpu-core/4.8.0: + resolution: {integrity: sha512-1F6bYsoYiz6is+oz70NWur2Vlh9KWtswuRuzJOfeYUrfPX2o8n74AnUVaOGDbUqVGO9fNHu48/pjJO4sNVwsOg==} + engines: {node: '>=4'} + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 9.0.0 + regjsgen: 0.5.2 + regjsparser: 0.7.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.0.0 + dev: true + + /regjsgen/0.5.2: + resolution: {integrity: sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==} + dev: true + + /regjsparser/0.7.0: + resolution: {integrity: sha512-A4pcaORqmNMDVwUjWoTzuhwMGpP+NykpfqAsEgI1FSH/EzC7lrN5TMd+kN8YCovX+jMpu8eaqXgXPCa0g8FQNQ==} + hasBin: true + dependencies: + jsesc: 0.5.0 + dev: true + + /relateurl/0.2.7: + resolution: {integrity: sha1-VNvzd+UUQKypCkzSdGANP/LYiKk=} + engines: {node: '>= 0.10'} + dev: true + + /replace-ext/1.0.1: + resolution: {integrity: sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==} + engines: {node: '>= 0.10'} + dev: true + + /require-directory/2.1.1: + resolution: {integrity: sha1-jGStX9MNqxyXbiNE/+f3kqam30I=} + engines: {node: '>=0.10.0'} + dev: true + + /requires-port/1.0.0: + resolution: {integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=} + dev: true + + /resolve-cwd/3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + dependencies: + resolve-from: 5.0.0 + dev: true + + /resolve-from/4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: true + + /resolve-from/5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + dev: true + + /resolve-url-loader/4.0.0: + resolution: {integrity: sha512-05VEMczVREcbtT7Bz+C+96eUO5HDNvdthIiMB34t7FcF8ehcu4wC0sSgPUubs3XW2Q3CNLJk/BJrCU9wVRymiA==} + engines: {node: '>=8.9'} + peerDependencies: + rework: 1.0.1 + rework-visit: 1.0.0 + peerDependenciesMeta: + rework: + optional: true + rework-visit: + optional: true + dependencies: + adjust-sourcemap-loader: 4.0.0 + convert-source-map: 1.8.0 + loader-utils: 2.0.0 + postcss: 7.0.36 + source-map: 0.6.1 + dev: true + + /resolve/1.20.0: + resolution: {integrity: sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==} + dependencies: + is-core-module: 2.6.0 + path-parse: 1.0.7 + dev: true + + /retry/0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + dev: true + + /reusify/1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: true + + /rgb-regex/1.0.1: + resolution: {integrity: sha1-wODWiC3w4jviVKR16O3UGRX+rrE=} + dev: true + + /rgba-regex/1.0.0: + resolution: {integrity: sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=} + dev: true + + /rimraf/3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.1.7 + dev: true + + /ripemd160/2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + dependencies: + hash-base: 3.1.0 + inherits: 2.0.4 + dev: true + + /run-parallel/1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + dev: true + + /safe-buffer/5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: true + + /safe-buffer/5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: true + + /safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: true + + /sass-loader/12.1.0_sass@1.41.1: + resolution: {integrity: sha512-FVJZ9kxVRYNZTIe2xhw93n3xJNYZADr+q69/s98l9nTCrWASo+DR2Ot0s5xTKQDDEosUkatsGeHxcH4QBp5bSg==} + engines: {node: '>= 12.13.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 + sass: ^1.3.0 + webpack: ^5.0.0 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true + dependencies: + klona: 2.0.4 + neo-async: 2.6.2 + sass: 1.41.1 + dev: true + + /sass/1.41.1: + resolution: {integrity: sha512-vIjX7izRxw3Wsiez7SX7D+j76v7tenfO18P59nonjr/nzCkZuoHuF7I/Fo0ZRZPKr88v29ivIdE9BqGDgQD/Nw==} + engines: {node: '>=8.9.0'} + hasBin: true + dependencies: + chokidar: 3.5.2 + dev: true + + /schema-utils/2.7.1: + resolution: {integrity: sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.9 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: true + + /schema-utils/3.1.1: + resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} + engines: {node: '>= 10.13.0'} + dependencies: + '@types/json-schema': 7.0.9 + ajv: 6.12.6 + ajv-keywords: 3.5.2_ajv@6.12.6 + dev: true + + /select-hose/2.0.0: + resolution: {integrity: sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=} + dev: true + + /selfsigned/1.10.11: + resolution: {integrity: sha512-aVmbPOfViZqOZPgRBT0+3u4yZFHpmnIghLMlAcb5/xhp5ZtB/RVnKhz5vl2M32CLXAqR4kha9zfhNg0Lf/sxKA==} + dependencies: + node-forge: 0.10.0 + dev: true + + /semver/6.3.0: + resolution: {integrity: sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==} + hasBin: true + dev: true + + /semver/7.0.0: + resolution: {integrity: sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==} + hasBin: true + dev: true + + /semver/7.3.5: + resolution: {integrity: sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 + dev: true + + /send/0.17.1: + resolution: {integrity: sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==} + engines: {node: '>= 0.8.0'} + 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.7.3 + mime: 1.6.0 + ms: 2.1.1 + on-finished: 2.3.0 + range-parser: 1.2.1 + statuses: 1.5.0 + dev: true + + /serialize-javascript/6.0.0: + resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} + dependencies: + randombytes: 2.1.0 + dev: true + + /serve-index/1.9.1: + resolution: {integrity: sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=} + engines: {node: '>= 0.8.0'} + dependencies: + accepts: 1.3.7 + batch: 0.6.1 + debug: 2.6.9 + escape-html: 1.0.3 + http-errors: 1.6.3 + mime-types: 2.1.32 + parseurl: 1.3.3 + dev: true + + /serve-static/1.14.1: + resolution: {integrity: sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==} + engines: {node: '>= 0.8.0'} + dependencies: + encodeurl: 1.0.2 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 0.17.1 + dev: true + + /setimmediate/1.0.5: + resolution: {integrity: sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=} + dev: true + + /setprototypeof/1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + dev: true + + /setprototypeof/1.1.1: + resolution: {integrity: sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==} + dev: true + + /sha.js/2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + dev: true + + /shallow-clone/3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} + dependencies: + kind-of: 6.0.3 + dev: true + + /shebang-command/2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + dev: true + + /shebang-regex/3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: true + + /shellwords/0.1.1: + resolution: {integrity: sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==} + dev: true + + /signal-exit/3.0.4: + resolution: {integrity: sha512-rqYhcAnZ6d/vTPGghdrw7iumdcbXpsk1b8IG/rz+VWV51DM0p7XCtMoJ3qhPLIbp3tvyt3pKRbaaEMZYpHto8Q==} + dev: true + + /simple-swizzle/0.2.2: + resolution: {integrity: sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=} + dependencies: + is-arrayish: 0.3.2 + dev: true + + /slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /sockjs/0.3.21: + resolution: {integrity: sha512-DhbPFGpxjc6Z3I+uX07Id5ZO2XwYsWOrYjaSeieES78cq+JaJvVe5q/m1uvjIQhXinhIeCFRH6JgXe+mvVMyXw==} + dependencies: + faye-websocket: 0.11.4 + uuid: 3.4.0 + websocket-driver: 0.7.4 + dev: true + + /source-list-map/2.0.1: + resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} + dev: true + + /source-map-js/0.6.2: + resolution: {integrity: sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map-support/0.5.20: + resolution: {integrity: sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==} + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + dev: true + + /source-map/0.5.7: + resolution: {integrity: sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=} + engines: {node: '>=0.10.0'} + dev: true + + /source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + dev: true + + /source-map/0.7.3: + resolution: {integrity: sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==} + engines: {node: '>= 8'} + dev: true + + /sourcemap-codec/1.4.8: + resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} + dev: true + + /spdy-transport/3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} + dependencies: + debug: 4.3.2 + detect-node: 2.1.0 + hpack.js: 2.1.6 + obuf: 1.1.2 + readable-stream: 3.6.0 + wbuf: 1.7.3 + transitivePeerDependencies: + - supports-color + dev: true + + /spdy/4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} + dependencies: + debug: 4.3.2 + handle-thing: 2.0.1 + http-deceiver: 1.2.7 + select-hose: 2.0.0 + spdy-transport: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + + /stable/0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + dev: true + + /statuses/1.5.0: + resolution: {integrity: sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=} + engines: {node: '>= 0.6'} + dev: true + + /std-env/2.3.0: + resolution: {integrity: sha512-4qT5B45+Kjef2Z6pE0BkskzsH0GO7GrND0wGlTM1ioUe3v0dGYx9ZJH0Aro/YyA8fqQ5EyIKDRjZojJYMFTflw==} + dependencies: + ci-info: 3.2.0 + dev: true + + /stream-browserify/2.0.2: + resolution: {integrity: sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==} + dependencies: + inherits: 2.0.4 + readable-stream: 2.3.7 + dev: true + + /stream-http/2.8.3: + resolution: {integrity: sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==} + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.4 + readable-stream: 2.3.7 + to-arraybuffer: 1.0.1 + xtend: 4.0.2 + dev: true + + /string-hash/1.1.3: + resolution: {integrity: sha1-6Kr8CsGFW0Zmkp7X3RJ1311sgRs=} + dev: true + + /string-width/4.2.2: + resolution: {integrity: sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==} + engines: {node: '>=8'} + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.0 + dev: true + + /string_decoder/1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + dependencies: + safe-buffer: 5.1.2 + dev: true + + /string_decoder/1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: true + + /strip-ansi/6.0.0: + resolution: {integrity: sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + dev: true + + /strip-ansi/7.0.1: + resolution: {integrity: sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: true + + /strip-final-newline/2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: true + + /style-loader/2.0.0_webpack@5.53.0: + resolution: {integrity: sha512-Z0gYUJmzZ6ZdRUqpg1r8GsaFKypE+3xAzuFeMuoHgjc9KZv3wMyCRjQIWEbhoFSq7+7yoHXySDJyyWQaPajeiQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + loader-utils: 2.0.0 + schema-utils: 3.1.1 + webpack: 5.53.0_webpack-cli@4.8.0 + dev: true + + /stylehacks/5.0.1_postcss@8.3.6: + resolution: {integrity: sha512-Es0rVnHIqbWzveU1b24kbw92HsebBepxfcqe5iix7t9j0PQqhs0IxXVXv0pY2Bxa08CgMkzD6OWql7kbGOuEdA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + browserslist: 4.17.0 + postcss: 8.3.6 + postcss-selector-parser: 6.0.6 + dev: true + + /supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color/6.1.0: + resolution: {integrity: sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==} + engines: {node: '>=6'} + dependencies: + has-flag: 3.0.0 + dev: true + + /supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + dev: true + + /supports-color/8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + dev: true + + /svgo/2.6.1: + resolution: {integrity: sha512-SDo274ymyG1jJ3HtCr3hkfwS8NqWdF0fMr6xPlrJ5y2QMofsQxIEFWgR1epwb197teKGgnZbzozxvJyIeJpE2Q==} + engines: {node: '>=10.13.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + colorette: 1.4.0 + commander: 7.2.0 + css-select: 4.1.3 + css-tree: 1.1.3 + csso: 4.2.0 + stable: 0.1.8 + dev: true + + /tailwindcss/2.2.15_4dc2d3db2b138fb8fa7d5c7b0c803aba: + resolution: {integrity: sha512-WgV41xTMbnSoTNMNnJvShQZ+8GmY86DmXTrCgnsveNZJdlybfwCItV8kAqjYmU49YiFr+ofzmT1JlAKajBZboQ==} + engines: {node: '>=12.13.0'} + hasBin: true + peerDependencies: + autoprefixer: ^10.0.2 + postcss: ^8.0.9 + dependencies: + arg: 5.0.1 + autoprefixer: 10.3.4_postcss@8.3.6 + bytes: 3.1.0 + chalk: 4.1.2 + chokidar: 3.5.2 + color: 4.0.1 + cosmiconfig: 7.0.1 + detective: 5.2.0 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.2.7 + fs-extra: 10.0.0 + glob-parent: 6.0.1 + html-tags: 3.1.0 + is-color-stop: 1.1.0 + is-glob: 4.0.1 + lodash: 4.17.21 + lodash.topath: 4.5.2 + modern-normalize: 1.1.0 + node-emoji: 1.11.0 + normalize-path: 3.0.0 + object-hash: 2.2.0 + postcss: 8.3.6 + postcss-js: 3.0.3 + postcss-load-config: 3.1.0 + postcss-nested: 5.0.6_postcss@8.3.6 + postcss-selector-parser: 6.0.6 + postcss-value-parser: 4.1.0 + pretty-hrtime: 1.0.3 + purgecss: 4.0.3 + quick-lru: 5.1.1 + reduce-css-calc: 2.1.8 + resolve: 1.20.0 + tmp: 0.2.1 + transitivePeerDependencies: + - ts-node + dev: true + + /tapable/2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: true + + /terser-webpack-plugin/5.2.4_webpack@5.53.0: + resolution: {integrity: sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: ^5.1.0 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + jest-worker: 27.2.0 + p-limit: 3.1.0 + schema-utils: 3.1.1 + serialize-javascript: 6.0.0 + source-map: 0.6.1 + terser: 5.8.0 + webpack: 5.53.0_webpack-cli@4.8.0 + dev: true + + /terser/4.8.0: + resolution: {integrity: sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + commander: 2.20.3 + source-map: 0.6.1 + source-map-support: 0.5.20 + dev: true + + /terser/5.8.0: + resolution: {integrity: sha512-f0JH+6yMpneYcRJN314lZrSwu9eKkUFEHLN/kNy8ceh8gaRiLgFPJqrB9HsXjhEGdv4e/ekjTOFxIlL6xlma8A==} + engines: {node: '>=10'} + hasBin: true + dependencies: + commander: 2.20.3 + source-map: 0.7.3 + source-map-support: 0.5.20 + dev: true + + /text-table/0.2.0: + resolution: {integrity: sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=} + dev: true + + /thunky/1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + dev: true + + /timers-browserify/2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} + dependencies: + setimmediate: 1.0.5 + dev: true + + /timsort/0.3.0: + resolution: {integrity: sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=} + dev: true + + /tmp/0.2.1: + resolution: {integrity: sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==} + engines: {node: '>=8.17.0'} + dependencies: + rimraf: 3.0.2 + dev: true + + /to-arraybuffer/1.0.1: + resolution: {integrity: sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M=} + dev: true + + /to-fast-properties/2.0.0: + resolution: {integrity: sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=} + engines: {node: '>=4'} + dev: true + + /to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /toidentifier/1.0.0: + resolution: {integrity: sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==} + engines: {node: '>=0.6'} + dev: true + + /tslib/2.3.1: + resolution: {integrity: sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==} + dev: true + + /tty-browserify/0.0.0: + resolution: {integrity: sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=} + dev: true + + /type-fest/0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + dev: true + + /type-is/1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.32 + dev: true + + /unicode-canonical-property-names-ecmascript/2.0.0: + resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + engines: {node: '>=4'} + dev: true + + /unicode-match-property-ecmascript/2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-property-aliases-ecmascript: 2.0.0 + dev: true + + /unicode-match-property-value-ecmascript/2.0.0: + resolution: {integrity: sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==} + engines: {node: '>=4'} + dev: true + + /unicode-property-aliases-ecmascript/2.0.0: + resolution: {integrity: sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==} + engines: {node: '>=4'} + dev: true + + /uniqs/2.0.0: + resolution: {integrity: sha1-/+3ks2slKQaW5uFl1KWe25mOawI=} + dev: true + + /universalify/2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + dev: true + + /unpipe/1.0.0: + resolution: {integrity: sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=} + engines: {node: '>= 0.8'} + dev: true + + /uri-js/4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.1.1 + dev: true + + /url/0.11.0: + resolution: {integrity: sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=} + dependencies: + punycode: 1.3.2 + querystring: 0.2.0 + dev: true + + /util-deprecate/1.0.2: + resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} + dev: true + + /util/0.10.3: + resolution: {integrity: sha1-evsa/lCAUkZInj23/g7TeTNqwPk=} + dependencies: + inherits: 2.0.1 + dev: true + + /util/0.11.1: + resolution: {integrity: sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==} + dependencies: + inherits: 2.0.3 + dev: true + + /utils-merge/1.0.1: + resolution: {integrity: sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=} + engines: {node: '>= 0.4.0'} + dev: true + + /uuid/3.4.0: + resolution: {integrity: sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==} + deprecated: Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details. + hasBin: true + dev: true + + /uuid/8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: true + + /v8-compile-cache/2.3.0: + resolution: {integrity: sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==} + dev: true + + /vary/1.1.2: + resolution: {integrity: sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=} + engines: {node: '>= 0.8'} + dev: true + + /vendors/1.0.4: + resolution: {integrity: sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==} + dev: true + + /vm-browserify/1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + dev: true + + /vue-loader/16.5.0_@vue+compiler-sfc@3.2.11: + resolution: {integrity: sha512-WXh+7AgFxGTgb5QAkQtFeUcHNIEq3PGVQ8WskY5ZiFbWBkOwcCPRs4w/2tVyTbh2q6TVRlO3xfvIukUtjsu62A==} + peerDependencies: + '@vue/compiler-sfc': ^3.0.8 + webpack: ^4.1.0 || ^5.0.0-0 + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + dependencies: + '@vue/compiler-sfc': 3.2.11 + chalk: 4.1.2 + hash-sum: 2.0.0 + loader-utils: 2.0.0 + dev: true + + /vue-router/4.0.11_vue@3.2.11: + resolution: {integrity: sha512-sha6I8fx9HWtvTrFZfxZkiQQBpqSeT+UCwauYjkdOQYRvwsGwimlQQE2ayqUwuuXGzquFpCPoXzYKWlzL4OuXg==} + peerDependencies: + vue: ^3.0.0 + dependencies: + '@vue/devtools-api': 6.0.0-beta.15 + vue: 3.2.11 + dev: true + + /vue-style-loader/4.1.3: + resolution: {integrity: sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==} + dependencies: + hash-sum: 1.0.2 + loader-utils: 1.4.0 + dev: true + + /vue-toastification/2.0.0-rc.1_vue@3.2.11: + resolution: {integrity: sha512-hjauv/FyesNZdwcr5m1SCyvu1JmlB+Ts5bTptDLDmsYYlj6Oqv8NYakiElpCF+Abwkn9J/AChh6FwkTL1HOb7Q==} + peerDependencies: + vue: ^3.0.2 + dependencies: + vue: 3.2.11 + dev: false + + /vue/3.2.11: + resolution: {integrity: sha512-JkI3/eIgfk4E0f/p319TD3EZgOwBQfftgnkRsXlT7OrRyyiyoyUXn6embPGZXSBxD3LoZ9SWhJoxLhFh5AleeA==} + dependencies: + '@vue/compiler-dom': 3.2.11 + '@vue/runtime-dom': 3.2.11 + '@vue/shared': 3.2.11 + dev: true + + /watchpack/2.2.0: + resolution: {integrity: sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==} + engines: {node: '>=10.13.0'} + dependencies: + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.8 + dev: true + + /wbuf/1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} + dependencies: + minimalistic-assert: 1.0.1 + dev: true + + /webpack-cli/4.8.0_98674a6cb9be10449d20d833653b2ace: + resolution: {integrity: sha512-+iBSWsX16uVna5aAYN6/wjhJy1q/GKk4KjKvfg90/6hykCTSgozbfz5iRgDTSJt/LgSbYxdBX3KBHeobIs+ZEw==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + '@webpack-cli/generators': '*' + '@webpack-cli/migrate': '*' + webpack: 4.x.x || 5.x.x + webpack-bundle-analyzer: '*' + webpack-dev-server: '*' + peerDependenciesMeta: + '@webpack-cli/generators': + optional: true + '@webpack-cli/migrate': + optional: true + webpack-bundle-analyzer: + optional: true + webpack-dev-server: + optional: true + dependencies: + '@discoveryjs/json-ext': 0.5.5 + '@webpack-cli/configtest': 1.0.4_webpack-cli@4.8.0+webpack@5.53.0 + '@webpack-cli/info': 1.3.0_webpack-cli@4.8.0 + '@webpack-cli/serve': 1.5.2_ff295ad2f9b07cb15ca327fa043b03b7 + colorette: 1.4.0 + commander: 7.2.0 + execa: 5.1.1 + fastest-levenshtein: 1.0.12 + import-local: 3.0.2 + interpret: 2.2.0 + rechoir: 0.7.1 + v8-compile-cache: 2.3.0 + webpack: 5.53.0_webpack-cli@4.8.0 + webpack-dev-server: 4.1.1_webpack-cli@4.8.0+webpack@5.53.0 + webpack-merge: 5.8.0 + dev: true + + /webpack-dev-middleware/5.1.0_webpack@5.53.0: + resolution: {integrity: sha512-oT660AR1gOnU/NTdUQi3EiGR0iXG7CFxmKsj3ylWCBA2khJ8LFHK+sKv3BZEsC11gl1eChsltRhzUq7nWj7XIQ==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + dependencies: + colorette: 1.4.0 + memfs: 3.2.4 + mime-types: 2.1.32 + range-parser: 1.2.1 + schema-utils: 3.1.1 + webpack: 5.53.0_webpack-cli@4.8.0 + dev: true + + /webpack-dev-server/4.1.1_webpack-cli@4.8.0+webpack@5.53.0: + resolution: {integrity: sha512-Kl1mnCEw8Cy1Kw173gCxLIB242LfPKEOj9WoKhKz/MbryZTNrILzOJTk8kiczw/YUEPzn3gcltCQv6hDsLudRg==} + engines: {node: '>= 12.13.0'} + hasBin: true + peerDependencies: + webpack: ^4.37.0 || ^5.0.0 + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + ansi-html-community: 0.0.8 + bonjour: 3.5.0 + chokidar: 3.5.2 + colorette: 1.4.0 + compression: 1.7.4 + connect-history-api-fallback: 1.6.0 + del: 6.0.0 + express: 4.17.1 + graceful-fs: 4.2.8 + html-entities: 2.3.2 + http-proxy-middleware: 2.0.1 + internal-ip: 6.2.0 + ipaddr.js: 2.0.1 + open: 8.2.1 + p-retry: 4.6.1 + portfinder: 1.0.28 + schema-utils: 3.1.1 + selfsigned: 1.10.11 + serve-index: 1.9.1 + sockjs: 0.3.21 + spdy: 4.0.2 + strip-ansi: 7.0.1 + url: 0.11.0 + webpack: 5.53.0_webpack-cli@4.8.0 + webpack-cli: 4.8.0_98674a6cb9be10449d20d833653b2ace + webpack-dev-middleware: 5.1.0_webpack@5.53.0 + ws: 8.2.2 + transitivePeerDependencies: + - bufferutil + - debug + - supports-color + - utf-8-validate + dev: true + + /webpack-merge/5.8.0: + resolution: {integrity: sha512-/SaI7xY0831XwP6kzuwhKWVKDP9t1QY1h65lAFLbZqMPIuYcD9QAW4u9STIbU9kaJbPBB/geU/gLr1wDjOhQ+Q==} + engines: {node: '>=10.0.0'} + dependencies: + clone-deep: 4.0.1 + wildcard: 2.0.0 + dev: true + + /webpack-notifier/1.13.0: + resolution: {integrity: sha512-QLk6l/TZKGhyN6Hd1zobaiYno7S9YPX3wH86+YOSufHes77SegGhnGdj+4vrLDFK5A4ZKoQD5GRXXFnM0h0N8A==} + dependencies: + node-notifier: 9.0.1 + strip-ansi: 6.0.0 + dev: true + + /webpack-sources/1.4.3: + resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==} + dependencies: + source-list-map: 2.0.1 + source-map: 0.6.1 + dev: true + + /webpack-sources/3.2.1: + resolution: {integrity: sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==} + engines: {node: '>=10.13.0'} + dev: true + + /webpack/5.53.0_webpack-cli@4.8.0: + resolution: {integrity: sha512-RZ1Z3z3ni44snoWjfWeHFyzvd9HMVYDYC5VXmlYUT6NWgEOWdCNpad5Fve2CzzHoRED7WtsKe+FCyP5Vk4pWiQ==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true + dependencies: + '@types/eslint-scope': 3.7.1 + '@types/estree': 0.0.50 + '@webassemblyjs/ast': 1.11.1 + '@webassemblyjs/wasm-edit': 1.11.1 + '@webassemblyjs/wasm-parser': 1.11.1 + acorn: 8.5.0 + acorn-import-assertions: 1.7.6_acorn@8.5.0 + browserslist: 4.17.0 + chrome-trace-event: 1.0.3 + enhanced-resolve: 5.8.2 + es-module-lexer: 0.7.1 + eslint-scope: 5.1.1 + events: 3.3.0 + glob-to-regexp: 0.4.1 + graceful-fs: 4.2.8 + json-parse-better-errors: 1.0.2 + loader-runner: 4.2.0 + mime-types: 2.1.32 + neo-async: 2.6.2 + schema-utils: 3.1.1 + tapable: 2.2.1 + terser-webpack-plugin: 5.2.4_webpack@5.53.0 + watchpack: 2.2.0 + webpack-cli: 4.8.0_98674a6cb9be10449d20d833653b2ace + webpack-sources: 3.2.1 + transitivePeerDependencies: + - '@swc/core' + - esbuild + - uglify-js + dev: true + + /webpackbar/5.0.0-3_webpack@5.53.0: + resolution: {integrity: sha512-viW6KCYjMb0NPoDrw2jAmLXU2dEOhRrtku28KmOfeE1vxbfwCYuTbTaMhnkrCZLFAFyY9Q49Z/jzYO80Dw5b8g==} + engines: {node: '>=10'} + peerDependencies: + webpack: 3 || 4 || 5 + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + consola: 2.15.3 + figures: 3.2.0 + pretty-time: 1.1.0 + std-env: 2.3.0 + text-table: 0.2.0 + webpack: 5.53.0_webpack-cli@4.8.0 + wrap-ansi: 7.0.0 + dev: true + + /websocket-driver/0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} + dependencies: + http-parser-js: 0.5.3 + safe-buffer: 5.2.1 + websocket-extensions: 0.1.4 + dev: true + + /websocket-extensions/0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + dev: true + + /which/2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + dev: true + + /wildcard/2.0.0: + resolution: {integrity: sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==} + dev: true + + /wrap-ansi/7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.2 + strip-ansi: 6.0.0 + dev: true + + /wrappy/1.0.2: + resolution: {integrity: sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=} + dev: true + + /ws/8.2.2: + resolution: {integrity: sha512-Q6B6H2oc8QY3llc3cB8kVmQ6pnJWVQbP7Q5algTcIxx7YEpc0oU4NBVHlztA7Ekzfhw2r0rPducMUiCGWKQRzw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + /xtend/4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + dev: true + + /y18n/5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + dev: true + + /yallist/3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: true + + /yallist/4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yaml/1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: true + + /yargs-parser/20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + dev: true + + /yargs/17.1.1: + resolution: {integrity: sha512-c2k48R0PwKIqKhPMWjeiF6y2xY/gPMUlro0sgxqXpbOIohWiLNXWslsootttv7E1e73QPAMQSg5FeySbVcpsPQ==} + engines: {node: '>=12'} + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.2 + y18n: 5.0.8 + yargs-parser: 20.2.9 + dev: true + + /yocto-queue/0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: true diff --git a/public/.gitignore b/public/.gitignore new file mode 100644 index 0000000..f4c3747 --- /dev/null +++ b/public/.gitignore @@ -0,0 +1,2 @@ +/* +!.gitignore \ No newline at end of file diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..d8d44c0 --- /dev/null +++ b/readme.txt @@ -0,0 +1,127 @@ +=== Asura Connector === +Contributors: dPlugins +Donate link: https://go.oxyrealm.com/donate +Tags: oxygen builder, license, design set, ecommerce, easy digital download, woocommerce +Requires at least: 5.5 +Tested up to: 5.8 +Stable tag: 4.1.0 +Requires PHP: 7.4 +License: GPLv2 or later +License URI: https://www.gnu.org/licenses/gpl-2.0.html + +Access to design sets collections managed by [Asura](https://go.oxyrealm.com/asura) plugin. + + +== Description == + +### Asura Connector v4: an accompanying plugin to access the design set that is managed by the [Asura v4.x](https://go.oxyrealm.com/asura) plugin. + +You should install the Asura Connector plugin on your own WordPress website to access the design set from your seller. + +#### Access Designset in Oxygen Editor + +You can access the design sets collection right in your Oxygen Editor. + +#### Note: version 3.x or ealier version download link + +The old version can be downloaded from [ADVANCED OPTIONS section on Advanced View page](https://wordpress.org/plugins/asura-connector/advanced/) +Please read the changelog carefully on [Development page](https://wordpress.org/plugins/asura-connector/#developers) + +### Further Reading + +For more info on selling designs built with Oxygen Builder, check out the following: + +* The [Asura Connector](https://go.oxyrealm.com/connector) official homepage. + + +== Installation == + +Please [read documentation](https://go.oxyrealm.com/connector) on Asura Connector website for instruction how to install the Asura Connector plugin. + + +== Frequently Asked Questions == + += Who does need Asura Connector v4.x plugin? = + +If you are purchasing Oxygen Builder design sets that managed by Asura v4.x plugin, +You should use the Asura Connector v4.x plugin on your own WordPress website to access the +design set from your seller. Please ask your design set seller for complete information. + + +== Changelog == + +For more information, see [Releases](https://go.oxyrealm.com/changelog). + += 4.1.0 = + +Release Date: + +* Improved: Cleaning Codebase +* Aether plugin no longer required to run the Asura Connector plugin 😁 + += 4.0.5 = + +Release Date: + +* Resource: New documentation https://asura.docs.oxyrealm.com/guide/asura-connector.html +* Improved: Plugin uninstall action should completely remove the plugin + += 4.0.0 = + +Release Date: + +* Compatibility: Asura v4.x or later +* Change: (warning!) Not compatible with Asura v3 or earlier version +* Change: (warning!) Not compatible with Connector v3 data +* Improved: The design library panel on Oxygen Builder Editor now fully integrated + += 3.2.0 = + +Release Date: + +* Fixed: Conflict with Asura plugin on same WordPress installation +* Improved: Leaner codebase + += 3.1.2 = + +Release Date: + +* Improved: Leaner codebase +* New: Asura Connector now requiring Aether plugin installed +* New: The plugin dashboard now moved under Aether menu + += 3.0.6 = + +Release Date: April 17th, 2021 + +* Improved: Install Wizard will apply on selected property + += 3.0.5 = + +Release Date: April 16th, 2021 + +* Fixed: Fix library conflict on Oxygen editor +* Improved: Leaner codebase + += 3.0.4 = + +Release Date: March 1st, 2021 + +* Fixed: Install Wizard import data validation + += 3.0.3 = + +Release Date: February 26th, 2021 + +* New: Install Wizard +* Improved: The connector button on oxygen editor moved to top bar + += 3.0.0 = + +Release Date: February 1st, 2021 + +* 🐣 Initial release +* Compatibility: Asura v3.x + + +== Upgrade Notice == diff --git a/resources/img/icon.svg b/resources/img/icon.svg new file mode 100644 index 0000000..2e231d7 --- /dev/null +++ b/resources/img/icon.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/resources/img/loading/wave.svg b/resources/img/loading/wave.svg new file mode 100644 index 0000000..cd2a865 --- /dev/null +++ b/resources/img/loading/wave.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/resources/js/admin/App.vue b/resources/js/admin/App.vue new file mode 100644 index 0000000..86ff44e --- /dev/null +++ b/resources/js/admin/App.vue @@ -0,0 +1,5 @@ + \ No newline at end of file diff --git a/resources/js/admin/UI/LoadingSvg.vue b/resources/js/admin/UI/LoadingSvg.vue new file mode 100644 index 0000000..1dbf5b4 --- /dev/null +++ b/resources/js/admin/UI/LoadingSvg.vue @@ -0,0 +1,42 @@ + \ No newline at end of file diff --git a/resources/js/admin/bootstrap.js b/resources/js/admin/bootstrap.js new file mode 100644 index 0000000..87cfc65 --- /dev/null +++ b/resources/js/admin/bootstrap.js @@ -0,0 +1,15 @@ +// window._ = require('lodash'); + +/** + * We'll load the axios HTTP library which allows us to easily issue requests + * to our Laravel back-end. This library automatically handles sending the + * CSRF token as a header based on the value of the "XSRF" token cookie. + */ + +window.axios = require('axios'); + +window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest'; + +window.thelostasura = thelostasura; +window.__ = wp.i18n.__; +window.sprintf = wp.i18n.sprintf; diff --git a/resources/js/admin/components/licenses/LicensesItem.vue b/resources/js/admin/components/licenses/LicensesItem.vue new file mode 100644 index 0000000..bc7998d --- /dev/null +++ b/resources/js/admin/components/licenses/LicensesItem.vue @@ -0,0 +1,39 @@ + + + diff --git a/resources/js/admin/components/licenses/LicensesList.vue b/resources/js/admin/components/licenses/LicensesList.vue new file mode 100644 index 0000000..ee28bfc --- /dev/null +++ b/resources/js/admin/components/licenses/LicensesList.vue @@ -0,0 +1,371 @@ + + + diff --git a/resources/js/admin/components/providers/ProvidersItem.vue b/resources/js/admin/components/providers/ProvidersItem.vue new file mode 100644 index 0000000..74d9f16 --- /dev/null +++ b/resources/js/admin/components/providers/ProvidersItem.vue @@ -0,0 +1,145 @@ + + + diff --git a/resources/js/admin/components/providers/ProvidersItemEdit.vue b/resources/js/admin/components/providers/ProvidersItemEdit.vue new file mode 100644 index 0000000..127cc5f --- /dev/null +++ b/resources/js/admin/components/providers/ProvidersItemEdit.vue @@ -0,0 +1,268 @@ + + + \ No newline at end of file diff --git a/resources/js/admin/components/providers/ProvidersList.vue b/resources/js/admin/components/providers/ProvidersList.vue new file mode 100644 index 0000000..adf3a47 --- /dev/null +++ b/resources/js/admin/components/providers/ProvidersList.vue @@ -0,0 +1,243 @@ + + + \ No newline at end of file diff --git a/resources/js/admin/components/providers/ProvidersRegister.vue b/resources/js/admin/components/providers/ProvidersRegister.vue new file mode 100644 index 0000000..5ed9da2 --- /dev/null +++ b/resources/js/admin/components/providers/ProvidersRegister.vue @@ -0,0 +1,203 @@ + + + \ No newline at end of file diff --git a/resources/js/admin/components/wizard/WizardItem.vue b/resources/js/admin/components/wizard/WizardItem.vue new file mode 100644 index 0000000..d9dee0f --- /dev/null +++ b/resources/js/admin/components/wizard/WizardItem.vue @@ -0,0 +1,39 @@ + + + diff --git a/resources/js/admin/components/wizard/WizardList.vue b/resources/js/admin/components/wizard/WizardList.vue new file mode 100644 index 0000000..e90b3fa --- /dev/null +++ b/resources/js/admin/components/wizard/WizardList.vue @@ -0,0 +1,677 @@ + + + diff --git a/resources/js/admin/main.js b/resources/js/admin/main.js new file mode 100644 index 0000000..7ada1e1 --- /dev/null +++ b/resources/js/admin/main.js @@ -0,0 +1,30 @@ +require('./bootstrap'); + +import { createApp } from "vue"; +import App from "./App.vue"; +import router from "./router.js"; + +import Toast from "vue-toastification"; +import "vue-toastification/dist/index.css"; + +const app = createApp(App); + +app.use(router); + +app.use(Toast, { + position: 'bottom-right', + timeout: 3000, + closeOnClick: true, + pauseOnFocusLoss: true, + maxToasts: 20, + newestOnTop: true +}); + +app.mixin({ + methods: { + __, + sprintf + } +}); + +app.mount('#thelostasura-app'); \ No newline at end of file diff --git a/resources/js/admin/router.js b/resources/js/admin/router.js new file mode 100644 index 0000000..42e5be5 --- /dev/null +++ b/resources/js/admin/router.js @@ -0,0 +1,65 @@ +import { createRouter, createWebHistory } from "vue-router"; + +import ProvidersList from "./components/providers/ProvidersList.vue"; +import ProvidersRegister from "./components/providers/ProvidersRegister.vue"; +import ProvidersItemEdit from "./components/providers/ProvidersItemEdit.vue"; +import LicensesList from "./components/licenses/LicensesList.vue"; +import WizardList from "./components/wizard/WizardList.vue"; + +const router = createRouter({ + history: createWebHistory(`${thelostasura.web_history}#/`), + scrollBehavior(_, _2, savedPosition) { + if (savedPosition) { + return savedPosition; + } + return { left: 0, top: 0 } + }, + routes: [ + { + path: '/', + redirect: { name: 'providers' } + }, + { + path: '/provider', + name: 'providers', + components: { + default: ProvidersList, + }, + children: [ + { + path: 'register', + name: 'provider.register', + components: { + providerRegister: ProvidersRegister + } + }, + { + path: ':providerId/edit', + name: 'provider.edit', + components: { + providerEdit: ProvidersItemEdit + }, + props: true + } + ] + }, + { + path: '/provider/:providerId/licenses', + name: 'licenses', + props: true, + components: { + default: LicensesList + } + }, + { + path: '/provider/:providerId/wizard', + name: 'wizard', + props: true, + components: { + default: WizardList + } + } + ] +}); + +export default router; \ No newline at end of file diff --git a/resources/sass/admin/app.scss b/resources/sass/admin/app.scss new file mode 100644 index 0000000..3601c7e --- /dev/null +++ b/resources/sass/admin/app.scss @@ -0,0 +1,5 @@ +@import "tailwindcss/base"; + +@import "tailwindcss/components"; + +@import "tailwindcss/utilities"; \ No newline at end of file diff --git a/storage/framework/cache/data/.gitignore b/storage/framework/cache/data/.gitignore new file mode 100644 index 0000000..c96a04f --- /dev/null +++ b/storage/framework/cache/data/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..abf280e --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,32 @@ +const colors = require('tailwindcss/colors') + +module.exports = { + mode: 'jit', + purge: [ + './resources/views/**/*.blade.php', + './resources/css/**/*.css', + './resources/sass/**/*.scss', + './resources/js/**/*.vue', + ], + important: true, + plugins: [ + require('@tailwindcss/forms'), + require('@tailwindcss/typography'), + require('@tailwindcss/aspect-ratio'), + ], + theme: { + extend: { + colors: { + 'light-blue': colors.sky, + teal: colors.teal, + rose: colors.rose, + } + } + }, + variants: { + extend: { + backgroundColor: ['checked'], + borderColor: ['checked'], + } + }, +} \ No newline at end of file diff --git a/webpack.mix.js b/webpack.mix.js new file mode 100644 index 0000000..4e77949 --- /dev/null +++ b/webpack.mix.js @@ -0,0 +1,27 @@ +const mix = require('laravel-mix'); +const tailwindcss = require('tailwindcss'); + + +mix.webpackConfig(webpack => { + return { + plugins: [ + new webpack.DefinePlugin({ + // '__VUE_OPTIONS_API__': 'true', + '__VUE_PROD_DEVTOOLS__': 'false' + }) + ] + } +}); + +mix + .js('resources/js/admin/main.js', 'public/js/admin.js') + .vue() + .extract() + .sass('resources/sass/admin/app.scss', 'public/css/admin.css', {}, [ + tailwindcss('./tailwind.config.js') + ]) + .options({ + processCssUrls: false, + }) + .copy('resources/img', 'public/img') + .disableNotifications();