From 7cae09139ff929796a698ae295df67110030c46a Mon Sep 17 00:00:00 2001 From: mostafa-hisham Date: Thu, 13 Jul 2023 12:54:52 +0300 Subject: [PATCH] use js_exclude_files from backend --- .../DynamicLists/DynamicLists.php | 11 +++++ .../Optimization/DynamicLists/Subscriber.php | 15 +++++++ .../Minify/JS/AbstractJSOptimization.php | 9 +--- .../DynamicLists/getJsExcludeFiles.php | 18 ++++++++ .../Subscriber/addJsExcludeFiles.php | 29 +++++++++++++ .../Subscriber/addJsExcludeFiles.php | 39 ++++++++++++++++++ .../DynamicLists/getJsExcludeFiles.php | 41 +++++++++++++++++++ 7 files changed, 154 insertions(+), 8 deletions(-) create mode 100644 tests/Fixtures/inc/Engine/Optimization/DynamicLists/DynamicLists/getJsExcludeFiles.php create mode 100644 tests/Fixtures/inc/Engine/Optimization/DynamicLists/Subscriber/addJsExcludeFiles.php create mode 100644 tests/Integration/inc/Engine/Optimization/DynamicLists/Subscriber/addJsExcludeFiles.php create mode 100644 tests/Unit/inc/Engine/Optimization/DynamicLists/DynamicLists/getJsExcludeFiles.php diff --git a/inc/Engine/Optimization/DynamicLists/DynamicLists.php b/inc/Engine/Optimization/DynamicLists/DynamicLists.php index 3dbf67e4bd..3c75cd72ac 100644 --- a/inc/Engine/Optimization/DynamicLists/DynamicLists.php +++ b/inc/Engine/Optimization/DynamicLists/DynamicLists.php @@ -253,4 +253,15 @@ public function get_preload_exclusions(): array { public function get_delayjs_list() { return $this->providers['delayjslists']->data_manager->get_lists(); } + + /** + * Get the JS minify excluded files + * + * @return array + */ + public function get_js_exclude_files(): array { + $lists = $this->providers['defaultlists']->data_manager->get_lists(); + + return isset( $lists->js_exclude_files ) ? $lists->js_exclude_files : []; + } } diff --git a/inc/Engine/Optimization/DynamicLists/Subscriber.php b/inc/Engine/Optimization/DynamicLists/Subscriber.php index aa8189d549..be42dcb376 100644 --- a/inc/Engine/Optimization/DynamicLists/Subscriber.php +++ b/inc/Engine/Optimization/DynamicLists/Subscriber.php @@ -40,6 +40,7 @@ public static function get_subscribed_events() { 'rocket_move_after_combine_js' => 'add_move_after_combine_js', 'rocket_excluded_inline_js_content' => 'add_combine_js_excluded_inline', 'rocket_preload_exclude_urls' => 'add_preload_exclusions', + 'rocket_exclude_js' => 'add_js_exclude_files', ]; } @@ -174,4 +175,18 @@ public function add_preload_exclusions( $excluded = [] ): array { return array_merge( $excluded, $this->dynamic_lists->get_preload_exclusions() ); } + /** + * Add the js files exclusions to the array + * + * @param array $js_files Array of files. + * + * @return array + */ + public function add_js_exclude_files( $js_files = [] ): array { + if ( ! is_array( $js_files ) ) { + $js_files = (array) $js_files; + } + + return array_merge( $js_files, $this->dynamic_lists->get_js_exclude_files() ); + } } diff --git a/inc/Engine/Optimization/Minify/JS/AbstractJSOptimization.php b/inc/Engine/Optimization/Minify/JS/AbstractJSOptimization.php index a37c008765..e2ea2f21fb 100644 --- a/inc/Engine/Optimization/Minify/JS/AbstractJSOptimization.php +++ b/inc/Engine/Optimization/Minify/JS/AbstractJSOptimization.php @@ -47,14 +47,7 @@ public function __construct( Options_Data $options, AssetsLocalCache $local_cach * @return string A list of files to exclude, ready to be used in a regex pattern. */ protected function get_excluded_files() { - $excluded_files = $this->options->get( 'exclude_js', [] ); - $excluded_files[] = '/wp-includes/js/dist/i18n.min.js'; - $excluded_files[] = '/interactive-3d-flipbook-powered-physics-engine/assets/js/html2canvas.min.js'; - $excluded_files[] = '/interactive-3d-flipbook-powered-physics-engine/assets/js/pdf.min.js'; - $excluded_files[] = '/interactive-3d-flipbook-powered-physics-engine/assets/js/three.min.js'; - $excluded_files[] = '/interactive-3d-flipbook-powered-physics-engine/assets/js/3d-flip-book.min.js'; - $excluded_files[] = '/google-site-kit/dist/assets/js/(.*)\.js'; - $excluded_files[] = '/wp-live-chat-support/public/js/callus(.*)\.js'; + $excluded_files = $this->options->get( 'exclude_js', [] ); /** * Filter JS files to exclude from minification/concatenation. diff --git a/tests/Fixtures/inc/Engine/Optimization/DynamicLists/DynamicLists/getJsExcludeFiles.php b/tests/Fixtures/inc/Engine/Optimization/DynamicLists/DynamicLists/getJsExcludeFiles.php new file mode 100644 index 0000000000..baab25ef1f --- /dev/null +++ b/tests/Fixtures/inc/Engine/Optimization/DynamicLists/DynamicLists/getJsExcludeFiles.php @@ -0,0 +1,18 @@ + [ + 'list' => (object) [], + 'expected' => [], + ], + 'shouldReturnArrayWhenMatchingProperty' => [ + 'list' => (object) [ + 'js_exclude_files' => [ + '/test/1', + ], + ], + 'expected' => [ + '/test/1', + ], + ], +]; diff --git a/tests/Fixtures/inc/Engine/Optimization/DynamicLists/Subscriber/addJsExcludeFiles.php b/tests/Fixtures/inc/Engine/Optimization/DynamicLists/Subscriber/addJsExcludeFiles.php new file mode 100644 index 0000000000..61384963a6 --- /dev/null +++ b/tests/Fixtures/inc/Engine/Optimization/DynamicLists/Subscriber/addJsExcludeFiles.php @@ -0,0 +1,29 @@ + [ + 'original' => [], + 'list' => (object) [ + 'js_exclude_files' => [ + '/test/1', + ], + ], + 'expected' => [ + '/test/1', + ], + ], + 'shouldReturnUpdatedArrayWhenNotEmptyOriginal' => [ + 'original' => [ + '/test/', + ], + 'list' => (object) [ + 'js_exclude_files' => [ + '/test/1', + ], + ], + 'expected' => [ + '/test/', + '/test/1', + ], + ], +]; diff --git a/tests/Integration/inc/Engine/Optimization/DynamicLists/Subscriber/addJsExcludeFiles.php b/tests/Integration/inc/Engine/Optimization/DynamicLists/Subscriber/addJsExcludeFiles.php new file mode 100644 index 0000000000..9a770a2082 --- /dev/null +++ b/tests/Integration/inc/Engine/Optimization/DynamicLists/Subscriber/addJsExcludeFiles.php @@ -0,0 +1,39 @@ +unregisterAllCallbacksExcept( 'rocket_exclude_js', 'add_js_exclude_files', 10 ); + } + + public function tear_down() { + delete_transient( 'wpr_dynamic_lists' ); + + $this->restoreWpFilter( 'rocket_exclude_js' ); + + parent::tear_down(); + } + + /** + * @dataProvider configTestData + */ + public function testShouldReturnExpected( $original, $list, $expected ) { + set_transient( 'wpr_dynamic_lists', $list, HOUR_IN_SECONDS ); + + $this->assertSame( + $expected, + apply_filters( 'rocket_exclude_js', $original ) + ); + } +} diff --git a/tests/Unit/inc/Engine/Optimization/DynamicLists/DynamicLists/getJsExcludeFiles.php b/tests/Unit/inc/Engine/Optimization/DynamicLists/DynamicLists/getJsExcludeFiles.php new file mode 100644 index 0000000000..786fd65096 --- /dev/null +++ b/tests/Unit/inc/Engine/Optimization/DynamicLists/DynamicLists/getJsExcludeFiles.php @@ -0,0 +1,41 @@ + + (object) [ + 'api_client' => Mockery::mock( APIClient::class ), + 'data_manager' => $data_manager, + ], + ]; + $dynamic_lists = new DynamicLists( $providers, Mockery::mock( User::class ), '', Mockery::mock( Beacon::class ) ); + + $data_manager->shouldReceive( 'get_lists' ) + ->andReturn( $list ); + + $this->assertSame( + $expected, + $dynamic_lists->get_js_exclude_files() + ); + } +}