From f96e358bc872f96966fa1f4d28b484c248cd7e80 Mon Sep 17 00:00:00 2001 From: dai_48k <1981669259@qq.com> Date: Fri, 18 Jul 2025 16:30:27 +0800 Subject: [PATCH] =?UTF-8?q?draft-2025-07-18=5F=E6=A0=B8=E5=BF=83=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=88=9D=E7=A8=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + .idea/compiler.xml | 36 + .idea/encodings.xml | 11 + .idea/jarRepositories.xml | 20 + ..._ch_qos_logback_logback_classic_1_2_11.xml | 13 + ..._ch_qos_logback_logback_classic_1_5_18.xml | 13 + ...en__ch_qos_logback_logback_core_1_2_11.xml | 13 + ...en__ch_qos_logback_logback_core_1_5_18.xml | 13 + .../Maven__com_beust_jcommander_1_82.xml | 13 + ...ackson_core_jackson_annotations_2_13_2.xml | 13 + ...erxml_jackson_core_jackson_core_2_13_2.xml | 13 + ...jackson_core_jackson_databind_2_13_2_2.xml | 13 + ..._datatype_jackson_datatype_jdk8_2_13_2.xml | 13 + ...atatype_jackson_datatype_jsr310_2_13_2.xml | 13 + ..._jackson_module_parameter_names_2_13_2.xml | 13 + ...Maven__com_google_auto_auto_common_1_2.xml | 13 + ...google_auto_service_auto_service_1_0_1.xml | 13 + ...service_auto_service_annotations_1_0_1.xml | 13 + ..._com_google_code_findbugs_jsr305_3_0_2.xml | 13 + ...rorprone_error_prone_annotations_2_7_1.xml | 13 + ...__com_google_guava_failureaccess_1_0_1.xml | 13 + ...ven__com_google_guava_guava_31_0_1_jre.xml | 13 + ...9_0_empty_to_avoid_conflict_with_guava.xml | 13 + ...m_google_j2objc_j2objc_annotations_1_3.xml | 13 + ...n__com_jayway_jsonpath_json_path_2_6_0.xml | 13 + ...n__com_jayway_jsonpath_json_path_2_9_0.xml | 13 + ...un_activation_jakarta_activation_1_2_2.xml | 13 + ...afe_netty_netty_reactive_streams_2_0_4.xml | 13 + ...ogle_android_json_0_0_20131108_vaadin1.xml | 13 + ...o_micrometer_micrometer_commons_1_15_1.xml | 13 + ...crometer_micrometer_observation_1_15_1.xml | 13 + ...en__io_netty_netty_buffer_4_1_73_Final.xml | 13 + ...en__io_netty_netty_buffer_4_1_75_Final.xml | 13 + ...ven__io_netty_netty_codec_4_1_73_Final.xml | 13 + ...ven__io_netty_netty_codec_4_1_75_Final.xml | 13 + ...io_netty_netty_codec_http_4_1_73_Final.xml | 13 + ...io_netty_netty_codec_http_4_1_75_Final.xml | 13 + ...o_netty_netty_codec_socks_4_1_60_Final.xml | 13 + ...o_netty_netty_codec_socks_4_1_75_Final.xml | 13 + ...en__io_netty_netty_common_4_1_73_Final.xml | 13 + ...en__io_netty_netty_common_4_1_75_Final.xml | 13 + ...n__io_netty_netty_handler_4_1_73_Final.xml | 13 + ...n__io_netty_netty_handler_4_1_75_Final.xml | 13 + ...netty_netty_handler_proxy_4_1_60_Final.xml | 13 + ...netty_netty_handler_proxy_4_1_75_Final.xml | 13 + ...__io_netty_netty_resolver_4_1_73_Final.xml | 13 + ...__io_netty_netty_resolver_4_1_75_Final.xml | 13 + ...ty_netty_tcnative_classes_2_0_46_Final.xml | 13 + ..._io_netty_netty_transport_4_1_73_Final.xml | 13 + ..._io_netty_netty_transport_4_1_75_Final.xml | 13 + ...y_transport_classes_epoll_4_1_73_Final.xml | 13 + ...y_transport_classes_epoll_4_1_75_Final.xml | 13 + ..._transport_classes_kqueue_4_1_73_Final.xml | 13 + ..._transport_classes_kqueue_4_1_75_Final.xml | 13 + ...ty_transport_native_epoll_4_1_73_Final.xml | 13 + ...ty_transport_native_epoll_4_1_75_Final.xml | 13 + ...native_epoll_linux_x86_64_4_1_60_Final.xml | 13 + ...native_epoll_linux_x86_64_4_1_75_Final.xml | 13 + ...y_transport_native_kqueue_4_1_73_Final.xml | 13 + ...y_transport_native_kqueue_4_1_75_Final.xml | 13 + ..._native_kqueue_osx_x86_64_4_1_60_Final.xml | 13 + ..._native_kqueue_osx_x86_64_4_1_75_Final.xml | 13 + ...nsport_native_unix_common_4_1_73_Final.xml | 13 + ...nsport_native_unix_common_4_1_75_Final.xml | 13 + ...opentelemetry_opentelemetry_api_1_10_1.xml | 13 + ...telemetry_opentelemetry_context_1_10_1.xml | 13 + ..._opentelemetry_exporter_logging_1_10_1.xml | 13 + ...opentelemetry_opentelemetry_sdk_1_10_1.xml | 13 + ...emetry_opentelemetry_sdk_common_1_10_1.xml | 13 + ...k_extension_autoconfigure_1_10_1_alpha.xml | 13 + ...sdk_extension_autoconfigure_spi_1_10_1.xml | 13 + ...ry_opentelemetry_sdk_logs_1_10_1_alpha.xml | 13 + ...opentelemetry_sdk_metrics_1_10_1_alpha.xml | 13 + ...lemetry_opentelemetry_sdk_trace_1_10_1.xml | 13 + ...try_opentelemetry_semconv_1_10_1_alpha.xml | 13 + .idea/libraries/Maven__io_ous_jtoml_2_0_0.xml | 13 + ...ctivation_jakarta_activation_api_1_2_2.xml | 13 + ...ctivation_jakarta_activation_api_2_1_3.xml | 13 + ...nnotation_jakarta_annotation_api_1_3_5.xml | 13 + ...nnotation_jakarta_annotation_api_2_1_1.xml | 13 + ...ta_xml_bind_jakarta_xml_bind_api_2_3_3.xml | 13 + ...ta_xml_bind_jakarta_xml_bind_api_4_0_2.xml | 13 + ...aven__net_bytebuddy_byte_buddy_1_11_19.xml | 13 + ...aven__net_bytebuddy_byte_buddy_1_11_22.xml | 13 + ...Maven__net_bytebuddy_byte_buddy_1_12_7.xml | 13 + ...Maven__net_bytebuddy_byte_buddy_1_17_6.xml | 13 + ...net_bytebuddy_byte_buddy_agent_1_11_19.xml | 13 + ...net_bytebuddy_byte_buddy_agent_1_11_22.xml | 13 + ..._net_bytebuddy_byte_buddy_agent_1_17_6.xml | 13 + .../Maven__net_jodah_failsafe_2_4_4.xml | 13 + ...ven__net_minidev_accessors_smart_2_4_7.xml | 13 + ...ven__net_minidev_accessors_smart_2_4_8.xml | 13 + ...ven__net_minidev_accessors_smart_2_5_2.xml | 13 + .../Maven__net_minidev_json_smart_2_4_7.xml | 13 + .../Maven__net_minidev_json_smart_2_4_8.xml | 13 + .../Maven__net_minidev_json_smart_2_5_2.xml | 13 + ...n__org_apache_commons_commons_exec_1_3.xml | 13 + ..._apache_logging_log4j_log4j_api_2_17_2.xml | 13 + ..._apache_logging_log4j_log4j_api_2_24_3.xml | 13 + ...he_logging_log4j_log4j_to_slf4j_2_17_2.xml | 13 + ...he_logging_log4j_log4j_to_slf4j_2_24_3.xml | 13 + ..._tomcat_embed_tomcat_embed_core_9_0_60.xml | 13 + ...he_tomcat_embed_tomcat_embed_el_9_0_60.xml | 13 + ...at_embed_tomcat_embed_websocket_9_0_60.xml | 13 + ..._org_apiguardian_apiguardian_api_1_1_2.xml | 13 + ...Maven__org_assertj_assertj_core_3_21_0.xml | 13 + ...Maven__org_assertj_assertj_core_3_27_3.xml | 13 + ...ynchttpclient_async_http_client_2_12_3.xml | 13 + ...t_async_http_client_netty_utils_2_12_3.xml | 13 + ...Maven__org_awaitility_awaitility_4_2_2.xml | 13 + ...g_checkerframework_checker_qual_3_12_0.xml | 13 + .../Maven__org_hamcrest_hamcrest_2_2.xml | 13 + .../Maven__org_hamcrest_hamcrest_3_0.xml | 13 + .../libraries/Maven__org_jdom_jdom2_2_0_6.xml | 13 + ...org_junit_jupiter_junit_jupiter_5_12_2.xml | 13 + ..._org_junit_jupiter_junit_jupiter_5_8_2.xml | 13 + ...junit_jupiter_junit_jupiter_api_5_12_2.xml | 13 + ..._junit_jupiter_junit_jupiter_api_5_8_2.xml | 13 + ...it_jupiter_junit_jupiter_engine_5_12_2.xml | 13 + ...nit_jupiter_junit_jupiter_engine_5_8_2.xml | 13 + ...it_jupiter_junit_jupiter_params_5_12_2.xml | 13 + ...nit_jupiter_junit_jupiter_params_5_8_2.xml | 13 + ...platform_junit_platform_commons_1_12_2.xml | 13 + ..._platform_junit_platform_commons_1_8_2.xml | 13 + ..._platform_junit_platform_engine_1_12_2.xml | 13 + ...t_platform_junit_platform_engine_1_8_2.xml | 13 + .../Maven__org_mockito_mockito_core_4_0_0.xml | 13 + ...Maven__org_mockito_mockito_core_5_17_0.xml | 13 + ...rg_mockito_mockito_junit_jupiter_4_0_0.xml | 13 + ...g_mockito_mockito_junit_jupiter_5_17_0.xml | 13 + .../Maven__org_objenesis_objenesis_3_2.xml | 13 + .../Maven__org_objenesis_objenesis_3_3.xml | 13 + ...Maven__org_opentest4j_opentest4j_1_2_0.xml | 13 + ...Maven__org_opentest4j_opentest4j_1_3_0.xml | 13 + .../libraries/Maven__org_ow2_asm_asm_9_1.xml | 13 + .../Maven__org_ow2_asm_asm_9_7_1.xml | 13 + ...aven__org_projectlombok_lombok_1_18_34.xml | 13 + ...reactivestreams_reactive_streams_1_0_3.xml | 13 + ...seleniumhq_selenium_selenium_api_4_1_2.xml | 13 + ..._selenium_selenium_chrome_driver_4_1_2.xml | 13 + ...elenium_selenium_chromium_driver_4_1_2.xml | 13 + ...q_selenium_selenium_devtools_v85_4_1_2.xml | 13 + ...q_selenium_selenium_devtools_v95_4_1_2.xml | 13 + ...q_selenium_selenium_devtools_v96_4_1_2.xml | 13 + ...q_selenium_selenium_devtools_v97_4_1_2.xml | 13 + ...hq_selenium_selenium_edge_driver_4_1_2.xml | 13 + ...selenium_selenium_firefox_driver_4_1_2.xml | 13 + ...nium_selenium_firefox_xpi_driver_4_1_2.xml | 13 + ...eleniumhq_selenium_selenium_http_4_1_2.xml | 13 + ...umhq_selenium_selenium_ie_driver_4_1_2.xml | 13 + ...eleniumhq_selenium_selenium_java_4_1_2.xml | 13 + ...eleniumhq_selenium_selenium_json_4_1_2.xml | 13 + ...q_selenium_selenium_opera_driver_4_1_2.xml | 13 + ..._selenium_selenium_remote_driver_4_1_2.xml | 13 + ..._selenium_selenium_safari_driver_4_1_2.xml | 13 + ...niumhq_selenium_selenium_support_4_1_2.xml | 13 + ...aven__org_skyscreamer_jsonassert_1_5_0.xml | 13 + ...aven__org_skyscreamer_jsonassert_1_5_3.xml | 13 + .../Maven__org_slf4j_jul_to_slf4j_1_7_36.xml | 13 + .../Maven__org_slf4j_jul_to_slf4j_2_0_17.xml | 13 + .../Maven__org_slf4j_slf4j_api_1_7_30.xml | 13 + .../Maven__org_slf4j_slf4j_api_1_7_36.xml | 13 + .../Maven__org_slf4j_slf4j_api_2_0_17.xml | 13 + ...springframework_boot_spring_boot_2_6_6.xml | 13 + ...springframework_boot_spring_boot_3_5_3.xml | 13 + ...k_boot_spring_boot_autoconfigure_2_6_6.xml | 13 + ...k_boot_spring_boot_autoconfigure_3_5_3.xml | 13 + ...amework_boot_spring_boot_starter_2_6_6.xml | 13 + ...amework_boot_spring_boot_starter_3_5_3.xml | 13 + ...rk_boot_spring_boot_starter_json_2_6_6.xml | 13 + ...boot_spring_boot_starter_logging_2_6_6.xml | 13 + ...boot_spring_boot_starter_logging_3_5_3.xml | 13 + ...rk_boot_spring_boot_starter_test_2_6_6.xml | 13 + ...rk_boot_spring_boot_starter_test_3_5_3.xml | 13 + ..._boot_spring_boot_starter_tomcat_2_6_6.xml | 13 + ...ork_boot_spring_boot_starter_web_2_6_6.xml | 13 + ...gframework_boot_spring_boot_test_2_6_6.xml | 13 + ...gframework_boot_spring_boot_test_3_5_3.xml | 13 + ...t_spring_boot_test_autoconfigure_2_6_6.xml | 13 + ...t_spring_boot_test_autoconfigure_3_5_3.xml | 13 + ..._org_springframework_spring_aop_5_3_18.xml | 13 + ...__org_springframework_spring_aop_6_2_8.xml | 13 + ...rg_springframework_spring_beans_5_3_18.xml | 13 + ...org_springframework_spring_beans_6_2_8.xml | 13 + ..._springframework_spring_context_5_3_18.xml | 13 + ...g_springframework_spring_context_6_2_8.xml | 13 + ...org_springframework_spring_core_5_3_18.xml | 13 + ..._org_springframework_spring_core_6_2_8.xml | 13 + ...ringframework_spring_expression_5_3_18.xml | 13 + ...pringframework_spring_expression_6_2_8.xml | 13 + ..._org_springframework_spring_jcl_5_3_18.xml | 13 + ...__org_springframework_spring_jcl_6_2_8.xml | 13 + ...org_springframework_spring_test_5_3_18.xml | 13 + ..._org_springframework_spring_test_6_2_8.xml | 13 + ..._org_springframework_spring_web_5_3_18.xml | 13 + ...g_springframework_spring_webmvc_5_3_18.xml | 13 + ...Maven__org_xmlunit_xmlunit_core_2_10_2.xml | 13 + .../Maven__org_xmlunit_xmlunit_core_2_8_4.xml | 13 + .../Maven__org_yaml_snakeyaml_1_29.xml | 13 + .../Maven__org_yaml_snakeyaml_2_4.xml | 13 + .idea/misc.xml | 18 + .idea/modules.xml | 13 + .idea/uiDesigner.xml | 124 + .idea/vcs.xml | 6 + .idea/workspace.xml | 444 ++ common/.gitattributes | 2 + common/.gitignore | 33 + common/.mvn/wrapper/maven-wrapper.properties | 19 + common/mvnw | 259 ++ common/mvnw.cmd | 149 + common/pom.xml | 33 + .../dreamcenter/rss/common/entity/RSS.java | 39 + .../rss/common/entity/RssItem.java | 47 + .../rss/common/util/DateTimeUtil.java | 22 + .../rss/common/util/RssHelper.java | 77 + .../rss/common/util/XMLBuilder.java | 58 + .../src/main/resources/application.properties | 1 + .../rss/common/CommonApplicationTests.java | 13 + pom.xml | 77 + rss-filter/.gitattributes | 2 + rss-filter/.gitignore | 33 + .../.mvn/wrapper/maven-wrapper.properties | 19 + rss-filter/mvnw | 259 ++ rss-filter/mvnw.cmd | 149 + rss-filter/pom.xml | 54 + .../rss/rssfilter/RssFilterApplication.java | 13 + .../src/main/resources/application.properties | 1 + .../rssfilter/RssFilterApplicationTests.java | 13 + rss-solver-plugin-xhs/.gitattributes | 2 + rss-solver-plugin-xhs/.gitignore | 33 + .../.mvn/wrapper/maven-wrapper.properties | 19 + rss-solver-plugin-xhs/mvnw | 259 ++ rss-solver-plugin-xhs/mvnw.cmd | 149 + rss-solver-plugin-xhs/pom.xml | 68 + .../rss/rsssolverpluginxhs/XhsSpider.java | 111 + .../src/main/resources/META-INF/rss_spider | 1 + .../src/main/resources/application.properties | 1 + .../RssSolverPluginXhsApplicationTests.java | 13 + rss-solver-protocal/.gitattributes | 2 + rss-solver-protocal/.gitignore | 33 + .../.mvn/wrapper/maven-wrapper.properties | 19 + rss-solver-protocal/README.md | 27 + rss-solver-protocal/mvnw | 259 ++ rss-solver-protocal/mvnw.cmd | 149 + rss-solver-protocal/pom.xml | 33 + .../dreamcenter/rss/common/entity/RSS.java | 39 + .../rss/common/entity/RssItem.java | 47 + .../rss/rsssolverprotocal/RegisterSpider.java | 9 + .../rss/rsssolverprotocal/SpiderTemplate.java | 48 + .../src/main/resources/application.properties | 1 + rss-solver-web-frontend/.gitignore | 24 + .../.vscode/extensions.json | 3 + rss-solver-web-frontend/README.md | 5 + rss-solver-web-frontend/index.html | 13 + rss-solver-web-frontend/package-lock.json | 2054 ++++++++++ rss-solver-web-frontend/package.json | 21 + rss-solver-web-frontend/public/vite.svg | 3579 +++++++++++++++++ rss-solver-web-frontend/src/App.vue | 10 + rss-solver-web-frontend/src/assets/vue.svg | 1 + .../src/components/HelloWorld.vue | 108 + rss-solver-web-frontend/src/main.js | 5 + rss-solver-web-frontend/src/style.css | 0 rss-solver-web-frontend/src/util/Common.js | 157 + rss-solver-web-frontend/vite.config.js | 27 + rss-solver-web/.gitattributes | 2 + rss-solver-web/.gitignore | 33 + .../.mvn/wrapper/maven-wrapper.properties | 19 + rss-solver-web/mvnw | 259 ++ rss-solver-web/mvnw.cmd | 149 + rss-solver-web/pom.xml | 62 + .../rsssolverweb/RssSolverWebApplication.java | 20 + .../rss/rsssolverweb/config/BeanRegister.java | 52 + .../config/PluginBeanRegistrar.java | 40 + .../controller/ManagePluginController.java | 95 + .../rss/rsssolverweb/entity/KVPair.java | 16 + .../rss/rsssolverweb/entity/PluginInfo.java | 34 + .../rss/rsssolverweb/entity/RetResult.java | 32 + .../rss/rsssolverweb/enums/BrowserEnum.java | 23 + .../exception/RssRuntimeException.java | 8 + .../properties/SystemProperties.java | 26 + .../rss/rsssolverweb/util/PluginLoader.java | 88 + .../rss/rsssolverweb/util/ScheduleHelper.java | 59 + .../rss/rsssolverweb/util/SpiderHelper.java | 171 + .../util/SpiderHelperFactory.java | 70 + .../src/main/resources/application.properties | 5 + .../RssSolverWebApplicationTests.java | 13 + rss.iml | 21 + 287 files changed, 13219 insertions(+) create mode 100644 .gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/encodings.xml create mode 100644 .idea/jarRepositories.xml create mode 100644 .idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_11.xml create mode 100644 .idea/libraries/Maven__ch_qos_logback_logback_classic_1_5_18.xml create mode 100644 .idea/libraries/Maven__ch_qos_logback_logback_core_1_2_11.xml create mode 100644 .idea/libraries/Maven__ch_qos_logback_logback_core_1_5_18.xml create mode 100644 .idea/libraries/Maven__com_beust_jcommander_1_82.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_2.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_13_2.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_13_2_2.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_2.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_2.xml create mode 100644 .idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_2.xml create mode 100644 .idea/libraries/Maven__com_google_auto_auto_common_1_2.xml create mode 100644 .idea/libraries/Maven__com_google_auto_service_auto_service_1_0_1.xml create mode 100644 .idea/libraries/Maven__com_google_auto_service_auto_service_annotations_1_0_1.xml create mode 100644 .idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml create mode 100644 .idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_7_1.xml create mode 100644 .idea/libraries/Maven__com_google_guava_failureaccess_1_0_1.xml create mode 100644 .idea/libraries/Maven__com_google_guava_guava_31_0_1_jre.xml create mode 100644 .idea/libraries/Maven__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml create mode 100644 .idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_3.xml create mode 100644 .idea/libraries/Maven__com_jayway_jsonpath_json_path_2_6_0.xml create mode 100644 .idea/libraries/Maven__com_jayway_jsonpath_json_path_2_9_0.xml create mode 100644 .idea/libraries/Maven__com_sun_activation_jakarta_activation_1_2_2.xml create mode 100644 .idea/libraries/Maven__com_typesafe_netty_netty_reactive_streams_2_0_4.xml create mode 100644 .idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml create mode 100644 .idea/libraries/Maven__io_micrometer_micrometer_commons_1_15_1.xml create mode 100644 .idea/libraries/Maven__io_micrometer_micrometer_observation_1_15_1.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_buffer_4_1_73_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_buffer_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_4_1_73_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_http_4_1_73_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_http_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_socks_4_1_60_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_codec_socks_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_common_4_1_73_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_common_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_handler_4_1_73_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_handler_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_60_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_resolver_4_1_73_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_resolver_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_tcnative_classes_2_0_46_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_4_1_73_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_73_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_73_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_epoll_4_1_73_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_epoll_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_60_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_kqueue_4_1_73_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_kqueue_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_60_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_73_Final.xml create mode 100644 .idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_75_Final.xml create mode 100644 .idea/libraries/Maven__io_opentelemetry_opentelemetry_api_1_10_1.xml create mode 100644 .idea/libraries/Maven__io_opentelemetry_opentelemetry_context_1_10_1.xml create mode 100644 .idea/libraries/Maven__io_opentelemetry_opentelemetry_exporter_logging_1_10_1.xml create mode 100644 .idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_1_10_1.xml create mode 100644 .idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_common_1_10_1.xml create mode 100644 .idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_extension_autoconfigure_1_10_1_alpha.xml create mode 100644 .idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_extension_autoconfigure_spi_1_10_1.xml create mode 100644 .idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_logs_1_10_1_alpha.xml create mode 100644 .idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_metrics_1_10_1_alpha.xml create mode 100644 .idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_trace_1_10_1.xml create mode 100644 .idea/libraries/Maven__io_opentelemetry_opentelemetry_semconv_1_10_1_alpha.xml create mode 100644 .idea/libraries/Maven__io_ous_jtoml_2_0_0.xml create mode 100644 .idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml create mode 100644 .idea/libraries/Maven__jakarta_activation_jakarta_activation_api_2_1_3.xml create mode 100644 .idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml create mode 100644 .idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_2_1_1.xml create mode 100644 .idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml create mode 100644 .idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_4_0_2.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_1_11_19.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_1_11_22.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_1_12_7.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_1_17_6.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_11_19.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_11_22.xml create mode 100644 .idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_17_6.xml create mode 100644 .idea/libraries/Maven__net_jodah_failsafe_2_4_4.xml create mode 100644 .idea/libraries/Maven__net_minidev_accessors_smart_2_4_7.xml create mode 100644 .idea/libraries/Maven__net_minidev_accessors_smart_2_4_8.xml create mode 100644 .idea/libraries/Maven__net_minidev_accessors_smart_2_5_2.xml create mode 100644 .idea/libraries/Maven__net_minidev_json_smart_2_4_7.xml create mode 100644 .idea/libraries/Maven__net_minidev_json_smart_2_4_8.xml create mode 100644 .idea/libraries/Maven__net_minidev_json_smart_2_5_2.xml create mode 100644 .idea/libraries/Maven__org_apache_commons_commons_exec_1_3.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_17_2.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_24_3.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_2.xml create mode 100644 .idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_24_3.xml create mode 100644 .idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_60.xml create mode 100644 .idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_60.xml create mode 100644 .idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_60.xml create mode 100644 .idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_2.xml create mode 100644 .idea/libraries/Maven__org_assertj_assertj_core_3_21_0.xml create mode 100644 .idea/libraries/Maven__org_assertj_assertj_core_3_27_3.xml create mode 100644 .idea/libraries/Maven__org_asynchttpclient_async_http_client_2_12_3.xml create mode 100644 .idea/libraries/Maven__org_asynchttpclient_async_http_client_netty_utils_2_12_3.xml create mode 100644 .idea/libraries/Maven__org_awaitility_awaitility_4_2_2.xml create mode 100644 .idea/libraries/Maven__org_checkerframework_checker_qual_3_12_0.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_2_2.xml create mode 100644 .idea/libraries/Maven__org_hamcrest_hamcrest_3_0.xml create mode 100644 .idea/libraries/Maven__org_jdom_jdom2_2_0_6.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_12_2.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_8_2.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_12_2.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_8_2.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_12_2.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_8_2.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_12_2.xml create mode 100644 .idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_8_2.xml create mode 100644 .idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_12_2.xml create mode 100644 .idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_8_2.xml create mode 100644 .idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_12_2.xml create mode 100644 .idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_8_2.xml create mode 100644 .idea/libraries/Maven__org_mockito_mockito_core_4_0_0.xml create mode 100644 .idea/libraries/Maven__org_mockito_mockito_core_5_17_0.xml create mode 100644 .idea/libraries/Maven__org_mockito_mockito_junit_jupiter_4_0_0.xml create mode 100644 .idea/libraries/Maven__org_mockito_mockito_junit_jupiter_5_17_0.xml create mode 100644 .idea/libraries/Maven__org_objenesis_objenesis_3_2.xml create mode 100644 .idea/libraries/Maven__org_objenesis_objenesis_3_3.xml create mode 100644 .idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml create mode 100644 .idea/libraries/Maven__org_opentest4j_opentest4j_1_3_0.xml create mode 100644 .idea/libraries/Maven__org_ow2_asm_asm_9_1.xml create mode 100644 .idea/libraries/Maven__org_ow2_asm_asm_9_7_1.xml create mode 100644 .idea/libraries/Maven__org_projectlombok_lombok_1_18_34.xml create mode 100644 .idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_3.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_api_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_chrome_driver_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_chromium_driver_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v85_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v95_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v96_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v97_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_edge_driver_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_firefox_driver_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_firefox_xpi_driver_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_http_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_ie_driver_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_java_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_json_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_opera_driver_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_remote_driver_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_safari_driver_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_seleniumhq_selenium_selenium_support_4_1_2.xml create mode 100644 .idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml create mode 100644 .idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_3.xml create mode 100644 .idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_36.xml create mode 100644 .idea/libraries/Maven__org_slf4j_jul_to_slf4j_2_0_17.xml create mode 100644 .idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml create mode 100644 .idea/libraries/Maven__org_slf4j_slf4j_api_1_7_36.xml create mode 100644 .idea/libraries/Maven__org_slf4j_slf4j_api_2_0_17.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_2_6_6.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_3_5_3.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_6_6.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_3_5_3.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_6_6.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_3_5_3.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_6_6.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_6_6.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_3_5_3.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_6_6.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_3_5_3.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_6_6.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_6_6.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_6_6.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_test_3_5_3.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_6_6.xml create mode 100644 .idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_3_5_3.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_aop_5_3_18.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_aop_6_2_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_beans_5_3_18.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_beans_6_2_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_context_5_3_18.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_context_6_2_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_core_5_3_18.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_core_6_2_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_expression_5_3_18.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_expression_6_2_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_jcl_5_3_18.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_jcl_6_2_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_test_5_3_18.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_test_6_2_8.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_web_5_3_18.xml create mode 100644 .idea/libraries/Maven__org_springframework_spring_webmvc_5_3_18.xml create mode 100644 .idea/libraries/Maven__org_xmlunit_xmlunit_core_2_10_2.xml create mode 100644 .idea/libraries/Maven__org_xmlunit_xmlunit_core_2_8_4.xml create mode 100644 .idea/libraries/Maven__org_yaml_snakeyaml_1_29.xml create mode 100644 .idea/libraries/Maven__org_yaml_snakeyaml_2_4.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/uiDesigner.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/workspace.xml create mode 100644 common/.gitattributes create mode 100644 common/.gitignore create mode 100644 common/.mvn/wrapper/maven-wrapper.properties create mode 100644 common/mvnw create mode 100644 common/mvnw.cmd create mode 100644 common/pom.xml create mode 100644 common/src/main/java/top/dreamcenter/rss/common/entity/RSS.java create mode 100644 common/src/main/java/top/dreamcenter/rss/common/entity/RssItem.java create mode 100644 common/src/main/java/top/dreamcenter/rss/common/util/DateTimeUtil.java create mode 100644 common/src/main/java/top/dreamcenter/rss/common/util/RssHelper.java create mode 100644 common/src/main/java/top/dreamcenter/rss/common/util/XMLBuilder.java create mode 100644 common/src/main/resources/application.properties create mode 100644 common/src/test/java/top/dreamcenter/rss/common/CommonApplicationTests.java create mode 100644 pom.xml create mode 100644 rss-filter/.gitattributes create mode 100644 rss-filter/.gitignore create mode 100644 rss-filter/.mvn/wrapper/maven-wrapper.properties create mode 100644 rss-filter/mvnw create mode 100644 rss-filter/mvnw.cmd create mode 100644 rss-filter/pom.xml create mode 100644 rss-filter/src/main/java/top/dreamcenter/rss/rssfilter/RssFilterApplication.java create mode 100644 rss-filter/src/main/resources/application.properties create mode 100644 rss-filter/src/test/java/top/dreamcenter/rss/rssfilter/RssFilterApplicationTests.java create mode 100644 rss-solver-plugin-xhs/.gitattributes create mode 100644 rss-solver-plugin-xhs/.gitignore create mode 100644 rss-solver-plugin-xhs/.mvn/wrapper/maven-wrapper.properties create mode 100644 rss-solver-plugin-xhs/mvnw create mode 100644 rss-solver-plugin-xhs/mvnw.cmd create mode 100644 rss-solver-plugin-xhs/pom.xml create mode 100644 rss-solver-plugin-xhs/src/main/java/top/dreamcenter/rss/rsssolverpluginxhs/XhsSpider.java create mode 100644 rss-solver-plugin-xhs/src/main/resources/META-INF/rss_spider create mode 100644 rss-solver-plugin-xhs/src/main/resources/application.properties create mode 100644 rss-solver-plugin-xhs/src/test/java/top/dreamcenter/rss/rsssolverpluginxhs/RssSolverPluginXhsApplicationTests.java create mode 100644 rss-solver-protocal/.gitattributes create mode 100644 rss-solver-protocal/.gitignore create mode 100644 rss-solver-protocal/.mvn/wrapper/maven-wrapper.properties create mode 100644 rss-solver-protocal/README.md create mode 100644 rss-solver-protocal/mvnw create mode 100644 rss-solver-protocal/mvnw.cmd create mode 100644 rss-solver-protocal/pom.xml create mode 100644 rss-solver-protocal/src/main/java/top/dreamcenter/rss/common/entity/RSS.java create mode 100644 rss-solver-protocal/src/main/java/top/dreamcenter/rss/common/entity/RssItem.java create mode 100644 rss-solver-protocal/src/main/java/top/dreamcenter/rss/rsssolverprotocal/RegisterSpider.java create mode 100644 rss-solver-protocal/src/main/java/top/dreamcenter/rss/rsssolverprotocal/SpiderTemplate.java create mode 100644 rss-solver-protocal/src/main/resources/application.properties create mode 100644 rss-solver-web-frontend/.gitignore create mode 100644 rss-solver-web-frontend/.vscode/extensions.json create mode 100644 rss-solver-web-frontend/README.md create mode 100644 rss-solver-web-frontend/index.html create mode 100644 rss-solver-web-frontend/package-lock.json create mode 100644 rss-solver-web-frontend/package.json create mode 100644 rss-solver-web-frontend/public/vite.svg create mode 100644 rss-solver-web-frontend/src/App.vue create mode 100644 rss-solver-web-frontend/src/assets/vue.svg create mode 100644 rss-solver-web-frontend/src/components/HelloWorld.vue create mode 100644 rss-solver-web-frontend/src/main.js create mode 100644 rss-solver-web-frontend/src/style.css create mode 100644 rss-solver-web-frontend/src/util/Common.js create mode 100644 rss-solver-web-frontend/vite.config.js create mode 100644 rss-solver-web/.gitattributes create mode 100644 rss-solver-web/.gitignore create mode 100644 rss-solver-web/.mvn/wrapper/maven-wrapper.properties create mode 100644 rss-solver-web/mvnw create mode 100644 rss-solver-web/mvnw.cmd create mode 100644 rss-solver-web/pom.xml create mode 100644 rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/RssSolverWebApplication.java create mode 100644 rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/config/BeanRegister.java create mode 100644 rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/config/PluginBeanRegistrar.java create mode 100644 rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/controller/ManagePluginController.java create mode 100644 rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/entity/KVPair.java create mode 100644 rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/entity/PluginInfo.java create mode 100644 rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/entity/RetResult.java create mode 100644 rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/enums/BrowserEnum.java create mode 100644 rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/exception/RssRuntimeException.java create mode 100644 rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/properties/SystemProperties.java create mode 100644 rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/PluginLoader.java create mode 100644 rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/ScheduleHelper.java create mode 100644 rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/SpiderHelper.java create mode 100644 rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/SpiderHelperFactory.java create mode 100644 rss-solver-web/src/main/resources/application.properties create mode 100644 rss-solver-web/src/test/java/top/dreamcenter/rss/rsssolverweb/RssSolverWebApplicationTests.java create mode 100644 rss.iml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5a6df0f --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/plugins/*.jar \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..17c198d --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml new file mode 100644 index 0000000..2153d99 --- /dev/null +++ b/.idea/encodings.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml new file mode 100644 index 0000000..712ab9d --- /dev/null +++ b/.idea/jarRepositories.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_11.xml b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_11.xml new file mode 100644 index 0000000..2ae3e96 --- /dev/null +++ b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_5_18.xml b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_5_18.xml new file mode 100644 index 0000000..c2eb366 --- /dev/null +++ b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_5_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_11.xml b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_11.xml new file mode 100644 index 0000000..dc17ba7 --- /dev/null +++ b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_11.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_5_18.xml b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_5_18.xml new file mode 100644 index 0000000..7b2084b --- /dev/null +++ b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_5_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_beust_jcommander_1_82.xml b/.idea/libraries/Maven__com_beust_jcommander_1_82.xml new file mode 100644 index 0000000..2c5f2fe --- /dev/null +++ b/.idea/libraries/Maven__com_beust_jcommander_1_82.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_2.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_2.xml new file mode 100644 index 0000000..05e0e12 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_13_2.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_13_2.xml new file mode 100644 index 0000000..a1483bc --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_core_2_13_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_13_2_2.xml b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_13_2_2.xml new file mode 100644 index 0000000..faef46d --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_core_jackson_databind_2_13_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_2.xml b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_2.xml new file mode 100644 index 0000000..76c6535 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_2.xml b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_2.xml new file mode 100644 index 0000000..ec6d439 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_2.xml b/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_2.xml new file mode 100644 index 0000000..a237667 --- /dev/null +++ b/.idea/libraries/Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_auto_auto_common_1_2.xml b/.idea/libraries/Maven__com_google_auto_auto_common_1_2.xml new file mode 100644 index 0000000..0c69761 --- /dev/null +++ b/.idea/libraries/Maven__com_google_auto_auto_common_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_auto_service_auto_service_1_0_1.xml b/.idea/libraries/Maven__com_google_auto_service_auto_service_1_0_1.xml new file mode 100644 index 0000000..1c032c3 --- /dev/null +++ b/.idea/libraries/Maven__com_google_auto_service_auto_service_1_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_auto_service_auto_service_annotations_1_0_1.xml b/.idea/libraries/Maven__com_google_auto_service_auto_service_annotations_1_0_1.xml new file mode 100644 index 0000000..510b0da --- /dev/null +++ b/.idea/libraries/Maven__com_google_auto_service_auto_service_annotations_1_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml new file mode 100644 index 0000000..1008048 --- /dev/null +++ b/.idea/libraries/Maven__com_google_code_findbugs_jsr305_3_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_7_1.xml b/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_7_1.xml new file mode 100644 index 0000000..4b7c1a4 --- /dev/null +++ b/.idea/libraries/Maven__com_google_errorprone_error_prone_annotations_2_7_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_guava_failureaccess_1_0_1.xml b/.idea/libraries/Maven__com_google_guava_failureaccess_1_0_1.xml new file mode 100644 index 0000000..92c066c --- /dev/null +++ b/.idea/libraries/Maven__com_google_guava_failureaccess_1_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_guava_guava_31_0_1_jre.xml b/.idea/libraries/Maven__com_google_guava_guava_31_0_1_jre.xml new file mode 100644 index 0000000..b24a8fa --- /dev/null +++ b/.idea/libraries/Maven__com_google_guava_guava_31_0_1_jre.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml b/.idea/libraries/Maven__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml new file mode 100644 index 0000000..fb438d4 --- /dev/null +++ b/.idea/libraries/Maven__com_google_guava_listenablefuture_9999_0_empty_to_avoid_conflict_with_guava.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_3.xml b/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_3.xml new file mode 100644 index 0000000..e41b607 --- /dev/null +++ b/.idea/libraries/Maven__com_google_j2objc_j2objc_annotations_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_6_0.xml b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_6_0.xml new file mode 100644 index 0000000..95b035e --- /dev/null +++ b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_6_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_9_0.xml b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_9_0.xml new file mode 100644 index 0000000..9c08eb5 --- /dev/null +++ b/.idea/libraries/Maven__com_jayway_jsonpath_json_path_2_9_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_sun_activation_jakarta_activation_1_2_2.xml b/.idea/libraries/Maven__com_sun_activation_jakarta_activation_1_2_2.xml new file mode 100644 index 0000000..0c7675a --- /dev/null +++ b/.idea/libraries/Maven__com_sun_activation_jakarta_activation_1_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_typesafe_netty_netty_reactive_streams_2_0_4.xml b/.idea/libraries/Maven__com_typesafe_netty_netty_reactive_streams_2_0_4.xml new file mode 100644 index 0000000..a2765e5 --- /dev/null +++ b/.idea/libraries/Maven__com_typesafe_netty_netty_reactive_streams_2_0_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml b/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml new file mode 100644 index 0000000..2d85237 --- /dev/null +++ b/.idea/libraries/Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_micrometer_micrometer_commons_1_15_1.xml b/.idea/libraries/Maven__io_micrometer_micrometer_commons_1_15_1.xml new file mode 100644 index 0000000..dc8495a --- /dev/null +++ b/.idea/libraries/Maven__io_micrometer_micrometer_commons_1_15_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_micrometer_micrometer_observation_1_15_1.xml b/.idea/libraries/Maven__io_micrometer_micrometer_observation_1_15_1.xml new file mode 100644 index 0000000..4825ffa --- /dev/null +++ b/.idea/libraries/Maven__io_micrometer_micrometer_observation_1_15_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_buffer_4_1_73_Final.xml b/.idea/libraries/Maven__io_netty_netty_buffer_4_1_73_Final.xml new file mode 100644 index 0000000..76eb0c3 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_buffer_4_1_73_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_buffer_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_buffer_4_1_75_Final.xml new file mode 100644 index 0000000..ca7d548 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_buffer_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_4_1_73_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_4_1_73_Final.xml new file mode 100644 index 0000000..09fe51e --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_4_1_73_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_4_1_75_Final.xml new file mode 100644 index 0000000..d0506ae --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_73_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_73_Final.xml new file mode 100644 index 0000000..bcecff1 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_73_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_75_Final.xml new file mode 100644 index 0000000..6ee81e9 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_http_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_60_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_60_Final.xml new file mode 100644 index 0000000..af1cfed --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_60_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_75_Final.xml new file mode 100644 index 0000000..9e13f31 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_codec_socks_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_common_4_1_73_Final.xml b/.idea/libraries/Maven__io_netty_netty_common_4_1_73_Final.xml new file mode 100644 index 0000000..0a93787 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_common_4_1_73_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_common_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_common_4_1_75_Final.xml new file mode 100644 index 0000000..8415959 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_common_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_handler_4_1_73_Final.xml b/.idea/libraries/Maven__io_netty_netty_handler_4_1_73_Final.xml new file mode 100644 index 0000000..c9d29b5 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_handler_4_1_73_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_handler_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_handler_4_1_75_Final.xml new file mode 100644 index 0000000..644989e --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_handler_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_60_Final.xml b/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_60_Final.xml new file mode 100644 index 0000000..3d72c52 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_60_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_75_Final.xml new file mode 100644 index 0000000..f1e1f00 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_handler_proxy_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_4_1_73_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_4_1_73_Final.xml new file mode 100644 index 0000000..f00871c --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_resolver_4_1_73_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_resolver_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_resolver_4_1_75_Final.xml new file mode 100644 index 0000000..7921886 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_resolver_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_tcnative_classes_2_0_46_Final.xml b/.idea/libraries/Maven__io_netty_netty_tcnative_classes_2_0_46_Final.xml new file mode 100644 index 0000000..d26a372 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_tcnative_classes_2_0_46_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_4_1_73_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_4_1_73_Final.xml new file mode 100644 index 0000000..eed0c6a --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_4_1_73_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_4_1_75_Final.xml new file mode 100644 index 0000000..fbd4693 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_73_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_73_Final.xml new file mode 100644 index 0000000..3a9b6f3 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_73_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_75_Final.xml new file mode 100644 index 0000000..b7ffc60 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_classes_epoll_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_73_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_73_Final.xml new file mode 100644 index 0000000..08e8ad3 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_73_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_75_Final.xml new file mode 100644 index 0000000..259a5d1 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_classes_kqueue_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_4_1_73_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_4_1_73_Final.xml new file mode 100644 index 0000000..9910a95 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_4_1_73_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_4_1_75_Final.xml new file mode 100644 index 0000000..e7afc80 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_60_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_60_Final.xml new file mode 100644 index 0000000..eaf4098 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_60_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_75_Final.xml new file mode 100644 index 0000000..c86f86c --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_epoll_linux_x86_64_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_4_1_73_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_4_1_73_Final.xml new file mode 100644 index 0000000..1203724 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_4_1_73_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_4_1_75_Final.xml new file mode 100644 index 0000000..8e0b9a6 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_60_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_60_Final.xml new file mode 100644 index 0000000..9d6f66b --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_60_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_75_Final.xml new file mode 100644 index 0000000..078ca6a --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_kqueue_osx_x86_64_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_73_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_73_Final.xml new file mode 100644 index 0000000..6acdedf --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_73_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_75_Final.xml b/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_75_Final.xml new file mode 100644 index 0000000..0f96cf0 --- /dev/null +++ b/.idea/libraries/Maven__io_netty_netty_transport_native_unix_common_4_1_75_Final.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_opentelemetry_opentelemetry_api_1_10_1.xml b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_api_1_10_1.xml new file mode 100644 index 0000000..8fea30f --- /dev/null +++ b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_api_1_10_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_opentelemetry_opentelemetry_context_1_10_1.xml b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_context_1_10_1.xml new file mode 100644 index 0000000..15a09e4 --- /dev/null +++ b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_context_1_10_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_opentelemetry_opentelemetry_exporter_logging_1_10_1.xml b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_exporter_logging_1_10_1.xml new file mode 100644 index 0000000..a7845f6 --- /dev/null +++ b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_exporter_logging_1_10_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_1_10_1.xml b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_1_10_1.xml new file mode 100644 index 0000000..5f5c441 --- /dev/null +++ b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_1_10_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_common_1_10_1.xml b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_common_1_10_1.xml new file mode 100644 index 0000000..a3a64dd --- /dev/null +++ b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_common_1_10_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_extension_autoconfigure_1_10_1_alpha.xml b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_extension_autoconfigure_1_10_1_alpha.xml new file mode 100644 index 0000000..58fdf18 --- /dev/null +++ b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_extension_autoconfigure_1_10_1_alpha.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_extension_autoconfigure_spi_1_10_1.xml b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_extension_autoconfigure_spi_1_10_1.xml new file mode 100644 index 0000000..dd50fca --- /dev/null +++ b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_extension_autoconfigure_spi_1_10_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_logs_1_10_1_alpha.xml b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_logs_1_10_1_alpha.xml new file mode 100644 index 0000000..90986a8 --- /dev/null +++ b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_logs_1_10_1_alpha.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_metrics_1_10_1_alpha.xml b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_metrics_1_10_1_alpha.xml new file mode 100644 index 0000000..348ff82 --- /dev/null +++ b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_metrics_1_10_1_alpha.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_trace_1_10_1.xml b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_trace_1_10_1.xml new file mode 100644 index 0000000..296b010 --- /dev/null +++ b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_sdk_trace_1_10_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_opentelemetry_opentelemetry_semconv_1_10_1_alpha.xml b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_semconv_1_10_1_alpha.xml new file mode 100644 index 0000000..eddf557 --- /dev/null +++ b/.idea/libraries/Maven__io_opentelemetry_opentelemetry_semconv_1_10_1_alpha.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__io_ous_jtoml_2_0_0.xml b/.idea/libraries/Maven__io_ous_jtoml_2_0_0.xml new file mode 100644 index 0000000..a4dbdf5 --- /dev/null +++ b/.idea/libraries/Maven__io_ous_jtoml_2_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml b/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml new file mode 100644 index 0000000..6a6c04e --- /dev/null +++ b/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_2_1_3.xml b/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_2_1_3.xml new file mode 100644 index 0000000..b8a5a22 --- /dev/null +++ b/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_2_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml b/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml new file mode 100644 index 0000000..62049a2 --- /dev/null +++ b/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_2_1_1.xml b/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_2_1_1.xml new file mode 100644 index 0000000..fc2b6ac --- /dev/null +++ b/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_2_1_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml b/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml new file mode 100644 index 0000000..0b23fab --- /dev/null +++ b/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_4_0_2.xml b/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_4_0_2.xml new file mode 100644 index 0000000..04118e8 --- /dev/null +++ b/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_4_0_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_11_19.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_11_19.xml new file mode 100644 index 0000000..0506616 --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_11_19.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_11_22.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_11_22.xml new file mode 100644 index 0000000..d50d8fc --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_11_22.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_12_7.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_12_7.xml new file mode 100644 index 0000000..e4ad176 --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_12_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_17_6.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_17_6.xml new file mode 100644 index 0000000..90db0ad --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_1_17_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_11_19.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_11_19.xml new file mode 100644 index 0000000..d17f52a --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_11_19.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_11_22.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_11_22.xml new file mode 100644 index 0000000..8838825 --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_11_22.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_17_6.xml b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_17_6.xml new file mode 100644 index 0000000..edb101a --- /dev/null +++ b/.idea/libraries/Maven__net_bytebuddy_byte_buddy_agent_1_17_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_jodah_failsafe_2_4_4.xml b/.idea/libraries/Maven__net_jodah_failsafe_2_4_4.xml new file mode 100644 index 0000000..837020e --- /dev/null +++ b/.idea/libraries/Maven__net_jodah_failsafe_2_4_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_minidev_accessors_smart_2_4_7.xml b/.idea/libraries/Maven__net_minidev_accessors_smart_2_4_7.xml new file mode 100644 index 0000000..311688a --- /dev/null +++ b/.idea/libraries/Maven__net_minidev_accessors_smart_2_4_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_minidev_accessors_smart_2_4_8.xml b/.idea/libraries/Maven__net_minidev_accessors_smart_2_4_8.xml new file mode 100644 index 0000000..5da89f8 --- /dev/null +++ b/.idea/libraries/Maven__net_minidev_accessors_smart_2_4_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_minidev_accessors_smart_2_5_2.xml b/.idea/libraries/Maven__net_minidev_accessors_smart_2_5_2.xml new file mode 100644 index 0000000..26edcb9 --- /dev/null +++ b/.idea/libraries/Maven__net_minidev_accessors_smart_2_5_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_minidev_json_smart_2_4_7.xml b/.idea/libraries/Maven__net_minidev_json_smart_2_4_7.xml new file mode 100644 index 0000000..21e5ec5 --- /dev/null +++ b/.idea/libraries/Maven__net_minidev_json_smart_2_4_7.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_minidev_json_smart_2_4_8.xml b/.idea/libraries/Maven__net_minidev_json_smart_2_4_8.xml new file mode 100644 index 0000000..5318895 --- /dev/null +++ b/.idea/libraries/Maven__net_minidev_json_smart_2_4_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__net_minidev_json_smart_2_5_2.xml b/.idea/libraries/Maven__net_minidev_json_smart_2_5_2.xml new file mode 100644 index 0000000..4e3f8aa --- /dev/null +++ b/.idea/libraries/Maven__net_minidev_json_smart_2_5_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_commons_commons_exec_1_3.xml b/.idea/libraries/Maven__org_apache_commons_commons_exec_1_3.xml new file mode 100644 index 0000000..3a28200 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_commons_commons_exec_1_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_17_2.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_17_2.xml new file mode 100644 index 0000000..c96e3cf --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_17_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_24_3.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_24_3.xml new file mode 100644 index 0000000..eacaf3d --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_api_2_24_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_2.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_2.xml new file mode 100644 index 0000000..2da355e --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_24_3.xml b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_24_3.xml new file mode 100644 index 0000000..72f301c --- /dev/null +++ b/.idea/libraries/Maven__org_apache_logging_log4j_log4j_to_slf4j_2_24_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_60.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_60.xml new file mode 100644 index 0000000..38413bd --- /dev/null +++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_60.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_60.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_60.xml new file mode 100644 index 0000000..6e85383 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_60.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_60.xml b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_60.xml new file mode 100644 index 0000000..d611049 --- /dev/null +++ b/.idea/libraries/Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_60.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_2.xml b/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_2.xml new file mode 100644 index 0000000..618b6c3 --- /dev/null +++ b/.idea/libraries/Maven__org_apiguardian_apiguardian_api_1_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_assertj_assertj_core_3_21_0.xml b/.idea/libraries/Maven__org_assertj_assertj_core_3_21_0.xml new file mode 100644 index 0000000..2e59b44 --- /dev/null +++ b/.idea/libraries/Maven__org_assertj_assertj_core_3_21_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_assertj_assertj_core_3_27_3.xml b/.idea/libraries/Maven__org_assertj_assertj_core_3_27_3.xml new file mode 100644 index 0000000..0e8cade --- /dev/null +++ b/.idea/libraries/Maven__org_assertj_assertj_core_3_27_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_asynchttpclient_async_http_client_2_12_3.xml b/.idea/libraries/Maven__org_asynchttpclient_async_http_client_2_12_3.xml new file mode 100644 index 0000000..3831612 --- /dev/null +++ b/.idea/libraries/Maven__org_asynchttpclient_async_http_client_2_12_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_asynchttpclient_async_http_client_netty_utils_2_12_3.xml b/.idea/libraries/Maven__org_asynchttpclient_async_http_client_netty_utils_2_12_3.xml new file mode 100644 index 0000000..ce5c1c6 --- /dev/null +++ b/.idea/libraries/Maven__org_asynchttpclient_async_http_client_netty_utils_2_12_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_awaitility_awaitility_4_2_2.xml b/.idea/libraries/Maven__org_awaitility_awaitility_4_2_2.xml new file mode 100644 index 0000000..95be82a --- /dev/null +++ b/.idea/libraries/Maven__org_awaitility_awaitility_4_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_checkerframework_checker_qual_3_12_0.xml b/.idea/libraries/Maven__org_checkerframework_checker_qual_3_12_0.xml new file mode 100644 index 0000000..a051fe1 --- /dev/null +++ b/.idea/libraries/Maven__org_checkerframework_checker_qual_3_12_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_2_2.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_2_2.xml new file mode 100644 index 0000000..da4e333 --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_2_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_3_0.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_3_0.xml new file mode 100644 index 0000000..3a195e7 --- /dev/null +++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_jdom_jdom2_2_0_6.xml b/.idea/libraries/Maven__org_jdom_jdom2_2_0_6.xml new file mode 100644 index 0000000..6dea5c3 --- /dev/null +++ b/.idea/libraries/Maven__org_jdom_jdom2_2_0_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_12_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_12_2.xml new file mode 100644 index 0000000..ecbc7fa --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_12_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_8_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_8_2.xml new file mode 100644 index 0000000..87e0778 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_5_8_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_12_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_12_2.xml new file mode 100644 index 0000000..19b026c --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_12_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_8_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_8_2.xml new file mode 100644 index 0000000..9251430 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_api_5_8_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_12_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_12_2.xml new file mode 100644 index 0000000..901630a --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_12_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_8_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_8_2.xml new file mode 100644 index 0000000..e0b9660 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_engine_5_8_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_12_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_12_2.xml new file mode 100644 index 0000000..1e0ddcc --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_12_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_8_2.xml b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_8_2.xml new file mode 100644 index 0000000..b62fd85 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_jupiter_junit_jupiter_params_5_8_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_12_2.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_12_2.xml new file mode 100644 index 0000000..01f3d10 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_12_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_8_2.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_8_2.xml new file mode 100644 index 0000000..af5d638 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_commons_1_8_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_12_2.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_12_2.xml new file mode 100644 index 0000000..bc7221c --- /dev/null +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_12_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_8_2.xml b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_8_2.xml new file mode 100644 index 0000000..5df1f03 --- /dev/null +++ b/.idea/libraries/Maven__org_junit_platform_junit_platform_engine_1_8_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mockito_mockito_core_4_0_0.xml b/.idea/libraries/Maven__org_mockito_mockito_core_4_0_0.xml new file mode 100644 index 0000000..e8ce512 --- /dev/null +++ b/.idea/libraries/Maven__org_mockito_mockito_core_4_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mockito_mockito_core_5_17_0.xml b/.idea/libraries/Maven__org_mockito_mockito_core_5_17_0.xml new file mode 100644 index 0000000..11041c5 --- /dev/null +++ b/.idea/libraries/Maven__org_mockito_mockito_core_5_17_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_4_0_0.xml b/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_4_0_0.xml new file mode 100644 index 0000000..b56fcde --- /dev/null +++ b/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_4_0_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_5_17_0.xml b/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_5_17_0.xml new file mode 100644 index 0000000..c802e0e --- /dev/null +++ b/.idea/libraries/Maven__org_mockito_mockito_junit_jupiter_5_17_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_objenesis_objenesis_3_2.xml b/.idea/libraries/Maven__org_objenesis_objenesis_3_2.xml new file mode 100644 index 0000000..90152d7 --- /dev/null +++ b/.idea/libraries/Maven__org_objenesis_objenesis_3_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_objenesis_objenesis_3_3.xml b/.idea/libraries/Maven__org_objenesis_objenesis_3_3.xml new file mode 100644 index 0000000..ff8763b --- /dev/null +++ b/.idea/libraries/Maven__org_objenesis_objenesis_3_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml new file mode 100644 index 0000000..a396e89 --- /dev/null +++ b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_2_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_opentest4j_opentest4j_1_3_0.xml b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_3_0.xml new file mode 100644 index 0000000..6479d5d --- /dev/null +++ b/.idea/libraries/Maven__org_opentest4j_opentest4j_1_3_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_ow2_asm_asm_9_1.xml b/.idea/libraries/Maven__org_ow2_asm_asm_9_1.xml new file mode 100644 index 0000000..b62f6e6 --- /dev/null +++ b/.idea/libraries/Maven__org_ow2_asm_asm_9_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_ow2_asm_asm_9_7_1.xml b/.idea/libraries/Maven__org_ow2_asm_asm_9_7_1.xml new file mode 100644 index 0000000..1f3e4c6 --- /dev/null +++ b/.idea/libraries/Maven__org_ow2_asm_asm_9_7_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_projectlombok_lombok_1_18_34.xml b/.idea/libraries/Maven__org_projectlombok_lombok_1_18_34.xml new file mode 100644 index 0000000..e418c1c --- /dev/null +++ b/.idea/libraries/Maven__org_projectlombok_lombok_1_18_34.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_3.xml b/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_3.xml new file mode 100644 index 0000000..0c39f0a --- /dev/null +++ b/.idea/libraries/Maven__org_reactivestreams_reactive_streams_1_0_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_api_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_api_4_1_2.xml new file mode 100644 index 0000000..cf38524 --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_api_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_chrome_driver_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_chrome_driver_4_1_2.xml new file mode 100644 index 0000000..401f561 --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_chrome_driver_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_chromium_driver_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_chromium_driver_4_1_2.xml new file mode 100644 index 0000000..b495a2a --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_chromium_driver_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v85_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v85_4_1_2.xml new file mode 100644 index 0000000..cae0629 --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v85_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v95_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v95_4_1_2.xml new file mode 100644 index 0000000..dc7b8c4 --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v95_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v96_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v96_4_1_2.xml new file mode 100644 index 0000000..6382678 --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v96_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v97_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v97_4_1_2.xml new file mode 100644 index 0000000..8b820a7 --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_devtools_v97_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_edge_driver_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_edge_driver_4_1_2.xml new file mode 100644 index 0000000..e5cf225 --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_edge_driver_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_firefox_driver_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_firefox_driver_4_1_2.xml new file mode 100644 index 0000000..5f8d9a3 --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_firefox_driver_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_firefox_xpi_driver_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_firefox_xpi_driver_4_1_2.xml new file mode 100644 index 0000000..4b667fd --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_firefox_xpi_driver_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_http_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_http_4_1_2.xml new file mode 100644 index 0000000..8f3b3ab --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_http_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_ie_driver_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_ie_driver_4_1_2.xml new file mode 100644 index 0000000..4258546 --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_ie_driver_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_java_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_java_4_1_2.xml new file mode 100644 index 0000000..2692844 --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_java_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_json_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_json_4_1_2.xml new file mode 100644 index 0000000..d1c4ab5 --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_json_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_opera_driver_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_opera_driver_4_1_2.xml new file mode 100644 index 0000000..5d962d6 --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_opera_driver_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_remote_driver_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_remote_driver_4_1_2.xml new file mode 100644 index 0000000..067dfa8 --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_remote_driver_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_safari_driver_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_safari_driver_4_1_2.xml new file mode 100644 index 0000000..1646e8e --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_safari_driver_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_support_4_1_2.xml b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_support_4_1_2.xml new file mode 100644 index 0000000..1d3454d --- /dev/null +++ b/.idea/libraries/Maven__org_seleniumhq_selenium_selenium_support_4_1_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml new file mode 100644 index 0000000..b3b4c3c --- /dev/null +++ b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_0.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_3.xml b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_3.xml new file mode 100644 index 0000000..4479021 --- /dev/null +++ b/.idea/libraries/Maven__org_skyscreamer_jsonassert_1_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_36.xml b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_36.xml new file mode 100644 index 0000000..6cf9deb --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_1_7_36.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_2_0_17.xml b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_2_0_17.xml new file mode 100644 index 0000000..6a9f1ce --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_jul_to_slf4j_2_0_17.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml new file mode 100644 index 0000000..48877fe --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_30.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_36.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_36.xml new file mode 100644 index 0000000..8823b21 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_36.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_2_0_17.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_2_0_17.xml new file mode 100644 index 0000000..2b4b374 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_2_0_17.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_6_6.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_6_6.xml new file mode 100644 index 0000000..3ed5c6d --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_2_6_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_3_5_3.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_3_5_3.xml new file mode 100644 index 0000000..7aa4b40 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_3_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_6_6.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_6_6.xml new file mode 100644 index 0000000..a0944b1 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_2_6_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_3_5_3.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_3_5_3.xml new file mode 100644 index 0000000..4a37357 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_autoconfigure_3_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_6_6.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_6_6.xml new file mode 100644 index 0000000..1b61ecb --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_2_6_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_3_5_3.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_3_5_3.xml new file mode 100644 index 0000000..a88653e --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_3_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_6_6.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_6_6.xml new file mode 100644 index 0000000..062bf48 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_json_2_6_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_6_6.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_6_6.xml new file mode 100644 index 0000000..329f852 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_2_6_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_3_5_3.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_3_5_3.xml new file mode 100644 index 0000000..28ac151 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_logging_3_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_6_6.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_6_6.xml new file mode 100644 index 0000000..eeaa132 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_2_6_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_3_5_3.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_3_5_3.xml new file mode 100644 index 0000000..0b365f1 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_test_3_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_6_6.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_6_6.xml new file mode 100644 index 0000000..27ef5e8 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_tomcat_2_6_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_6_6.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_6_6.xml new file mode 100644 index 0000000..a222e92 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_web_2_6_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_6_6.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_6_6.xml new file mode 100644 index 0000000..ca8e2a2 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_2_6_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_3_5_3.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_3_5_3.xml new file mode 100644 index 0000000..eaf6f9c --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_3_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_6_6.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_6_6.xml new file mode 100644 index 0000000..64cb318 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_6_6.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_3_5_3.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_3_5_3.xml new file mode 100644 index 0000000..d4a9e71 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_test_autoconfigure_3_5_3.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_aop_5_3_18.xml b/.idea/libraries/Maven__org_springframework_spring_aop_5_3_18.xml new file mode 100644 index 0000000..6775383 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_aop_5_3_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_aop_6_2_8.xml b/.idea/libraries/Maven__org_springframework_spring_aop_6_2_8.xml new file mode 100644 index 0000000..b82aea2 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_aop_6_2_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_beans_5_3_18.xml b/.idea/libraries/Maven__org_springframework_spring_beans_5_3_18.xml new file mode 100644 index 0000000..d2791c5 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_beans_5_3_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_beans_6_2_8.xml b/.idea/libraries/Maven__org_springframework_spring_beans_6_2_8.xml new file mode 100644 index 0000000..b01db3f --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_beans_6_2_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_5_3_18.xml b/.idea/libraries/Maven__org_springframework_spring_context_5_3_18.xml new file mode 100644 index 0000000..35e69c1 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_context_5_3_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_context_6_2_8.xml b/.idea/libraries/Maven__org_springframework_spring_context_6_2_8.xml new file mode 100644 index 0000000..f12cca9 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_context_6_2_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_core_5_3_18.xml b/.idea/libraries/Maven__org_springframework_spring_core_5_3_18.xml new file mode 100644 index 0000000..63f6e6c --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_core_5_3_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_core_6_2_8.xml b/.idea/libraries/Maven__org_springframework_spring_core_6_2_8.xml new file mode 100644 index 0000000..d579f5e --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_core_6_2_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_expression_5_3_18.xml b/.idea/libraries/Maven__org_springframework_spring_expression_5_3_18.xml new file mode 100644 index 0000000..86584fd --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_expression_5_3_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_expression_6_2_8.xml b/.idea/libraries/Maven__org_springframework_spring_expression_6_2_8.xml new file mode 100644 index 0000000..ee47bf8 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_expression_6_2_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_jcl_5_3_18.xml b/.idea/libraries/Maven__org_springframework_spring_jcl_5_3_18.xml new file mode 100644 index 0000000..4d684f1 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_jcl_5_3_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_jcl_6_2_8.xml b/.idea/libraries/Maven__org_springframework_spring_jcl_6_2_8.xml new file mode 100644 index 0000000..399a8d1 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_jcl_6_2_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_test_5_3_18.xml b/.idea/libraries/Maven__org_springframework_spring_test_5_3_18.xml new file mode 100644 index 0000000..8ea57b2 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_test_5_3_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_test_6_2_8.xml b/.idea/libraries/Maven__org_springframework_spring_test_6_2_8.xml new file mode 100644 index 0000000..7650eb1 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_test_6_2_8.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_web_5_3_18.xml b/.idea/libraries/Maven__org_springframework_spring_web_5_3_18.xml new file mode 100644 index 0000000..d45cfda --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_web_5_3_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_spring_webmvc_5_3_18.xml b/.idea/libraries/Maven__org_springframework_spring_webmvc_5_3_18.xml new file mode 100644 index 0000000..77dbc37 --- /dev/null +++ b/.idea/libraries/Maven__org_springframework_spring_webmvc_5_3_18.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_10_2.xml b/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_10_2.xml new file mode 100644 index 0000000..4494b9c --- /dev/null +++ b/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_10_2.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_8_4.xml b/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_8_4.xml new file mode 100644 index 0000000..0895a4f --- /dev/null +++ b/.idea/libraries/Maven__org_xmlunit_xmlunit_core_2_8_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_1_29.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_1_29.xml new file mode 100644 index 0000000..8cddb00 --- /dev/null +++ b/.idea/libraries/Maven__org_yaml_snakeyaml_1_29.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_yaml_snakeyaml_2_4.xml b/.idea/libraries/Maven__org_yaml_snakeyaml_2_4.xml new file mode 100644 index 0000000..3251537 --- /dev/null +++ b/.idea/libraries/Maven__org_yaml_snakeyaml_2_4.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..32beb28 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..7312ed6 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml new file mode 100644 index 0000000..e96534f --- /dev/null +++ b/.idea/uiDesigner.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..e5fd732 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,444 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1752486740788 + + + + + + + + + + file://$PROJECT_DIR$/common/src/main/java/top/dreamcenter/rss/common/util/RssHelper.java + 32 + + + + + \ No newline at end of file diff --git a/common/.gitattributes b/common/.gitattributes new file mode 100644 index 0000000..3b41682 --- /dev/null +++ b/common/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/common/.gitignore b/common/.gitignore new file mode 100644 index 0000000..667aaef --- /dev/null +++ b/common/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/common/.mvn/wrapper/maven-wrapper.properties b/common/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..2f94e61 --- /dev/null +++ b/common/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.10/apache-maven-3.9.10-bin.zip diff --git a/common/mvnw b/common/mvnw new file mode 100644 index 0000000..19529dd --- /dev/null +++ b/common/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/common/mvnw.cmd b/common/mvnw.cmd new file mode 100644 index 0000000..249bdf3 --- /dev/null +++ b/common/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/common/pom.xml b/common/pom.xml new file mode 100644 index 0000000..edb974a --- /dev/null +++ b/common/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + + rss + top.dreamcenter + ${revision} + + + top.dreamcenter.rss + common + + common + common definition + + + + org.projectlombok + lombok + + + org.jdom + jdom2 + + + org.springframework.boot + spring-boot-starter-test + + + + + diff --git a/common/src/main/java/top/dreamcenter/rss/common/entity/RSS.java b/common/src/main/java/top/dreamcenter/rss/common/entity/RSS.java new file mode 100644 index 0000000..d3a06c4 --- /dev/null +++ b/common/src/main/java/top/dreamcenter/rss/common/entity/RSS.java @@ -0,0 +1,39 @@ +package top.dreamcenter.rss.common.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.util.ArrayList; +import java.util.List; + +/** + * RSS channel + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class RSS { + + /** + * 频道标题 + */ + private String title; + + /** + * 频道主链接 + */ + private String link; + + /** + * 频道描述 + */ + private String description; + + /** + * 频道文章列表 + */ + private List item = new ArrayList<>(); +} diff --git a/common/src/main/java/top/dreamcenter/rss/common/entity/RssItem.java b/common/src/main/java/top/dreamcenter/rss/common/entity/RssItem.java new file mode 100644 index 0000000..cf5f962 --- /dev/null +++ b/common/src/main/java/top/dreamcenter/rss/common/entity/RssItem.java @@ -0,0 +1,47 @@ +package top.dreamcenter.rss.common.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +/** + * RSS频道文章 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class RssItem { + + /** + * 文章标题 + */ + private String title; + + /** + * 文章摘要(内容) + * + * 建议如果服务资源足够,直接存储内容,方便阅读器阅读 + */ + private String description; + + /** + * 原文链接 + */ + private String link; + + /** + * guid 唯一键,通常与link相同。 + */ + private String guid; + + /** + * 发布时间 + */ + private String pubDate; + +} + + + diff --git a/common/src/main/java/top/dreamcenter/rss/common/util/DateTimeUtil.java b/common/src/main/java/top/dreamcenter/rss/common/util/DateTimeUtil.java new file mode 100644 index 0000000..ed39f89 --- /dev/null +++ b/common/src/main/java/top/dreamcenter/rss/common/util/DateTimeUtil.java @@ -0,0 +1,22 @@ +package top.dreamcenter.rss.common.util; + +import java.text.SimpleDateFormat; +import java.util.Locale; + +/** + * 时间日期工具 + */ +public class DateTimeUtil { + + + /** + * 将指定日期时间转化成rss规范格式 + * @return format EEE, dd MMM yyyy HH:mm:ss z 格式结果,输出描述为英文 + */ + public static SimpleDateFormat getRssFormat() { + return new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH); + } + + + +} diff --git a/common/src/main/java/top/dreamcenter/rss/common/util/RssHelper.java b/common/src/main/java/top/dreamcenter/rss/common/util/RssHelper.java new file mode 100644 index 0000000..b1faa87 --- /dev/null +++ b/common/src/main/java/top/dreamcenter/rss/common/util/RssHelper.java @@ -0,0 +1,77 @@ +package top.dreamcenter.rss.common.util; + +import org.jdom2.Element; +import top.dreamcenter.rss.common.entity.RSS; +import top.dreamcenter.rss.common.entity.RssItem; + +import java.text.SimpleDateFormat; +import java.util.Calendar; + +public class RssHelper extends XMLBuilder{ + + /** + * rss原始对象 + */ + private final RSS rss; + + /** + * items根节点(channel) + */ + private Element cycleRoot; + + /** + * rss 时间格式 + */ + private final SimpleDateFormat sdf = DateTimeUtil.getRssFormat(); + + + /** + * RSS 助手 + * @param rss rss原始对象 + */ + public RssHelper(RSS rss) { + this.rss = rss; + setChannel(); + addItems(); + } + + /** + * 构建rss文档 + */ + @Override + protected void initRoot() { + root = new Element("rss"); + root.setAttribute("version", "2.0"); + } + + /** + * 设置channel样式 + */ + private void setChannel() { + cycleRoot = new Element("channel"); + cycleRoot.addContent(new Element("title").setText(rss.getTitle())); + cycleRoot.addContent(new Element("link").setText(rss.getLink())); + cycleRoot.addContent(new Element("description").setText(rss.getDescription())); + cycleRoot.addContent(new Element("language").setText("zh-cn")); + cycleRoot.addContent(new Element("lastBuildDate").setText(sdf.format(Calendar.getInstance().getTime()))); + root.addContent(cycleRoot); + } + + + /** + * 添加item + */ + private void addItems() { + for (RssItem rssItem : rss.getItem()) { + Element item = new Element("item"); + + item.addContent(new Element("title").setText(rssItem.getTitle())); + item.addContent(new Element("description").setText(rssItem.getDescription())); + item.addContent(new Element("link").setText(rssItem.getLink())); + item.addContent(new Element("guid").setText(rssItem.getGuid())); + item.addContent(new Element("pubDate").setText(rssItem.getPubDate())); + + cycleRoot.addContent(item); + } + } +} diff --git a/common/src/main/java/top/dreamcenter/rss/common/util/XMLBuilder.java b/common/src/main/java/top/dreamcenter/rss/common/util/XMLBuilder.java new file mode 100644 index 0000000..f7f24ba --- /dev/null +++ b/common/src/main/java/top/dreamcenter/rss/common/util/XMLBuilder.java @@ -0,0 +1,58 @@ +package top.dreamcenter.rss.common.util; + +import org.jdom2.Document; +import org.jdom2.Element; +import org.jdom2.output.Format; +import org.jdom2.output.XMLOutputter; + +import java.io.*; +import java.nio.charset.StandardCharsets; + +/** + * 通用XML构建模板 + */ +public abstract class XMLBuilder { + + /** + * xml树根节点 + */ + protected Element root; + + + public XMLBuilder() { + initRoot(); + } + + /** + * 初始化根节点 + */ + protected abstract void initRoot(); + + + /** + * 获取文档 + * @return xml内容 + * @throws IOException 异常抛出上层处理 + */ + public String getDocRes() throws IOException { + XMLOutputter xmlOutputter = new XMLOutputter(Format.getPrettyFormat()); + try (StringWriter writer = new StringWriter()) { + xmlOutputter.output(new Document(root), writer); + return writer.toString(); + } + } + + + /** + * 保存到路径 + * @param path 路径(含文件名称) + * @throws IOException 异常抛出上层处理 + */ + public void saveToFile(String path) throws IOException { + try (PrintWriter writer = new PrintWriter(new OutputStreamWriter(new FileOutputStream(path), StandardCharsets.UTF_8))){ + String docRes = getDocRes(); + writer.write(docRes); + } + } + +} diff --git a/common/src/main/resources/application.properties b/common/src/main/resources/application.properties new file mode 100644 index 0000000..d762b0f --- /dev/null +++ b/common/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=common diff --git a/common/src/test/java/top/dreamcenter/rss/common/CommonApplicationTests.java b/common/src/test/java/top/dreamcenter/rss/common/CommonApplicationTests.java new file mode 100644 index 0000000..8a70ac8 --- /dev/null +++ b/common/src/test/java/top/dreamcenter/rss/common/CommonApplicationTests.java @@ -0,0 +1,13 @@ +package top.dreamcenter.rss.common; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class CommonApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..4ac88c3 --- /dev/null +++ b/pom.xml @@ -0,0 +1,77 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 2.6.6 + + + + top.dreamcenter + rss + ${revision} + + rss + Rss Relative Project + + pom + + + common + rss-solver-web + + + + 0.0.1 + 8 + 4.1.2 + 2.0.6 + 1.18.34 + 4.1.2 + + + + + + org.seleniumhq.selenium + selenium-java + ${selenium.version} + + + org.jdom + jdom2 + ${jdom.version} + + + org.projectlombok + lombok + ${lombok.version} + + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.4.2 + + + org.apache.maven.plugins + maven-assembly-plugin + 3.6.0 + + + org.springframework.boot + spring-boot-maven-plugin + + + + + + diff --git a/rss-filter/.gitattributes b/rss-filter/.gitattributes new file mode 100644 index 0000000..3b41682 --- /dev/null +++ b/rss-filter/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/rss-filter/.gitignore b/rss-filter/.gitignore new file mode 100644 index 0000000..667aaef --- /dev/null +++ b/rss-filter/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/rss-filter/.mvn/wrapper/maven-wrapper.properties b/rss-filter/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..2f94e61 --- /dev/null +++ b/rss-filter/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.10/apache-maven-3.9.10-bin.zip diff --git a/rss-filter/mvnw b/rss-filter/mvnw new file mode 100644 index 0000000..19529dd --- /dev/null +++ b/rss-filter/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/rss-filter/mvnw.cmd b/rss-filter/mvnw.cmd new file mode 100644 index 0000000..249bdf3 --- /dev/null +++ b/rss-filter/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/rss-filter/pom.xml b/rss-filter/pom.xml new file mode 100644 index 0000000..e8827ee --- /dev/null +++ b/rss-filter/pom.xml @@ -0,0 +1,54 @@ + + + 4.0.0 + + org.springframework.boot + spring-boot-starter-parent + 3.5.3 + + + top.dreamcenter.rss + rss-filter + 0.0.1-SNAPSHOT + rss-filter + Demo project for Spring Boot + + + + + + + + + + + + + + + 17 + + + + org.springframework.boot + spring-boot-starter + + + + org.springframework.boot + spring-boot-starter-test + test + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/rss-filter/src/main/java/top/dreamcenter/rss/rssfilter/RssFilterApplication.java b/rss-filter/src/main/java/top/dreamcenter/rss/rssfilter/RssFilterApplication.java new file mode 100644 index 0000000..d2ba8c8 --- /dev/null +++ b/rss-filter/src/main/java/top/dreamcenter/rss/rssfilter/RssFilterApplication.java @@ -0,0 +1,13 @@ +package top.dreamcenter.rss.rssfilter; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class RssFilterApplication { + + public static void main(String[] args) { + SpringApplication.run(RssFilterApplication.class, args); + } + +} diff --git a/rss-filter/src/main/resources/application.properties b/rss-filter/src/main/resources/application.properties new file mode 100644 index 0000000..bf7c8eb --- /dev/null +++ b/rss-filter/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=rss-filter diff --git a/rss-filter/src/test/java/top/dreamcenter/rss/rssfilter/RssFilterApplicationTests.java b/rss-filter/src/test/java/top/dreamcenter/rss/rssfilter/RssFilterApplicationTests.java new file mode 100644 index 0000000..207e453 --- /dev/null +++ b/rss-filter/src/test/java/top/dreamcenter/rss/rssfilter/RssFilterApplicationTests.java @@ -0,0 +1,13 @@ +package top.dreamcenter.rss.rssfilter; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class RssFilterApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/rss-solver-plugin-xhs/.gitattributes b/rss-solver-plugin-xhs/.gitattributes new file mode 100644 index 0000000..3b41682 --- /dev/null +++ b/rss-solver-plugin-xhs/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/rss-solver-plugin-xhs/.gitignore b/rss-solver-plugin-xhs/.gitignore new file mode 100644 index 0000000..667aaef --- /dev/null +++ b/rss-solver-plugin-xhs/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/rss-solver-plugin-xhs/.mvn/wrapper/maven-wrapper.properties b/rss-solver-plugin-xhs/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..2f94e61 --- /dev/null +++ b/rss-solver-plugin-xhs/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.10/apache-maven-3.9.10-bin.zip diff --git a/rss-solver-plugin-xhs/mvnw b/rss-solver-plugin-xhs/mvnw new file mode 100644 index 0000000..19529dd --- /dev/null +++ b/rss-solver-plugin-xhs/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/rss-solver-plugin-xhs/mvnw.cmd b/rss-solver-plugin-xhs/mvnw.cmd new file mode 100644 index 0000000..249bdf3 --- /dev/null +++ b/rss-solver-plugin-xhs/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/rss-solver-plugin-xhs/pom.xml b/rss-solver-plugin-xhs/pom.xml new file mode 100644 index 0000000..b2efd1c --- /dev/null +++ b/rss-solver-plugin-xhs/pom.xml @@ -0,0 +1,68 @@ + + + 4.0.0 + + top.dreamcenter.rss + rss-solver-plugin-xhs + 0.0.1-SNAPSHOT + + rss-solver-plugin-xhs + Demo project for Spring Boot + + + 8 + 0.0.1 + + 8 + 8 + + + + top.dreamcenter.rss + rss-solver-protocal + ${revision} + + + org.springframework.boot + spring-boot-starter-test + 2.6.6 + + + + + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + + jar-with-dependencies + + D:\projects_self\springboot\rss\plugins + + + + make-assembly + package + + single + + + + + + + diff --git a/rss-solver-plugin-xhs/src/main/java/top/dreamcenter/rss/rsssolverpluginxhs/XhsSpider.java b/rss-solver-plugin-xhs/src/main/java/top/dreamcenter/rss/rsssolverpluginxhs/XhsSpider.java new file mode 100644 index 0000000..6f22734 --- /dev/null +++ b/rss-solver-plugin-xhs/src/main/java/top/dreamcenter/rss/rsssolverpluginxhs/XhsSpider.java @@ -0,0 +1,111 @@ +package top.dreamcenter.rss.rsssolverpluginxhs; + +import org.openqa.selenium.By; +import org.openqa.selenium.Cookie; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; +import top.dreamcenter.rss.common.entity.RSS; +import top.dreamcenter.rss.common.entity.RssItem; +import top.dreamcenter.rss.rsssolverprotocal.RegisterSpider; +import top.dreamcenter.rss.rsssolverprotocal.SpiderTemplate; + +import java.text.SimpleDateFormat; +import java.time.Duration; +import java.util.*; +import java.util.stream.Collectors; + +@RegisterSpider +public class XhsSpider implements SpiderTemplate { + + private WebDriver driver; + + private String cookies = ""; + + private boolean available = false; + + public String getRoute() { + return "xhs"; + } + + @Override + public String getCron() { + return "0 * * * * ?"; + } + + public void setConfig(Hashtable config) { + if (config.containsKey("cookies")) cookies = config.get("cookies"); + } + + public void setDriver(WebDriver driver) { + this.driver = driver; + } + + public void initCookies() { + if (cookies.equals("")) { + throw new RuntimeException("需要cookies配置"); + } else { + available = true; + // 打开网页 + driver.navigate().to("https://edith.xiaohongshu.com/api/sns/web/unread_count"); + + String[] kvStrs = cookies.split("; "); + for (String kvStr : kvStrs) { + String[] split = kvStr.split("="); + driver.manage().addCookie(new Cookie(split[0], split[1], ".xiaohongshu.com","/", new Date(System.currentTimeMillis() + 60 * 60 * 1000))); + } + + System.out.println(cookies); + System.out.println(driver.getPageSource()); + } + } + + public void caller(String key, RSS rss) { + if (!available) return; + + String url = "https://www.xiaohongshu.com/user/profile/" + key; + System.out.println(url); + + try { + + driver.navigate().to(url); + + System.out.println("=================" + url + "===================\n"); + + // 等待元素装载成功 + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(5)); + List blogs = wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("#userPostedFeeds > section"))); + + rss.setTitle(driver.findElement(By.cssSelector(".user-name")).getText()); + rss.setDescription(driver.findElement(By.cssSelector(".user-desc")).getText()); + rss.setLink(url); + + // 解析元素 + SimpleDateFormat sdf = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH); + List result = rss.getItem(); + List links = result.stream().map(RssItem::getLink).collect(Collectors.toList()); + for (WebElement blog : blogs) { + System.out.println(blog); + + String title = blog.findElement(By.cssSelector("div > div > a > span")).getText(); + String content = blog.findElement(By.cssSelector("img")).getAttribute("src"); + String link = blog.findElement(By.cssSelector("div > a.cover")).getAttribute("href"); + System.err.println(link); + + // 因为无法取到时间元素,所以采用时间步进法同步最新数据,时间取截止时间 + if (!links.contains(link)) { + links.add(link); + result.add(new RssItem( + title, "", link, link, sdf.format(Calendar.getInstance().getTime()) + )); + } + } + System.out.println(result); + System.out.println(rss); + } finally { + // 关闭浏览器 +// driver.quit(); + } + } +} diff --git a/rss-solver-plugin-xhs/src/main/resources/META-INF/rss_spider b/rss-solver-plugin-xhs/src/main/resources/META-INF/rss_spider new file mode 100644 index 0000000..ea3ca24 --- /dev/null +++ b/rss-solver-plugin-xhs/src/main/resources/META-INF/rss_spider @@ -0,0 +1 @@ +plugins=top.dreamcenter.rss.rsssolverpluginxhs.XhsSpider \ No newline at end of file diff --git a/rss-solver-plugin-xhs/src/main/resources/application.properties b/rss-solver-plugin-xhs/src/main/resources/application.properties new file mode 100644 index 0000000..6b77588 --- /dev/null +++ b/rss-solver-plugin-xhs/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=rss-solver-plugin-xhs diff --git a/rss-solver-plugin-xhs/src/test/java/top/dreamcenter/rss/rsssolverpluginxhs/RssSolverPluginXhsApplicationTests.java b/rss-solver-plugin-xhs/src/test/java/top/dreamcenter/rss/rsssolverpluginxhs/RssSolverPluginXhsApplicationTests.java new file mode 100644 index 0000000..fb9d92a --- /dev/null +++ b/rss-solver-plugin-xhs/src/test/java/top/dreamcenter/rss/rsssolverpluginxhs/RssSolverPluginXhsApplicationTests.java @@ -0,0 +1,13 @@ +package top.dreamcenter.rss.rsssolverpluginxhs; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class RssSolverPluginXhsApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/rss-solver-protocal/.gitattributes b/rss-solver-protocal/.gitattributes new file mode 100644 index 0000000..3b41682 --- /dev/null +++ b/rss-solver-protocal/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/rss-solver-protocal/.gitignore b/rss-solver-protocal/.gitignore new file mode 100644 index 0000000..667aaef --- /dev/null +++ b/rss-solver-protocal/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/rss-solver-protocal/.mvn/wrapper/maven-wrapper.properties b/rss-solver-protocal/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..2f94e61 --- /dev/null +++ b/rss-solver-protocal/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.10/apache-maven-3.9.10-bin.zip diff --git a/rss-solver-protocal/README.md b/rss-solver-protocal/README.md new file mode 100644 index 0000000..ad7a678 --- /dev/null +++ b/rss-solver-protocal/README.md @@ -0,0 +1,27 @@ + + +插件开发三步走 +1. 插件主类继承 RegisterSpider 协议接口 +2. 插件类添加注解 @RegisterSpider 表示要注册到容器中 +3. 配置META-INF,注册插件配置信息 + + +> 仅实现了RegisterSpider的类才视为合法的插件 +> +> 仅包含了@RegisterSpider的插件才会被注册到容器 +> +> 仅配置文件注册了的插件类才会被ClassLoader装载 + + + + +插件的META-INF,需要添加配置文件rss_spider。 +文件内容的格式类似于spring.factories,以下仅为示例: + +```properties +plugins=top.dreamcenter.rss.rsssolverpluginxhs.XhsSpider,top.dreamcenter.rss.rsssolverpluginxhs.WxSpider +``` + + + + diff --git a/rss-solver-protocal/mvnw b/rss-solver-protocal/mvnw new file mode 100644 index 0000000..19529dd --- /dev/null +++ b/rss-solver-protocal/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/rss-solver-protocal/mvnw.cmd b/rss-solver-protocal/mvnw.cmd new file mode 100644 index 0000000..249bdf3 --- /dev/null +++ b/rss-solver-protocal/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/rss-solver-protocal/pom.xml b/rss-solver-protocal/pom.xml new file mode 100644 index 0000000..1d128e3 --- /dev/null +++ b/rss-solver-protocal/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + + top.dreamcenter.rss + rss-solver-protocal + + 0.0.1 + + rss-solver-protocal + protocal for third part plugins + + + 8 + 8 + 8 + + + + + org.seleniumhq.selenium + selenium-java + 4.1.2 + + + org.projectlombok + lombok + 1.18.34 + + + + diff --git a/rss-solver-protocal/src/main/java/top/dreamcenter/rss/common/entity/RSS.java b/rss-solver-protocal/src/main/java/top/dreamcenter/rss/common/entity/RSS.java new file mode 100644 index 0000000..d3a06c4 --- /dev/null +++ b/rss-solver-protocal/src/main/java/top/dreamcenter/rss/common/entity/RSS.java @@ -0,0 +1,39 @@ +package top.dreamcenter.rss.common.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.util.ArrayList; +import java.util.List; + +/** + * RSS channel + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class RSS { + + /** + * 频道标题 + */ + private String title; + + /** + * 频道主链接 + */ + private String link; + + /** + * 频道描述 + */ + private String description; + + /** + * 频道文章列表 + */ + private List item = new ArrayList<>(); +} diff --git a/rss-solver-protocal/src/main/java/top/dreamcenter/rss/common/entity/RssItem.java b/rss-solver-protocal/src/main/java/top/dreamcenter/rss/common/entity/RssItem.java new file mode 100644 index 0000000..cf5f962 --- /dev/null +++ b/rss-solver-protocal/src/main/java/top/dreamcenter/rss/common/entity/RssItem.java @@ -0,0 +1,47 @@ +package top.dreamcenter.rss.common.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +/** + * RSS频道文章 + */ +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class RssItem { + + /** + * 文章标题 + */ + private String title; + + /** + * 文章摘要(内容) + * + * 建议如果服务资源足够,直接存储内容,方便阅读器阅读 + */ + private String description; + + /** + * 原文链接 + */ + private String link; + + /** + * guid 唯一键,通常与link相同。 + */ + private String guid; + + /** + * 发布时间 + */ + private String pubDate; + +} + + + diff --git a/rss-solver-protocal/src/main/java/top/dreamcenter/rss/rsssolverprotocal/RegisterSpider.java b/rss-solver-protocal/src/main/java/top/dreamcenter/rss/rsssolverprotocal/RegisterSpider.java new file mode 100644 index 0000000..6b86d1c --- /dev/null +++ b/rss-solver-protocal/src/main/java/top/dreamcenter/rss/rsssolverprotocal/RegisterSpider.java @@ -0,0 +1,9 @@ +package top.dreamcenter.rss.rsssolverprotocal; + +import java.lang.annotation.*; + + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.TYPE) +public @interface RegisterSpider { +} diff --git a/rss-solver-protocal/src/main/java/top/dreamcenter/rss/rsssolverprotocal/SpiderTemplate.java b/rss-solver-protocal/src/main/java/top/dreamcenter/rss/rsssolverprotocal/SpiderTemplate.java new file mode 100644 index 0000000..23afd02 --- /dev/null +++ b/rss-solver-protocal/src/main/java/top/dreamcenter/rss/rsssolverprotocal/SpiderTemplate.java @@ -0,0 +1,48 @@ +package top.dreamcenter.rss.rsssolverprotocal; + +import org.openqa.selenium.WebDriver; +import top.dreamcenter.rss.common.entity.RSS; + +import java.util.Hashtable; + +@RegisterSpider +public interface SpiderTemplate { + + /** + * 获取路由地址,用来调用服务时的中间路由 + * @return 路由 + */ + String getRoute(); + + /** + * 设置自动任务cron表达式 + * @return + */ + String getCron(); + + /** + * 配置参数 + * @param config + */ + void setConfig(Hashtable config); + + + /** + * 获取当前webdriver对象 + * @param driver driver + */ + void setDriver(WebDriver driver); + + /** + * 初始化cookies + */ + void initCookies(); + + /** + * 执行层 + * @param key 关键词 => key = 用户唯一标识 = rss文件名称唯一标识 + * @param rss rss,该rss存在历史调用结果,用于特殊处理 + */ + void caller(String key, RSS rss); + +} diff --git a/rss-solver-protocal/src/main/resources/application.properties b/rss-solver-protocal/src/main/resources/application.properties new file mode 100644 index 0000000..9f54eda --- /dev/null +++ b/rss-solver-protocal/src/main/resources/application.properties @@ -0,0 +1 @@ +spring.application.name=rss-solver-protocal diff --git a/rss-solver-web-frontend/.gitignore b/rss-solver-web-frontend/.gitignore new file mode 100644 index 0000000..a547bf3 --- /dev/null +++ b/rss-solver-web-frontend/.gitignore @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/rss-solver-web-frontend/.vscode/extensions.json b/rss-solver-web-frontend/.vscode/extensions.json new file mode 100644 index 0000000..a7cea0b --- /dev/null +++ b/rss-solver-web-frontend/.vscode/extensions.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["Vue.volar"] +} diff --git a/rss-solver-web-frontend/README.md b/rss-solver-web-frontend/README.md new file mode 100644 index 0000000..1511959 --- /dev/null +++ b/rss-solver-web-frontend/README.md @@ -0,0 +1,5 @@ +# Vue 3 + Vite + +This template should help get you started developing with Vue 3 in Vite. The template uses Vue 3 ` + + diff --git a/rss-solver-web-frontend/package-lock.json b/rss-solver-web-frontend/package-lock.json new file mode 100644 index 0000000..9587fc2 --- /dev/null +++ b/rss-solver-web-frontend/package-lock.json @@ -0,0 +1,2054 @@ +{ + "name": "rss-solver-web-frontend", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "rss-solver-web-frontend", + "version": "0.0.0", + "dependencies": { + "ant-design-vue": "^4.2.6", + "axios": "^1.10.0", + "vue": "^3.5.17" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.0", + "unplugin-vue-components": "^28.8.0", + "vite": "^7.0.4" + } + }, + "node_modules/@ant-design/colors": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-6.0.0.tgz", + "integrity": "sha512-qAZRvPzfdWHtfameEGP2Qvuf838NhergR35o+EuVyB5XvSA98xod5r4utvi4TJ3ywmevm290g9nsCG5MryrdWQ==", + "dependencies": { + "@ctrl/tinycolor": "^3.4.0" + } + }, + "node_modules/@ant-design/icons-svg": { + "version": "4.4.2", + "resolved": "https://registry.npmmirror.com/@ant-design/icons-svg/-/icons-svg-4.4.2.tgz", + "integrity": "sha512-vHbT+zJEVzllwP+CM+ul7reTEfBR0vgxFe7+lREAsAA7YGsYpboiq2sQNeQeRvh09GfQgs/GyFEvZpJ9cLXpXA==" + }, + "node_modules/@ant-design/icons-vue": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/@ant-design/icons-vue/-/icons-vue-7.0.1.tgz", + "integrity": "sha512-eCqY2unfZK6Fe02AwFlDHLfoyEFreP6rBwAZMIJ1LugmfMiVgwWDYlp1YsRugaPtICYOabV1iWxXdP12u9U43Q==", + "dependencies": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons-svg": "^4.2.1" + }, + "peerDependencies": { + "vue": ">=3.0.3" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.27.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz", + "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.28.0", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.0.tgz", + "integrity": "sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==", + "dependencies": { + "@babel/types": "^7.28.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.27.6", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.27.6.tgz", + "integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.28.1", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.1.tgz", + "integrity": "sha512-x0LvFTekgSX+83TI28Y9wYPUfzrnl2aT5+5QLnO6v7mSJYtEEevuDRN0F0uSHRk1G1IWZC43o00Y0xDDrpBGPQ==", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@ctrl/tinycolor": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/@ctrl/tinycolor/-/tinycolor-3.6.1.tgz", + "integrity": "sha512-SITSV6aIXsuVNV3f3O0f2n/cgyEDWoSqtZMYiAmcsYHydcKrOz3gUxB/iXd/Qf08+IZX4KpgNbvUdMBmWz+kcA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmmirror.com/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==" + }, + "node_modules/@emotion/unitless": { + "version": "0.8.1", + "resolved": "https://registry.npmmirror.com/@emotion/unitless/-/unitless-0.8.1.tgz", + "integrity": "sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ==" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz", + "integrity": "sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm/-/android-arm-0.25.6.tgz", + "integrity": "sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz", + "integrity": "sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/android-x64/-/android-x64-0.25.6.tgz", + "integrity": "sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz", + "integrity": "sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz", + "integrity": "sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz", + "integrity": "sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz", + "integrity": "sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz", + "integrity": "sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz", + "integrity": "sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz", + "integrity": "sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz", + "integrity": "sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz", + "integrity": "sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz", + "integrity": "sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz", + "integrity": "sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz", + "integrity": "sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz", + "integrity": "sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz", + "integrity": "sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz", + "integrity": "sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz", + "integrity": "sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz", + "integrity": "sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz", + "integrity": "sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz", + "integrity": "sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz", + "integrity": "sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz", + "integrity": "sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz", + "integrity": "sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz", + "integrity": "sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==" + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.0-beta.19", + "resolved": "https://registry.npmmirror.com/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.19.tgz", + "integrity": "sha512-3FL3mnMbPu0muGOCaKAhhFEYmqv9eTfPSJRJmANrCwtgK8VuxpsZDGK+m0LYAGoyO8+0j5uRe4PeyPDK1yA/hA==", + "dev": true + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz", + "integrity": "sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz", + "integrity": "sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz", + "integrity": "sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz", + "integrity": "sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz", + "integrity": "sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz", + "integrity": "sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz", + "integrity": "sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz", + "integrity": "sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz", + "integrity": "sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz", + "integrity": "sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz", + "integrity": "sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz", + "integrity": "sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz", + "integrity": "sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz", + "integrity": "sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz", + "integrity": "sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz", + "integrity": "sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz", + "integrity": "sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz", + "integrity": "sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz", + "integrity": "sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz", + "integrity": "sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@simonwep/pickr": { + "version": "1.8.2", + "resolved": "https://registry.npmmirror.com/@simonwep/pickr/-/pickr-1.8.2.tgz", + "integrity": "sha512-/l5w8BIkrpP6n1xsetx9MWPWlU6OblN5YgZZphxan0Tq4BByTCETL6lyIeY8lagalS2Nbt4F2W034KHLIiunKA==", + "dependencies": { + "core-js": "^3.15.1", + "nanopop": "^2.1.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true + }, + "node_modules/@vitejs/plugin-vue": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/@vitejs/plugin-vue/-/plugin-vue-6.0.0.tgz", + "integrity": "sha512-iAliE72WsdhjzTOp2DtvKThq1VBC4REhwRcaA+zPAAph6I+OQhUXv+Xu2KS7ElxYtb7Zc/3R30Hwv1DxEo7NXQ==", + "dev": true, + "dependencies": { + "@rolldown/pluginutils": "1.0.0-beta.19" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "peerDependencies": { + "vite": "^5.0.0 || ^6.0.0 || ^7.0.0", + "vue": "^3.2.25" + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.17", + "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.17.tgz", + "integrity": "sha512-Xe+AittLbAyV0pabcN7cP7/BenRBNcteM4aSDCtRvGw0d9OL+HG1u/XHLY/kt1q4fyMeZYXyIYrsHuPSiDPosA==", + "dependencies": { + "@babel/parser": "^7.27.5", + "@vue/shared": "3.5.17", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.17", + "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.17.tgz", + "integrity": "sha512-+2UgfLKoaNLhgfhV5Ihnk6wB4ljyW1/7wUIog2puUqajiC29Lp5R/IKDdkebh9jTbTogTbsgB+OY9cEWzG95JQ==", + "dependencies": { + "@vue/compiler-core": "3.5.17", + "@vue/shared": "3.5.17" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.17", + "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.17.tgz", + "integrity": "sha512-rQQxbRJMgTqwRugtjw0cnyQv9cP4/4BxWfTdRBkqsTfLOHWykLzbOc3C4GGzAmdMDxhzU/1Ija5bTjMVrddqww==", + "dependencies": { + "@babel/parser": "^7.27.5", + "@vue/compiler-core": "3.5.17", + "@vue/compiler-dom": "3.5.17", + "@vue/compiler-ssr": "3.5.17", + "@vue/shared": "3.5.17", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.17", + "postcss": "^8.5.6", + "source-map-js": "^1.2.1" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.17", + "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.17.tgz", + "integrity": "sha512-hkDbA0Q20ZzGgpj5uZjb9rBzQtIHLS78mMilwrlpWk2Ep37DYntUz0PonQ6kr113vfOEdM+zTBuJDaceNIW0tQ==", + "dependencies": { + "@vue/compiler-dom": "3.5.17", + "@vue/shared": "3.5.17" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.17", + "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.17.tgz", + "integrity": "sha512-l/rmw2STIscWi7SNJp708FK4Kofs97zc/5aEPQh4bOsReD/8ICuBcEmS7KGwDj5ODQLYWVN2lNibKJL1z5b+Lw==", + "dependencies": { + "@vue/shared": "3.5.17" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.17", + "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.17.tgz", + "integrity": "sha512-QQLXa20dHg1R0ri4bjKeGFKEkJA7MMBxrKo2G+gJikmumRS7PTD4BOU9FKrDQWMKowz7frJJGqBffYMgQYS96Q==", + "dependencies": { + "@vue/reactivity": "3.5.17", + "@vue/shared": "3.5.17" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.17", + "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.17.tgz", + "integrity": "sha512-8El0M60TcwZ1QMz4/os2MdlQECgGoVHPuLnQBU3m9h3gdNRW9xRmI8iLS4t/22OQlOE6aJvNNlBiCzPHur4H9g==", + "dependencies": { + "@vue/reactivity": "3.5.17", + "@vue/runtime-core": "3.5.17", + "@vue/shared": "3.5.17", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.17", + "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.17.tgz", + "integrity": "sha512-BOHhm8HalujY6lmC3DbqF6uXN/K00uWiEeF22LfEsm9Q93XeJ/plHTepGwf6tqFcF7GA5oGSSAAUock3VvzaCA==", + "dependencies": { + "@vue/compiler-ssr": "3.5.17", + "@vue/shared": "3.5.17" + }, + "peerDependencies": { + "vue": "3.5.17" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.17", + "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.17.tgz", + "integrity": "sha512-CabR+UN630VnsJO/jHWYBC1YVXyMq94KKp6iF5MQgZJs5I8cmjw6oVMO1oDbtBkENSHSSn/UadWlW/OAgdmKrg==" + }, + "node_modules/acorn": { + "version": "8.15.0", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-8.15.0.tgz", + "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ant-design-vue": { + "version": "4.2.6", + "resolved": "https://registry.npmmirror.com/ant-design-vue/-/ant-design-vue-4.2.6.tgz", + "integrity": "sha512-t7eX13Yj3i9+i5g9lqFyYneoIb3OzTvQjq9Tts1i+eiOd3Eva/6GagxBSXM1fOCjqemIu0FYVE1ByZ/38epR3Q==", + "dependencies": { + "@ant-design/colors": "^6.0.0", + "@ant-design/icons-vue": "^7.0.0", + "@babel/runtime": "^7.10.5", + "@ctrl/tinycolor": "^3.5.0", + "@emotion/hash": "^0.9.0", + "@emotion/unitless": "^0.8.0", + "@simonwep/pickr": "~1.8.0", + "array-tree-filter": "^2.1.0", + "async-validator": "^4.0.0", + "csstype": "^3.1.1", + "dayjs": "^1.10.5", + "dom-align": "^1.12.1", + "dom-scroll-into-view": "^2.0.0", + "lodash": "^4.17.21", + "lodash-es": "^4.17.15", + "resize-observer-polyfill": "^1.5.1", + "scroll-into-view-if-needed": "^2.2.25", + "shallow-equal": "^1.0.0", + "stylis": "^4.1.3", + "throttle-debounce": "^5.0.0", + "vue-types": "^3.0.0", + "warning": "^4.0.0" + }, + "engines": { + "node": ">=12.22.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design-vue" + }, + "peerDependencies": { + "vue": ">=3.2.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/array-tree-filter": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-tree-filter/-/array-tree-filter-2.1.0.tgz", + "integrity": "sha512-4ROwICNlNw/Hqa9v+rk5h22KjmzB1JGTMVKP2AKJBOCgb0yL0ASf0+YvCcLNNwquOHNX48jkeZIJ3a+oOQqKcw==" + }, + "node_modules/async-validator": { + "version": "4.2.5", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-4.2.5.tgz", + "integrity": "sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" + }, + "node_modules/axios": { + "version": "1.10.0", + "resolved": "https://registry.npmmirror.com/axios/-/axios-1.10.0.tgz", + "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compute-scroll-into-view": { + "version": "1.0.20", + "resolved": "https://registry.npmmirror.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz", + "integrity": "sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg==" + }, + "node_modules/confbox": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.2.2.tgz", + "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "dev": true + }, + "node_modules/core-js": { + "version": "3.44.0", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.44.0.tgz", + "integrity": "sha512-aFCtd4l6GvAXwVEh3XbbVqJGHDJt0OZRa+5ePGx3LLwi12WfexqQxcsohb2wgsa/92xtl19Hd66G/L+TaAxDMw==", + "hasInstallScript": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, + "node_modules/debug": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.4.1.tgz", + "integrity": "sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dom-align": { + "version": "1.12.4", + "resolved": "https://registry.npmmirror.com/dom-align/-/dom-align-1.12.4.tgz", + "integrity": "sha512-R8LUSEay/68zE5c8/3BDxiTEvgb4xZTF0RKmAHfiEVN3klfIpXfi2/QCoiWPccVQ0J/ZGdz9OjzL4uJEP/MRAw==" + }, + "node_modules/dom-scroll-into-view": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/dom-scroll-into-view/-/dom-scroll-into-view-2.0.1.tgz", + "integrity": "sha512-bvVTQe1lfaUr1oFzZX80ce9KLDlZ3iU+XGNE/bz9HnGdklTieqsbmsLHe+rT2XWqopvL0PckkYqN7ksmm5pe3w==" + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.25.6", + "resolved": "https://registry.npmmirror.com/esbuild/-/esbuild-0.25.6.tgz", + "integrity": "sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.6", + "@esbuild/android-arm": "0.25.6", + "@esbuild/android-arm64": "0.25.6", + "@esbuild/android-x64": "0.25.6", + "@esbuild/darwin-arm64": "0.25.6", + "@esbuild/darwin-x64": "0.25.6", + "@esbuild/freebsd-arm64": "0.25.6", + "@esbuild/freebsd-x64": "0.25.6", + "@esbuild/linux-arm": "0.25.6", + "@esbuild/linux-arm64": "0.25.6", + "@esbuild/linux-ia32": "0.25.6", + "@esbuild/linux-loong64": "0.25.6", + "@esbuild/linux-mips64el": "0.25.6", + "@esbuild/linux-ppc64": "0.25.6", + "@esbuild/linux-riscv64": "0.25.6", + "@esbuild/linux-s390x": "0.25.6", + "@esbuild/linux-x64": "0.25.6", + "@esbuild/netbsd-arm64": "0.25.6", + "@esbuild/netbsd-x64": "0.25.6", + "@esbuild/openbsd-arm64": "0.25.6", + "@esbuild/openbsd-x64": "0.25.6", + "@esbuild/openharmony-arm64": "0.25.6", + "@esbuild/sunos-x64": "0.25.6", + "@esbuild/win32-arm64": "0.25.6", + "@esbuild/win32-ia32": "0.25.6", + "@esbuild/win32-x64": "0.25.6" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==" + }, + "node_modules/exsolve": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/exsolve/-/exsolve-1.0.7.tgz", + "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", + "dev": true + }, + "node_modules/fdir": { + "version": "6.4.6", + "resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.4.6.tgz", + "integrity": "sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==", + "dev": true, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.4.tgz", + "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "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.npmmirror.com/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-3.0.1.tgz", + "integrity": "sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/local-pkg": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/local-pkg/-/local-pkg-1.1.1.tgz", + "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", + "dev": true, + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.0.1", + "quansync": "^0.2.8" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.17", + "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "dev": true, + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/nanopop": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/nanopop/-/nanopop-2.4.2.tgz", + "integrity": "sha512-NzOgmMQ+elxxHeIha+OG/Pv3Oc3p4RU2aBhwWwAqDpXrdTbtRylbRLQztLy8dMMwfl6pclznBdfUhccEn9ZIzw==" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/pkg-types/-/pkg-types-2.2.0.tgz", + "integrity": "sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ==", + "dev": true, + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/quansync": { + "version": "0.2.10", + "resolved": "https://registry.npmmirror.com/quansync/-/quansync-0.2.10.tgz", + "integrity": "sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ] + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==" + }, + "node_modules/rollup": { + "version": "4.45.1", + "resolved": "https://registry.npmmirror.com/rollup/-/rollup-4.45.1.tgz", + "integrity": "sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.45.1", + "@rollup/rollup-android-arm64": "4.45.1", + "@rollup/rollup-darwin-arm64": "4.45.1", + "@rollup/rollup-darwin-x64": "4.45.1", + "@rollup/rollup-freebsd-arm64": "4.45.1", + "@rollup/rollup-freebsd-x64": "4.45.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.45.1", + "@rollup/rollup-linux-arm-musleabihf": "4.45.1", + "@rollup/rollup-linux-arm64-gnu": "4.45.1", + "@rollup/rollup-linux-arm64-musl": "4.45.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.45.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-gnu": "4.45.1", + "@rollup/rollup-linux-riscv64-musl": "4.45.1", + "@rollup/rollup-linux-s390x-gnu": "4.45.1", + "@rollup/rollup-linux-x64-gnu": "4.45.1", + "@rollup/rollup-linux-x64-musl": "4.45.1", + "@rollup/rollup-win32-arm64-msvc": "4.45.1", + "@rollup/rollup-win32-ia32-msvc": "4.45.1", + "@rollup/rollup-win32-x64-msvc": "4.45.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/scroll-into-view-if-needed": { + "version": "2.2.31", + "resolved": "https://registry.npmmirror.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz", + "integrity": "sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA==", + "dependencies": { + "compute-scroll-into-view": "^1.0.20" + } + }, + "node_modules/shallow-equal": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/shallow-equal/-/shallow-equal-1.2.1.tgz", + "integrity": "sha512-S4vJDjHHMBaiZuT9NPb616CSmLf618jawtv3sufLl6ivK8WocjAo58cXwbRV1cgqxH0Qbv+iUt6m05eqEa2IRA==" + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmmirror.com/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==" + }, + "node_modules/throttle-debounce": { + "version": "5.0.2", + "resolved": "https://registry.npmmirror.com/throttle-debounce/-/throttle-debounce-5.0.2.tgz", + "integrity": "sha512-B71/4oyj61iNH0KeCamLuE2rmKuTO5byTOSVwECM5FA7TiAiAW+UqTKZ9ERueC4qvgSttUhdmq1mXC3kJqGX7A==", + "engines": { + "node": ">=12.22" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.14", + "resolved": "https://registry.npmmirror.com/tinyglobby/-/tinyglobby-0.2.14.tgz", + "integrity": "sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==", + "dev": true, + "dependencies": { + "fdir": "^6.4.4", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ufo": { + "version": "1.6.1", + "resolved": "https://registry.npmmirror.com/ufo/-/ufo-1.6.1.tgz", + "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "dev": true + }, + "node_modules/unplugin": { + "version": "2.3.5", + "resolved": "https://registry.npmmirror.com/unplugin/-/unplugin-2.3.5.tgz", + "integrity": "sha512-RyWSb5AHmGtjjNQ6gIlA67sHOsWpsbWpwDokLwTcejVdOjEkJZh7QKu14J00gDDVSh8kGH4KYC/TNBceXFZhtw==", + "dev": true, + "dependencies": { + "acorn": "^8.14.1", + "picomatch": "^4.0.2", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/unplugin-utils": { + "version": "0.2.4", + "resolved": "https://registry.npmmirror.com/unplugin-utils/-/unplugin-utils-0.2.4.tgz", + "integrity": "sha512-8U/MtpkPkkk3Atewj1+RcKIjb5WBimZ/WSLhhR3w6SsIj8XJuKTacSP8g+2JhfSGw0Cb125Y+2zA/IzJZDVbhA==", + "dev": true, + "dependencies": { + "pathe": "^2.0.2", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://github.com/sponsors/sxzz" + } + }, + "node_modules/unplugin-vue-components": { + "version": "28.8.0", + "resolved": "https://registry.npmmirror.com/unplugin-vue-components/-/unplugin-vue-components-28.8.0.tgz", + "integrity": "sha512-2Q6ZongpoQzuXDK0ZsVzMoshH0MWZQ1pzVL538G7oIDKRTVzHjppBDS8aB99SADGHN3lpGU7frraCG6yWNoL5Q==", + "dev": true, + "dependencies": { + "chokidar": "^3.6.0", + "debug": "^4.4.1", + "local-pkg": "^1.1.1", + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "tinyglobby": "^0.2.14", + "unplugin": "^2.3.5", + "unplugin-utils": "^0.2.4" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@babel/parser": "^7.15.8", + "@nuxt/kit": "^3.2.2 || ^4.0.0", + "vue": "2 || 3" + }, + "peerDependenciesMeta": { + "@babel/parser": { + "optional": true + }, + "@nuxt/kit": { + "optional": true + } + } + }, + "node_modules/vite": { + "version": "7.0.5", + "resolved": "https://registry.npmmirror.com/vite/-/vite-7.0.5.tgz", + "integrity": "sha512-1mncVwJxy2C9ThLwz0+2GKZyEXuC3MyWtAAlNftlZZXZDP3AJt5FmwcMit/IGGaNZ8ZOB2BNO/HFUB+CpN0NQw==", + "dev": true, + "dependencies": { + "esbuild": "^0.25.0", + "fdir": "^6.4.6", + "picomatch": "^4.0.2", + "postcss": "^8.5.6", + "rollup": "^4.40.0", + "tinyglobby": "^0.2.14" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "jiti": ">=1.21.0", + "less": "^4.0.0", + "lightningcss": "^1.21.0", + "sass": "^1.70.0", + "sass-embedded": "^1.70.0", + "stylus": ">=0.54.8", + "sugarss": "^5.0.0", + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vue": { + "version": "3.5.17", + "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.17.tgz", + "integrity": "sha512-LbHV3xPN9BeljML+Xctq4lbz2lVHCR6DtbpTf5XIO6gugpXUN49j2QQPcMj086r9+AkJ0FfUT8xjulKKBkkr9g==", + "dependencies": { + "@vue/compiler-dom": "3.5.17", + "@vue/compiler-sfc": "3.5.17", + "@vue/runtime-dom": "3.5.17", + "@vue/server-renderer": "3.5.17", + "@vue/shared": "3.5.17" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/vue-types": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/vue-types/-/vue-types-3.0.2.tgz", + "integrity": "sha512-IwUC0Aq2zwaXqy74h4WCvFCUtoV0iSWr0snWnE9TnU18S66GAQyqQbRf2qfJtUuiFsBf6qp0MEwdonlwznlcrw==", + "dependencies": { + "is-plain-object": "3.0.1" + }, + "engines": { + "node": ">=10.15.0" + }, + "peerDependencies": { + "vue": "^3.0.0" + } + }, + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "dev": true + } + } +} diff --git a/rss-solver-web-frontend/package.json b/rss-solver-web-frontend/package.json new file mode 100644 index 0000000..179c1a3 --- /dev/null +++ b/rss-solver-web-frontend/package.json @@ -0,0 +1,21 @@ +{ + "name": "rss-solver-web-frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "vite build", + "preview": "vite preview" + }, + "dependencies": { + "ant-design-vue": "^4.2.6", + "axios": "^1.10.0", + "vue": "^3.5.17" + }, + "devDependencies": { + "@vitejs/plugin-vue": "^6.0.0", + "unplugin-vue-components": "^28.8.0", + "vite": "^7.0.4" + } +} diff --git a/rss-solver-web-frontend/public/vite.svg b/rss-solver-web-frontend/public/vite.svg new file mode 100644 index 0000000..505b973 --- /dev/null +++ b/rss-solver-web-frontend/public/vite.svg @@ -0,0 +1,3579 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/rss-solver-web-frontend/src/App.vue b/rss-solver-web-frontend/src/App.vue new file mode 100644 index 0000000..b60a5b3 --- /dev/null +++ b/rss-solver-web-frontend/src/App.vue @@ -0,0 +1,10 @@ + + + + + diff --git a/rss-solver-web-frontend/src/assets/vue.svg b/rss-solver-web-frontend/src/assets/vue.svg new file mode 100644 index 0000000..770e9d3 --- /dev/null +++ b/rss-solver-web-frontend/src/assets/vue.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/rss-solver-web-frontend/src/components/HelloWorld.vue b/rss-solver-web-frontend/src/components/HelloWorld.vue new file mode 100644 index 0000000..ed298d7 --- /dev/null +++ b/rss-solver-web-frontend/src/components/HelloWorld.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/rss-solver-web-frontend/src/main.js b/rss-solver-web-frontend/src/main.js new file mode 100644 index 0000000..2425c0f --- /dev/null +++ b/rss-solver-web-frontend/src/main.js @@ -0,0 +1,5 @@ +import { createApp } from 'vue' +import './style.css' +import App from './App.vue' + +createApp(App).mount('#app') diff --git a/rss-solver-web-frontend/src/style.css b/rss-solver-web-frontend/src/style.css new file mode 100644 index 0000000..e69de29 diff --git a/rss-solver-web-frontend/src/util/Common.js b/rss-solver-web-frontend/src/util/Common.js new file mode 100644 index 0000000..b362300 --- /dev/null +++ b/rss-solver-web-frontend/src/util/Common.js @@ -0,0 +1,157 @@ +import { Keyframes } from 'ant-design-vue'; +import axios from 'axios'; + + +const columns= [ + { + title: 'pluginId', + dataIndex: 'pluginId', + key: 'pluginId', + }, + { + title: 'cron', + dataIndex: 'cron', + key: 'cron', + }, + { + title: 'route', + dataIndex: 'route', + key: 'route', + }, + { + title: 'lastRunAt', + dataIndex: 'lastRunAt', + key: 'lastRunAt', + }, + { + title: 'lastRunResult', + dataIndex: 'lastRunResult', + key: 'lastRunResult', + }, + { + title: 'operation', + dataIndex: 'operation', + key: 'operation', + } +] + +const configColumns = [ + { + title: 'key', + dataIndex: 'key', + key: 'key', + }, + { + title: 'value', + dataIndex: 'value', + key: 'value', + }, + { + title: 'operation', + dataIndex: 'operation', + key: 'operation', + } +] + +class Key { + constructor () { + this.show = false + this.list = [] + this.keyToNew = '', + this.targetPlugin = '' + } + + freshKeyList () { + axios.get(`/plugin/list/key?pluginId=${this.targetPlugin}`).then(res => { + if (res.data.code === 200) { + this.list = res.data.data + } + }).catch(err => err) + } + + openKeyPanel (plugin) { + this.targetPlugin = plugin.pluginId + this.list = plugin.keyList + this.freshKeyList() + this.show = true + } + + newKey () { + axios.get(`/plugin/add/key?pluginId=${this.targetPlugin}&key=${this.keyToNew}`).then(res => { + if (res.data.code === 200) { + this.freshKeyList() + this.keyToNew = '' + } + }).catch(err => err) + } + + delKey (key) { + axios.get(`/plugin/del/key?pluginId=${this.targetPlugin}&key=${key}`).then(res => { + if (res.data.code === 200) { + this.freshKeyList() + } + }).catch(err => err) + } +} + +class Config { + constructor () { + this.show = false + this.list = [] + this.configToNew = { + key: '', + value: '' + }, + this.targetPlugin = '' + } + + freshConfigList () { + axios.get(`/plugin/list/config?pluginId=${this.targetPlugin}`).then(res => { + if (res.data.code === 200) { + this.list = res.data.data + } + }).catch(err => err) + } + + openConfigPanel (plugin) { + this.targetPlugin = plugin.pluginId + this.list = plugin.configList + this.freshConfigList() + this.show = true + } + + newConfig () { + axios.get(`/plugin/add/config?pluginId=${this.targetPlugin}&k=${this.configToNew.key}&v=${this.configToNew.value}`).then(res => { + if (res.data.code === 200) { + this.freshConfigList() + this.configToNew = { + key: '', + value: '' + } + } + }).catch(err => err) + } + + editConfig (k) { + var res = prompt('new value') + if (res != null) { + this.configToNew = { + key: k, + value: res + } + this.newConfig() + } + } + + delConfig (k) { + axios.get(`/plugin/del/config?pluginId=${this.targetPlugin}&k=${k}`).then(res => { + if (res.data.code === 200) { + this.freshConfigList() + } + }).catch(err => err) + } +} + +export { + Key, Config, columns, configColumns +} \ No newline at end of file diff --git a/rss-solver-web-frontend/vite.config.js b/rss-solver-web-frontend/vite.config.js new file mode 100644 index 0000000..3e69a3d --- /dev/null +++ b/rss-solver-web-frontend/vite.config.js @@ -0,0 +1,27 @@ +import { defineConfig } from 'vite' +import vue from '@vitejs/plugin-vue' + +import Components from 'unplugin-vue-components/vite'; +import { AntDesignVueResolver } from 'unplugin-vue-components/resolvers'; + +export default defineConfig({ + server: { + proxy: { + '/plugin': { + target: 'http://127.0.0.1:8080', + changeOrigin: true + } + } + }, + plugins: [ + vue(), + Components({ + resolvers: [ + AntDesignVueResolver({ + importStyle: false, // css in js + }), + ], + }) + ], +}) + diff --git a/rss-solver-web/.gitattributes b/rss-solver-web/.gitattributes new file mode 100644 index 0000000..3b41682 --- /dev/null +++ b/rss-solver-web/.gitattributes @@ -0,0 +1,2 @@ +/mvnw text eol=lf +*.cmd text eol=crlf diff --git a/rss-solver-web/.gitignore b/rss-solver-web/.gitignore new file mode 100644 index 0000000..667aaef --- /dev/null +++ b/rss-solver-web/.gitignore @@ -0,0 +1,33 @@ +HELP.md +target/ +.mvn/wrapper/maven-wrapper.jar +!**/src/main/**/target/ +!**/src/test/**/target/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ +build/ +!**/src/main/**/build/ +!**/src/test/**/build/ + +### VS Code ### +.vscode/ diff --git a/rss-solver-web/.mvn/wrapper/maven-wrapper.properties b/rss-solver-web/.mvn/wrapper/maven-wrapper.properties new file mode 100644 index 0000000..2f94e61 --- /dev/null +++ b/rss-solver-web/.mvn/wrapper/maven-wrapper.properties @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +wrapperVersion=3.3.2 +distributionType=only-script +distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.10/apache-maven-3.9.10-bin.zip diff --git a/rss-solver-web/mvnw b/rss-solver-web/mvnw new file mode 100644 index 0000000..19529dd --- /dev/null +++ b/rss-solver-web/mvnw @@ -0,0 +1,259 @@ +#!/bin/sh +# ---------------------------------------------------------------------------- +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Apache Maven Wrapper startup batch script, version 3.3.2 +# +# Optional ENV vars +# ----------------- +# JAVA_HOME - location of a JDK home dir, required when download maven via java source +# MVNW_REPOURL - repo url base for downloading maven distribution +# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output +# ---------------------------------------------------------------------------- + +set -euf +[ "${MVNW_VERBOSE-}" != debug ] || set -x + +# OS specific support. +native_path() { printf %s\\n "$1"; } +case "$(uname)" in +CYGWIN* | MINGW*) + [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")" + native_path() { cygpath --path --windows "$1"; } + ;; +esac + +# set JAVACMD and JAVACCMD +set_java_home() { + # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched + if [ -n "${JAVA_HOME-}" ]; then + if [ -x "$JAVA_HOME/jre/sh/java" ]; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACCMD="$JAVA_HOME/jre/sh/javac" + else + JAVACMD="$JAVA_HOME/bin/java" + JAVACCMD="$JAVA_HOME/bin/javac" + + if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then + echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2 + echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2 + return 1 + fi + fi + else + JAVACMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v java + )" || : + JAVACCMD="$( + 'set' +e + 'unset' -f command 2>/dev/null + 'command' -v javac + )" || : + + if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then + echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2 + return 1 + fi + fi +} + +# hash string like Java String::hashCode +hash_string() { + str="${1:-}" h=0 + while [ -n "$str" ]; do + char="${str%"${str#?}"}" + h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296)) + str="${str#?}" + done + printf %x\\n $h +} + +verbose() { :; } +[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; } + +die() { + printf %s\\n "$1" >&2 + exit 1 +} + +trim() { + # MWRAPPER-139: + # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds. + # Needed for removing poorly interpreted newline sequences when running in more + # exotic environments such as mingw bash on Windows. + printf "%s" "${1}" | tr -d '[:space:]' +} + +# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties +while IFS="=" read -r key value; do + case "${key-}" in + distributionUrl) distributionUrl=$(trim "${value-}") ;; + distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;; + esac +done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties" +[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties" + +case "${distributionUrl##*/}" in +maven-mvnd-*bin.*) + MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ + case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in + *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;; + :Darwin*x86_64) distributionPlatform=darwin-amd64 ;; + :Darwin*arm64) distributionPlatform=darwin-aarch64 ;; + :Linux*x86_64*) distributionPlatform=linux-amd64 ;; + *) + echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2 + distributionPlatform=linux-amd64 + ;; + esac + distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip" + ;; +maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;; +*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;; +esac + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}" +distributionUrlName="${distributionUrl##*/}" +distributionUrlNameMain="${distributionUrlName%.*}" +distributionUrlNameMain="${distributionUrlNameMain%-bin}" +MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}" +MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")" + +exec_maven() { + unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || : + exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD" +} + +if [ -d "$MAVEN_HOME" ]; then + verbose "found existing MAVEN_HOME at $MAVEN_HOME" + exec_maven "$@" +fi + +case "${distributionUrl-}" in +*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;; +*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;; +esac + +# prepare tmp dir +if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then + clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; } + trap clean HUP INT TERM EXIT +else + die "cannot create temp dir" +fi + +mkdir -p -- "${MAVEN_HOME%/*}" + +# Download and Install Apache Maven +verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +verbose "Downloading from: $distributionUrl" +verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +# select .zip or .tar.gz +if ! command -v unzip >/dev/null; then + distributionUrl="${distributionUrl%.zip}.tar.gz" + distributionUrlName="${distributionUrl##*/}" +fi + +# verbose opt +__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR='' +[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v + +# normalize http auth +case "${MVNW_PASSWORD:+has-password}" in +'') MVNW_USERNAME='' MVNW_PASSWORD='' ;; +has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;; +esac + +if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then + verbose "Found wget ... using wget" + wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl" +elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then + verbose "Found curl ... using curl" + curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl" +elif set_java_home; then + verbose "Falling back to use Java to download" + javaSource="$TMP_DOWNLOAD_DIR/Downloader.java" + targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName" + cat >"$javaSource" <<-END + public class Downloader extends java.net.Authenticator + { + protected java.net.PasswordAuthentication getPasswordAuthentication() + { + return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() ); + } + public static void main( String[] args ) throws Exception + { + setDefault( new Downloader() ); + java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() ); + } + } + END + # For Cygwin/MinGW, switch paths to Windows format before running javac and java + verbose " - Compiling Downloader.java ..." + "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java" + verbose " - Running Downloader.java ..." + "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")" +fi + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +if [ -n "${distributionSha256Sum-}" ]; then + distributionSha256Result=false + if [ "$MVN_CMD" = mvnd.sh ]; then + echo "Checksum validation is not supported for maven-mvnd." >&2 + echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + elif command -v sha256sum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + elif command -v shasum >/dev/null; then + if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then + distributionSha256Result=true + fi + else + echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2 + echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2 + exit 1 + fi + if [ $distributionSha256Result = false ]; then + echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2 + echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2 + exit 1 + fi +fi + +# unzip and move +if command -v unzip >/dev/null; then + unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip" +else + tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar" +fi +printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url" +mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME" + +clean || : +exec_maven "$@" diff --git a/rss-solver-web/mvnw.cmd b/rss-solver-web/mvnw.cmd new file mode 100644 index 0000000..249bdf3 --- /dev/null +++ b/rss-solver-web/mvnw.cmd @@ -0,0 +1,149 @@ +<# : batch portion +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM http://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Apache Maven Wrapper startup batch script, version 3.3.2 +@REM +@REM Optional ENV vars +@REM MVNW_REPOURL - repo url base for downloading maven distribution +@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven +@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output +@REM ---------------------------------------------------------------------------- + +@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0) +@SET __MVNW_CMD__= +@SET __MVNW_ERROR__= +@SET __MVNW_PSMODULEP_SAVE=%PSModulePath% +@SET PSModulePath= +@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @( + IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B) +) +@SET PSModulePath=%__MVNW_PSMODULEP_SAVE% +@SET __MVNW_PSMODULEP_SAVE= +@SET __MVNW_ARG0_NAME__= +@SET MVNW_USERNAME= +@SET MVNW_PASSWORD= +@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*) +@echo Cannot start maven from wrapper >&2 && exit /b 1 +@GOTO :EOF +: end batch / begin powershell #> + +$ErrorActionPreference = "Stop" +if ($env:MVNW_VERBOSE -eq "true") { + $VerbosePreference = "Continue" +} + +# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties +$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl +if (!$distributionUrl) { + Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties" +} + +switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) { + "maven-mvnd-*" { + $USE_MVND = $true + $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip" + $MVN_CMD = "mvnd.cmd" + break + } + default { + $USE_MVND = $false + $MVN_CMD = $script -replace '^mvnw','mvn' + break + } +} + +# apply MVNW_REPOURL and calculate MAVEN_HOME +# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/ +if ($env:MVNW_REPOURL) { + $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" } + $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')" +} +$distributionUrlName = $distributionUrl -replace '^.*/','' +$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$','' +$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain" +if ($env:MAVEN_USER_HOME) { + $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain" +} +$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join '' +$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME" + +if (Test-Path -Path "$MAVEN_HOME" -PathType Container) { + Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME" + Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" + exit $? +} + +if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) { + Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl" +} + +# prepare tmp dir +$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile +$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir" +$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null +trap { + if ($TMP_DOWNLOAD_DIR.Exists) { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } + } +} + +New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null + +# Download and Install Apache Maven +Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..." +Write-Verbose "Downloading from: $distributionUrl" +Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName" + +$webclient = New-Object System.Net.WebClient +if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) { + $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD) +} +[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 +$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null + +# If specified, validate the SHA-256 sum of the Maven distribution zip file +$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum +if ($distributionSha256Sum) { + if ($USE_MVND) { + Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." + } + Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash + if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) { + Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property." + } +} + +# unzip and move +Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null +Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null +try { + Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null +} catch { + if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) { + Write-Error "fail to move MAVEN_HOME" + } +} finally { + try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null } + catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" } +} + +Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD" diff --git a/rss-solver-web/pom.xml b/rss-solver-web/pom.xml new file mode 100644 index 0000000..e9a9f1e --- /dev/null +++ b/rss-solver-web/pom.xml @@ -0,0 +1,62 @@ + + + 4.0.0 + + rss + top.dreamcenter + ${revision} + + + top.dreamcenter.rss + rss-solver-web + + rss-solver-web + resolver web + + + + top.dreamcenter.rss + common + ${revision} + + + + top.dreamcenter.rss + rss-solver-protocal + ${revision} + + + + org.projectlombok + lombok + + + + org.springframework.boot + spring-boot-starter-web + + + + org.springframework.boot + spring-boot-starter-test + test + + + + org.seleniumhq.selenium + selenium-java + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + + + + + diff --git a/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/RssSolverWebApplication.java b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/RssSolverWebApplication.java new file mode 100644 index 0000000..66e51d1 --- /dev/null +++ b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/RssSolverWebApplication.java @@ -0,0 +1,20 @@ +package top.dreamcenter.rss.rsssolverweb; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.ConfigurationPropertiesScan; +import org.springframework.context.ConfigurableApplicationContext; +import top.dreamcenter.rss.rsssolverprotocal.SpiderTemplate; + +import java.util.Map; + +@ConfigurationPropertiesScan("top.dreamcenter.rss.rsssolverweb.properties") +@SpringBootApplication +public class RssSolverWebApplication { + + public static void main(String[] args) { + ConfigurableApplicationContext context = SpringApplication.run(RssSolverWebApplication.class, args); + + } + +} diff --git a/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/config/BeanRegister.java b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/config/BeanRegister.java new file mode 100644 index 0000000..9d8b391 --- /dev/null +++ b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/config/BeanRegister.java @@ -0,0 +1,52 @@ +package top.dreamcenter.rss.rsssolverweb.config; + +import org.springframework.context.ApplicationContext; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import top.dreamcenter.rss.rsssolverprotocal.SpiderTemplate; +import top.dreamcenter.rss.rsssolverweb.util.ScheduleHelper; +import top.dreamcenter.rss.rsssolverweb.util.SpiderHelper; +import top.dreamcenter.rss.rsssolverweb.util.SpiderHelperFactory; + +import java.util.HashMap; +import java.util.Map; + +@Configuration +public class BeanRegister { + + + /** + * 获取容器中注册的所有插件,并且注册为爬虫工具 + * @param context + * @param spiderHelperFactory + * @return + */ + @Bean + public Map spiders(ApplicationContext context, SpiderHelperFactory spiderHelperFactory, ScheduleHelper scheduleHelper) { + Map beansOfType = context.getBeansOfType(SpiderTemplate.class); + Map helperMap = new HashMap<>(); + beansOfType.forEach((k, spider) -> { + SpiderHelper spiderHelper = spiderHelperFactory.creator(spider); + scheduleHelper.registerSchedule(spiderHelper); + helperMap.put(k, spiderHelper); + }); + return helperMap; + } + + + /** + * 自动任务线程池 + * @return + */ + @Bean + public ThreadPoolTaskScheduler syncScheduler() { + ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); + scheduler.setPoolSize(6); + scheduler.setThreadGroupName("pluginTasks"); + scheduler.setThreadNamePrefix("syncThread-"); + scheduler.initialize(); + return scheduler; + } + +} diff --git a/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/config/PluginBeanRegistrar.java b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/config/PluginBeanRegistrar.java new file mode 100644 index 0000000..aba2fa3 --- /dev/null +++ b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/config/PluginBeanRegistrar.java @@ -0,0 +1,40 @@ +package top.dreamcenter.rss.rsssolverweb.config; + +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanDefinition; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.support.BeanDefinitionRegistry; +import org.springframework.beans.factory.support.BeanDefinitionRegistryPostProcessor; +import org.springframework.context.annotation.Configuration; +import top.dreamcenter.rss.rsssolverprotocal.RegisterSpider; +import top.dreamcenter.rss.rsssolverweb.util.PluginLoader; + +import java.util.Set; + +/** + * 将插件注册到容器中 + */ +@Configuration +public class PluginBeanRegistrar implements BeanDefinitionRegistryPostProcessor { + @Override + public void postProcessBeanDefinitionRegistry( BeanDefinitionRegistry registry) throws BeansException { + try { + PluginLoader pluginLoader = new PluginLoader(); + Set> plugins = pluginLoader.loadPlugins(); + for (Class pluginClass : plugins) { + // 仅加了RegisterSpider注解的插件需要注册 + if (pluginClass.isAnnotationPresent(RegisterSpider.class)) { + BeanDefinition beanDefinition = BeanDefinitionBuilder.genericBeanDefinition(pluginClass).getBeanDefinition(); + registry.registerBeanDefinition(pluginClass.getSimpleName(), beanDefinition); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + @Override + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { + // No-op + } +} \ No newline at end of file diff --git a/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/controller/ManagePluginController.java b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/controller/ManagePluginController.java new file mode 100644 index 0000000..3420099 --- /dev/null +++ b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/controller/ManagePluginController.java @@ -0,0 +1,95 @@ +package top.dreamcenter.rss.rsssolverweb.controller; + +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import top.dreamcenter.rss.rsssolverweb.entity.KVPair; +import top.dreamcenter.rss.rsssolverweb.entity.PluginInfo; +import top.dreamcenter.rss.rsssolverweb.entity.RetResult; +import top.dreamcenter.rss.rsssolverweb.util.SpiderHelper; + +import javax.annotation.Resource; +import java.util.*; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/plugin") +public class ManagePluginController { + + @Resource + private Map spiders; + + @GetMapping("/list/plugin") + public RetResult> listPlugins() { + List list = new ArrayList<>(); + + spiders.forEach((k, v) -> list.add(new PluginInfo( + k, + v.getRoute(), + v.getCron(), + v.listKey(), + v.listConfig() + .entrySet().stream() + .map((item -> new KVPair(item.getKey(), item.getValue()))) + .collect(Collectors.toList()), + v.getLastRunAt(), + v.getLastRunResult() + ))); + + return RetResult.success(list); + } + + @GetMapping("/list/key") + public RetResult> listKeys(String pluginId) { + if (spiders.containsKey(pluginId)) { + return RetResult.success(spiders.get(pluginId).listKey()); + } else { + return RetResult.fail(pluginId + " 未注册"); + } + } + + @GetMapping("/list/config") + public RetResult> listPlugins(String pluginId) { + if (spiders.containsKey(pluginId)) { + Hashtable table = spiders.get(pluginId).listConfig(); + List kvPairList = table.entrySet().stream() + .map((item -> new KVPair(item.getKey(), item.getValue()))) + .collect(Collectors.toList()); + return RetResult.success(kvPairList); + } else { + return RetResult.fail(pluginId + " 未注册"); + } + } + + @GetMapping("/add/key") + public RetResult addKey(String pluginId, String key) { + spiders.get(pluginId).addKey(key); + return RetResult.success("添加key结束"); + } + + @GetMapping("/add/config") + public RetResult addConfig(String pluginId, String k, String v) { + spiders.get(pluginId).addConfig(k, v); + return RetResult.success("添加config结束"); + } + + @GetMapping("/del/key") + public RetResult delKey(String pluginId, String key) { + if (spiders.containsKey(pluginId)) { + spiders.get(pluginId).delKey(key); + return RetResult.success("删除key结束"); + } else { + return RetResult.fail(pluginId + " 未注册"); + } + } + + @GetMapping("/del/config") + public RetResult delConfig(String pluginId, String k) { + if (spiders.containsKey(pluginId)) { + spiders.get(pluginId).delConfig(k); + return RetResult.success("删除config结束"); + } else { + return RetResult.fail(pluginId + " 未注册"); + } + } +} diff --git a/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/entity/KVPair.java b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/entity/KVPair.java new file mode 100644 index 0000000..ce2e9c8 --- /dev/null +++ b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/entity/KVPair.java @@ -0,0 +1,16 @@ +package top.dreamcenter.rss.rsssolverweb.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class KVPair { + + private String key; + + private String value; + +} diff --git a/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/entity/PluginInfo.java b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/entity/PluginInfo.java new file mode 100644 index 0000000..65a7a4e --- /dev/null +++ b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/entity/PluginInfo.java @@ -0,0 +1,34 @@ +package top.dreamcenter.rss.rsssolverweb.entity; + +import com.fasterxml.jackson.annotation.JsonFormat; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +import java.util.Date; +import java.util.Hashtable; +import java.util.List; +import java.util.Set; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class PluginInfo { + + private String pluginId; + + private String route; + + private String cron; + + private Set keyList; + + private List configList; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date lastRunAt; + + private String lastRunResult; +} diff --git a/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/entity/RetResult.java b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/entity/RetResult.java new file mode 100644 index 0000000..b8f9afb --- /dev/null +++ b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/entity/RetResult.java @@ -0,0 +1,32 @@ +package top.dreamcenter.rss.rsssolverweb.entity; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.ToString; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class RetResult { + + private Integer code; + + private String msg; + + private T data; + + + public static RetResult success(T data) { + return new RetResult<>(200, null, data); + } + + public static RetResult fail(String msg) { + return new RetResult<>(-1, msg, null); + } + + public static RetResult denied() { + return new RetResult<>(401, "无权访问", null); + } +} diff --git a/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/enums/BrowserEnum.java b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/enums/BrowserEnum.java new file mode 100644 index 0000000..3b082a7 --- /dev/null +++ b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/enums/BrowserEnum.java @@ -0,0 +1,23 @@ +package top.dreamcenter.rss.rsssolverweb.enums; + +import lombok.Data; + +/** + * 浏览器标识 + */ +public enum BrowserEnum { + + CHROME("chrome"), + + EDGE("edge"); + + private final String type; + + public String getType() { + return type; + } + + BrowserEnum(String type) { + this.type = type; + } +} diff --git a/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/exception/RssRuntimeException.java b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/exception/RssRuntimeException.java new file mode 100644 index 0000000..ee85209 --- /dev/null +++ b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/exception/RssRuntimeException.java @@ -0,0 +1,8 @@ +package top.dreamcenter.rss.rsssolverweb.exception; + +public class RssRuntimeException extends RuntimeException{ + + public RssRuntimeException(String message) { + super(message); + } +} diff --git a/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/properties/SystemProperties.java b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/properties/SystemProperties.java new file mode 100644 index 0000000..28587de --- /dev/null +++ b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/properties/SystemProperties.java @@ -0,0 +1,26 @@ +package top.dreamcenter.rss.rsssolverweb.properties; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import top.dreamcenter.rss.rsssolverweb.enums.BrowserEnum; + +@ConfigurationProperties(prefix = "top.dreamcenter.rss.solver") +@Data +public class SystemProperties { + + /** + * 浏览器 + */ + private BrowserEnum browser; + + /** + * 浏览器驱动路径 + */ + private String driverPath; + + /** + * 获取rss根目录 + */ + private String rssRootPath; + +} diff --git a/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/PluginLoader.java b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/PluginLoader.java new file mode 100644 index 0000000..961af76 --- /dev/null +++ b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/PluginLoader.java @@ -0,0 +1,88 @@ +package top.dreamcenter.rss.rsssolverweb.util; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.core.io.UrlResource; +import org.springframework.core.io.support.PropertiesLoaderUtils; +import org.springframework.util.StringUtils; +import top.dreamcenter.rss.rsssolverprotocal.SpiderTemplate; + +import java.io.File; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.*; +import java.util.concurrent.ConcurrentHashMap; + +/** + * 从plugins目录装载插件 + */ +@Slf4j +public class PluginLoader { + /** + * 插件文件夹位置 + */ + private static final String PLUGIN_DIR = "plugins"; + /** + * 插件META-INF配置文件 + */ + private static final String PLUGIN_CONFIG = "META-INF/rss_spider"; + + private final Map> cache = new ConcurrentHashMap<>(); + + /** + * 装载插件 + * @return + * @throws Exception + */ + public Set> loadPlugins() throws Exception { + + // 查看插件文件夹是否存在 + File pluginDir = new File(PLUGIN_DIR); + if (!pluginDir.exists()) { + throw new RuntimeException("Plugin directory does not exist: " + PLUGIN_DIR); + } + + // 加载plugins下的所有jar包 + Set urls = new HashSet<>(); + File[] jarFiles = pluginDir.listFiles(); + if (jarFiles != null) { + for (File file : jarFiles) { + if (file.isFile() && file.getName().endsWith(".jar")) { + urls.add(file.toURI().toURL()); + } + } + } + + // 将jar包资源全部加入到当前ClassLoader + URLClassLoader classLoader = new URLClassLoader(urls.toArray(new URL[0]), getClass().getClassLoader()); + Enumeration plugins = classLoader.getResources(PLUGIN_CONFIG); + + // 从jar包解析需要注册的插件 + while (plugins.hasMoreElements()) { + URL plugin = plugins.nextElement(); + UrlResource resource = new UrlResource(plugin); + Properties properties = PropertiesLoaderUtils.loadProperties(resource); + for (Map.Entry entry : properties.entrySet()) { + String configKey = ((String) entry.getKey()).trim(); + String[] configValues = + StringUtils.commaDelimitedListToStringArray((String) entry.getValue()); + for (String value : configValues) { + cache.computeIfAbsent(configKey, key -> new ArrayList<>()) + .add(value.trim()); + } + } + } + log.info("Plugins loaded: " + cache); + + // 将需要注册的插件进行类加载 + Set> classes = new HashSet<>(); + List list = cache.get("plugins"); + for (String pluginName : list) { + Class clazz = Class.forName(pluginName, true, classLoader); + if (SpiderTemplate.class.isAssignableFrom(clazz) ) { + classes.add(clazz); + } + } + + return classes; + } +} diff --git a/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/ScheduleHelper.java b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/ScheduleHelper.java new file mode 100644 index 0000000..a7d88de --- /dev/null +++ b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/ScheduleHelper.java @@ -0,0 +1,59 @@ +package top.dreamcenter.rss.rsssolverweb.util; + + +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; +import org.springframework.scheduling.support.CronTrigger; +import org.springframework.stereotype.Component; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ScheduledFuture; + +/** + * 插件自动任务注册 + */ +@Component +public class ScheduleHelper { + + private final Map> taskMap = new ConcurrentHashMap<>(); + + private final ThreadPoolTaskScheduler syncScheduler; + + public ScheduleHelper(ThreadPoolTaskScheduler syncScheduler) { + this.syncScheduler = syncScheduler; + } + + /** + * 注册插件自动任务 + * @param spiderHelper + */ + public void registerSchedule(SpiderHelper spiderHelper) { + + String route = spiderHelper.getRoute(); + + if (taskMap.get(route) != null) { + stopSchedule(route); + } + + ScheduledFuture scheduledFuture = syncScheduler.schedule(spiderHelper, new CronTrigger(spiderHelper.getCron())); + taskMap.put(route, scheduledFuture); + } + + /** + * 删除自动任务 + * @param route + * @return + */ + public boolean stopSchedule(String route) { + + if (!taskMap.containsKey(route)) return false; + + ScheduledFuture scheduledFuture = taskMap.get(route); + scheduledFuture.cancel(true); + taskMap.remove(route); + + return true; + } + + +} diff --git a/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/SpiderHelper.java b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/SpiderHelper.java new file mode 100644 index 0000000..6b2e29a --- /dev/null +++ b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/SpiderHelper.java @@ -0,0 +1,171 @@ +package top.dreamcenter.rss.rsssolverweb.util; + +import lombok.extern.slf4j.Slf4j; +import org.openqa.selenium.WebDriver; +import top.dreamcenter.rss.common.entity.RSS; +import top.dreamcenter.rss.common.util.RssHelper; +import top.dreamcenter.rss.rsssolverprotocal.SpiderTemplate; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Paths; +import java.util.Calendar; +import java.util.Date; +import java.util.Hashtable; +import java.util.Set; + +/** + * 单个爬虫助手,一个助手只处理一类rss需求,该类rss需求排版格式一样。 + * + * 具体的,比如对于一个网站bilibili,获取用户的动态列表算是一类需求,获取用户的视频列表算是另外一类需求,须要两个助手分别跑数据,避免干扰。 + * 对于同一个需求,可以加入多个不同的频道,这些频道会在同一个助手中处理,比如查看b站用户的动态列表,不同用户的动态都可以在同一个helper中爬取。 + */ +@Slf4j +public class SpiderHelper implements Runnable{ + + private final WebDriver driver; + private final SpiderTemplate spiderTemplate; + private final String rootPath; + private final String route; + private final String cron; + + private Date lastRunAt; + private String lastRunResult; + + private final Hashtable storage = new Hashtable<>(); + private final Hashtable config = new Hashtable<>(); + + + public SpiderHelper(WebDriver driver, SpiderTemplate spiderTemplate, String rootPath) { + this.driver = driver; + this.spiderTemplate = spiderTemplate; + this.rootPath = rootPath; + this.route = spiderTemplate.getRoute(); + this.cron = spiderTemplate.getCron(); + } + + @Override + public void run() { + try { + + log.warn(spiderTemplate.getRoute() + " started."); + // 分配driver + spiderTemplate.setDriver(driver); + // 分配config + spiderTemplate.setConfig(config); + // 初始化cookies + spiderTemplate.initCookies(); + // 配置路由 + File home = Paths.get(rootPath, route).toFile(); + if (!home.exists()) home.mkdirs(); + // 调用 + storage.forEach((k ,v) -> { + // 执行调取器 + spiderTemplate.caller(k, v); + String path = Paths.get(rootPath ,route, k + ".xml").toString(); + RssHelper rssHelper = new RssHelper(v); + try { + rssHelper.saveToFile(path); + } catch (IOException e) { + e.printStackTrace(); + } + }); + // 设置最后一次成功执行的时间 + lastRunAt = Calendar.getInstance().getTime(); + lastRunResult = "成功"; + } catch (RuntimeException e) { + lastRunAt = Calendar.getInstance().getTime(); + lastRunResult = "FAIL: " + e; + } + + } + + +//////////////////////////////////////////////////////////////////////////////////////////////////////// + /** + * 列出所有的key + * @return + */ + public Set listKey() { + return storage.keySet(); + } + + /** + * 添加一个key + * @param key + */ + public void addKey(String key) { + storage.put(key, new RSS()); + } + + /** + * 删除一个key + * @param key + */ + public void delKey(String key) { + storage.remove(key); + } + + +//////////////////////////////////////////////////////////////////////////////////////////////////////// + /** + * 列出所有配置项 + * @return + */ + public Hashtable listConfig() { + return config; + } + + /** + * 添加额外配置键值对 + * @param k + * @param v + */ + public void addConfig(String k, String v) { + config.put(k, v); + } + + /** + * 删除一个配置项 + * @param k + */ + public void delConfig(String k) { + config.remove(k); + } + + +//////////////////////////////////////////////////////////////////////////////////////////////////////// + /** + * 获取路由 + * @return + */ + public String getRoute() { + return route; + } + + /** + * 获取cron + * @return + */ + public String getCron() { + return cron; + } + +//////////////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * 获取最后执行时间 + * @return + */ + public Date getLastRunAt() { + return lastRunAt; + } + + /** + * 获取最后执行结果 + * @return + */ + public String getLastRunResult() { + return lastRunResult; + } +} diff --git a/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/SpiderHelperFactory.java b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/SpiderHelperFactory.java new file mode 100644 index 0000000..e59ea98 --- /dev/null +++ b/rss-solver-web/src/main/java/top/dreamcenter/rss/rsssolverweb/util/SpiderHelperFactory.java @@ -0,0 +1,70 @@ +package top.dreamcenter.rss.rsssolverweb.util; + +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; +import org.openqa.selenium.edge.EdgeDriver; +import org.openqa.selenium.edge.EdgeOptions; +import org.springframework.stereotype.Component; +import top.dreamcenter.rss.rsssolverprotocal.SpiderTemplate; +import top.dreamcenter.rss.rsssolverweb.enums.BrowserEnum; +import top.dreamcenter.rss.rsssolverweb.exception.RssRuntimeException; +import top.dreamcenter.rss.rsssolverweb.properties.SystemProperties; + +import java.io.File; + +/** + * + */ +@Component +public class SpiderHelperFactory { + + + private final BrowserEnum browser; + private final String rootPath; + + public SpiderHelperFactory(SystemProperties systemProperties) { + browser = systemProperties.getBrowser(); + rootPath = systemProperties.getRssRootPath(); + + // 生成根目录 + File root = new File(rootPath); + if (!root.exists()) root.mkdirs(); + + // 配置驱动 + String driverPath = systemProperties.getDriverPath(); + File file = new File(driverPath); + if (!file.exists()) throw new RssRuntimeException(driverPath + " driver not found!"); + System.setProperty("webdriver." + browser.getType() + ".driver", driverPath); + } + + public SpiderHelper creator(SpiderTemplate spiderTemplate) { + switch (browser) { + case CHROME: { + //访问限制处理 + ChromeOptions options=new ChromeOptions(); + options.addArguments("--remote-allow-origins=*"); + + // 无头模式要设置user-agent,否则会被识别到 + options.addArguments("--headless"); + options.addArguments("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"); + + return new SpiderHelper(new ChromeDriver(options), spiderTemplate, rootPath); + } + case EDGE: { + //访问限制处理 + EdgeOptions options=new EdgeOptions(); + options.addArguments("--remote-allow-origins=*"); + + // 无头模式要设置user-agent,否则会被识别到 + options.addArguments("--headless"); + options.addArguments("user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36"); + + return new SpiderHelper(new EdgeDriver(options), spiderTemplate, rootPath); + } + default: { + throw new RuntimeException(browser.getType() + " Not realized on current project version"); + } + } + } + +} diff --git a/rss-solver-web/src/main/resources/application.properties b/rss-solver-web/src/main/resources/application.properties new file mode 100644 index 0000000..e593fe3 --- /dev/null +++ b/rss-solver-web/src/main/resources/application.properties @@ -0,0 +1,5 @@ +spring.application.name=rss-solver-web + +top.dreamcenter.rss.solver.browser=chrome +top.dreamcenter.rss.solver.driverPath=D:\\tools\\jars\\chromedriver-win64\\chromedriver.exe +top.dreamcenter.rss.solver.rssRootPath=D:\\rss diff --git a/rss-solver-web/src/test/java/top/dreamcenter/rss/rsssolverweb/RssSolverWebApplicationTests.java b/rss-solver-web/src/test/java/top/dreamcenter/rss/rsssolverweb/RssSolverWebApplicationTests.java new file mode 100644 index 0000000..537fa85 --- /dev/null +++ b/rss-solver-web/src/test/java/top/dreamcenter/rss/rsssolverweb/RssSolverWebApplicationTests.java @@ -0,0 +1,13 @@ +package top.dreamcenter.rss.rsssolverweb; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class RssSolverWebApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/rss.iml b/rss.iml new file mode 100644 index 0000000..a6b9e2c --- /dev/null +++ b/rss.iml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file