diff --git a/.editorconfig b/.editorconfig index 2b824eb..a541e47 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,21 +1,21 @@ +# This file is for unifying the coding style for different editors and IDEs +# editorconfig.org + +# WordPress Coding Standards +# https://make.wordpress.org/core/handbook/coding-standards/ + root = true [*] -indent_style = space -indent_size = 2 -end_of_line = lf charset = utf-8 -trim_trailing_whitespace = true +end_of_line = lf insert_final_newline = true +trim_trailing_whitespace = true +indent_style = tab -[*.md] -trim_trailing_whitespace = false - -[*.{json, yml}] +[*.yml] +indent_style = space indent_size = 2 -[*.php] -indent_style = tab - -[*.js] -indent_style = tab +[*.md] +trim_trailing_whitespace = false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4238555..b81046f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,10 +18,10 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Cache node modules - uses: actions/cache@v2 + uses: actions/cache@v4 env: cache-name: cache-node-modules with: @@ -33,20 +33,20 @@ jobs: ${{ runner.os }}-node- ${{ runner.os }}- - - name: Use Node.js 12.x - uses: actions/setup-node@v1 + - name: Use Node.js + uses: actions/setup-node@v4 with: - node-version: 12.x + node-version-file: 'package.json' - name: Npm install - run: npm install + run: npm ci - name: Get Composer Cache Directory id: composer-cache - run: echo "::set-output name=dir::$(composer config cache-files-dir)" + run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache vendor - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 45ab8f9..decfe1d 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -12,10 +12,10 @@ jobs: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Cache node modules - uses: actions/cache@v2 + uses: actions/cache@v4 env: cache-name: cache-node-modules with: @@ -27,20 +27,20 @@ jobs: ${{ runner.os }}-build- ${{ runner.os }}- - - name: Use Node.js 12.x - uses: actions/setup-node@v1 + - name: Use Node.js + uses: actions/setup-node@v4 with: - node-version: 12.x + node-version-file: 'package.json' - name: Npm install - run: npm install + run: npm ci - name: Get Composer Cache Directory id: composer-cache - run: echo "::set-output name=dir::$(composer config cache-files-dir)" + run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT - name: Cache vendor - uses: actions/cache@v2 + uses: actions/cache@v4 with: path: ${{ steps.composer-cache.outputs.dir }} key: ${{ runner.os }}-composer-${{ hashFiles('**/composer.lock') }} @@ -63,7 +63,7 @@ jobs: with: tag_name: ${{ github.ref }} release_name: ${{ github.ref }} - draft: false + draft: true prerelease: false - name: Upload Release Asset @@ -76,3 +76,10 @@ jobs: asset_path: ./smart-custom-fields.zip asset_name: smart-custom-fields.zip asset_content_type: application/zip + + - name: Upload to github release + uses: eregon/publish-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + release_id: ${{ steps.create_release.outputs.id }} diff --git a/.gitignore b/.gitignore index 3a10665..d4aeb38 100644 --- a/.gitignore +++ b/.gitignore @@ -7,3 +7,4 @@ node_modules/ /.export/* smart-custom-fields/ smart-custom-fields.zip +.phpunit.result.cache diff --git a/.phpcs.xml.dist b/.phpcs.xml.dist index dc70152..b6d049d 100644 --- a/.phpcs.xml.dist +++ b/.phpcs.xml.dist @@ -1,46 +1,112 @@ - - Sniffs for WordPress plugins, with minor modifications - - - - - - - - - - - - - - - - - + + Apply WordPress Coding Standards to all files + + + + + + + + + + + + + + + + + + + + + + + + + + *\.php + + + - + + - + + - - - + - + + + + + + + - - + + * + + + * + + + * + + + * + + + * + + + * + + + * + + + * + + + * + + + * + + + * + + + * + + + * + + + * + + + * + + + . - /vendor/ - /node_modules/ + /vendor/* + /node_modules/* /.export/* - */tests/* - */languages/* - */dist/* + /bin/* + /dist/* + /languages/* diff --git a/classes/class.config.php b/classes/class.config.php index 0fbb70f..358b81b 100644 --- a/classes/class.config.php +++ b/classes/class.config.php @@ -10,12 +10,12 @@ */ class SCF_Config { /** - * name + * The key name of this plugin. */ const NAME = 'smart-custom-fields'; /** - * prefix + * The prefix of this plugin. */ const PREFIX = 'smart-cf-'; diff --git a/classes/class.rest-api.php b/classes/class.rest-api.php index 0a6fd5d..a26f99b 100644 --- a/classes/class.rest-api.php +++ b/classes/class.rest-api.php @@ -34,7 +34,7 @@ public function register_rest_api_routes() { array( 'methods' => 'GET', 'callback' => array( $this, 'get_all_posts' ), - 'permission_callback' => function() { + 'permission_callback' => function () { return current_user_can( 'edit_posts' ); }, ) diff --git a/classes/class.scf.php b/classes/class.scf.php index 9a9f122..39f7553 100644 --- a/classes/class.scf.php +++ b/classes/class.scf.php @@ -143,26 +143,26 @@ public static function get_option_meta( $menu_slug, $name = null ) { /** * Getting any meta data to feel good. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object meta object. - * @param string $name Group name or field name. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object meta object. + * @param string $name Group name or field name. * @return mixed */ - protected static function get_meta( $object, $name ) { + protected static function get_meta( $wp_object, $name ) { $cache = Smart_Custom_Fields_Cache::get_instance(); - if ( $cache->get_meta( $object, $name ) ) { + if ( $cache->get_meta( $wp_object, $name ) ) { self::debug_cache_message( "use get cache. [name: {$name}]" ); - return $cache->get_meta( $object, $name ); + return $cache->get_meta( $wp_object, $name ); } else { self::debug_cache_message( "dont use get cache... [name: {$name}]" ); } - $settings = self::get_settings( $object ); + $settings = self::get_settings( $wp_object ); foreach ( $settings as $setting ) { // If $name matches the group name, returns fields in the group as array. $group = $setting->get_group( $name ); if ( $group ) { - $values_by_group = self::get_values_by_group( $object, $group ); - $cache->save_meta( $object, $name, $values_by_group ); + $values_by_group = self::get_values_by_group( $wp_object, $group ); + $cache->save_meta( $wp_object, $name, $values_by_group ); return $values_by_group; } @@ -172,8 +172,8 @@ protected static function get_meta( $object, $name ) { $field = $group->get_field( $name ); if ( $field ) { $is_repeatable = $group->is_repeatable(); - $value_by_field = self::get_value_by_field( $object, $field, $is_repeatable ); - $cache->save_meta( $object, $name, $value_by_field ); + $value_by_field = self::get_value_by_field( $wp_object, $field, $is_repeatable ); + $cache->save_meta( $wp_object, $name, $value_by_field ); return $value_by_field; } } @@ -183,12 +183,12 @@ protected static function get_meta( $object, $name ) { /** * Getting all of any meta data to feel good. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object meta object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object meta object. * @return mixed */ - protected static function get_all_meta( $object ) { + protected static function get_all_meta( $wp_object ) { $cache = Smart_Custom_Fields_Cache::get_instance(); - $settings = self::get_settings( $object ); + $settings = self::get_settings( $wp_object ); $post_meta = array(); foreach ( $settings as $setting ) { $groups = $setting->get_groups(); @@ -196,15 +196,15 @@ protected static function get_all_meta( $object ) { $is_repeatable = $group->is_repeatable(); $group_name = $group->get_name(); if ( $is_repeatable && $group_name ) { - $values_by_group = self::get_values_by_group( $object, $group ); - $cache->save_meta( $object, $group_name, $values_by_group ); + $values_by_group = self::get_values_by_group( $wp_object, $group ); + $cache->save_meta( $wp_object, $group_name, $values_by_group ); $post_meta[ $group_name ] = $values_by_group; } else { $fields = $group->get_fields(); foreach ( $fields as $field ) { $field_name = $field->get( 'name' ); - $value_by_field = self::get_value_by_field( $object, $field, $is_repeatable ); - $cache->save_meta( $object, $field_name, $value_by_field ); + $value_by_field = self::get_value_by_field( $wp_object, $field, $is_repeatable ); + $cache->save_meta( $wp_object, $field_name, $value_by_field ); $post_meta[ $field_name ] = $value_by_field; } } @@ -233,11 +233,11 @@ protected static function get_real_post_id( $post_id ) { * Getting the meta data of the group. * When group, Note the point that returned data are repetition. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object meta object. - * @param Smart_Custom_Fields_Group $group Group object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object meta object. + * @param Smart_Custom_Fields_Group $group Group object. * @return mixed */ - protected static function get_values_by_group( $object, $group ) { + protected static function get_values_by_group( $wp_object, $group ) { $is_repeatable = $group->is_repeatable(); $meta = array(); $fields = $group->get_fields(); @@ -251,7 +251,7 @@ protected static function get_values_by_group( $object, $group ) { } $default_meta = $meta[0]; foreach ( $fields as $field ) { - $value_by_field = self::get_value_by_field( $object, $field, $is_repeatable ); + $value_by_field = self::get_value_by_field( $wp_object, $field, $is_repeatable ); foreach ( $value_by_field as $i => $value ) { $meta[ $i ][ $field->get( 'name' ) ] = $value; } @@ -265,22 +265,22 @@ protected static function get_values_by_group( $object, $group ) { /** * Getting the meta data of the field. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object meta object. - * @param Smart_Custom_Fields_Field_Base $field Field object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object meta object. + * @param Smart_Custom_Fields_Field_Base $field Field object. * @param bool $is_repeatable Whether the group that this field belongs is repetition. * @return mixed $post_meta */ - protected static function get_value_by_field( $object, $field, $is_repeatable ) { + protected static function get_value_by_field( $wp_object, $field, $is_repeatable ) { $field_name = $field->get( 'name' ); if ( ! $field_name ) { return; } - $meta = new Smart_Custom_Fields_Meta( $object ); + $meta = new Smart_Custom_Fields_Meta( $wp_object ); // In the case of multi-value items in the loop $field_type = $field->get_attribute( 'type' ); - $repeat_multiple_data = self::get_repeat_multiple_data( $object ); + $repeat_multiple_data = self::get_repeat_multiple_data( $wp_object ); if ( is_array( $repeat_multiple_data ) && isset( $repeat_multiple_data[ $field_name ] ) ) { if ( $meta->is_saved_the_key( $field_name ) ) { $_meta = $meta->get( $field_name ); @@ -288,7 +288,7 @@ protected static function get_value_by_field( $object, $field, $is_repeatable ) $_meta = self::get_default_value( $field ); } $start = 0; - $meta_value = []; + $meta_value = array(); foreach ( $repeat_multiple_data[ $field_name ] as $repeat_multiple_key => $repeat_multiple_value ) { if ( 0 === $repeat_multiple_value ) { $value = array(); @@ -372,20 +372,20 @@ public static function get_default_value( $field, $single = false ) { /** * Getting enabled custom field settings in the post type or the role or the term. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object meta object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object meta object. * @return array */ - public static function get_settings_posts( $object ) { + public static function get_settings_posts( $wp_object ) { $cache = Smart_Custom_Fields_Cache::get_instance(); $settings_posts = array(); - if ( null !== $cache->get_settings_posts( $object ) ) { + if ( null !== $cache->get_settings_posts( $wp_object ) ) { self::debug_cache_message( 'use settings posts cache.' ); - return $cache->get_settings_posts( $object ); + return $cache->get_settings_posts( $wp_object ); } else { self::debug_cache_message( 'dont use settings posts cache...' ); } - $meta = new Smart_Custom_Fields_Meta( $object ); + $meta = new Smart_Custom_Fields_Meta( $wp_object ); $types = $meta->get_types( false ); switch ( $meta->get_meta_type() ) { @@ -423,25 +423,25 @@ public static function get_settings_posts( $object ) { 'posts_per_page' => -1, 'order' => 'ASC', 'order_by' => 'menu_order', - 'meta_query' => $meta_query, + 'meta_query' => $meta_query, // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query ); $settings_posts = get_posts( $args ); } $cache = Smart_Custom_Fields_Cache::get_instance(); - $cache->save_settings_posts( $object, $settings_posts ); + $cache->save_settings_posts( $wp_object, $settings_posts ); return $settings_posts; } /** * Getting array of the Setting object. * - * @param WP_Post|WP_User|WP_Term|Smart_Custom_Fields_Options_Mock $object Object meta object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object meta object. * @return array */ - public static function get_settings( $object ) { - $meta = new Smart_Custom_Fields_Meta( $object ); + public static function get_settings( $wp_object ) { + $meta = new Smart_Custom_Fields_Meta( $wp_object ); $id = $meta->get_id(); $type = $meta->get_type( false ); $types = $meta->get_types( false ); @@ -450,22 +450,22 @@ public static function get_settings( $object ) { // IF the post that has custom field settings according to post ID, // don't display because the post ID would change in preview. // So if in preview, re-getting post ID from original post (parent of the preview). - if ( 'post' === $meta_type && 'revision' === $object->post_type ) { - $object = get_post( $object->post_parent ); + if ( 'post' === $meta_type && 'revision' === $wp_object->post_type ) { + $wp_object = get_post( $wp_object->post_parent ); } $settings = array(); if ( ! empty( $types ) ) { - $settings_posts = self::get_settings_posts( $object ); + $settings_posts = self::get_settings_posts( $wp_object ); if ( 'post' === $meta_type ) { - $settings = self::get_settings_for_post( $object, $settings_posts ); + $settings = self::get_settings_for_post( $wp_object, $settings_posts ); } elseif ( 'user' === $meta_type ) { - $settings = self::get_settings_for_profile( $object, $settings_posts ); + $settings = self::get_settings_for_profile( $wp_object, $settings_posts ); } elseif ( 'term' === $meta_type ) { - $settings = self::get_settings_for_term( $object, $settings_posts ); + $settings = self::get_settings_for_term( $wp_object, $settings_posts ); } elseif ( 'option' === $meta_type ) { - $settings = self::get_settings_for_option( $object, $settings_posts ); + $settings = self::get_settings_for_option( $wp_object, $settings_posts ); } } $settings = apply_filters( @@ -485,23 +485,23 @@ public static function get_settings( $object ) { /** * Getting the Setting object for post. * - * @param WP_Term $object WP_Term object. + * @param WP_Post $wp_object WP_Post object. * @param array $settings_posts Settings. * @return array */ - protected static function get_settings_for_post( $object, $settings_posts ) { + protected static function get_settings_for_post( $wp_object, $settings_posts ) { $cache = Smart_Custom_Fields_Cache::get_instance(); $settings = array(); foreach ( $settings_posts as $settings_post ) { if ( $cache->get_settings( $settings_post->ID ) !== null ) { self::debug_cache_message( "use settings cache. [id: {$settings_post->ID}]" ); - $setting = $cache->get_settings( $settings_post->ID, $object ); + $setting = $cache->get_settings( $settings_post->ID, $wp_object ); if ( $setting ) { $settings[ $settings_post->ID ] = $setting; } continue; } - self::debug_cache_message( "dont use settings cache... [SCF ID: {$settings_post->ID}] [post_type: {$object->post_type}] [Post ID: {$object->ID}]" ); + self::debug_cache_message( "dont use settings cache... [SCF ID: {$settings_post->ID}] [post_type: {$wp_object->post_type}] [Post ID: {$wp_object->ID}]" ); $condition_post_ids_raw = get_post_meta( $settings_post->ID, SCF_Config::PREFIX . 'condition-post-ids', @@ -512,7 +512,7 @@ protected static function get_settings_for_post( $object, $settings_posts ) { foreach ( $condition_post_ids_raw as $condition_post_id ) { $condition_post_id = trim( $condition_post_id ); $setting = self::add_setting( $settings_post->ID, $settings_post->post_title ); - if ( (int) $object->ID === (int) $condition_post_id ) { + if ( (int) $wp_object->ID === (int) $condition_post_id ) { $settings[ $settings_post->ID ] = $setting; } $post = get_post( $condition_post_id ); @@ -533,11 +533,11 @@ protected static function get_settings_for_post( $object, $settings_posts ) { /** * Getting the Setting object for user. * - * @param WP_Term $object WP_Term object. - * @param array $settings_posts Settings. + * @param WP_User|WP_Term|stdClass $wp_object Object meta object. + * @param array $settings_posts Settings. * @return array */ - protected static function get_settings_for_profile( $object, $settings_posts ) { + protected static function get_settings_for_profile( $wp_object, $settings_posts ) { $cache = Smart_Custom_Fields_Cache::get_instance(); $settings = array(); foreach ( $settings_posts as $settings_post ) { @@ -557,45 +557,45 @@ protected static function get_settings_for_profile( $object, $settings_posts ) { /** * Getting the Setting object for term. * - * @param WP_Term $object WP_Term object. + * @param WP_Term $wp_object WP_Term object. * @param array $settings_posts Settings. * @return array */ - protected static function get_settings_for_term( $object, $settings_posts ) { - return self::get_settings_for_profile( $object, $settings_posts ); + protected static function get_settings_for_term( $wp_object, $settings_posts ) { + return self::get_settings_for_profile( $wp_object, $settings_posts ); } /** * Getting the Setting object for option. * - * @param WP_Term $object WP_Term object. - * @param array $settings_posts Settings. + * @param stdClass $wp_object stdClass object. + * @param array $settings_posts Settings. * @return array */ - protected static function get_settings_for_option( $object, $settings_posts ) { - return self::get_settings_for_profile( $object, $settings_posts ); + protected static function get_settings_for_option( $wp_object, $settings_posts ) { + return self::get_settings_for_profile( $wp_object, $settings_posts ); } /** * Getting delimited identification data of the repeated multi-value items. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object meta object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object meta object. * @return array */ - public static function get_repeat_multiple_data( $object ) { + public static function get_repeat_multiple_data( $wp_object ) { $cache = Smart_Custom_Fields_Cache::get_instance(); $repeat_multiple_data = array(); - if ( $cache->get_repeat_multiple_data( $object ) ) { - return $cache->get_repeat_multiple_data( $object ); + if ( $cache->get_repeat_multiple_data( $wp_object ) ) { + return $cache->get_repeat_multiple_data( $wp_object ); } - $meta = new Smart_Custom_Fields_Meta( $object ); + $meta = new Smart_Custom_Fields_Meta( $wp_object ); $_repeat_multiple_data = $meta->get( SCF_Config::PREFIX . 'repeat-multiple-data', true ); if ( ! empty( $_repeat_multiple_data ) ) { $repeat_multiple_data = $_repeat_multiple_data; } - $cache->save_repeat_multiple_data( $object, $repeat_multiple_data ); + $cache->save_repeat_multiple_data( $wp_object, $repeat_multiple_data ); return $repeat_multiple_data; } @@ -682,16 +682,16 @@ public static function get_form_field_instances() { * Getting custom fields that saved custo field settings page. * Note that not return only one even define multiple fields with the same name of the field name. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object meta object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object meta object. * @param string $field_name Field name. * @return Smart_Custom_Fields_Field_Base|null */ - public static function get_field( $object, $field_name ) { + public static function get_field( $wp_object, $field_name ) { if ( '_locale' === $field_name || '_original_post' === $field_name ) { return null; } - $settings = self::get_settings( $object ); + $settings = self::get_settings( $wp_object ); foreach ( $settings as $setting ) { $fields = $setting->get_fields(); if ( ! empty( $fields[ $field_name ] ) ) { @@ -803,7 +803,7 @@ public static function generate_option_object( $menu_slug ) { */ protected static function debug_cache_message( $message ) { if ( defined( 'SCF_DEBUG_CACHE' ) && SCF_DEBUG_CACHE === true ) { - echo $message . '
'; + echo wp_kses_post( $message ) . '
'; } } } diff --git a/classes/controller/class.controller-base.php b/classes/controller/class.controller-base.php index 3116732..1fcc8d4 100644 --- a/classes/controller/class.controller-base.php +++ b/classes/controller/class.controller-base.php @@ -33,14 +33,16 @@ public function admin_enqueue_scripts( $hook ) { do_action( SCF_Config::PREFIX . 'before-editor-enqueue-scripts', $hook ); wp_enqueue_style( SCF_Config::PREFIX . 'editor', - plugins_url( SCF_Config::NAME ) . '/css/editor.css' + SMART_CUSTOM_FIELDS_URL . '/css/editor.css', + array(), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/css/editor.css' ) ); wp_enqueue_media(); wp_enqueue_script( SCF_Config::PREFIX . 'editor', - plugins_url( SCF_Config::NAME ) . '/js/editor.js', + SMART_CUSTOM_FIELDS_URL . '/js/editor.js', array( 'jquery' ), - null, + filemtime( SMART_CUSTOM_FIELDS_PATH . '/js/editor.js' ), true ); wp_localize_script( @@ -56,9 +58,9 @@ public function admin_enqueue_scripts( $hook ) { if ( ! user_can_richedit() ) { wp_enqueue_script( 'tinymce', - includes_url( '/js/tinymce/tinymce.min.js' ), + SMART_CUSTOM_FIELDS_URL . '/js/tinymce/tinymce.min.js', array(), - null, + filemtime( SMART_CUSTOM_FIELDS_PATH . '/js/tinymce/tinymce.min.js' ), true ); } @@ -67,12 +69,12 @@ public function admin_enqueue_scripts( $hook ) { /** * Display custom fields in edit page. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object meta object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object meta object. * @param array $callback_args Custom field setting information. */ - public function display_meta_box( $object, $callback_args ) { + public function display_meta_box( $wp_object, $callback_args ) { $groups = $callback_args['args']; - $tables = $this->get_tables( $object, $groups ); + $tables = $this->get_tables( $wp_object, $groups ); printf( '
', esc_attr( SCF_Config::PREFIX . 'meta-box' ) ); $index = 0; @@ -83,9 +85,9 @@ public function display_meta_box( $object, $callback_args ) { '
', esc_attr( SCF_Config::PREFIX . 'meta-box-repeat-tables' ) ); - $this->display_tr( $object, $is_repeatable, $group->get_fields() ); + $this->display_tr( $wp_object, $is_repeatable, $group->get_fields() ); } - $this->display_tr( $object, $is_repeatable, $group->get_fields(), $index ); + $this->display_tr( $wp_object, $is_repeatable, $group->get_fields(), $index ); // If in the loop, count up the index. // If exit the loop, reset the count. @@ -94,7 +96,7 @@ public function display_meta_box( $object, $callback_args ) { && isset( $tables[ $group_key + 1 ] ) && $group->get_name() === $tables[ $group_key + 1 ]->get_name() ) { - $index ++; + ++$index; } else { $index = 0; } @@ -109,30 +111,30 @@ public function display_meta_box( $object, $callback_args ) { /** * Saving posted data. * - * @param array $data Data. - * @param WP_Post|WP_User|WP_Term|stdClass $object Object meta object. + * @param array $data Data. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object meta object. */ - protected function save( $data, $object ) { + protected function save( $data, $wp_object ) { check_admin_referer( SCF_Config::NAME . '-fields', SCF_Config::PREFIX . 'fields-nonce' ); - $meta = new Smart_Custom_Fields_Meta( $object ); + $meta = new Smart_Custom_Fields_Meta( $wp_object ); $meta->save( $data ); } /** * Generating array for displaying the custom fields. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object meta object. - * @param array $groups Settings from custom field settings page. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object meta object. + * @param array $groups Settings from custom field settings page. * @return array Array for displaying a table for custom fields. */ - protected function get_tables( $object, $groups ) { - $meta = new Smart_Custom_Fields_Meta( $object ); + protected function get_tables( $wp_object, $groups ) { + $meta = new Smart_Custom_Fields_Meta( $wp_object ); - $repeat_multiple_data = SCF::get_repeat_multiple_data( $object ); + $repeat_multiple_data = SCF::get_repeat_multiple_data( $wp_object ); $tables = array(); foreach ( $groups as $group ) { // If in the loop, Added groupgs by the amount of the loop. @@ -155,17 +157,15 @@ protected function get_tables( $object, $groups ) { $loop_count = $repeat_multiple_data_count; } } - } else { + } elseif ( $loop_count < $meta_count ) { // other than checkbox - if ( $loop_count < $meta_count ) { - $loop_count = $meta_count; - } + $loop_count = $meta_count; } } } } if ( $loop_count >= 1 ) { - for ( $i = $loop_count; $i > 0; $i -- ) { + for ( $i = $loop_count; $i > 0; $i-- ) { $tables[] = $group; } continue; @@ -179,13 +179,13 @@ protected function get_tables( $object, $groups ) { /** * Getting the multi-value field meta data. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object meta object. - * @param Smart_Custom_Fields_Field_Base $field Field object. - * @param int $index Index of value. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object meta object. + * @param Smart_Custom_Fields_Field_Base $field Field object. + * @param int $index Index of value. * @return array */ - public function get_multiple_data_field_value( $object, $field, $index ) { - $meta = new Smart_Custom_Fields_Meta( $object ); + public function get_multiple_data_field_value( $wp_object, $field, $index ) { + $meta = new Smart_Custom_Fields_Meta( $wp_object ); $field_name = $field->get( 'name' ); if ( is_null( $index ) ) { @@ -199,7 +199,7 @@ public function get_multiple_data_field_value( $object, $field, $index ) { $value = $meta->get( $field_name ); // in the loop - $repeat_multiple_data = SCF::get_repeat_multiple_data( $object ); + $repeat_multiple_data = SCF::get_repeat_multiple_data( $wp_object ); if ( is_array( $repeat_multiple_data ) && isset( $repeat_multiple_data[ $field_name ] ) ) { $now_num = 0; if ( is_array( $repeat_multiple_data[ $field_name ] ) && isset( $repeat_multiple_data[ $field_name ][ $index ] ) ) { @@ -223,13 +223,13 @@ public function get_multiple_data_field_value( $object, $field, $index ) { /** * Getting the non multi-value field meta data. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object meta object. - * @param Smart_Custom_Fields_Field_Base $field Field object. - * @param int $index Index of value. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object meta object. + * @param Smart_Custom_Fields_Field_Base $field Field object. + * @param int $index Index of value. * @return string */ - public function get_single_data_field_value( $object, $field, $index ) { - $meta = new Smart_Custom_Fields_Meta( $object ); + public function get_single_data_field_value( $wp_object, $field, $index ) { + $meta = new Smart_Custom_Fields_Meta( $wp_object ); $field_name = $field->get( 'name' ); if ( is_null( $index ) ) { @@ -249,12 +249,12 @@ public function get_single_data_field_value( $object, $field, $index ) { /** * Displaying tr element for table of custom fields. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object meta object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object meta object. * @param bool $is_repeat If repeat, return true. * @param array $fields Fields. * @param int|null $index Field index. */ - protected function display_tr( $object, $is_repeat, $fields, $index = null ) { + protected function display_tr( $wp_object, $is_repeat, $fields, $index = null ) { $btn_repeat = ''; if ( $is_repeat ) { $btn_repeat = sprintf( @@ -265,16 +265,11 @@ protected function display_tr( $object, $is_repeat, $fields, $index = null ) { $btn_repeat .= ' '; } - $style = ''; - if ( is_null( $index ) ) { - $style = 'style="display: none;"'; - } - printf( '
%s', esc_attr( SCF_Config::PREFIX . 'meta-box-table' ), - $style, - $btn_repeat + is_null( $index ) ? 'style="display: none;"' : '', + $btn_repeat // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ); foreach ( $fields as $field ) { @@ -288,10 +283,10 @@ protected function display_tr( $object, $is_repeat, $fields, $index = null ) { if ( $field->get_attribute( 'allow-multiple-data' ) ) { // When multi-value field - $value = $this->get_multiple_data_field_value( $object, $field, $index ); + $value = $this->get_multiple_data_field_value( $wp_object, $field, $index ); } else { // When non multi-value field - $value = $this->get_single_data_field_value( $object, $field, $index ); + $value = $this->get_single_data_field_value( $wp_object, $field, $index ); } $instruction = $field->get( 'instruction' ); @@ -307,18 +302,6 @@ protected function display_tr( $object, $is_repeat, $fields, $index = null ) { ); } - $notes = $field->get( 'notes' ); - if ( ! empty( $notes ) ) { - $notes = sprintf( - '

%s

', - esc_html( $notes ) - ); - } - - $form_field = $field->get_field( $index, $value ); - - // if the layout type is full-width, it hides the "Table Header" (th) - $table_th = 'full-width' !== $layout ? '' . esc_html( $field_label ) . '' : ''; printf( ' %2$s @@ -328,13 +311,13 @@ protected function display_tr( $object, $is_repeat, $fields, $index = null ) { %5$s
', - SCF_Config::PREFIX, - $table_th, - $instruction, - $form_field, - $notes, - $field_type, - $layout + esc_attr( SCF_Config::PREFIX ), + 'full-width' !== $layout ? '' . esc_html( $field_label ) . '' : '', + $instruction, // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + $field->get_field( $index, $value ), // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped + $field->get( 'notes' ) ? '

' . esc_html( $field->get( 'notes' ) ) . '

' : '', + esc_attr( $field_type ), + esc_attr( $layout ) ); } echo '
'; diff --git a/classes/controller/class.editor.php b/classes/controller/class.editor.php index 0fc8803..6226831 100644 --- a/classes/controller/class.editor.php +++ b/classes/controller/class.editor.php @@ -49,13 +49,15 @@ public function save_post( $post_id ) { if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; } + if ( wp_is_post_autosave( $post_id ) || wp_is_post_revision( $post_id ) ) { return; } - if ( ! isset( $_POST[ SCF_Config::NAME ] ) ) { + + if ( ! filter_input( INPUT_POST, SCF_Config::NAME, FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ) ) { return; } - $this->save( $_POST, get_post( $post_id ) ); + $this->save( filter_input_array( INPUT_POST ), get_post( $post_id ) ); } } diff --git a/classes/controller/class.option.php b/classes/controller/class.option.php index 35adc39..a44af2a 100644 --- a/classes/controller/class.option.php +++ b/classes/controller/class.option.php @@ -28,7 +28,9 @@ public function admin_enqueue_scripts( $hook ) { parent::admin_enqueue_scripts( $hook ); wp_enqueue_style( SCF_Config::PREFIX . 'option', - plugins_url( SCF_Config::NAME ) . '/css/option.css' + SMART_CUSTOM_FIELDS_URL . '/css/option.css', + array(), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/css/option.css' ) ); } @@ -43,7 +45,7 @@ public function custom_options_page( $option ) { return; } - $callback_args = []; + $callback_args = array(); ?>
@@ -68,10 +70,10 @@ public function custom_options_page( $option ) { * @param stdClass $option Option object. */ public function save_option( $option ) { - if ( ! isset( $_POST[ SCF_Config::NAME ] ) ) { + if ( ! filter_input( INPUT_POST, SCF_Config::NAME, FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ) ) { return; } - $this->save( $_POST, $option ); + $this->save( filter_input_array( INPUT_POST ), $option ); } } diff --git a/classes/controller/class.profile.php b/classes/controller/class.profile.php index 5d3005e..c1a74d6 100644 --- a/classes/controller/class.profile.php +++ b/classes/controller/class.profile.php @@ -31,7 +31,9 @@ public function admin_enqueue_scripts( $hook ) { wp_enqueue_style( SCF_Config::PREFIX . 'profile', - plugins_url( SCF_Config::NAME ) . '/css/profile.css' + SMART_CUSTOM_FIELDS_URL . '/css/profile.css', + array(), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/css/profile.css' ) ); } @@ -43,7 +45,7 @@ public function admin_enqueue_scripts( $hook ) { public function user_profile( $user ) { printf( '

%s

', esc_html__( 'Custom Fields', 'smart-custom-fields' ) ); $settings = SCF::get_settings( $user ); - $callback_args = []; + $callback_args = array(); foreach ( $settings as $setting ) { $callback_args['args'] = $setting->get_groups(); ?> @@ -66,10 +68,11 @@ public function update( $user_id ) { if ( ! current_user_can( 'edit_user', $user_id ) ) { return; } - if ( ! isset( $_POST[ SCF_Config::NAME ] ) ) { + + if ( ! filter_input( INPUT_POST, SCF_Config::NAME, FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ) ) { return; } - $this->save( $_POST, get_userdata( $user_id ) ); + $this->save( filter_input_array( INPUT_POST ), get_userdata( $user_id ) ); } } diff --git a/classes/controller/class.settings.php b/classes/controller/class.settings.php index c429af5..f8a04d9 100644 --- a/classes/controller/class.settings.php +++ b/classes/controller/class.settings.php @@ -91,46 +91,46 @@ public function admin_enqueue_scripts() { wp_enqueue_style( SCF_Config::PREFIX . 'settings', - plugins_url( SCF_Config::NAME ) . '/css/settings.css', + SMART_CUSTOM_FIELDS_URL . '/css/settings.css', array(), - filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../css/settings.css' ) ) + filemtime( SMART_CUSTOM_FIELDS_PATH . '/css/settings.css' ) ); wp_enqueue_style( SCF_Config::PREFIX . 'selectivity', - plugins_url( SCF_Config::NAME ) . '/libs/selectivity-3.1.0/selectivity-jquery.min.css', + SMART_CUSTOM_FIELDS_URL . '/libs/selectivity-3.1.0/selectivity-jquery.min.css', array(), - filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../libs/selectivity-3.1.0/selectivity-jquery.min.css' ) ) + filemtime( SMART_CUSTOM_FIELDS_PATH . '/libs/selectivity-3.1.0/selectivity-jquery.min.css' ) ); wp_enqueue_style( SCF_Config::PREFIX . 'ios-checkbox', - plugins_url( SCF_Config::NAME ) . '/libs/iosCheckbox/iosCheckbox.min.css', + SMART_CUSTOM_FIELDS_URL . '/libs/iosCheckbox/iosCheckbox.min.css', array(), - filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../libs/iosCheckbox/iosCheckbox.min.css' ) ) + filemtime( SMART_CUSTOM_FIELDS_PATH . '/libs/iosCheckbox/iosCheckbox.min.css' ) ); wp_enqueue_script( SCF_Config::PREFIX . 'settings', - plugins_url( SCF_Config::NAME ) . '/js/settings.js', + SMART_CUSTOM_FIELDS_URL . '/js/settings.js', array( 'jquery' ), - filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/settings.js' ) ), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/js/settings.js' ), true ); wp_enqueue_script( SCF_Config::PREFIX . 'selectivity', - plugins_url( SCF_Config::NAME ) . '/libs/selectivity-3.1.0/selectivity-jquery.min.js', + SMART_CUSTOM_FIELDS_URL . '/libs/selectivity-3.1.0/selectivity-jquery.min.js', array(), - filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../libs/selectivity-3.1.0/selectivity-jquery.min.js' ) ), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/libs/selectivity-3.1.0/selectivity-jquery.min.js' ), true ); wp_enqueue_script( SCF_Config::PREFIX . 'ios-checkbox', - plugins_url( SCF_Config::NAME ) . '/libs/iosCheckbox/iosCheckbox.min.js', + SMART_CUSTOM_FIELDS_URL . '/libs/iosCheckbox/iosCheckbox.min.js', array(), - filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../libs/iosCheckbox/iosCheckbox.min.js' ) ), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/libs/iosCheckbox/iosCheckbox.min.js' ), true ); @@ -266,8 +266,8 @@ class="" /> } printf( '%s', - $optgroup_values['label'], - implode( '', $optgroup_fields ) + esc_attr( $optgroup_values['label'] ), + implode( '', $optgroup_fields ) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ); } ?> @@ -316,9 +316,10 @@ public function display_meta_box_condition_post() { ); } printf( - '

%s%s

', + // Translators: %1$s: Label, %2$s: Post type field + '

%1$s%2$s

', esc_html__( 'Post Types', 'smart-custom-fields' ), - $post_type_field + $post_type_field // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ); $condition_post_ids = get_post_meta( get_the_ID(), SCF_Config::PREFIX . 'condition-post-ids', true ); @@ -332,7 +333,7 @@ public function display_meta_box_condition_post() { foreach ( $saved_posts as $k => $post_id ) { if ( '' !== $post_id ) { $saved[ $k ]['id'] = $post_id; - $saved[ $k ]['text'] = $post_id; // $post_id . ' - ' . get_the_title($post_id); + $saved[ $k ]['text'] = $post_id; } } } @@ -340,7 +341,7 @@ public function display_meta_box_condition_post() { // create variable js with posting IDs to use in post search results printf( '', - json_encode( array_values( $saved ) ) + wp_json_encode( array_values( $saved ) ) ); // create div to use with jquery plugin "selectivity" @@ -353,9 +354,10 @@ public function display_meta_box_condition_post() { // create input hidden with the IDS of saved posts printf( - '', + // Translators: %1$s: name, %2$s: value + '', esc_attr( SCF_Config::PREFIX . 'condition-post-ids' ), - $condition_post_ids + esc_attr( $condition_post_ids ) ); } @@ -378,9 +380,10 @@ public function display_meta_box_condition_profile() { ); } printf( - '

%s%s

', + // Translators: %1$s: Label, %2$s: Roles field + '

%1$s%2$s

', esc_html__( 'Roles', 'smart-custom-fields' ), - $profile_field + $profile_field // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ); } @@ -408,9 +411,10 @@ public function display_meta_box_condition_taxonomy() { ); } printf( - '

%s%s

', + // Translators: %1$s: Label, %2$s: Taxonomy field + '

%1$s%2$s

', esc_html__( 'Taxonomies', 'smart-custom-fields' ), - $taxonomy_field + $taxonomy_field // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ); } @@ -432,9 +436,10 @@ public function display_meta_box_condition_options_page() { ); } printf( - '

%s%s

', + // Translators: %1$s: Label, %2$s: Options page field + '

%1$s%2$s

', esc_html__( 'Options pages', 'smart-custom-fields' ), - $options_page_field + $options_page_field // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ); } @@ -447,16 +452,19 @@ public function save_post( $post_id ) { if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) { return; } - if ( ! isset( $_POST[ SCF_Config::NAME ] ) ) { + + $posted_data = filter_input( INPUT_POST, SCF_Config::NAME, FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ); + if ( ! $posted_data ) { return; } + check_admin_referer( SCF_Config::NAME . '-settings', SCF_Config::PREFIX . 'settings-nonce' ); $data = array(); - foreach ( $_POST[ SCF_Config::NAME ] as $group_key => $group_value ) { + foreach ( $posted_data as $group_key => $group_value ) { // $group_key = 0 is hidden field so don't save if ( 0 === $group_key ) { continue; @@ -494,34 +502,39 @@ public function save_post( $post_id ) { } update_post_meta( $post_id, SCF_Config::PREFIX . 'setting', $data ); - if ( ! isset( $_POST[ SCF_Config::PREFIX . 'condition' ] ) ) { + $poste_condition = filter_input( INPUT_POST, SCF_Config::PREFIX . 'condition', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ); + if ( ! $poste_condition ) { delete_post_meta( $post_id, SCF_Config::PREFIX . 'condition' ); } else { - update_post_meta( $post_id, SCF_Config::PREFIX . 'condition', $_POST[ SCF_Config::PREFIX . 'condition' ] ); + update_post_meta( $post_id, SCF_Config::PREFIX . 'condition', $poste_condition ); } - if ( ! isset( $_POST[ SCF_Config::PREFIX . 'condition-post-ids' ] ) ) { + $poste_condition_post_ids = filter_input( INPUT_POST, SCF_Config::PREFIX . 'condition-post-ids' ); + if ( ! $poste_condition_post_ids ) { delete_post_meta( $post_id, SCF_Config::PREFIX . 'condition-post-ids' ); } else { - update_post_meta( $post_id, SCF_Config::PREFIX . 'condition-post-ids', $_POST[ SCF_Config::PREFIX . 'condition-post-ids' ] ); + update_post_meta( $post_id, SCF_Config::PREFIX . 'condition-post-ids', $poste_condition_post_ids ); } - if ( ! isset( $_POST[ SCF_Config::PREFIX . 'roles' ] ) ) { + $poste_roles = filter_input( INPUT_POST, SCF_Config::PREFIX . 'roles', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ); + if ( ! $poste_roles ) { delete_post_meta( $post_id, SCF_Config::PREFIX . 'roles' ); } else { - update_post_meta( $post_id, SCF_Config::PREFIX . 'roles', $_POST[ SCF_Config::PREFIX . 'roles' ] ); + update_post_meta( $post_id, SCF_Config::PREFIX . 'roles', $poste_roles ); } - if ( ! isset( $_POST[ SCF_Config::PREFIX . 'taxonomies' ] ) ) { + $poste_taxonomies = filter_input( INPUT_POST, SCF_Config::PREFIX . 'taxonomies', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ); + if ( ! $poste_taxonomies ) { delete_post_meta( $post_id, SCF_Config::PREFIX . 'taxonomies' ); } else { - update_post_meta( $post_id, SCF_Config::PREFIX . 'taxonomies', $_POST[ SCF_Config::PREFIX . 'taxonomies' ] ); + update_post_meta( $post_id, SCF_Config::PREFIX . 'taxonomies', $poste_taxonomies ); } - if ( ! isset( $_POST[ SCF_Config::PREFIX . 'options-pages' ] ) ) { + $poste_options_pages = filter_input( INPUT_POST, SCF_Config::PREFIX . 'options-pages', FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ); + if ( ! $poste_options_pages ) { delete_post_meta( $post_id, SCF_Config::PREFIX . 'options-pages' ); } else { - update_post_meta( $post_id, SCF_Config::PREFIX . 'options-pages', $_POST[ SCF_Config::PREFIX . 'options-pages' ] ); + update_post_meta( $post_id, SCF_Config::PREFIX . 'options-pages', $poste_options_pages ); } } } diff --git a/classes/controller/class.taxonomy.php b/classes/controller/class.taxonomy.php index 62bb557..78a6987 100644 --- a/classes/controller/class.taxonomy.php +++ b/classes/controller/class.taxonomy.php @@ -16,7 +16,12 @@ class Smart_Custom_Fields_Controller_Taxonomy extends Smart_Custom_Fields_Contro public function __construct() { parent::__construct(); - add_action( $_REQUEST['taxonomy'] . '_edit_form_fields', array( $this, 'edit_form_fields' ) ); + $requested_taxonomy = filter_input( INPUT_POST, 'taxonomy' ); + $requested_taxonomy = $requested_taxonomy ? $requested_taxonomy : filter_input( INPUT_GET, 'taxonomy' ); + if ( $requested_taxonomy ) { + add_action( $requested_taxonomy . '_edit_form_fields', array( $this, 'edit_form_fields' ) ); + } + add_action( 'edited_terms', array( $this, 'update' ), 10, 2 ); add_action( 'delete_term', array( $this, 'delete' ), 10, 4 ); } @@ -30,7 +35,9 @@ public function admin_enqueue_scripts( $hook ) { parent::admin_enqueue_scripts( $hook ); wp_enqueue_style( SCF_Config::PREFIX . 'taxonomy', - plugins_url( SCF_Config::NAME ) . '/css/taxonomy.css' + SMART_CUSTOM_FIELDS_URL . '/css/taxonomy.css', + array(), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/css/taxonomy.css' ) ); } @@ -41,7 +48,7 @@ public function admin_enqueue_scripts( $hook ) { */ public function edit_form_fields( $term ) { $settings = SCF::get_settings( $term ); - $callback_args = []; + $callback_args = array(); foreach ( $settings as $setting ) { $callback_args['args'] = $setting->get_groups(); ?> @@ -65,12 +72,13 @@ public function update( $term_id, $taxonomy ) { if ( ! current_user_can( 'manage_categories' ) ) { return; } - if ( ! isset( $_POST[ SCF_Config::NAME ] ) ) { + + if ( ! filter_input( INPUT_POST, SCF_Config::NAME, FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ) ) { return; } $term = get_term( $term_id, $taxonomy ); - $this->save( $_POST, $term ); + $this->save( filter_input_array( INPUT_POST ), $term ); } /** diff --git a/classes/fields/class.field-colorpicker.php b/classes/fields/class.field-colorpicker.php index db5e9c0..8a1ecbc 100644 --- a/classes/fields/class.field-colorpicker.php +++ b/classes/fields/class.field-colorpicker.php @@ -52,9 +52,9 @@ public function editor_enqueue_scripts() { wp_enqueue_script( SCF_Config::PREFIX . 'editor-colorpicker', - plugins_url( SCF_Config::NAME ) . '/js/editor-colorpicker.js', + SMART_CUSTOM_FIELDS_URL . '/js/editor-colorpicker.js', array( 'jquery', 'wp-color-picker' ), - filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/editor-colorpicker.js' ) ), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/js/editor-colorpicker.js' ), true ); } @@ -67,9 +67,9 @@ public function settings_enqueue_scripts() { wp_enqueue_script( SCF_Config::PREFIX . 'settings-colorpicker', - plugins_url( SCF_Config::NAME ) . '/js/settings-colorpicker.js', + SMART_CUSTOM_FIELDS_URL . '/js/settings-colorpicker.js', array( 'jquery', 'wp-color-picker' ), - filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/settings-colorpicker.js' ) ), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/js/settings-colorpicker.js' ), true ); } diff --git a/classes/fields/class.field-datepicker.php b/classes/fields/class.field-datepicker.php index 56a70f9..744de98 100644 --- a/classes/fields/class.field-datepicker.php +++ b/classes/fields/class.field-datepicker.php @@ -62,9 +62,9 @@ public function editor_enqueue_scripts() { wp_enqueue_script( 'jquery-ui-datepicker' ); wp_enqueue_script( SCF_Config::PREFIX . 'editor-datepicker', - plugins_url( '../../js/editor-datepicker.js', __FILE__ ), + SMART_CUSTOM_FIELDS_URL . '/js/editor-datepicker.js', array( 'jquery', 'jquery-ui-datepicker' ), - false, + filemtime( SMART_CUSTOM_FIELDS_PATH . '/js/editor-datepicker.js' ), true ); } @@ -87,9 +87,9 @@ public function settings_enqueue_scripts() { wp_enqueue_script( SCF_Config::PREFIX . 'settings-datepicker', - plugins_url( SCF_Config::NAME ) . '/js/settings-datepicker.js', + SMART_CUSTOM_FIELDS_URL . '/js/settings-datepicker.js', array( 'jquery', 'jquery-ui-datepicker' ), - filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/settings-datepicker.js' ) ), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/js/settings-datepicker.js' ), true ); } @@ -133,7 +133,7 @@ public function display_field_options( $group_key, $field_key ) { name="get_field_name_in_setting( $group_key, $field_key, 'default' ) ); ?>" class="widefat default-option" value="get( 'default' ) ); ?>" - data-js='get_data_js(); ?>' /> + data-js='get_data_js(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?>' /> @@ -148,7 +148,8 @@ class="widefat" , %2$s: + esc_html__( 'Prease see %1$sdateFormat%1$s', 'smart-custom-fields' ), '', '' ); @@ -168,7 +169,8 @@ class="widefat" , %2$s: + esc_html__( 'Prease see %1$smaxData%2$s', 'smart-custom-fields' ), '', '' ); @@ -188,7 +190,8 @@ class="widefat" , %2$s: + esc_html__( 'Prease see %1$sminData%2$s', 'smart-custom-fields' ), '', '' ); @@ -306,6 +309,6 @@ protected function get_data_js() { $js['minDate'] = $this->get( 'min_date' ); } - return json_encode( $js ); + return wp_json_encode( $js ); } } diff --git a/classes/fields/class.field-datetime-picker.php b/classes/fields/class.field-datetime-picker.php index 55f7c23..73166ca 100644 --- a/classes/fields/class.field-datetime-picker.php +++ b/classes/fields/class.field-datetime-picker.php @@ -57,29 +57,30 @@ public function editor_enqueue_scripts() { wp_enqueue_style( 'flatpickr-style', '//cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css', - array() + array(), + 1 ); wp_enqueue_script( 'flatpickr-script', '//cdn.jsdelivr.net/npm/flatpickr', array(), - true, + 1, true ); wp_enqueue_script( SCF_Config::PREFIX . 'flatpickr-script', - plugins_url( '../../js/settings-datetime-picker.js', __FILE__ ), + SMART_CUSTOM_FIELDS_URL . '/js/settings-datetime-picker.js', array( 'flatpickr-script' ), - false, + filemtime( SMART_CUSTOM_FIELDS_PATH . '/js/settings-datetime-picker.js' ), true ); $locale = $this->get_locale_name(); if ( $locale ) { wp_enqueue_script( - "flatpickr-lang-${locale}", - "//npmcdn.com/flatpickr/dist/l10n/${locale}.js", + "flatpickr-lang-{$locale}", + "//npmcdn.com/flatpickr/dist/l10n/{$locale}.js", array(), - false, + 1, true ); } @@ -92,29 +93,30 @@ public function settings_enqueue_scripts() { wp_enqueue_style( 'flatpickr-style', '//cdn.jsdelivr.net/npm/flatpickr/dist/flatpickr.min.css', - array() + array(), + 1 ); wp_enqueue_script( 'flatpickr-script', '//cdn.jsdelivr.net/npm/flatpickr', array(), - false, + 1, true ); wp_enqueue_script( SCF_Config::PREFIX . 'flatpickr-script', - plugins_url( '../../js/settings-datetime-picker.js', __FILE__ ), + SMART_CUSTOM_FIELDS_URL . '/js/settings-datetime-picker.js', array( 'flatpickr-script' ), - false, + filemtime( SMART_CUSTOM_FIELDS_PATH . '/js/settings-datetime-picker.js' ), true ); $locale = $this->get_locale_name(); if ( $locale ) { wp_enqueue_script( - "flatpickr-lang-${locale}", - "//npmcdn.com/flatpickr/dist/l10n/${locale}.js", + "flatpickr-lang-{$locale}", + "//npmcdn.com/flatpickr/dist/l10n/{$locale}.js", array(), - false, + 1, true ); } @@ -281,7 +283,7 @@ private function get_data_js() { $data = apply_filters( SCF_Config::PREFIX . 'datetime_picker_data', $data ); - return json_encode( $data ); + return wp_json_encode( $data ); } /** diff --git a/classes/fields/class.field-related-posts.php b/classes/fields/class.field-related-posts.php index eeec34b..95f0234 100644 --- a/classes/fields/class.field-related-posts.php +++ b/classes/fields/class.field-related-posts.php @@ -47,17 +47,17 @@ protected function options() { public function admin_enqueue_scripts() { wp_enqueue_script( SCF_Config::PREFIX . 'editor-relation-common', - plugins_url( SCF_Config::NAME ) . '/js/editor-relation-common.js', + SMART_CUSTOM_FIELDS_URL . '/js/editor-relation-common.js', array( 'jquery' ), - filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/editor-relation-common.js' ) ), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/js/editor-relation-common.js' ), true ); wp_enqueue_script( SCF_Config::PREFIX . 'editor-relation-post-types', - plugins_url( SCF_Config::NAME ) . '/js/editor-relation-post-types.js', + SMART_CUSTOM_FIELDS_URL . '/js/editor-relation-post-types.js', array( 'jquery' ), - filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/editor-relation-post-types.js' ) ), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/js/editor-relation-post-types.js' ), true ); @@ -78,8 +78,10 @@ public function admin_enqueue_scripts() { public function relational_posts_search() { check_ajax_referer( SCF_Config::NAME . '-relation-post-types', 'nonce' ); $_posts = array(); - if ( isset( $_POST['post_types'] ) ) { - $post_type = explode( ',', $_POST['post_types'] ); + + $post_types = filter_input( INPUT_POST, 'post_types' ); + if ( $post_types ) { + $post_type = explode( ',', $post_types ); $args = array( 'post_type' => $post_type, 'order' => 'ASC', @@ -88,9 +90,10 @@ public function relational_posts_search() { 'post_status' => 'any', ); - if ( isset( $_POST['click_count'] ) ) { + $click_count = filter_input( INPUT_POST, 'click_count' ); + if ( $click_count ) { $posts_per_page = get_option( 'posts_per_page' ); - $offset = $_POST['click_count'] * $posts_per_page; + $offset = $click_count * $posts_per_page; $args = array_merge( $args, array( @@ -100,16 +103,18 @@ public function relational_posts_search() { ); } - if ( isset( $_POST['s'] ) ) { + $s = filter_input( INPUT_POST, 's' ); + if ( $s ) { $args = array_merge( $args, array( - 's' => $_POST['s'], + 's' => $s, ) ); } - $field_name = sanitize_text_field( $_POST['field_name'] ); + $field_name = sanitize_text_field( filter_input( INPUT_POST, 'field_name' ) ); + /** * This filter will be always applied when it queries posts in related posts field. */ @@ -123,7 +128,7 @@ public function relational_posts_search() { $_posts = get_posts( $args ); } header( 'Content-Type: application/json; charset=utf-8' ); - echo json_encode( $_posts ); + echo wp_json_encode( $_posts ); die(); } @@ -274,14 +279,14 @@ public function display_field_options( $group_key, $field_key ) { $post_type_object ) : ?> get( 'post-type' ); - $checked = is_array( $save_post_types ) && in_array( $post_type, $save_post_types, true ) - ? 'checked="checked"' - : ''; ?> />labels->singular_name ); ?> + + checked="checked" + + />labels->singular_name ); ?> diff --git a/classes/fields/class.field-related-terms.php b/classes/fields/class.field-related-terms.php index b2192b7..231246b 100644 --- a/classes/fields/class.field-related-terms.php +++ b/classes/fields/class.field-related-terms.php @@ -47,17 +47,17 @@ protected function options() { public function admin_enqueue_scripts() { wp_enqueue_script( SCF_Config::PREFIX . 'editor-relation-common', - plugins_url( SCF_Config::NAME ) . '/js/editor-relation-common.js', + SMART_CUSTOM_FIELDS_URL . '/js/editor-relation-common.js', array( 'jquery' ), - filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/editor-relation-common.js' ) ), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/js/editor-relation-common.js' ), true ); wp_enqueue_script( SCF_Config::PREFIX . 'editor-relation-taxonomies', - plugins_url( SCF_Config::NAME ) . '/js/editor-relation-taxonomies.js', + SMART_CUSTOM_FIELDS_URL . '/js/editor-relation-taxonomies.js', array( 'jquery' ), - filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/editor-relation-taxonomies.js' ) ), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/js/editor-relation-taxonomies.js' ), true ); @@ -79,9 +79,12 @@ public function relational_terms_search() { check_ajax_referer( SCF_Config::NAME . '-relation-taxonomies', 'nonce' ); $_terms = array(); $args = array(); - if ( isset( $_POST['taxonomies'] ) ) { - $taxonomies = explode( ',', $_POST['taxonomies'] ); + + $taxonomies = filter_input( INPUT_POST, 'taxonomies' ); + if ( $taxonomies ) { + $taxonomies = explode( ',', $taxonomies ); $args = array( + 'taxonomy' => $taxonomies, 'order' => 'ASC', 'orderby' => 'ID', 'number' => '', @@ -89,9 +92,10 @@ public function relational_terms_search() { 'hierarchical' => false, ); - if ( isset( $_POST['click_count'] ) ) { + $click_count = filter_input( INPUT_POST, 'click_count' ); + if ( $click_count ) { $number = get_option( 'posts_per_page' ); - $offset = $_POST['click_count'] * $number; + $offset = $click_count * $number; $args = array_merge( $args, array( @@ -101,18 +105,20 @@ public function relational_terms_search() { ); } - if ( isset( $_POST['search'] ) ) { + $search = filter_input( INPUT_POST, 'search' ); + if ( $search ) { $args = array_merge( $args, array( - 'search' => $_POST['search'], + 'search' => $search, ) ); } - $_terms = get_terms( $taxonomies, $args ); + + $_terms = get_terms( $args ); } header( 'Content-Type: application/json; charset=utf-8' ); - echo json_encode( $_terms ); + echo wp_json_encode( $_terms ); die(); } @@ -138,8 +144,8 @@ public function get_field( $index, $value ) { // choicse $choices_terms = get_terms( - $taxonomies, array( + 'taxonomy' => $taxonomies, 'order' => 'ASC', 'orderby' => 'ID', 'hide_empty' => false, @@ -248,14 +254,14 @@ public function display_field_options( $group_key, $field_key ) { $taxonomy_object ) : ?> get( 'taxonomy' ); - $checked = is_array( $save_taxonomies ) && in_array( $taxonomy, $save_taxonomies, true ) - ? 'checked="checked"' - : ''; ?> />labels->singular_name ); ?> + + checked="checked" + + />labels->singular_name ); ?> diff --git a/classes/fields/class.field-wysiwyg.php b/classes/fields/class.field-wysiwyg.php index abd6a98..d6f72a7 100644 --- a/classes/fields/class.field-wysiwyg.php +++ b/classes/fields/class.field-wysiwyg.php @@ -52,10 +52,12 @@ public function editor_enqueue_scripts() { * Add script for wysiwyg. */ public function after_wp_tiny_mce() { + // phpcs:disable WordPress.WP.EnqueuedResources.NonEnqueuedScript printf( - '', - plugins_url( SCF_Config::NAME ) . '/js/editor-wysiwyg.js' + '', + esc_url( plugins_url( SCF_Config::NAME ) . '/js/editor-wysiwyg.js' ) ); + // phpcs:enable } /** @@ -88,11 +90,8 @@ public function get_field( $index, $value ) { $name = $this->get_field_name_in_editor( $index ); $wysiwyg_id = str_replace( array( '[', ']', '-' ), '_', $name ); $disabled = $this->get_disable_attribute( $index ); - if ( function_exists( 'format_for_editor' ) ) { - $value = format_for_editor( $value ); - } else { - $value = wp_richedit_pre( $value ); - } + $value = format_for_editor( $value ); + return sprintf( '
diff --git a/classes/models/class.cache.php b/classes/models/class.cache.php index 042245f..2fe4b07 100644 --- a/classes/models/class.cache.php +++ b/classes/models/class.cache.php @@ -79,12 +79,12 @@ public function flush() { /** * Saving to cache. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object type object. - * @param string $name Cache name. - * @param mixed $data Cache data. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object type object. + * @param string $name Cache name. + * @param mixed $data Cache data. */ - public function save_meta( $object, $name, $data ) { - $meta = new Smart_Custom_Fields_Meta( $object ); + public function save_meta( $wp_object, $name, $data ) { + $meta = new Smart_Custom_Fields_Meta( $wp_object ); $id = $meta->get_id(); $type = $meta->get_type(); $meta_type = $meta->get_meta_type(); @@ -96,12 +96,12 @@ public function save_meta( $object, $name, $data ) { /** * Getting the cache. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object type object. - * @param string $name Cache name. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object type object. + * @param string $name Cache name. * @return mixed */ - public function get_meta( $object, $name = null ) { - $meta = new Smart_Custom_Fields_Meta( $object ); + public function get_meta( $wp_object, $name = null ) { + $meta = new Smart_Custom_Fields_Meta( $wp_object ); $id = $meta->get_id(); $type = $meta->get_type(); $meta_type = $meta->get_meta_type(); @@ -110,10 +110,8 @@ public function get_meta( $object, $name = null ) { if ( isset( $this->meta[ $meta_type . '_' . $type . '_' . $id ] ) ) { return $this->meta[ $meta_type . '_' . $type . '_' . $id ]; } - } else { - if ( isset( $this->meta[ $meta_type . '_' . $type . '_' . $id ][ $name ] ) ) { + } elseif ( isset( $this->meta[ $meta_type . '_' . $type . '_' . $id ][ $name ] ) ) { return $this->meta[ $meta_type . '_' . $type . '_' . $id ][ $name ]; - } } } } @@ -128,11 +126,11 @@ public function clear_meta() { /** * Saving to cache that enabled custom field settings in the post type or the role or the term. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object type object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object type object. * @param array $settings_posts Settings. */ - public function save_settings_posts( $object, $settings_posts ) { - $meta = new Smart_Custom_Fields_Meta( $object ); + public function save_settings_posts( $wp_object, $settings_posts ) { + $meta = new Smart_Custom_Fields_Meta( $wp_object ); $type = $meta->get_type( false ); $meta_type = $meta->get_meta_type(); $this->settings_posts[ $meta_type . '_' . $type ] = $settings_posts; @@ -141,11 +139,11 @@ public function save_settings_posts( $object, $settings_posts ) { /** * Getting cache that enabled custom field settings in the post type or the role or the term. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object type object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object type object. * @return array|null */ - public function get_settings_posts( $object ) { - $meta = new Smart_Custom_Fields_Meta( $object ); + public function get_settings_posts( $wp_object ) { + $meta = new Smart_Custom_Fields_Meta( $wp_object ); $type = $meta->get_type( false ); $meta_type = $meta->get_meta_type(); if ( isset( $this->settings_posts[ $meta_type . '_' . $type ] ) ) { @@ -165,11 +163,11 @@ public function clear_settings_posts() { * * @param int $settings_post_id Settings id. * @param Smart_Custom_Fields_Setting $setting Smart_Custom_Fields_Setting object. - * @param WP_Post|WP_User|WP_Term|stdClass $object Object type object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object type object. */ - public function save_settings( $settings_post_id, $setting, $object = null ) { - if ( ! is_null( $object ) ) { - $meta = new Smart_Custom_Fields_Meta( $object ); + public function save_settings( $settings_post_id, $setting, $wp_object = null ) { + if ( ! is_null( $wp_object ) ) { + $meta = new Smart_Custom_Fields_Meta( $wp_object ); $id = $meta->get_id(); $meta_type = $meta->get_meta_type(); } @@ -190,12 +188,12 @@ public function save_settings( $settings_post_id, $setting, $object = null ) { * If there the data for the specified $meta_type + $id ... Smart_Custom_Fields_Setting * * @param int $settings_post_id Settings id. - * @param WP_Post|WP_User|WP_Term|stdClass $object Object type object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object type object. * @return Smart_Custom_Fields_Setting|false|null */ - public function get_settings( $settings_post_id, $object = null ) { - if ( ! is_null( $object ) ) { - $meta = new Smart_Custom_Fields_Meta( $object ); + public function get_settings( $settings_post_id, $wp_object = null ) { + if ( ! is_null( $wp_object ) ) { + $meta = new Smart_Custom_Fields_Meta( $wp_object ); $id = $meta->get_id(); $meta_type = $meta->get_meta_type(); } @@ -222,11 +220,11 @@ public function clear_settings() { /** * Saving the delimited identification data of the repeated multi-value items to cache. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object type object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object type object. * @param mixed $repeat_multiple_data Repeat multiple data. */ - public function save_repeat_multiple_data( $object, $repeat_multiple_data ) { - $meta = new Smart_Custom_Fields_Meta( $object ); + public function save_repeat_multiple_data( $wp_object, $repeat_multiple_data ) { + $meta = new Smart_Custom_Fields_Meta( $wp_object ); $id = $meta->get_id(); $type = $meta->get_type(); $meta_type = $meta->get_meta_type(); @@ -238,11 +236,11 @@ public function save_repeat_multiple_data( $object, $repeat_multiple_data ) { /** * Getting delimited identification data of the repeated multi-value items from cache. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Object type object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Object type object. * @return mixed */ - public function get_repeat_multiple_data( $object ) { - $meta = new Smart_Custom_Fields_Meta( $object ); + public function get_repeat_multiple_data( $wp_object ) { + $meta = new Smart_Custom_Fields_Meta( $wp_object ); $id = $meta->get_id(); $type = $meta->get_type(); $meta_type = $meta->get_meta_type(); diff --git a/classes/models/class.meta.php b/classes/models/class.meta.php index d5e6bae..64d81ee 100644 --- a/classes/models/class.meta.php +++ b/classes/models/class.meta.php @@ -45,41 +45,41 @@ class Smart_Custom_Fields_Meta { protected $types = array(); /** - * __construct + * Constructor. * - * @param WP_Post|WP_User|WP_Term|stdClass $object Meta object type object. + * @param WP_Post|WP_User|WP_Term|stdClass $wp_object Meta object type object. * * @throws \Exception If object type not found. */ - public function __construct( $object ) { - $this->object = $object; - if ( is_a( $object, 'WP_Post' ) ) { - $this->id = $object->ID; - $this->type = $object->post_type; - $this->types = array( $object->post_type ); + public function __construct( $wp_object ) { + $this->object = $wp_object; + if ( is_a( $wp_object, 'WP_Post' ) ) { + $this->id = $wp_object->ID; + $this->type = $wp_object->post_type; + $this->types = array( $wp_object->post_type ); $this->meta_type = 'post'; - } elseif ( is_a( $object, 'WP_User' ) ) { - $this->id = $object->ID; - $this->type = $object->roles[0]; - $this->types = array_unique( array_merge( $object->roles, array_keys( $object->caps ) ) ); + } elseif ( is_a( $wp_object, 'WP_User' ) ) { + $this->id = $wp_object->ID; + $this->type = $wp_object->roles[0]; + $this->types = array_unique( array_merge( $wp_object->roles, array_keys( $wp_object->caps ) ) ); $this->meta_type = 'user'; - } elseif ( isset( $object->term_id ) ) { - $this->id = $object->term_id; - $this->type = $object->taxonomy; - $this->types = array( $object->taxonomy ); + } elseif ( isset( $wp_object->term_id ) ) { + $this->id = $wp_object->term_id; + $this->type = $wp_object->taxonomy; + $this->types = array( $wp_object->taxonomy ); $this->meta_type = 'term'; - } elseif ( isset( $object->menu_slug ) ) { - $this->id = $object->menu_slug; - $this->type = $object->menu_slug; - $this->types = array( $object->menu_slug ); + } elseif ( isset( $wp_object->menu_slug ) ) { + $this->id = $wp_object->menu_slug; + $this->type = $wp_object->menu_slug; + $this->types = array( $wp_object->menu_slug ); $this->meta_type = 'option'; - } elseif ( empty( $object ) || is_wp_error( $object ) ) { + } elseif ( empty( $wp_object ) || is_wp_error( $wp_object ) ) { $this->id = null; $this->type = null; $this->types = null; $this->meta_type = null; } else { - throw new Exception( sprintf( 'Invalid $object type error. $object is "%s".', get_class( $object ) ) ); + throw new Exception( sprintf( 'Invalid $wp_object type error. $wp_object is "%s".', esc_html( get_class( $wp_object ) ) ) ); } } @@ -232,15 +232,13 @@ public function get( $key = '', $single = false ) { return $meta; } } - } else { - if ( is_array( $meta ) ) { - $metas = []; - foreach ( $settings as $setting ) { - $fields = $setting->get_fields(); - foreach ( $meta as $meta_key => $meta_value ) { - if ( isset( $fields[ $meta_key ] ) ) { - $metas[ $meta_key ] = $meta[ $meta_key ]; - } + } elseif ( is_array( $meta ) ) { + $metas = array(); + foreach ( $settings as $setting ) { + $fields = $setting->get_fields(); + foreach ( $meta as $meta_key => $meta_value ) { + if ( isset( $fields[ $meta_key ] ) ) { + $metas[ $meta_key ] = $meta[ $meta_key ]; } } } @@ -392,10 +390,8 @@ public function delete( $key = '', $value = '' ) { if ( $key ) { return delete_metadata( $this->meta_type, $this->id, $key, $value ); } - } else { - if ( $key ) { + } elseif ( $key ) { return $this->delete_option_metadata( $key, $value ); - } } return false; } diff --git a/classes/models/class.options-page.php b/classes/models/class.options-page.php index b166825..03e1c85 100644 --- a/classes/models/class.options-page.php +++ b/classes/models/class.options-page.php @@ -93,7 +93,7 @@ public function add_options_page_menu() { * Display option. */ public function display() { - $option = SCF::generate_option_object( $_GET['page'] ); + $option = SCF::generate_option_object( filter_input( INPUT_GET, 'page' ) ); if ( ! $option ) { return; } diff --git a/classes/models/class.revisions.php b/classes/models/class.revisions.php index 69b0ea3..8da00cd 100644 --- a/classes/models/class.revisions.php +++ b/classes/models/class.revisions.php @@ -136,12 +136,12 @@ public function _wp_post_revision_fields( $fields ) { public function edit_form_after_title() { printf( '', - SCF_Config::PREFIX . 'debug-preview' + esc_attr( SCF_Config::PREFIX . 'debug-preview' ) ); } /** - * リビジョン比較画面にメタデータを表示 + * Display metadata on revision comparison screen. * * @param string $value The current revision field to compare to or from. * @param string $column The current revision field. @@ -177,7 +177,7 @@ public function _wp_post_revision_field_debug_preview( $value, $column, $post ) } /** - * false ならリビジョンとして保存される + * If false, it is saved as a revision. * * @param bool $check_for_changes Whether to check for changes before saving a new revision. Default true. * @param WP_Post $last_revision The last revision post object. @@ -194,15 +194,11 @@ public function wp_save_post_revision_check_for_changes( $check_for_changes, $la } } - if ( isset( $_POST[ SCF_Config::NAME ] ) ) { - $serialized_post_meta = serialize( $post_meta ); - $serialized_send_data = $_POST[ SCF_Config::NAME ]; - - // phpcs:ignore WordPress.PHP.StrictComparisons.LooseComparison - if ( $serialized_post_meta != $serialized_send_data ) { - return false; - } + $posted_data = filter_input( INPUT_POST, SCF_Config::NAME, FILTER_DEFAULT, FILTER_REQUIRE_ARRAY ); + if ( $posted_data && maybe_serialize( $post_meta ) !== maybe_serialize( $posted_data ) ) { + return false; } + return true; } } diff --git a/classes/models/class.yoast-seo-analysis.php b/classes/models/class.yoast-seo-analysis.php index f3fb3e7..f1dfeab 100644 --- a/classes/models/class.yoast-seo-analysis.php +++ b/classes/models/class.yoast-seo-analysis.php @@ -23,9 +23,9 @@ public function __construct() { public function admin_enqueue_scripts() { wp_enqueue_script( SCF_Config::PREFIX . 'yoast-seo-analysis', - plugins_url( SCF_Config::NAME ) . '/js/yoast-seo-analysis.js', - null, - filemtime( plugin_dir_path( dirname( __FILE__ ) . '/../../js/yoast-seo-analysis.js' ) ), + SMART_CUSTOM_FIELDS_URL . '/js/yoast-seo-analysis.js', + array(), + filemtime( SMART_CUSTOM_FIELDS_PATH . '/js/yoast-seo-analysis.js' ), false ); } diff --git a/composer.json b/composer.json index 2fe72bb..b8ce3dd 100644 --- a/composer.json +++ b/composer.json @@ -1,33 +1,35 @@ { - "type": "wordpress-plugin", - "license": "GPL-2.0-or-later", - "authors": [ - { - "name": "Takashi Kitajima", - "email": "inc@2inc.org", - "homepage": "https://2inc.org" - }, - { - "name": "Toshihiro Kanai", - "email": "i@miruc.co", - "homepage": "https://miruc.co/", - "role": "Developer" - } - ], - "require": { - "php": ">=5.6" - }, - "require-dev": { + "type": "wordpress-plugin", + "license": "GPL-2.0-or-later", + "authors": [ + { + "name": "Takashi Kitajima", + "email": "inc@2inc.org", + "homepage": "https://2inc.org" + }, + { + "name": "Toshihiro Kanai", + "email": "i@miruc.co", + "homepage": "https://miruc.co/", + "role": "Developer" + } + ], + "require": { + "php": ">=7.4" + }, + "require-dev": { + "wp-coding-standards/wpcs": "^3.0", "dealerdirect/phpcodesniffer-composer-installer": "^0.7", - "squizlabs/php_codesniffer": "^3.6", - "phpcompatibility/php-compatibility": "^9.3", - "wp-coding-standards/wpcs": "^2.3", - "sirbrillig/phpcs-variable-analysis": "^2.11", - "wp-phpunit/wp-phpunit": "^5.8", - "yoast/phpunit-polyfills": "^1.0" - }, - "scripts" :{ + "yoast/phpunit-polyfills": "^1.0", + "phpcompatibility/phpcompatibility-wp": "*" + }, + "scripts" :{ "format": "phpcbf --standard=./.phpcs.xml.dist --report-summary --report-source", "lint": "phpcs --standard=./.phpcs.xml.dist" - } + }, + "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true + } + } } diff --git a/composer.lock b/composer.lock index da3efe9..5459e84 100644 --- a/composer.lock +++ b/composer.lock @@ -4,32 +4,32 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "23822b3ede02a96543fc9541a27c605b", + "content-hash": "a33ab1047730fe744941add9e8020420", "packages": [], "packages-dev": [ { "name": "dealerdirect/phpcodesniffer-composer-installer", - "version": "v0.7.1", + "version": "v0.7.2", "source": { "type": "git", "url": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer.git", - "reference": "fe390591e0241955f22eb9ba327d137e501c771c" + "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/fe390591e0241955f22eb9ba327d137e501c771c", - "reference": "fe390591e0241955f22eb9ba327d137e501c771c", + "url": "https://api.github.com/repos/Dealerdirect/phpcodesniffer-composer-installer/zipball/1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", + "reference": "1c968e542d8843d7cd71de3c5c9c3ff3ad71a1db", "shasum": "" }, "require": { "composer-plugin-api": "^1.0 || ^2.0", "php": ">=5.3", - "squizlabs/php_codesniffer": "^2.0 || ^3.0 || ^4.0" + "squizlabs/php_codesniffer": "^2.0 || ^3.1.0 || ^4.0" }, "require-dev": { "composer/composer": "*", - "phpcompatibility/php-compatibility": "^9.0", - "sensiolabs/security-checker": "^4.1.0" + "php-parallel-lint/php-parallel-lint": "^1.3.1", + "phpcompatibility/php-compatibility": "^9.0" }, "type": "composer-plugin", "extra": { @@ -50,6 +50,10 @@ "email": "franck.nijhof@dealerdirect.com", "homepage": "http://www.frenck.nl", "role": "Developer / IT Manager" + }, + { + "name": "Contributors", + "homepage": "https://github.com/Dealerdirect/phpcodesniffer-composer-installer/graphs/contributors" } ], "description": "PHP_CodeSniffer Standards Composer Installer Plugin", @@ -61,6 +65,7 @@ "codesniffer", "composer", "installer", + "phpcbf", "phpcs", "plugin", "qa", @@ -75,33 +80,34 @@ "issues": "https://github.com/dealerdirect/phpcodesniffer-composer-installer/issues", "source": "https://github.com/dealerdirect/phpcodesniffer-composer-installer" }, - "time": "2020-12-07T18:04:37+00:00" + "time": "2022-02-04T12:51:07+00:00" }, { "name": "doctrine/instantiator", - "version": "1.4.0", + "version": "1.5.0", "source": { "type": "git", "url": "https://github.com/doctrine/instantiator.git", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b" + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/instantiator/zipball/d56bf6102915de5702778fe20f2de3b2fe570b5b", - "reference": "d56bf6102915de5702778fe20f2de3b2fe570b5b", + "url": "https://api.github.com/repos/doctrine/instantiator/zipball/0a0fa9780f5d4e507415a065172d26a98d02047b", + "reference": "0a0fa9780f5d4e507415a065172d26a98d02047b", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, "require-dev": { - "doctrine/coding-standard": "^8.0", + "doctrine/coding-standard": "^9 || ^11", "ext-pdo": "*", "ext-phar": "*", - "phpbench/phpbench": "^0.13 || 1.0.0-alpha2", - "phpstan/phpstan": "^0.12", - "phpstan/phpstan-phpunit": "^0.12", - "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" + "phpbench/phpbench": "^0.16 || ^1", + "phpstan/phpstan": "^1.4", + "phpstan/phpstan-phpunit": "^1", + "phpunit/phpunit": "^7.5 || ^8.5 || ^9.5", + "vimeo/psalm": "^4.30 || ^5.4" }, "type": "library", "autoload": { @@ -128,7 +134,7 @@ ], "support": { "issues": "https://github.com/doctrine/instantiator/issues", - "source": "https://github.com/doctrine/instantiator/tree/1.4.0" + "source": "https://github.com/doctrine/instantiator/tree/1.5.0" }, "funding": [ { @@ -144,41 +150,42 @@ "type": "tidelift" } ], - "time": "2020-11-10T18:47:58+00:00" + "time": "2022-12-30T00:15:36+00:00" }, { "name": "myclabs/deep-copy", - "version": "1.10.2", + "version": "1.11.1", "source": { "type": "git", "url": "https://github.com/myclabs/DeepCopy.git", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220" + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/776f831124e9c62e1a2c601ecc52e776d8bb7220", - "reference": "776f831124e9c62e1a2c601ecc52e776d8bb7220", + "url": "https://api.github.com/repos/myclabs/DeepCopy/zipball/7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", + "reference": "7284c22080590fb39f2ffa3e9057f10a4ddd0e0c", "shasum": "" }, "require": { "php": "^7.1 || ^8.0" }, - "replace": { - "myclabs/deep-copy": "self.version" + "conflict": { + "doctrine/collections": "<1.6.8", + "doctrine/common": "<2.13.3 || >=3,<3.2.2" }, "require-dev": { - "doctrine/collections": "^1.0", - "doctrine/common": "^2.6", - "phpunit/phpunit": "^7.1" + "doctrine/collections": "^1.6.8", + "doctrine/common": "^2.13.3 || ^3.2.2", + "phpunit/phpunit": "^7.5.20 || ^8.5.23 || ^9.5.13" }, "type": "library", "autoload": { - "psr-4": { - "DeepCopy\\": "src/DeepCopy/" - }, "files": [ "src/DeepCopy/deep_copy.php" - ] + ], + "psr-4": { + "DeepCopy\\": "src/DeepCopy/" + } }, "notification-url": "https://packagist.org/downloads/", "license": [ @@ -194,7 +201,7 @@ ], "support": { "issues": "https://github.com/myclabs/DeepCopy/issues", - "source": "https://github.com/myclabs/DeepCopy/tree/1.10.2" + "source": "https://github.com/myclabs/DeepCopy/tree/1.11.1" }, "funding": [ { @@ -202,29 +209,31 @@ "type": "tidelift" } ], - "time": "2020-11-13T09:40:50+00:00" + "time": "2023-03-08T13:26:56+00:00" }, { "name": "nikic/php-parser", - "version": "v4.13.1", + "version": "v5.0.2", "source": { "type": "git", "url": "https://github.com/nikic/PHP-Parser.git", - "reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd" + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/63a79e8daa781cac14e5195e63ed8ae231dd10fd", - "reference": "63a79e8daa781cac14e5195e63ed8ae231dd10fd", + "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/139676794dc1e9231bf7bcd123cfc0c99182cb13", + "reference": "139676794dc1e9231bf7bcd123cfc0c99182cb13", "shasum": "" }, "require": { + "ext-ctype": "*", + "ext-json": "*", "ext-tokenizer": "*", - "php": ">=7.0" + "php": ">=7.4" }, "require-dev": { "ircmaxell/php-yacc": "^0.0.7", - "phpunit/phpunit": "^6.5 || ^7.0 || ^8.0 || ^9.0" + "phpunit/phpunit": "^7.0 || ^8.0 || ^9.0" }, "bin": [ "bin/php-parse" @@ -232,7 +241,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "4.9-dev" + "dev-master": "5.0-dev" } }, "autoload": { @@ -256,26 +265,27 @@ ], "support": { "issues": "https://github.com/nikic/PHP-Parser/issues", - "source": "https://github.com/nikic/PHP-Parser/tree/v4.13.1" + "source": "https://github.com/nikic/PHP-Parser/tree/v5.0.2" }, - "time": "2021-11-03T20:52:16+00:00" + "time": "2024-03-05T20:51:40+00:00" }, { "name": "phar-io/manifest", - "version": "2.0.3", + "version": "2.0.4", "source": { "type": "git", "url": "https://github.com/phar-io/manifest.git", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53" + "reference": "54750ef60c58e43759730615a392c31c80e23176" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/manifest/zipball/97803eca37d319dfa7826cc2437fc020857acb53", - "reference": "97803eca37d319dfa7826cc2437fc020857acb53", + "url": "https://api.github.com/repos/phar-io/manifest/zipball/54750ef60c58e43759730615a392c31c80e23176", + "reference": "54750ef60c58e43759730615a392c31c80e23176", "shasum": "" }, "require": { "ext-dom": "*", + "ext-libxml": "*", "ext-phar": "*", "ext-xmlwriter": "*", "phar-io/version": "^3.0.1", @@ -316,22 +326,28 @@ "description": "Component for reading phar.io manifest information from a PHP Archive (PHAR)", "support": { "issues": "https://github.com/phar-io/manifest/issues", - "source": "https://github.com/phar-io/manifest/tree/2.0.3" + "source": "https://github.com/phar-io/manifest/tree/2.0.4" }, - "time": "2021-07-20T11:28:43+00:00" + "funding": [ + { + "url": "https://github.com/theseer", + "type": "github" + } + ], + "time": "2024-03-03T12:33:53+00:00" }, { "name": "phar-io/version", - "version": "3.1.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/phar-io/version.git", - "reference": "bae7c545bef187884426f042434e561ab1ddb182" + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phar-io/version/zipball/bae7c545bef187884426f042434e561ab1ddb182", - "reference": "bae7c545bef187884426f042434e561ab1ddb182", + "url": "https://api.github.com/repos/phar-io/version/zipball/4f7fd7836c6f332bb2933569e566a0d6c4cbed74", + "reference": "4f7fd7836c6f332bb2933569e566a0d6c4cbed74", "shasum": "" }, "require": { @@ -367,9 +383,9 @@ "description": "Library for handling version information and constraints", "support": { "issues": "https://github.com/phar-io/version/issues", - "source": "https://github.com/phar-io/version/tree/3.1.0" + "source": "https://github.com/phar-io/version/tree/3.2.1" }, - "time": "2021-02-23T14:00:09+00:00" + "time": "2022-02-21T01:04:05+00:00" }, { "name": "phpcompatibility/php-compatibility", @@ -434,251 +450,302 @@ "time": "2019-12-27T09:44:58+00:00" }, { - "name": "phpdocumentor/reflection-common", - "version": "2.2.0", + "name": "phpcompatibility/phpcompatibility-paragonie", + "version": "1.3.2", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionCommon.git", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b" + "url": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie.git", + "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionCommon/zipball/1d01c49d4ed62f25aa84a747ad35d5a16924662b", - "reference": "1d01c49d4ed62f25aa84a747ad35d5a16924662b", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityParagonie/zipball/bba5a9dfec7fcfbd679cfaf611d86b4d3759da26", + "reference": "bba5a9dfec7fcfbd679cfaf611d86b4d3759da26", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0" + "phpcompatibility/php-compatibility": "^9.0" }, - "type": "library", - "extra": { - "branch-alias": { - "dev-2.x": "2.x-dev" - } + "require-dev": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7", + "paragonie/random_compat": "dev-master", + "paragonie/sodium_compat": "dev-master" }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src/" - } + "suggest": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.", + "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." }, + "type": "phpcodesniffer-standard", "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-3.0-or-later" ], "authors": [ { - "name": "Jaap van Otterdijk", - "email": "opensource@ijaap.nl" + "name": "Wim Godden", + "role": "lead" + }, + { + "name": "Juliette Reinders Folmer", + "role": "lead" } ], - "description": "Common reflection classes used by phpdocumentor to reflect the code structure", - "homepage": "http://www.phpdoc.org", + "description": "A set of rulesets for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by the Paragonie polyfill libraries.", + "homepage": "http://phpcompatibility.com/", "keywords": [ - "FQSEN", - "phpDocumentor", - "phpdoc", - "reflection", + "compatibility", + "paragonie", + "phpcs", + "polyfill", + "standards", "static analysis" ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionCommon/issues", - "source": "https://github.com/phpDocumentor/ReflectionCommon/tree/2.x" + "issues": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie/issues", + "source": "https://github.com/PHPCompatibility/PHPCompatibilityParagonie" }, - "time": "2020-06-27T09:03:43+00:00" + "time": "2022-10-25T01:46:02+00:00" }, { - "name": "phpdocumentor/reflection-docblock", - "version": "5.3.0", + "name": "phpcompatibility/phpcompatibility-wp", + "version": "2.1.4", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/ReflectionDocBlock.git", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170" + "url": "https://github.com/PHPCompatibility/PHPCompatibilityWP.git", + "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/ReflectionDocBlock/zipball/622548b623e81ca6d78b721c5e029f4ce664f170", - "reference": "622548b623e81ca6d78b721c5e029f4ce664f170", + "url": "https://api.github.com/repos/PHPCompatibility/PHPCompatibilityWP/zipball/b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5", + "reference": "b6c1e3ee1c35de6c41a511d5eb9bd03e447480a5", "shasum": "" }, "require": { - "ext-filter": "*", - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.2", - "phpdocumentor/type-resolver": "^1.3", - "webmozart/assert": "^1.9.1" + "phpcompatibility/php-compatibility": "^9.0", + "phpcompatibility/phpcompatibility-paragonie": "^1.0" }, "require-dev": { - "mockery/mockery": "~1.3.2", - "psalm/phar": "^4.8" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "5.x-dev" - } + "dealerdirect/phpcodesniffer-composer-installer": "^0.7" }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" - } + "suggest": { + "dealerdirect/phpcodesniffer-composer-installer": "^0.7 || This Composer plugin will sort out the PHP_CodeSniffer 'installed_paths' automatically.", + "roave/security-advisories": "dev-master || Helps prevent installing dependencies with known security issues." }, + "type": "phpcodesniffer-standard", "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-3.0-or-later" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Wim Godden", + "role": "lead" }, { - "name": "Jaap van Otterdijk", - "email": "account@ijaap.nl" + "name": "Juliette Reinders Folmer", + "role": "lead" } ], - "description": "With this component, a library can provide support for annotations via DocBlocks or otherwise retrieve information that is embedded in a DocBlock.", + "description": "A ruleset for PHP_CodeSniffer to check for PHP cross-version compatibility issues in projects, while accounting for polyfills provided by WordPress.", + "homepage": "http://phpcompatibility.com/", + "keywords": [ + "compatibility", + "phpcs", + "standards", + "static analysis", + "wordpress" + ], "support": { - "issues": "https://github.com/phpDocumentor/ReflectionDocBlock/issues", - "source": "https://github.com/phpDocumentor/ReflectionDocBlock/tree/5.3.0" + "issues": "https://github.com/PHPCompatibility/PHPCompatibilityWP/issues", + "source": "https://github.com/PHPCompatibility/PHPCompatibilityWP" }, - "time": "2021-10-19T17:43:47+00:00" + "time": "2022-10-24T09:00:36+00:00" }, { - "name": "phpdocumentor/type-resolver", - "version": "1.5.1", + "name": "phpcsstandards/phpcsextra", + "version": "1.2.1", "source": { "type": "git", - "url": "https://github.com/phpDocumentor/TypeResolver.git", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae" + "url": "https://github.com/PHPCSStandards/PHPCSExtra.git", + "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpDocumentor/TypeResolver/zipball/a12f7e301eb7258bb68acd89d4aefa05c2906cae", - "reference": "a12f7e301eb7258bb68acd89d4aefa05c2906cae", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSExtra/zipball/11d387c6642b6e4acaf0bd9bf5203b8cca1ec489", + "reference": "11d387c6642b6e4acaf0bd9bf5203b8cca1ec489", "shasum": "" }, "require": { - "php": "^7.2 || ^8.0", - "phpdocumentor/reflection-common": "^2.0" + "php": ">=5.4", + "phpcsstandards/phpcsutils": "^1.0.9", + "squizlabs/php_codesniffer": "^3.8.0" }, "require-dev": { - "ext-tokenizer": "*", - "psalm/phar": "^4.8" + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcsstandards/phpcsdevcs": "^1.1.6", + "phpcsstandards/phpcsdevtools": "^1.2.1", + "phpunit/phpunit": "^4.5 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, - "type": "library", + "type": "phpcodesniffer-standard", "extra": { "branch-alias": { - "dev-1.x": "1.x-dev" - } - }, - "autoload": { - "psr-4": { - "phpDocumentor\\Reflection\\": "src" + "dev-stable": "1.x-dev", + "dev-develop": "1.x-dev" } }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-3.0-or-later" ], "authors": [ { - "name": "Mike van Riel", - "email": "me@mikevanriel.com" + "name": "Juliette Reinders Folmer", + "homepage": "https://github.com/jrfnl", + "role": "lead" + }, + { + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHPCSExtra/graphs/contributors" } ], - "description": "A PSR-5 based resolver of Class names, Types and Structural Element Names", + "description": "A collection of sniffs and standards for use with PHP_CodeSniffer.", + "keywords": [ + "PHP_CodeSniffer", + "phpcbf", + "phpcodesniffer-standard", + "phpcs", + "standards", + "static analysis" + ], "support": { - "issues": "https://github.com/phpDocumentor/TypeResolver/issues", - "source": "https://github.com/phpDocumentor/TypeResolver/tree/1.5.1" + "issues": "https://github.com/PHPCSStandards/PHPCSExtra/issues", + "security": "https://github.com/PHPCSStandards/PHPCSExtra/security/policy", + "source": "https://github.com/PHPCSStandards/PHPCSExtra" }, - "time": "2021-10-02T14:08:47+00:00" + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2023-12-08T16:49:07+00:00" }, { - "name": "phpspec/prophecy", - "version": "1.14.0", + "name": "phpcsstandards/phpcsutils", + "version": "1.0.9", "source": { "type": "git", - "url": "https://github.com/phpspec/prophecy.git", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e" + "url": "https://github.com/PHPCSStandards/PHPCSUtils.git", + "reference": "908247bc65010c7b7541a9551e002db12e9dae70" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpspec/prophecy/zipball/d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", - "reference": "d86dfc2e2a3cd366cee475e52c6bb3bbc371aa0e", + "url": "https://api.github.com/repos/PHPCSStandards/PHPCSUtils/zipball/908247bc65010c7b7541a9551e002db12e9dae70", + "reference": "908247bc65010c7b7541a9551e002db12e9dae70", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.2", - "php": "^7.2 || ~8.0, <8.2", - "phpdocumentor/reflection-docblock": "^5.2", - "sebastian/comparator": "^3.0 || ^4.0", - "sebastian/recursion-context": "^3.0 || ^4.0" + "dealerdirect/phpcodesniffer-composer-installer": "^0.4.1 || ^0.5 || ^0.6.2 || ^0.7 || ^1.0", + "php": ">=5.4", + "squizlabs/php_codesniffer": "^3.8.0 || 4.0.x-dev@dev" }, "require-dev": { - "phpspec/phpspec": "^6.0 || ^7.0", - "phpunit/phpunit": "^8.0 || ^9.0" + "ext-filter": "*", + "php-parallel-lint/php-console-highlighter": "^1.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", + "phpcsstandards/phpcsdevcs": "^1.1.6", + "yoast/phpunit-polyfills": "^1.1.0 || ^2.0.0" }, - "type": "library", + "type": "phpcodesniffer-standard", "extra": { "branch-alias": { - "dev-master": "1.x-dev" + "dev-stable": "1.x-dev", + "dev-develop": "1.x-dev" } }, "autoload": { - "psr-4": { - "Prophecy\\": "src/Prophecy" - } + "classmap": [ + "PHPCSUtils/" + ] }, "notification-url": "https://packagist.org/downloads/", "license": [ - "MIT" + "LGPL-3.0-or-later" ], "authors": [ { - "name": "Konstantin Kudryashov", - "email": "ever.zet@gmail.com", - "homepage": "http://everzet.com" + "name": "Juliette Reinders Folmer", + "homepage": "https://github.com/jrfnl", + "role": "lead" }, { - "name": "Marcello Duarte", - "email": "marcello.duarte@gmail.com" + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHPCSUtils/graphs/contributors" } ], - "description": "Highly opinionated mocking framework for PHP 5.3+", - "homepage": "https://github.com/phpspec/prophecy", + "description": "A suite of utility functions for use with PHP_CodeSniffer", + "homepage": "https://phpcsutils.com/", "keywords": [ - "Double", - "Dummy", - "fake", - "mock", - "spy", - "stub" + "PHP_CodeSniffer", + "phpcbf", + "phpcodesniffer-standard", + "phpcs", + "phpcs3", + "standards", + "static analysis", + "tokens", + "utility" ], "support": { - "issues": "https://github.com/phpspec/prophecy/issues", - "source": "https://github.com/phpspec/prophecy/tree/1.14.0" + "docs": "https://phpcsutils.com/", + "issues": "https://github.com/PHPCSStandards/PHPCSUtils/issues", + "security": "https://github.com/PHPCSStandards/PHPCSUtils/security/policy", + "source": "https://github.com/PHPCSStandards/PHPCSUtils" }, - "time": "2021-09-10T09:02:12+00:00" + "funding": [ + { + "url": "https://github.com/PHPCSStandards", + "type": "github" + }, + { + "url": "https://github.com/jrfnl", + "type": "github" + }, + { + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" + } + ], + "time": "2023-12-08T14:50:00+00:00" }, { "name": "phpunit/php-code-coverage", - "version": "9.2.8", + "version": "9.2.31", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "cf04e88a2e3c56fc1a65488afd493325b4c1bc3e" + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/cf04e88a2e3c56fc1a65488afd493325b4c1bc3e", - "reference": "cf04e88a2e3c56fc1a65488afd493325b4c1bc3e", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/48c34b5d8d983006bd2adc2d0de92963b9155965", + "reference": "48c34b5d8d983006bd2adc2d0de92963b9155965", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^4.13.0", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3", "phpunit/php-file-iterator": "^3.0.3", "phpunit/php-text-template": "^2.0.2", @@ -693,8 +760,8 @@ "phpunit/phpunit": "^9.3" }, "suggest": { - "ext-pcov": "*", - "ext-xdebug": "*" + "ext-pcov": "PHP extension that provides line coverage", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "type": "library", "extra": { @@ -727,7 +794,8 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.8" + "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/9.2.31" }, "funding": [ { @@ -735,20 +803,20 @@ "type": "github" } ], - "time": "2021-10-30T08:01:38+00:00" + "time": "2024-03-02T06:37:42+00:00" }, { "name": "phpunit/php-file-iterator", - "version": "3.0.5", + "version": "3.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-file-iterator.git", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8" + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/aa4be8575f26070b100fccb67faabb28f21f66f8", - "reference": "aa4be8575f26070b100fccb67faabb28f21f66f8", + "url": "https://api.github.com/repos/sebastianbergmann/php-file-iterator/zipball/cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", + "reference": "cf1c2e7c203ac650e352f4cc675a7021e7d1b3cf", "shasum": "" }, "require": { @@ -787,7 +855,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/php-file-iterator/issues", - "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.5" + "source": "https://github.com/sebastianbergmann/php-file-iterator/tree/3.0.6" }, "funding": [ { @@ -795,7 +863,7 @@ "type": "github" } ], - "time": "2020-09-28T05:57:25+00:00" + "time": "2021-12-02T12:48:52+00:00" }, { "name": "phpunit/php-invoker", @@ -980,20 +1048,20 @@ }, { "name": "phpunit/phpunit", - "version": "9.5.10", + "version": "9.6.17", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a" + "reference": "1a156980d78a6666721b7e8e8502fe210b587fcd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/c814a05837f2edb0d1471d6e3f4ab3501ca3899a", - "reference": "c814a05837f2edb0d1471d6e3f4ab3501ca3899a", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/1a156980d78a6666721b7e8e8502fe210b587fcd", + "reference": "1a156980d78a6666721b7e8e8502fe210b587fcd", "shasum": "" }, "require": { - "doctrine/instantiator": "^1.3.1", + "doctrine/instantiator": "^1.3.1 || ^2", "ext-dom": "*", "ext-json": "*", "ext-libxml": "*", @@ -1004,31 +1072,26 @@ "phar-io/manifest": "^2.0.3", "phar-io/version": "^3.0.2", "php": ">=7.3", - "phpspec/prophecy": "^1.12.1", - "phpunit/php-code-coverage": "^9.2.7", + "phpunit/php-code-coverage": "^9.2.28", "phpunit/php-file-iterator": "^3.0.5", "phpunit/php-invoker": "^3.1.1", "phpunit/php-text-template": "^2.0.3", "phpunit/php-timer": "^5.0.2", "sebastian/cli-parser": "^1.0.1", "sebastian/code-unit": "^1.0.6", - "sebastian/comparator": "^4.0.5", + "sebastian/comparator": "^4.0.8", "sebastian/diff": "^4.0.3", "sebastian/environment": "^5.1.3", - "sebastian/exporter": "^4.0.3", + "sebastian/exporter": "^4.0.5", "sebastian/global-state": "^5.0.1", "sebastian/object-enumerator": "^4.0.3", "sebastian/resource-operations": "^3.0.3", - "sebastian/type": "^2.3.4", + "sebastian/type": "^3.2", "sebastian/version": "^3.0.2" }, - "require-dev": { - "ext-pdo": "*", - "phpspec/prophecy-phpunit": "^2.0.1" - }, "suggest": { - "ext-soap": "*", - "ext-xdebug": "*" + "ext-soap": "To be able to generate mocks based on WSDL files", + "ext-xdebug": "PHP extension that provides line coverage as well as branch and path coverage" }, "bin": [ "phpunit" @@ -1036,15 +1099,15 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "9.5-dev" + "dev-master": "9.6-dev" } }, "autoload": { - "classmap": [ - "src/" - ], "files": [ "src/Framework/Assert/Functions.php" + ], + "classmap": [ + "src/" ] }, "notification-url": "https://packagist.org/downloads/", @@ -1067,32 +1130,37 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/phpunit/issues", - "source": "https://github.com/sebastianbergmann/phpunit/tree/9.5.10" + "security": "https://github.com/sebastianbergmann/phpunit/security/policy", + "source": "https://github.com/sebastianbergmann/phpunit/tree/9.6.17" }, "funding": [ { - "url": "https://phpunit.de/donate.html", + "url": "https://phpunit.de/sponsors.html", "type": "custom" }, { "url": "https://github.com/sebastianbergmann", "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/phpunit/phpunit", + "type": "tidelift" } ], - "time": "2021-09-25T07:38:51+00:00" + "time": "2024-02-23T13:14:51+00:00" }, { "name": "sebastian/cli-parser", - "version": "1.0.1", + "version": "1.0.2", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/cli-parser.git", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2" + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/442e7c7e687e42adc03470c7b668bc4b2402c0b2", - "reference": "442e7c7e687e42adc03470c7b668bc4b2402c0b2", + "url": "https://api.github.com/repos/sebastianbergmann/cli-parser/zipball/2b56bea83a09de3ac06bb18b92f068e60cc6f50b", + "reference": "2b56bea83a09de3ac06bb18b92f068e60cc6f50b", "shasum": "" }, "require": { @@ -1127,7 +1195,7 @@ "homepage": "https://github.com/sebastianbergmann/cli-parser", "support": { "issues": "https://github.com/sebastianbergmann/cli-parser/issues", - "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.1" + "source": "https://github.com/sebastianbergmann/cli-parser/tree/1.0.2" }, "funding": [ { @@ -1135,7 +1203,7 @@ "type": "github" } ], - "time": "2020-09-28T06:08:49+00:00" + "time": "2024-03-02T06:27:43+00:00" }, { "name": "sebastian/code-unit", @@ -1250,16 +1318,16 @@ }, { "name": "sebastian/comparator", - "version": "4.0.6", + "version": "4.0.8", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/comparator.git", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382" + "reference": "fa0f136dd2334583309d32b62544682ee972b51a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/55f4261989e546dc112258c7a75935a81a7ce382", - "reference": "55f4261989e546dc112258c7a75935a81a7ce382", + "url": "https://api.github.com/repos/sebastianbergmann/comparator/zipball/fa0f136dd2334583309d32b62544682ee972b51a", + "reference": "fa0f136dd2334583309d32b62544682ee972b51a", "shasum": "" }, "require": { @@ -1312,7 +1380,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/comparator/issues", - "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.6" + "source": "https://github.com/sebastianbergmann/comparator/tree/4.0.8" }, "funding": [ { @@ -1320,24 +1388,24 @@ "type": "github" } ], - "time": "2020-10-26T15:49:45+00:00" + "time": "2022-09-14T12:41:17+00:00" }, { "name": "sebastian/complexity", - "version": "2.0.2", + "version": "2.0.3", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/complexity.git", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88" + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/739b35e53379900cc9ac327b2147867b8b6efd88", - "reference": "739b35e53379900cc9ac327b2147867b8b6efd88", + "url": "https://api.github.com/repos/sebastianbergmann/complexity/zipball/25f207c40d62b8b7aa32f5ab026c53561964053a", + "reference": "25f207c40d62b8b7aa32f5ab026c53561964053a", "shasum": "" }, "require": { - "nikic/php-parser": "^4.7", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -1369,7 +1437,7 @@ "homepage": "https://github.com/sebastianbergmann/complexity", "support": { "issues": "https://github.com/sebastianbergmann/complexity/issues", - "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.2" + "source": "https://github.com/sebastianbergmann/complexity/tree/2.0.3" }, "funding": [ { @@ -1377,20 +1445,20 @@ "type": "github" } ], - "time": "2020-10-26T15:52:27+00:00" + "time": "2023-12-22T06:19:30+00:00" }, { "name": "sebastian/diff", - "version": "4.0.4", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/diff.git", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d" + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/3461e3fccc7cfdfc2720be910d3bd73c69be590d", - "reference": "3461e3fccc7cfdfc2720be910d3bd73c69be590d", + "url": "https://api.github.com/repos/sebastianbergmann/diff/zipball/ba01945089c3a293b01ba9badc29ad55b106b0bc", + "reference": "ba01945089c3a293b01ba9badc29ad55b106b0bc", "shasum": "" }, "require": { @@ -1435,7 +1503,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/diff/issues", - "source": "https://github.com/sebastianbergmann/diff/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/diff/tree/4.0.6" }, "funding": [ { @@ -1443,20 +1511,20 @@ "type": "github" } ], - "time": "2020-10-26T13:10:38+00:00" + "time": "2024-03-02T06:30:58+00:00" }, { "name": "sebastian/environment", - "version": "5.1.3", + "version": "5.1.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/environment.git", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac" + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/388b6ced16caa751030f6a69e588299fa09200ac", - "reference": "388b6ced16caa751030f6a69e588299fa09200ac", + "url": "https://api.github.com/repos/sebastianbergmann/environment/zipball/830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", + "reference": "830c43a844f1f8d5b7a1f6d6076b784454d8b7ed", "shasum": "" }, "require": { @@ -1498,7 +1566,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/environment/issues", - "source": "https://github.com/sebastianbergmann/environment/tree/5.1.3" + "source": "https://github.com/sebastianbergmann/environment/tree/5.1.5" }, "funding": [ { @@ -1506,20 +1574,20 @@ "type": "github" } ], - "time": "2020-09-28T05:52:38+00:00" + "time": "2023-02-03T06:03:51+00:00" }, { "name": "sebastian/exporter", - "version": "4.0.4", + "version": "4.0.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/exporter.git", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9" + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/65e8b7db476c5dd267e65eea9cab77584d3cfff9", - "reference": "65e8b7db476c5dd267e65eea9cab77584d3cfff9", + "url": "https://api.github.com/repos/sebastianbergmann/exporter/zipball/78c00df8f170e02473b682df15bfcdacc3d32d72", + "reference": "78c00df8f170e02473b682df15bfcdacc3d32d72", "shasum": "" }, "require": { @@ -1575,7 +1643,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/exporter/issues", - "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/exporter/tree/4.0.6" }, "funding": [ { @@ -1583,20 +1651,20 @@ "type": "github" } ], - "time": "2021-11-11T14:18:36+00:00" + "time": "2024-03-02T06:33:00+00:00" }, { "name": "sebastian/global-state", - "version": "5.0.3", + "version": "5.0.7", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/global-state.git", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49" + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/23bd5951f7ff26f12d4e3242864df3e08dec4e49", - "reference": "23bd5951f7ff26f12d4e3242864df3e08dec4e49", + "url": "https://api.github.com/repos/sebastianbergmann/global-state/zipball/bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", + "reference": "bca7df1f32ee6fe93b4d4a9abbf69e13a4ada2c9", "shasum": "" }, "require": { @@ -1639,7 +1707,7 @@ ], "support": { "issues": "https://github.com/sebastianbergmann/global-state/issues", - "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.3" + "source": "https://github.com/sebastianbergmann/global-state/tree/5.0.7" }, "funding": [ { @@ -1647,24 +1715,24 @@ "type": "github" } ], - "time": "2021-06-11T13:31:12+00:00" + "time": "2024-03-02T06:35:11+00:00" }, { "name": "sebastian/lines-of-code", - "version": "1.0.3", + "version": "1.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/lines-of-code.git", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc" + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/c1c2e997aa3146983ed888ad08b15470a2e22ecc", - "reference": "c1c2e997aa3146983ed888ad08b15470a2e22ecc", + "url": "https://api.github.com/repos/sebastianbergmann/lines-of-code/zipball/e1e4a170560925c26d424b6a03aed157e7dcc5c5", + "reference": "e1e4a170560925c26d424b6a03aed157e7dcc5c5", "shasum": "" }, "require": { - "nikic/php-parser": "^4.6", + "nikic/php-parser": "^4.18 || ^5.0", "php": ">=7.3" }, "require-dev": { @@ -1696,7 +1764,7 @@ "homepage": "https://github.com/sebastianbergmann/lines-of-code", "support": { "issues": "https://github.com/sebastianbergmann/lines-of-code/issues", - "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.3" + "source": "https://github.com/sebastianbergmann/lines-of-code/tree/1.0.4" }, "funding": [ { @@ -1704,7 +1772,7 @@ "type": "github" } ], - "time": "2020-11-28T06:42:11+00:00" + "time": "2023-12-22T06:20:34+00:00" }, { "name": "sebastian/object-enumerator", @@ -1820,16 +1888,16 @@ }, { "name": "sebastian/recursion-context", - "version": "4.0.4", + "version": "4.0.5", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/recursion-context.git", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172" + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/cd9d8cf3c5804de4341c283ed787f099f5506172", - "reference": "cd9d8cf3c5804de4341c283ed787f099f5506172", + "url": "https://api.github.com/repos/sebastianbergmann/recursion-context/zipball/e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", + "reference": "e75bd0f07204fec2a0af9b0f3cfe97d05f92efc1", "shasum": "" }, "require": { @@ -1868,10 +1936,10 @@ } ], "description": "Provides functionality to recursively process PHP variables", - "homepage": "http://www.github.com/sebastianbergmann/recursion-context", + "homepage": "https://github.com/sebastianbergmann/recursion-context", "support": { "issues": "https://github.com/sebastianbergmann/recursion-context/issues", - "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.4" + "source": "https://github.com/sebastianbergmann/recursion-context/tree/4.0.5" }, "funding": [ { @@ -1879,20 +1947,20 @@ "type": "github" } ], - "time": "2020-10-26T13:17:30+00:00" + "time": "2023-02-03T06:07:39+00:00" }, { "name": "sebastian/resource-operations", - "version": "3.0.3", + "version": "3.0.4", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/resource-operations.git", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8" + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", - "reference": "0f4443cb3a1d92ce809899753bc0d5d5a8dd19a8", + "url": "https://api.github.com/repos/sebastianbergmann/resource-operations/zipball/05d5692a7993ecccd56a03e40cd7e5b09b1d404e", + "reference": "05d5692a7993ecccd56a03e40cd7e5b09b1d404e", "shasum": "" }, "require": { @@ -1904,7 +1972,7 @@ "type": "library", "extra": { "branch-alias": { - "dev-master": "3.0-dev" + "dev-main": "3.0-dev" } }, "autoload": { @@ -1925,8 +1993,7 @@ "description": "Provides a list of PHP built-in functions that operate on resources", "homepage": "https://www.github.com/sebastianbergmann/resource-operations", "support": { - "issues": "https://github.com/sebastianbergmann/resource-operations/issues", - "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.3" + "source": "https://github.com/sebastianbergmann/resource-operations/tree/3.0.4" }, "funding": [ { @@ -1934,32 +2001,32 @@ "type": "github" } ], - "time": "2020-09-28T06:45:17+00:00" + "time": "2024-03-14T16:00:52+00:00" }, { "name": "sebastian/type", - "version": "2.3.4", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/type.git", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914" + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/b8cd8a1c753c90bc1a0f5372170e3e489136f914", - "reference": "b8cd8a1c753c90bc1a0f5372170e3e489136f914", + "url": "https://api.github.com/repos/sebastianbergmann/type/zipball/75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", + "reference": "75e2c2a32f5e0b3aef905b9ed0b179b953b3d7c7", "shasum": "" }, "require": { "php": ">=7.3" }, "require-dev": { - "phpunit/phpunit": "^9.3" + "phpunit/phpunit": "^9.5" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "2.3-dev" + "dev-master": "3.2-dev" } }, "autoload": { @@ -1982,7 +2049,7 @@ "homepage": "https://github.com/sebastianbergmann/type", "support": { "issues": "https://github.com/sebastianbergmann/type/issues", - "source": "https://github.com/sebastianbergmann/type/tree/2.3.4" + "source": "https://github.com/sebastianbergmann/type/tree/3.2.1" }, "funding": [ { @@ -1990,7 +2057,7 @@ "type": "github" } ], - "time": "2021-06-15T12:49:02+00:00" + "time": "2023-02-03T06:13:03+00:00" }, { "name": "sebastian/version", @@ -2045,71 +2112,18 @@ ], "time": "2020-09-28T06:39:44+00:00" }, - { - "name": "sirbrillig/phpcs-variable-analysis", - "version": "v2.11.2", - "source": { - "type": "git", - "url": "https://github.com/sirbrillig/phpcs-variable-analysis.git", - "reference": "3fad28475bfbdbf8aa5c440f8a8f89824983d85e" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/sirbrillig/phpcs-variable-analysis/zipball/3fad28475bfbdbf8aa5c440f8a8f89824983d85e", - "reference": "3fad28475bfbdbf8aa5c440f8a8f89824983d85e", - "shasum": "" - }, - "require": { - "php": ">=5.4.0", - "squizlabs/php_codesniffer": "^3.5" - }, - "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.7.0", - "limedeck/phpunit-detailed-printer": "^3.1 || ^4.0 || ^5.0", - "phpstan/phpstan": "^0.11.8", - "phpunit/phpunit": "^5.0 || ^6.5 || ^7.0 || ^8.0", - "sirbrillig/phpcs-import-detection": "^1.1" - }, - "type": "phpcodesniffer-standard", - "autoload": { - "psr-4": { - "VariableAnalysis\\": "VariableAnalysis/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Sam Graham", - "email": "php-codesniffer-variableanalysis@illusori.co.uk" - }, - { - "name": "Payton Swick", - "email": "payton@foolord.com" - } - ], - "description": "A PHPCS sniff to detect problems with variables.", - "support": { - "issues": "https://github.com/sirbrillig/phpcs-variable-analysis/issues", - "source": "https://github.com/sirbrillig/phpcs-variable-analysis", - "wiki": "https://github.com/sirbrillig/phpcs-variable-analysis/wiki" - }, - "time": "2021-07-06T23:45:17+00:00" - }, { "name": "squizlabs/php_codesniffer", - "version": "3.6.1", + "version": "3.9.0", "source": { "type": "git", - "url": "https://github.com/squizlabs/PHP_CodeSniffer.git", - "reference": "f268ca40d54617c6e06757f83f699775c9b3ff2e" + "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", + "reference": "d63cee4890a8afaf86a22e51ad4d97c91dd4579b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/squizlabs/PHP_CodeSniffer/zipball/f268ca40d54617c6e06757f83f699775c9b3ff2e", - "reference": "f268ca40d54617c6e06757f83f699775c9b3ff2e", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/d63cee4890a8afaf86a22e51ad4d97c91dd4579b", + "reference": "d63cee4890a8afaf86a22e51ad4d97c91dd4579b", "shasum": "" }, "require": { @@ -2119,11 +2133,11 @@ "php": ">=5.4.0" }, "require-dev": { - "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" + "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0 || ^8.0 || ^9.3.4" }, "bin": [ - "bin/phpcs", - "bin/phpcbf" + "bin/phpcbf", + "bin/phpcs" ], "type": "library", "extra": { @@ -2138,113 +2152,58 @@ "authors": [ { "name": "Greg Sherwood", - "role": "lead" - } - ], - "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", - "homepage": "https://github.com/squizlabs/PHP_CodeSniffer", - "keywords": [ - "phpcs", - "standards" - ], - "support": { - "issues": "https://github.com/squizlabs/PHP_CodeSniffer/issues", - "source": "https://github.com/squizlabs/PHP_CodeSniffer", - "wiki": "https://github.com/squizlabs/PHP_CodeSniffer/wiki" - }, - "time": "2021-10-11T04:00:11+00:00" - }, - { - "name": "symfony/polyfill-ctype", - "version": "v1.23.0", - "source": { - "type": "git", - "url": "https://github.com/symfony/polyfill-ctype.git", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-ctype/zipball/46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "reference": "46cd95797e9df938fdd2b03693b5fca5e64b01ce", - "shasum": "" - }, - "require": { - "php": ">=7.1" - }, - "suggest": { - "ext-ctype": "For best performance" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-main": "1.23-dev" - }, - "thanks": { - "name": "symfony/polyfill", - "url": "https://github.com/symfony/polyfill" - } - }, - "autoload": { - "psr-4": { - "Symfony\\Polyfill\\Ctype\\": "" + "role": "Former lead" }, - "files": [ - "bootstrap.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ { - "name": "Gert de Pagter", - "email": "BackEndTea@gmail.com" + "name": "Juliette Reinders Folmer", + "role": "Current lead" }, { - "name": "Symfony Community", - "homepage": "https://symfony.com/contributors" + "name": "Contributors", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer/graphs/contributors" } ], - "description": "Symfony polyfill for ctype functions", - "homepage": "https://symfony.com", + "description": "PHP_CodeSniffer tokenizes PHP, JavaScript and CSS files and detects violations of a defined set of coding standards.", + "homepage": "https://github.com/PHPCSStandards/PHP_CodeSniffer", "keywords": [ - "compatibility", - "ctype", - "polyfill", - "portable" + "phpcs", + "standards", + "static analysis" ], "support": { - "source": "https://github.com/symfony/polyfill-ctype/tree/v1.23.0" + "issues": "https://github.com/PHPCSStandards/PHP_CodeSniffer/issues", + "security": "https://github.com/PHPCSStandards/PHP_CodeSniffer/security/policy", + "source": "https://github.com/PHPCSStandards/PHP_CodeSniffer", + "wiki": "https://github.com/PHPCSStandards/PHP_CodeSniffer/wiki" }, "funding": [ { - "url": "https://symfony.com/sponsor", - "type": "custom" + "url": "https://github.com/PHPCSStandards", + "type": "github" }, { - "url": "https://github.com/fabpot", + "url": "https://github.com/jrfnl", "type": "github" }, { - "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", - "type": "tidelift" + "url": "https://opencollective.com/php_codesniffer", + "type": "open_collective" } ], - "time": "2021-02-19T12:13:01+00:00" + "time": "2024-02-16T15:06:51+00:00" }, { "name": "theseer/tokenizer", - "version": "1.2.1", + "version": "1.2.3", "source": { "type": "git", "url": "https://github.com/theseer/tokenizer.git", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e" + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/theseer/tokenizer/zipball/34a41e998c2183e22995f158c581e7b5e755ab9e", - "reference": "34a41e998c2183e22995f158c581e7b5e755ab9e", + "url": "https://api.github.com/repos/theseer/tokenizer/zipball/737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", + "reference": "737eda637ed5e28c3413cb1ebe8bb52cbf1ca7a2", "shasum": "" }, "require": { @@ -2273,7 +2232,7 @@ "description": "A small library for converting tokenized PHP source code into XML and potentially other formats", "support": { "issues": "https://github.com/theseer/tokenizer/issues", - "source": "https://github.com/theseer/tokenizer/tree/1.2.1" + "source": "https://github.com/theseer/tokenizer/tree/1.2.3" }, "funding": [ { @@ -2281,92 +2240,42 @@ "type": "github" } ], - "time": "2021-07-28T10:34:58+00:00" - }, - { - "name": "webmozart/assert", - "version": "1.10.0", - "source": { - "type": "git", - "url": "https://github.com/webmozarts/assert.git", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/webmozarts/assert/zipball/6964c76c7804814a842473e0c8fd15bab0f18e25", - "reference": "6964c76c7804814a842473e0c8fd15bab0f18e25", - "shasum": "" - }, - "require": { - "php": "^7.2 || ^8.0", - "symfony/polyfill-ctype": "^1.8" - }, - "conflict": { - "phpstan/phpstan": "<0.12.20", - "vimeo/psalm": "<4.6.1 || 4.6.2" - }, - "require-dev": { - "phpunit/phpunit": "^8.5.13" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "1.10-dev" - } - }, - "autoload": { - "psr-4": { - "Webmozart\\Assert\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "MIT" - ], - "authors": [ - { - "name": "Bernhard Schussek", - "email": "bschussek@gmail.com" - } - ], - "description": "Assertions to validate method input/output with nice error messages.", - "keywords": [ - "assert", - "check", - "validate" - ], - "support": { - "issues": "https://github.com/webmozarts/assert/issues", - "source": "https://github.com/webmozarts/assert/tree/1.10.0" - }, - "time": "2021-03-09T10:59:23+00:00" + "time": "2024-03-03T12:36:25+00:00" }, { "name": "wp-coding-standards/wpcs", - "version": "2.3.0", + "version": "3.0.1", "source": { "type": "git", "url": "https://github.com/WordPress/WordPress-Coding-Standards.git", - "reference": "7da1894633f168fe244afc6de00d141f27517b62" + "reference": "b4caf9689f1a0e4a4c632679a44e638c1c67aff1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/7da1894633f168fe244afc6de00d141f27517b62", - "reference": "7da1894633f168fe244afc6de00d141f27517b62", + "url": "https://api.github.com/repos/WordPress/WordPress-Coding-Standards/zipball/b4caf9689f1a0e4a4c632679a44e638c1c67aff1", + "reference": "b4caf9689f1a0e4a4c632679a44e638c1c67aff1", "shasum": "" }, "require": { + "ext-filter": "*", + "ext-libxml": "*", + "ext-tokenizer": "*", + "ext-xmlreader": "*", "php": ">=5.4", - "squizlabs/php_codesniffer": "^3.3.1" + "phpcsstandards/phpcsextra": "^1.1.0", + "phpcsstandards/phpcsutils": "^1.0.8", + "squizlabs/php_codesniffer": "^3.7.2" }, "require-dev": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.5 || ^0.6", + "php-parallel-lint/php-console-highlighter": "^1.0.0", + "php-parallel-lint/php-parallel-lint": "^1.3.2", "phpcompatibility/php-compatibility": "^9.0", - "phpcsstandards/phpcsdevtools": "^1.0", + "phpcsstandards/phpcsdevtools": "^1.2.0", "phpunit/phpunit": "^4.0 || ^5.0 || ^6.0 || ^7.0" }, "suggest": { - "dealerdirect/phpcodesniffer-composer-installer": "^0.6 || This Composer plugin will sort out the PHPCS 'installed_paths' automatically." + "ext-iconv": "For improved results", + "ext-mbstring": "For improved results" }, "type": "phpcodesniffer-standard", "notification-url": "https://packagist.org/downloads/", @@ -2383,6 +2292,7 @@ "keywords": [ "phpcs", "standards", + "static analysis", "wordpress" ], "support": { @@ -2390,68 +2300,26 @@ "source": "https://github.com/WordPress/WordPress-Coding-Standards", "wiki": "https://github.com/WordPress/WordPress-Coding-Standards/wiki" }, - "time": "2020-05-13T23:57:56+00:00" - }, - { - "name": "wp-phpunit/wp-phpunit", - "version": "5.8.2", - "source": { - "type": "git", - "url": "https://github.com/wp-phpunit/wp-phpunit.git", - "reference": "0cefcc49fd8a7e8c2f8d755e314532441618aee5" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/wp-phpunit/wp-phpunit/zipball/0cefcc49fd8a7e8c2f8d755e314532441618aee5", - "reference": "0cefcc49fd8a7e8c2f8d755e314532441618aee5", - "shasum": "" - }, - "type": "library", - "autoload": { - "files": [ - "__loaded.php" - ] - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "GPL-2.0-or-later" - ], - "authors": [ - { - "name": "Evan Mattson", - "email": "me@aaemnnost.tv" - }, + "funding": [ { - "name": "WordPress Community", - "homepage": "https://wordpress.org/about/" + "url": "https://opencollective.com/thewpcc/contribute/wp-php-63406", + "type": "custom" } ], - "description": "WordPress core PHPUnit library", - "homepage": "https://github.com/wp-phpunit", - "keywords": [ - "phpunit", - "test", - "wordpress" - ], - "support": { - "docs": "https://github.com/wp-phpunit/docs", - "issues": "https://github.com/wp-phpunit/issues", - "source": "https://github.com/wp-phpunit/wp-phpunit" - }, - "time": "2021-11-10T19:49:29+00:00" + "time": "2023-09-14T07:06:09+00:00" }, { "name": "yoast/phpunit-polyfills", - "version": "1.0.2", + "version": "1.1.0", "source": { "type": "git", "url": "https://github.com/Yoast/PHPUnit-Polyfills.git", - "reference": "1a582ab1d91e86aa450340c4d35631a85314ff9f" + "reference": "224e4a1329c03d8bad520e3fc4ec980034a4b212" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/1a582ab1d91e86aa450340c4d35631a85314ff9f", - "reference": "1a582ab1d91e86aa450340c4d35631a85314ff9f", + "url": "https://api.github.com/repos/Yoast/PHPUnit-Polyfills/zipball/224e4a1329c03d8bad520e3fc4ec980034a4b212", + "reference": "224e4a1329c03d8bad520e3fc4ec980034a4b212", "shasum": "" }, "require": { @@ -2459,13 +2327,12 @@ "phpunit/phpunit": "^4.8.36 || ^5.7.21 || ^6.0 || ^7.0 || ^8.0 || ^9.0" }, "require-dev": { - "yoast/yoastcs": "^2.2.0" + "yoast/yoastcs": "^2.3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-main": "1.x-dev", - "dev-develop": "1.x-dev" + "dev-main": "2.x-dev" } }, "autoload": { @@ -2499,7 +2366,7 @@ "issues": "https://github.com/Yoast/PHPUnit-Polyfills/issues", "source": "https://github.com/Yoast/PHPUnit-Polyfills" }, - "time": "2021-10-03T08:40:26+00:00" + "time": "2023-08-19T14:25:08+00:00" } ], "aliases": [], @@ -2508,8 +2375,8 @@ "prefer-stable": false, "prefer-lowest": false, "platform": { - "php": ">=5.6" + "php": ">=7.4" }, "platform-dev": [], - "plugin-api-version": "2.0.0" + "plugin-api-version": "2.6.0" } diff --git a/package-lock.json b/package-lock.json index 974840b..dc956ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,1953 +1,2760 @@ { - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "@kwsites/file-exists": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", - "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", - "dev": true, - "requires": { - "debug": "^4.1.1" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "@kwsites/promise-deferred": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", - "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", - "dev": true - }, - "@sindresorhus/is": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-2.1.1.tgz", - "integrity": "sha512-/aPsuoj/1Dw/kzhkgz+ES6TxG0zfTMGLwuK2ZG00k/iJzYHTLCE8mVU8EPqEOp/lmxPoq1C1C9RYToRKb2KEfg==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", - "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", - "dev": true, - "requires": { - "defer-to-connect": "^2.0.0" - } - }, - "@types/cacheable-request": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", - "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", - "dev": true, - "requires": { - "@types/http-cache-semantics": "*", - "@types/keyv": "*", - "@types/node": "*", - "@types/responselike": "*" - } - }, - "@types/http-cache-semantics": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", - "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==", - "dev": true - }, - "@types/keyv": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", - "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/node": { - "version": "16.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.7.tgz", - "integrity": "sha512-QB5D2sqfSjCmTuWcBWyJ+/44bcjO7VbjSbOE0ucoVbAsSNQc4Lt6QkgkVXkTDwkL4z/beecZNDvVX15D4P8Jbw==", - "dev": true - }, - "@types/responselike": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", - "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@wordpress/env": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-4.1.3.tgz", - "integrity": "sha512-mU+MayYal+GghtbV5yGvBZPpVqm1L9ozcWqqiC9sLyMGrYKWWTMf0TRTaKBSo5DoJ4DNVCVbJkRS3MzGuCfSbQ==", - "dev": true, - "requires": { - "chalk": "^4.0.0", - "copy-dir": "^1.3.0", - "docker-compose": "^0.22.2", - "extract-zip": "^1.6.7", - "got": "^10.7.0", - "inquirer": "^7.1.0", - "js-yaml": "^3.13.1", - "ora": "^4.0.2", - "rimraf": "^3.0.2", - "simple-git": "^2.35.0", - "terminal-link": "^2.0.0", - "yargs": "^14.0.0" - } - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - }, - "dependencies": { - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - } - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", - "dev": true - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "cacheable-lookup": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-2.0.1.tgz", - "integrity": "sha512-EMMbsiOTcdngM/K6gV/OxF2x0t07+vMOWxZNSCRQMjO2MY2nhZQ6OYhOOpyQrbhqsgtvKGI7hcq6xjnA92USjg==", - "dev": true, - "requires": { - "@types/keyv": "^3.1.1", - "keyv": "^4.0.0" - } - }, - "cacheable-request": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", - "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "chardet": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true - }, - "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, - "requires": { - "restore-cursor": "^3.1.0" - } - }, - "cli-spinners": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", - "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", - "dev": true - }, - "cli-width": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "clone": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", - "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", - "dev": true - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - }, - "dependencies": { - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - } - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "copy-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.3.0.tgz", - "integrity": "sha512-Q4+qBFnN4bwGwvtXXzbp4P/4iNk0MaiGAzvQ8OiMtlLjkIKjmNN689uVzShSM0908q7GoFHXIPx4zi75ocoaHw==", - "dev": true - }, - "core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, - "requires": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decompress-response": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-5.0.0.tgz", - "integrity": "sha512-TLZWWybuxWgoW7Lykv+gq9xvzOsUjQ9tF09Tj6NSTYGMTCHNXzrPnD6Hi+TgZq19PyTAGH4Ll/NIM/eTGglnMw==", - "dev": true, - "requires": { - "mimic-response": "^2.0.0" - } - }, - "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", - "dev": true, - "requires": { - "clone": "^1.0.2" - } - }, - "defer-to-connect": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", - "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", - "dev": true - }, - "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", - "dev": true, - "requires": { - "object-keys": "^1.0.12" - } - }, - "docker-compose": { - "version": "0.22.2", - "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.22.2.tgz", - "integrity": "sha512-iXWb5+LiYmylIMFXvGTYsjI1F+Xyx78Jm/uj1dxwwZLbWkUdH6yOXY5Nr3RjbYX15EgbGJCq78d29CmWQQQMPg==", - "dev": true - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "es-abstract": { - "version": "1.18.6", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.6.tgz", - "integrity": "sha512-kAeIT4cku5eNLNuUKhlmtuk1/TRZvQoYccn6TO0cSVdf1kzB0T7+dYuVK9MWM7l+/53W2Q8M7N2c6MQvhXFcUQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "es-to-primitive": "^1.2.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.1.1", - "get-symbol-description": "^1.0.0", - "has": "^1.0.3", - "has-symbols": "^1.0.2", - "internal-slot": "^1.0.3", - "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", - "is-regex": "^1.1.4", - "is-string": "^1.0.7", - "object-inspect": "^1.11.0", - "object-keys": "^1.1.1", - "object.assign": "^4.1.2", - "string.prototype.trimend": "^1.0.4", - "string.prototype.trimstart": "^1.0.4", - "unbox-primitive": "^1.0.1" - } - }, - "es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "requires": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "external-editor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", - "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, - "requires": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" - } - }, - "extract-zip": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", - "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", - "dev": true, - "requires": { - "concat-stream": "^1.6.2", - "debug": "^2.6.9", - "mkdirp": "^0.5.4", - "yauzl": "^2.10.0" - } - }, - "fd-slicer": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", - "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", - "dev": true, - "requires": { - "pend": "~1.2.0" - } - }, - "figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5" - } - }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", - "dev": true, - "requires": { - "locate-path": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "got": { - "version": "10.7.0", - "resolved": "https://registry.npmjs.org/got/-/got-10.7.0.tgz", - "integrity": "sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==", - "dev": true, - "requires": { - "@sindresorhus/is": "^2.0.0", - "@szmarczak/http-timer": "^4.0.0", - "@types/cacheable-request": "^6.0.1", - "cacheable-lookup": "^2.0.0", - "cacheable-request": "^7.0.1", - "decompress-response": "^5.0.0", - "duplexer3": "^0.1.4", - "get-stream": "^5.0.0", - "lowercase-keys": "^2.0.0", - "mimic-response": "^2.1.0", - "p-cancelable": "^2.0.0", - "p-event": "^4.0.0", - "responselike": "^2.0.0", - "to-readable-stream": "^2.0.0", - "type-fest": "^0.10.0" - } - }, - "graceful-fs": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", - "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-bigints": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", - "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "has-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", - "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", - "dev": true - }, - "has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "inquirer": { - "version": "7.3.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", - "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" - } - }, - "internal-slot": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", - "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", - "dev": true, - "requires": { - "get-intrinsic": "^1.1.0", - "has": "^1.0.3", - "side-channel": "^1.0.4" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "requires": { - "has-bigints": "^1.0.1" - } - }, - "is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", - "dev": true - }, - "is-core-module": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.6.0.tgz", - "integrity": "sha512-wShG8vs60jKfPWpF2KZRaAtvt3a20OAn7+IJ6hLPECpSABLcKtFKTTI4ZtH5QcBruBHlq+WsdHWyz0BCZW7svQ==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "dev": true - }, - "is-negative-zero": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", - "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", - "dev": true - }, - "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - } - }, - "is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "requires": { - "has-tostringtag": "^1.0.0" - } - }, - "is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "requires": { - "has-symbols": "^1.0.2" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true - }, - "json-parse-better-errors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true - }, - "keyv": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.0.4.tgz", - "integrity": "sha512-vqNHbAc8BBsxk+7QBYLW0Y219rWcClspR6WSeoHYKG5mnsSoOH+BL1pWq02DDCVdvvuUny5rkBlzMRzoqc+GIg==", - "dev": true, - "requires": { - "json-buffer": "3.0.1" - } - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", - "dev": true, - "requires": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "log-symbols": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", - "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", - "dev": true, - "requires": { - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", - "dev": true - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", - "dev": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dev": true, - "requires": { - "minimist": "^1.2.5" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "mute-stream": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true - }, - "nice-try": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "npm-run-all": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", - "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "chalk": "^2.4.1", - "cross-spawn": "^6.0.5", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.3.0", - "read-pkg": "^3.0.0", - "shell-quote": "^1.6.1", - "string.prototype.padend": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "object-inspect": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", - "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", - "dev": true - }, - "object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true - }, - "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", - "object-keys": "^1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "onetime": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, - "requires": { - "mimic-fn": "^2.1.0" - } - }, - "ora": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", - "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", - "dev": true, - "requires": { - "chalk": "^3.0.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.2.0", - "is-interactive": "^1.0.0", - "log-symbols": "^3.0.0", - "mute-stream": "0.0.8", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "dependencies": { - "chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - } - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "p-cancelable": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", - "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", - "dev": true - }, - "p-event": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", - "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", - "dev": true, - "requires": { - "p-timeout": "^3.1.0" - } - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", - "dev": true - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", - "dev": true, - "requires": { - "p-limit": "^2.0.0" - } - }, - "p-timeout": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", - "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", - "dev": true, - "requires": { - "p-finally": "^1.0.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "dev": true, - "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - } - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-key": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", - "dev": true, - "requires": { - "pify": "^3.0.0" - } - }, - "pend": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", - "dev": true - }, - "pidtree": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", - "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", - "dev": true - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", - "dev": true - }, - "process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "dev": true, - "requires": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - } - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "responselike": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.0.tgz", - "integrity": "sha512-xH48u3FTB9VsZw7R+vvgaKeLKzT6jOogbQhEe/jewwnZgzPcnyWui2Av6JpoYZF/91uueC+lqhWqeURw5/qhCw==", - "dev": true, - "requires": { - "lowercase-keys": "^2.0.0" - } - }, - "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, - "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "run-async": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true - }, - "rxjs": { - "version": "6.6.7", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", - "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, - "requires": { - "tslib": "^1.9.0" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "dev": true - }, - "shebang-command": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", - "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", - "dev": true, - "requires": { - "shebang-regex": "^1.0.0" - } - }, - "shebang-regex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", - "dev": true - }, - "shell-quote": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", - "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", - "dev": true - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.5.tgz", - "integrity": "sha512-KWcOiKeQj6ZyXx7zq4YxSMgHRlod4czeBQZrPb8OKcohcqAXShm7E20kEMle9WBt26hFcAf0qLOcp5zmY7kOqQ==", - "dev": true - }, - "simple-git": { - "version": "2.47.0", - "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-2.47.0.tgz", - "integrity": "sha512-+HfCpqPBEZTPWiW9fPdbiPJDslM22MLqrktfzNKyI2pWaJa6DhfNVx4Mds04KZzVv5vjC9/ksw3y5gVf8ECWDg==", - "dev": true, - "requires": { - "@kwsites/file-exists": "^1.1.1", - "@kwsites/promise-deferred": "^1.1.1", - "debug": "^4.3.2" - }, - "dependencies": { - "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - } - } - }, - "spdx-correct": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.10.tgz", - "integrity": "sha512-oie3/+gKf7QtpitB0LYLETe+k8SifzsX4KixvpOsbI6S0kRiRQ5MKOio8eMSAKQ17N06+wdEOXRiId+zOxo0hA==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "string.prototype.padend": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", - "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3", - "es-abstract": "^1.18.0-next.2" - } - }, - "string.prototype.trimend": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", - "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string.prototype.trimstart": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", - "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", - "dev": true, - "requires": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "supports-hyperlinks": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", - "dev": true, - "requires": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - } - }, - "terminal-link": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", - "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", - "dev": true, - "requires": { - "ansi-escapes": "^4.2.1", - "supports-hyperlinks": "^2.0.0" - } - }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-readable-stream": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-2.1.0.tgz", - "integrity": "sha512-o3Qa6DGg1CEXshSdvWNX2sN4QHqg03SPq7U6jPXRahlQdl5dK8oXjkU/2/sGrnOZKeGV1zLSO8qPwyKklPPE7w==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "type-fest": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.10.0.tgz", - "integrity": "sha512-EUV9jo4sffrwlg8s0zDhP0T2WD3pru5Xi0+HTE3zTUmBaZNhfkite9PdSJwdXLwPVW0jnAHT56pZHIOYckPEiw==", - "dev": true - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, - "unbox-primitive": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", - "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has-bigints": "^1.0.1", - "has-symbols": "^1.0.2", - "which-boxed-primitive": "^1.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "^1.0.3" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "requires": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - } - }, - "which-module": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", - "dev": true - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "y18n": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", - "dev": true - }, - "yargs": { - "version": "14.2.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-14.2.3.tgz", - "integrity": "sha512-ZbotRWhF+lkjijC/VhmOT9wSgyBQ7+zr13+YLkhfsSiTriYsMzkTUFP18pFhWwBeMa5gUc1MzbhrO6/VB7c9Xg==", - "dev": true, - "requires": { - "cliui": "^5.0.0", - "decamelize": "^1.2.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^15.0.1" - }, - "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true - }, - "emoji-regex": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, - "requires": { - "ansi-regex": "^4.1.0" - } - } - } - }, - "yargs-parser": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-15.0.3.tgz", - "integrity": "sha512-/MVEVjTXy/cGAjdtQf8dW3V9b97bPN7rNn8ETj6BmAQL7ibC7O1Q9SPJbGjgh3SlwoBNXMzj/ZGIj8mBgl12YA==", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - }, - "yauzl": { - "version": "2.10.0", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", - "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", - "dev": true, - "requires": { - "buffer-crc32": "~0.2.3", - "fd-slicer": "~1.1.0" - } - } - } + "name": "smart-custom-fields", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "devDependencies": { + "@wordpress/env": "9.5.0", + "npm-run-all": "^4.1.5" + }, + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + } + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/file-exists/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@kwsites/file-exists/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "dev": true + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "dev": true, + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "dev": true, + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "dev": true + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.11.28", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.28.tgz", + "integrity": "sha512-M/GPWVS2wLkSkNHVeLkrF2fD5Lx5UC4PxA0uZcKc6QqbIQUJyW1jVjueJYi1z8n0I5PxYrtpnPnWglE+y9A0KA==", + "dev": true, + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@wordpress/env": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-9.5.0.tgz", + "integrity": "sha512-dxIosImyvkqUqPgCcOUCTgnLQRG3dZhnnNomEnsY0z5stbN+2IS6EJq3mZ/oJDitcJjrqB0dPopdUTVS/9bWMA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "copy-dir": "^1.3.0", + "docker-compose": "^0.24.3", + "extract-zip": "^1.6.7", + "got": "^11.8.5", + "inquirer": "^7.1.0", + "js-yaml": "^3.13.1", + "ora": "^4.0.2", + "rimraf": "^3.0.2", + "simple-git": "^3.5.0", + "terminal-link": "^2.0.0", + "yargs": "^17.3.0" + }, + "bin": { + "wp-env": "bin/wp-env" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "dev": true, + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/copy-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.3.0.tgz", + "integrity": "sha512-Q4+qBFnN4bwGwvtXXzbp4P/4iNk0MaiGAzvQ8OiMtlLjkIKjmNN689uVzShSM0908q7GoFHXIPx4zi75ocoaHw==", + "dev": true + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "dev": true, + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/docker-compose": { + "version": "0.24.7", + "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.24.7.tgz", + "integrity": "sha512-CdHl9n0S4+bl4i6MaxDQHNjqB1FdvuDirrDTzPKmdiMpheQqCjgsny0GZ2VhvN7qHTY0833lRlKWZgrkn1i6cg==", + "dev": true, + "dependencies": { + "yaml": "^2.2.2" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.22.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz", + "integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.1", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.0", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.5", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "dev": true, + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/npm-run-all/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", + "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", + "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "dev": true + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "dev": true, + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dev": true, + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/simple-git": { + "version": "3.22.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.22.0.tgz", + "integrity": "sha512-6JujwSs0ac82jkGjMHiCnTifvf1crOiY/+tfs/Pqih6iow7VrpNKRRNdWm6RtaXpvvv/JGNYhlUtLhGFqHF+Yw==", + "dev": true, + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.3.4" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, + "node_modules/simple-git/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/simple-git/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.17", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.17.tgz", + "integrity": "sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.5.tgz", + "integrity": "sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", + "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", + "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", + "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", + "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.1.tgz", + "integrity": "sha512-pIXzoImaqmfOrL7teGUBt/T7ZDnyeGBWyXQBvOVhLkWLN37GXv8NMLK406UY6dS51JfcQHsmcW5cJ441bHg6Lg==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + } } diff --git a/package.json b/package.json index 21f642d..a3721e8 100644 --- a/package.json +++ b/package.json @@ -1,35 +1,42 @@ { - "author": "inc2734", - "license": "GPL-2.0+", - "devDependencies": { - "@wordpress/env": "4.1.3", - "npm-run-all": "^4.1.5" - }, - "scripts": { - "export:wp-content:themes": "npm run cli 'cp -r wp-content/themes .export/wp-content'", - "export:wp-content:uploads": "npm run cli 'cp -r wp-content/uploads .export/wp-content'", - "export:wp-content": "npm run cli 'rm -rf .export/wp-content' && mkdir -p .export/wp-content/uploads && run-p export:wp-content:*", - "export:db": "mkdir -p .export/sql && npm run wp 'db export .export/sql/local.sql'", - "export": "run-p export:*", - "import:wp-content:themes": "npm run cli 'cp -r .export/wp-content/themes wp-content'", - "import:wp-content:uploads": "npm run cli 'cp -r .export/wp-content/uploads wp-content'", - "import:wp-content": "run-p import:wp-content:*", - "import:db": "npm run wp 'db import .export/sql/local.sql'", - "import": "run-p import:*", - "wp-env": "wp-env", - "start": "wp-env start && open http://localhost:8888", - "stop": "npm run export && wp-env stop", - "cli": "wp-env run cli", - "wp": "wp-env run cli wp", - "pretest": "wp-env start && wp-env run composer 'install --no-interaction'", - "test:lint:php": "wp-env run composer run-script lint", - "test:lint": "run-s test:lint:*", - "test:unit:php": "wp-env run phpunit 'phpunit -c /var/www/html/wp-content/plugins/smart-custom-fields/.phpunit.xml.dist --verbose'", - "test:unit": "run-s test:unit:*", - "test": "run-s test:*", - "clean:zip": "rimraf smart-custom-fields.zip", - "zip:pack": "rsync -a --exclude='/bin' --exclude='/vendor' --exclude='/node_modules' --exclude='.*' --exclude='*.ruleset.xml' --exclude='*.config.js' --exclude='*.xml.dist' --exclude='/tests' --exclude='package*.json' . smart-custom-fields && cd smart-custom-fields && composer install --no-dev", - "zip:archive": "zip -9 -qmr smart-custom-fields.zip smart-custom-fields", - "zip": "npm run clean:zip && npm run zip:pack && npm run zip:archive" - } + "engines": { + "node": ">=20.10.0", + "npm": ">=10.2.3" + }, + "volta": { + "node": "20.11.1" + }, + "devDependencies": { + "@wordpress/env": "9.5.0", + "npm-run-all": "^4.1.5", + "rimraf": "^5.0.5" + }, + "scripts": { + "export:wp-content:themes": "npm run cli cp -- -r wp-content/themes .export/wp-content", + "export:wp-content:uploads": "npm run cli cp -- -r wp-content/uploads .export/wp-content", + "export:wp-content": "rimraf .export/wp-content && mkdir -p .export/wp-content/uploads && run-p export:wp-content:*", + "export:db": "mkdir -p .export/sql && npm run wp db -- export .export/sql/local.sql", + "export": "run-p export:*", + "import:wp-content:themes": "npm run cli cp -- -r .export/wp-content/themes wp-content", + "import:wp-content:uploads": "npm run cli cp -- -r .export/wp-content/uploads wp-content", + "import:wp-content": "run-p import:wp-content:*", + "import:db": "npm run wp db -- import .export/sql/local.sql", + "import": "run-p import:*", + "wp-env": "wp-env", + "start": "wp-env start && open http://localhost:8888", + "stop": "npm run export && wp-env stop", + "cli": "wp-env run cli", + "wp": "wp-env run --env-cwd=wp-content/plugins/smart-custom-fields cli wp", + "composer": "wp-env run --env-cwd=wp-content/plugins/smart-custom-fields cli composer", + "pretest": "wp-env start && npm run composer install -- --no-interaction", + "test:lint:php": "npm run composer lint", + "test:lint": "run-s test:lint:*", + "test:unit:php": "wp-env start && wp-env run --env-cwd=\"wp-content/plugins/smart-custom-fields\" tests-wordpress vendor/bin/phpunit -c .phpunit.xml.dist --verbose", + "test:unit": "run-s test:unit:*", + "test": "run-s test:*", + "clean:zip": "rimraf smart-custom-fields.zip", + "zip:pack": "rsync -a --exclude='/bin' --exclude='/vendor' --exclude='/node_modules' --exclude='.*' --exclude='*.ruleset.xml' --exclude='*.config.js' --exclude='*.xml.dist' --exclude='/tests' --exclude='package*.json' . smart-custom-fields && cd smart-custom-fields && wp-env start && npm run composer install -- --no-dev -d smart-custom-fields", + "zip:archive": "zip -9 -qmr smart-custom-fields.zip smart-custom-fields", + "zip": "npm run clean:zip && npm run zip:pack && npm run zip:archive" + } } diff --git a/readme.txt b/readme.txt index 5f06faa..1a3561a 100644 --- a/readme.txt +++ b/readme.txt @@ -2,8 +2,9 @@ Contributors: inc2734, toro_unit, mimosafa, hideokamoto, hisako-isaka, kurudrive, hanamura, justinticktock, designhehe, mayukojpn, hogetan, robssanches, mirucon, sysbird, kengyu-nakamura, fuyuan9 Donate link: http://www.amazon.co.jp/registry/wishlist/39ANKRNSTNW40 Tags: plugin, custom field, custom, field, meta, meta field, repeat, repeatable -Requires at least: 3.9 -Tested up to: 5.8 +Requires at least: 6.4 +Requires PHP: 7.4 +Tested up to: 6.4 Stable tag: 4.2.2 License: GPLv2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html diff --git a/smart-custom-fields.php b/smart-custom-fields.php index 4c2e6a8..ed9e0b5 100644 --- a/smart-custom-fields.php +++ b/smart-custom-fields.php @@ -7,7 +7,6 @@ * Author: inc2734 * Author URI: https://2inc.org * Text Domain: smart-custom-fields - * Domain Path: /languages * License: GPLv2 or later * License URI: http://www.gnu.org/licenses/gpl-2.0.html * @@ -16,6 +15,20 @@ * @license GPL-2.0+ */ +/** + * Directory url of this plugin. + * + * @var string + */ +define( 'SMART_CUSTOM_FIELDS_URL', untrailingslashit( plugin_dir_url( __FILE__ ) ) ); + +/** + * Directory path of this plugin. + * + * @var string + */ +define( 'SMART_CUSTOM_FIELDS_PATH', untrailingslashit( plugin_dir_path( __FILE__ ) ) ); + /** * Main class. */ @@ -37,12 +50,6 @@ public function __construct() { * Loading translation files */ public function plugins_loaded() { - load_plugin_textdomain( - 'smart-custom-fields', - false, - dirname( plugin_basename( __FILE__ ) ) . '/languages' - ); - do_action( SCF_Config::PREFIX . 'load' ); require_once plugin_dir_path( __FILE__ ) . 'classes/models/class.meta.php'; require_once plugin_dir_path( __FILE__ ) . 'classes/models/class.setting.php'; @@ -102,6 +109,7 @@ public static function uninstall() { delete_post_meta_by_key( SCF_Config::PREFIX . 'repeat-multiple-data' ); // option の smart-cf-xxx を削除 + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching global $wpdb; $wpdb->query( $wpdb->prepare( @@ -112,6 +120,7 @@ public static function uninstall() { SCF_Config::PREFIX . '%' ) ); + // phpcs:enable } /** @@ -252,11 +261,17 @@ public function admin_menu() { */ protected function get_post_id_in_admin() { $post_id = false; - if ( ! empty( $_GET['post'] ) ) { - $post_id = $_GET['post']; - } elseif ( ! empty( $_POST['post_ID'] ) ) { - $post_id = $_POST['post_ID']; + $_post = filter_input( INPUT_GET, 'post' ); + + if ( ! empty( $_post ) ) { + $post_id = $_post; } + + $_post_id = filter_input( INPUT_POST, 'post_ID' ); + if ( ! empty( $_post_id ) ) { + $post_id = $_post_id; + } + return $post_id; } @@ -266,16 +281,24 @@ protected function get_post_id_in_admin() { * @return int */ protected function get_user_id_in_admin() { - $screen = get_current_screen(); - $user_id = false; - if ( ! empty( $_GET['user_id'] ) ) { - $user_id = $_GET['user_id']; - } elseif ( ! empty( $_POST['user_id'] ) ) { - $user_id = $_POST['user_id']; - } elseif ( 'profile' === $screen->id ) { + $screen = get_current_screen(); + $user_id = false; + $_user_id = filter_input( INPUT_GET, 'user_id' ); + + if ( ! empty( $_user_id ) ) { + $user_id = $_user_id; + } + + $_user_id = filter_input( INPUT_POST, 'user_id' ); + if ( ! empty( $_user_id ) ) { + $user_id = $_user_id; + } + + if ( 'profile' === $screen->id ) { $current_user = wp_get_current_user(); $user_id = $current_user->ID; } + return $user_id; } @@ -286,11 +309,16 @@ protected function get_user_id_in_admin() { */ protected function get_term_id_in_admin() { $term_id = false; - if ( ! empty( $_GET['tag_ID'] ) ) { - $term_id = $_GET['tag_ID']; - } elseif ( ! empty( $_POST['tag_ID'] ) ) { - $term_id = $_POST['tag_ID']; + $tag_id = filter_input( INPUT_GET, 'tag_ID' ); + if ( ! empty( $tag_id ) ) { + $term_id = $tag_id; } + + $tag_id = filter_input( INPUT_POST, 'tag_ID' ); + if ( ! empty( $tag_id ) ) { + $term_id = $tag_id; + } + return $term_id; } } diff --git a/tests/bootstrap.php b/tests/bootstrap.php index 6747f53..0d3cf2b 100644 --- a/tests/bootstrap.php +++ b/tests/bootstrap.php @@ -1,6 +1,6 @@ get_error_message(); } + // phpcs:ignore WordPress.Security.EscapeOutput.ExceptionNotEscaped throw new Exception( 'WordPress died: ' . $message ); } tests_add_filter( 'wp_die_handler', 'fail_if_died' ); diff --git a/tests/test-scf.php b/tests/test-scf.php index 1bff2c1..f55c555 100644 --- a/tests/test-scf.php +++ b/tests/test-scf.php @@ -27,28 +27,34 @@ class SCF_Test extends WP_UnitTestCase { protected $menu_slug; /** - * setUp + * Set up. */ - public function setUp() { - parent::setUp(); + public function set_up() { + parent::set_up(); // The post for custom fields - $this->post_id = $this->factory->post->create( array( - 'post_type' => 'post', - 'post_status' => 'publish', - ) ); + $this->post_id = $this->factory->post->create( + array( + 'post_type' => 'post', + 'post_status' => 'publish', + ) + ); // The auto draft post for custom fields - $this->new_post_id = $this->factory->post->create( array( - 'post_type' => 'post', - 'post_status' => 'auto-draft', - ) ); + $this->new_post_id = $this->factory->post->create( + array( + 'post_type' => 'post', + 'post_status' => 'auto-draft', + ) + ); // The draft post for custom fields - $this->draft_post_id = $this->factory->post->create( array( - 'post_type' => 'post', - 'post_status' => 'draft', - ) ); + $this->draft_post_id = $this->factory->post->create( + array( + 'post_type' => 'post', + 'post_status' => 'draft', + ) + ); // The user for custom fields $this->user_id = $this->factory->user->create( array( 'role' => 'editor' ) ); @@ -67,10 +73,10 @@ public function setUp() { } /** - * tearDown + * Tear down. */ - public function tearDown() { - parent::tearDown(); + public function tear_down() { + parent::tear_down(); $Cache = Smart_Custom_Fields_Cache::get_instance(); $Cache->flush(); } @@ -84,14 +90,14 @@ public function test_get() { // When post isn't saved, return the default value. $this->assertSame( '', SCF::get( 'text', $this->new_post_id ) ); - $this->assertSame( array(), SCF::get( 'checkbox' , $this->new_post_id ) ); + $this->assertSame( array(), SCF::get( 'checkbox', $this->new_post_id ) ); $this->assertSame( 'a', SCF::get( 'text-has-default', $this->new_post_id ) ); $this->assertSame( array( 'a' ), SCF::get( 'checkbox-has-default', $this->new_post_id ) ); $this->assertSame( array( 'a' ), SCF::get( 'checkbox-key-value', $this->new_post_id ) ); // When meta data isn't saved, return the default value. $this->assertSame( '', SCF::get( 'text', $this->post_id ) ); - $this->assertSame( array(), SCF::get( 'checkbox' , $this->post_id ) ); + $this->assertSame( array(), SCF::get( 'checkbox', $this->post_id ) ); $this->assertSame( 'a', SCF::get( 'text-has-default', $this->post_id ) ); $this->assertSame( array( 'a' ), SCF::get( 'checkbox-has-default', $this->post_id ) ); $this->assertSame( array( 'a' ), SCF::get( 'checkbox-key-value', $this->post_id ) ); @@ -121,9 +127,13 @@ public function test_get__meta_data_saved() { ); // In repeatable group, multi-value field - update_post_meta( $this->post_id, SCF_Config::PREFIX . 'repeat-multiple-data', array( - 'repeat-checkbox' => array( 1, 2 ), - ) ); + update_post_meta( + $this->post_id, + SCF_Config::PREFIX . 'repeat-multiple-data', + array( + 'repeat-checkbox' => array( 1, 2 ), + ) + ); add_post_meta( $this->post_id, 'repeat-checkbox', 'a' ); add_post_meta( $this->post_id, 'repeat-checkbox', 'b' ); add_post_meta( $this->post_id, 'repeat-checkbox', 'c' ); @@ -144,34 +154,40 @@ public function test_gets() { $this->assertNull( SCF::gets( false ) ); // When post isn't saved, return the default value. - $this->assertSame( array( - 'text' => '', - 'text-has-default' => 'a', - 'checkbox' => array(), - 'checkbox-has-default' => array( 'a' ), - 'checkbox-key-value' => array( 'a' ), - 'group' => array( - array( - 'repeat-text' => '', - 'repeat-checkbox' => array(), + $this->assertSame( + array( + 'text' => '', + 'text-has-default' => 'a', + 'checkbox' => array(), + 'checkbox-has-default' => array( 'a' ), + 'checkbox-key-value' => array( 'a' ), + 'group' => array( + array( + 'repeat-text' => '', + 'repeat-checkbox' => array(), + ), ), ), - ), SCF::gets( $this->new_post_id ) ); + SCF::gets( $this->new_post_id ) + ); // When meta data isn't saved, return the default value. - $this->assertSame( array( - 'text' => '', - 'text-has-default' => 'a', - 'checkbox' => array(), - 'checkbox-has-default' => array( 'a' ), - 'checkbox-key-value' => array( 'a' ), - 'group' => array( - array( - 'repeat-text' => '', - 'repeat-checkbox' => array(), + $this->assertSame( + array( + 'text' => '', + 'text-has-default' => 'a', + 'checkbox' => array(), + 'checkbox-has-default' => array( 'a' ), + 'checkbox-key-value' => array( 'a' ), + 'group' => array( + array( + 'repeat-text' => '', + 'repeat-checkbox' => array(), + ), ), ), - ), SCF::gets( $this->post_id ) ); + SCF::gets( $this->post_id ) + ); } /** @@ -182,30 +198,37 @@ public function test_gets__meta_data_saved() { update_post_meta( $this->post_id, 'checkbox', 'not-exist-key' ); add_post_meta( $this->post_id, 'repeat-text', 'a' ); add_post_meta( $this->post_id, 'repeat-text', 'b' ); - update_post_meta( $this->post_id, SCF_Config::PREFIX . 'repeat-multiple-data', array( - 'repeat-checkbox' => array( 1, 2 ), - ) ); + update_post_meta( + $this->post_id, + SCF_Config::PREFIX . 'repeat-multiple-data', + array( + 'repeat-checkbox' => array( 1, 2 ), + ) + ); add_post_meta( $this->post_id, 'repeat-checkbox', 'a' ); add_post_meta( $this->post_id, 'repeat-checkbox', 'b' ); add_post_meta( $this->post_id, 'repeat-checkbox', 'c' ); - $this->assertSame( array( - 'text' => 'text', - 'text-has-default' => 'a', - 'checkbox' => array( 'not-exist-key' ), - 'checkbox-has-default' => array( 'a' ), - 'checkbox-key-value' => array( 'a' ), - 'group' => array( - array( - 'repeat-text' => 'a', - 'repeat-checkbox' => array( 'a' ), - ), - array( - 'repeat-text' => 'b', - 'repeat-checkbox' => array( 'b', 'c' ), + $this->assertSame( + array( + 'text' => 'text', + 'text-has-default' => 'a', + 'checkbox' => array( 'not-exist-key' ), + 'checkbox-has-default' => array( 'a' ), + 'checkbox-key-value' => array( 'a' ), + 'group' => array( + array( + 'repeat-text' => 'a', + 'repeat-checkbox' => array( 'a' ), + ), + array( + 'repeat-text' => 'b', + 'repeat-checkbox' => array( 'b', 'c' ), + ), ), ), - ), SCF::gets( $this->post_id ) ); + SCF::gets( $this->post_id ) + ); } /** @@ -222,19 +245,22 @@ public function test_get_user_meta() { $this->assertSame( 'a', SCF::get_user_meta( $this->user_id, 'text-has-default' ) ); $this->assertSame( array( 'a' ), SCF::get_user_meta( $this->user_id, 'checkbox-has-default' ) ); $this->assertSame( array( 'a' ), SCF::get_user_meta( $this->user_id, 'checkbox-key-value' ) ); - $this->assertSame( array( - 'text' => '', - 'text-has-default' => 'a', - 'checkbox' => array(), - 'checkbox-has-default' => array( 'a' ), - 'checkbox-key-value' => array( 'a' ), - 'group' => array( - array( - 'repeat-text' => '', - 'repeat-checkbox' => array(), + $this->assertSame( + array( + 'text' => '', + 'text-has-default' => 'a', + 'checkbox' => array(), + 'checkbox-has-default' => array( 'a' ), + 'checkbox-key-value' => array( 'a' ), + 'group' => array( + array( + 'repeat-text' => '', + 'repeat-checkbox' => array(), + ), ), ), - ), SCF::get_user_meta( $this->user_id ) ); + SCF::get_user_meta( $this->user_id ) + ); // When non exist fields $this->assertNull( SCF::get_user_meta( $this->user_id, 'not-exist' ) ); @@ -261,9 +287,13 @@ public function test_get_user_meta__meta_data_saved() { ); // In repeatable group, multi-value field - update_user_meta( $this->user_id, SCF_Config::PREFIX . 'repeat-multiple-data', array( - 'repeat-checkbox' => array( 1, 2 ), - ) ); + update_user_meta( + $this->user_id, + SCF_Config::PREFIX . 'repeat-multiple-data', + array( + 'repeat-checkbox' => array( 1, 2 ), + ) + ); add_user_meta( $this->user_id, 'repeat-checkbox', 'a' ); add_user_meta( $this->user_id, 'repeat-checkbox', 'b' ); add_user_meta( $this->user_id, 'repeat-checkbox', 'c' ); @@ -275,23 +305,26 @@ public function test_get_user_meta__meta_data_saved() { SCF::get_user_meta( $this->user_id, 'repeat-checkbox' ) ); - $this->assertSame( array( - 'text' => 'text', - 'text-has-default' => 'a', - 'checkbox' => array( 'not-exist-key' ), - 'checkbox-has-default' => array( 'a' ), - 'checkbox-key-value' => array( 'a' ), - 'group' => array( - array( - 'repeat-text' => 'a', - 'repeat-checkbox' => array( 'a' ), - ), - array( - 'repeat-text' => 'b', - 'repeat-checkbox' => array( 'b', 'c' ), + $this->assertSame( + array( + 'text' => 'text', + 'text-has-default' => 'a', + 'checkbox' => array( 'not-exist-key' ), + 'checkbox-has-default' => array( 'a' ), + 'checkbox-key-value' => array( 'a' ), + 'group' => array( + array( + 'repeat-text' => 'a', + 'repeat-checkbox' => array( 'a' ), + ), + array( + 'repeat-text' => 'b', + 'repeat-checkbox' => array( 'b', 'c' ), + ), ), ), - ), SCF::get_user_meta( $this->user_id ) ); + SCF::get_user_meta( $this->user_id ) + ); } /** @@ -312,19 +345,22 @@ public function test_get_term_meta() { $this->assertSame( 'a', SCF::get_term_meta( $this->term_id, 'category', 'text-has-default' ) ); $this->assertSame( array( 'a' ), SCF::get_term_meta( $this->term_id, 'category', 'checkbox-has-default' ) ); $this->assertSame( array( 'a' ), SCF::get_term_meta( $this->term_id, 'category', 'checkbox-key-value' ) ); - $this->assertSame( array( - 'text' => '', - 'text-has-default' => 'a', - 'checkbox' => array(), - 'checkbox-has-default' => array( 'a' ), - 'checkbox-key-value' => array( 'a' ), - 'group' => array( - array( - 'repeat-text' => '', - 'repeat-checkbox' => array(), + $this->assertSame( + array( + 'text' => '', + 'text-has-default' => 'a', + 'checkbox' => array(), + 'checkbox-has-default' => array( 'a' ), + 'checkbox-key-value' => array( 'a' ), + 'group' => array( + array( + 'repeat-text' => '', + 'repeat-checkbox' => array(), + ), ), ), - ), SCF::get_term_meta( $this->term_id, 'category' ) ); + SCF::get_term_meta( $this->term_id, 'category' ) + ); // When non exist fields $this->assertNull( SCF::get_term_meta( $this->term_id, 'category', 'not-exist' ) ); @@ -353,9 +389,12 @@ public function test_get_term_meta__meta_data_saved() { ); // In repeatable group, multi-value field - $Meta->update( SCF_Config::PREFIX . 'repeat-multiple-data', array( - 'repeat-checkbox' => array( 1, 2 ), - ) ); + $Meta->update( + SCF_Config::PREFIX . 'repeat-multiple-data', + array( + 'repeat-checkbox' => array( 1, 2 ), + ) + ); $Meta->add( 'repeat-checkbox', 'a' ); $Meta->add( 'repeat-checkbox', 'b' ); $Meta->add( 'repeat-checkbox', 'c' ); @@ -367,23 +406,26 @@ public function test_get_term_meta__meta_data_saved() { SCF::get_term_meta( $this->term_id, 'category', 'repeat-checkbox' ) ); - $this->assertSame( array( - 'text' => 'text', - 'text-has-default' => 'a', - 'checkbox' => array( 'not-exist-key' ), - 'checkbox-has-default' => array( 'a' ), - 'checkbox-key-value' => array( 'a' ), - 'group' => array( - array( - 'repeat-text' => 'a', - 'repeat-checkbox' => array( 'a' ), - ), - array( - 'repeat-text' => 'b', - 'repeat-checkbox' => array( 'b', 'c' ), + $this->assertSame( + array( + 'text' => 'text', + 'text-has-default' => 'a', + 'checkbox' => array( 'not-exist-key' ), + 'checkbox-has-default' => array( 'a' ), + 'checkbox-key-value' => array( 'a' ), + 'group' => array( + array( + 'repeat-text' => 'a', + 'repeat-checkbox' => array( 'a' ), + ), + array( + 'repeat-text' => 'b', + 'repeat-checkbox' => array( 'b', 'c' ), + ), ), ), - ), SCF::get_term_meta( $this->term_id, 'category' ) ); + SCF::get_term_meta( $this->term_id, 'category' ) + ); } /** @@ -400,19 +442,22 @@ public function test_get_option_meta() { $this->assertSame( 'a', SCF::get_option_meta( $this->menu_slug, 'text-has-default' ) ); $this->assertSame( array( 'a' ), SCF::get_option_meta( $this->menu_slug, 'checkbox-has-default' ) ); $this->assertSame( array( 'a' ), SCF::get_option_meta( $this->menu_slug, 'checkbox-key-value' ) ); - $this->assertSame( array( - 'text' => '', - 'text-has-default' => 'a', - 'checkbox' => array(), - 'checkbox-has-default' => array( 'a' ), - 'checkbox-key-value' => array( 'a' ), - 'group' => array( - array( - 'repeat-text' => '', - 'repeat-checkbox' => array(), + $this->assertSame( + array( + 'text' => '', + 'text-has-default' => 'a', + 'checkbox' => array(), + 'checkbox-has-default' => array( 'a' ), + 'checkbox-key-value' => array( 'a' ), + 'group' => array( + array( + 'repeat-text' => '', + 'repeat-checkbox' => array(), + ), ), ), - ), SCF::get_option_meta( $this->menu_slug ) ); + SCF::get_option_meta( $this->menu_slug ) + ); // When non exist fields $this->assertNull( SCF::get_option_meta( $this->menu_slug, 'not-exist' ) ); @@ -454,23 +499,26 @@ public function test_get_option_meta__meta_data_saved() { SCF::get_option_meta( $this->menu_slug, 'repeat-checkbox' ) ); - $this->assertSame( array( - 'text' => 'text', - 'text-has-default' => 'a', - 'checkbox' => array( 'not-exist-key' ), - 'checkbox-has-default' => array( 'a' ), - 'checkbox-key-value' => array( 'a' ), - 'group' => array( - array( - 'repeat-text' => 'a', - 'repeat-checkbox' => array( 'a' ), - ), - array( - 'repeat-text' => 'b', - 'repeat-checkbox' => array( 'b', 'c' ), + $this->assertSame( + array( + 'text' => 'text', + 'text-has-default' => 'a', + 'checkbox' => array( 'not-exist-key' ), + 'checkbox-has-default' => array( 'a' ), + 'checkbox-key-value' => array( 'a' ), + 'group' => array( + array( + 'repeat-text' => 'a', + 'repeat-checkbox' => array( 'a' ), + ), + array( + 'repeat-text' => 'b', + 'repeat-checkbox' => array( 'b', 'c' ), + ), ), ), - ), SCF::get_option_meta( $this->menu_slug ) ); + SCF::get_option_meta( $this->menu_slug ) + ); } /** @@ -491,16 +539,18 @@ public function test_get_field() { * @group add_settings */ public function test_add_settings() { - $post_id = $this->factory->post->create( array( - 'post_type' => SCF_Config::NAME, - 'post_title' => 'test_settings', - ) ); + $post_id = $this->factory->post->create( + array( + 'post_type' => SCF_Config::NAME, + 'post_title' => 'test_settings', + ) + ); update_post_meta( $post_id, SCF_Config::PREFIX . 'condition', array( 'post' ) ); $settings = SCF::get_settings( get_post( $this->post_id ) ); $this->assertCount( 2, $settings ); foreach ( $settings as $Setting ) { - $this->assertTrue( in_array( $Setting->get_title(), array( 'test_settings', 'Register Test' ) ) ); + $this->assertTrue( in_array( $Setting->get_title(), array( 'test_settings', 'Register Test' ), true ) ); } } @@ -516,10 +566,12 @@ public function test_get_settings_posts() { * @group get_settings_posts */ public function test_get_settings_posts__saved() { - $post_id = $this->factory->post->create( array( - 'post_type' => SCF_Config::NAME, - 'post_title' => 'test_settings_post', - ) ); + $post_id = $this->factory->post->create( + array( + 'post_type' => SCF_Config::NAME, + 'post_title' => 'test_settings_post', + ) + ); update_post_meta( $post_id, SCF_Config::PREFIX . 'condition', array( 'post' ) ); $settings_posts = SCF::get_settings_posts( get_post( $this->post_id ) ); $this->assertCount( 1, $settings_posts ); @@ -533,10 +585,12 @@ public function test_get_settings_posts__saved() { */ public function test_get_settings() { // Match the post - $post_id = $this->factory->post->create( array( - 'post_type' => 'post', - 'post_status' => 'publish', - ) ); + $post_id = $this->factory->post->create( + array( + 'post_type' => 'post', + 'post_status' => 'publish', + ) + ); $settings = SCF::get_settings( get_post( $post_id ) ); foreach ( $settings as $Setting ) { $this->assertTrue( is_a( $Setting, 'Smart_Custom_Fields_Setting' ) ); @@ -547,11 +601,11 @@ public function test_get_settings() { $this->assertSame( array(), $settings ); // Match the role - $user_id = $this->factory->user->create( array( 'role' => 'editor' ) ); + $user_id = $this->factory->user->create( array( 'role' => 'editor' ) ); $settings = SCF::get_settings( get_userdata( $user_id ) ); $this->assertTrue( is_a( current( $settings ), 'Smart_Custom_Fields_Setting' ) ); - $user_id = $this->factory->user->create( array( 'role' => 'subscriber' ) ); + $user_id = $this->factory->user->create( array( 'role' => 'subscriber' ) ); $settings = SCF::get_settings( get_userdata( $user_id ) ); $this->assertTrue( is_a( current( $settings ), 'Smart_Custom_Fields_Setting' ) ); @@ -560,7 +614,7 @@ public function test_get_settings() { $this->assertSame( array(), $settings ); // Match the term - $term_id = $this->factory->term->create( array( 'taxonomy' => 'category' ) ); + $term_id = $this->factory->term->create( array( 'taxonomy' => 'category' ) ); $settings = SCF::get_settings( get_term( $term_id, 'category' ) ); $this->assertTrue( is_a( current( $settings ), 'Smart_Custom_Fields_Setting' ) ); @@ -577,7 +631,9 @@ public function test_get_repeat_multiple_data() { $this->assertSame( array(), SCF::get_repeat_multiple_data( get_post( $this->post_id ) ) ); // When existed - update_post_meta( $this->post_id, SCF_Config::PREFIX . 'repeat-multiple-data', + update_post_meta( + $this->post_id, + SCF_Config::PREFIX . 'repeat-multiple-data', array( 'repeat-checkbox' => array( 1, 2 ), ) @@ -676,7 +732,7 @@ public function test_get_post_meta__in_preview() { $this->create_revision( $this->draft_post_id ); // Set preview state - $backup_wp_query = clone $wp_query; + $backup_wp_query = clone $wp_query; $wp_query->is_preview = true; $post = get_post( $this->post_id ); @@ -739,10 +795,39 @@ public function test_choices_eol_to_array() { $this->assertSame( array( 'A', 'B', 'C' ), SCF::choices_eol_to_array( "A\r\nB\r\nC" ) ); $this->assertSame( array( 'A', 'B', 'C' ), SCF::choices_eol_to_array( "A\rB\rC" ) ); $this->assertSame( array( 'A', 'B', 'C' ), SCF::choices_eol_to_array( "A\nB\nC" ) ); - $this->assertSame( array( 'a' => 'AAA', 'b' => 'BBB' ), SCF::choices_eol_to_array( array( 'a' => 'AAA', 'b' => 'BBB' ) ) ); - $this->assertSame( array( 'a' => 'AAA', 'b' => 'BBB' ), SCF::choices_eol_to_array( "a => AAA\nb => BBB" ) ); - $this->assertSame( array( 'a' => 'AAA', 0 => 'BBB' ), SCF::choices_eol_to_array( "a => AAA\nBBB" ) ); - $this->assertSame( array( '0' => 'AAA', '1' => 'BBB' ), SCF::choices_eol_to_array( "0 => AAA\n1 => BBB" ) ); + $this->assertSame( + array( + 'a' => 'AAA', + 'b' => 'BBB', + ), + SCF::choices_eol_to_array( + array( + 'a' => 'AAA', + 'b' => 'BBB', + ) + ) + ); + $this->assertSame( + array( + 'a' => 'AAA', + 'b' => 'BBB', + ), + SCF::choices_eol_to_array( "a => AAA\nb => BBB" ) + ); + $this->assertSame( + array( + 'a' => 'AAA', + 0 => 'BBB', + ), + SCF::choices_eol_to_array( "a => AAA\nBBB" ) + ); + $this->assertSame( + array( + '0' => 'AAA', + '1' => 'BBB', + ), + SCF::choices_eol_to_array( "0 => AAA\n1 => BBB" ) + ); } /** @@ -756,91 +841,134 @@ public function test_rest_api_get_post_type() { remove_filter( SCF_Config::PREFIX . 'rest_api_post_type', array( $this, '_get_post_type' ) ); } + /** + * Create revision. + * + * @param int $post_id Post ID. + * @return WP_Post + */ protected function create_revision( $post_id ) { - return $this->factory->post->create( array( - 'post_type' => 'revision', - 'post_parent' => $post_id, - 'post_status' => 'inherit', - 'post_name' => $post_id . '-autosave', - ) ); + return $this->factory->post->create( + array( + 'post_type' => 'revision', + 'post_parent' => $post_id, + 'post_status' => 'inherit', + 'post_name' => $post_id . '-autosave', + ) + ); } /** - * Register custom fields using filter hook + * Register custom fields using filter hook. + * + * @param array $settings Array of Smart_Custom_Fields_Setting object. + * @param string $type Post type or Role. + * @param int $id Post ID or User ID. + * @param string $meta_type post or user. */ public function _register( $settings, $type, $id, $meta_type ) { if ( - ( $type === 'post' && $id === $this->post_id ) || - ( $type === 'post' && $id === $this->new_post_id ) || - ( $type === 'editor' ) || - ( $type === 'subscriber' ) || - ( $type === 'category' ) || - ( $meta_type === 'option' && $id === 'menu-slug' ) + ( 'post' === $type && $id === $this->post_id ) || + ( 'post' === $type && $id === $this->new_post_id ) || + ( 'editor' === $type ) || + ( 'subscriber' === $type ) || + ( 'category' === $type ) || + ( 'option' === $meta_type && 'menu-slug' === $id ) ) { $Setting = SCF::add_setting( 'id-1', 'Register Test' ); - $Setting->add_group( 0, false, array( + $Setting->add_group( + 0, + false, array( - 'name' => 'text', - 'label' => 'text', - 'type' => 'text', - ), - ) ); - $Setting->add_group( 'text-has-default', false, array( + array( + 'name' => 'text', + 'label' => 'text', + 'type' => 'text', + ), + ) + ); + $Setting->add_group( + 'text-has-default', + false, array( - 'name' => 'text-has-default', - 'label' => 'text has default', - 'type' => 'text', - 'default' => 'a', - ), - ) ); - $Setting->add_group( 'checkbox', false, array( + array( + 'name' => 'text-has-default', + 'label' => 'text has default', + 'type' => 'text', + 'default' => 'a', + ), + ) + ); + $Setting->add_group( + 'checkbox', + false, array( - 'name' => 'checkbox', - 'label' => 'checkbox field', - 'type' => 'check', - 'choices' => array( 'a', 'b', 'c' ), - ), - ) ); - $Setting->add_group( 'checkbox-has-default', false, array( - array( - 'name' => 'checkbox-has-default', - 'label' => 'checkbox has default', - 'type' => 'check', - 'choices' => array( 'a', 'b', 'c' ), - 'default' => array( 'a' ), - ), - ) ); - $Setting->add_group( 'checkbox-key-value', false, array( + array( + 'name' => 'checkbox', + 'label' => 'checkbox field', + 'type' => 'check', + 'choices' => array( 'a', 'b', 'c' ), + ), + ) + ); + $Setting->add_group( + 'checkbox-has-default', + false, array( - 'name' => 'checkbox-key-value', - 'label' => 'checkbox key value', - 'type' => 'check', - 'choices' => array( 'a' => 'apple', 'b' => 'banana', 'c' => 'carrot' ), - 'default' => array( 'a' ), - ), - ) ); - $Setting->add_group( 'group', true, array( + array( + 'name' => 'checkbox-has-default', + 'label' => 'checkbox has default', + 'type' => 'check', + 'choices' => array( 'a', 'b', 'c' ), + 'default' => array( 'a' ), + ), + ) + ); + $Setting->add_group( + 'checkbox-key-value', + false, array( - 'name' => 'repeat-text', - 'label' => 'repeat text', - 'type' => 'text', - ), + array( + 'name' => 'checkbox-key-value', + 'label' => 'checkbox key value', + 'type' => 'check', + 'choices' => array( + 'a' => 'apple', + 'b' => 'banana', + 'c' => 'carrot', + ), + 'default' => array( 'a' ), + ), + ) + ); + $Setting->add_group( + 'group', + true, array( - 'name' => 'repeat-checkbox', - 'label' => 'repeat checkbox', - 'type' => 'check', - 'choices' => array( 'a', 'b', 'c' ), - ), - ) ); - $settings[$Setting->get_id()] = $Setting; + array( + 'name' => 'repeat-text', + 'label' => 'repeat text', + 'type' => 'text', + ), + array( + 'name' => 'repeat-checkbox', + 'label' => 'repeat checkbox', + 'type' => 'check', + 'choices' => array( 'a', 'b', 'c' ), + ), + ) + ); + $settings[ $Setting->get_id() ] = $Setting; } return $settings; } /** - * Register rest_api_post_type filter hook + * Register rest_api_post_type filter hook. + * + * @return array */ - public function _get_post_type( $post_type ) { + public function _get_post_type() { return array( 'post', 'page', 'my-custom-post' ); } } diff --git a/tests/test-smart-custom-fields-ajax.php b/tests/test-smart-custom-fields-ajax.php index 20fe024..3ce7023 100644 --- a/tests/test-smart-custom-fields-ajax.php +++ b/tests/test-smart-custom-fields-ajax.php @@ -7,10 +7,10 @@ class Smart_Custom_Fields_Ajax_Test extends WP_UnitTestCase { protected $Ajax; /** - * setUp + * Set up. */ - public function setUp() { - parent::setUp(); + public function set_up() { + parent::set_up(); $this->Ajax = new Smart_Custom_Fields_Ajax(); $Cache = Smart_Custom_Fields_Cache::get_instance(); @@ -18,10 +18,10 @@ public function setUp() { } /** - * tearDown + * Tear down. */ - public function tearDown() { - parent::tearDown(); + public function tear_down() { + parent::tear_down(); $Cache = Smart_Custom_Fields_Cache::get_instance(); $Cache->flush(); } @@ -33,29 +33,36 @@ public function test_delete_term() { $taxonomy = 'category'; $term_id = $this->factory->term->create( array( 'taxonomy' => $taxonomy ) ); $term = get_term( $term_id, $taxonomy ); - $Meta = new Smart_Custom_Fields_Meta( $term ); + $Meta = new Smart_Custom_Fields_Meta( $term ); - if ( !_get_meta_table( $Meta->get_meta_type() ) ) { - $Meta->add( 'text', 'text' ); - $this->Ajax->delete_term( $term_id, '', $taxonomy, $term ); - $this->assertSame( array(), $Meta->get( 'text' ) ); - } + $Meta->add( 'text', 'text' ); + $this->Ajax->delete_term( $term_id, '', $taxonomy, $term ); + $this->assertSame( array(), $Meta->get( 'text' ) ); } /** - * Register custom fields using filter hook + * Register custom fields using filter hook. + * + * @param array $settings Array of Smart_Custom_Fields_Setting object. + * @param string $type Post type or Role. + * @param int $id Post ID or User ID. + * @param string $meta_type post or user. */ public function _register( $settings, $type, $id, $meta_type ) { if ( type === 'category' ) { $Setting = SCF::add_setting( 'id-1', 'Register Test' ); - $Setting->add_group( 0, false, array( + $Setting->add_group( + 0, + false, array( - 'name' => 'text', - 'label' => 'text field', - 'type' => 'text', - ), - ) ); - $settings[$Setting->get_id()] = $Setting; + array( + 'name' => 'text', + 'label' => 'text field', + 'type' => 'text', + ), + ) + ); + $settings[ $Setting->get_id() ] = $Setting; } return $settings; } diff --git a/tests/test-smart-custom-fields-cache.php b/tests/test-smart-custom-fields-cache.php index 830485e..a601f4d 100644 --- a/tests/test-smart-custom-fields-cache.php +++ b/tests/test-smart-custom-fields-cache.php @@ -38,34 +38,42 @@ class Smart_Custom_Fields_Cache_Test extends WP_UnitTestCase { protected $menu_slug; /** - * setUp + * Set up. */ - public function setUp() { - parent::setUp(); + public function set_up() { + parent::set_up(); // The post id of ettings page - $this->settings_post_id = $this->factory->post->create( array( - 'post_type' => SCF_Config::NAME, - 'post_status' => 'publish', - ) ); + $this->settings_post_id = $this->factory->post->create( + array( + 'post_type' => SCF_Config::NAME, + 'post_status' => 'publish', + ) + ); // The post for custom fields - $this->post_id = $this->factory->post->create( array( - 'post_type' => 'post', - 'post_status' => 'publish', - ) ); + $this->post_id = $this->factory->post->create( + array( + 'post_type' => 'post', + 'post_status' => 'publish', + ) + ); // The auto draft post for custom fields - $this->new_post_id = $this->factory->post->create( array( - 'post_type' => 'post', - 'post_status' => 'auto-draft', - ) ); + $this->new_post_id = $this->factory->post->create( + array( + 'post_type' => 'post', + 'post_status' => 'auto-draft', + ) + ); // The draft post for custom fields - $this->draft_post_id = $this->factory->post->create( array( - 'post_type' => 'post', - 'post_status' => 'draft', - ) ); + $this->draft_post_id = $this->factory->post->create( + array( + 'post_type' => 'post', + 'post_status' => 'draft', + ) + ); // The user for custom fields $this->user_id = $this->factory->user->create( array( 'role' => 'editor' ) ); @@ -83,10 +91,10 @@ public function setUp() { } /** - * tearDown + * Tear down. */ - public function tearDown() { - parent::tearDown(); + public function tear_down() { + parent::tear_down(); $this->Cache->flush(); } @@ -95,7 +103,7 @@ public function tearDown() { */ public function test_save_settings_posts() { $settings_post = get_post( $this->settings_post_id ); - $object = get_post( $this->post_id ); + $object = get_post( $this->post_id ); $this->Cache->save_settings_posts( $object, array( $settings_post ) ); $this->assertSame( array( $settings_post ), $this->Cache->get_settings_posts( $object ) ); } @@ -136,7 +144,7 @@ public function test_get_settings_posts() { */ public function test_clear_settings_posts() { $settings_post = get_post( $this->settings_post_id ); - $object = get_post( $this->post_id ); + $object = get_post( $this->post_id ); $this->Cache->save_settings_posts( $object, array( $settings_post ) ); $this->Cache->clear_settings_posts(); $this->assertNull( $this->Cache->get_settings_posts( $object ) ); @@ -148,29 +156,29 @@ public function test_clear_settings_posts() { public function test_save_settings() { // post $settings_post_id = 1; - $Setting = new Smart_Custom_Fields_Setting( $settings_post_id, 'dummy' ); - $object = get_post( $this->post_id ); + $Setting = new Smart_Custom_Fields_Setting( $settings_post_id, 'dummy' ); + $object = get_post( $this->post_id ); $this->Cache->save_settings( $settings_post_id, $Setting, $object ); $this->assertEquals( $Setting, $this->Cache->get_settings( $settings_post_id, $object ) ); // user $settings_post_id = 2; - $Setting = new Smart_Custom_Fields_Setting( $settings_post_id, 'dummy' ); - $object = get_userdata( $this->user_id ); + $Setting = new Smart_Custom_Fields_Setting( $settings_post_id, 'dummy' ); + $object = get_userdata( $this->user_id ); $this->Cache->save_settings( $settings_post_id, $Setting, $object ); $this->assertEquals( $Setting, $this->Cache->get_settings( $settings_post_id, $object ) ); // user $settings_post_id = 3; - $Setting = new Smart_Custom_Fields_Setting( $settings_post_id, 'dummy' ); - $object = get_term( $this->term_id, 'category' ); + $Setting = new Smart_Custom_Fields_Setting( $settings_post_id, 'dummy' ); + $object = get_term( $this->term_id, 'category' ); $this->Cache->save_settings( $settings_post_id, $Setting, $object ); $this->assertEquals( $Setting, $this->Cache->get_settings( $settings_post_id, $object ) ); // options page $settings_post_id = 4; - $Setting = new Smart_Custom_Fields_Setting( $settings_post_id, 'dummy' ); - $object = SCF::generate_option_object( $this->menu_slug ); + $Setting = new Smart_Custom_Fields_Setting( $settings_post_id, 'dummy' ); + $object = SCF::generate_option_object( $this->menu_slug ); $this->Cache->save_settings( $settings_post_id, $Setting, $object ); $this->assertEquals( $Setting, $this->Cache->get_settings( $settings_post_id, $object ) ); } @@ -180,7 +188,7 @@ public function test_save_settings() { */ public function test_get_settings() { $settings_post_id = 1; - $Setting = new Smart_Custom_Fields_Setting( $settings_post_id, 'dummy' ); + $Setting = new Smart_Custom_Fields_Setting( $settings_post_id, 'dummy' ); // When isn't existed $this->assertNull( $this->Cache->get_settings( $settings_post_id ) ); @@ -197,8 +205,8 @@ public function test_get_settings() { */ public function test_clear_settings() { $settings_post_id = 1; - $Setting = new Smart_Custom_Fields_Setting( $settings_post_id, 'dummy' ); - $object = get_post( $this->post_id ); + $Setting = new Smart_Custom_Fields_Setting( $settings_post_id, 'dummy' ); + $object = get_post( $this->post_id ); $this->Cache->save_settings( $settings_post_id, $Setting, $object ); $this->Cache->clear_settings(); $this->assertNull( $this->Cache->get_settings( $settings_post_id, $object ) ); @@ -208,7 +216,7 @@ public function test_clear_settings() { * @group save_repeat_multiple_data */ public function test_save_repeat_multiple_data() { - $object = get_post( $this->post_id ); + $object = get_post( $this->post_id ); $repeat_multiple_data = array( 'dummy' ); $this->Cache->save_repeat_multiple_data( $object, $repeat_multiple_data ); $this->assertSame( array( 'dummy' ), $this->Cache->get_repeat_multiple_data( $object ) ); @@ -221,7 +229,7 @@ public function test_get_repeat_multiple_data() { $object = get_post( null ); $this->assertNull( $this->Cache->get_repeat_multiple_data( $object ) ); - $object = get_post( $this->post_id ); + $object = get_post( $this->post_id ); $repeat_multiple_data = array( 'dummy' ); $this->Cache->save_repeat_multiple_data( $object, $repeat_multiple_data ); $this->assertSame( array( 'dummy' ), $this->Cache->get_repeat_multiple_data( $object ) ); @@ -231,7 +239,7 @@ public function test_get_repeat_multiple_data() { * @group clear_repeat_multiple_data */ public function test_clear_repeat_multiple_data() { - $object = get_post( $this->post_id ); + $object = get_post( $this->post_id ); $repeat_multiple_data = array( 'dummy' ); $this->Cache->save_repeat_multiple_data( $object, $repeat_multiple_data ); $this->Cache->clear_repeat_multiple_data(); @@ -277,25 +285,34 @@ public function test_clear_meta() { } /** - * Register custom fields using filter hook + * Register custom fields using filter hook. + * + * @param array $settings Array of Smart_Custom_Fields_Setting object. + * @param string $type Post type or Role. + * @param int $id Post ID or User ID. + * @param string $meta_type post or user. */ public function _register( $settings, $type, $id, $meta_type ) { if ( - ( $type === 'post' && $id === $this->post_id ) || - ( $type === 'post' && $id === $this->new_post_id ) || - ( $type === 'editor' ) || - ( $type === 'category' ) || - ( $meta_type === 'option' && $id === 'menu-slug' ) + ( 'post' === $type && $id === $this->post_id ) || + ( 'post' === $type && $id === $this->new_post_id ) || + ( 'editor' === $type ) || + ( 'category' === $type ) || + ( 'option' === $meta_type && 'menu-slug' === $id ) ) { $Setting = SCF::add_setting( 'id', 'Register Test' ); - $Setting->add_group( 0, false, array( + $Setting->add_group( + 0, + false, array( - 'name' => 'text', - 'label' => 'text', - 'type' => 'text', - ), - ) ); - $settings[$Setting->get_id()] = $Setting; + array( + 'name' => 'text', + 'label' => 'text', + 'type' => 'text', + ), + ) + ); + $settings[ $Setting->get_id() ] = $Setting; } return $settings; } diff --git a/tests/test-smart-custom-fields-controller-base.php b/tests/test-smart-custom-fields-controller-base.php index 9e1dfb3..7cd9ac5 100644 --- a/tests/test-smart-custom-fields-controller-base.php +++ b/tests/test-smart-custom-fields-controller-base.php @@ -12,22 +12,26 @@ class Smart_Custom_Fields_Controller_Base_Test extends WP_UnitTestCase { protected $post_id; /** - * setUp + * Set up. */ - public function setUp() { - parent::setUp(); + public function set_up() { + parent::set_up(); // The post for custom fields - $this->post_id = $this->factory->post->create( array( - 'post_type' => 'post', - 'post_status' => 'publish', - ) ); + $this->post_id = $this->factory->post->create( + array( + 'post_type' => 'post', + 'post_status' => 'publish', + ) + ); // The auto draft post for custom fields - $this->new_post_id = $this->factory->post->create( array( - 'post_type' => 'post', - 'post_status' => 'auto-draft', - ) ); + $this->new_post_id = $this->factory->post->create( + array( + 'post_type' => 'post', + 'post_status' => 'auto-draft', + ) + ); add_filter( 'smart-cf-register-fields', array( $this, '_register' ), 10, 4 ); @@ -39,10 +43,10 @@ public function setUp() { } /** - * tearDown + * Tear down. */ - public function tearDown() { - parent::tearDown(); + public function tear_down() { + parent::tear_down(); $Cache = Smart_Custom_Fields_Cache::get_instance(); $Cache->flush(); } @@ -55,14 +59,14 @@ public function test_get_multiple_data_field_value() { $object = get_post( $this->post_id ); $Field = SCF::get_field( $object, 'checkbox-has-default' ); $this->assertSame( array( 'a' ), $this->Controller->get_multiple_data_field_value( $object, $Field, null ) ); - $Field = SCF::get_field( $object, 'checkbox' ); + $Field = SCF::get_field( $object, 'checkbox' ); $this->assertSame( array(), $this->Controller->get_multiple_data_field_value( $object, $Field, null ) ); // When isn't saved meta data. At that time ,$index is ignored. $object = get_post( $this->new_post_id ); $Field = SCF::get_field( $object, 'checkbox-has-default' ); $this->assertSame( array( 'a' ), $this->Controller->get_multiple_data_field_value( $object, $Field, 0 ) ); - $Field = SCF::get_field( $object, 'checkbox' ); + $Field = SCF::get_field( $object, 'checkbox' ); $this->assertSame( array(), $this->Controller->get_multiple_data_field_value( $object, $Field, 0 ) ); } @@ -71,12 +75,12 @@ public function test_get_multiple_data_field_value() { */ public function test_get_multiple_data_field_value__saved() { $object = get_post( $this->post_id ); - $Meta = new Smart_Custom_Fields_Meta( $object ); + $Meta = new Smart_Custom_Fields_Meta( $object ); $Field = SCF::get_field( $object, 'checkbox-has-default' ); $Meta->add( 'checkbox-has-default', 'a' ); $Meta->add( 'checkbox-has-default', 'b' ); $this->assertSame( array( 'a', 'b' ), $this->Controller->get_multiple_data_field_value( $object, $Field, 0 ) ); - $Field = SCF::get_field( $object, 'checkbox' ); + $Field = SCF::get_field( $object, 'checkbox' ); $Meta->add( 'checkbox', 'a' ); $Meta->add( 'checkbox', 'b' ); $this->assertSame( array( 'a', 'b' ), $this->Controller->get_multiple_data_field_value( $object, $Field, 0 ) ); @@ -111,14 +115,14 @@ public function test_get_single_data_field_value() { $object = get_post( $this->post_id ); $Field = SCF::get_field( $object, 'text-has-default' ); $this->assertSame( 'a', $this->Controller->get_single_data_field_value( $object, $Field, null ) ); - $Field = SCF::get_field( $object, 'text' ); + $Field = SCF::get_field( $object, 'text' ); $this->assertSame( '', $this->Controller->get_single_data_field_value( $object, $Field, null ) ); // When isn't saved meta data. At that time ,$index is ignored. $object = get_post( $this->new_post_id ); $Field = SCF::get_field( $object, 'text-has-default' ); $this->assertSame( 'a', $this->Controller->get_single_data_field_value( $object, $Field, 0 ) ); - $Field = SCF::get_field( $object, 'text' ); + $Field = SCF::get_field( $object, 'text' ); $this->assertSame( '', $this->Controller->get_single_data_field_value( $object, $Field, 0 ) ); } @@ -127,14 +131,14 @@ public function test_get_single_data_field_value() { */ public function test_get_single_data_field_value__saved() { $object = get_post( $this->post_id ); - $Meta = new Smart_Custom_Fields_Meta( $object ); + $Meta = new Smart_Custom_Fields_Meta( $object ); $Field = SCF::get_field( $object, 'text-has-default' ); $Meta->add( 'text-has-default', 'b' ); $Meta->add( 'text-has-default', 'c' ); $this->assertSame( 'b', $this->Controller->get_single_data_field_value( $object, $Field, 0 ) ); $this->assertSame( 'c', $this->Controller->get_single_data_field_value( $object, $Field, 1 ) ); - $Field = SCF::get_field( $object, 'text' ); + $Field = SCF::get_field( $object, 'text' ); $Meta->add( 'text', 'b' ); $Meta->add( 'text', 'c' ); $this->assertSame( 'b', $this->Controller->get_single_data_field_value( $object, $Field, 0 ) ); @@ -143,71 +147,104 @@ public function test_get_single_data_field_value__saved() { /** * Register custom fields using filter hook + * + * @param array $settings Array of Smart_Custom_Fields_Setting object. + * @param string $type Post type or Role. + * @param int $id Post ID or User ID. + * @param string $meta_type post or user. */ public function _register( $settings, $type, $id, $meta_type ) { if ( - ( $type === 'post' && $id === $this->post_id ) || - ( $type === 'post' && $id === $this->new_post_id ) || - ( $type === 'editor' ) || - ( $type === 'category' ) || - ( $meta_type === 'option' && $id === 'menu-slug' ) + ( 'post' === $type && $id === $this->post_id ) || + ( 'post' === $type && $id === $this->new_post_id ) || + ( 'editor' === $type ) || + ( 'category' === $type ) || + ( 'option' === $meta_type && 'menu-slug' === $id ) ) { $Setting = SCF::add_setting( 'id-1', 'Register Test' ); - $Setting->add_group( 0, false, array( - array( - 'name' => 'text', - 'label' => 'text', - 'type' => 'text', - ), - ) ); - $Setting->add_group( 'text-has-default', false, array( + $Setting->add_group( + 0, + false, array( - 'name' => 'text-has-default', - 'label' => 'text has default', - 'type' => 'text', - 'default' => 'a', - ), - ) ); - $Setting->add_group( 'checkbox', false, array( + array( + 'name' => 'text', + 'label' => 'text', + 'type' => 'text', + ), + ) + ); + $Setting->add_group( + 'text-has-default', + false, array( - 'name' => 'checkbox', - 'label' => 'checkbox field', - 'type' => 'check', - 'choices' => array( 'a', 'b', 'c' ), - ), - ) ); - $Setting->add_group( 'checkbox-has-default', false, array( + array( + 'name' => 'text-has-default', + 'label' => 'text has default', + 'type' => 'text', + 'default' => 'a', + ), + ) + ); + $Setting->add_group( + 'checkbox', + false, array( - 'name' => 'checkbox-has-default', - 'label' => 'checkbox has default', - 'type' => 'check', - 'choices' => array( 'a', 'b', 'c' ), - 'default' => array( 'a' ), - ), - ) ); - $Setting->add_group( 'checkbox-key-value', false, array( + array( + 'name' => 'checkbox', + 'label' => 'checkbox field', + 'type' => 'check', + 'choices' => array( 'a', 'b', 'c' ), + ), + ) + ); + $Setting->add_group( + 'checkbox-has-default', + false, array( - 'name' => 'checkbox-key-value', - 'label' => 'checkbox key value', - 'type' => 'check', - 'choices' => array( 'a' => 'apple', 'b' => 'banana', 'c' => 'carrot' ), - 'default' => array( 'a' ), - ), - ) ); - $Setting->add_group( 'group', true, array( + array( + 'name' => 'checkbox-has-default', + 'label' => 'checkbox has default', + 'type' => 'check', + 'choices' => array( 'a', 'b', 'c' ), + 'default' => array( 'a' ), + ), + ) + ); + $Setting->add_group( + 'checkbox-key-value', + false, array( - 'name' => 'repeat-text', - 'label' => 'repeat text', - 'type' => 'text', - ), + array( + 'name' => 'checkbox-key-value', + 'label' => 'checkbox key value', + 'type' => 'check', + 'choices' => array( + 'a' => 'apple', + 'b' => 'banana', + 'c' => 'carrot', + ), + 'default' => array( 'a' ), + ), + ) + ); + $Setting->add_group( + 'group', + true, array( - 'name' => 'repeat-checkbox', - 'label' => 'repeat checkbox', - 'type' => 'check', - 'choices' => array( 'a', 'b', 'c' ), - ), - ) ); - $settings[$Setting->get_id()] = $Setting; + array( + 'name' => 'repeat-text', + 'label' => 'repeat text', + 'type' => 'text', + ), + array( + 'name' => 'repeat-checkbox', + 'label' => 'repeat checkbox', + 'type' => 'check', + 'choices' => array( 'a', 'b', 'c' ), + ), + ) + ); + $settings[ $Setting->get_id() ] = $Setting; } return $settings; } diff --git a/tests/test-smart-custom-fields-meta.php b/tests/test-smart-custom-fields-meta.php index e4af6ee..f481bcb 100644 --- a/tests/test-smart-custom-fields-meta.php +++ b/tests/test-smart-custom-fields-meta.php @@ -27,30 +27,36 @@ class Smart_Custom_Fields_Meta_Test extends WP_UnitTestCase { protected $term_id; /** - * setUp + * Set up. */ - public function setUp() { - parent::setUp(); + public function set_up() { + parent::set_up(); // The post for custom fields - $this->post_id = $this->factory->post->create( array( - 'post_type' => 'post', - 'post_status' => 'publish', - ) ); + $this->post_id = $this->factory->post->create( + array( + 'post_type' => 'post', + 'post_status' => 'publish', + ) + ); $this->Meta_post = new Smart_Custom_Fields_Meta( get_post( $this->post_id ) ); // The auto draft post for custom fields - $this->new_post_id = $this->factory->post->create( array( - 'post_type' => 'post', - 'post_status' => 'auto-draft', - ) ); + $this->new_post_id = $this->factory->post->create( + array( + 'post_type' => 'post', + 'post_status' => 'auto-draft', + ) + ); $this->Meta_new_post = new Smart_Custom_Fields_Meta( get_post( $this->new_post_id ) ); // The revision post for custom fields - $this->revision_id = $this->factory->post->create( array( - 'post_type' => 'revision', - 'post_parent' => $this->post_id, - ) ); + $this->revision_id = $this->factory->post->create( + array( + 'post_type' => 'revision', + 'post_parent' => $this->post_id, + ) + ); $this->Meta_revision = new Smart_Custom_Fields_Meta( get_post( $this->revision_id ) ); // The user for custom fields @@ -59,11 +65,11 @@ public function setUp() { $this->Meta_user = new Smart_Custom_Fields_Meta( get_userdata( $this->user_id ) ); // The term for custom fields - $this->term_id = $this->factory->term->create( array( 'taxonomy' => 'category' ) ); + $this->term_id = $this->factory->term->create( array( 'taxonomy' => 'category' ) ); $this->Meta_term = new Smart_Custom_Fields_Meta( get_term( $this->term_id, 'category' ) ); // The option page for custom fields - $this->menu_slug = SCF::add_options_page( 'page title', 'menu title', 'manage_options', 'menu-slug' ); + $this->menu_slug = SCF::add_options_page( 'page title', 'menu title', 'manage_options', 'menu-slug' ); $this->Meta_option = new Smart_Custom_Fields_Meta( SCF::generate_option_object( $this->menu_slug ) ); add_filter( 'smart-cf-register-fields', array( $this, '_register' ), 10, 4 ); @@ -73,10 +79,10 @@ public function setUp() { } /** - * tearDown + * Tear down. */ - public function tearDown() { - parent::tearDown(); + public function tear_down() { + parent::tear_down(); $Cache = Smart_Custom_Fields_Cache::get_instance(); $Cache->flush(); } @@ -85,11 +91,11 @@ public function tearDown() { * @group get_meta_type */ public function test_get_meta_type() { - $this->assertSame( 'post' , $this->Meta_post->get_meta_type() ); - $this->assertSame( 'post' , $this->Meta_new_post->get_meta_type() ); - $this->assertSame( 'post' , $this->Meta_revision->get_meta_type() ); - $this->assertSame( 'user' , $this->Meta_user->get_meta_type() ); - $this->assertSame( 'term' , $this->Meta_term->get_meta_type() ); + $this->assertSame( 'post', $this->Meta_post->get_meta_type() ); + $this->assertSame( 'post', $this->Meta_new_post->get_meta_type() ); + $this->assertSame( 'post', $this->Meta_revision->get_meta_type() ); + $this->assertSame( 'user', $this->Meta_user->get_meta_type() ); + $this->assertSame( 'term', $this->Meta_term->get_meta_type() ); $this->assertSame( 'option', $this->Meta_option->get_meta_type() ); } @@ -97,24 +103,24 @@ public function test_get_meta_type() { * @group get_id */ public function test_get_id() { - $this->assertSame( $this->post_id , $this->Meta_post->get_id() ); + $this->assertSame( $this->post_id, $this->Meta_post->get_id() ); $this->assertSame( $this->new_post_id, $this->Meta_new_post->get_id() ); $this->assertSame( $this->revision_id, $this->Meta_revision->get_id() ); - $this->assertSame( $this->user_id , $this->Meta_user->get_id() ); - $this->assertSame( $this->term_id , $this->Meta_term->get_id() ); - $this->assertSame( $this->menu_slug , $this->Meta_option->get_id() ); + $this->assertSame( $this->user_id, $this->Meta_user->get_id() ); + $this->assertSame( $this->term_id, $this->Meta_term->get_id() ); + $this->assertSame( $this->menu_slug, $this->Meta_option->get_id() ); } /** * @group get_type */ public function test_get_type() { - $this->assertSame( 'post' , $this->Meta_post->get_type() ); - $this->assertSame( 'post' , $this->Meta_new_post->get_type() ); + $this->assertSame( 'post', $this->Meta_post->get_type() ); + $this->assertSame( 'post', $this->Meta_new_post->get_type() ); $this->assertSame( 'revision', $this->Meta_revision->get_type( true ) ); - $this->assertSame( 'post' , $this->Meta_revision->get_type( false ) ); + $this->assertSame( 'post', $this->Meta_revision->get_type( false ) ); $this->assertSame( 'category', $this->Meta_term->get_type() ); - $this->assertSame( 'editor' , $this->Meta_user->get_type() ); + $this->assertSame( 'editor', $this->Meta_user->get_type() ); $this->assertSame( $this->menu_slug, $this->Meta_option->get_type() ); } @@ -122,10 +128,10 @@ public function test_get_type() { * @group get_types */ public function test_get_types() { - $this->assertSame( array( 'post' ) , $this->Meta_post->get_types() ); - $this->assertSame( array( 'post' ) , $this->Meta_new_post->get_types() ); + $this->assertSame( array( 'post' ), $this->Meta_post->get_types() ); + $this->assertSame( array( 'post' ), $this->Meta_new_post->get_types() ); $this->assertSame( array( 'revision' ), $this->Meta_revision->get_types( true ) ); - $this->assertSame( array( 'post' ) , $this->Meta_revision->get_types( false ) ); + $this->assertSame( array( 'post' ), $this->Meta_revision->get_types( false ) ); $this->assertSame( array( 'category' ), $this->Meta_term->get_types() ); $this->assertSame( array( 'editor', 'subscriber' ), $this->Meta_user->get_types() ); $this->assertSame( array( $this->menu_slug ), $this->Meta_option->get_types() ); @@ -310,16 +316,16 @@ public function test_get__post_saved() { ); $this->assertSame( array( - 'text' => array( 'text' ), - 'checkbox' => array( 'a', 'b' ), + 'text' => array( 'text' ), + 'checkbox' => array( 'a', 'b' ), 'repeat-checkbox' => array( 'a', 'b' ), ), $this->Meta_post->get() ); $this->assertSame( array( - 'text' => array( 'text' ), - 'checkbox' => array( 'a', 'b' ), + 'text' => array( 'text' ), + 'checkbox' => array( 'a', 'b' ), 'repeat-checkbox' => array( 'a', 'b' ), ), $this->Meta_post->get( '', true ) @@ -350,16 +356,16 @@ public function test_get__term_saved() { ); $this->assertSame( array( - 'text' => array( 'text' ), - 'checkbox' => array( 'a', 'b' ), + 'text' => array( 'text' ), + 'checkbox' => array( 'a', 'b' ), 'repeat-checkbox' => array( 'a', 'b' ), ), $this->Meta_term->get() ); $this->assertSame( array( - 'text' => array( 'text' ), - 'checkbox' => array( 'a', 'b' ), + 'text' => array( 'text' ), + 'checkbox' => array( 'a', 'b' ), 'repeat-checkbox' => array( 'a', 'b' ), ), $this->Meta_term->get( '', true ) @@ -390,16 +396,16 @@ public function test_get__user_saved() { ); $this->assertSame( array( - 'text' => array( 'text' ), - 'checkbox' => array( 'a', 'b' ), + 'text' => array( 'text' ), + 'checkbox' => array( 'a', 'b' ), 'repeat-checkbox' => array( 'a', 'b' ), ), $this->Meta_user->get() ); $this->assertSame( array( - 'text' => array( 'text' ), - 'checkbox' => array( 'a', 'b' ), + 'text' => array( 'text' ), + 'checkbox' => array( 'a', 'b' ), 'repeat-checkbox' => array( 'a', 'b' ), ), $this->Meta_user->get( '', true ) @@ -430,16 +436,16 @@ public function test_get__option_saved() { ); $this->assertSame( array( - 'text' => array( 'text' ), - 'checkbox' => array( 'a', 'b' ), + 'text' => array( 'text' ), + 'checkbox' => array( 'a', 'b' ), 'repeat-checkbox' => array( 'a', 'b' ), ), $this->Meta_option->get() ); $this->assertSame( array( - 'text' => array( 'text' ), - 'checkbox' => array( 'a', 'b' ), + 'text' => array( 'text' ), + 'checkbox' => array( 'a', 'b' ), 'repeat-checkbox' => array( 'a', 'b' ), ), $this->Meta_option->get( '', true ) @@ -738,18 +744,6 @@ public function test_delete__option_using_value() { $this->assertSame( array( '1' ), $this->Meta_option->get( 'text' ) ); } - /** - * @group delete_term_meta_for_wp43 - */ - public function test_delete_term_meta_for_wp43() { - if ( !_get_meta_table( $this->Meta_term->get_meta_type() ) ) { - $this->Meta_term->add( 'text' , 'text' ); - $this->Meta_term->add( 'checkbox', 'checkbox-1' ); - $this->Meta_term->delete_term_meta_for_wp43(); - $this->assertSame( array(), $this->Meta_term->get() ); - } - } - /** * @group save */ @@ -760,12 +754,12 @@ public function test_save__post() { $this->assertEquals( array( array( - 'repeat-text' => '1', - 'repeat-checkbox' => array( 1, 2 ) + 'repeat-text' => '1', + 'repeat-checkbox' => array( 1, 2 ), ), array( - 'repeat-text' => '2', - 'repeat-checkbox' => array( 2, 3 ) + 'repeat-text' => '2', + 'repeat-checkbox' => array( 2, 3 ), ), ), SCF::get( 'group', $this->post_id ) @@ -782,12 +776,12 @@ public function test_save__term() { $this->assertEquals( array( array( - 'repeat-text' => '1', - 'repeat-checkbox' => array( 1, 2 ) + 'repeat-text' => '1', + 'repeat-checkbox' => array( 1, 2 ), ), array( - 'repeat-text' => '2', - 'repeat-checkbox' => array( 2, 3 ) + 'repeat-text' => '2', + 'repeat-checkbox' => array( 2, 3 ), ), ), SCF::get_term_meta( $this->term_id, 'category', 'group' ) @@ -804,12 +798,12 @@ public function test_save__user() { $this->assertEquals( array( array( - 'repeat-text' => '1', - 'repeat-checkbox' => array( 1, 2 ) + 'repeat-text' => '1', + 'repeat-checkbox' => array( 1, 2 ), ), array( - 'repeat-text' => '2', - 'repeat-checkbox' => array( 2, 3 ) + 'repeat-text' => '2', + 'repeat-checkbox' => array( 2, 3 ), ), ), SCF::get_user_meta( $this->user_id, 'group' ) @@ -826,12 +820,12 @@ public function test_save__option() { $this->assertEquals( array( array( - 'repeat-text' => '1', - 'repeat-checkbox' => array( 1, 2 ) + 'repeat-text' => '1', + 'repeat-checkbox' => array( 1, 2 ), ), array( - 'repeat-text' => '2', - 'repeat-checkbox' => array( 2, 3 ) + 'repeat-text' => '2', + 'repeat-checkbox' => array( 2, 3 ), ), ), SCF::get_option_meta( $this->menu_slug, 'group' ) @@ -848,8 +842,8 @@ public function test_save__post_not_posting_metadata() { $this->assertSame( array( array( - 'repeat-text' => '', - 'repeat-checkbox' => array() + 'repeat-text' => '', + 'repeat-checkbox' => array(), ), ), SCF::get( 'group', $this->post_id ) @@ -866,8 +860,8 @@ public function test_save__term_not_posting_metadata() { $this->assertSame( array( array( - 'repeat-text' => '', - 'repeat-checkbox' => array() + 'repeat-text' => '', + 'repeat-checkbox' => array(), ), ), SCF::get_term_meta( $this->term_id, 'category', 'group' ) @@ -884,8 +878,8 @@ public function test_save__user_not_posting_metadata() { $this->assertSame( array( array( - 'repeat-text' => '', - 'repeat-checkbox' => array() + 'repeat-text' => '', + 'repeat-checkbox' => array(), ), ), SCF::get_user_meta( $this->user_id, 'group' ) @@ -902,8 +896,8 @@ public function test_save__option_not_posting_metadata() { $this->assertSame( array( array( - 'repeat-text' => '', - 'repeat-checkbox' => array() + 'repeat-text' => '', + 'repeat-checkbox' => array(), ), ), SCF::get_option_meta( $this->menu_slug, 'group' ) @@ -922,12 +916,12 @@ public function test_restore() { $this->assertEquals( array( array( - 'repeat-text' => '1', - 'repeat-checkbox' => array( 1, 2 ) + 'repeat-text' => '1', + 'repeat-checkbox' => array( 1, 2 ), ), array( - 'repeat-text' => '2', - 'repeat-checkbox' => array( 2, 3 ) + 'repeat-text' => '2', + 'repeat-checkbox' => array( 2, 3 ), ), ), SCF::get( 'group', $this->post_id ) @@ -938,14 +932,19 @@ public function test_restore() { $this->assertNull( $this->Meta_post->restore( SCF::generate_option_object( $this->menu_slug ) ) ); } + /** + * Return post date for save. + * + * @param string $key SCF_Config::NAME. + */ protected function _return_post_data_for_save( $key ) { return array( $key => array( - 'text' => array( 'text' ), - 'checkbox' => array( + 'text' => array( 'text' ), + 'checkbox' => array( array( 1, 2 ), ), - 'repeat-text' => array( + 'repeat-text' => array( array( '1', '2' ), ), 'repeat-checkbox' => array( @@ -957,74 +956,107 @@ protected function _return_post_data_for_save( $key ) { } /** - * Register custom fields using filter hook + * Register custom fields using filter hook. + * + * @param array $settings Array of Smart_Custom_Fields_Setting object. + * @param string $type Post type or Role. + * @param int $id Post ID or User ID. + * @param string $meta_type post or user. */ public function _register( $settings, $type, $id, $meta_type ) { if ( - ( $type === 'post' && $id === $this->post_id ) || - ( $type === 'post' && $id === $this->new_post_id ) || - ( $type === 'post' && $id === $this->revision_id ) || - ( $type === 'editor' ) || - ( $type === 'subscriber' ) || - ( $type === 'category' ) || - ( $meta_type === 'option' && $id === 'menu-slug' ) + ( 'post' === $type && $id === $this->post_id ) || + ( 'post' === $type && $id === $this->new_post_id ) || + ( 'post' === $type && $id === $this->revision_id ) || + ( 'editor' === $type ) || + ( 'subscriber' === $type ) || + ( 'category' === $type ) || + ( 'option' === $meta_type && 'menu-slug' === $id ) ) { $Setting = SCF::add_setting( 'id-1', 'Register Test' ); - $Setting->add_group( 0, false, array( + $Setting->add_group( + 0, + false, array( - 'name' => 'text', - 'label' => 'text', - 'type' => 'text', - ), - ) ); - $Setting->add_group( 'text-has-default', false, array( - array( - 'name' => 'text-has-default', - 'label' => 'text has default', - 'type' => 'text', - 'default' => 'a', - ), - ) ); - $Setting->add_group( 'checkbox', false, array( + array( + 'name' => 'text', + 'label' => 'text', + 'type' => 'text', + ), + ) + ); + $Setting->add_group( + 'text-has-default', + false, array( - 'name' => 'checkbox', - 'label' => 'checkbox field', - 'type' => 'check', - 'choices' => array( 'a', 'b', 'c' ), - ), - ) ); - $Setting->add_group( 'checkbox-has-default', false, array( + array( + 'name' => 'text-has-default', + 'label' => 'text has default', + 'type' => 'text', + 'default' => 'a', + ), + ) + ); + $Setting->add_group( + 'checkbox', + false, array( - 'name' => 'checkbox-has-default', - 'label' => 'checkbox has default', - 'type' => 'check', - 'choices' => array( 'a', 'b', 'c' ), - 'default' => array( 'a' ), - ), - ) ); - $Setting->add_group( 'checkbox-key-value', false, array( + array( + 'name' => 'checkbox', + 'label' => 'checkbox field', + 'type' => 'check', + 'choices' => array( 'a', 'b', 'c' ), + ), + ) + ); + $Setting->add_group( + 'checkbox-has-default', + false, array( - 'name' => 'checkbox-key-value', - 'label' => 'checkbox key value', - 'type' => 'check', - 'choices' => array( 'a' => 'apple', 'b' => 'banana', 'c' => 'carrot' ), - 'default' => array( 'a' ), - ), - ) ); - $Setting->add_group( 'group', true, array( + array( + 'name' => 'checkbox-has-default', + 'label' => 'checkbox has default', + 'type' => 'check', + 'choices' => array( 'a', 'b', 'c' ), + 'default' => array( 'a' ), + ), + ) + ); + $Setting->add_group( + 'checkbox-key-value', + false, array( - 'name' => 'repeat-text', - 'label' => 'repeat text', - 'type' => 'text', - ), + array( + 'name' => 'checkbox-key-value', + 'label' => 'checkbox key value', + 'type' => 'check', + 'choices' => array( + 'a' => 'apple', + 'b' => 'banana', + 'c' => 'carrot', + ), + 'default' => array( 'a' ), + ), + ) + ); + $Setting->add_group( + 'group', + true, array( - 'name' => 'repeat-checkbox', - 'label' => 'repeat checkbox', - 'type' => 'check', - 'choices' => array( 'a', 'b', 'c' ), - ), - ) ); - $settings[$Setting->get_id()] = $Setting; + array( + 'name' => 'repeat-text', + 'label' => 'repeat text', + 'type' => 'text', + ), + array( + 'name' => 'repeat-checkbox', + 'label' => 'repeat checkbox', + 'type' => 'check', + 'choices' => array( 'a', 'b', 'c' ), + ), + ) + ); + $settings[ $Setting->get_id() ] = $Setting; } return $settings; } diff --git a/tests/test-smart-custom-fields-revision.php b/tests/test-smart-custom-fields-revision.php index 78c9ac5..b460550 100644 --- a/tests/test-smart-custom-fields-revision.php +++ b/tests/test-smart-custom-fields-revision.php @@ -17,26 +17,30 @@ class Smart_Custom_Fields_Revision_Test extends WP_UnitTestCase { protected $revision_id; /** - * setUp + * Set up. */ - public function setUp() { - parent::setUp(); + public function set_up() { + parent::set_up(); $this->Revision = new Smart_Custom_Fields_Revisions(); // The post for custom fields - $this->post_id = $this->factory->post->create( array( - 'post_type' => 'post', - 'post_status' => 'publish', - ) ); + $this->post_id = $this->factory->post->create( + array( + 'post_type' => 'post', + 'post_status' => 'publish', + ) + ); // The revision post for custom fields - $this->revision_id = $this->factory->post->create( array( - 'post_type' => 'revision', - 'post_parent' => $this->post_id, - 'post_status' => 'inherit', - 'post_name' => $this->post_id . '-autosave-v1', - ) ); + $this->revision_id = $this->factory->post->create( + array( + 'post_type' => 'revision', + 'post_parent' => $this->post_id, + 'post_status' => 'inherit', + 'post_name' => $this->post_id . '-autosave-v1', + ) + ); add_filter( 'smart-cf-register-fields', array( $this, '_register' ), 10, 4 ); @@ -45,10 +49,10 @@ public function setUp() { } /** - * tearDown + * Tear down. */ - public function tearDown() { - parent::tearDown(); + public function tear_down() { + parent::tear_down(); $Cache = Smart_Custom_Fields_Cache::get_instance(); $Cache->flush(); } @@ -78,7 +82,7 @@ public function test_wp_restore_post_revision() { * @group wp_insert_post */ public function test_wp_insert_post() { - $_REQUEST[SCF_Config::PREFIX . 'fields-nonce'] = wp_create_nonce( SCF_Config::NAME . '-fields' ); + $_REQUEST[ SCF_Config::PREFIX . 'fields-nonce' ] = wp_create_nonce( SCF_Config::NAME . '-fields' ); $_POST = array( SCF_Config::NAME => array( @@ -103,72 +107,106 @@ public function test_get_post_metadata() { global $wp_query, $post; $wp_query->is_preview = true; - $post = get_post( $this->post_id ); - $meta = $this->Revision->get_post_metadata( 'default-value', $this->post_id, 'text', true ); + $post = get_post( $this->post_id ); + $meta = $this->Revision->get_post_metadata( 'default-value', $this->post_id, 'text', true ); $this->assertEquals( 'text', $meta ); } /** - * Register custom fields using filter hook + * Register custom fields using filter hook. + * + * @param array $settings Array of Smart_Custom_Fields_Setting object. + * @param string $type Post type or Role. + * @param int $id Post ID or User ID. + * @param string $meta_type post or user. + * @return array */ public function _register( $settings, $type, $id, $meta_type ) { - if ( $type === 'post' && ( $id === $this->post_id || $id === $this->revision_id ) ) { + if ( 'post' === $type && ( $id === $this->post_id || $id === $this->revision_id ) ) { $Setting = SCF::add_setting( 'id-1', 'Register Test' ); - $Setting->add_group( 0, false, array( - array( - 'name' => 'text', - 'label' => 'text', - 'type' => 'text', - ), - ) ); - $Setting->add_group( 'text-has-default', false, array( + $Setting->add_group( + 0, + false, array( - 'name' => 'text-has-default', - 'label' => 'text has default', - 'type' => 'text', - 'default' => 'a', - ), - ) ); - $Setting->add_group( 'checkbox', false, array( + array( + 'name' => 'text', + 'label' => 'text', + 'type' => 'text', + ), + ) + ); + $Setting->add_group( + 'text-has-default', + false, array( - 'name' => 'checkbox', - 'label' => 'checkbox field', - 'type' => 'check', - 'choices' => array( 'a', 'b', 'c' ), - ), - ) ); - $Setting->add_group( 'checkbox-has-default', false, array( + array( + 'name' => 'text-has-default', + 'label' => 'text has default', + 'type' => 'text', + 'default' => 'a', + ), + ) + ); + $Setting->add_group( + 'checkbox', + false, array( - 'name' => 'checkbox-has-default', - 'label' => 'checkbox has default', - 'type' => 'check', - 'choices' => array( 'a', 'b', 'c' ), - 'default' => array( 'a' ), - ), - ) ); - $Setting->add_group( 'checkbox-key-value', false, array( + array( + 'name' => 'checkbox', + 'label' => 'checkbox field', + 'type' => 'check', + 'choices' => array( 'a', 'b', 'c' ), + ), + ) + ); + $Setting->add_group( + 'checkbox-has-default', + false, array( - 'name' => 'checkbox-key-value', - 'label' => 'checkbox key value', - 'type' => 'check', - 'choices' => array( 'a' => 'apple', 'b' => 'banana', 'c' => 'carrot' ), - 'default' => array( 'a' ), - ), - ) ); - $Setting->add_group( 'group', true, array( + array( + 'name' => 'checkbox-has-default', + 'label' => 'checkbox has default', + 'type' => 'check', + 'choices' => array( 'a', 'b', 'c' ), + 'default' => array( 'a' ), + ), + ) + ); + $Setting->add_group( + 'checkbox-key-value', + false, array( - 'name' => 'repeat-text', - 'label' => 'repeat text', - 'type' => 'text', - ), + array( + 'name' => 'checkbox-key-value', + 'label' => 'checkbox key value', + 'type' => 'check', + 'choices' => array( + 'a' => 'apple', + 'b' => 'banana', + 'c' => 'carrot', + ), + 'default' => array( 'a' ), + ), + ) + ); + $Setting->add_group( + 'group', + true, array( - 'name' => 'repeat-checkbox', - 'label' => 'repeat checkbox', - 'type' => 'check', - 'choices' => array( 'a', 'b', 'c' ), - ), - ) ); - $settings[$Setting->get_id()] = $Setting; + array( + 'name' => 'repeat-text', + 'label' => 'repeat text', + 'type' => 'text', + ), + array( + 'name' => 'repeat-checkbox', + 'label' => 'repeat checkbox', + 'type' => 'check', + 'choices' => array( 'a', 'b', 'c' ), + ), + ) + ); + $settings[ $Setting->get_id() ] = $Setting; } return $settings; } diff --git a/tests/test-smart-custom-fields.php b/tests/test-smart-custom-fields.php index deba44e..5e63d6e 100644 --- a/tests/test-smart-custom-fields.php +++ b/tests/test-smart-custom-fields.php @@ -7,20 +7,23 @@ class Smart_Custom_Fields_Test extends WP_UnitTestCase { protected $post_ids; /** - * setUp + * Set up. */ - public function setUp() { - parent::setUp(); + public function set_up() { + parent::set_up(); - $this->post_ids = $this->factory->post->create_many( 5, array( - 'post_type' => SCF_Config::NAME, - ) ); + $this->post_ids = $this->factory->post->create_many( + 5, + array( + 'post_type' => SCF_Config::NAME, + ) + ); foreach ( $this->post_ids as $post_id ) { update_post_meta( $post_id, SCF_Config::PREFIX . 'repeat-multiple-data', 'dummy' ); } - for ( $i = 1; $i <= 5; $i ++ ) { + for ( $i = 1; $i <= 5; $i++ ) { update_option( SCF_Config::PREFIX . $i, 'dummy' ); } @@ -29,10 +32,10 @@ public function setUp() { } /** - * tearDown + * Tear down. */ - public function tearDown() { - parent::tearDown(); + public function tear_down() { + parent::tear_down(); $Cache = Smart_Custom_Fields_Cache::get_instance(); $Cache->flush(); } @@ -42,11 +45,13 @@ public function tearDown() { */ public function test_uninstall__post() { Smart_Custom_Fields::uninstall(); - $posts = get_posts( array( - 'post_type' => SCF_Config::NAME, - 'posts_per_page' => -1, - 'post_status' => 'any', - ) ); + $posts = get_posts( + array( + 'post_type' => SCF_Config::NAME, + 'posts_per_page' => -1, + 'post_status' => 'any', + ) + ); $this->assertEquals( 0, count( $posts ) ); } @@ -56,6 +61,7 @@ public function test_uninstall__post() { public function test_uninstall__repeat_multiple_data() { Smart_Custom_Fields::uninstall(); + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching global $wpdb; $var = $wpdb->get_var( $wpdb->prepare( @@ -66,6 +72,8 @@ public function test_uninstall__repeat_multiple_data() { SCF_Config::PREFIX . 'repeat-multiple-data' ) ); + // phpcs:enable + $this->assertEquals( 0, $var ); } @@ -75,6 +83,7 @@ public function test_uninstall__repeat_multiple_data() { public function test_uninstall__option() { Smart_Custom_Fields::uninstall(); + // phpcs:disable WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.DirectDatabaseQuery.NoCaching global $wpdb; $var = $wpdb->get_var( $wpdb->prepare( @@ -85,6 +94,8 @@ public function test_uninstall__option() { SCF_Config::PREFIX . '%' ) ); + // phpcs:enable + $this->assertEquals( 0, $var ); } }